2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{Ai as t,an as n,un as r,wn as i}from"./control-ui-foundation-CeFMP1Ly.js";import{b as a,dr as o,fr as s,pr as c,w as l}from"./control-ui-core-pH6nakZ-.js";import{W as u,ct as d}from"./lit-runtime-BEtFSUCp.js";import{Gt as f,Ht as p,ct as m,lt as h,pt as g,qt as _,st as v,ut as y}from"./control-ui-core-Br5DB0Zj.js";import{F as b,I as x,L as S}from"./control-ui-boot-wpHCbPL9.js";import{n as C,r as w,t as T}from"./portaled-hovercard-Cn6SxKYU.js";function E(e,n){let r=t(e[n]);if(r===void 0)throw Error(`GitHub response omitted ${n}`);return r}function D(e){return typeof e==`string`&&/^data:image\/(?:gif|jpeg|png|webp);base64,/u.test(e)?e:void 0}function O(e){if(!Array.isArray(e))return;let n=e.flatMap(e=>{if(!i(e))return[];let n=t(e.login);if(!n)return[];let r=D(e.avatarDataUrl);return[r?{login:n,avatarDataUrl:r}:{login:n}]});return n.length>0?n:void 0}function k(e,r){if(!i(r))throw Error(`GitHub response was not an object`);if(r.kind!==e.kind||typeof r.owner!=`string`||r.owner.toLowerCase()!==e.owner.toLowerCase()||typeof r.repo!=`string`||r.repo.toLowerCase()!==e.repo.toLowerCase()||r.number!==e.number)throw Error(`GitHub response did not match the requested link`);return{...e,additions:n(r.additions),avatarDataUrl:D(r.avatarDataUrl),changedFiles:n(r.changedFiles),closedAt:t(r.closedAt),coAuthorCount:n(r.coAuthorCount),coAuthors:O(r.coAuthors),comments:n(r.comments),createdAt:E(r,`createdAt`),deletions:n(r.deletions),draft:typeof r.draft==`boolean`?r.draft:void 0,kind:e.kind,login:t(r.login)??`ghost`,mergedAt:t(r.mergedAt),number:e.number,owner:e.owner,repo:e.repo,state:E(r,`state`),stateReason:t(r.stateReason),title:E(r,`title`),updatedAt:E(r,`updatedAt`)}}function A(e){return e.kind===`pull`?e.mergedAt?{label:_(`githubPreview.states.merged`),tone:`purple`}:e.draft&&e.state===`open`?{label:_(`githubPreview.states.draft`),tone:`muted`}:e.state===`open`?{label:_(`githubPreview.states.open`),tone:`open`}:{label:_(`githubPreview.states.closed`),tone:`danger`}:e.state===`open`?{label:_(`githubPreview.states.open`),tone:`open`}:e.stateReason===`not_planned`?{label:_(`githubPreview.states.notPlanned`),tone:`muted`}:{label:_(`githubPreview.states.closed`),tone:`purple`}}function j(e,t,n,r){let i=document.createElement(t);return i.className=n,i.textContent=r,e.append(i),i}function M(e){let t=document.createElement(`img`);return t.className=`github-link-hovercard__avatar`,t.alt=``,t.decoding=`async`,t.referrerPolicy=`no-referrer`,t.src=e,t}function N(e,t){let n=t.coAuthors??[],r=t.coAuthorCount??n.length;if(n.length===0)return;let i=document.createElement(`span`);i.className=`github-link-hovercard__coauthors`;let a=0;for(let e of n)e.avatarDataUrl&&(i.append(M(e.avatarDataUrl)),a+=1);let o=Math.max(0,r-a);if(o>0){let e=document.createElement(`span`);e.className=`github-link-hovercard__coauthors-more`,e.textContent=`+${o}`,i.append(e)}if(i.childElementCount===0)return;let s=_(`githubPreview.coAuthors`,{logins:n.map(e=>e.login).join(`, `)});i.title=s,i.role=`img`,i.ariaLabel=s,e.after(i)}function P(e,t,n){j(e,`span`,`github-link-hovercard__metric ${t}`,n)}function F(e,t,n,r){let i=document.createElement(`a`);return i.className=t,i.href=n,i.target=o,i.rel=s(),i.textContent=r,e.append(i),i}function I(e){e.replaceChildren(),e.dataset.loading=`true`,e.removeAttribute(`data-state`);let t=_(`githubPreview.loading`);e.setAttribute(`aria-label`,t),j(e,`div`,`github-link-hovercard__loading`,t)}function L(e){e.replaceChildren(),e.dataset.loading=`false`,e.dataset.state=`unavailable`;let t=_(`githubPreview.unavailable`);e.setAttribute(`aria-label`,t),j(e,`div`,`github-link-hovercard__unavailable`,t)}function R(e,t){e.replaceChildren(),e.dataset.loading=`false`;let n=A(t);e.dataset.state=n.tone;let r=document.createElement(`div`);r.className=`github-link-hovercard__header`;let i=document.createElement(`span`);i.className=`github-link-hovercard__state`,i.dataset.tone=n.tone;let o=document.createElement(`span`);o.className=`github-link-hovercard__state-dot`,o.setAttribute(`aria-hidden`,`true`),i.append(o,document.createTextNode(n.label)),r.append(i),F(r,`github-link-hovercard__repo`,t.href,`${t.owner}/${t.repo} #${t.number}`),j(r,`time`,`github-link-hovercard__time`,a(Date.parse(t.updatedAt)));let s=document.createElement(`div`);s.className=`github-link-hovercard__footer`;let c=F(s,`github-link-hovercard__author`,m(t.login),t.login);t.avatarDataUrl&&c.prepend(M(t.avatarDataUrl)),N(c,t);let l=document.createElement(`span`);if(l.className=`github-link-hovercard__metrics`,t.kind===`pull`){P(l,`github-link-hovercard__metric--additions`,`+${t.additions??0}`),P(l,`github-link-hovercard__metric--deletions`,`−${t.deletions??0}`);let e=t.changedFiles??0;F(l,`github-link-hovercard__metric github-link-hovercard__metric--files`,v(t),_(e===1?`githubPreview.file`:`githubPreview.files`,{count:String(e)}))}else{let e=t.comments??0;P(l,``,_(e===1?`githubPreview.comment`:`githubPreview.comments`,{count:String(e)}))}s.append(l),e.append(r),F(e,`github-link-hovercard__title`,t.href,t.title),e.append(s),e.setAttribute(`aria-label`,_(`githubPreview.ariaLabel`,{state:n.label,kind:t.kind===`pull`?_(`githubPreview.pullRequest`):_(`githubPreview.issue`),repo:`${t.owner}/${t.repo}`,number:String(t.number),title:t.title,author:t.login}))}var z,B,V,H,U;function W(){return(W=e((()=>{b(),r(),u(),p(),c(),l(),y(),w(),z=3e5,B=3e4,V=100,H=0,U=class extends d{constructor(...e){super(...e),this.client=null,this.cache=new Map,this.activeAnchor=null,this.activeTarget=null,this.activeTrigger=null,this.hovercard=new T(()=>this.close()),this.renderedPreview=null,this.renderedUnavailable=!1,this.stopI18n=null,this.suppressFocusOpen=!1,this.previewTask=new x(this,{autoRun:!1,args:()=>[this.activeTarget],task:([e],{signal:t})=>e?this.loadPreview(e,t):S,onComplete:e=>{let t=this.hovercard.card;t&&(this.renderedPreview=e,R(t,e),this.hovercard.position())},onError:()=>{let e=this.hovercard.card;e&&(this.renderedUnavailable=!0,L(e),this.hovercard.position())}}),this.activeAnchorObserver=new MutationObserver(()=>{let e=this.activeAnchor;e&&!this.contains(e)&&this.close()}),this.handleLocaleChange=()=>{let e=this.hovercard.card;e&&(this.renderedPreview?R(e,this.renderedPreview):this.renderedUnavailable?L(e):I(e),this.hovercard.position())},this.handlePointerOver=e=>{if(e.pointerType===`touch`)return;let t=h(e),n=t?g(t.href):null;!t||!n||this.activateFromBootstrap(t,n,`pointer`,250)},this.handlePointerOut=e=>{let t=h(e);!t||t!==this.activeAnchor||e.relatedTarget instanceof Node&&t.contains(e.relatedTarget)||(this.hovercard.pointerInside=!1,this.hovercard.scheduleClose())},this.handleCardPointerEnter=()=>{this.hovercard.pointerOverCard=!0,this.hovercard.clearClose()},this.handleCardPointerLeave=()=>{this.hovercard.pointerOverCard=!1,this.activeTrigger===`pointer`&&(this.hovercard.cardFocusInside=!1),this.hovercard.scheduleClose()},this.handleCardFocusIn=()=>{this.hovercard.cardFocusInside=!0,this.hovercard.clearClose()},this.handleCardFocusOut=e=>{e.relatedTarget instanceof Node&&this.hovercard.card?.contains(e.relatedTarget)||(this.hovercard.cardFocusInside=!1,this.hovercard.scheduleClose())},this.handleFocusIn=e=>{if(this.suppressFocusOpen)return;let t=h(e),n=t?g(t.href):null;!t||!n||this.activateFromBootstrap(t,n,`focus`,0)},this.handleFocusOut=e=>{this.activeAnchor&&(e.relatedTarget instanceof Node&&this.activeAnchor.contains(e.relatedTarget)||(this.hovercard.focusInside=!1,this.hovercard.scheduleClose()))},this.handleKeyDown=e=>{if(e.key===`Escape`){this.close();return}if(e.key!==`Tab`||e.shiftKey||e.target!==this.activeAnchor)return;let[t]=this.cardFocusables();t&&(e.preventDefault(),t.focus())},this.handleCardKeyDown=e=>{if(e.key!==`Escape`&&e.key!==`Tab`)return;let t=this.cardFocusables(),n=e.shiftKey?t[0]:t.at(-1);if(e.key===`Tab`&&document.activeElement!==n)return;e.preventDefault();let r=this.activeAnchor;this.close(),this.suppressFocusOpen=!0,r?.focus({preventScroll:!0}),this.suppressFocusOpen=!1},this.handleClick=()=>{this.close()}}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.style.display=`contents`,this.addEventListener(`pointerover`,this.handlePointerOver),this.addEventListener(`pointerout`,this.handlePointerOut),this.addEventListener(`focusin`,this.handleFocusIn),this.addEventListener(`focusout`,this.handleFocusOut),this.addEventListener(`keydown`,this.handleKeyDown),this.addEventListener(`click`,this.handleClick),this.stopI18n??=f.subscribe(this.handleLocaleChange)}disconnectedCallback(){this.removeEventListener(`pointerover`,this.handlePointerOver),this.removeEventListener(`pointerout`,this.handlePointerOut),this.removeEventListener(`focusin`,this.handleFocusIn),this.removeEventListener(`focusout`,this.handleFocusOut),this.removeEventListener(`keydown`,this.handleKeyDown),this.removeEventListener(`click`,this.handleClick),this.stopI18n?.(),this.stopI18n=null,this.close(),super.disconnectedCallback()}cardFocusables(){return[...this.hovercard.card?.querySelectorAll(`a[href]`)??[]]}activateFromBootstrap(e,t,n,r){this.activate(e,t,r),this.activeTrigger=n,n===`pointer`?this.hovercard.pointerInside=!0:this.hovercard.focusInside=!0}activate(e,t,n){(e!==this.activeAnchor||this.activeTarget?.href!==t.href)&&(this.close(),this.activeAnchor=e,this.activeTarget=t,this.hovercard.markTrigger(e),this.activeAnchorObserver.observe(this,{childList:!0,subtree:!0}),this.hovercard.scheduleOpen(n,()=>this.show(e,t)))}show(e,t){if(this.activeAnchor!==e||this.activeTarget?.href!==t.href)return;H+=1;let n=C(`openclaw-github-hovercard-${H}`,`github-link-hovercard`);this.renderedPreview=null,this.renderedUnavailable=!1,I(n),n.addEventListener(`pointerenter`,this.handleCardPointerEnter),n.addEventListener(`pointerleave`,this.handleCardPointerLeave),n.addEventListener(`focusin`,this.handleCardFocusIn),n.addEventListener(`focusout`,this.handleCardFocusOut),n.addEventListener(`keydown`,this.handleCardKeyDown),this.hovercard.mount(e,n,`vertical`),this.previewTask.run([t])}loadPreview(e,t){let n=`${e.kind}:${e.owner.toLowerCase()}/${e.repo.toLowerCase()}#${e.number}`,r=Date.now(),i=this.cache.get(n);if(i&&i.expiresAt>r)return this.cache.delete(n),this.cache.set(n,i),i.promise;i&&this.cache.delete(n);let a={expiresAt:r+z,promise:(async()=>{if(!this.client)throw Error(`GitHub preview requires a connected Gateway`);return k(e,await this.client.request(`controlUi.githubPreview`,{kind:e.kind,number:e.number,owner:e.owner,repo:e.repo},{signal:t}))})().catch(e=>{throw a.expiresAt=Date.now()+B,e})};for(this.cache.set(n,a);this.cache.size>V;){let e=this.cache.keys().next().value;if(!e)break;this.cache.delete(e)}return a.promise}close(){this.hovercard.reset(),this.activeAnchorObserver.disconnect(),this.previewTask.run([null]),this.renderedPreview=null,this.renderedUnavailable=!1,this.activeAnchor=null,this.activeTarget=null,this.activeTrigger=null}}})))()}W();export{U as GitHubLinkHovercardProvider};
|
||
//# sourceMappingURL=github-link-hovercard.runtime-CDrMcW--.js.map
|