chatlab-cli 0.30.1-beta.2 → 0.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist-web/assets/{BufferResource-DPkMC1wo.js → BufferResource-CYSOCeE0.js} +1 -1
  2. package/dist-web/assets/{CanvasRenderer-DokMtSX9.js → CanvasRenderer-j7Z_ij_m.js} +1 -1
  3. package/dist-web/assets/{DebugToolsPanel.vue_vue_type_script_setup_true_lang-Ceg-0WOD.js → DebugToolsPanel.vue_vue_type_script_setup_true_lang-Bk9RvIsW.js} +4 -4
  4. package/dist-web/assets/{Filter-Bo_p3BVX.js → Filter-BgGyBeXz.js} +1 -1
  5. package/dist-web/assets/{MessageExportModal-Ch0tqQix.js → MessageExportModal-BkEhC8s3.js} +1 -1
  6. package/dist-web/assets/{PageHeader-CRlmZoKw.js → PageHeader-CUwv2AFR.js} +1 -1
  7. package/dist-web/assets/{RelationshipGalaxyCanvas-W_6XfPOG.js → RelationshipGalaxyCanvas-D2owKyDp.js} +3 -3
  8. package/dist-web/assets/{RelationshipGalaxyThreeCanvas-bB1nCwQ_.js → RelationshipGalaxyThreeCanvas-DfJ2x8y9.js} +1 -1
  9. package/dist-web/assets/{RenderTargetSystem-obRi6fMT.js → RenderTargetSystem-BQ__RbzR.js} +1 -1
  10. package/dist-web/assets/{WebGLRenderer-xcDlnrCZ.js → WebGLRenderer-DuThUm1R.js} +1 -1
  11. package/dist-web/assets/{WebGPURenderer-DbAOiiYr.js → WebGPURenderer-d8BwTpxP.js} +1 -1
  12. package/dist-web/assets/{browserAll-DVRJimO8.js → browserAll-t_tpJM2L.js} +1 -1
  13. package/dist-web/assets/{electron-BSGRuxX9.js → electron-6T3FvCfK.js} +1 -1
  14. package/dist-web/assets/{fetch-ChAsglT5.js → fetch-BLTlXcRA.js} +1 -1
  15. package/dist-web/assets/{fetch-BmxMf3I6.js → fetch-BVM5kQ6-.js} +1 -1
  16. package/dist-web/assets/{fetch-B2alAySK.js → fetch-BgIWhYDV.js} +1 -1
  17. package/dist-web/assets/{fetch-7UN4YW3A.js → fetch-BgeRLaoA.js} +1 -1
  18. package/dist-web/assets/{fetch-t0WsRKHW.js → fetch-C7rlHKE7.js} +1 -1
  19. package/dist-web/assets/{fetch-DWEjTdcP.js → fetch-D0ccqGk_.js} +1 -1
  20. package/dist-web/assets/{fetch-BSShKcMt.js → fetch-DFifsv8L.js} +1 -1
  21. package/dist-web/assets/{fetch-CR5UDFW7.js → fetch-DdoIAbX4.js} +1 -1
  22. package/dist-web/assets/{fetch-DfoxedXR.js → fetch-HpiZrx8C.js} +1 -1
  23. package/dist-web/assets/{fetch-B2rVTMYY.js → fetch-Y-LYZmiT.js} +1 -1
  24. package/dist-web/assets/{index-BmXNdMV5.js → index-B5YKZflT.js} +2 -2
  25. package/dist-web/assets/{index-BVUTV9_w.js → index-BA87rT8F.js} +1 -1
  26. package/dist-web/assets/{index-DT0Bu8mH.js → index-CQsrsY5d.js} +3 -3
  27. package/dist-web/assets/{index-BsXljrlg.js → index-CdsKtFEJ.js} +3 -3
  28. package/dist-web/assets/index-DraLHiEK.js +173 -0
  29. package/dist-web/assets/{index-CZv0ZOID.js → index-IL5tkxhM.js} +2 -2
  30. package/dist-web/assets/{index-DjcWJv4b.js → index-Tgk7RCvc.js} +1 -1
  31. package/dist-web/assets/{index-CfgDqd_z.js → index-cyh3gOBe.js} +1 -1
  32. package/dist-web/assets/{index-CtVR_KuP.js → index-g8yqhgfj.js} +1 -1
  33. package/dist-web/assets/{web-knHSvvNj.js → web-DAgXT8gQ.js} +1 -1
  34. package/dist-web/assets/{webworkerAll-CMKoykfD.js → webworkerAll-CoXPTsvw.js} +1 -1
  35. package/dist-web/index.html +1 -1
  36. package/package.json +1 -1
  37. package/dist-web/assets/index-CQ5lRCHt.js +0 -173
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RelationshipGalaxyThreeCanvas-bB1nCwQ_.js","assets/vendor-reka-ui-CzM4kDQ7.js","assets/relationship-galaxy-viewport-Cwfa51ER.js","assets/index-BsXljrlg.js","assets/vendor-nuxt-ui-DaLxYaC4.js","assets/vendor-snapdom-XnBoh1gd.js","assets/index-B4l3rHie.css","assets/LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js","assets/people-page-header-Mupn-U_b.js","assets/RelationshipGalaxyThreeCanvas-BluPHjCR.css","assets/RelationshipGalaxyCanvas-W_6XfPOG.js"])))=>i.map(i=>d[i]);
2
- import{_ as Be}from"./vendor-snapdom-XnBoh1gd.js";import{h as xt,c as wt,d as _t}from"./vendor-nuxt-ui-DaLxYaC4.js";import{p as St,w as ee,d as Tt,z as Ct,P as k,a5 as o,H as te,u,L as P,au as Rt,K as ue,bz as Nt,T as r,Z as Ne,a3 as Ie,U as L,Q as Pe,b as g,h as v,n as F,G as m,R as Ee,a0 as It,bA as He}from"./vendor-reka-ui-CzM4kDQ7.js";import{u as Pt,m as Et,j as Lt,n as Le,C as Mt}from"./index-BsXljrlg.js";import{_ as Kt}from"./LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js";import{u as Vt}from"./people-page-header-Mupn-U_b.js";const At=10,We=80,Gt=2880*60*60,Ue=.1;function Ye(a,i,f={}){if(!i)return{items:[],total:0,hasMore:!1};const y=new Map(a.nodes.map(h=>[h.key,h])),t=a.edges.flatMap(h=>{if(h.sourceKey!==i&&h.targetKey!==i)return[];const w=h.sourceKey===i?h.targetKey:h.sourceKey,V=y.get(w);return V?[{node:V,edge:h,connectionScore:0}]:[]}),C=t.reduce((h,w)=>Math.max(h,w.edge.lastInteractionTs??0),0),M=new Map(t.map(h=>[h,Me(h.edge,C)]));for(const h of t)h.connectionScore=Ft(M.get(h)??0);t.sort((h,w)=>$t(h,w,C));const K=f.collapsedLimit??At;return{items:f.expanded?t:t.slice(0,K),total:t.length,hasMore:!f.expanded&&t.length>K}}function zt(a,i,f={}){const y=new Set;if(!i||!a.nodes.some(C=>C.key===i))return y;y.add(i);const t=Ye(a,i,{collapsedLimit:f.limit??We});for(const C of t.items)y.add(C.node.key);return y}function fo(a,i,f={}){if(!i||!a.nodes.some(t=>t.key===i))return a;const y=zt(a,i,f);return{nodes:a.nodes.filter(t=>y.has(t.key)),edges:a.edges.filter(t=>y.has(t.sourceKey)&&y.has(t.targetKey)),communities:a.communities}}function Ft(a){return a<=0?0:Math.max(1,Math.round(a))}function $t(a,i,f){const y=Me(i.edge,f),t=Me(a.edge,f);if(y!==t)return y-t;if(i.edge.weight!==a.edge.weight)return i.edge.weight-a.edge.weight;const C=i.edge.lastInteractionTs??0,M=a.edge.lastInteractionTs??0;return C!==M?C-M:a.node.rank!==i.node.rank?a.node.rank-i.node.rank:a.node.key.localeCompare(i.node.key)}function Me(a,i){if(!a.lastInteractionTs||i<=0)return a.weight;const f=Math.max(0,i-a.lastInteractionTs),y=Ue+(1-Ue)*Math.pow(.5,f/Gt);return a.weight*y}function qe(a){return a.selectedKey&&a.selectedKey===a.loadingNeighborhoodKey?a.currentCanvasSelectedKey:a.selectedKey}function Ot(a){return a.selectedKey?a.isNeighborhoodMode?a.selectedKey!==a.neighborhoodContactKey:!0:!1}function Dt(a){return a.neighborhoodTask?.status==="running"?a.neighborhoodTask:a.graphTask?.status==="running"?a.graphTask:a.isNeighborhoodMode&&a.neighborhoodTask?a.neighborhoodTask:a.graphTask??a.neighborhoodTask??null}function jt(a){return a.nextTaskStatus==="running"?{type:"continue-polling"}:a.previousTaskStatus==="running"&&a.nextTaskStatus==="succeeded"&&a.neighborhoodContactKey?{type:"refresh-neighborhood",key:a.neighborhoodContactKey}:{type:"stop-polling"}}function Bt(a){return a.loadError?a.loadError:a.isTaskFailed&&a.statusText?a.statusText:a.emptyText}const Ht=new RegExp("\\p{Script=Han}","u");function Qe(a){const i=a?.trim()??"";if(!i)return"*";const f=Array.from(i),y=[...f].reverse().find(t=>Ht.test(t));return y?`**${y}`:f.length===1?"*":f.length===2?`${f[0]}***`:`${f[0]}***${f.at(-1)}`}function Ut(){return"*"}const qt={class:"flex min-h-0 flex-1 overflow-hidden bg-white text-gray-900 dark:bg-page-dark dark:text-gray-100"},Qt={class:"relative min-h-0 min-w-0 flex-1 overflow-hidden bg-[#05070d] dark:bg-page-dark"},Wt={class:"absolute left-4 top-4 z-20 flex max-w-[calc(100%-2rem)] flex-wrap items-center gap-2"},Yt={class:"relative w-28 max-w-full sm:w-32 lg:w-36"},Zt={key:0,class:"absolute left-0 top-full z-30 mt-2 max-h-80 w-72 overflow-y-auto rounded-2xl border border-gray-200/80 bg-white/95 p-2 shadow-2xl shadow-black/25 backdrop-blur-xl scrollbar-thin dark:border-white/10 dark:bg-page-dark/95"},Jt={class:"px-2 pb-1.5 pt-0.5 text-[11px] font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400"},Xt={class:"space-y-1"},ea=["disabled","onClick"],ta={class:"min-w-0 flex-1"},aa={class:"block truncate text-sm font-semibold text-gray-900 transition-colors group-hover:text-sky-600 dark:text-white dark:group-hover:text-sky-400"},oa={class:"block truncate text-[11px] text-gray-500 dark:text-gray-400"},na={key:0,class:"shrink-0 rounded-md bg-sky-100/60 px-1.5 py-0.5 text-[10px] font-semibold text-sky-600 dark:bg-sky-500/15 dark:text-sky-400"},sa={key:2,class:"absolute bottom-6 left-1/2 z-20 flex max-w-[min(560px,calc(100%-2rem))] -translate-x-1/2 items-center gap-2.5 rounded-2xl border border-sky-500/20 bg-[#090d16]/85 px-4 py-2.5 text-center text-xs font-semibold text-sky-200 shadow-2xl shadow-sky-950/30 backdrop-blur-md animate-fade-in"},ra={key:4,class:"absolute inset-0 flex items-center justify-center text-sm font-medium text-gray-400"},la={key:5,class:"dark absolute inset-x-3 bottom-3 z-20 flex max-h-[70vh] flex-col overflow-hidden rounded-2xl border border-white/5 bg-page-dark/10 text-white shadow-2xl shadow-black/20 backdrop-blur-md md:inset-x-auto md:bottom-4 md:right-4 md:top-4 md:max-h-none md:w-[360px]"},ia={key:0,class:"flex min-h-0 flex-1 flex-col gap-3 px-4 pb-4 pt-5"},ca={class:"shrink-0 space-y-2.5"},ua={class:"flex items-center gap-3 pr-8"},da={class:"min-w-0 flex-1"},ha={class:"flex min-w-0 items-center gap-1.5"},pa={class:"truncate text-base font-bold text-gray-900 dark:text-white"},va={class:"truncate text-xs text-gray-500 dark:text-gray-400"},ga={class:"grid grid-cols-3 gap-1 text-xs"},fa={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},ma={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},ya={class:"flex min-w-0 items-baseline gap-0.5"},ba={class:"font-mono text-sm font-bold leading-4 text-sky-600 dark:text-sky-400"},ka={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},xa={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},wa={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},_a={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},Sa={class:"block truncate font-mono text-sm font-bold leading-4 text-gray-900 dark:text-white"},Ta={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},Ca={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},Ra={class:"block truncate font-mono text-sm font-bold leading-4 text-gray-900 dark:text-white"},Na={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},Ia={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},Pa={class:"block truncate font-mono text-sm font-bold leading-4 text-gray-900 dark:text-white"},Ea={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},La={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},Ma={class:"block truncate text-[11px] font-semibold leading-4 text-gray-900 dark:text-white"},Ka={class:"flex min-h-0 flex-1 flex-col gap-2"},Va={class:"flex min-h-0 flex-1 flex-col overflow-hidden rounded-xl border border-gray-100/80 bg-gray-50/25 p-2.5 shadow-sm dark:border-white/5 dark:bg-white/2"},Aa={class:"mb-2 flex shrink-0 items-center justify-between gap-3 pl-1 pr-3"},Ga={class:"flex min-w-0 items-center gap-2"},za={class:"truncate text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400"},Fa={class:"shrink-0 font-mono text-[10px] font-bold text-gray-400 dark:text-gray-500"},$a={class:"w-14 shrink-0 text-right text-[10px] font-semibold uppercase tracking-wider text-gray-400 dark:text-gray-500"},Oa={key:0,class:"min-h-0 flex-1 space-y-0.5 overflow-y-auto pr-1 scrollbar-thin"},Da=["onClick"],ja={class:"min-w-0 flex-1"},Ba={class:"block truncate text-[13px] font-semibold leading-4 text-gray-900 transition-colors group-hover:text-sky-600 dark:text-white dark:group-hover:text-sky-400"},Ha={class:"flex w-14 shrink-0 justify-end"},Ua={class:"font-mono text-[10px] font-bold text-gray-500 dark:text-gray-400"},qa={key:1,class:"py-4 text-center text-xs text-gray-400 dark:text-gray-500"},Qa={key:0,class:"flex min-h-0 flex-1 flex-col overflow-hidden rounded-xl border border-gray-100/80 bg-gray-50/25 p-2.5 shadow-sm dark:border-white/5 dark:bg-white/2"},Wa={class:"mb-2 flex shrink-0 items-center justify-between gap-3 pl-1 pr-3"},Ya={class:"flex min-w-0 items-center gap-2"},Za={class:"truncate text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400"},Ja={class:"shrink-0 font-mono text-[10px] font-bold text-gray-400 dark:text-gray-500"},Xa={class:"w-14 shrink-0 text-right text-[10px] font-semibold uppercase tracking-wider text-gray-400 dark:text-gray-500"},eo={class:"min-h-0 flex-1 space-y-0.5 overflow-y-auto pr-1 scrollbar-thin"},to={class:"flex min-w-0 items-center gap-2"},ao={class:"flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-white/45 shadow-sm dark:bg-white/5"},oo={class:"truncate font-semibold leading-4 text-gray-700 dark:text-gray-200"},no={class:"flex w-14 shrink-0 justify-end"},so={class:"font-mono text-[10px] font-bold text-gray-500 dark:text-gray-400"},ro=1400,lo=392,io=St({__name:"index",setup(a){const i={nodes:[],edges:[],communities:[]},f=He(()=>Be(()=>import("./RelationshipGalaxyThreeCanvas-bB1nCwQ_.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))),y=He(()=>Be(()=>import("./RelationshipGalaxyCanvas-W_6XfPOG.js").then(e=>e.as),__vite__mapDeps([10,5,3,1,4,6,2]))),{t,locale:C}=Pt(),M=Et(),K=Lt(),G=g("1y"),h=g("panorama"),w=g(""),V=g(""),$=g(!1),ae=g(""),p=g(null),A=g(!1),O=g(null),R=g(null),de=g(!1),he=g(!1),U=g(!1),Ke=g(!1),z=g(null),_=g(null),E=g(!1),oe=g("3d"),q=g(""),Q=g(0),D=g(0),S=g(null),ne=g(null);let se=null,pe=null,W=null,Y=null,re=null,ve=!1;const Ze=v(()=>new Intl.NumberFormat(C.value)),Je=v(()=>Mt.map(e=>({label:t(`relationships.timeRange.${e}`),value:e}))),Xe=v(()=>[{label:t("relationships.graphScope.panorama"),value:"panorama"},{label:t("relationships.graphScope.close"),value:"close"},{label:t("relationships.graphScope.friends"),value:"friends"}]),N=v(()=>R.value?.graph??O.value?.graph??i),ge=v(()=>!!R.value),fe=v(()=>N.value.nodes.length>0),Z=v(()=>Dt({graphTask:O.value?.task??null,neighborhoodTask:R.value?.task??null,isNeighborhoodMode:ge.value})),J=v(()=>Z.value?.status==="running"),Ve=v(()=>Z.value?.status==="failed"),et=v(()=>O.value?.cache.status??R.value?.cache.status),Ae=v(()=>O.value?.searchResults??[]),Ge=v(()=>w.value.trim().length>0),tt=v(()=>Ge.value&&w.value.trim()===ae.value&&$.value&&Ae.value.length>0),at=v(()=>(de.value||J.value)&&!fe.value),ot=v(()=>J.value&&fe.value),b=v(()=>p.value?N.value.nodes.find(e=>e.key===p.value)??R.value?.contact??null:null),ze=v(()=>A.value&&!!b.value),me=v(()=>ze.value&&Ke.value?lo:0),nt=v(()=>Ot({selectedKey:p.value,isNeighborhoodMode:ge.value,neighborhoodContactKey:R.value?.contact?.key??null})),le=v(()=>Ye(N.value,p.value,{collapsedLimit:We})),ye=v(()=>({nodes:N.value.nodes.length,edges:N.value.edges.length,communities:N.value.communities.length})),be=v(()=>[...N.value.communities].sort((e,n)=>n.size-e.size).slice(0,8)),ke=v(()=>et.value==="stale"&&J.value?t("relationships.task.updating"):J.value?ut(Z.value):Ve.value?Z.value?.lastError||t("relationships.task.failed"):""),st=v(()=>Bt({loadError:q.value,isTaskFailed:Ve.value,statusText:ke.value,emptyText:t("relationships.empty")}));function x(e){return Ze.value.format(e)}function rt(e){return Math.round(e*100).toString()}function lt(){const e=le.value.items.length,n=le.value.total;return n<=e?x(n):`${x(e)} / ${x(n)}`}function it(e){return e?new Date(e*1e3).toLocaleDateString():t("relationships.detail.emptyValue")}function xe(e){return e.kind==="owner"?t("relationships.owner.avatarText"):E.value?Ut():(e.displayName||e.platformId||"?").slice(0,1)}function we(e){return e.kind==="owner"?e.avatar:E.value?null:e.avatar}function j(e){if(e.kind==="owner")return t("relationships.owner.me");const n=e.displayName||e.platformId||e.key;return E.value?Qe(n):n}function ct(e){const n=e.platformId||e.key;return E.value?Qe(n):n}function Fe(e){return e.kind==="owner"?t("relationships.owner.type"):e.friendSource==="manual"?t("relationships.pool.manualFriend"):e.pool==="friend"?t("relationships.pool.friend"):t("relationships.pool.nonFriend")}function ut(e){return t("relationships.task.running",{current:x(e?.processedSessions??0),total:x(e?.totalSessions??0)})}function $e(e){const n=Oe(e,h.value);se&&se!==n&&ie();const d=O.value;O.value=d&&se===n?{...e,graph:d.graph}:e,se=n}function dt(e){const n=Oe(e,`neighborhood:${e.contact?.key??""}`),d=R.value;R.value=d&&pe===n?{...e,graph:d.graph}:e,pe=n}function B(){R.value=null,pe=null}function Oe(e,n){const d=e.graph;let s=2166136261;s=T(s,n),s=T(s,e.algorithmVersion),s=T(s,e.cache.signature??""),s=I(s,e.timeRange.startTs??0),s=T(s,e.timeRange.preset);for(const c of d.nodes)s=T(s,c.key),s=T(s,c.pool),s=T(s,c.friendSource??""),s=I(s,c.rank),s=I(s,Math.round(c.score*1e6)),s=I(s,c.labelVisibility),s=I(s,Math.round(c.x*100)),s=I(s,Math.round(c.y*100)),s=I(s,Math.round(c.size*100));for(const c of d.edges)s=T(s,c.id),s=T(s,c.sourceKey),s=T(s,c.targetKey),s=I(s,Math.round(c.weight*1e6)),s=I(s,c.visibility);for(const c of d.communities)s=T(s,c.id),s=I(s,c.size),s=T(s,c.color);return`${n}:${d.nodes.length}:${d.edges.length}:${d.communities.length}:${s>>>0}`}function T(e,n){for(let d=0;d<n.length;d+=1)e^=n.charCodeAt(d),e=Math.imul(e,16777619);return e}function I(e,n){return T(e,String(n))}function _e(){W&&(clearInterval(W),W=null)}function H(){D.value+=1,U.value=!1,z.value=null}function De(){p.value||ne.value||(ne.value=S.value?.captureView()??null)}function ie(){ne.value=null}function ht(){const e=ne.value;ie(),F(()=>{e&&S.value?.restoreView(e)===!0||S.value?.fitView(),F(()=>{ve=!1})})}function Se(e){if(e?.status==="running"){W||(W=setInterval(()=>{X({silent:!0,preserveNeighborhood:!0})},ro));return}_e()}async function X(e={}){const n=Q.value+1;Q.value=n;const d=Z.value?.status??null,s=e.preserveNeighborhood?R.value?.contact?.key??null:null;e.silent||(de.value=!0),e.preserveNeighborhood||(H(),B()),q.value="";try{const c=await M.getPeopleRelationships({acceptStale:!0,timeRangePreset:G.value,graphScope:h.value,query:V.value.trim()||void 0});if(n!==Q.value)return;$e(c),ae.value=V.value.trim(),p.value&&!N.value.nodes.some(Re=>Re.key===p.value)&&(p.value=null,_.value=null,A.value=!1);const l=jt({previousTaskStatus:d,nextTaskStatus:c.task?.status??null,neighborhoodContactKey:s});Se(c.task),l.type==="refresh-neighborhood"&&ce(l.key)}catch(c){if(n!==Q.value)return;q.value=String(c),K.fail(t("relationships.toast.loadFailed"),{description:String(c)}),_e()}finally{n===Q.value&&(de.value=!1)}}async function pt(){he.value=!0,q.value="";try{const e=await M.recomputePeopleRelationships({timeRangePreset:G.value,graphScope:h.value,query:V.value.trim()||void 0});$e(e),ae.value=V.value.trim(),H(),B(),p.value=null,_.value=null,A.value=!1,Se(e.task),K.success(t("relationships.toast.recomputeStarted"))}catch(e){K.fail(t("relationships.toast.recomputeFailed"),{description:String(e)})}finally{he.value=!1}}const vt=v(()=>({title:t("layout.relationships"),description:t("relationships.subtitle"),icon:"i-lucide-git-fork",iconClass:"bg-primary-600 text-white dark:bg-primary-500 dark:text-white shadow-sm",action:{label:t("relationships.actions.recompute"),icon:"i-lucide-refresh-cw",loading:he.value,disabled:J.value,class:"border border-sky-100 hover:border-sky-200 dark:border-sky-950/30 dark:hover:border-sky-900/50",onClick:pt},stats:[{id:"nodes",label:t("relationships.stats.nodes"),value:x(ye.value.nodes)},{id:"edges",label:t("relationships.stats.edges"),value:x(ye.value.edges)},{id:"communities",label:t("relationships.stats.communities"),value:x(ye.value.communities),dividerBefore:!0}]}));Vt(vt);async function ce(e){const n=D.value+1;D.value=n,U.value=!0,z.value=e,q.value="";try{const d=await M.getPeopleRelationshipNeighborhood(e,{acceptStale:!0,timeRangePreset:G.value});if(n!==D.value)return;dt(d),p.value=d.contact?.key??e,_.value=p.value,Se(d.task),await F(),S.value?.fitView()}catch(d){if(n!==D.value)return;K.fail(t("relationships.toast.neighborhoodFailed"),{description:String(d)})}finally{n===D.value&&(U.value=!1,z.value=null)}}async function gt(){p.value&&await ce(p.value)}async function ft(e){if(De(),$.value=!1,e.inCoreGraph||(z.value=e.key),p.value=e.key,A.value=!0,_.value=qe({selectedKey:p.value,loadingNeighborhoodKey:z.value,currentCanvasSelectedKey:_.value}),!e.inCoreGraph){await ce(e.key);return}H(),B(),await F(),S.value?.focusNode(e.key)}async function Te(e){De();const n=R.value?.contact?.key!==e.key;if(n&&(z.value=e.key),p.value=e.key,A.value=!0,_.value=qe({selectedKey:p.value,loadingNeighborhoodKey:z.value,currentCanvasSelectedKey:_.value}),await F(),S.value?.focusNode(e.key),n){await ce(e.key);return}_.value=p.value}function mt(){oe.value==="3d"&&(oe.value="2d",K.warn(t("relationships.toast.threeUnavailable")))}function je(){ve=!0,H(),B(),p.value=null,_.value=null,A.value=!1,ht()}function yt(){je()}function bt(){w.value="",ae.value="",$.value=!1}function kt(){S.value?.fitView()}function Ce(){Ke.value=re?.matches??!1}return ee(G,()=>{ie(),p.value=null,_.value=null,A.value=!1,H(),B(),X()}),ee(h,()=>{ie(),p.value=null,_.value=null,A.value=!1,H(),B(),X()}),ee(w,e=>{Y&&clearTimeout(Y),$.value=e.trim().length>0,Y=setTimeout(()=>{V.value=e,X({silent:!0,preserveNeighborhood:!0})},260)}),ee(oe,async()=>{if(await F(),p.value){S.value?.focusNode(p.value);return}S.value?.fitView()}),ee(me,async()=>{if(await F(),!ve){if(p.value){S.value?.focusNode(p.value);return}S.value?.fitView()}}),Tt(()=>{typeof window<"u"&&(re=window.matchMedia("(min-width: 768px)"),Ce(),re.addEventListener("change",Ce)),X()}),Ct(()=>{re?.removeEventListener("change",Ce),_e(),Y&&clearTimeout(Y)}),(e,n)=>{const d=xt,s=wt,c=_t;return m(),k("div",qt,[o("main",Qt,[oe.value==="3d"?(m(),te(u(f),{key:0,ref_key:"canvasRef",ref:S,graph:N.value,"selected-key":_.value,"privacy-mode":E.value,"safe-inset-right":me.value,label:u(t)("relationships.canvas.label3d"),"owner-label":u(t)("relationships.owner.me"),onFallback:mt,onSelectNode:Te},null,8,["graph","selected-key","privacy-mode","safe-inset-right","label","owner-label"])):(m(),te(u(y),{key:1,ref_key:"canvasRef",ref:S,graph:N.value,"selected-key":_.value,"privacy-mode":E.value,"safe-inset-right":me.value,label:u(t)("relationships.canvas.label"),"owner-label":u(t)("relationships.owner.me"),onSelectNode:Te},null,8,["graph","selected-key","privacy-mode","safe-inset-right","label","owner-label"])),o("div",Wt,[P(d,{modelValue:G.value,"onUpdate:modelValue":n[0]||(n[0]=l=>G.value=l),items:Je.value,content:!1,size:"xs",class:"min-w-max gap-0"},null,8,["modelValue","items"]),P(d,{modelValue:h.value,"onUpdate:modelValue":n[1]||(n[1]=l=>h.value=l),items:Xe.value,content:!1,size:"xs",class:"min-w-max gap-0"},null,8,["modelValue","items"]),o("div",Yt,[P(c,{modelValue:w.value,"onUpdate:modelValue":n[2]||(n[2]=l=>w.value=l),icon:"i-lucide-search",placeholder:u(t)("relationships.search"),size:"sm",class:"w-full",onFocus:n[3]||(n[3]=l=>$.value=Ge.value),onKeydown:n[4]||(n[4]=Nt(l=>$.value=!1,["esc"]))},Rt({_:2},[w.value?{name:"trailing",fn:ue(()=>[P(s,{icon:"i-heroicons-x-mark",variant:"link",color:"neutral",size:"xs","aria-label":u(t)("relationships.actions.clearSearch"),onClick:bt},null,8,["aria-label"])]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),tt.value?(m(),k("div",Zt,[o("div",Jt,r(u(t)("relationships.searchResults.title")),1),o("div",Xt,[(m(!0),k(Ne,null,Ie(Ae.value,l=>(m(),k("button",{key:l.key,type:"button",class:Pe(["group flex w-full items-center gap-2.5 rounded-xl px-2.5 py-2 text-left transition hover:bg-gray-100/70 dark:hover:bg-white/5",p.value===l.key?"bg-sky-50 dark:bg-sky-500/10":""]),disabled:U.value,onClick:Re=>ft(l)},[P(Le,{src:we(l),alt:j(l),text:xe(l),"root-class":"h-8 w-8 shrink-0 shadow-sm border border-gray-250/20 dark:border-white/10","image-class":"h-8 w-8 rounded-full object-cover","fallback-class":"flex h-8 w-8 items-center justify-center rounded-full bg-sky-100 text-[10px] font-bold text-sky-700 dark:bg-sky-500/15 dark:text-sky-200"},null,8,["src","alt","text"]),o("span",ta,[o("span",aa,r(j(l)),1),o("span",oa,r(Fe(l))+" · #"+r(l.rank),1)]),l.inCoreGraph?L("",!0):(m(),k("span",na,r(u(t)("relationships.searchResults.offCore")),1))],10,ea))),128))])])):L("",!0)]),P(s,{icon:"i-lucide-scan-line",color:"neutral",variant:"soft",size:"xs","aria-label":u(t)("relationships.actions.fitView"),onClick:kt},null,8,["aria-label"]),P(s,{icon:E.value?"i-lucide-eye-off":"i-lucide-eye",color:"neutral",variant:"soft",size:"xs",onClick:n[5]||(n[5]=l=>E.value=!E.value)},{default:ue(()=>[Ee(r(u(t)("relationships.privacy")),1)]),_:1},8,["icon"]),ge.value?(m(),te(s,{key:0,icon:"i-lucide-undo-2",color:"neutral",variant:"soft",size:"xs",onClick:je},{default:ue(()=>[Ee(r(u(t)("relationships.actions.backToPanorama")),1)]),_:1})):L("",!0)]),ot.value?(m(),k("div",sa,[n[6]||(n[6]=o("span",{class:"i-lucide-refresh-cw h-3.5 w-3.5 animate-spin text-sky-400"},null,-1)),o("span",null,r(ke.value),1)])):L("",!0),at.value?(m(),te(u(Kt),{key:3,variant:"overlay",text:ke.value||u(t)("relationships.task.updating")},null,8,["text"])):fe.value?L("",!0):(m(),k("div",ra,r(st.value),1)),ze.value?(m(),k("aside",la,[P(s,{icon:"i-lucide-x",color:"neutral",variant:"ghost",size:"xs",class:"absolute right-2.5 top-2.5 z-10 bg-white/35 backdrop-blur-sm hover:bg-white/55 dark:bg-white/5 dark:hover:bg-white/10","aria-label":u(t)("relationships.actions.closeDetail"),onClick:yt},null,8,["aria-label"]),b.value?(m(),k("div",ia,[o("div",ca,[o("div",ua,[P(Le,{src:we(b.value),alt:j(b.value),text:xe(b.value),"root-class":"h-11 w-11 shrink-0 overflow-hidden rounded-lg shadow-sm border border-gray-250/20 dark:border-white/10","image-class":"h-11 w-11 rounded-lg object-cover","fallback-class":"flex h-11 w-11 items-center justify-center rounded-lg bg-sky-100 text-sm font-bold text-sky-700 dark:bg-sky-500/15 dark:text-sky-200"},null,8,["src","alt","text"]),o("div",da,[o("div",ha,[o("p",pa,r(j(b.value)),1),o("span",{class:Pe(["shrink-0 rounded-full bg-white/45 px-1.5 py-0.5 font-mono text-[10px] font-bold text-gray-600 dark:bg-white/8 dark:text-gray-300",b.value.rank<=3?"text-amber-600 dark:text-amber-300":""])}," #"+r(b.value.rank),3)]),o("p",va,r(b.value.platform)+" · "+r(ct(b.value)),1)])]),nt.value?(m(),te(s,{key:0,icon:"i-lucide-network",color:"primary",variant:"soft",size:"sm",block:"",class:"rounded-xl font-semibold shadow-sm border border-sky-100 hover:border-sky-200 dark:border-sky-950/30 dark:hover:border-sky-900/50",loading:U.value,onClick:gt},{default:ue(()=>[Ee(r(u(t)("relationships.actions.focusConnections")),1)]),_:1},8,["loading"])):L("",!0),o("div",ga,[o("div",fa,[o("p",ma,r(u(t)("relationships.detail.score")),1),o("div",ya,[o("p",ba,r(rt(b.value.score)),1),n[7]||(n[7]=o("span",{class:"text-[9px] leading-3 text-gray-400"},"/100",-1))])]),o("div",ka,[o("p",xa,r(u(t)("relationships.detail.type")),1),o("span",{class:Pe(["inline-flex max-w-full items-center truncate text-[10px] font-semibold leading-4",b.value.pool==="friend"?"text-sky-700 dark:text-sky-300":"text-amber-700 dark:text-amber-300"])},r(Fe(b.value)),3)]),o("div",wa,[o("p",_a,r(u(t)("relationships.detail.privateMessages")),1),o("span",Sa,r(x(b.value.privateMessageCount)),1)]),o("div",Ta,[o("p",Ca,r(u(t)("relationships.detail.groupMessages")),1),o("span",Ra,r(x(b.value.groupMessageCount)),1)]),o("div",Na,[o("p",Ia,r(u(t)("relationships.detail.commonGroups")),1),o("span",Pa,r(x(b.value.commonGroupCount)),1)]),o("div",Ea,[o("p",La,r(u(t)("relationships.detail.lastInteraction")),1),o("span",Ma,r(it(b.value.lastInteractionTs)),1)])])]),o("div",Ka,[o("section",Va,[o("div",Aa,[o("div",Ga,[o("h3",za,r(u(t)("relationships.connections.title")),1),o("span",Fa,r(lt()),1)]),o("span",$a,r(u(t)("relationships.connections.connectionScore")),1)]),le.value.items.length>0?(m(),k("div",Oa,[(m(!0),k(Ne,null,Ie(le.value.items,l=>(m(),k("button",{key:l.node.key,type:"button",class:"group flex h-9 w-full items-center gap-2 rounded-lg px-2 py-0 text-left transition-all duration-250 hover:bg-white dark:hover:bg-white/5",onClick:Re=>Te(l.node)},[P(Le,{src:we(l.node),alt:j(l.node),text:xe(l.node),"root-class":"h-6 w-6 shrink-0 overflow-hidden rounded-md shadow-sm border border-gray-250/20 dark:border-white/10","image-class":"h-6 w-6 rounded-md object-cover","fallback-class":"flex h-6 w-6 items-center justify-center rounded-md bg-sky-100 text-[9px] font-bold text-sky-700 dark:bg-sky-500/15 dark:text-sky-200"},null,8,["src","alt","text"]),o("div",ja,[o("span",Ba,r(j(l.node)),1)]),o("span",Ha,[o("span",Ua,r(x(l.connectionScore)),1)])],8,Da))),128))])):(m(),k("p",qa,r(u(t)("relationships.connections.empty")),1))]),be.value.length>0?(m(),k("section",Qa,[o("div",Wa,[o("div",Ya,[o("h2",Za,r(u(t)("relationships.stats.communities")),1),o("span",Ja,r(x(be.value.length)),1)]),o("span",Xa,r(u(t)("relationships.stats.members")),1)]),o("div",eo,[(m(!0),k(Ne,null,Ie(be.value,l=>(m(),k("div",{key:l.id,class:"flex h-9 items-center justify-between gap-2 rounded-lg px-2 py-0 text-[13px] leading-4"},[o("div",to,[o("span",ao,[o("span",{class:"h-2 w-2 rounded-full shadow-sm",style:It({backgroundColor:l.color})},null,4)]),o("span",oo,r(l.label),1)]),o("span",no,[o("span",so,r(x(l.size)),1)])]))),128))])])):L("",!0)])])):L("",!0)])):L("",!0)])])}}}),mo=Object.freeze(Object.defineProperty({__proto__:null,default:io},Symbol.toStringTag,{value:"Module"}));export{zt as a,fo as b,mo as i,Qe as m};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RelationshipGalaxyThreeCanvas-DfJ2x8y9.js","assets/vendor-reka-ui-CzM4kDQ7.js","assets/relationship-galaxy-viewport-Cwfa51ER.js","assets/index-CdsKtFEJ.js","assets/vendor-nuxt-ui-DaLxYaC4.js","assets/vendor-snapdom-XnBoh1gd.js","assets/index-B4l3rHie.css","assets/LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js","assets/people-page-header-Mupn-U_b.js","assets/RelationshipGalaxyThreeCanvas-BluPHjCR.css","assets/RelationshipGalaxyCanvas-D2owKyDp.js"])))=>i.map(i=>d[i]);
2
+ import{_ as Be}from"./vendor-snapdom-XnBoh1gd.js";import{h as xt,c as wt,d as _t}from"./vendor-nuxt-ui-DaLxYaC4.js";import{p as St,w as ee,d as Tt,z as Ct,P as k,a5 as o,H as te,u,L as P,au as Rt,K as ue,bz as Nt,T as r,Z as Ne,a3 as Ie,U as L,Q as Pe,b as g,h as v,n as F,G as m,R as Ee,a0 as It,bA as He}from"./vendor-reka-ui-CzM4kDQ7.js";import{u as Pt,m as Et,j as Lt,n as Le,C as Mt}from"./index-CdsKtFEJ.js";import{_ as Kt}from"./LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js";import{u as Vt}from"./people-page-header-Mupn-U_b.js";const At=10,We=80,Gt=2880*60*60,Ue=.1;function Ye(a,i,f={}){if(!i)return{items:[],total:0,hasMore:!1};const y=new Map(a.nodes.map(h=>[h.key,h])),t=a.edges.flatMap(h=>{if(h.sourceKey!==i&&h.targetKey!==i)return[];const w=h.sourceKey===i?h.targetKey:h.sourceKey,V=y.get(w);return V?[{node:V,edge:h,connectionScore:0}]:[]}),C=t.reduce((h,w)=>Math.max(h,w.edge.lastInteractionTs??0),0),M=new Map(t.map(h=>[h,Me(h.edge,C)]));for(const h of t)h.connectionScore=Ft(M.get(h)??0);t.sort((h,w)=>$t(h,w,C));const K=f.collapsedLimit??At;return{items:f.expanded?t:t.slice(0,K),total:t.length,hasMore:!f.expanded&&t.length>K}}function zt(a,i,f={}){const y=new Set;if(!i||!a.nodes.some(C=>C.key===i))return y;y.add(i);const t=Ye(a,i,{collapsedLimit:f.limit??We});for(const C of t.items)y.add(C.node.key);return y}function fo(a,i,f={}){if(!i||!a.nodes.some(t=>t.key===i))return a;const y=zt(a,i,f);return{nodes:a.nodes.filter(t=>y.has(t.key)),edges:a.edges.filter(t=>y.has(t.sourceKey)&&y.has(t.targetKey)),communities:a.communities}}function Ft(a){return a<=0?0:Math.max(1,Math.round(a))}function $t(a,i,f){const y=Me(i.edge,f),t=Me(a.edge,f);if(y!==t)return y-t;if(i.edge.weight!==a.edge.weight)return i.edge.weight-a.edge.weight;const C=i.edge.lastInteractionTs??0,M=a.edge.lastInteractionTs??0;return C!==M?C-M:a.node.rank!==i.node.rank?a.node.rank-i.node.rank:a.node.key.localeCompare(i.node.key)}function Me(a,i){if(!a.lastInteractionTs||i<=0)return a.weight;const f=Math.max(0,i-a.lastInteractionTs),y=Ue+(1-Ue)*Math.pow(.5,f/Gt);return a.weight*y}function qe(a){return a.selectedKey&&a.selectedKey===a.loadingNeighborhoodKey?a.currentCanvasSelectedKey:a.selectedKey}function Ot(a){return a.selectedKey?a.isNeighborhoodMode?a.selectedKey!==a.neighborhoodContactKey:!0:!1}function Dt(a){return a.neighborhoodTask?.status==="running"?a.neighborhoodTask:a.graphTask?.status==="running"?a.graphTask:a.isNeighborhoodMode&&a.neighborhoodTask?a.neighborhoodTask:a.graphTask??a.neighborhoodTask??null}function jt(a){return a.nextTaskStatus==="running"?{type:"continue-polling"}:a.previousTaskStatus==="running"&&a.nextTaskStatus==="succeeded"&&a.neighborhoodContactKey?{type:"refresh-neighborhood",key:a.neighborhoodContactKey}:{type:"stop-polling"}}function Bt(a){return a.loadError?a.loadError:a.isTaskFailed&&a.statusText?a.statusText:a.emptyText}const Ht=new RegExp("\\p{Script=Han}","u");function Qe(a){const i=a?.trim()??"";if(!i)return"*";const f=Array.from(i),y=[...f].reverse().find(t=>Ht.test(t));return y?`**${y}`:f.length===1?"*":f.length===2?`${f[0]}***`:`${f[0]}***${f.at(-1)}`}function Ut(){return"*"}const qt={class:"flex min-h-0 flex-1 overflow-hidden bg-white text-gray-900 dark:bg-page-dark dark:text-gray-100"},Qt={class:"relative min-h-0 min-w-0 flex-1 overflow-hidden bg-[#05070d] dark:bg-page-dark"},Wt={class:"absolute left-4 top-4 z-20 flex max-w-[calc(100%-2rem)] flex-wrap items-center gap-2"},Yt={class:"relative w-28 max-w-full sm:w-32 lg:w-36"},Zt={key:0,class:"absolute left-0 top-full z-30 mt-2 max-h-80 w-72 overflow-y-auto rounded-2xl border border-gray-200/80 bg-white/95 p-2 shadow-2xl shadow-black/25 backdrop-blur-xl scrollbar-thin dark:border-white/10 dark:bg-page-dark/95"},Jt={class:"px-2 pb-1.5 pt-0.5 text-[11px] font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400"},Xt={class:"space-y-1"},ea=["disabled","onClick"],ta={class:"min-w-0 flex-1"},aa={class:"block truncate text-sm font-semibold text-gray-900 transition-colors group-hover:text-sky-600 dark:text-white dark:group-hover:text-sky-400"},oa={class:"block truncate text-[11px] text-gray-500 dark:text-gray-400"},na={key:0,class:"shrink-0 rounded-md bg-sky-100/60 px-1.5 py-0.5 text-[10px] font-semibold text-sky-600 dark:bg-sky-500/15 dark:text-sky-400"},sa={key:2,class:"absolute bottom-6 left-1/2 z-20 flex max-w-[min(560px,calc(100%-2rem))] -translate-x-1/2 items-center gap-2.5 rounded-2xl border border-sky-500/20 bg-[#090d16]/85 px-4 py-2.5 text-center text-xs font-semibold text-sky-200 shadow-2xl shadow-sky-950/30 backdrop-blur-md animate-fade-in"},ra={key:4,class:"absolute inset-0 flex items-center justify-center text-sm font-medium text-gray-400"},la={key:5,class:"dark absolute inset-x-3 bottom-3 z-20 flex max-h-[70vh] flex-col overflow-hidden rounded-2xl border border-white/5 bg-page-dark/10 text-white shadow-2xl shadow-black/20 backdrop-blur-md md:inset-x-auto md:bottom-4 md:right-4 md:top-4 md:max-h-none md:w-[360px]"},ia={key:0,class:"flex min-h-0 flex-1 flex-col gap-3 px-4 pb-4 pt-5"},ca={class:"shrink-0 space-y-2.5"},ua={class:"flex items-center gap-3 pr-8"},da={class:"min-w-0 flex-1"},ha={class:"flex min-w-0 items-center gap-1.5"},pa={class:"truncate text-base font-bold text-gray-900 dark:text-white"},va={class:"truncate text-xs text-gray-500 dark:text-gray-400"},ga={class:"grid grid-cols-3 gap-1 text-xs"},fa={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},ma={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},ya={class:"flex min-w-0 items-baseline gap-0.5"},ba={class:"font-mono text-sm font-bold leading-4 text-sky-600 dark:text-sky-400"},ka={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},xa={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},wa={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},_a={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},Sa={class:"block truncate font-mono text-sm font-bold leading-4 text-gray-900 dark:text-white"},Ta={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},Ca={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},Ra={class:"block truncate font-mono text-sm font-bold leading-4 text-gray-900 dark:text-white"},Na={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},Ia={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},Pa={class:"block truncate font-mono text-sm font-bold leading-4 text-gray-900 dark:text-white"},Ea={class:"min-w-0 rounded-md border border-gray-100/60 bg-gray-50/35 p-1.5 dark:border-white/5 dark:bg-white/3"},La={class:"mb-0.5 truncate text-[9px] font-semibold uppercase leading-3 tracking-wide text-gray-400 dark:text-gray-500"},Ma={class:"block truncate text-[11px] font-semibold leading-4 text-gray-900 dark:text-white"},Ka={class:"flex min-h-0 flex-1 flex-col gap-2"},Va={class:"flex min-h-0 flex-1 flex-col overflow-hidden rounded-xl border border-gray-100/80 bg-gray-50/25 p-2.5 shadow-sm dark:border-white/5 dark:bg-white/2"},Aa={class:"mb-2 flex shrink-0 items-center justify-between gap-3 pl-1 pr-3"},Ga={class:"flex min-w-0 items-center gap-2"},za={class:"truncate text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400"},Fa={class:"shrink-0 font-mono text-[10px] font-bold text-gray-400 dark:text-gray-500"},$a={class:"w-14 shrink-0 text-right text-[10px] font-semibold uppercase tracking-wider text-gray-400 dark:text-gray-500"},Oa={key:0,class:"min-h-0 flex-1 space-y-0.5 overflow-y-auto pr-1 scrollbar-thin"},Da=["onClick"],ja={class:"min-w-0 flex-1"},Ba={class:"block truncate text-[13px] font-semibold leading-4 text-gray-900 transition-colors group-hover:text-sky-600 dark:text-white dark:group-hover:text-sky-400"},Ha={class:"flex w-14 shrink-0 justify-end"},Ua={class:"font-mono text-[10px] font-bold text-gray-500 dark:text-gray-400"},qa={key:1,class:"py-4 text-center text-xs text-gray-400 dark:text-gray-500"},Qa={key:0,class:"flex min-h-0 flex-1 flex-col overflow-hidden rounded-xl border border-gray-100/80 bg-gray-50/25 p-2.5 shadow-sm dark:border-white/5 dark:bg-white/2"},Wa={class:"mb-2 flex shrink-0 items-center justify-between gap-3 pl-1 pr-3"},Ya={class:"flex min-w-0 items-center gap-2"},Za={class:"truncate text-xs font-semibold uppercase tracking-wider text-gray-500 dark:text-gray-400"},Ja={class:"shrink-0 font-mono text-[10px] font-bold text-gray-400 dark:text-gray-500"},Xa={class:"w-14 shrink-0 text-right text-[10px] font-semibold uppercase tracking-wider text-gray-400 dark:text-gray-500"},eo={class:"min-h-0 flex-1 space-y-0.5 overflow-y-auto pr-1 scrollbar-thin"},to={class:"flex min-w-0 items-center gap-2"},ao={class:"flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-white/45 shadow-sm dark:bg-white/5"},oo={class:"truncate font-semibold leading-4 text-gray-700 dark:text-gray-200"},no={class:"flex w-14 shrink-0 justify-end"},so={class:"font-mono text-[10px] font-bold text-gray-500 dark:text-gray-400"},ro=1400,lo=392,io=St({__name:"index",setup(a){const i={nodes:[],edges:[],communities:[]},f=He(()=>Be(()=>import("./RelationshipGalaxyThreeCanvas-DfJ2x8y9.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))),y=He(()=>Be(()=>import("./RelationshipGalaxyCanvas-D2owKyDp.js").then(e=>e.as),__vite__mapDeps([10,5,3,1,4,6,2]))),{t,locale:C}=Pt(),M=Et(),K=Lt(),G=g("1y"),h=g("panorama"),w=g(""),V=g(""),$=g(!1),ae=g(""),p=g(null),A=g(!1),O=g(null),R=g(null),de=g(!1),he=g(!1),U=g(!1),Ke=g(!1),z=g(null),_=g(null),E=g(!1),oe=g("3d"),q=g(""),Q=g(0),D=g(0),S=g(null),ne=g(null);let se=null,pe=null,W=null,Y=null,re=null,ve=!1;const Ze=v(()=>new Intl.NumberFormat(C.value)),Je=v(()=>Mt.map(e=>({label:t(`relationships.timeRange.${e}`),value:e}))),Xe=v(()=>[{label:t("relationships.graphScope.panorama"),value:"panorama"},{label:t("relationships.graphScope.close"),value:"close"},{label:t("relationships.graphScope.friends"),value:"friends"}]),N=v(()=>R.value?.graph??O.value?.graph??i),ge=v(()=>!!R.value),fe=v(()=>N.value.nodes.length>0),Z=v(()=>Dt({graphTask:O.value?.task??null,neighborhoodTask:R.value?.task??null,isNeighborhoodMode:ge.value})),J=v(()=>Z.value?.status==="running"),Ve=v(()=>Z.value?.status==="failed"),et=v(()=>O.value?.cache.status??R.value?.cache.status),Ae=v(()=>O.value?.searchResults??[]),Ge=v(()=>w.value.trim().length>0),tt=v(()=>Ge.value&&w.value.trim()===ae.value&&$.value&&Ae.value.length>0),at=v(()=>(de.value||J.value)&&!fe.value),ot=v(()=>J.value&&fe.value),b=v(()=>p.value?N.value.nodes.find(e=>e.key===p.value)??R.value?.contact??null:null),ze=v(()=>A.value&&!!b.value),me=v(()=>ze.value&&Ke.value?lo:0),nt=v(()=>Ot({selectedKey:p.value,isNeighborhoodMode:ge.value,neighborhoodContactKey:R.value?.contact?.key??null})),le=v(()=>Ye(N.value,p.value,{collapsedLimit:We})),ye=v(()=>({nodes:N.value.nodes.length,edges:N.value.edges.length,communities:N.value.communities.length})),be=v(()=>[...N.value.communities].sort((e,n)=>n.size-e.size).slice(0,8)),ke=v(()=>et.value==="stale"&&J.value?t("relationships.task.updating"):J.value?ut(Z.value):Ve.value?Z.value?.lastError||t("relationships.task.failed"):""),st=v(()=>Bt({loadError:q.value,isTaskFailed:Ve.value,statusText:ke.value,emptyText:t("relationships.empty")}));function x(e){return Ze.value.format(e)}function rt(e){return Math.round(e*100).toString()}function lt(){const e=le.value.items.length,n=le.value.total;return n<=e?x(n):`${x(e)} / ${x(n)}`}function it(e){return e?new Date(e*1e3).toLocaleDateString():t("relationships.detail.emptyValue")}function xe(e){return e.kind==="owner"?t("relationships.owner.avatarText"):E.value?Ut():(e.displayName||e.platformId||"?").slice(0,1)}function we(e){return e.kind==="owner"?e.avatar:E.value?null:e.avatar}function j(e){if(e.kind==="owner")return t("relationships.owner.me");const n=e.displayName||e.platformId||e.key;return E.value?Qe(n):n}function ct(e){const n=e.platformId||e.key;return E.value?Qe(n):n}function Fe(e){return e.kind==="owner"?t("relationships.owner.type"):e.friendSource==="manual"?t("relationships.pool.manualFriend"):e.pool==="friend"?t("relationships.pool.friend"):t("relationships.pool.nonFriend")}function ut(e){return t("relationships.task.running",{current:x(e?.processedSessions??0),total:x(e?.totalSessions??0)})}function $e(e){const n=Oe(e,h.value);se&&se!==n&&ie();const d=O.value;O.value=d&&se===n?{...e,graph:d.graph}:e,se=n}function dt(e){const n=Oe(e,`neighborhood:${e.contact?.key??""}`),d=R.value;R.value=d&&pe===n?{...e,graph:d.graph}:e,pe=n}function B(){R.value=null,pe=null}function Oe(e,n){const d=e.graph;let s=2166136261;s=T(s,n),s=T(s,e.algorithmVersion),s=T(s,e.cache.signature??""),s=I(s,e.timeRange.startTs??0),s=T(s,e.timeRange.preset);for(const c of d.nodes)s=T(s,c.key),s=T(s,c.pool),s=T(s,c.friendSource??""),s=I(s,c.rank),s=I(s,Math.round(c.score*1e6)),s=I(s,c.labelVisibility),s=I(s,Math.round(c.x*100)),s=I(s,Math.round(c.y*100)),s=I(s,Math.round(c.size*100));for(const c of d.edges)s=T(s,c.id),s=T(s,c.sourceKey),s=T(s,c.targetKey),s=I(s,Math.round(c.weight*1e6)),s=I(s,c.visibility);for(const c of d.communities)s=T(s,c.id),s=I(s,c.size),s=T(s,c.color);return`${n}:${d.nodes.length}:${d.edges.length}:${d.communities.length}:${s>>>0}`}function T(e,n){for(let d=0;d<n.length;d+=1)e^=n.charCodeAt(d),e=Math.imul(e,16777619);return e}function I(e,n){return T(e,String(n))}function _e(){W&&(clearInterval(W),W=null)}function H(){D.value+=1,U.value=!1,z.value=null}function De(){p.value||ne.value||(ne.value=S.value?.captureView()??null)}function ie(){ne.value=null}function ht(){const e=ne.value;ie(),F(()=>{e&&S.value?.restoreView(e)===!0||S.value?.fitView(),F(()=>{ve=!1})})}function Se(e){if(e?.status==="running"){W||(W=setInterval(()=>{X({silent:!0,preserveNeighborhood:!0})},ro));return}_e()}async function X(e={}){const n=Q.value+1;Q.value=n;const d=Z.value?.status??null,s=e.preserveNeighborhood?R.value?.contact?.key??null:null;e.silent||(de.value=!0),e.preserveNeighborhood||(H(),B()),q.value="";try{const c=await M.getPeopleRelationships({acceptStale:!0,timeRangePreset:G.value,graphScope:h.value,query:V.value.trim()||void 0});if(n!==Q.value)return;$e(c),ae.value=V.value.trim(),p.value&&!N.value.nodes.some(Re=>Re.key===p.value)&&(p.value=null,_.value=null,A.value=!1);const l=jt({previousTaskStatus:d,nextTaskStatus:c.task?.status??null,neighborhoodContactKey:s});Se(c.task),l.type==="refresh-neighborhood"&&ce(l.key)}catch(c){if(n!==Q.value)return;q.value=String(c),K.fail(t("relationships.toast.loadFailed"),{description:String(c)}),_e()}finally{n===Q.value&&(de.value=!1)}}async function pt(){he.value=!0,q.value="";try{const e=await M.recomputePeopleRelationships({timeRangePreset:G.value,graphScope:h.value,query:V.value.trim()||void 0});$e(e),ae.value=V.value.trim(),H(),B(),p.value=null,_.value=null,A.value=!1,Se(e.task),K.success(t("relationships.toast.recomputeStarted"))}catch(e){K.fail(t("relationships.toast.recomputeFailed"),{description:String(e)})}finally{he.value=!1}}const vt=v(()=>({title:t("layout.relationships"),description:t("relationships.subtitle"),icon:"i-lucide-git-fork",iconClass:"bg-primary-600 text-white dark:bg-primary-500 dark:text-white shadow-sm",action:{label:t("relationships.actions.recompute"),icon:"i-lucide-refresh-cw",loading:he.value,disabled:J.value,class:"border border-sky-100 hover:border-sky-200 dark:border-sky-950/30 dark:hover:border-sky-900/50",onClick:pt},stats:[{id:"nodes",label:t("relationships.stats.nodes"),value:x(ye.value.nodes)},{id:"edges",label:t("relationships.stats.edges"),value:x(ye.value.edges)},{id:"communities",label:t("relationships.stats.communities"),value:x(ye.value.communities),dividerBefore:!0}]}));Vt(vt);async function ce(e){const n=D.value+1;D.value=n,U.value=!0,z.value=e,q.value="";try{const d=await M.getPeopleRelationshipNeighborhood(e,{acceptStale:!0,timeRangePreset:G.value});if(n!==D.value)return;dt(d),p.value=d.contact?.key??e,_.value=p.value,Se(d.task),await F(),S.value?.fitView()}catch(d){if(n!==D.value)return;K.fail(t("relationships.toast.neighborhoodFailed"),{description:String(d)})}finally{n===D.value&&(U.value=!1,z.value=null)}}async function gt(){p.value&&await ce(p.value)}async function ft(e){if(De(),$.value=!1,e.inCoreGraph||(z.value=e.key),p.value=e.key,A.value=!0,_.value=qe({selectedKey:p.value,loadingNeighborhoodKey:z.value,currentCanvasSelectedKey:_.value}),!e.inCoreGraph){await ce(e.key);return}H(),B(),await F(),S.value?.focusNode(e.key)}async function Te(e){De();const n=R.value?.contact?.key!==e.key;if(n&&(z.value=e.key),p.value=e.key,A.value=!0,_.value=qe({selectedKey:p.value,loadingNeighborhoodKey:z.value,currentCanvasSelectedKey:_.value}),await F(),S.value?.focusNode(e.key),n){await ce(e.key);return}_.value=p.value}function mt(){oe.value==="3d"&&(oe.value="2d",K.warn(t("relationships.toast.threeUnavailable")))}function je(){ve=!0,H(),B(),p.value=null,_.value=null,A.value=!1,ht()}function yt(){je()}function bt(){w.value="",ae.value="",$.value=!1}function kt(){S.value?.fitView()}function Ce(){Ke.value=re?.matches??!1}return ee(G,()=>{ie(),p.value=null,_.value=null,A.value=!1,H(),B(),X()}),ee(h,()=>{ie(),p.value=null,_.value=null,A.value=!1,H(),B(),X()}),ee(w,e=>{Y&&clearTimeout(Y),$.value=e.trim().length>0,Y=setTimeout(()=>{V.value=e,X({silent:!0,preserveNeighborhood:!0})},260)}),ee(oe,async()=>{if(await F(),p.value){S.value?.focusNode(p.value);return}S.value?.fitView()}),ee(me,async()=>{if(await F(),!ve){if(p.value){S.value?.focusNode(p.value);return}S.value?.fitView()}}),Tt(()=>{typeof window<"u"&&(re=window.matchMedia("(min-width: 768px)"),Ce(),re.addEventListener("change",Ce)),X()}),Ct(()=>{re?.removeEventListener("change",Ce),_e(),Y&&clearTimeout(Y)}),(e,n)=>{const d=xt,s=wt,c=_t;return m(),k("div",qt,[o("main",Qt,[oe.value==="3d"?(m(),te(u(f),{key:0,ref_key:"canvasRef",ref:S,graph:N.value,"selected-key":_.value,"privacy-mode":E.value,"safe-inset-right":me.value,label:u(t)("relationships.canvas.label3d"),"owner-label":u(t)("relationships.owner.me"),onFallback:mt,onSelectNode:Te},null,8,["graph","selected-key","privacy-mode","safe-inset-right","label","owner-label"])):(m(),te(u(y),{key:1,ref_key:"canvasRef",ref:S,graph:N.value,"selected-key":_.value,"privacy-mode":E.value,"safe-inset-right":me.value,label:u(t)("relationships.canvas.label"),"owner-label":u(t)("relationships.owner.me"),onSelectNode:Te},null,8,["graph","selected-key","privacy-mode","safe-inset-right","label","owner-label"])),o("div",Wt,[P(d,{modelValue:G.value,"onUpdate:modelValue":n[0]||(n[0]=l=>G.value=l),items:Je.value,content:!1,size:"xs",class:"min-w-max gap-0"},null,8,["modelValue","items"]),P(d,{modelValue:h.value,"onUpdate:modelValue":n[1]||(n[1]=l=>h.value=l),items:Xe.value,content:!1,size:"xs",class:"min-w-max gap-0"},null,8,["modelValue","items"]),o("div",Yt,[P(c,{modelValue:w.value,"onUpdate:modelValue":n[2]||(n[2]=l=>w.value=l),icon:"i-lucide-search",placeholder:u(t)("relationships.search"),size:"sm",class:"w-full",onFocus:n[3]||(n[3]=l=>$.value=Ge.value),onKeydown:n[4]||(n[4]=Nt(l=>$.value=!1,["esc"]))},Rt({_:2},[w.value?{name:"trailing",fn:ue(()=>[P(s,{icon:"i-heroicons-x-mark",variant:"link",color:"neutral",size:"xs","aria-label":u(t)("relationships.actions.clearSearch"),onClick:bt},null,8,["aria-label"])]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),tt.value?(m(),k("div",Zt,[o("div",Jt,r(u(t)("relationships.searchResults.title")),1),o("div",Xt,[(m(!0),k(Ne,null,Ie(Ae.value,l=>(m(),k("button",{key:l.key,type:"button",class:Pe(["group flex w-full items-center gap-2.5 rounded-xl px-2.5 py-2 text-left transition hover:bg-gray-100/70 dark:hover:bg-white/5",p.value===l.key?"bg-sky-50 dark:bg-sky-500/10":""]),disabled:U.value,onClick:Re=>ft(l)},[P(Le,{src:we(l),alt:j(l),text:xe(l),"root-class":"h-8 w-8 shrink-0 shadow-sm border border-gray-250/20 dark:border-white/10","image-class":"h-8 w-8 rounded-full object-cover","fallback-class":"flex h-8 w-8 items-center justify-center rounded-full bg-sky-100 text-[10px] font-bold text-sky-700 dark:bg-sky-500/15 dark:text-sky-200"},null,8,["src","alt","text"]),o("span",ta,[o("span",aa,r(j(l)),1),o("span",oa,r(Fe(l))+" · #"+r(l.rank),1)]),l.inCoreGraph?L("",!0):(m(),k("span",na,r(u(t)("relationships.searchResults.offCore")),1))],10,ea))),128))])])):L("",!0)]),P(s,{icon:"i-lucide-scan-line",color:"neutral",variant:"soft",size:"xs","aria-label":u(t)("relationships.actions.fitView"),onClick:kt},null,8,["aria-label"]),P(s,{icon:E.value?"i-lucide-eye-off":"i-lucide-eye",color:"neutral",variant:"soft",size:"xs",onClick:n[5]||(n[5]=l=>E.value=!E.value)},{default:ue(()=>[Ee(r(u(t)("relationships.privacy")),1)]),_:1},8,["icon"]),ge.value?(m(),te(s,{key:0,icon:"i-lucide-undo-2",color:"neutral",variant:"soft",size:"xs",onClick:je},{default:ue(()=>[Ee(r(u(t)("relationships.actions.backToPanorama")),1)]),_:1})):L("",!0)]),ot.value?(m(),k("div",sa,[n[6]||(n[6]=o("span",{class:"i-lucide-refresh-cw h-3.5 w-3.5 animate-spin text-sky-400"},null,-1)),o("span",null,r(ke.value),1)])):L("",!0),at.value?(m(),te(u(Kt),{key:3,variant:"overlay",text:ke.value||u(t)("relationships.task.updating")},null,8,["text"])):fe.value?L("",!0):(m(),k("div",ra,r(st.value),1)),ze.value?(m(),k("aside",la,[P(s,{icon:"i-lucide-x",color:"neutral",variant:"ghost",size:"xs",class:"absolute right-2.5 top-2.5 z-10 bg-white/35 backdrop-blur-sm hover:bg-white/55 dark:bg-white/5 dark:hover:bg-white/10","aria-label":u(t)("relationships.actions.closeDetail"),onClick:yt},null,8,["aria-label"]),b.value?(m(),k("div",ia,[o("div",ca,[o("div",ua,[P(Le,{src:we(b.value),alt:j(b.value),text:xe(b.value),"root-class":"h-11 w-11 shrink-0 overflow-hidden rounded-lg shadow-sm border border-gray-250/20 dark:border-white/10","image-class":"h-11 w-11 rounded-lg object-cover","fallback-class":"flex h-11 w-11 items-center justify-center rounded-lg bg-sky-100 text-sm font-bold text-sky-700 dark:bg-sky-500/15 dark:text-sky-200"},null,8,["src","alt","text"]),o("div",da,[o("div",ha,[o("p",pa,r(j(b.value)),1),o("span",{class:Pe(["shrink-0 rounded-full bg-white/45 px-1.5 py-0.5 font-mono text-[10px] font-bold text-gray-600 dark:bg-white/8 dark:text-gray-300",b.value.rank<=3?"text-amber-600 dark:text-amber-300":""])}," #"+r(b.value.rank),3)]),o("p",va,r(b.value.platform)+" · "+r(ct(b.value)),1)])]),nt.value?(m(),te(s,{key:0,icon:"i-lucide-network",color:"primary",variant:"soft",size:"sm",block:"",class:"rounded-xl font-semibold shadow-sm border border-sky-100 hover:border-sky-200 dark:border-sky-950/30 dark:hover:border-sky-900/50",loading:U.value,onClick:gt},{default:ue(()=>[Ee(r(u(t)("relationships.actions.focusConnections")),1)]),_:1},8,["loading"])):L("",!0),o("div",ga,[o("div",fa,[o("p",ma,r(u(t)("relationships.detail.score")),1),o("div",ya,[o("p",ba,r(rt(b.value.score)),1),n[7]||(n[7]=o("span",{class:"text-[9px] leading-3 text-gray-400"},"/100",-1))])]),o("div",ka,[o("p",xa,r(u(t)("relationships.detail.type")),1),o("span",{class:Pe(["inline-flex max-w-full items-center truncate text-[10px] font-semibold leading-4",b.value.pool==="friend"?"text-sky-700 dark:text-sky-300":"text-amber-700 dark:text-amber-300"])},r(Fe(b.value)),3)]),o("div",wa,[o("p",_a,r(u(t)("relationships.detail.privateMessages")),1),o("span",Sa,r(x(b.value.privateMessageCount)),1)]),o("div",Ta,[o("p",Ca,r(u(t)("relationships.detail.groupMessages")),1),o("span",Ra,r(x(b.value.groupMessageCount)),1)]),o("div",Na,[o("p",Ia,r(u(t)("relationships.detail.commonGroups")),1),o("span",Pa,r(x(b.value.commonGroupCount)),1)]),o("div",Ea,[o("p",La,r(u(t)("relationships.detail.lastInteraction")),1),o("span",Ma,r(it(b.value.lastInteractionTs)),1)])])]),o("div",Ka,[o("section",Va,[o("div",Aa,[o("div",Ga,[o("h3",za,r(u(t)("relationships.connections.title")),1),o("span",Fa,r(lt()),1)]),o("span",$a,r(u(t)("relationships.connections.connectionScore")),1)]),le.value.items.length>0?(m(),k("div",Oa,[(m(!0),k(Ne,null,Ie(le.value.items,l=>(m(),k("button",{key:l.node.key,type:"button",class:"group flex h-9 w-full items-center gap-2 rounded-lg px-2 py-0 text-left transition-all duration-250 hover:bg-white dark:hover:bg-white/5",onClick:Re=>Te(l.node)},[P(Le,{src:we(l.node),alt:j(l.node),text:xe(l.node),"root-class":"h-6 w-6 shrink-0 overflow-hidden rounded-md shadow-sm border border-gray-250/20 dark:border-white/10","image-class":"h-6 w-6 rounded-md object-cover","fallback-class":"flex h-6 w-6 items-center justify-center rounded-md bg-sky-100 text-[9px] font-bold text-sky-700 dark:bg-sky-500/15 dark:text-sky-200"},null,8,["src","alt","text"]),o("div",ja,[o("span",Ba,r(j(l.node)),1)]),o("span",Ha,[o("span",Ua,r(x(l.connectionScore)),1)])],8,Da))),128))])):(m(),k("p",qa,r(u(t)("relationships.connections.empty")),1))]),be.value.length>0?(m(),k("section",Qa,[o("div",Wa,[o("div",Ya,[o("h2",Za,r(u(t)("relationships.stats.communities")),1),o("span",Ja,r(x(be.value.length)),1)]),o("span",Xa,r(u(t)("relationships.stats.members")),1)]),o("div",eo,[(m(!0),k(Ne,null,Ie(be.value,l=>(m(),k("div",{key:l.id,class:"flex h-9 items-center justify-between gap-2 rounded-lg px-2 py-0 text-[13px] leading-4"},[o("div",to,[o("span",ao,[o("span",{class:"h-2 w-2 rounded-full shadow-sm",style:It({backgroundColor:l.color})},null,4)]),o("span",oo,r(l.label),1)]),o("span",no,[o("span",so,r(x(l.size)),1)])]))),128))])])):L("",!0)])])):L("",!0)])):L("",!0)])])}}}),mo=Object.freeze(Object.defineProperty({__proto__:null,default:io},Symbol.toStringTag,{value:"Module"}));export{zt as a,fo as b,mo as i,Qe as m};
@@ -1 +1 @@
1
- import{c as be,_ as _e,i as $t,h as It,d as Pt,u as Ft}from"./vendor-nuxt-ui-DaLxYaC4.js";import{u as Se,_ as De,j as Mt,m as zt,o as At,q as Nt,C as Et}from"./index-BsXljrlg.js";import{p as we,H as fe,K as T,by as Bt,G as c,P as f,a5 as a,T as o,u as r,L as h,Z as O,a3 as ke,U as E,R as J,h as u,bB as jt,w as U,d as Vt,F as Gt,a0 as X,Q as H,b as x,au as Dt,n as je}from"./vendor-reka-ui-CzM4kDQ7.js";import{_ as Ut}from"./LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js";import{u as Ht}from"./people-page-header-Mupn-U_b.js";import"./vendor-snapdom-XnBoh1gd.js";const Ot={key:0,class:"flex h-full w-[420px] max-w-[80vw] shrink-0 flex-col border-l border-gray-200 bg-white dark:border-gray-800 dark:bg-page-dark",style:{"-webkit-app-region":"no-drag"}},Rt={class:"flex items-center justify-between border-b border-gray-200 px-4 py-3 dark:border-gray-800"},qt={class:"text-base font-semibold text-gray-900 dark:text-white"},Kt={key:0,class:"flex min-h-0 flex-1 items-center justify-center gap-2 text-sm text-gray-400 dark:text-gray-500"},Yt={key:1,class:"min-h-0 flex-1 overflow-y-auto"},Qt={class:"px-5 py-5"},Wt={class:"flex items-start gap-4"},Zt={class:"relative shrink-0"},Xt=["src","alt"],Jt={key:1,class:"flex h-16 w-16 items-center justify-center rounded-2xl bg-gradient-to-br from-gray-155 to-gray-200 text-lg font-bold text-gray-700 dark:from-gray-800 dark:to-page-dark dark:text-gray-200"},ea={class:"min-w-0 flex-1 pt-1"},ta={class:"truncate text-lg font-bold tracking-tight text-gray-900 dark:text-white"},aa={class:"mt-1 truncate font-mono text-xs text-gray-400 dark:text-gray-500"},na={key:0,class:"mt-2 flex flex-wrap gap-1.5"},sa={key:1,class:"mt-3 flex flex-wrap items-center gap-2"},oa={class:"border-t border-gray-100 px-5 py-4 dark:border-white/5"},ra={class:"mb-3 text-[10px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500"},ia={class:"space-y-2.5"},la={class:"flex items-center justify-between gap-2"},ca={class:"truncate text-xs font-semibold text-gray-700 dark:text-gray-300"},da={class:"flex items-center gap-1 text-[10px] font-bold text-gray-400 transition group-hover/item:text-pink-500 dark:text-gray-500"},ua={class:"mt-1.5 truncate text-[11px] font-medium text-gray-400 dark:text-gray-500"},fa={class:"mt-2 flex flex-wrap gap-1.5"},pa=we({__name:"ContactDetailPanel",props:{selectedKey:{},contact:{},isLoading:{type:Boolean},isFriendActionLoading:{type:Boolean}},emits:["clear","openSource","viewSourceRecords","markFriend","unmarkFriend"],setup(n,{emit:s}){const k=n,S=s,{t:C}=Se(),A=u(()=>{const m=k.contact;if(!m)return[];const v=new Set([m.displayName.trim().toLowerCase(),m.platformId.trim().toLowerCase()]);return m.aliases.filter(w=>!v.has(w.trim().toLowerCase()))}),I=u(()=>k.contact?.pool==="non_friend"),P=u(()=>k.contact?.friendSource==="manual"),B=u(()=>I.value||P.value);function F(m){return m.displayName.trim().slice(0,1).toUpperCase()||"?"}return(m,v)=>{const w=be,R=_e;return c(),fe(Bt,{name:"contact-detail-panel"},{default:T(()=>[n.selectedKey?(c(),f("aside",Ot,[a("div",Rt,[a("h3",qt,o(r(C)("contacts.detail.title")),1),h(w,{"aria-label":r(C)("contacts.actions.clearSelection"),icon:"i-heroicons-x-mark",color:"neutral",variant:"ghost",size:"sm",onClick:v[0]||(v[0]=y=>S("clear"))},null,8,["aria-label"])]),n.isLoading?(c(),f("div",Kt,[h(R,{name:"i-lucide-loader-2",class:"h-4 w-4 animate-spin"}),a("span",null,o(r(C)("common.loading")),1)])):n.contact?(c(),f("div",Yt,[a("section",Qt,[a("div",Wt,[a("div",Zt,[n.contact.avatar?(c(),f("img",{key:0,src:n.contact.avatar,alt:n.contact.displayName,loading:"lazy",decoding:"async",class:"h-16 w-16 rounded-2xl object-cover shadow-sm ring-2 ring-white dark:ring-page-dark"},null,8,Xt)):(c(),f("div",Jt,o(F(n.contact)),1))]),a("div",ea,[a("h2",ta,o(n.contact.displayName),1),a("p",aa,o(n.contact.platform)+" · "+o(n.contact.platformId),1),A.value.length>0?(c(),f("div",na,[(c(!0),f(O,null,ke(A.value.slice(0,4),y=>(c(),f("span",{key:y,class:"max-w-full truncate rounded-md bg-gray-100 px-2 py-0.5 text-[11px] font-medium text-gray-500 dark:bg-white/5 dark:text-gray-400"},o(y),1))),128))])):E("",!0),B.value?(c(),f("div",sa,[I.value?(c(),fe(w,{key:0,icon:"i-lucide-user-plus",color:"primary",variant:"soft",size:"xs",loading:n.isFriendActionLoading,onClick:v[1]||(v[1]=y=>S("markFriend"))},{default:T(()=>[J(o(r(C)("contacts.actions.markFriend")),1)]),_:1},8,["loading"])):P.value?(c(),fe(w,{key:1,icon:"i-lucide-user-minus",color:"neutral",variant:"soft",size:"xs",loading:n.isFriendActionLoading,onClick:v[2]||(v[2]=y=>S("unmarkFriend"))},{default:T(()=>[J(o(r(C)("contacts.actions.unmarkFriend")),1)]),_:1},8,["loading"])):E("",!0)])):E("",!0)])])]),a("section",oa,[a("h3",ra,o(r(C)("contacts.detail.sources")),1),a("div",ia,[(c(!0),f(O,null,ke(n.contact.sourceSessions,y=>(c(),f("div",{key:y.id,class:"w-full rounded-2xl border border-gray-100 bg-white/40 px-3.5 py-3 text-left transition duration-300 hover:border-gray-200 hover:shadow-sm dark:border-white/5 dark:bg-page-dark/10 dark:hover:border-white/10"},[a("div",la,[a("span",ca,o(y.name),1),a("span",da,o(y.type==="private"?r(C)("contacts.detail.sourceType.private"):r(C)("contacts.detail.sourceType.group")),1)]),a("div",ua,o(y.privateMessageCount!=null?r(C)("contacts.metrics.privateMessages",{count:y.privateMessageCount}):r(C)("contacts.metrics.groupSignals",{count:y.coOccurrenceCount??0})),1),a("div",fa,[h(w,{icon:"i-lucide-arrow-up-right",color:"primary",variant:"soft",size:"xs",onClick:j=>S("openSource",y)},{default:T(()=>[J(o(r(C)("contacts.actions.openSourceSession")),1)]),_:1},8,["onClick"]),h(w,{icon:"i-lucide-messages-square",color:"primary",variant:"soft",size:"xs",onClick:j=>S("viewSourceRecords",y)},{default:T(()=>[J(o(r(C)("contacts.actions.viewSourceRecords")),1)]),_:1},8,["onClick"])])]))),128))])])])):E("",!0)])):E("",!0)]),_:1})}}}),ma=De(pa,[["__scopeId","data-v-ec47ac84"]]),ga={key:0,class:"flex items-center gap-3.5 rounded-2xl border border-amber-200/60 bg-amber-50/40 p-4 text-sm text-amber-800 dark:border-amber-900/40 dark:bg-amber-950/10 dark:text-amber-200 backdrop-blur-sm shadow-sm"},va={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-amber-100/80 dark:bg-amber-950/50"},ya={class:"font-medium"},xa={key:1,class:"flex flex-col gap-4 rounded-2xl border border-zinc-200/80 bg-zinc-50/60 p-4 text-sm text-zinc-700 dark:border-zinc-800/80 dark:bg-page-dark/40 dark:text-zinc-300 sm:flex-row sm:items-center sm:justify-between backdrop-blur-sm shadow-sm"},ha={class:"flex items-center gap-3.5"},ka={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-zinc-100 dark:bg-zinc-800/80"},ba={class:"font-medium"},_a={class:"flex items-center shrink-0 self-end sm:self-center"},Sa={key:2,class:"flex flex-col gap-4 rounded-2xl border border-red-200/60 bg-red-50/40 p-4 text-sm text-red-700 dark:border-red-900/40 dark:bg-red-950/10 dark:text-red-300 sm:flex-row sm:items-center sm:justify-between backdrop-blur-sm shadow-sm"},wa={class:"flex min-w-0 items-center gap-3.5"},Ca={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-red-100/80 dark:bg-red-950/50"},Ta={class:"truncate font-medium"},La={class:"flex items-center shrink-0 self-end sm:self-center"},$a=we({__name:"ContactsStatusBlocks",props:{showDisabledNotice:{type:Boolean},activePrivateSessionCount:{},cacheStatus:{},taskFailed:{type:Boolean},taskLastError:{},isTaskRunning:{type:Boolean},isRecomputing:{type:Boolean}},emits:["recompute"],setup(n,{emit:s}){const k=s,{t:S}=Se();return(C,A)=>{const I=_e,P=be;return c(),f(O,null,[n.showDisabledNotice?(c(),f("div",ga,[a("div",va,[h(I,{name:"i-lucide-alert-triangle",class:"h-5 w-5 text-amber-500"})]),a("span",ya,o(r(S)("contacts.disabled",{count:n.activePrivateSessionCount})),1)])):E("",!0),n.cacheStatus==="stale"&&!n.isTaskRunning?(c(),f("div",xa,[a("div",ha,[a("div",ka,[h(I,{name:"i-lucide-history",class:"h-5 w-5 text-zinc-500 dark:text-zinc-400"})]),a("span",ba,o(r(S)("contacts.stale.inline")),1)]),a("div",_a,[h(P,{size:"sm",color:"primary",variant:"soft",class:"rounded-xl px-4 font-medium",loading:n.isRecomputing||n.isTaskRunning,disabled:n.isTaskRunning,onClick:A[0]||(A[0]=B=>k("recompute"))},{default:T(()=>[J(o(r(S)("contacts.actions.recompute")),1)]),_:1},8,["loading","disabled"])])])):E("",!0),n.taskFailed?(c(),f("div",Sa,[a("div",wa,[a("div",Ca,[h(I,{name:"i-lucide-alert-circle",class:"h-5 w-5 text-red-500"})]),a("span",Ta,o(n.taskLastError||r(S)("contacts.task.failed")),1)]),a("div",La,[h(P,{size:"sm",color:"error",variant:"soft",class:"rounded-xl px-4 font-medium",onClick:A[1]||(A[1]=B=>k("recompute"))},{default:T(()=>[J(o(r(S)("contacts.task.retry")),1)]),_:1})])])):E("",!0)],64)}}});function Ia(n){return!!n.diagnostics&&!n.showLoadingState&&!n.diagnostics.contactsEnabled}function Pa(n){return n.previousScrollTop}function Ve(n){return n!=="friend"}function Fa(n){return n.friendInitialLoading||n.groupmateInitialLoading}function Ma(n){return n.activeSection==="non_friend"||n.friendSectionReady}function za(n){return n.friendInitialLoading||n.groupmateInitialLoading||n.completionProgressVisible===!0||n.activeTaskStatus==="running"||n.friendTaskStatus==="running"||n.groupmateTaskStatus==="running"}function Aa(n){return n.previousStatus==="running"&&n.nextStatus==="succeeded"&&n.nextTotalSessions>0&&n.nextProcessedSessions>=n.nextTotalSessions&&n.previousProcessedSessions<n.nextTotalSessions}function Na(n){return n.friendTaskStatus==="running"||n.groupmateTaskStatus==="running"?["friend","non_friend"]:[n.activePool]}function Ea(n){const s=[{type:"section",key:"section:friend",pool:"friend"}];return s.push(...n.friends.map(k=>({type:"contact",key:k.key,pool:"friend",contact:k}))),n.friendLoadingMore&&s.push({type:"loading",key:"loading:friend",pool:"friend"}),n.showGroupSection&&(s.push({type:"section",key:"section:non_friend",pool:"non_friend"}),s.push(...n.groupmates.map(k=>({type:"contact",key:k.key,pool:"non_friend",contact:k}))),n.groupmateLoadingMore&&s.push({type:"loading",key:"loading:non_friend",pool:"non_friend"})),s}const Ba={class:"flex min-h-0 flex-1 flex-col bg-white text-gray-900 dark:bg-page-dark dark:text-gray-100"},ja={class:"flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2 px-3 py-2 lg:px-0 lg:py-0"},Va={class:"flex min-h-0 flex-1 overflow-hidden"},Ga={class:"mx-auto flex w-full max-w-[1800px] flex-col gap-6 px-6 pb-6 pt-0 lg:px-8"},Da={class:"flex flex-col gap-4"},Ua={key:1,class:"rounded-2xl border border-red-200 bg-red-50/50 p-4 text-sm text-red-700 dark:border-red-900/30 dark:bg-red-950/20 dark:text-red-300"},Ha={key:2,class:"min-h-0"},Oa={key:0,class:"flex flex-col items-center justify-center rounded-3xl border border-dashed border-gray-250 p-16 text-center dark:border-white/5"},Ra={class:"flex h-12 w-12 items-center justify-center rounded-2xl bg-gray-50 text-gray-400 dark:bg-white/5 dark:text-gray-500"},qa={class:"mt-4 text-sm font-medium text-gray-400 dark:text-gray-500"},Ka={key:1,class:"min-w-0"},Ya={class:"sticky top-0 z-20 overflow-hidden border-b border-gray-100 bg-white dark:border-gray-800/40 dark:bg-page-dark"},Qa={class:"flex min-w-0 items-center justify-end gap-1 text-right"},Wa={class:"truncate"},Za={class:"max-w-[280px] whitespace-normal break-words text-left text-xs leading-5"},Xa={class:"flex min-w-0 items-center justify-end gap-1 text-right"},Ja={class:"truncate"},en={class:"max-w-[280px] whitespace-normal break-words text-left text-xs leading-5"},tn=["aria-label","onClick"],an={class:"group flex min-w-0 w-full items-center gap-3"},nn={class:"relative shrink-0 overflow-hidden rounded-lg"},sn=["src","alt"],on={key:1,class:"flex h-10 w-10 items-center justify-center bg-gradient-to-br from-gray-50 to-gray-100 text-sm font-bold text-gray-500 transition-transform duration-300 group-hover:scale-105 dark:from-gray-800 dark:to-gray-800/60 dark:text-gray-400"},rn={class:"min-w-0 flex-1"},ln={class:"flex min-w-0 items-center gap-1"},cn={class:"mt-1 inline-flex items-center rounded bg-gray-50 px-1.5 py-0.5 font-mono text-[9px] font-semibold uppercase tracking-wider text-gray-400 dark:bg-white/5 dark:text-gray-500"},dn={class:"contact-table-value"},un={class:"contact-table-value"},fn={class:"contact-table-value"},pn={class:"contact-table-value"},mn=100,Ge=69,gn=20,vn=we({__name:"index",setup(n){const{t:s}=Se(),k=Mt(),S=zt(),C=At(),A=Ft(),I=x(!1),P=x(""),B=x(""),F=x("1y"),m=x("friend"),v=x(null),w=x(null),R=x(!1),y=x(!1),j=x(null),pe=x(!1),q=x(null),ee=x(null),te=x(null),M=x(null),ae={friend:null,non_friend:null},K=x(!1),Y=x(null),ne=x(null),Ce=x(0),se=x({});function me(){return{items:[],response:null,page:0,total:0,hasMore:!1,isLoadingInitial:!1,isLoadingMore:!1,error:"",requestId:0,scrollOffset:0}}const V=x({friend:me(),non_friend:me()}),ie=u(()=>V.value[m.value]),b=u(()=>V.value.friend),p=u(()=>V.value.non_friend),Te=u(()=>!!b.value.response&&!b.value.hasMore&&!b.value.isLoadingInitial),ge=u(()=>Ma({activeSection:m.value,friendSectionReady:Te.value,groupmateHasItems:p.value.items.length>0,groupmateLoading:p.value.isLoadingInitial||p.value.isLoadingMore})),N=u(()=>Ea({friends:b.value.items,groupmates:p.value.items,showGroupSection:ge.value,friendLoadingMore:b.value.isLoadingMore,groupmateLoadingMore:p.value.isLoadingInitial||p.value.isLoadingMore})),le=u(()=>ie.value.response??b.value.response??p.value.response),ve=u(()=>[ie.value.response,b.value.response,p.value.response].find(e=>e?.task?.status==="running")??le.value),Ue=u(()=>b.value.items.length+p.value.items.length>0),He=u(()=>!Ue.value&&!!b.value.response&&!!p.value.response&&!b.value.hasMore&&!p.value.hasMore&&!b.value.isLoadingInitial&&!p.value.isLoadingInitial),Le=u(()=>b.value.error||p.value.error),ye=u(()=>le.value?.diagnostics),z=u(()=>ve.value?.task),ce=u(()=>q.value??z.value),Q=u(()=>z.value?.status==="running"),Oe=u(()=>z.value?.status==="failed"),$e=u(()=>za({activeTaskStatus:ie.value.response?.task?.status,friendTaskStatus:b.value.response?.task?.status,groupmateTaskStatus:p.value.response?.task?.status,friendInitialLoading:b.value.isLoadingInitial,groupmateInitialLoading:p.value.isLoadingInitial,completionProgressVisible:q.value!==null})),Re=u(()=>q.value?s("contacts.task.running",{current:ce.value?.processedSessions??0,total:ce.value?.totalSessions??0}):ve.value?.cache.status==="stale"&&Q.value?s("contacts.task.updating"):ve.value?.cache.status==="missing"&&Q.value?s("contacts.task.running",{current:ce.value?.processedSessions??0,total:ce.value?.totalSessions??0}):s("common.loading")),qe=u(()=>Ia({diagnostics:ye.value,showLoadingState:$e.value})),oe=u(()=>{const e=le.value?.stats,t=e?.friendsTotal??0,i=e?.nonFriendsTotal??0;return{total:t+i,friends:t,nonFriends:i}}),Ke=u(()=>[{id:"friend",label:`${s("contacts.tabs.friends")} ${oe.value.friends.toLocaleString()}`,icon:"i-heroicons-user"},{id:"non_friend",label:`${s("contacts.tabs.groupContacts")} ${oe.value.nonFriends.toLocaleString()}`,icon:"i-heroicons-user-group"}]),Ye=u(()=>Et.map(e=>({label:s(`contacts.timeRange.${e}`),value:e}))),de=jt(u(()=>({count:N.value.length,getScrollElement:()=>Y.value,estimateSize:e=>et(N.value[e]),overscan:10,getItemKey:e=>N.value[e]?.key??e}))),xe=u(()=>de.value.getVirtualItems()),Qe=u(()=>de.value.getTotalSize());U(P,e=>{te.value&&clearTimeout(te.value),te.value=setTimeout(()=>{B.value=e.trim()},300)}),U(()=>z.value?.status,()=>Me()),U(()=>({status:z.value?.status,processedSessions:z.value?.processedSessions??0,totalSessions:z.value?.totalSessions??0}),(e,t)=>{e.status==="running"&&ue(),z.value&&Aa({previousStatus:t?.status,nextStatus:e.status,previousProcessedSessions:t?.processedSessions??0,nextProcessedSessions:e.processedSessions,nextTotalSessions:e.totalSessions})&&it(z.value)}),U([B,F],()=>{st(),Ie()}),U(()=>N.value.length,()=>{de.value.measure()}),U(xe,()=>{Je()},{flush:"post"}),U(N,()=>{v.value&&(b.value.items.some(e=>e.key===v.value)||p.value.items.some(e=>e.key===v.value)||re())}),Vt(()=>{Ie()}),Gt(()=>{ze(),ue(),te.value&&clearTimeout(te.value),M.value&&clearTimeout(M.value)});async function G(e,t){const i=W(e,1,{...t,replace:!0});ae[e]=i;try{await i}finally{ae[e]===i&&(ae[e]=null)}}async function Ie(){await Promise.all([G("friend"),G("non_friend")])}async function Pe(e){const t=V.value[e];!t.hasMore||t.isLoadingInitial||t.isLoadingMore||await W(e,t.page+1,{acceptStale:!0,replace:!1})}async function W(e,t,i){const d=V.value[e],_=i?.replace!==!1,L=d.requestId+1;d.requestId=L,d.error="",i?.silent||(_?d.isLoadingInitial=d.items.length===0:d.isLoadingMore=!0);try{const $={acceptStale:i?.acceptStale,timeRangePreset:F.value,pool:e,page:t,pageSize:mn,query:B.value||void 0},l=i?.force?await S.recomputeContacts($):await S.getContacts($);if(d.requestId!==L)return;Ze(d,l,_,{preserveExisting:i?.preserveExisting}),Me()}catch($){if(d.requestId===L&&(d.error=String($)),i?.throwOnError)throw $}finally{d.requestId===L&&(d.isLoadingInitial=!1,d.isLoadingMore=!1)}}async function Fe(){I.value=!0;try{await W(m.value,1,{acceptStale:!0,force:!0,replace:!0,throwOnError:!0}),k.success(s("contacts.toast.recomputeStarted"))}catch(e){k.fail(s("contacts.toast.recomputeFailed"),{description:String(e)})}finally{I.value=!1}}const We=u(()=>({title:s("layout.relationships"),description:s("contacts.subtitle",{count:ye.value?.privateSessionCount??0}),icon:"i-lucide-users",iconClass:"bg-primary-600 text-white dark:bg-primary-500 dark:text-white shadow-sm",action:{label:s("contacts.actions.recompute"),icon:"i-lucide-refresh-cw",loading:I.value,disabled:Q.value,class:"border border-pink-100 hover:border-pink-200 dark:border-pink-950/30 dark:hover:border-pink-900/50",onClick:Fe},stats:[{id:"total",label:s("contacts.stats.total"),value:oe.value.total.toLocaleString()},{id:"friends",label:s("contacts.stats.friends"),value:oe.value.friends.toLocaleString()},{id:"nonFriends",label:s("contacts.stats.nonFriends"),value:oe.value.nonFriends.toLocaleString(),dividerBefore:!0}]}));Ht(We);function Ze(e,t,i,d){const _=e.response?.cache.signature,L=t.cache.signature,$=!!_&&!!L&&_!==L;if(e.response=t,e.total=t.pagination.total,d?.preserveExisting&&!$&&e.items.length>0){e.hasMore=e.items.length<t.pagination.total;return}e.page=t.pagination.page,e.hasMore=t.pagination.hasMore,e.items=i||$?t.contacts:Xe(e.items,t.contacts),$&&re()}function Xe(e,t){const i=new Set(e.map(_=>_.key)),d=[...e];for(const _ of t)i.has(_.key)||(i.add(_.key),d.push(_));return d}function Je(){const t=xe.value.at(-1);if(!t||t.index<N.value.length-gn)return;if(D(t.index).pool==="friend"){if(b.value.hasMore){Pe("friend");return}Te.value&&!p.value.response&&!p.value.isLoadingInitial&&G("non_friend");return}if(!p.value.response&&!p.value.isLoadingInitial){G("non_friend");return}p.value.hasMore&&Pe("non_friend")}function D(e){return N.value[e]}function g(e){return D(e)}function et(e){return e?.type==="section"?e.pool==="non_friend"?42:1:e?.type==="loading"?44:Ge}async function tt(e){const t=e==="non_friend"?"non_friend":"friend";m.value=t,K.value=!0,M.value&&clearTimeout(M.value),t==="non_friend"&&await at(),await je();const i=N.value.findIndex(d=>d.type==="section"&&d.pool===t);if(i>=0){const d=t==="non_friend"?Math.min(i+1,N.value.length-1):i;de.value.scrollToIndex(d,{align:"start"})}M.value=setTimeout(()=>{K.value=!1,m.value=t},350)}async function at(){!p.value.response&&!p.value.isLoadingInitial&&await G("non_friend",{acceptStale:!0}),await nt()}async function nt(e){if(!Fa({friendInitialLoading:b.value.isLoadingInitial,groupmateInitialLoading:p.value.isLoadingInitial}))return;const t=[ae.friend,ae.non_friend].filter(i=>!!i);t.length!==0&&await Promise.allSettled(t)}function st(){K.value=!1,M.value&&clearTimeout(M.value),ue();for(const e of["friend","non_friend"])V.value[e].requestId++,V.value[e]=me();re(),se.value={},Y.value&&(Y.value.scrollTop=0)}function Me(){Q.value?ot():ze()}function ot(){j.value||(j.value=setInterval(()=>{rt()},1500))}async function rt(){if(!pe.value){pe.value=!0;try{const e=Na({activePool:m.value,friendTaskStatus:b.value.response?.task?.status,groupmateTaskStatus:p.value.response?.task?.status});await Promise.all(e.map(t=>W(t,1,{acceptStale:!0,replace:!0,preserveExisting:!0,silent:!0})))}finally{pe.value=!1}}}function ze(){j.value&&(clearInterval(j.value),j.value=null)}function it(e){ue(),q.value={...e,processedSessions:e.totalSessions},ee.value=setTimeout(()=>{q.value=null,ee.value=null},450)}function ue(){ee.value&&(clearTimeout(ee.value),ee.value=null),q.value=null}async function lt(e){v.value=e.key,await Ae(e.key)}async function Ae(e,t){const i=`${F.value}:${e}`,d=se.value[i];if(d&&!t?.skipCache){w.value=d;return}w.value=null,R.value=!0;try{const _=await S.getContactDetail(e,{acceptStale:!0,timeRangePreset:F.value});if(v.value!==e)return;w.value=_.contact,_.contact&&(se.value={...se.value,[i]:_.contact})}catch(_){k.fail(s("contacts.toast.recomputeFailed"),{description:String(_)})}finally{v.value===e&&(R.value=!1)}}async function ct(){const e=w.value?.key;if(!(!e||y.value)){y.value=!0;try{await S.markContactAsFriend(e,{timeRangePreset:F.value}),k.success(s("contacts.toast.markFriendSucceeded")),await Ne(e)}catch(t){k.fail(s("contacts.toast.markFriendFailed"),{description:String(t)})}finally{y.value=!1}}}async function dt(){const e=w.value?.key;if(!(!e||y.value)){y.value=!0;try{await S.unmarkContactAsFriend(e,{timeRangePreset:F.value}),k.success(s("contacts.toast.unmarkFriendSucceeded")),await Ne(e)}catch(t){k.fail(s("contacts.toast.unmarkFriendFailed"),{description:String(t)})}finally{y.value=!1}}}async function Ne(e){const t=m.value,i=Y.value?.scrollTop??0,d=w.value?.pool??t;if(se.value={},d==="non_friend"){ut(e),re(),await Be(t,i),await ft();return}await Promise.all([G("friend",{acceptStale:!0}),G("non_friend",{acceptStale:!0})]),v.value=e,await Ae(e,{skipCache:!0}),await Be(t,i)}function ut(e){const t=p.value,i=t.items.filter(d=>d.key!==e);i.length!==t.items.length&&(t.items=i,t.total=Math.max(0,t.total-1),t.hasMore=t.items.length<t.total)}async function ft(){await Promise.all([W("friend",1,{acceptStale:!0,replace:!0,preserveExisting:Ve("friend"),silent:!0}),W("non_friend",1,{acceptStale:!0,replace:!0,preserveExisting:Ve("non_friend"),silent:!0})])}function re(){v.value=null,w.value=null,R.value=!1}function pt(e){return e.friendSource==="manual"?s("contacts.pool.manualFriend"):e.pool==="friend"?s("contacts.pool.friend"):s("contacts.pool.nonFriend")}function mt(e){return e.friendSource==="manual"?"bg-indigo-50 text-indigo-600 dark:bg-indigo-500/10 dark:text-indigo-400 border border-indigo-100/50 dark:border-indigo-500/20":e.pool==="friend"?"bg-sky-50 text-sky-600 dark:bg-sky-500/10 dark:text-sky-400 border border-sky-100/50 dark:border-sky-500/20":"bg-emerald-50 text-emerald-600 dark:bg-emerald-500/10 dark:text-emerald-400 border border-emerald-100/50 dark:border-emerald-500/20"}function he(e){return e==="friend"?"contact-table-grid--friends":"contact-table-grid--group-contacts"}function gt(e,t){return Z(e==="friend"?t.scoreBreakdown.privateMessageCount:t.scoreBreakdown.commonGroupCount)}function vt(e,t){return Z(e==="friend"?t.scoreBreakdown.activePrivateMonths:t.scoreBreakdown.coOccurrenceCount)}function yt(e,t){return Z(e==="friend"?t.scoreBreakdown.commonGroupCount:t.scoreBreakdown.replyInteractionCount)}function xt(e){return(e.displayName||e.platformId||"?").slice(0,1)}function ht(e){return Math.round(e*100).toString()}function kt(e){return e.friendSource==="manual"?"-":ht(e.score)}function Z(e){return String(e??0)}function bt(e){return e?new Date(e*1e3).toLocaleDateString():s("contacts.emptyValue")}function _t(e){A.push({name:e.type==="private"?"private-chat":"group-chat",params:{id:e.id}})}function St(e){C.openChatRecordDrawer({sessionId:e.id})}function wt(e){const t=e.target;if(ie.value.scrollOffset=t.scrollTop,K.value)return;const i=Tt(t);m.value!==i&&(m.value=i)}function Ct(e){Ce.value=e.target.scrollLeft}function Tt(e){return!ge.value||!ne.value?"friend":e.scrollTop+42>=ne.value.offsetTop+Ee()?"non_friend":"friend"}function Ee(){return 1+b.value.items.length*Ge+(b.value.isLoadingMore?44:0)}async function Be(e,t){m.value=e,await je();const i=Y.value;i&&(K.value=!0,M.value&&clearTimeout(M.value),i.scrollTop=Pa({previousScrollTop:t,groupSectionScrollTop:Lt()}),M.value=setTimeout(()=>{K.value=!1,m.value=e},150))}function Lt(){return!ge.value||!ne.value?null:ne.value.offsetTop+Ee()-42}return(e,t)=>{const i=It,d=be,_=Pt,L=_e,$=$t;return c(),f("div",Ba,[h(r(Nt),{modelValue:m.value,"onUpdate:modelValue":t[3]||(t[3]=l=>m.value=l),items:Ke.value,"persist-key":"contactsTab",onChange:tt},{right:T(()=>[a("div",ja,[h(i,{modelValue:F.value,"onUpdate:modelValue":t[0]||(t[0]=l=>F.value=l),items:Ye.value,content:!1,size:"xs",class:"min-w-max gap-0",disabled:Q.value},null,8,["modelValue","items","disabled"]),h(_,{modelValue:P.value,"onUpdate:modelValue":t[2]||(t[2]=l=>P.value=l),icon:"i-lucide-search",placeholder:r(s)("contacts.search"),size:"sm",class:"w-full sm:w-32"},Dt({_:2},[P.value?{name:"trailing",fn:T(()=>[h(d,{icon:"i-heroicons-x-mark",variant:"link",color:"neutral",size:"xs","aria-label":r(s)("contacts.actions.clearSearch"),onClick:t[1]||(t[1]=l=>P.value="")},null,8,["aria-label"])]),key:"0"}:void 0]),1032,["modelValue","placeholder"])])]),_:1},8,["modelValue","items"]),a("div",Va,[a("main",{ref_key:"scrollContainerRef",ref:Y,class:"min-h-0 min-w-0 flex-1 overflow-y-auto",onScroll:wt},[a("div",Ga,[h($a,{"show-disabled-notice":qe.value,"active-private-session-count":ye.value?.activePrivateSessionCount??0,"cache-status":le.value?.cache.status,"task-failed":Oe.value,"task-last-error":z.value?.lastError,"is-task-running":Q.value,"is-recomputing":I.value,onRecompute:Fe},null,8,["show-disabled-notice","active-private-session-count","cache-status","task-failed","task-last-error","is-task-running","is-recomputing"]),a("section",Da,[$e.value?(c(),fe(r(Ut),{key:0,text:Re.value,height:"py-16"},null,8,["text"])):Le.value?(c(),f("div",Ua,o(Le.value),1)):(c(),f("div",Ha,[He.value?(c(),f("div",Oa,[a("div",Ra,[h(L,{name:"i-lucide-users-2",class:"h-6 w-6"})]),a("p",qa,o(r(s)("contacts.empty")),1)])):(c(),f("div",Ka,[a("div",Ya,[a("div",{class:H(["contact-table-grid min-w-[720px] px-4 py-3 text-[11px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500",he(m.value)]),style:X({transform:`translateX(-${Ce.value}px)`})},[a("span",null,o(r(s)("contacts.table.contact")),1),a("span",null,o(r(s)("contacts.table.status")),1),m.value==="friend"?(c(),f(O,{key:0},[a("span",null,o(r(s)("contacts.metrics.privateMessagesLabel")),1),a("span",null,o(r(s)("contacts.metrics.activeMonths")),1),a("span",null,o(r(s)("contacts.metrics.commonGroups")),1)],64)):(c(),f(O,{key:1},[a("span",null,o(r(s)("contacts.metrics.commonGroups")),1),a("span",null,o(r(s)("contacts.metrics.coOccurrence")),1),a("span",null,o(r(s)("contacts.metrics.replies")),1)],64)),a("span",null,o(r(s)("contacts.metrics.lastInteractionShort")),1),a("span",Qa,[a("span",Wa,o(r(s)("contacts.detail.score")),1),h($,{content:{side:"top"},ui:{content:"h-auto"}},{content:T(()=>[a("div",Za,o(r(s)("contacts.detail.scoreHelp")),1)]),default:T(()=>[h(L,{name:"i-lucide-circle-help",class:"h-3.5 w-3.5 shrink-0 text-gray-350 transition-colors hover:text-primary-500 dark:text-gray-600 dark:hover:text-primary-400"})]),_:1})])],6)]),a("div",{ref_key:"tableBodyRef",ref:ne,class:"overflow-x-auto scrollbar-hide",onScroll:Ct},[a("div",{class:"relative min-w-[720px]",style:X({height:`${Qe.value}px`})},[(c(!0),f(O,null,ke(xe.value,l=>(c(),f(O,{key:String(l.key)},[D(l.index).type==="section"&&D(l.index).pool==="friend"?(c(),f("div",{key:0,class:"absolute left-0 top-0 h-px w-full",style:X({transform:`translateY(${l.start}px)`}),"aria-hidden":"true"},null,4)):D(l.index).type==="section"?(c(),f("div",{key:1,class:H(["contact-table-grid absolute left-0 top-0 w-full border-b border-gray-100 bg-white px-4 py-3 text-[11px] font-bold uppercase tracking-wider text-gray-400 dark:border-gray-800/40 dark:bg-page-dark dark:text-gray-500",he(D(l.index).pool)]),style:X({transform:`translateY(${l.start}px)`})},[a("span",null,o(r(s)("contacts.table.contact")),1),a("span",null,o(r(s)("contacts.table.status")),1),a("span",null,o(r(s)("contacts.metrics.commonGroups")),1),a("span",null,o(r(s)("contacts.metrics.coOccurrence")),1),a("span",null,o(r(s)("contacts.metrics.replies")),1),a("span",null,o(r(s)("contacts.metrics.lastInteractionShort")),1),a("span",Xa,[a("span",Ja,o(r(s)("contacts.detail.score")),1),h($,{content:{side:"top"},ui:{content:"h-auto"}},{content:T(()=>[a("div",en,o(r(s)("contacts.detail.scoreHelp")),1)]),default:T(()=>[h(L,{name:"i-lucide-circle-help",class:"h-3.5 w-3.5 shrink-0 text-gray-350 transition-colors hover:text-primary-500 dark:text-gray-600 dark:hover:text-primary-400"})]),_:1})])],6)):D(l.index).type==="contact"?(c(),f("button",{key:2,type:"button",class:H(["contact-table-grid absolute left-0 top-0 w-full px-4 py-3.5 text-left outline-none transition-colors duration-200 focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:focus-visible:ring-offset-gray-900",[he(g(l.index).pool),v.value===g(l.index).contact.key?"border-b border-primary-500/20 bg-primary-500/[0.03] dark:bg-primary-500/[0.04]":"border-b border-gray-100/50 bg-transparent hover:bg-gray-50/50 dark:border-white/5 dark:hover:bg-gray-800/20"]]),style:X({transform:`translateY(${l.start}px)`}),"aria-label":r(s)("contacts.actions.viewDetail",{name:g(l.index).contact.displayName}),onClick:yn=>lt(g(l.index).contact)},[a("div",{class:H(["absolute left-0 top-1/4 h-1/2 w-1 rounded-r-full bg-primary-500 transition-all duration-300",v.value===g(l.index).contact.key?"scale-100 opacity-100":"scale-75 opacity-0"])},null,2),a("div",an,[a("div",nn,[g(l.index).contact.avatar?(c(),f("img",{key:0,src:g(l.index).contact.avatar??"",alt:g(l.index).contact.displayName,loading:"lazy",decoding:"async",class:"h-10 w-10 object-cover transition-transform duration-300 group-hover:scale-105"},null,8,sn)):(c(),f("div",on,o(xt(g(l.index).contact)),1))]),a("div",rn,[a("div",ln,[a("span",{class:H(["truncate text-sm font-semibold leading-tight tracking-tight text-gray-800 transition-colors group-hover:text-primary-600 group-focus-visible:text-primary-600 dark:text-gray-200 dark:group-hover:text-primary-400 dark:group-focus-visible:text-primary-400",v.value===g(l.index).contact.key?"text-primary-600 dark:text-primary-400":""])},o(g(l.index).contact.displayName),3)]),a("span",cn,o(g(l.index).contact.platform),1)])]),a("span",{class:H(["inline-flex w-fit justify-self-start rounded-lg px-2.5 py-1 text-xs font-semibold",mt(g(l.index).contact)])},o(pt(g(l.index).contact)),3),a("span",dn,o(gt(g(l.index).pool,g(l.index).contact)),1),a("span",un,o(vt(g(l.index).pool,g(l.index).contact)),1),a("span",fn,o(yt(g(l.index).pool,g(l.index).contact)),1),a("span",pn,o(bt(g(l.index).contact.lastInteractionTs)),1),a("span",{class:H(["inline-flex h-7 w-12 items-center justify-center justify-self-end rounded-lg font-mono text-xs font-bold tabular-nums transition-colors duration-200",v.value===g(l.index).contact.key?"bg-primary-500 text-white":"bg-primary-50 text-primary-600 dark:bg-primary-500/10 dark:text-primary-400"])},o(kt(g(l.index).contact)),3)],14,tn)):(c(),f("div",{key:3,class:"absolute left-0 top-0 flex h-11 w-full items-center justify-center gap-2 border-b border-gray-100/50 text-xs font-semibold text-gray-500 dark:border-white/5 dark:text-gray-400",style:X({transform:`translateY(${l.start}px)`})},[h(L,{name:"i-lucide-loader-2",class:"h-4 w-4 animate-spin"}),a("span",null,o(r(s)("common.loading")),1)],4))],64))),128))],4)],544)]))]))])])],544),h(ma,{"selected-key":v.value,contact:w.value,"is-loading":R.value,"is-friend-action-loading":y.value,onClear:re,onOpenSource:_t,onViewSourceRecords:St,onMarkFriend:ct,onUnmarkFriend:dt},null,8,["selected-key","contact","is-loading","is-friend-action-loading"])])])}}}),wn=De(vn,[["__scopeId","data-v-03aeb54c"]]);export{wn as default};
1
+ import{c as be,_ as _e,i as $t,h as It,d as Pt,u as Ft}from"./vendor-nuxt-ui-DaLxYaC4.js";import{u as Se,_ as De,j as Mt,m as zt,o as At,q as Nt,C as Et}from"./index-CdsKtFEJ.js";import{p as we,H as fe,K as T,by as Bt,G as c,P as f,a5 as a,T as o,u as r,L as h,Z as O,a3 as ke,U as E,R as J,h as u,bB as jt,w as U,d as Vt,F as Gt,a0 as X,Q as H,b as x,au as Dt,n as je}from"./vendor-reka-ui-CzM4kDQ7.js";import{_ as Ut}from"./LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js";import{u as Ht}from"./people-page-header-Mupn-U_b.js";import"./vendor-snapdom-XnBoh1gd.js";const Ot={key:0,class:"flex h-full w-[420px] max-w-[80vw] shrink-0 flex-col border-l border-gray-200 bg-white dark:border-gray-800 dark:bg-page-dark",style:{"-webkit-app-region":"no-drag"}},Rt={class:"flex items-center justify-between border-b border-gray-200 px-4 py-3 dark:border-gray-800"},qt={class:"text-base font-semibold text-gray-900 dark:text-white"},Kt={key:0,class:"flex min-h-0 flex-1 items-center justify-center gap-2 text-sm text-gray-400 dark:text-gray-500"},Yt={key:1,class:"min-h-0 flex-1 overflow-y-auto"},Qt={class:"px-5 py-5"},Wt={class:"flex items-start gap-4"},Zt={class:"relative shrink-0"},Xt=["src","alt"],Jt={key:1,class:"flex h-16 w-16 items-center justify-center rounded-2xl bg-gradient-to-br from-gray-155 to-gray-200 text-lg font-bold text-gray-700 dark:from-gray-800 dark:to-page-dark dark:text-gray-200"},ea={class:"min-w-0 flex-1 pt-1"},ta={class:"truncate text-lg font-bold tracking-tight text-gray-900 dark:text-white"},aa={class:"mt-1 truncate font-mono text-xs text-gray-400 dark:text-gray-500"},na={key:0,class:"mt-2 flex flex-wrap gap-1.5"},sa={key:1,class:"mt-3 flex flex-wrap items-center gap-2"},oa={class:"border-t border-gray-100 px-5 py-4 dark:border-white/5"},ra={class:"mb-3 text-[10px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500"},ia={class:"space-y-2.5"},la={class:"flex items-center justify-between gap-2"},ca={class:"truncate text-xs font-semibold text-gray-700 dark:text-gray-300"},da={class:"flex items-center gap-1 text-[10px] font-bold text-gray-400 transition group-hover/item:text-pink-500 dark:text-gray-500"},ua={class:"mt-1.5 truncate text-[11px] font-medium text-gray-400 dark:text-gray-500"},fa={class:"mt-2 flex flex-wrap gap-1.5"},pa=we({__name:"ContactDetailPanel",props:{selectedKey:{},contact:{},isLoading:{type:Boolean},isFriendActionLoading:{type:Boolean}},emits:["clear","openSource","viewSourceRecords","markFriend","unmarkFriend"],setup(n,{emit:s}){const k=n,S=s,{t:C}=Se(),A=u(()=>{const m=k.contact;if(!m)return[];const v=new Set([m.displayName.trim().toLowerCase(),m.platformId.trim().toLowerCase()]);return m.aliases.filter(w=>!v.has(w.trim().toLowerCase()))}),I=u(()=>k.contact?.pool==="non_friend"),P=u(()=>k.contact?.friendSource==="manual"),B=u(()=>I.value||P.value);function F(m){return m.displayName.trim().slice(0,1).toUpperCase()||"?"}return(m,v)=>{const w=be,R=_e;return c(),fe(Bt,{name:"contact-detail-panel"},{default:T(()=>[n.selectedKey?(c(),f("aside",Ot,[a("div",Rt,[a("h3",qt,o(r(C)("contacts.detail.title")),1),h(w,{"aria-label":r(C)("contacts.actions.clearSelection"),icon:"i-heroicons-x-mark",color:"neutral",variant:"ghost",size:"sm",onClick:v[0]||(v[0]=y=>S("clear"))},null,8,["aria-label"])]),n.isLoading?(c(),f("div",Kt,[h(R,{name:"i-lucide-loader-2",class:"h-4 w-4 animate-spin"}),a("span",null,o(r(C)("common.loading")),1)])):n.contact?(c(),f("div",Yt,[a("section",Qt,[a("div",Wt,[a("div",Zt,[n.contact.avatar?(c(),f("img",{key:0,src:n.contact.avatar,alt:n.contact.displayName,loading:"lazy",decoding:"async",class:"h-16 w-16 rounded-2xl object-cover shadow-sm ring-2 ring-white dark:ring-page-dark"},null,8,Xt)):(c(),f("div",Jt,o(F(n.contact)),1))]),a("div",ea,[a("h2",ta,o(n.contact.displayName),1),a("p",aa,o(n.contact.platform)+" · "+o(n.contact.platformId),1),A.value.length>0?(c(),f("div",na,[(c(!0),f(O,null,ke(A.value.slice(0,4),y=>(c(),f("span",{key:y,class:"max-w-full truncate rounded-md bg-gray-100 px-2 py-0.5 text-[11px] font-medium text-gray-500 dark:bg-white/5 dark:text-gray-400"},o(y),1))),128))])):E("",!0),B.value?(c(),f("div",sa,[I.value?(c(),fe(w,{key:0,icon:"i-lucide-user-plus",color:"primary",variant:"soft",size:"xs",loading:n.isFriendActionLoading,onClick:v[1]||(v[1]=y=>S("markFriend"))},{default:T(()=>[J(o(r(C)("contacts.actions.markFriend")),1)]),_:1},8,["loading"])):P.value?(c(),fe(w,{key:1,icon:"i-lucide-user-minus",color:"neutral",variant:"soft",size:"xs",loading:n.isFriendActionLoading,onClick:v[2]||(v[2]=y=>S("unmarkFriend"))},{default:T(()=>[J(o(r(C)("contacts.actions.unmarkFriend")),1)]),_:1},8,["loading"])):E("",!0)])):E("",!0)])])]),a("section",oa,[a("h3",ra,o(r(C)("contacts.detail.sources")),1),a("div",ia,[(c(!0),f(O,null,ke(n.contact.sourceSessions,y=>(c(),f("div",{key:y.id,class:"w-full rounded-2xl border border-gray-100 bg-white/40 px-3.5 py-3 text-left transition duration-300 hover:border-gray-200 hover:shadow-sm dark:border-white/5 dark:bg-page-dark/10 dark:hover:border-white/10"},[a("div",la,[a("span",ca,o(y.name),1),a("span",da,o(y.type==="private"?r(C)("contacts.detail.sourceType.private"):r(C)("contacts.detail.sourceType.group")),1)]),a("div",ua,o(y.privateMessageCount!=null?r(C)("contacts.metrics.privateMessages",{count:y.privateMessageCount}):r(C)("contacts.metrics.groupSignals",{count:y.coOccurrenceCount??0})),1),a("div",fa,[h(w,{icon:"i-lucide-arrow-up-right",color:"primary",variant:"soft",size:"xs",onClick:j=>S("openSource",y)},{default:T(()=>[J(o(r(C)("contacts.actions.openSourceSession")),1)]),_:1},8,["onClick"]),h(w,{icon:"i-lucide-messages-square",color:"primary",variant:"soft",size:"xs",onClick:j=>S("viewSourceRecords",y)},{default:T(()=>[J(o(r(C)("contacts.actions.viewSourceRecords")),1)]),_:1},8,["onClick"])])]))),128))])])])):E("",!0)])):E("",!0)]),_:1})}}}),ma=De(pa,[["__scopeId","data-v-ec47ac84"]]),ga={key:0,class:"flex items-center gap-3.5 rounded-2xl border border-amber-200/60 bg-amber-50/40 p-4 text-sm text-amber-800 dark:border-amber-900/40 dark:bg-amber-950/10 dark:text-amber-200 backdrop-blur-sm shadow-sm"},va={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-amber-100/80 dark:bg-amber-950/50"},ya={class:"font-medium"},xa={key:1,class:"flex flex-col gap-4 rounded-2xl border border-zinc-200/80 bg-zinc-50/60 p-4 text-sm text-zinc-700 dark:border-zinc-800/80 dark:bg-page-dark/40 dark:text-zinc-300 sm:flex-row sm:items-center sm:justify-between backdrop-blur-sm shadow-sm"},ha={class:"flex items-center gap-3.5"},ka={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-zinc-100 dark:bg-zinc-800/80"},ba={class:"font-medium"},_a={class:"flex items-center shrink-0 self-end sm:self-center"},Sa={key:2,class:"flex flex-col gap-4 rounded-2xl border border-red-200/60 bg-red-50/40 p-4 text-sm text-red-700 dark:border-red-900/40 dark:bg-red-950/10 dark:text-red-300 sm:flex-row sm:items-center sm:justify-between backdrop-blur-sm shadow-sm"},wa={class:"flex min-w-0 items-center gap-3.5"},Ca={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-red-100/80 dark:bg-red-950/50"},Ta={class:"truncate font-medium"},La={class:"flex items-center shrink-0 self-end sm:self-center"},$a=we({__name:"ContactsStatusBlocks",props:{showDisabledNotice:{type:Boolean},activePrivateSessionCount:{},cacheStatus:{},taskFailed:{type:Boolean},taskLastError:{},isTaskRunning:{type:Boolean},isRecomputing:{type:Boolean}},emits:["recompute"],setup(n,{emit:s}){const k=s,{t:S}=Se();return(C,A)=>{const I=_e,P=be;return c(),f(O,null,[n.showDisabledNotice?(c(),f("div",ga,[a("div",va,[h(I,{name:"i-lucide-alert-triangle",class:"h-5 w-5 text-amber-500"})]),a("span",ya,o(r(S)("contacts.disabled",{count:n.activePrivateSessionCount})),1)])):E("",!0),n.cacheStatus==="stale"&&!n.isTaskRunning?(c(),f("div",xa,[a("div",ha,[a("div",ka,[h(I,{name:"i-lucide-history",class:"h-5 w-5 text-zinc-500 dark:text-zinc-400"})]),a("span",ba,o(r(S)("contacts.stale.inline")),1)]),a("div",_a,[h(P,{size:"sm",color:"primary",variant:"soft",class:"rounded-xl px-4 font-medium",loading:n.isRecomputing||n.isTaskRunning,disabled:n.isTaskRunning,onClick:A[0]||(A[0]=B=>k("recompute"))},{default:T(()=>[J(o(r(S)("contacts.actions.recompute")),1)]),_:1},8,["loading","disabled"])])])):E("",!0),n.taskFailed?(c(),f("div",Sa,[a("div",wa,[a("div",Ca,[h(I,{name:"i-lucide-alert-circle",class:"h-5 w-5 text-red-500"})]),a("span",Ta,o(n.taskLastError||r(S)("contacts.task.failed")),1)]),a("div",La,[h(P,{size:"sm",color:"error",variant:"soft",class:"rounded-xl px-4 font-medium",onClick:A[1]||(A[1]=B=>k("recompute"))},{default:T(()=>[J(o(r(S)("contacts.task.retry")),1)]),_:1})])])):E("",!0)],64)}}});function Ia(n){return!!n.diagnostics&&!n.showLoadingState&&!n.diagnostics.contactsEnabled}function Pa(n){return n.previousScrollTop}function Ve(n){return n!=="friend"}function Fa(n){return n.friendInitialLoading||n.groupmateInitialLoading}function Ma(n){return n.activeSection==="non_friend"||n.friendSectionReady}function za(n){return n.friendInitialLoading||n.groupmateInitialLoading||n.completionProgressVisible===!0||n.activeTaskStatus==="running"||n.friendTaskStatus==="running"||n.groupmateTaskStatus==="running"}function Aa(n){return n.previousStatus==="running"&&n.nextStatus==="succeeded"&&n.nextTotalSessions>0&&n.nextProcessedSessions>=n.nextTotalSessions&&n.previousProcessedSessions<n.nextTotalSessions}function Na(n){return n.friendTaskStatus==="running"||n.groupmateTaskStatus==="running"?["friend","non_friend"]:[n.activePool]}function Ea(n){const s=[{type:"section",key:"section:friend",pool:"friend"}];return s.push(...n.friends.map(k=>({type:"contact",key:k.key,pool:"friend",contact:k}))),n.friendLoadingMore&&s.push({type:"loading",key:"loading:friend",pool:"friend"}),n.showGroupSection&&(s.push({type:"section",key:"section:non_friend",pool:"non_friend"}),s.push(...n.groupmates.map(k=>({type:"contact",key:k.key,pool:"non_friend",contact:k}))),n.groupmateLoadingMore&&s.push({type:"loading",key:"loading:non_friend",pool:"non_friend"})),s}const Ba={class:"flex min-h-0 flex-1 flex-col bg-white text-gray-900 dark:bg-page-dark dark:text-gray-100"},ja={class:"flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2 px-3 py-2 lg:px-0 lg:py-0"},Va={class:"flex min-h-0 flex-1 overflow-hidden"},Ga={class:"mx-auto flex w-full max-w-[1800px] flex-col gap-6 px-6 pb-6 pt-0 lg:px-8"},Da={class:"flex flex-col gap-4"},Ua={key:1,class:"rounded-2xl border border-red-200 bg-red-50/50 p-4 text-sm text-red-700 dark:border-red-900/30 dark:bg-red-950/20 dark:text-red-300"},Ha={key:2,class:"min-h-0"},Oa={key:0,class:"flex flex-col items-center justify-center rounded-3xl border border-dashed border-gray-250 p-16 text-center dark:border-white/5"},Ra={class:"flex h-12 w-12 items-center justify-center rounded-2xl bg-gray-50 text-gray-400 dark:bg-white/5 dark:text-gray-500"},qa={class:"mt-4 text-sm font-medium text-gray-400 dark:text-gray-500"},Ka={key:1,class:"min-w-0"},Ya={class:"sticky top-0 z-20 overflow-hidden border-b border-gray-100 bg-white dark:border-gray-800/40 dark:bg-page-dark"},Qa={class:"flex min-w-0 items-center justify-end gap-1 text-right"},Wa={class:"truncate"},Za={class:"max-w-[280px] whitespace-normal break-words text-left text-xs leading-5"},Xa={class:"flex min-w-0 items-center justify-end gap-1 text-right"},Ja={class:"truncate"},en={class:"max-w-[280px] whitespace-normal break-words text-left text-xs leading-5"},tn=["aria-label","onClick"],an={class:"group flex min-w-0 w-full items-center gap-3"},nn={class:"relative shrink-0 overflow-hidden rounded-lg"},sn=["src","alt"],on={key:1,class:"flex h-10 w-10 items-center justify-center bg-gradient-to-br from-gray-50 to-gray-100 text-sm font-bold text-gray-500 transition-transform duration-300 group-hover:scale-105 dark:from-gray-800 dark:to-gray-800/60 dark:text-gray-400"},rn={class:"min-w-0 flex-1"},ln={class:"flex min-w-0 items-center gap-1"},cn={class:"mt-1 inline-flex items-center rounded bg-gray-50 px-1.5 py-0.5 font-mono text-[9px] font-semibold uppercase tracking-wider text-gray-400 dark:bg-white/5 dark:text-gray-500"},dn={class:"contact-table-value"},un={class:"contact-table-value"},fn={class:"contact-table-value"},pn={class:"contact-table-value"},mn=100,Ge=69,gn=20,vn=we({__name:"index",setup(n){const{t:s}=Se(),k=Mt(),S=zt(),C=At(),A=Ft(),I=x(!1),P=x(""),B=x(""),F=x("1y"),m=x("friend"),v=x(null),w=x(null),R=x(!1),y=x(!1),j=x(null),pe=x(!1),q=x(null),ee=x(null),te=x(null),M=x(null),ae={friend:null,non_friend:null},K=x(!1),Y=x(null),ne=x(null),Ce=x(0),se=x({});function me(){return{items:[],response:null,page:0,total:0,hasMore:!1,isLoadingInitial:!1,isLoadingMore:!1,error:"",requestId:0,scrollOffset:0}}const V=x({friend:me(),non_friend:me()}),ie=u(()=>V.value[m.value]),b=u(()=>V.value.friend),p=u(()=>V.value.non_friend),Te=u(()=>!!b.value.response&&!b.value.hasMore&&!b.value.isLoadingInitial),ge=u(()=>Ma({activeSection:m.value,friendSectionReady:Te.value,groupmateHasItems:p.value.items.length>0,groupmateLoading:p.value.isLoadingInitial||p.value.isLoadingMore})),N=u(()=>Ea({friends:b.value.items,groupmates:p.value.items,showGroupSection:ge.value,friendLoadingMore:b.value.isLoadingMore,groupmateLoadingMore:p.value.isLoadingInitial||p.value.isLoadingMore})),le=u(()=>ie.value.response??b.value.response??p.value.response),ve=u(()=>[ie.value.response,b.value.response,p.value.response].find(e=>e?.task?.status==="running")??le.value),Ue=u(()=>b.value.items.length+p.value.items.length>0),He=u(()=>!Ue.value&&!!b.value.response&&!!p.value.response&&!b.value.hasMore&&!p.value.hasMore&&!b.value.isLoadingInitial&&!p.value.isLoadingInitial),Le=u(()=>b.value.error||p.value.error),ye=u(()=>le.value?.diagnostics),z=u(()=>ve.value?.task),ce=u(()=>q.value??z.value),Q=u(()=>z.value?.status==="running"),Oe=u(()=>z.value?.status==="failed"),$e=u(()=>za({activeTaskStatus:ie.value.response?.task?.status,friendTaskStatus:b.value.response?.task?.status,groupmateTaskStatus:p.value.response?.task?.status,friendInitialLoading:b.value.isLoadingInitial,groupmateInitialLoading:p.value.isLoadingInitial,completionProgressVisible:q.value!==null})),Re=u(()=>q.value?s("contacts.task.running",{current:ce.value?.processedSessions??0,total:ce.value?.totalSessions??0}):ve.value?.cache.status==="stale"&&Q.value?s("contacts.task.updating"):ve.value?.cache.status==="missing"&&Q.value?s("contacts.task.running",{current:ce.value?.processedSessions??0,total:ce.value?.totalSessions??0}):s("common.loading")),qe=u(()=>Ia({diagnostics:ye.value,showLoadingState:$e.value})),oe=u(()=>{const e=le.value?.stats,t=e?.friendsTotal??0,i=e?.nonFriendsTotal??0;return{total:t+i,friends:t,nonFriends:i}}),Ke=u(()=>[{id:"friend",label:`${s("contacts.tabs.friends")} ${oe.value.friends.toLocaleString()}`,icon:"i-heroicons-user"},{id:"non_friend",label:`${s("contacts.tabs.groupContacts")} ${oe.value.nonFriends.toLocaleString()}`,icon:"i-heroicons-user-group"}]),Ye=u(()=>Et.map(e=>({label:s(`contacts.timeRange.${e}`),value:e}))),de=jt(u(()=>({count:N.value.length,getScrollElement:()=>Y.value,estimateSize:e=>et(N.value[e]),overscan:10,getItemKey:e=>N.value[e]?.key??e}))),xe=u(()=>de.value.getVirtualItems()),Qe=u(()=>de.value.getTotalSize());U(P,e=>{te.value&&clearTimeout(te.value),te.value=setTimeout(()=>{B.value=e.trim()},300)}),U(()=>z.value?.status,()=>Me()),U(()=>({status:z.value?.status,processedSessions:z.value?.processedSessions??0,totalSessions:z.value?.totalSessions??0}),(e,t)=>{e.status==="running"&&ue(),z.value&&Aa({previousStatus:t?.status,nextStatus:e.status,previousProcessedSessions:t?.processedSessions??0,nextProcessedSessions:e.processedSessions,nextTotalSessions:e.totalSessions})&&it(z.value)}),U([B,F],()=>{st(),Ie()}),U(()=>N.value.length,()=>{de.value.measure()}),U(xe,()=>{Je()},{flush:"post"}),U(N,()=>{v.value&&(b.value.items.some(e=>e.key===v.value)||p.value.items.some(e=>e.key===v.value)||re())}),Vt(()=>{Ie()}),Gt(()=>{ze(),ue(),te.value&&clearTimeout(te.value),M.value&&clearTimeout(M.value)});async function G(e,t){const i=W(e,1,{...t,replace:!0});ae[e]=i;try{await i}finally{ae[e]===i&&(ae[e]=null)}}async function Ie(){await Promise.all([G("friend"),G("non_friend")])}async function Pe(e){const t=V.value[e];!t.hasMore||t.isLoadingInitial||t.isLoadingMore||await W(e,t.page+1,{acceptStale:!0,replace:!1})}async function W(e,t,i){const d=V.value[e],_=i?.replace!==!1,L=d.requestId+1;d.requestId=L,d.error="",i?.silent||(_?d.isLoadingInitial=d.items.length===0:d.isLoadingMore=!0);try{const $={acceptStale:i?.acceptStale,timeRangePreset:F.value,pool:e,page:t,pageSize:mn,query:B.value||void 0},l=i?.force?await S.recomputeContacts($):await S.getContacts($);if(d.requestId!==L)return;Ze(d,l,_,{preserveExisting:i?.preserveExisting}),Me()}catch($){if(d.requestId===L&&(d.error=String($)),i?.throwOnError)throw $}finally{d.requestId===L&&(d.isLoadingInitial=!1,d.isLoadingMore=!1)}}async function Fe(){I.value=!0;try{await W(m.value,1,{acceptStale:!0,force:!0,replace:!0,throwOnError:!0}),k.success(s("contacts.toast.recomputeStarted"))}catch(e){k.fail(s("contacts.toast.recomputeFailed"),{description:String(e)})}finally{I.value=!1}}const We=u(()=>({title:s("layout.relationships"),description:s("contacts.subtitle",{count:ye.value?.privateSessionCount??0}),icon:"i-lucide-users",iconClass:"bg-primary-600 text-white dark:bg-primary-500 dark:text-white shadow-sm",action:{label:s("contacts.actions.recompute"),icon:"i-lucide-refresh-cw",loading:I.value,disabled:Q.value,class:"border border-pink-100 hover:border-pink-200 dark:border-pink-950/30 dark:hover:border-pink-900/50",onClick:Fe},stats:[{id:"total",label:s("contacts.stats.total"),value:oe.value.total.toLocaleString()},{id:"friends",label:s("contacts.stats.friends"),value:oe.value.friends.toLocaleString()},{id:"nonFriends",label:s("contacts.stats.nonFriends"),value:oe.value.nonFriends.toLocaleString(),dividerBefore:!0}]}));Ht(We);function Ze(e,t,i,d){const _=e.response?.cache.signature,L=t.cache.signature,$=!!_&&!!L&&_!==L;if(e.response=t,e.total=t.pagination.total,d?.preserveExisting&&!$&&e.items.length>0){e.hasMore=e.items.length<t.pagination.total;return}e.page=t.pagination.page,e.hasMore=t.pagination.hasMore,e.items=i||$?t.contacts:Xe(e.items,t.contacts),$&&re()}function Xe(e,t){const i=new Set(e.map(_=>_.key)),d=[...e];for(const _ of t)i.has(_.key)||(i.add(_.key),d.push(_));return d}function Je(){const t=xe.value.at(-1);if(!t||t.index<N.value.length-gn)return;if(D(t.index).pool==="friend"){if(b.value.hasMore){Pe("friend");return}Te.value&&!p.value.response&&!p.value.isLoadingInitial&&G("non_friend");return}if(!p.value.response&&!p.value.isLoadingInitial){G("non_friend");return}p.value.hasMore&&Pe("non_friend")}function D(e){return N.value[e]}function g(e){return D(e)}function et(e){return e?.type==="section"?e.pool==="non_friend"?42:1:e?.type==="loading"?44:Ge}async function tt(e){const t=e==="non_friend"?"non_friend":"friend";m.value=t,K.value=!0,M.value&&clearTimeout(M.value),t==="non_friend"&&await at(),await je();const i=N.value.findIndex(d=>d.type==="section"&&d.pool===t);if(i>=0){const d=t==="non_friend"?Math.min(i+1,N.value.length-1):i;de.value.scrollToIndex(d,{align:"start"})}M.value=setTimeout(()=>{K.value=!1,m.value=t},350)}async function at(){!p.value.response&&!p.value.isLoadingInitial&&await G("non_friend",{acceptStale:!0}),await nt()}async function nt(e){if(!Fa({friendInitialLoading:b.value.isLoadingInitial,groupmateInitialLoading:p.value.isLoadingInitial}))return;const t=[ae.friend,ae.non_friend].filter(i=>!!i);t.length!==0&&await Promise.allSettled(t)}function st(){K.value=!1,M.value&&clearTimeout(M.value),ue();for(const e of["friend","non_friend"])V.value[e].requestId++,V.value[e]=me();re(),se.value={},Y.value&&(Y.value.scrollTop=0)}function Me(){Q.value?ot():ze()}function ot(){j.value||(j.value=setInterval(()=>{rt()},1500))}async function rt(){if(!pe.value){pe.value=!0;try{const e=Na({activePool:m.value,friendTaskStatus:b.value.response?.task?.status,groupmateTaskStatus:p.value.response?.task?.status});await Promise.all(e.map(t=>W(t,1,{acceptStale:!0,replace:!0,preserveExisting:!0,silent:!0})))}finally{pe.value=!1}}}function ze(){j.value&&(clearInterval(j.value),j.value=null)}function it(e){ue(),q.value={...e,processedSessions:e.totalSessions},ee.value=setTimeout(()=>{q.value=null,ee.value=null},450)}function ue(){ee.value&&(clearTimeout(ee.value),ee.value=null),q.value=null}async function lt(e){v.value=e.key,await Ae(e.key)}async function Ae(e,t){const i=`${F.value}:${e}`,d=se.value[i];if(d&&!t?.skipCache){w.value=d;return}w.value=null,R.value=!0;try{const _=await S.getContactDetail(e,{acceptStale:!0,timeRangePreset:F.value});if(v.value!==e)return;w.value=_.contact,_.contact&&(se.value={...se.value,[i]:_.contact})}catch(_){k.fail(s("contacts.toast.recomputeFailed"),{description:String(_)})}finally{v.value===e&&(R.value=!1)}}async function ct(){const e=w.value?.key;if(!(!e||y.value)){y.value=!0;try{await S.markContactAsFriend(e,{timeRangePreset:F.value}),k.success(s("contacts.toast.markFriendSucceeded")),await Ne(e)}catch(t){k.fail(s("contacts.toast.markFriendFailed"),{description:String(t)})}finally{y.value=!1}}}async function dt(){const e=w.value?.key;if(!(!e||y.value)){y.value=!0;try{await S.unmarkContactAsFriend(e,{timeRangePreset:F.value}),k.success(s("contacts.toast.unmarkFriendSucceeded")),await Ne(e)}catch(t){k.fail(s("contacts.toast.unmarkFriendFailed"),{description:String(t)})}finally{y.value=!1}}}async function Ne(e){const t=m.value,i=Y.value?.scrollTop??0,d=w.value?.pool??t;if(se.value={},d==="non_friend"){ut(e),re(),await Be(t,i),await ft();return}await Promise.all([G("friend",{acceptStale:!0}),G("non_friend",{acceptStale:!0})]),v.value=e,await Ae(e,{skipCache:!0}),await Be(t,i)}function ut(e){const t=p.value,i=t.items.filter(d=>d.key!==e);i.length!==t.items.length&&(t.items=i,t.total=Math.max(0,t.total-1),t.hasMore=t.items.length<t.total)}async function ft(){await Promise.all([W("friend",1,{acceptStale:!0,replace:!0,preserveExisting:Ve("friend"),silent:!0}),W("non_friend",1,{acceptStale:!0,replace:!0,preserveExisting:Ve("non_friend"),silent:!0})])}function re(){v.value=null,w.value=null,R.value=!1}function pt(e){return e.friendSource==="manual"?s("contacts.pool.manualFriend"):e.pool==="friend"?s("contacts.pool.friend"):s("contacts.pool.nonFriend")}function mt(e){return e.friendSource==="manual"?"bg-indigo-50 text-indigo-600 dark:bg-indigo-500/10 dark:text-indigo-400 border border-indigo-100/50 dark:border-indigo-500/20":e.pool==="friend"?"bg-sky-50 text-sky-600 dark:bg-sky-500/10 dark:text-sky-400 border border-sky-100/50 dark:border-sky-500/20":"bg-emerald-50 text-emerald-600 dark:bg-emerald-500/10 dark:text-emerald-400 border border-emerald-100/50 dark:border-emerald-500/20"}function he(e){return e==="friend"?"contact-table-grid--friends":"contact-table-grid--group-contacts"}function gt(e,t){return Z(e==="friend"?t.scoreBreakdown.privateMessageCount:t.scoreBreakdown.commonGroupCount)}function vt(e,t){return Z(e==="friend"?t.scoreBreakdown.activePrivateMonths:t.scoreBreakdown.coOccurrenceCount)}function yt(e,t){return Z(e==="friend"?t.scoreBreakdown.commonGroupCount:t.scoreBreakdown.replyInteractionCount)}function xt(e){return(e.displayName||e.platformId||"?").slice(0,1)}function ht(e){return Math.round(e*100).toString()}function kt(e){return e.friendSource==="manual"?"-":ht(e.score)}function Z(e){return String(e??0)}function bt(e){return e?new Date(e*1e3).toLocaleDateString():s("contacts.emptyValue")}function _t(e){A.push({name:e.type==="private"?"private-chat":"group-chat",params:{id:e.id}})}function St(e){C.openChatRecordDrawer({sessionId:e.id})}function wt(e){const t=e.target;if(ie.value.scrollOffset=t.scrollTop,K.value)return;const i=Tt(t);m.value!==i&&(m.value=i)}function Ct(e){Ce.value=e.target.scrollLeft}function Tt(e){return!ge.value||!ne.value?"friend":e.scrollTop+42>=ne.value.offsetTop+Ee()?"non_friend":"friend"}function Ee(){return 1+b.value.items.length*Ge+(b.value.isLoadingMore?44:0)}async function Be(e,t){m.value=e,await je();const i=Y.value;i&&(K.value=!0,M.value&&clearTimeout(M.value),i.scrollTop=Pa({previousScrollTop:t,groupSectionScrollTop:Lt()}),M.value=setTimeout(()=>{K.value=!1,m.value=e},150))}function Lt(){return!ge.value||!ne.value?null:ne.value.offsetTop+Ee()-42}return(e,t)=>{const i=It,d=be,_=Pt,L=_e,$=$t;return c(),f("div",Ba,[h(r(Nt),{modelValue:m.value,"onUpdate:modelValue":t[3]||(t[3]=l=>m.value=l),items:Ke.value,"persist-key":"contactsTab",onChange:tt},{right:T(()=>[a("div",ja,[h(i,{modelValue:F.value,"onUpdate:modelValue":t[0]||(t[0]=l=>F.value=l),items:Ye.value,content:!1,size:"xs",class:"min-w-max gap-0",disabled:Q.value},null,8,["modelValue","items","disabled"]),h(_,{modelValue:P.value,"onUpdate:modelValue":t[2]||(t[2]=l=>P.value=l),icon:"i-lucide-search",placeholder:r(s)("contacts.search"),size:"sm",class:"w-full sm:w-32"},Dt({_:2},[P.value?{name:"trailing",fn:T(()=>[h(d,{icon:"i-heroicons-x-mark",variant:"link",color:"neutral",size:"xs","aria-label":r(s)("contacts.actions.clearSearch"),onClick:t[1]||(t[1]=l=>P.value="")},null,8,["aria-label"])]),key:"0"}:void 0]),1032,["modelValue","placeholder"])])]),_:1},8,["modelValue","items"]),a("div",Va,[a("main",{ref_key:"scrollContainerRef",ref:Y,class:"min-h-0 min-w-0 flex-1 overflow-y-auto",onScroll:wt},[a("div",Ga,[h($a,{"show-disabled-notice":qe.value,"active-private-session-count":ye.value?.activePrivateSessionCount??0,"cache-status":le.value?.cache.status,"task-failed":Oe.value,"task-last-error":z.value?.lastError,"is-task-running":Q.value,"is-recomputing":I.value,onRecompute:Fe},null,8,["show-disabled-notice","active-private-session-count","cache-status","task-failed","task-last-error","is-task-running","is-recomputing"]),a("section",Da,[$e.value?(c(),fe(r(Ut),{key:0,text:Re.value,height:"py-16"},null,8,["text"])):Le.value?(c(),f("div",Ua,o(Le.value),1)):(c(),f("div",Ha,[He.value?(c(),f("div",Oa,[a("div",Ra,[h(L,{name:"i-lucide-users-2",class:"h-6 w-6"})]),a("p",qa,o(r(s)("contacts.empty")),1)])):(c(),f("div",Ka,[a("div",Ya,[a("div",{class:H(["contact-table-grid min-w-[720px] px-4 py-3 text-[11px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500",he(m.value)]),style:X({transform:`translateX(-${Ce.value}px)`})},[a("span",null,o(r(s)("contacts.table.contact")),1),a("span",null,o(r(s)("contacts.table.status")),1),m.value==="friend"?(c(),f(O,{key:0},[a("span",null,o(r(s)("contacts.metrics.privateMessagesLabel")),1),a("span",null,o(r(s)("contacts.metrics.activeMonths")),1),a("span",null,o(r(s)("contacts.metrics.commonGroups")),1)],64)):(c(),f(O,{key:1},[a("span",null,o(r(s)("contacts.metrics.commonGroups")),1),a("span",null,o(r(s)("contacts.metrics.coOccurrence")),1),a("span",null,o(r(s)("contacts.metrics.replies")),1)],64)),a("span",null,o(r(s)("contacts.metrics.lastInteractionShort")),1),a("span",Qa,[a("span",Wa,o(r(s)("contacts.detail.score")),1),h($,{content:{side:"top"},ui:{content:"h-auto"}},{content:T(()=>[a("div",Za,o(r(s)("contacts.detail.scoreHelp")),1)]),default:T(()=>[h(L,{name:"i-lucide-circle-help",class:"h-3.5 w-3.5 shrink-0 text-gray-350 transition-colors hover:text-primary-500 dark:text-gray-600 dark:hover:text-primary-400"})]),_:1})])],6)]),a("div",{ref_key:"tableBodyRef",ref:ne,class:"overflow-x-auto scrollbar-hide",onScroll:Ct},[a("div",{class:"relative min-w-[720px]",style:X({height:`${Qe.value}px`})},[(c(!0),f(O,null,ke(xe.value,l=>(c(),f(O,{key:String(l.key)},[D(l.index).type==="section"&&D(l.index).pool==="friend"?(c(),f("div",{key:0,class:"absolute left-0 top-0 h-px w-full",style:X({transform:`translateY(${l.start}px)`}),"aria-hidden":"true"},null,4)):D(l.index).type==="section"?(c(),f("div",{key:1,class:H(["contact-table-grid absolute left-0 top-0 w-full border-b border-gray-100 bg-white px-4 py-3 text-[11px] font-bold uppercase tracking-wider text-gray-400 dark:border-gray-800/40 dark:bg-page-dark dark:text-gray-500",he(D(l.index).pool)]),style:X({transform:`translateY(${l.start}px)`})},[a("span",null,o(r(s)("contacts.table.contact")),1),a("span",null,o(r(s)("contacts.table.status")),1),a("span",null,o(r(s)("contacts.metrics.commonGroups")),1),a("span",null,o(r(s)("contacts.metrics.coOccurrence")),1),a("span",null,o(r(s)("contacts.metrics.replies")),1),a("span",null,o(r(s)("contacts.metrics.lastInteractionShort")),1),a("span",Xa,[a("span",Ja,o(r(s)("contacts.detail.score")),1),h($,{content:{side:"top"},ui:{content:"h-auto"}},{content:T(()=>[a("div",en,o(r(s)("contacts.detail.scoreHelp")),1)]),default:T(()=>[h(L,{name:"i-lucide-circle-help",class:"h-3.5 w-3.5 shrink-0 text-gray-350 transition-colors hover:text-primary-500 dark:text-gray-600 dark:hover:text-primary-400"})]),_:1})])],6)):D(l.index).type==="contact"?(c(),f("button",{key:2,type:"button",class:H(["contact-table-grid absolute left-0 top-0 w-full px-4 py-3.5 text-left outline-none transition-colors duration-200 focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:focus-visible:ring-offset-gray-900",[he(g(l.index).pool),v.value===g(l.index).contact.key?"border-b border-primary-500/20 bg-primary-500/[0.03] dark:bg-primary-500/[0.04]":"border-b border-gray-100/50 bg-transparent hover:bg-gray-50/50 dark:border-white/5 dark:hover:bg-gray-800/20"]]),style:X({transform:`translateY(${l.start}px)`}),"aria-label":r(s)("contacts.actions.viewDetail",{name:g(l.index).contact.displayName}),onClick:yn=>lt(g(l.index).contact)},[a("div",{class:H(["absolute left-0 top-1/4 h-1/2 w-1 rounded-r-full bg-primary-500 transition-all duration-300",v.value===g(l.index).contact.key?"scale-100 opacity-100":"scale-75 opacity-0"])},null,2),a("div",an,[a("div",nn,[g(l.index).contact.avatar?(c(),f("img",{key:0,src:g(l.index).contact.avatar??"",alt:g(l.index).contact.displayName,loading:"lazy",decoding:"async",class:"h-10 w-10 object-cover transition-transform duration-300 group-hover:scale-105"},null,8,sn)):(c(),f("div",on,o(xt(g(l.index).contact)),1))]),a("div",rn,[a("div",ln,[a("span",{class:H(["truncate text-sm font-semibold leading-tight tracking-tight text-gray-800 transition-colors group-hover:text-primary-600 group-focus-visible:text-primary-600 dark:text-gray-200 dark:group-hover:text-primary-400 dark:group-focus-visible:text-primary-400",v.value===g(l.index).contact.key?"text-primary-600 dark:text-primary-400":""])},o(g(l.index).contact.displayName),3)]),a("span",cn,o(g(l.index).contact.platform),1)])]),a("span",{class:H(["inline-flex w-fit justify-self-start rounded-lg px-2.5 py-1 text-xs font-semibold",mt(g(l.index).contact)])},o(pt(g(l.index).contact)),3),a("span",dn,o(gt(g(l.index).pool,g(l.index).contact)),1),a("span",un,o(vt(g(l.index).pool,g(l.index).contact)),1),a("span",fn,o(yt(g(l.index).pool,g(l.index).contact)),1),a("span",pn,o(bt(g(l.index).contact.lastInteractionTs)),1),a("span",{class:H(["inline-flex h-7 w-12 items-center justify-center justify-self-end rounded-lg font-mono text-xs font-bold tabular-nums transition-colors duration-200",v.value===g(l.index).contact.key?"bg-primary-500 text-white":"bg-primary-50 text-primary-600 dark:bg-primary-500/10 dark:text-primary-400"])},o(kt(g(l.index).contact)),3)],14,tn)):(c(),f("div",{key:3,class:"absolute left-0 top-0 flex h-11 w-full items-center justify-center gap-2 border-b border-gray-100/50 text-xs font-semibold text-gray-500 dark:border-white/5 dark:text-gray-400",style:X({transform:`translateY(${l.start}px)`})},[h(L,{name:"i-lucide-loader-2",class:"h-4 w-4 animate-spin"}),a("span",null,o(r(s)("common.loading")),1)],4))],64))),128))],4)],544)]))]))])])],544),h(ma,{"selected-key":v.value,contact:w.value,"is-loading":R.value,"is-friend-action-loading":y.value,onClear:re,onOpenSource:_t,onViewSourceRecords:St,onMarkFriend:ct,onUnmarkFriend:dt},null,8,["selected-key","contact","is-loading","is-friend-action-loading"])])])}}}),wn=De(vn,[["__scopeId","data-v-03aeb54c"]]);export{wn as default};
@@ -1 +1 @@
1
- import{_ as B,R as P,g as R,c as V,e as $}from"./vendor-nuxt-ui-DaLxYaC4.js";import{p as k,G as a,P as s,u as e,Z as h,a3 as v,H as m,K as r,L as d,a5 as p,T as u,Q as y,h as g,U as _,R as H,by as I,I as N}from"./vendor-reka-ui-CzM4kDQ7.js";import{u as w,_ as z}from"./index-BsXljrlg.js";import{P as L}from"./PageHeader-CRlmZoKw.js";import{p as S}from"./people-page-header-Mupn-U_b.js";import"./vendor-snapdom-XnBoh1gd.js";const T=["aria-label"],U={class:"whitespace-nowrap"},D=k({__name:"PeopleSubnav",props:{active:{}},setup(x){const o=x,{t:c}=w(),l=g(()=>[{id:"contacts",label:c("contacts.title"),icon:"i-lucide-users",to:{name:"people-contacts"}},{id:"relationships",label:c("relationships.title"),icon:"i-lucide-git-fork",to:{name:"people-relationships"}}]);return(f,t)=>{const b=B;return a(),s("nav",{class:"flex shrink-0 items-center gap-0.5 overflow-x-auto scrollbar-hide","aria-label":e(c)("relationships.nav")},[(a(!0),s(h,null,v(l.value,i=>(a(),m(e(P),{key:i.id,to:i.to,class:y(["flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-xs font-semibold transition-all",o.active===i.id?"bg-pink-500 text-white dark:bg-pink-900/30 dark:text-pink-300":"text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-white/10 dark:hover:text-white"])},{default:r(()=>[d(b,{name:i.icon,class:"h-3.5 w-3.5"},null,8,["name"]),p("span",U,u(i.label),1)]),_:2},1032,["to","class"]))),128))],8,T)}}}),j={class:"flex h-full flex-col bg-white text-gray-900 dark:bg-page-dark dark:text-gray-100",style:{"padding-top":"var(--titlebar-area-height)"}},E={class:"mt-3 flex items-center justify-between gap-3 pb-1.5"},F={key:0,class:"hidden items-center gap-5 text-[11px] sm:flex"},G={key:0,class:"h-3 w-px bg-gray-250 dark:bg-white/10"},K={class:"flex items-center gap-1.5"},Q={class:"text-gray-400 dark:text-gray-500"},Z={class:"font-mono font-bold text-gray-900 dark:text-white"},q=k({__name:"index",setup(x){const{t:o}=w(),c=$(),l=g(()=>c.name==="people-relationships"?"relationships":"contacts"),f=g(()=>l.value==="relationships"?{title:o("layout.relationships"),description:o("relationships.subtitle"),icon:"i-lucide-git-fork",iconClass:"bg-primary-600 text-white dark:bg-primary-500 dark:text-white shadow-sm"}:{title:o("layout.relationships"),description:o("contacts.subtitle",{count:0}),icon:"i-lucide-users",iconClass:"bg-primary-600 text-white dark:bg-primary-500 dark:text-white shadow-sm"}),{header:t}=S(f);return(b,i)=>{const C=V;return a(),s("div",j,[d(L,{title:e(t).title,description:e(t).description,size:"compact",icon:e(t).icon,"icon-class":e(t).iconClass},{actions:r(()=>[e(t).action?(a(),m(C,{key:0,icon:e(t).action.icon,color:"primary",variant:"soft",size:"sm",class:y(["rounded-xl",e(t).action.class]),loading:e(t).action.loading,disabled:e(t).action.disabled,onClick:e(t).action.onClick},{default:r(()=>[H(u(e(t).action.label),1)]),_:1},8,["icon","class","loading","disabled","onClick"])):_("",!0)]),default:r(()=>[p("div",E,[d(D,{active:l.value},null,8,["active"]),e(t).stats?.length?(a(),s("div",F,[(a(!0),s(h,null,v(e(t).stats,n=>(a(),s(h,{key:n.id},[n.dividerBefore?(a(),s("div",G)):_("",!0),p("div",K,[p("span",Q,u(n.label),1),p("span",Z,u(n.value),1)])],64))),128))])):_("",!0)])]),_:1},8,["title","description","icon","icon-class"]),d(e(R),null,{default:r(({Component:n})=>[d(I,{name:"people-tab-slide",mode:"out-in"},{default:r(()=>[(a(),m(N(n),{key:l.value}))]),_:2},1024)]),_:1})])}}}),Y=z(q,[["__scopeId","data-v-19e6af8b"]]);export{Y as default};
1
+ import{_ as B,R as P,g as R,c as V,e as $}from"./vendor-nuxt-ui-DaLxYaC4.js";import{p as k,G as a,P as s,u as e,Z as h,a3 as v,H as m,K as r,L as d,a5 as p,T as u,Q as y,h as g,U as _,R as H,by as I,I as N}from"./vendor-reka-ui-CzM4kDQ7.js";import{u as w,_ as z}from"./index-CdsKtFEJ.js";import{P as L}from"./PageHeader-CUwv2AFR.js";import{p as S}from"./people-page-header-Mupn-U_b.js";import"./vendor-snapdom-XnBoh1gd.js";const T=["aria-label"],U={class:"whitespace-nowrap"},D=k({__name:"PeopleSubnav",props:{active:{}},setup(x){const o=x,{t:c}=w(),l=g(()=>[{id:"contacts",label:c("contacts.title"),icon:"i-lucide-users",to:{name:"people-contacts"}},{id:"relationships",label:c("relationships.title"),icon:"i-lucide-git-fork",to:{name:"people-relationships"}}]);return(f,t)=>{const b=B;return a(),s("nav",{class:"flex shrink-0 items-center gap-0.5 overflow-x-auto scrollbar-hide","aria-label":e(c)("relationships.nav")},[(a(!0),s(h,null,v(l.value,i=>(a(),m(e(P),{key:i.id,to:i.to,class:y(["flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-xs font-semibold transition-all",o.active===i.id?"bg-pink-500 text-white dark:bg-pink-900/30 dark:text-pink-300":"text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-white/10 dark:hover:text-white"])},{default:r(()=>[d(b,{name:i.icon,class:"h-3.5 w-3.5"},null,8,["name"]),p("span",U,u(i.label),1)]),_:2},1032,["to","class"]))),128))],8,T)}}}),j={class:"flex h-full flex-col bg-white text-gray-900 dark:bg-page-dark dark:text-gray-100",style:{"padding-top":"var(--titlebar-area-height)"}},E={class:"mt-3 flex items-center justify-between gap-3 pb-1.5"},F={key:0,class:"hidden items-center gap-5 text-[11px] sm:flex"},G={key:0,class:"h-3 w-px bg-gray-250 dark:bg-white/10"},K={class:"flex items-center gap-1.5"},Q={class:"text-gray-400 dark:text-gray-500"},Z={class:"font-mono font-bold text-gray-900 dark:text-white"},q=k({__name:"index",setup(x){const{t:o}=w(),c=$(),l=g(()=>c.name==="people-relationships"?"relationships":"contacts"),f=g(()=>l.value==="relationships"?{title:o("layout.relationships"),description:o("relationships.subtitle"),icon:"i-lucide-git-fork",iconClass:"bg-primary-600 text-white dark:bg-primary-500 dark:text-white shadow-sm"}:{title:o("layout.relationships"),description:o("contacts.subtitle",{count:0}),icon:"i-lucide-users",iconClass:"bg-primary-600 text-white dark:bg-primary-500 dark:text-white shadow-sm"}),{header:t}=S(f);return(b,i)=>{const C=V;return a(),s("div",j,[d(L,{title:e(t).title,description:e(t).description,size:"compact",icon:e(t).icon,"icon-class":e(t).iconClass},{actions:r(()=>[e(t).action?(a(),m(C,{key:0,icon:e(t).action.icon,color:"primary",variant:"soft",size:"sm",class:y(["rounded-xl",e(t).action.class]),loading:e(t).action.loading,disabled:e(t).action.disabled,onClick:e(t).action.onClick},{default:r(()=>[H(u(e(t).action.label),1)]),_:1},8,["icon","class","loading","disabled","onClick"])):_("",!0)]),default:r(()=>[p("div",E,[d(D,{active:l.value},null,8,["active"]),e(t).stats?.length?(a(),s("div",F,[(a(!0),s(h,null,v(e(t).stats,n=>(a(),s(h,{key:n.id},[n.dividerBefore?(a(),s("div",G)):_("",!0),p("div",K,[p("span",Q,u(n.label),1),p("span",Z,u(n.value),1)])],64))),128))])):_("",!0)])]),_:1},8,["title","description","icon","icon-class"]),d(e(R),null,{default:r(({Component:n})=>[d(I,{name:"people-tab-slide",mode:"out-in"},{default:r(()=>[(a(),m(N(n),{key:l.value}))]),_:2},1024)]),_:1})])}}}),Y=z(q,[["__scopeId","data-v-19e6af8b"]]);export{Y as default};
@@ -1 +1 @@
1
- import{a as B,b as C,c as N,d as $,u as I,e as L}from"./vendor-nuxt-ui-DaLxYaC4.js";import{p as R,b as c,P as _,a5 as o,T as r,u as s,a9 as S,L as i,K as x,U as h,G as g,R as D}from"./vendor-reka-ui-CzM4kDQ7.js";import{u as W,i as z}from"./index-BsXljrlg.js";import"./vendor-snapdom-XnBoh1gd.js";const A={class:"flex min-h-screen items-center justify-center bg-gray-50 dark:bg-page-dark"},E={class:"w-full max-w-sm space-y-6 rounded-xl bg-white p-8 shadow-lg dark:bg-gray-800"},F={class:"text-center"},M={class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},P={key:0,class:"text-sm text-red-500"},T={class:"flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400"},j={class:"text-center text-xs text-gray-400 dark:text-gray-500"},q={key:0,class:"text-center text-xs text-amber-500 dark:text-amber-400"},Q=R({__name:"index",setup(G){const{t:e}=W(),v=I(),b=L(),f=z(),m=c(""),l=c(f.rememberDevice),n=c(""),u=c(!1);function y(t){return!t||!t.startsWith("/")||t.startsWith("/login")?"/":t}async function k(){const t=m.value.trim();if(!t){n.value=e("common.login.errorEmpty");return}u.value=!0,n.value="";try{if(!(await fetch("/api/v1/status",{headers:{Authorization:`Bearer ${t}`}})).ok){n.value=e("common.login.errorInvalid");return}f.login(t,l.value);const d=y(b.query.redirect);v.replace(d)}catch{n.value=e("common.login.errorNetwork")}finally{u.value=!1}}return(t,a)=>{const d=$,V=B,w=C,U=N;return g(),_("div",A,[o("div",E,[o("div",F,[a[2]||(a[2]=o("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"ChatLab",-1)),o("p",M,r(s(e)("common.login.description")),1)]),o("form",{class:"space-y-4",onSubmit:S(k,["prevent"])},[i(V,{label:s(e)("common.login.tokenLabel")},{default:x(()=>[i(d,{modelValue:m.value,"onUpdate:modelValue":a[0]||(a[0]=p=>m.value=p),type:"password",placeholder:s(e)("common.login.tokenPlaceholder"),autocomplete:"off",class:"w-full"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),n.value?(g(),_("p",P,r(n.value),1)):h("",!0),o("label",T,[i(w,{modelValue:l.value,"onUpdate:modelValue":a[1]||(a[1]=p=>l.value=p)},null,8,["modelValue"]),o("span",null,r(s(e)("common.login.rememberDevice")),1)]),i(U,{type:"submit",block:"",loading:u.value,color:"primary"},{default:x(()=>[D(r(s(e)("common.login.submit")),1)]),_:1},8,["loading"])],32),o("p",j,r(s(e)("common.login.hint")),1),l.value?(g(),_("p",q,r(s(e)("common.login.rememberWarning")),1)):h("",!0)])])}}});export{Q as default};
1
+ import{a as B,b as C,c as N,d as $,u as I,e as L}from"./vendor-nuxt-ui-DaLxYaC4.js";import{p as R,b as c,P as _,a5 as o,T as r,u as s,a9 as S,L as i,K as x,U as h,G as g,R as D}from"./vendor-reka-ui-CzM4kDQ7.js";import{u as W,i as z}from"./index-CdsKtFEJ.js";import"./vendor-snapdom-XnBoh1gd.js";const A={class:"flex min-h-screen items-center justify-center bg-gray-50 dark:bg-page-dark"},E={class:"w-full max-w-sm space-y-6 rounded-xl bg-white p-8 shadow-lg dark:bg-gray-800"},F={class:"text-center"},M={class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},P={key:0,class:"text-sm text-red-500"},T={class:"flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400"},j={class:"text-center text-xs text-gray-400 dark:text-gray-500"},q={key:0,class:"text-center text-xs text-amber-500 dark:text-amber-400"},Q=R({__name:"index",setup(G){const{t:e}=W(),v=I(),b=L(),f=z(),m=c(""),l=c(f.rememberDevice),n=c(""),u=c(!1);function y(t){return!t||!t.startsWith("/")||t.startsWith("/login")?"/":t}async function k(){const t=m.value.trim();if(!t){n.value=e("common.login.errorEmpty");return}u.value=!0,n.value="";try{if(!(await fetch("/api/v1/status",{headers:{Authorization:`Bearer ${t}`}})).ok){n.value=e("common.login.errorInvalid");return}f.login(t,l.value);const d=y(b.query.redirect);v.replace(d)}catch{n.value=e("common.login.errorNetwork")}finally{u.value=!1}}return(t,a)=>{const d=$,V=B,w=C,U=N;return g(),_("div",A,[o("div",E,[o("div",F,[a[2]||(a[2]=o("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"ChatLab",-1)),o("p",M,r(s(e)("common.login.description")),1)]),o("form",{class:"space-y-4",onSubmit:S(k,["prevent"])},[i(V,{label:s(e)("common.login.tokenLabel")},{default:x(()=>[i(d,{modelValue:m.value,"onUpdate:modelValue":a[0]||(a[0]=p=>m.value=p),type:"password",placeholder:s(e)("common.login.tokenPlaceholder"),autocomplete:"off",class:"w-full"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),n.value?(g(),_("p",P,r(n.value),1)):h("",!0),o("label",T,[i(w,{modelValue:l.value,"onUpdate:modelValue":a[1]||(a[1]=p=>l.value=p)},null,8,["modelValue"]),o("span",null,r(s(e)("common.login.rememberDevice")),1)]),i(U,{type:"submit",block:"",loading:u.value,color:"primary"},{default:x(()=>[D(r(s(e)("common.login.submit")),1)]),_:1},8,["loading"])],32),o("p",j,r(s(e)("common.login.hint")),1),l.value?(g(),_("p",q,r(s(e)("common.login.rememberWarning")),1)):h("",!0)])])}}});export{Q as default};
@@ -1 +1 @@
1
- import{f as a}from"./index-BsXljrlg.js";import"./vendor-reka-ui-CzM4kDQ7.js";import"./vendor-nuxt-ui-DaLxYaC4.js";import"./vendor-snapdom-XnBoh1gd.js";class l{async getVersion(){return"0.30.0"}async fetchRemoteConfig(e){try{const t=await fetch(e);return t.ok?{success:!0,data:await t.json()}:{success:!1,error:`HTTP ${t.status}`}}catch(t){return{success:!1,error:String(t)}}}setThemeSource(e){}async getOpenAtLogin(){return!1}async setOpenAtLogin(e){return{success:!1,error:"Not available in web mode"}}async getAnalyticsEnabled(){try{return(await(await a("/_web/telemetry/enabled")).json()).enabled===!0}catch{return!1}}async setAnalyticsEnabled(e){try{return await(await a("/_web/telemetry/enabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:e})})).json()}catch{return{success:!1}}}async trackDailyActive(e){await a("/_web/telemetry/track",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({eventName:"app_active",properties:{platform:"cli-web",locale:e}})}).catch(()=>{})}async showOpenDialog(e){return{canceled:!0,filePaths:[]}}async copyImageToClipboard(e){return{success:!1,error:"Not available in web mode"}}async checkUpdate(){try{return await(await a("/_web/system/check-update")).json()}catch(e){return{hasUpdate:!1,currentVersion:"unknown",error:e instanceof Error?e.message:String(e)}}}async performUpdate(){return{success:!1,error:"Web update is unavailable. Run clb update in your terminal."}}async relaunch(){window.location.reload()}}export{l as WebPlatformAdapter};
1
+ import{f as a}from"./index-CdsKtFEJ.js";import"./vendor-reka-ui-CzM4kDQ7.js";import"./vendor-nuxt-ui-DaLxYaC4.js";import"./vendor-snapdom-XnBoh1gd.js";class l{async getVersion(){return"0.30.1"}async fetchRemoteConfig(e){try{const t=await fetch(e);return t.ok?{success:!0,data:await t.json()}:{success:!1,error:`HTTP ${t.status}`}}catch(t){return{success:!1,error:String(t)}}}setThemeSource(e){}async getOpenAtLogin(){return!1}async setOpenAtLogin(e){return{success:!1,error:"Not available in web mode"}}async getAnalyticsEnabled(){try{return(await(await a("/_web/telemetry/enabled")).json()).enabled===!0}catch{return!1}}async setAnalyticsEnabled(e){try{return await(await a("/_web/telemetry/enabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:e})})).json()}catch{return{success:!1}}}async trackDailyActive(e){await a("/_web/telemetry/track",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({eventName:"app_active",properties:{platform:"cli-web",locale:e}})}).catch(()=>{})}async showOpenDialog(e){return{canceled:!0,filePaths:[]}}async copyImageToClipboard(e){return{success:!1,error:"Not available in web mode"}}async checkUpdate(){try{return await(await a("/_web/system/check-update")).json()}catch(e){return{hasUpdate:!1,currentVersion:"unknown",error:e instanceof Error?e.message:String(e)}}}async performUpdate(){return{success:!1,error:"Web update is unavailable. Run clb update in your terminal."}}async relaunch(){window.location.reload()}}export{l as WebPlatformAdapter};
@@ -1,4 +1,4 @@
1
- import{M as w,f as B,O,ar as A,a0 as k,j as _,G as M,b as U,N as E,I as z,a1 as T,T as b,ak as V,R as Y,w as X,r as P}from"./RelationshipGalaxyCanvas-W_6XfPOG.js";import{F as q}from"./Filter-Bo_p3BVX.js";import"./vendor-snapdom-XnBoh1gd.js";import"./index-BsXljrlg.js";import"./vendor-reka-ui-CzM4kDQ7.js";import"./vendor-nuxt-ui-DaLxYaC4.js";import"./index-CZv0ZOID.js";import"./LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js";import"./people-page-header-Mupn-U_b.js";import"./relationship-galaxy-viewport-Cwfa51ER.js";const v=new w;function G(g,e){e.clear();const t=e.matrix;for(let r=0;r<g.length;r++){const i=g[r];if(i.globalDisplayStatus<7)continue;const s=i.renderGroup??i.parentRenderGroup;s?.isCachedAsTexture?e.matrix=v.copyFrom(s.textureOffsetInverseTransform).append(i.worldTransform):s?._parentCacheAsTextureRenderGroup?e.matrix=v.copyFrom(s._parentCacheAsTextureRenderGroup.inverseWorldTransform).append(i.groupTransform):e.matrix=i.worldTransform,e.addBounds(i.bounds)}return e.matrix=t,e}function y(g){return typeof g.getCanvasFilterString=="function"}class L{constructor(){this.skip=!1,this.useClip=!1,this.filters=null,this.container=null,this.bounds=new k,this.cssFilterString=""}}class R{constructor(e){this._filterStack=[],this._filterStackIndex=0,this._savedStates=[],this._alphaMultiplier=1,this._warnedFilterTypes=new Set,this.renderer=e}push(e){const t=this._pushFilterFrame(),r=e.filterEffect.filters;if(t.skip=!1,t.useClip=!1,t.filters=r,t.container=e.container,t.cssFilterString="",r.every(o=>!o.enabled)){t.skip=!0;return}const i=[],s=1;for(const o of r){if(!o.enabled)continue;if(!y(o)){this._warnUnsupportedFilter(o);continue}const l=o.getCanvasFilterString();if(l===null){this._warnUnsupportedFilter(o);continue}l&&i.push(l)}if(i.length===0&&s===1){t.skip=!0;return}t.cssFilterString=i.join(" "),this._calculateFilterArea(e,t.bounds),t.useClip=!!e.filterEffect.filterArea;const n=this.renderer.canvasContext.activeContext,a=n.filter||"none";if(this._savedStates.push({filter:a,alphaMultiplier:this._alphaMultiplier}),t.useClip&&Number.isFinite(t.bounds.width)&&Number.isFinite(t.bounds.height)&&t.bounds.width>0&&t.bounds.height>0){const o=this.renderer.canvasContext.activeResolution||1;n.save(),n.setTransform(1,0,0,1,0,0),n.beginPath(),n.rect(t.bounds.x*o,t.bounds.y*o,t.bounds.width*o,t.bounds.height*o),n.clip()}else t.useClip=!1;t.cssFilterString&&(n.filter=a!=="none"?`${a} ${t.cssFilterString}`:t.cssFilterString)}pop(){const e=this._popFilterFrame();if(e.skip)return;const t=this._savedStates.pop();if(!t)return;const r=this.renderer.canvasContext.activeContext;e.useClip?r.restore():r.filter=t.filter,this._alphaMultiplier=t.alphaMultiplier}generateFilteredTexture({texture:e,filters:t}){if(!t?.length||t.every(d=>!d.enabled))return e;const r=[],i=1;for(const d of t){if(!d.enabled)continue;if(!y(d)){this._warnUnsupportedFilter(d);continue}const h=d.getCanvasFilterString();if(h===null){this._warnUnsupportedFilter(d);continue}h&&r.push(h)}if(r.length===0&&i===1)return e;const s=B.getCanvasSource(e);if(!s)return e;const n=e.frame,a=e.source._resolution??e.source.resolution??1,o=n.width,l=n.height,f=O.getOptimalCanvasAndContext(o,l,a),{canvas:c,context:u}=f;u.setTransform(1,0,0,1,0,0),u.clearRect(0,0,c.width,c.height),r.length&&(u.filter=r.join(" "));const p=n.x*a,m=n.y*a,x=o*a,F=l*a;return u.drawImage(s,p,m,x,F,0,0,x,F),u.filter="none",u.globalAlpha=1,A(c,o,l,a)}_calculateFilterArea(e,t){if(e.renderables?G(e.renderables,t):e.filterEffect.filterArea?(t.clear(),t.addRect(e.filterEffect.filterArea),t.applyMatrix(e.container.worldTransform)):e.container.getFastGlobalBounds(!0,t),e.container){const i=(e.container.renderGroup||e.container.parentRenderGroup)?.cacheToLocalTransform;i&&t.applyMatrix(i)}}_warnUnsupportedFilter(e){const t=e?.constructor?.name||"Filter";this._warnedFilterTypes.has(t)||(this._warnedFilterTypes.add(t),console.warn(`CanvasRenderer: filter "${t}" is not supported in Canvas2D and will be skipped.`))}get alphaMultiplier(){return this._alphaMultiplier}_pushFilterFrame(){let e=this._filterStack[this._filterStackIndex];return e||(e=this._filterStack[this._filterStackIndex]=new L),this._filterStackIndex++,e}_popFilterFrame(){return this._filterStackIndex<=0?this._filterStack[0]:(this._filterStackIndex--,this._filterStack[this._filterStackIndex])}destroy(){this._filterStack=null,this._savedStates=null,this._warnedFilterTypes=null,this._alphaMultiplier=1}}R.extension={type:[_.CanvasSystem],name:"filter"};var W=`in vec2 aPosition;
1
+ import{M as w,f as B,O,ar as A,a0 as k,j as _,G as M,b as U,N as E,I as z,a1 as T,T as b,ak as V,R as Y,w as X,r as P}from"./RelationshipGalaxyCanvas-D2owKyDp.js";import{F as q}from"./Filter-BgGyBeXz.js";import"./vendor-snapdom-XnBoh1gd.js";import"./index-CdsKtFEJ.js";import"./vendor-reka-ui-CzM4kDQ7.js";import"./vendor-nuxt-ui-DaLxYaC4.js";import"./index-IL5tkxhM.js";import"./LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js";import"./people-page-header-Mupn-U_b.js";import"./relationship-galaxy-viewport-Cwfa51ER.js";const v=new w;function G(g,e){e.clear();const t=e.matrix;for(let r=0;r<g.length;r++){const i=g[r];if(i.globalDisplayStatus<7)continue;const s=i.renderGroup??i.parentRenderGroup;s?.isCachedAsTexture?e.matrix=v.copyFrom(s.textureOffsetInverseTransform).append(i.worldTransform):s?._parentCacheAsTextureRenderGroup?e.matrix=v.copyFrom(s._parentCacheAsTextureRenderGroup.inverseWorldTransform).append(i.groupTransform):e.matrix=i.worldTransform,e.addBounds(i.bounds)}return e.matrix=t,e}function y(g){return typeof g.getCanvasFilterString=="function"}class L{constructor(){this.skip=!1,this.useClip=!1,this.filters=null,this.container=null,this.bounds=new k,this.cssFilterString=""}}class R{constructor(e){this._filterStack=[],this._filterStackIndex=0,this._savedStates=[],this._alphaMultiplier=1,this._warnedFilterTypes=new Set,this.renderer=e}push(e){const t=this._pushFilterFrame(),r=e.filterEffect.filters;if(t.skip=!1,t.useClip=!1,t.filters=r,t.container=e.container,t.cssFilterString="",r.every(o=>!o.enabled)){t.skip=!0;return}const i=[],s=1;for(const o of r){if(!o.enabled)continue;if(!y(o)){this._warnUnsupportedFilter(o);continue}const l=o.getCanvasFilterString();if(l===null){this._warnUnsupportedFilter(o);continue}l&&i.push(l)}if(i.length===0&&s===1){t.skip=!0;return}t.cssFilterString=i.join(" "),this._calculateFilterArea(e,t.bounds),t.useClip=!!e.filterEffect.filterArea;const n=this.renderer.canvasContext.activeContext,a=n.filter||"none";if(this._savedStates.push({filter:a,alphaMultiplier:this._alphaMultiplier}),t.useClip&&Number.isFinite(t.bounds.width)&&Number.isFinite(t.bounds.height)&&t.bounds.width>0&&t.bounds.height>0){const o=this.renderer.canvasContext.activeResolution||1;n.save(),n.setTransform(1,0,0,1,0,0),n.beginPath(),n.rect(t.bounds.x*o,t.bounds.y*o,t.bounds.width*o,t.bounds.height*o),n.clip()}else t.useClip=!1;t.cssFilterString&&(n.filter=a!=="none"?`${a} ${t.cssFilterString}`:t.cssFilterString)}pop(){const e=this._popFilterFrame();if(e.skip)return;const t=this._savedStates.pop();if(!t)return;const r=this.renderer.canvasContext.activeContext;e.useClip?r.restore():r.filter=t.filter,this._alphaMultiplier=t.alphaMultiplier}generateFilteredTexture({texture:e,filters:t}){if(!t?.length||t.every(d=>!d.enabled))return e;const r=[],i=1;for(const d of t){if(!d.enabled)continue;if(!y(d)){this._warnUnsupportedFilter(d);continue}const h=d.getCanvasFilterString();if(h===null){this._warnUnsupportedFilter(d);continue}h&&r.push(h)}if(r.length===0&&i===1)return e;const s=B.getCanvasSource(e);if(!s)return e;const n=e.frame,a=e.source._resolution??e.source.resolution??1,o=n.width,l=n.height,f=O.getOptimalCanvasAndContext(o,l,a),{canvas:c,context:u}=f;u.setTransform(1,0,0,1,0,0),u.clearRect(0,0,c.width,c.height),r.length&&(u.filter=r.join(" "));const p=n.x*a,m=n.y*a,x=o*a,F=l*a;return u.drawImage(s,p,m,x,F,0,0,x,F),u.filter="none",u.globalAlpha=1,A(c,o,l,a)}_calculateFilterArea(e,t){if(e.renderables?G(e.renderables,t):e.filterEffect.filterArea?(t.clear(),t.addRect(e.filterEffect.filterArea),t.applyMatrix(e.container.worldTransform)):e.container.getFastGlobalBounds(!0,t),e.container){const i=(e.container.renderGroup||e.container.parentRenderGroup)?.cacheToLocalTransform;i&&t.applyMatrix(i)}}_warnUnsupportedFilter(e){const t=e?.constructor?.name||"Filter";this._warnedFilterTypes.has(t)||(this._warnedFilterTypes.add(t),console.warn(`CanvasRenderer: filter "${t}" is not supported in Canvas2D and will be skipped.`))}get alphaMultiplier(){return this._alphaMultiplier}_pushFilterFrame(){let e=this._filterStack[this._filterStackIndex];return e||(e=this._filterStack[this._filterStackIndex]=new L),this._filterStackIndex++,e}_popFilterFrame(){return this._filterStackIndex<=0?this._filterStack[0]:(this._filterStackIndex--,this._filterStack[this._filterStackIndex])}destroy(){this._filterStack=null,this._savedStates=null,this._warnedFilterTypes=null,this._alphaMultiplier=1}}R.extension={type:[_.CanvasSystem],name:"filter"};var W=`in vec2 aPosition;
2
2
  out vec2 vTextureCoord;
3
3
 
4
4
  uniform vec4 uInputSize;
@@ -5,7 +5,7 @@
5
5
  <title>ChatLab</title>
6
6
  <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
7
7
  <link rel="icon" href="/favicon.ico" />
8
- <script type="module" crossorigin src="/assets/index-BsXljrlg.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-CdsKtFEJ.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/vendor-reka-ui-CzM4kDQ7.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/vendor-nuxt-ui-DaLxYaC4.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/vendor-snapdom-XnBoh1gd.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chatlab-cli",
3
- "version": "0.30.1-beta.2",
3
+ "version": "0.30.1",
4
4
  "description": "ChatLab CLI & Service - Chat history analysis tool",
5
5
  "type": "module",
6
6
  "bin": {