chatlab-cli 0.29.0 → 0.30.1-beta.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.
- package/dist/{chat-command-JKG3FY5B.mjs → chat-command-VBDMWOKL.mjs} +8 -8
- package/dist/{chunk-6FPEP2ZX.mjs → chunk-326OCJOT.mjs} +2 -2
- package/dist/{chunk-QQK7MLCR.mjs → chunk-36JGKW6K.mjs} +710 -282
- package/dist/chunk-36JGKW6K.mjs.map +1 -0
- package/dist/{chunk-SKUG5XVD.mjs → chunk-5EE2EFPE.mjs} +5 -4
- package/dist/{chunk-KL2NGIMQ.mjs → chunk-D3DPCDII.mjs} +444 -274
- package/dist/chunk-D3DPCDII.mjs.map +1 -0
- package/dist/{chunk-I35WHWA6.mjs → chunk-KBSAVUFV.mjs} +7 -4
- package/dist/chunk-KBSAVUFV.mjs.map +1 -0
- package/dist/{chunk-WPI6YSAR.mjs → chunk-LVEJHB3X.mjs} +4570 -4412
- package/dist/chunk-LVEJHB3X.mjs.map +1 -0
- package/dist/chunk-M2PXDX4G.mjs +2325 -0
- package/dist/chunk-M2PXDX4G.mjs.map +1 -0
- package/dist/{chunk-CIB23U32.mjs → chunk-TCZHG3G7.mjs} +101 -41
- package/dist/chunk-TCZHG3G7.mjs.map +1 -0
- package/dist/{chunk-D4WTE7LV.mjs → chunk-TEX44HNL.mjs} +16 -12
- package/dist/chunk-TEX44HNL.mjs.map +1 -0
- package/dist/{chunk-7RW4CQAO.mjs → chunk-ULNRUS55.mjs} +5 -3
- package/dist/chunk-ULNRUS55.mjs.map +1 -0
- package/dist/{chunk-2MZ6G4AC.mjs → chunk-WV5GSRQM.mjs} +2 -2
- package/dist/cli.mjs +7 -7
- package/dist/contacts-worker.mjs +2 -2
- package/dist/{http-5E7ARYFW.mjs → http-L4AMELPZ.mjs} +11 -11
- package/dist/{import-3KG6VK6O.mjs → import-WWCSXGVS.mjs} +7 -7
- package/dist/index.mjs +11 -11
- package/dist/{mcp-JBI4CUQT.mjs → mcp-A4M3LT5O.mjs} +8 -8
- package/dist/people-relationships-worker.mjs +2 -2
- package/dist/semantic-index-worker.mjs +1 -1
- package/dist/{src-UTBQAOJ3.mjs → src-MPNBTFOE.mjs} +14 -6
- package/dist/{stream-import-7HZ4IRYJ.mjs → stream-import-HIE7PNL4.mjs} +7 -7
- package/dist/{worker-runtime-ALS4MR2A.mjs → worker-runtime-BJXO24XX.mjs} +5 -5
- package/dist-web/assets/{BufferResource-MsqP5sq3.js → BufferResource-DPkMC1wo.js} +1 -1
- package/dist-web/assets/CanvasRenderer-DokMtSX9.js +1 -0
- package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-Ceg-0WOD.js +110 -0
- package/dist-web/assets/{Filter-wRJtdXx9.js → Filter-Bo_p3BVX.js} +1 -1
- package/dist-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js +1 -0
- package/dist-web/assets/{MessageExportModal-BCrMf5Kw.js → MessageExportModal-Ch0tqQix.js} +1 -1
- package/dist-web/assets/{PageHeader-C_yw54le.js → PageHeader-CRlmZoKw.js} +1 -1
- package/dist-web/assets/{RelationshipGalaxyCanvas-DTzJq7q7.js → RelationshipGalaxyCanvas-W_6XfPOG.js} +3 -3
- package/dist-web/assets/{RelationshipGalaxyThreeCanvas-DIE-0_iM.js → RelationshipGalaxyThreeCanvas-bB1nCwQ_.js} +1 -1
- package/dist-web/assets/{RenderTargetSystem-BSAQFamI.js → RenderTargetSystem-obRi6fMT.js} +1 -1
- package/dist-web/assets/{WebGLRenderer-lfzmCZNT.js → WebGLRenderer-xcDlnrCZ.js} +1 -1
- package/dist-web/assets/{WebGPURenderer-BnEdfdr_.js → WebGPURenderer-DbAOiiYr.js} +1 -1
- package/dist-web/assets/{browserAll-gRNfDyPu.js → browserAll-DVRJimO8.js} +1 -1
- package/dist-web/assets/electron-BSGRuxX9.js +1 -0
- package/dist-web/assets/{fetch-BW3aO7PS.js → fetch-7UN4YW3A.js} +1 -1
- package/dist-web/assets/{fetch-CQt-gb-f.js → fetch-B2alAySK.js} +1 -1
- package/dist-web/assets/fetch-B2rVTMYY.js +17 -0
- package/dist-web/assets/{fetch-C1fI_KOX.js → fetch-BSShKcMt.js} +1 -1
- package/dist-web/assets/{fetch-mFlEBZyB.js → fetch-BmxMf3I6.js} +1 -1
- package/dist-web/assets/{fetch-BwF5hNuF.js → fetch-CR5UDFW7.js} +1 -1
- package/dist-web/assets/{fetch-CFRoSIAn.js → fetch-ChAsglT5.js} +1 -1
- package/dist-web/assets/{fetch-CN91TIwV.js → fetch-DWEjTdcP.js} +1 -1
- package/dist-web/assets/{fetch-DPCJ-1l-.js → fetch-DfoxedXR.js} +1 -1
- package/dist-web/assets/{fetch-gMB4wuBd.js → fetch-t0WsRKHW.js} +1 -1
- package/dist-web/assets/index-B4l3rHie.css +1 -0
- package/dist-web/assets/{index-ZdCB7xcf.js → index-BVUTV9_w.js} +4 -4
- package/dist-web/assets/index-BmXNdMV5.js +2 -0
- package/dist-web/assets/index-BsXljrlg.js +22 -0
- package/dist-web/assets/{index-MBRD3wPd.css → index-C1p9CbmN.css} +1 -1
- package/dist-web/assets/index-COpza1A4.css +1 -0
- package/dist-web/assets/index-CQ5lRCHt.js +173 -0
- package/dist-web/assets/index-CZv0ZOID.js +2 -0
- package/dist-web/assets/{index-DveHdPfK.js → index-CfgDqd_z.js} +1 -1
- package/dist-web/assets/{index-Bg4GGPXv.js → index-CtVR_KuP.js} +1 -1
- package/dist-web/assets/index-DT0Bu8mH.js +64 -0
- package/dist-web/assets/index-DjcWJv4b.js +1 -0
- package/dist-web/assets/{vendor-nuxt-ui-Dr2T8_OZ.js → vendor-nuxt-ui-DaLxYaC4.js} +1 -1
- package/dist-web/assets/{web-BakeV58u.js → web-knHSvvNj.js} +1 -1
- package/dist-web/assets/{webworkerAll-D_6PgURS.js → webworkerAll-CMKoykfD.js} +1 -1
- package/dist-web/index.html +3 -3
- package/package.json +1 -1
- package/dist/chunk-7RW4CQAO.mjs.map +0 -1
- package/dist/chunk-ARZM6HBX.mjs +0 -542
- package/dist/chunk-ARZM6HBX.mjs.map +0 -1
- package/dist/chunk-CIB23U32.mjs.map +0 -1
- package/dist/chunk-D4WTE7LV.mjs.map +0 -1
- package/dist/chunk-I35WHWA6.mjs.map +0 -1
- package/dist/chunk-KL2NGIMQ.mjs.map +0 -1
- package/dist/chunk-QQK7MLCR.mjs.map +0 -1
- package/dist/chunk-WPI6YSAR.mjs.map +0 -1
- package/dist-web/assets/CanvasRenderer-BKCvcc2p.js +0 -1
- package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-HGJb0Et1.js +0 -110
- package/dist-web/assets/electron-BHaEaaZP.js +0 -1
- package/dist-web/assets/fetch-CBZbgZqk.js +0 -17
- package/dist-web/assets/index--6C0sK6a.css +0 -1
- package/dist-web/assets/index-B6wEGata.js +0 -173
- package/dist-web/assets/index-BgVbj5qX.js +0 -12
- package/dist-web/assets/index-BkoXaBV_.js +0 -64
- package/dist-web/assets/index-C56IuV5U.css +0 -1
- package/dist-web/assets/index-CLRaKwpT.js +0 -2
- package/dist-web/assets/index-Dj1BSD7O.js +0 -1
- package/dist-web/assets/index-RoDgJcHU.js +0 -2
- package/dist-web/assets/index-aljYO5ms.js +0 -1
- /package/dist/{chat-command-JKG3FY5B.mjs.map → chat-command-VBDMWOKL.mjs.map} +0 -0
- /package/dist/{chunk-6FPEP2ZX.mjs.map → chunk-326OCJOT.mjs.map} +0 -0
- /package/dist/{chunk-SKUG5XVD.mjs.map → chunk-5EE2EFPE.mjs.map} +0 -0
- /package/dist/{chunk-2MZ6G4AC.mjs.map → chunk-WV5GSRQM.mjs.map} +0 -0
- /package/dist/{http-5E7ARYFW.mjs.map → http-L4AMELPZ.mjs.map} +0 -0
- /package/dist/{import-3KG6VK6O.mjs.map → import-WWCSXGVS.mjs.map} +0 -0
- /package/dist/{mcp-JBI4CUQT.mjs.map → mcp-A4M3LT5O.mjs.map} +0 -0
- /package/dist/{src-UTBQAOJ3.mjs.map → src-MPNBTFOE.mjs.map} +0 -0
- /package/dist/{stream-import-7HZ4IRYJ.mjs.map → stream-import-HIE7PNL4.mjs.map} +0 -0
- /package/dist/{worker-runtime-ALS4MR2A.mjs.map → worker-runtime-BJXO24XX.mjs.map} +0 -0
|
@@ -0,0 +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 +1 @@
|
|
|
1
|
-
import{
|
|
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 +1 @@
|
|
|
1
|
-
import{
|
|
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};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EChartWordcloud-Clg60FMo.js","assets/vendor-echarts-wordcloud-k5ih2Jl4.js","assets/vendor-echarts-hJVnODyU.js","assets/vendor-zrender-5DcYjSZk.js","assets/vendor-reka-ui-CzM4kDQ7.js","assets/MessageExportModal-Ch0tqQix.js","assets/vendor-nuxt-ui-DaLxYaC4.js","assets/index-BsXljrlg.js","assets/vendor-snapdom-XnBoh1gd.js","assets/index-B4l3rHie.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as We}from"./vendor-snapdom-XnBoh1gd.js";import{j as st,f as ge,c as ce,o as ot,_ as Re,p as Oe,n as nt,d as je,i as lt,b as it,k as rt,e as ct,u as ut}from"./vendor-nuxt-ui-DaLxYaC4.js";import{b as S,d as fe,F as Le,p as B,G as o,P as b,Q as J,a5 as t,Z as W,a3 as Z,T as u,O as Ee,J as dt,H as C,a0 as pe,h as w,w as E,m as mt,u as e,K as M,L as x,U as L,R as K,bA as Pe,a9 as qe,bD as vt,au as Ge,E as ht,bE as Ke,n as Me,by as De,i as ze}from"./vendor-reka-ui-CzM4kDQ7.js";import{r as pt,u as X,o as be,T as le,m as Q,H as gt,q as Ye,_ as Ne,J as ft,k as yt,s as xt,t as bt}from"./index-BsXljrlg.js";import{f as ae,c as G,v as Je,w as kt,a as ne,x as _t,y as Ve,b as wt,d as Ue,e as $t,u as Ct,g as It,z as St,B as Mt,h as Tt,i as Vt,j as Rt,k as Lt,l as Dt,E as Nt,m as At,n as zt,o as Ut,p as Ft,q as Ht,r as Bt,C as Wt,s as Ot,A as jt,D as Et,t as Pt}from"./DebugToolsPanel.vue_vue_type_script_setup_true_lang-Ceg-0WOD.js";import"./vendor-echarts-wordcloud-k5ih2Jl4.js";import{_ as se}from"./LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js";import{u as Qe,s as qt,j as Ze,p as Gt,i as Xe,k as et,t as Kt,o as Yt,v as Jt}from"./vendor-echarts-hJVnODyU.js";import{a as Fe}from"./index-BVUTV9_w.js";import"./PageHeader-CRlmZoKw.js";import"./vendor-zrender-5DcYjSZk.js";function Qt(m,s={}){const{threshold:a=300,containerSelector:n=".overflow-y-auto",scrollLockDuration:r=800}=s,l=S(m[0]?.id||"");let d=!1;const f=S(null);let y=null;function k(){if(d)return;const c=[];m.forEach(p=>{const I=document.getElementById(p.id);if(I){const h=I.getBoundingClientRect();c.push({id:p.id,top:Math.round(h.top)})}});let i=0;for(let p=0;p<c.length;p++){if(c[p].top>a){i=Math.max(0,p-1);break}i=p}l.value=m[i]?.id||""}function g(c){const i=document.getElementById(c);i&&(l.value=c,d=!0,i.scrollIntoView({behavior:"smooth",block:"start"}),setTimeout(()=>{d=!1,k()},r))}return fe(()=>{y=f.value?.closest(n)||null,y&&(y.addEventListener("scroll",k,{passive:!0}),k())}),Le(()=>{y&&y.removeEventListener("scroll",k)}),{contentRef:f,activeAnchor:l,scrollToAnchor:g,updateActiveAnchor:k}}const Zt={class:"sticky top-24 space-y-6"},Xt={class:"border-l border-gray-200 dark:border-gray-800"},ea=["onClick"],ta=B({__name:"PageAnchorsNav",props:{anchors:{},activeAnchor:{},width:{default:"w-44"},hideOnMobile:{type:Boolean,default:!0}},emits:["click"],setup(m,{emit:s}){const a=s;function n(r){a("click",r)}return(r,l)=>(o(),b("div",{class:J([m.width,"shrink-0",m.hideOnMobile?"hidden lg:block":""])},[t("div",Zt,[t("nav",null,[t("div",Xt,[(o(!0),b(W,null,Z(m.anchors,d=>(o(),b("button",{key:d.id,class:J(["-ml-px block border-l-2 py-1.5 pl-4 text-left text-sm transition-colors",[m.activeAnchor===d.id?"border-pink-500 font-medium text-pink-600 dark:text-pink-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]]),onClick:f=>n(d.id)},u(d.label),11,ea))),128))])]),Ee(r.$slots,"default")])],2))}}),re=B({__name:"TopNSelect",props:{modelValue:{default:10},modelModifiers:{}},emits:["update:modelValue"],setup(m){const s=dt(m,"modelValue"),a=[{label:"Top 5",value:5},{label:"Top 10",value:10},{label:"Top 20",value:20},{label:"Top 30",value:30},{label:"Top 50",value:50},{label:"Top 100",value:100}];return(n,r)=>{const l=st;return o(),C(l,{modelValue:s.value,"onUpdate:modelValue":r[0]||(r[0]=d=>s.value=d),items:a,"value-key":"value",class:"w-25"},null,8,["modelValue"])}}}),de=B({__name:"ScrollableChart",props:{contentHeight:{},maxHeightVh:{default:60},paddingClass:{default:"px-3 py-2"}},setup(m){const s=m,a=w(()=>typeof window>"u"?500:Math.round(window.innerHeight*s.maxHeightVh/100)),n=w(()=>s.contentHeight>a.value),r=w(()=>({maxHeight:`${s.maxHeightVh}vh`,overflowY:n.value?"auto":"hidden"}));return(l,d)=>(o(),b("div",{class:J(m.paddingClass),style:pe(r.value)},[Ee(l.$slots,"default")],6))}}),aa=B({__name:"EChartGraph",props:{data:{},height:{default:400},layout:{default:"circular"},directed:{type:Boolean,default:!1}},setup(m,{expose:s}){Qe([qt,Ze,Gt,Xe]);const a=m,n=w(()=>typeof a.height=="number"?`${a.height}px`:a.height),r=pt(),l=S(null);let d=null;const f=["#ee4567","#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#9a60b4","#fc8452","#3ba272","#ea7ccc","#6e7074","#546570"],y=w(()=>{const v=new Set;return a.data.nodes.filter(_=>v.has(_.name)?!1:(v.add(_.name),!0))}),k=w(()=>{const v=new Map;return y.value.forEach((_,$)=>{v.set(_.name,f[$%f.length])}),v});function g(v,_){return _<=0?1:1+v/_*5}const c=w(()=>{const v=a.data.maxLinkValue||Math.max(...a.data.links.map(_=>_.value||1),1);return{tooltip:{trigger:"item",backgroundColor:r.value?"rgba(30, 30, 30, 0.9)":"rgba(255, 255, 255, 0.95)",borderColor:r.value?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)",textStyle:{color:r.value?"#e5e7eb":"#374151"},formatter:_=>_.dataType==="node"?`<b>${_.data.name}</b><br/>消息数: ${_.data.value||0}`:_.dataType==="edge"?`${_.data.source} → ${_.data.target}<br/>艾特次数: ${_.data.value||0}`:""},animationDuration:1e3,animationDurationUpdate:500,animationEasingUpdate:"quinticInOut",series:[{type:"graph",layout:a.layout,circular:a.layout==="circular"?{rotateLabel:!0}:void 0,force:a.layout==="force"?{repulsion:300,gravity:.1,edgeLength:[80,200],friction:.6}:void 0,roam:!0,scaleLimit:{min:.3,max:3},draggable:!0,label:{show:!0,position:"right",formatter:"{b}",color:r.value?"#e5e7eb":"#374151",fontSize:11,fontWeight:500},edgeSymbol:a.directed?["none","arrow"]:["none","none"],edgeSymbolSize:a.directed?[0,10]:[0,0],lineStyle:{curveness:.3,opacity:.5},emphasis:{focus:"adjacency",label:{show:!0,fontSize:13,fontWeight:600},lineStyle:{width:4,opacity:.9},itemStyle:{shadowBlur:15,shadowColor:"rgba(0, 0, 0, 0.3)"}},data:y.value.map(_=>{const $=k.value.get(_.name)||f[0];return{name:_.name,value:_.value,symbolSize:_.symbolSize||30,label:{show:a.layout==="circular"?!0:(_.symbolSize||30)>30},itemStyle:{color:$,borderColor:"#fff",borderWidth:2,shadowBlur:5,shadowColor:`${$}66`}}}),links:a.data.links.filter(_=>k.value.has(_.source)&&k.value.has(_.target)).map(_=>{const $=k.value.get(_.source)||f[0];return{source:_.source,target:_.target,value:_.value,lineStyle:{color:$,width:g(_.value||1,v)}}})}]}});function i(){l.value&&(d=et(l.value,r.value?"dark":void 0,{renderer:"canvas"}),d.setOption({backgroundColor:"transparent",...c.value}))}function p(){d&&d.setOption({backgroundColor:"transparent",...c.value},{notMerge:!0})}function I(){d?.resize()}function h(){d&&d.dispatchAction({type:"restore"})}return s({resetView:h}),E([()=>a.data,()=>a.layout,()=>a.directed,r],()=>{d?p():i()},{deep:!0}),fe(()=>{i(),window.addEventListener("resize",I)}),Le(()=>{window.removeEventListener("resize",I),d?.dispose()}),(v,_)=>(o(),b("div",{ref_key:"chartRef",ref:l,style:pe({height:n.value,width:"100%"})},null,4))}}),tt=Symbol("ranking-width-mode"),at={standard:{contentClass:"max-w-3xl",gridLeft:110,labelMaxLength:8},wide:{contentClass:"max-w-5xl",gridLeft:180,labelMaxLength:16},full:{contentClass:"max-w-none",gridLeft:260,labelMaxLength:28}};function me(){const m=mt(tt,null);return w(()=>at[m?.value??"standard"])}function ve(m,s){return m.length<=s?m:`${m.slice(0,s)}…`}const sa={class:"px-3 py-2"},ke=B({__name:"EChartRank",props:{members:{},title:{},description:{},topN:{default:10},unit:{default:"条"},height:{default:"auto"},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(m){const s=m,a=me(),n=w(()=>s.members.slice(0,s.topN)),r=w(()=>{if(s.height!=="auto")return s.height;const f=n.value.length*36;return Math.max(f+30,180)}),l={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#ee4567"},{offset:1,color:"#f7758c"}]},d=w(()=>{const f=[...n.value].reverse(),y=f.map(i=>ve(i.name,a.value.labelMaxLength)),k=f.map(i=>i.value),g=Math.max(...k,1),c=f.map(i=>({value:i.value,itemStyle:{color:l,borderRadius:[0,4,4,0]}}));return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"},formatter:i=>{const p=i[0];if(!p)return"";const I=n.value.length-1-p.dataIndex,h=n.value[I];return`
|
|
3
|
+
<div style="padding: 4px 8px;">
|
|
4
|
+
<div style="font-weight: bold; margin-bottom: 4px;">${h.name}</div>
|
|
5
|
+
<div>${h.value} ${s.unit} (${h.percentage}%)</div>
|
|
6
|
+
</div>
|
|
7
|
+
`}},grid:{left:a.value.gridLeft,right:70,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:g*1.1,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:y,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(i,p)=>{const h=n.value.length-1-p+1;return`${h===1?"🥇":h===2?"🥈":h===3?"🥉":`${h}.`} ${i}`}}},series:[{type:"bar",data:c,barWidth:18,barCategoryGap:"30%",label:{show:!0,position:"right",distance:8,formatter:i=>{const p=n.value.length-1-i.dataIndex;return`${n.value[p].value} ${s.unit}`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(238, 69, 103, 0.3)"}}}]}});return(f,y)=>m.bare?(o(),C(e(de),{key:0,"content-height":r.value,"max-height-vh":m.maxHeightVh},{default:M(()=>[x(ae,{option:d.value,height:r.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(o(),C(e(G),{key:1,title:m.title,description:m.description,scrollable:"","max-height-vh":m.maxHeightVh},{default:M(()=>[t("div",sa,[x(ae,{option:d.value,height:r.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),oa={class:"divide-y divide-gray-100 dark:divide-gray-800"},na={key:0,class:"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-linear-to-br from-pink-100 to-rose-100 text-sm font-medium text-pink-600 dark:from-pink-900/30 dark:to-rose-900/30 dark:text-pink-400"},la={class:"w-32 shrink-0"},ia={class:"wrap-break-word font-medium text-gray-900 dark:text-white"},ra={class:"flex flex-1 items-center"},ca={class:"h-2 w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800"},ua={class:"flex shrink-0 items-baseline gap-2 whitespace-nowrap"},da={class:"text-lg font-bold text-gray-900 dark:text-white"},ma={class:"text-sm text-gray-500"},He=B({__name:"RankList",props:{members:{},showAvatar:{type:Boolean,default:!1},rankLimit:{default:0},unit:{}},setup(m){const{t:s}=X(),a=m,n=w(()=>a.unit||s("views.charts.rankList.unit")),r=w(()=>a.rankLimit>0?a.members.slice(0,a.rankLimit):a.members);function l(d){if(r.value.length===0)return 0;const f=r.value[0].value;return f===0?0:Math.round(r.value[d].value/f*100)}return(d,f)=>(o(),b("div",oa,[(o(!0),b(W,null,Z(r.value,(y,k)=>(o(),b("div",{key:y.id,class:"flex items-center gap-3 px-5 py-3 transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/50"},[t("div",{class:J(["flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-sm font-bold",e(Je)(k)])},u(k+1),3),m.showAvatar?(o(),b("div",na,u(y.name.slice(0,1)),1)):L("",!0),t("div",la,[t("p",ia,u(y.name),1)]),t("div",ra,[t("div",ca,[t("div",{class:J(["h-full rounded-full bg-linear-to-r transition-all",e(kt)(k)]),style:pe({width:`${l(k)}%`})},null,6)])]),t("div",ua,[t("span",da,u(y.value),1),t("span",ma,u(n.value)+" ("+u(y.percentage)+"%)",1)])]))),128))]))}}),va={class:"flex items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-800"},ha={class:"font-semibold text-gray-900 whitespace-nowrap dark:text-white"},pa={key:0,class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},ga={class:"no-capture flex items-center gap-1"},fa={class:"flex w-full items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700"},ya={class:"flex items-center gap-2"},xa={class:"text-lg font-semibold text-gray-900 whitespace-nowrap dark:text-white"},ba={class:"text-sm text-gray-500"},ka={class:"max-h-[60vh] p-4 overflow-y-auto"},Be=B({__name:"RankListPro",props:{members:{},title:{},description:{},topN:{default:10},unit:{}},setup(m){const{t:s}=X(),a=m,n=S(!1),r=S(null),l=S(null),d=w(()=>a.members.slice(0,a.topN)),f=w(()=>a.members.length>a.topN);return(y,k)=>{const g=ce,c=ge;return o(),b("div",{ref_key:"cardRef",ref:r,class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-page-dark"},[t("div",va,[t("div",null,[t("h3",ha,u(m.title),1),m.description?(o(),b("p",pa,u(m.description),1)):L("",!0)]),t("div",ga,[x(Fe,{size:"xs",type:"element","target-element":r.value},null,8,["target-element"]),x(c,{open:n.value,"onUpdate:open":k[0]||(k[0]=i=>n.value=i),ui:{content:"md:w-full max-w-3xl"}},{content:M(()=>[t("div",{ref_key:"modalBodyRef",ref:l,class:"section-content flex flex-col"},[t("div",fa,[t("div",ya,[t("h3",xa,u(m.title),1),t("span",ba," ("+u(e(s)("views.charts.rankListPro.memberCount",{count:m.members.length}))+") ",1)]),x(Fe,{size:"xs",type:"element","target-element":l.value},null,8,["target-element"])]),t("div",ka,[x(He,{members:m.members,unit:m.unit},null,8,["members","unit"])])],512)]),default:M(()=>[f.value?(o(),C(g,{key:0,icon:"i-heroicons-list-bullet",variant:"ghost"},{default:M(()=>[K(u(e(s)("views.charts.rankListPro.fullRanking")),1)]),_:1})):L("",!0)]),_:1},8,["open"])])]),x(He,{members:d.value,unit:m.unit},null,8,["members","unit"])],512)}}}),_a={class:"main-content mx-auto max-w-6xl py-6"},wa={class:"mb-4 flex items-center justify-end gap-4"},$a={class:"text-xs text-gray-500 dark:text-gray-400"},Ca={key:0,class:"grid grid-cols-2 gap-6"},Ia={class:"mb-3 text-center"},Sa={class:"text-base font-semibold text-gray-900 dark:text-white"},Ma={class:"flex flex-wrap gap-2"},Ta=["title","onClick"],Va={class:"text-xs opacity-50"},Ra={key:1,class:"grid grid-cols-2 gap-6"},La={class:"mb-3 text-center"},Da={class:"text-base font-semibold text-gray-900 dark:text-white"},Na={class:"relative w-full",style:{"aspect-ratio":"4 / 3"}},Aa={class:"mt-4 text-center text-xs text-gray-500 dark:text-gray-400"},za=B({__name:"CatchphraseTab",props:{sessionId:{},timeFilter:{}},setup(m){const s=Pe(()=>We(()=>import("./EChartWordcloud-Clg60FMo.js"),__vite__mapDeps([0,1,2,3,4]))),{t:a}=X(),n=be(),r=m,l=S(null),d=S(!1),f=S("list"),y=S(30),k=w(()=>[{label:a("quotes.catchphrase.viewMode.list"),value:"list"},{label:a("quotes.catchphrase.viewMode.wordcloud"),value:"wordcloud"}]),g=[{label:"10",value:10},{label:"30",value:30},{label:"50",value:50},{label:"100",value:100}],c=w(()=>l.value&&l.value.members.length>0),i=w(()=>{if(!l.value)return[];const T=y.value;return console.log("[CatchphraseTab] displayMembers recompute, topN:",T,"type:",typeof T),l.value.members.map(z=>{const D=z.catchphrases.slice(0,T);return console.log("[CatchphraseTab]",z.name,"total:",z.catchphrases.length,"display:",D.length),{...z,catchphrases:D}})}),p=w(()=>i.value.map(T=>({name:T.name,data:{words:T.catchphrases.map(z=>({word:z.content,count:z.count}))}}))),I=[{bg:"bg-amber-50 dark:bg-amber-900/20",text:"text-amber-700 dark:text-amber-400",badge:"bg-amber-100 dark:bg-amber-800/40 text-amber-600 dark:text-amber-300"},{bg:"bg-slate-50 dark:bg-slate-800/40",text:"text-slate-600 dark:text-slate-300",badge:"bg-slate-100 dark:bg-slate-700/60 text-slate-500 dark:text-slate-400"},{bg:"bg-orange-50 dark:bg-orange-900/15",text:"text-orange-600 dark:text-orange-400",badge:"bg-orange-100 dark:bg-orange-800/30 text-orange-500 dark:text-orange-300"}];function h(T){return T<I.length?I[T]:{bg:"bg-gray-50 dark:bg-gray-800/30",text:"text-gray-600 dark:text-gray-400",badge:"bg-gray-100 dark:bg-gray-700/40 text-gray-500 dark:text-gray-400"}}function v(T,z=20){return T.length<=z?T:T.slice(0,z)+"..."}async function _(){if(r.sessionId){d.value=!0;try{l.value=await Q().getCatchphraseAnalysis(r.sessionId,r.timeFilter),console.log("[CatchphraseTab] API result: members:",l.value?.members.length,"per-member catchphrases:",l.value?.members.map(T=>({name:T.name,count:T.catchphrases.length})))}catch(T){console.error("Failed to load catchphrase analysis:",T)}finally{d.value=!1}}}function $(T){n.openChatRecordDrawer({keywords:[T]})}return E(y,(T,z)=>{console.log("[CatchphraseTab] topN changed:",z,"->",T,"type:",typeof T)}),E(()=>[r.sessionId,r.timeFilter],()=>{_()},{immediate:!0,deep:!0}),(T,z)=>(o(),b("div",_a,[d.value?(o(),C(e(se),{key:0,text:e(a)("quotes.catchphrase.loading")},null,8,["text"])):c.value?(o(),b(W,{key:2},[t("div",wa,[t("span",$a,u(e(a)("quotes.catchphrase.topN")),1),x(e(le),{modelValue:y.value,"onUpdate:modelValue":z[0]||(z[0]=D=>y.value=D),size:"xs",items:g},null,8,["modelValue"]),z[2]||(z[2]=t("div",{class:"h-4 w-px bg-gray-200 dark:bg-gray-700"},null,-1)),x(e(le),{modelValue:f.value,"onUpdate:modelValue":z[1]||(z[1]=D=>f.value=D),size:"xs",items:k.value},null,8,["modelValue","items"])]),f.value==="list"?(o(),b("div",Ca,[(o(!0),b(W,null,Z(i.value,D=>(o(),b("div",{key:D.memberId},[t("div",Ia,[t("span",Sa,u(D.name),1)]),t("div",Ma,[(o(!0),b(W,null,Z(D.catchphrases,(F,U)=>(o(),b("div",{key:U,class:J(["inline-flex cursor-pointer items-center gap-1.5 rounded-full px-3 py-1.5 transition-opacity hover:opacity-75",h(U).bg]),title:F.content,onClick:O=>$(F.content)},[U<3?(o(),b("span",{key:0,class:J(["flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-bold",h(U).badge])},u(U+1),3)):L("",!0),t("span",{class:J(["text-sm font-medium",h(U).text])},u(v(F.content)),3),t("span",Va,u(e(a)("quotes.catchphrase.times",{count:F.count})),1)],10,Ta))),128))])]))),128))])):(o(),b("div",Ra,[(o(!0),b(W,null,Z(p.value,D=>(o(),b("div",{key:D.name},[t("div",La,[t("span",Da,u(D.name),1)]),t("div",Na,[D.data.words.length===0?(o(),C(e(ne),{key:0,text:e(a)("quotes.catchphrase.empty.title"),class:"h-full"},null,8,["text"])):(o(),C(e(s),{key:1,data:D.data,height:"100%","max-words":y.value,"color-scheme":"default","size-scale":1,loading:d.value,onWordClick:$},null,8,["data","max-words","loading"]))])]))),128))])),t("p",Aa,u(e(a)("quotes.catchphrase.stats.clickHint")),1)],64)):(o(),C(e(ne),{key:1,text:e(a)("quotes.catchphrase.empty.title")},null,8,["text"]))]))}}),Ua={class:"main-content mx-auto max-w-3xl p-6"},Fa={class:"flex items-center gap-3"},Ha={class:"shrink-0 text-lg font-bold text-pink-600"},Ba={class:"flex flex-1 items-center gap-1 overflow-hidden text-sm"},Wa={class:"shrink-0 font-medium text-gray-900 dark:text-white whitespace-nowrap"},Oa=["title"],ja={class:"flex shrink-0 items-center gap-2 text-xs text-gray-500"},Ea=B({__name:"HotRepeatTab",props:{sessionId:{},timeFilter:{}},setup(m){const{t:s}=X(),a=m,n=be(),r=S(null),l=S(!1);async function d(){if(a.sessionId){l.value=!0;try{r.value=await Q().getRepeatAnalysis(a.sessionId,a.timeFilter)}catch(k){console.error("Failed to load repeat analysis:",k)}finally{l.value=!1}}}function f(k,g=30){return k.length<=g?k:k.slice(0,g)+"..."}function y(k){n.openChatRecordDrawer({scrollToMessageId:k.firstMessageId,highlightKeywords:[k.content]})}return E(()=>[a.sessionId,a.timeFilter],()=>{d()},{immediate:!0,deep:!0}),(k,g)=>{const c=ce;return o(),b("div",Ua,[l.value?(o(),C(e(se),{key:0,text:e(s)("quotes.hotRepeat.loading")},null,8,["text"])):r.value&&r.value.hotContents.length>0?(o(),C(e(_t),{key:1,items:r.value.hotContents,title:e(s)("quotes.hotRepeat.title"),description:e(s)("quotes.hotRepeat.description"),"top-n":50,"count-template":e(s)("quotes.hotRepeat.countTemplate")},{item:M(({item:i,index:p})=>[t("div",Fa,[t("span",{class:J(["flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold",e(Je)(p)])},u(p+1),3),t("span",Ha,u(e(s)("quotes.hotRepeat.people",{count:i.maxChainLength})),1),t("div",Ba,[t("span",Wa,u(i.originatorName)+u(e(s)("quotes.hotRepeat.colon")),1),t("span",{class:"truncate text-gray-600 dark:text-gray-400",title:i.content},u(f(i.content)),9,Oa)]),t("div",ja,[t("span",null,u(e(s)("quotes.hotRepeat.times",{count:i.count})),1),g[0]||(g[0]=t("span",{class:"text-gray-300 dark:text-gray-600"},"|",-1)),t("span",null,u(e(Ve)(i.lastTs)),1),x(c,{icon:"i-heroicons-chat-bubble-left-right",color:"neutral",variant:"ghost",size:"xs",title:e(s)("quotes.hotRepeat.viewChat"),onClick:qe(I=>y(i),["stop"])},null,8,["title","onClick"])])])]),_:1},8,["items","title","description","count-template"])):(o(),C(e(G),{key:2,title:e(s)("quotes.hotRepeat.title")},{default:M(()=>[x(e(ne),{text:e(s)("quotes.hotRepeat.empty")},null,8,["text"])]),_:1},8,["title"]))])}}}),Pa={class:"main-content mx-auto max-w-[920px] space-y-6 p-6"},qa={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},Ga={class:"p-5"},Ka={class:"p-5"},Ya=B({__name:"OverviewTab",props:{session:{},memberActivity:{},topMembers:{},bottomMembers:{},messageTypes:{},hourlyActivity:{},dailyActivity:{},timeRange:{},filteredMessageCount:{},filteredMemberCount:{},timeFilter:{}},setup(m){const{t:s}=X(),a=m,{dailyChartData:n}=Ct(()=>a.dailyActivity),r=w(()=>({labels:a.messageTypes.map(d=>It(d.type,s)),values:a.messageTypes.map(d=>d.count)})),l=w(()=>{const d=[...a.memberActivity].sort((c,i)=>i.messageCount-c.messageCount),f=d.slice(0,10),y=d.slice(10).reduce((c,i)=>c+i.messageCount,0),k=f.map(c=>c.name),g=f.map(c=>c.messageCount);return y>0&&(k.push(s("analysis.overview.others")),g.push(y)),{labels:k,values:g}});return(d,f)=>(o(),b("div",Pa,[x(wt,{session:m.session,"daily-activity":m.dailyActivity,"message-types":m.messageTypes,"hourly-activity":m.hourlyActivity,"time-range":m.timeRange,"filtered-message-count":m.filteredMessageCount,"filtered-member-count":m.filteredMemberCount,"time-filter":m.timeFilter},null,8,["session","daily-activity","message-types","hourly-activity","time-range","filtered-message-count","filtered-member-count","time-filter"]),t("div",qa,[x(e(G),{title:e(s)("analysis.overview.messageTypeDistribution"),"show-divider":!1},{default:M(()=>[t("div",Ga,[x(e(Ue),{data:r.value,height:280},null,8,["data"])])]),_:1},8,["title"]),x(e(G),{title:e(s)("analysis.overview.memberDistribution"),"show-divider":!1},{default:M(()=>[t("div",Ka,[x(e(Ue),{data:l.value,height:280},null,8,["data"])])]),_:1},8,["title"])]),x($t,{"daily-activity":m.dailyActivity,"daily-chart-data":e(n)},null,8,["daily-activity","daily-chart-data"])]))}}),Ja={class:"flex items-center gap-3"},Qa={key:1,class:"py-8 text-center text-sm text-gray-400"},Za=B({__name:"ActivityRank",props:{sessionId:{},memberActivity:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(m){const s=m,a=S(null),n=S(null),r=S(!1),l=S("activity"),d=S(s.globalTopN??10);E(()=>s.globalTopN,h=>{h!==void 0&&(d.value=h)});async function f(){if(s.sessionId){r.value=!0;try{const h=Q(),[v,_]=await Promise.all([h.getDragonKingAnalysis(s.sessionId,s.timeFilter),h.getCheckInAnalysis(s.sessionId,s.timeFilter)]);a.value=v,n.value=_}catch(h){console.error("加载活跃数据失败:",h)}finally{r.value=!1}}}const y=w(()=>s.memberActivity.map(h=>({id:h.memberId.toString(),name:h.name,value:h.messageCount,percentage:h.percentage}))),k=w(()=>a.value?a.value.rank.map(h=>({id:h.memberId.toString(),name:h.name,value:h.count,percentage:h.percentage})):[]),g=w(()=>n.value?n.value.loyaltyRank.map(h=>({id:h.memberId.toString(),name:h.name,value:h.totalDays,percentage:h.percentage})):[]),c=w(()=>{switch(l.value){case"activity":return y.value;case"dragon":return k.value;case"loyalty":return g.value;default:return y.value}}),i=w(()=>{switch(l.value){case"activity":return"条";case"dragon":case"loyalty":return"天";default:return"条"}}),p=w(()=>{switch(l.value){case"activity":return"🏆 活跃榜 - 发言数量";case"dragon":return"🏆 活跃榜 - 龙王";case"loyalty":return"🏆 活跃榜 - 累计发言";default:return"🏆 活跃榜"}}),I=w(()=>{switch(l.value){case"activity":return"按消息发送数量排名";case"dragon":return`每天发言最多的人+1(共 ${a.value?.totalDays??0} 天)`;case"loyalty":return`累计发言天数排名(共 ${n.value?.totalDays??0} 天)`;default:return""}});return E(()=>[s.sessionId,s.timeFilter],()=>f(),{immediate:!0,deep:!0}),(h,v)=>(o(),C(e(G),{title:p.value,description:I.value},{headerRight:M(()=>[t("div",Ja,[m.showTopNSelect?(o(),C(e(re),{key:0,modelValue:d.value,"onUpdate:modelValue":v[0]||(v[0]=_=>d.value=_)},null,8,["modelValue"])):L("",!0),x(e(le),{modelValue:l.value,"onUpdate:modelValue":v[1]||(v[1]=_=>l.value=_),items:[{label:"发言数量",value:"activity"},{label:"龙王",value:"dragon"},{label:"累计发言",value:"loyalty"}],size:"sm"},null,8,["modelValue"])])]),default:M(()=>[r.value&&(l.value==="dragon"||l.value==="loyalty")?(o(),C(e(se),{key:0,text:"正在加载数据..."})):(o(),b(W,{key:1},[c.value.length>0?(o(),C(e(ke),{key:0,members:c.value,title:p.value,unit:i.value,"top-n":d.value,bare:""},null,8,["members","title","unit","top-n"])):(o(),b("div",Qa,"暂无数据"))],64))]),_:1},8,["title","description"]))}}),Xa={key:0},es={key:0,class:"flex items-center justify-center gap-6 border-t border-gray-100 px-5 py-3 dark:border-gray-800"},ts={class:"px-3 py-2"},as=B({__name:"EChartStreakRank",props:{items:{},title:{},description:{},topN:{default:10},mode:{default:"max"},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(m){const s=m,a=me(),n=w(()=>s.mode==="current"?s.items.filter(g=>g.currentStreak>0).sort((g,c)=>c.currentStreak-g.currentStreak).slice(0,s.topN):s.items.slice(0,s.topN)),r=w(()=>{const g=n.value.length*36;return Math.max(g+30,180)}),l={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#ee4567"},{offset:1,color:"#f7758c"}]},d={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#f97316"},{offset:1,color:"#fb923c"}]};function f(g,c){return`${g} ~ ${c}`}function y(g){return s.mode==="current"?g.currentStreak:g.maxStreak}const k=w(()=>{const g=[...n.value].reverse(),c=g.map(h=>ve(h.name,a.value.labelMaxLength)),i=g.map(h=>y(h)),p=Math.max(...i,1),I=g.map(h=>({value:y(h),itemStyle:{color:s.mode==="current"||h.currentStreak>0?d:l,borderRadius:[0,4,4,0]}}));return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"},formatter:h=>{const v=h[0];if(!v)return"";const _=n.value.length-1-v.dataIndex,$=n.value[_];if(s.mode==="current")return`
|
|
8
|
+
<div style="padding: 4px 8px;">
|
|
9
|
+
<div style="font-weight: bold; margin-bottom: 6px;">${$.name}</div>
|
|
10
|
+
<div style="color: #fb923c;">🔥 当前连续 <b>${$.currentStreak}</b> 天</div>
|
|
11
|
+
<div style="margin-top: 4px; font-size: 12px; color: #9ca3af;">最长记录: ${$.maxStreak} 天</div>
|
|
12
|
+
</div>
|
|
13
|
+
`;let T=`
|
|
14
|
+
<div style="padding: 4px 8px;">
|
|
15
|
+
<div style="font-weight: bold; margin-bottom: 6px;">${$.name}</div>
|
|
16
|
+
<div style="margin-bottom: 4px;">🔥 最长连续: <b>${$.maxStreak}</b> 天</div>
|
|
17
|
+
<div style="font-size: 12px; color: #9ca3af;">${f($.maxStreakStart,$.maxStreakEnd)}</div>
|
|
18
|
+
`;return $.currentStreak>0&&(T+=`<div style="margin-top: 6px; color: #fb923c;">🔥 当前连续 ${$.currentStreak} 天</div>`),T+="</div>",T}},grid:{left:a.value.gridLeft,right:70,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:p*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:c,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(h,v)=>{const $=n.value.length-1-v+1;return`${$===1?"🥇":$===2?"🥈":$===3?"🥉":`${$}.`} ${h}`}}},series:[{type:"bar",data:I,barWidth:18,barCategoryGap:"30%",label:{show:!0,position:"right",distance:8,formatter:h=>{const v=n.value.length-1-h.dataIndex,_=n.value[v],$=y(_),T=s.mode==="current"||_.currentStreak>0?" 🔥":"";return`${$} 天${T}`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(249, 115, 22, 0.3)"}}}]}});return(g,c)=>m.bare?(o(),b("div",Xa,[x(e(de),{"content-height":r.value,"max-height-vh":m.maxHeightVh},{default:M(()=>[x(e(ae),{option:k.value,height:r.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"]),m.mode==="max"?(o(),b("div",es,[...c[0]||(c[0]=[vt('<div class="flex items-center gap-1.5"><div class="h-3 w-6 rounded bg-linear-to-r from-orange-500 to-orange-400"></div><span class="text-xs text-gray-500">当前连续中 🔥</span></div><div class="flex items-center gap-1.5"><div class="h-3 w-6 rounded bg-linear-to-r from-pink-500 to-pink-400"></div><span class="text-xs text-gray-500">已中断</span></div>',2)])])):L("",!0)])):(o(),C(e(G),{key:1,title:m.title,description:m.description,scrollable:"","max-height-vh":m.maxHeightVh},Ge({default:M(()=>[t("div",ts,[x(e(ae),{option:k.value,height:r.value},null,8,["option","height"])])]),_:2},[m.mode==="max"?{name:"footer",fn:M(()=>[c[1]||(c[1]=t("div",{class:"flex items-center justify-center gap-6 border-t border-gray-100 px-5 py-3 dark:border-gray-800"},[t("div",{class:"flex items-center gap-1.5"},[t("div",{class:"h-3 w-6 rounded bg-linear-to-r from-orange-500 to-orange-400"}),t("span",{class:"text-xs text-gray-500"},"当前连续中 🔥")]),t("div",{class:"flex items-center gap-1.5"},[t("div",{class:"h-3 w-6 rounded bg-linear-to-r from-pink-500 to-pink-400"}),t("span",{class:"text-xs text-gray-500"},"已中断")])],-1))]),key:"0"}:void 0]),1032,["title","description","max-height-vh"]))}}),ss={class:"px-3 py-2"},os=B({__name:"EChartBattleRank",props:{battles:{},title:{},description:{},topN:{default:10},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(m){const s=m,a=w(()=>s.battles.slice(0,s.topN)),n=w(()=>{const f=a.value.length*36;return Math.max(f+30,180)}),r={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#ee4567"},{offset:1,color:"#f7758c"}]};function l(f){return`${f.participantCount} 人参战`}const d=w(()=>{const f=[...a.value].reverse(),y=f.map(i=>l(i)),k=f.map(i=>i.totalImages),g=Math.max(...k,1),c=f.map(i=>({value:i.totalImages,itemStyle:{color:r,borderRadius:[0,4,4,0]}}));return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.85)",borderColor:"transparent",textStyle:{color:"#fff",fontSize:12},extraCssText:"max-width: 300px;",formatter:i=>{const p=i[0];if(!p)return"";const I=a.value.length-1-p.dataIndex,h=a.value[I],v=h.participants.slice(0,5).map($=>`<span style="color: #d1d5db;">${$.name}</span> <b>${$.imageCount}</b>张`).join("、"),_=h.participants.length>5?`、+${h.participants.length-5}`:"";return`
|
|
19
|
+
<div style="padding: 6px 8px;">
|
|
20
|
+
<div style="font-weight: bold; margin-bottom: 8px; font-size: 13px;">
|
|
21
|
+
⚔️ ${Ve(h.startTime)}
|
|
22
|
+
</div>
|
|
23
|
+
<div style="margin-bottom: 6px;">
|
|
24
|
+
<span style="color: #9ca3af;">参战人数:</span> <b>${h.participantCount}</b> 人
|
|
25
|
+
</div>
|
|
26
|
+
<div style="margin-bottom: 8px;">
|
|
27
|
+
<span style="color: #9ca3af;">总图片数:</span> <b style="color: #f472b6;">${h.totalImages}</b> 张
|
|
28
|
+
</div>
|
|
29
|
+
<div style="border-top: 1px solid #374151; padding-top: 6px; font-size: 11px;">
|
|
30
|
+
${v}${_}
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
`}},grid:{left:95,right:125,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:g*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:y,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:11,color:"#4b5563",margin:12,formatter:(i,p)=>{const h=a.value.length-1-p+1;return`${h===1?"🥇":h===2?"🥈":h===3?"🥉":`${h}.`} ${i}`}}},series:[{type:"bar",data:c,barWidth:18,barCategoryGap:"30%",label:{show:!0,position:"right",distance:8,formatter:i=>{const p=a.value.length-1-i.dataIndex,I=a.value[p],h=Ve(I.startTime);return`${I.totalImages} 张 (${h})`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(238, 69, 103, 0.3)"}}}]}});return(f,y)=>m.bare?(o(),C(e(de),{key:0,"content-height":n.value,"max-height-vh":m.maxHeightVh},{default:M(()=>[x(e(ae),{option:d.value,height:n.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(o(),C(e(G),{key:1,title:m.title,description:m.description,scrollable:"","max-height-vh":m.maxHeightVh},{default:M(()=>[t("div",ss,[x(e(ae),{option:d.value,height:n.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),ns={class:"px-3 py-2"},ls=B({__name:"EChartTimeRank",props:{items:{},title:{},description:{},topN:{default:10},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(m){const s=m,a=me(),n=w(()=>s.items.slice(0,s.topN)),r=w(()=>{const y=n.value.length*36;return Math.max(y+30,180)}),l={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#f59e0b"},{offset:1,color:"#fbbf24"}]};function d(y){return(y/1e3).toFixed(2)+"s"}const f=w(()=>{if(n.value.length===0)return{};const y=[...n.value].reverse(),k=y.map(i=>ve(i.name,a.value.labelMaxLength)),g=n.value[0].avgTimeDiff,c=y.map(i=>({value:Math.round(g/i.avgTimeDiff*100),itemStyle:{color:l,borderRadius:[0,4,4,0]}}));return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"},formatter:i=>{const p=i[0];if(!p)return"";const I=n.value.length-1-p.dataIndex,h=n.value[I];return`
|
|
34
|
+
<div style="padding: 4px 8px;">
|
|
35
|
+
<div style="font-weight: bold; margin-bottom: 6px;">${h.name}</div>
|
|
36
|
+
<div style="margin-bottom: 4px;">⚡️ 平均反应时间: <b>${d(h.avgTimeDiff)}</b></div>
|
|
37
|
+
<div style="font-size: 12px; color: #9ca3af;">参与复读 ${h.count} 次</div>
|
|
38
|
+
</div>
|
|
39
|
+
`}},grid:{left:a.value.gridLeft,right:100,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:105,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:k,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(i,p)=>{const h=n.value.length-1-p+1;return`${h===1?"🥇":h===2?"🥈":h===3?"🥉":`${h}.`} ${i}`}}},series:[{type:"bar",data:c,barWidth:18,barCategoryGap:"30%",label:{show:!0,position:"right",distance:8,formatter:i=>{const p=n.value.length-1-i.dataIndex,I=n.value[p];return`${d(I.avgTimeDiff)} · ${I.count}次`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(245, 158, 11, 0.3)"}}}]}});return(y,k)=>m.bare?(o(),C(e(de),{key:0,"content-height":r.value,"max-height-vh":m.maxHeightVh},{default:M(()=>[x(e(ae),{option:f.value,height:r.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(o(),C(e(G),{key:1,title:m.title,description:m.description,scrollable:"","max-height-vh":m.maxHeightVh},{default:M(()=>[t("div",ns,[x(e(ae),{option:f.value,height:r.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),is={class:"flex items-center gap-3"},rs={class:"px-3 py-2"},cs=B({__name:"EChartDivingRank",props:{items:{},showTopNSelect:{type:Boolean,default:!0},maxHeightVh:{default:60},globalTopN:{}},setup(m){const s=m,a=me(),n=S("desc"),r=S(s.globalTopN??10);E(()=>s.globalTopN,i=>{i!==void 0&&(r.value=i)});const l=w(()=>[...s.items].sort((p,I)=>n.value==="desc"?I.daysSinceLastMessage-p.daysSinceLastMessage:p.daysSinceLastMessage-I.daysSinceLastMessage).slice(0,r.value)),d=w(()=>n.value==="desc"?"🤿 潜水榜 - 潜水最久":"🤿 潜水榜 - 最近冒泡"),f=w(()=>n.value==="desc"?"距离上次发言时间最久的成员":"最近发言过的成员"),y=w(()=>{const i=l.value.length*36;return Math.max(i+30,180)}),k={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#06b6d4"},{offset:1,color:"#22d3ee"}]};function g(i){return i===0?"今天":i===1?"昨天":`${i} 天前`}const c=w(()=>{if(l.value.length===0)return{};const i=[...l.value].reverse(),p=i.map(v=>ve(v.name,a.value.labelMaxLength)),I=Math.max(...l.value.map(v=>v.daysSinceLastMessage),1),h=i.map(v=>({value:v.daysSinceLastMessage,itemStyle:{color:k,borderRadius:[0,4,4,0]}}));return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"},formatter:v=>{const _=v[0];if(!_)return"";const $=l.value.length-1-_.dataIndex,T=l.value[$];return`
|
|
40
|
+
<div style="padding: 4px 8px;">
|
|
41
|
+
<div style="font-weight: bold; margin-bottom: 6px;">${T.name}</div>
|
|
42
|
+
<div style="margin-bottom: 4px;">🤿 ${g(T.daysSinceLastMessage)}</div>
|
|
43
|
+
<div style="font-size: 12px; color: #9ca3af;">最后发言: ${St(T.lastMessageTs)}</div>
|
|
44
|
+
</div>
|
|
45
|
+
`}},grid:{left:a.value.gridLeft,right:100,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:I*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:p,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(v,_)=>{const T=l.value.length-1-_+1;return`${T===1?"🥇":T===2?"🥈":T===3?"🥉":`${T}.`} ${v}`}}},series:[{type:"bar",data:h,barWidth:18,barCategoryGap:"30%",label:{show:!0,position:"right",distance:8,formatter:v=>{const _=l.value.length-1-v.dataIndex,$=l.value[_];return g($.daysSinceLastMessage)},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(0, 0, 0, 0.2)"}}}]}});return(i,p)=>(o(),C(e(G),{title:d.value,description:f.value,scrollable:"","max-height-vh":m.maxHeightVh},{headerRight:M(()=>[t("div",is,[m.showTopNSelect?(o(),C(e(re),{key:0,modelValue:r.value,"onUpdate:modelValue":p[0]||(p[0]=I=>r.value=I)},null,8,["modelValue"])):L("",!0),x(e(le),{modelValue:n.value,"onUpdate:modelValue":p[1]||(p[1]=I=>n.value=I),items:[{label:"潜水最久",value:"desc"},{label:"最近冒泡",value:"asc"}],size:"sm"},null,8,["modelValue"])])]),default:M(()=>[t("div",rs,[x(e(ae),{option:c.value,height:y.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),us={class:"px-3 py-2"},ds=B({__name:"EChartConsecutiveRank",props:{items:{},title:{},description:{},topN:{default:10},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(m){const s=m,a=me(),n=w(()=>[...s.items].sort((y,k)=>k.maxConsecutiveDays-y.maxConsecutiveDays).slice(0,s.topN)),r=w(()=>{const y=n.value.length*36;return Math.max(y+30,180)}),l={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#f97316"},{offset:1,color:"#fb923c"}]},d={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#ec4899"},{offset:1,color:"#f472b6"}]},f=w(()=>{if(n.value.length===0)return{};const y=[...n.value].reverse(),k=y.map(c=>ve(c.name,a.value.labelMaxLength)),g=Math.max(...n.value.map(c=>c.maxConsecutiveDays),1);return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.85)",borderColor:"transparent",textStyle:{color:"#fff",fontSize:12},formatter:c=>{if(!c||c.length===0)return"";const i=c[0].dataIndex,p=n.value.length-1-i,I=n.value[p];let h=`
|
|
46
|
+
<div style="padding: 6px 8px;">
|
|
47
|
+
<div style="font-weight: bold; margin-bottom: 6px;">${I.name}</div>
|
|
48
|
+
<div>最长连续: <b style="color: #f472b6;">${I.maxConsecutiveDays}</b> 天</div>
|
|
49
|
+
`;return I.currentStreak>0&&(h+=`<div style="color: #f97316;">🔥 当前连续 ${I.currentStreak} 天</div>`),h+="</div>",h}},legend:{show:!1},grid:{left:a.value.gridLeft,right:75,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:g*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:k,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(c,i)=>{const I=n.value.length-1-i+1;return`${I===1?"🥇":I===2?"🥈":I===3?"🥉":`${I}.`} ${c}`}}},series:[{name:"当前连续",type:"bar",data:y.map(c=>({value:c.currentStreak>0?c.maxConsecutiveDays:0,itemStyle:{color:l,borderRadius:[0,4,4,0]}})),barWidth:18,barGap:"-100%",label:{show:!0,position:"right",distance:8,formatter:c=>{const i=n.value.length-1-c.dataIndex,p=n.value[i];return p.currentStreak>0?`${p.maxConsecutiveDays} 天`:""},fontSize:11,fontWeight:500,color:"#6b7280"}},{name:"已中断",type:"bar",data:y.map(c=>({value:c.currentStreak===0?c.maxConsecutiveDays:0,itemStyle:{color:d,borderRadius:[0,4,4,0]}})),barWidth:18,label:{show:!0,position:"right",distance:8,formatter:c=>{const i=n.value.length-1-c.dataIndex,p=n.value[i];return p.currentStreak===0?`${p.maxConsecutiveDays} 天`:""},fontSize:11,fontWeight:500,color:"#6b7280"}}]}});return(y,k)=>m.bare?(o(),C(e(de),{key:0,"content-height":r.value,"max-height-vh":m.maxHeightVh},{default:M(()=>[x(e(ae),{option:f.value,height:r.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(o(),C(e(G),{key:1,title:m.title,description:m.description,scrollable:"","max-height-vh":m.maxHeightVh},{default:M(()=>[t("div",us,[x(e(ae),{option:f.value,height:r.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),ms={class:"px-3 py-2"},vs=B({__name:"EChartNightOwlRank",props:{items:{},title:{},description:{},topN:{default:10},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(m){const s=m,a=me(),n=w(()=>s.items.slice(0,s.topN)),r=w(()=>{const f=n.value.length*36;return Math.max(f+50,200)}),l={h23:"#8b5cf6",h0:"#3b82f6",h1:"#06b6d4",h2:"#f59e0b",h3to4:"#ef4444"},d=w(()=>{if(n.value.length===0)return{};const f=[...n.value].reverse(),y=f.map(g=>ve(g.name,a.value.labelMaxLength)),k=Math.max(...n.value.map(g=>g.totalNightMessages),1);return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.85)",borderColor:"transparent",textStyle:{color:"#fff",fontSize:12},formatter:g=>{if(!g||g.length===0)return"";const c=g[0].dataIndex,i=n.value.length-1-c,p=n.value[i],I=p.hourlyBreakdown;return`
|
|
50
|
+
<div style="padding: 6px 8px;">
|
|
51
|
+
<div style="font-weight: bold; margin-bottom: 6px;">${p.name}</div>
|
|
52
|
+
<div style="margin-bottom: 4px;">
|
|
53
|
+
称号: <b style="color: #f472b6;">${p.title}</b>
|
|
54
|
+
</div>
|
|
55
|
+
<div style="margin-bottom: 6px;">总发言: <b>${p.totalNightMessages}</b> 条</div>
|
|
56
|
+
<div style="border-top: 1px solid #374151; padding-top: 6px;">
|
|
57
|
+
<div><span style="color: ${l.h23};">●</span> 23点: ${I.h23} 条</div>
|
|
58
|
+
<div><span style="color: ${l.h0};">●</span> 0点: ${I.h0} 条</div>
|
|
59
|
+
<div><span style="color: ${l.h1};">●</span> 1点: ${I.h1} 条</div>
|
|
60
|
+
<div><span style="color: ${l.h2};">●</span> 2点: ${I.h2} 条</div>
|
|
61
|
+
<div><span style="color: ${l.h3to4};">●</span> 3-4点: ${I.h3to4} 条</div>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
`}},legend:{show:!0,bottom:0,itemWidth:12,itemHeight:12,textStyle:{color:"#6b7280",fontSize:10}},grid:{left:a.value.gridLeft,right:70,top:15,bottom:35,containLabel:!1},xAxis:{type:"value",max:k*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:y,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(g,c)=>{const p=n.value.length-1-c+1;return`${p===1?"🥇":p===2?"🥈":p===3?"🥉":`${p}.`} ${g}`}}},series:[{name:"23点",type:"bar",stack:"total",data:f.map(g=>g.hourlyBreakdown.h23),itemStyle:{color:l.h23},barWidth:18},{name:"0点",type:"bar",stack:"total",data:f.map(g=>g.hourlyBreakdown.h0),itemStyle:{color:l.h0},barWidth:18},{name:"1点",type:"bar",stack:"total",data:f.map(g=>g.hourlyBreakdown.h1),itemStyle:{color:l.h1},barWidth:18},{name:"2点",type:"bar",stack:"total",data:f.map(g=>g.hourlyBreakdown.h2),itemStyle:{color:l.h2},barWidth:18},{name:"3-4点",type:"bar",stack:"total",data:f.map(g=>g.hourlyBreakdown.h3to4),itemStyle:{color:l.h3to4,borderRadius:[0,4,4,0]},barWidth:18,label:{show:!0,position:"right",distance:8,formatter:g=>{const c=n.value.length-1-g.dataIndex;return`${n.value[c].totalNightMessages} 条`},fontSize:11,fontWeight:500,color:"#6b7280"}}]}});return(f,y)=>m.bare?(o(),C(e(de),{key:0,"content-height":r.value,"max-height-vh":m.maxHeightVh},{default:M(()=>[x(e(ae),{option:d.value,height:r.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(o(),C(e(G),{key:1,title:m.title,description:m.description,scrollable:"","max-height-vh":m.maxHeightVh},{default:M(()=>[t("div",ms,[x(e(ae),{option:d.value,height:r.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),hs={id:"streak-rank",class:"scroll-mt-24"},ps={class:"flex items-center gap-3"},gs=B({__name:"CheckInRank",props:{sessionId:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(m){const s=m,a=S(null),n=S(!1),r=S("max"),l=S(s.globalTopN??10);E(()=>s.globalTopN,g=>{g!==void 0&&(l.value=g)});const d=w(()=>r.value==="max"?"🔥 火花榜 - 最长连续":"🔥 火花榜 - 当前连续"),f=w(()=>r.value==="max"?"历史最长连续发言天数":"正在持续连续发言的成员"),y=w(()=>a.value?a.value.streakRank.some(g=>g.currentStreak>0):!1);async function k(){if(s.sessionId){n.value=!0;try{a.value=await Q().getCheckInAnalysis(s.sessionId,s.timeFilter)}catch(g){console.error("加载打卡分析失败:",g)}finally{n.value=!1}}}return E(()=>[s.sessionId,s.timeFilter],()=>{k()},{immediate:!0,deep:!0}),(g,c)=>(o(),b("div",hs,[n.value?(o(),C(e(se),{key:0,text:"正在分析数据..."})):a.value&&a.value.streakRank.length>0?(o(),C(e(G),{key:1,title:d.value,description:f.value},{headerRight:M(()=>[t("div",ps,[m.showTopNSelect?(o(),C(e(re),{key:0,modelValue:l.value,"onUpdate:modelValue":c[0]||(c[0]=i=>l.value=i)},null,8,["modelValue"])):L("",!0),y.value?(o(),C(e(le),{key:1,modelValue:r.value,"onUpdate:modelValue":c[1]||(c[1]=i=>r.value=i),items:[{label:"最长连续",value:"max"},{label:"当前连续",value:"current"}],size:"sm"},null,8,["modelValue"])):L("",!0)])]),default:M(()=>[x(e(as),{items:a.value.streakRank,title:d.value,mode:r.value,"top-n":l.value,bare:""},null,8,["items","title","mode","top-n"])]),_:1},8,["title","description"])):(o(),C(e(G),{key:2,title:"🔥 火花榜"},{default:M(()=>[x(e(ne),{text:"暂无连续发言数据"})]),_:1}))]))}}),fs={class:"flex items-center gap-3"},ys={key:1,class:"py-8 text-center text-sm text-gray-400"},xs={key:1,class:"py-8 text-center text-sm text-gray-400"},bs=B({__name:"MemeBattleRank",props:{sessionId:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(m){const s=m,a=S(null),n=S(!1),r=S("count"),l=S(s.globalTopN??10);E(()=>s.globalTopN,p=>{p!==void 0&&(l.value=p)});async function d(){if(s.sessionId){n.value=!0;try{a.value=await Q().getMemeBattleAnalysis(s.sessionId,s.timeFilter)}catch(p){console.error("加载斗图分析失败:",p)}finally{n.value=!1}}}const f=w(()=>a.value?a.value.rankByCount.map(p=>({id:p.memberId.toString(),name:p.name,value:p.count,percentage:p.percentage})):[]),y=w(()=>a.value?a.value.rankByImageCount.map(p=>({id:p.memberId.toString(),name:p.name,value:p.count,percentage:p.percentage})):[]),k=w(()=>r.value==="count"?f.value:y.value),g=w(()=>r.value==="count"?"场":"张"),c=w(()=>{switch(r.value){case"battle":return"⚔️ 斗图榜 - 史诗级战役";case"count":return"⚔️ 斗图榜 - 按场次";case"image":return"⚔️ 斗图榜 - 按图量";default:return"⚔️ 斗图榜"}}),i=w(()=>{switch(r.value){case"battle":return"记录最激烈的斗图大战";case"count":return"参与斗图次数最多的人";case"image":return"在斗图中发送图片最多的人";default:return""}});return E(()=>[s.sessionId,s.timeFilter],()=>d(),{immediate:!0,deep:!0}),(p,I)=>n.value?(o(),C(e(se),{key:0,text:"正在统计斗图数据..."})):a.value?(o(),C(e(G),{key:1,title:c.value,description:i.value},{headerRight:M(()=>[t("div",fs,[m.showTopNSelect?(o(),C(e(re),{key:0,modelValue:l.value,"onUpdate:modelValue":I[0]||(I[0]=h=>l.value=h)},null,8,["modelValue"])):L("",!0),x(e(le),{modelValue:r.value,"onUpdate:modelValue":I[1]||(I[1]=h=>r.value=h),items:[{label:"按场次",value:"count"},{label:"按图量",value:"image"},{label:"史诗级战役",value:"battle"}],size:"sm"},null,8,["modelValue"])])]),default:M(()=>[r.value==="battle"?(o(),b(W,{key:0},[a.value.topBattles.length>0?(o(),C(e(os),{key:0,battles:a.value.topBattles,title:"","top-n":l.value,bare:""},null,8,["battles","top-n"])):(o(),b("div",ys,"暂无史诗级战役数据"))],64)):(o(),b(W,{key:1},[k.value.length>0?(o(),C(e(ke),{key:0,members:k.value,title:c.value,unit:g.value,"top-n":l.value,bare:""},null,8,["members","title","unit","top-n"])):(o(),b("div",xs,"暂无斗图数据"))],64))]),_:1},8,["title","description"])):L("",!0)}}),ks={class:"space-y-6"},_s={class:"flex items-center gap-3"},ws={class:"flex items-center gap-3"},$s={key:1,class:"px-3 py-2"},Cs=B({__name:"RepeatSection",props:{sessionId:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(m){const s=m,a=S(null),n=S(!1),r=S("originator"),l=S("fastest"),d=S(s.globalTopN??10),f=S(s.globalTopN??10);E(()=>s.globalTopN,$=>{$!==void 0&&(d.value=$,f.value=$)});async function y(){if(s.sessionId){n.value=!0;try{a.value=await Q().getRepeatAnalysis(s.sessionId,s.timeFilter)}catch($){console.error("加载复读分析失败:",$)}finally{n.value=!1}}}const k=w(()=>a.value?a.value.originators.map($=>({id:$.memberId.toString(),name:$.name,value:$.count,percentage:$.percentage})):[]),g=w(()=>a.value?a.value.initiators.map($=>({id:$.memberId.toString(),name:$.name,value:$.count,percentage:$.percentage})):[]),c=w(()=>a.value?a.value.breakers.map($=>({id:$.memberId.toString(),name:$.name,value:$.count,percentage:$.percentage})):[]),i=w(()=>{switch(r.value){case"originator":return k.value;case"initiator":return g.value;case"breaker":return c.value;default:return k.value}}),p=w(()=>{switch(r.value){case"originator":return"🔁 复读榜 - 被复读";case"initiator":return"🔁 复读榜 - 挑起";case"breaker":return"🔁 复读榜 - 打断";default:return"🔁 复读榜"}}),I=w(()=>{switch(r.value){case"originator":return"发出的消息被别人复读的次数";case"initiator":return"第二个发送相同消息、带起节奏的人";case"breaker":return"终结复读链的人";default:return""}}),h=w(()=>{if(!a.value)return{labels:[],values:[]};const $=a.value.chainLengthDistribution;return{labels:$.map(T=>`${T.length}人`),values:$.map(T=>T.count)}}),v=w(()=>l.value==="fastest"?"📊 复读统计 - 最快反应":"📊 复读统计 - 链长分布"),_=w(()=>{if(l.value==="fastest")return"平均复读反应时间(至少参与5次复读)";const $=a.value?.totalRepeatChains??0,T=a.value?.avgChainLength??0;return`共 ${$} 次复读,平均 ${T} 人参与`});return E(()=>[s.sessionId,s.timeFilter],()=>y(),{immediate:!0,deep:!0}),($,T)=>(o(),b("div",ks,[n.value?(o(),C(e(se),{key:0,text:"正在分析复读数据..."})):a.value&&a.value.totalRepeatChains>0?(o(),b(W,{key:1},[x(e(G),{title:p.value,description:I.value},{headerRight:M(()=>[t("div",_s,[m.showTopNSelect?(o(),C(e(re),{key:0,modelValue:d.value,"onUpdate:modelValue":T[0]||(T[0]=z=>d.value=z)},null,8,["modelValue"])):L("",!0),x(e(le),{modelValue:r.value,"onUpdate:modelValue":T[1]||(T[1]=z=>r.value=z),items:[{label:"被复读",value:"originator"},{label:"挑起",value:"initiator"},{label:"打断",value:"breaker"}],size:"sm"},null,8,["modelValue"])])]),default:M(()=>[i.value.length>0?(o(),C(e(ke),{key:0,members:i.value,title:p.value,unit:"次","top-n":d.value,bare:""},null,8,["members","title","top-n"])):(o(),C(e(ne),{key:1,text:"暂无数据"}))]),_:1},8,["title","description"]),x(e(G),{title:v.value,description:_.value},{headerRight:M(()=>[t("div",ws,[m.showTopNSelect&&l.value==="fastest"?(o(),C(e(re),{key:0,modelValue:f.value,"onUpdate:modelValue":T[2]||(T[2]=z=>f.value=z)},null,8,["modelValue"])):L("",!0),x(e(le),{modelValue:l.value,"onUpdate:modelValue":T[3]||(T[3]=z=>l.value=z),items:[{label:"最快反应",value:"fastest"},{label:"链长分布",value:"distribution"}],size:"sm"},null,8,["modelValue"])])]),default:M(()=>[l.value==="fastest"?(o(),b(W,{key:0},[a.value.fastestRepeaters&&a.value.fastestRepeaters.length>0?(o(),C(e(ls),{key:0,items:a.value.fastestRepeaters,"top-n":f.value,title:"",bare:""},null,8,["items","top-n"])):(o(),C(e(ne),{key:1,text:"暂无最快复读数据"}))],64)):(o(),b("div",$s,[h.value.labels.length>0?(o(),C(e(Mt),{key:0,data:h.value,height:200},null,8,["data"])):(o(),C(e(ne),{key:1,text:"暂无分布数据"}))]))]),_:1},8,["title","description"])],64)):(o(),C(e(G),{key:2,title:"🔁 复读榜"},{default:M(()=>[x(e(ne),{text:"该群组暂无复读记录"})]),_:1}))]))}}),Is=B({__name:"DivingRank",props:{sessionId:{},timeFilter:{},globalTopN:{}},setup(m){const s=m,a=S(null),n=S(!1);async function r(){if(s.sessionId){n.value=!0;try{a.value=await Q().getDivingAnalysis(s.sessionId,s.timeFilter)}catch(l){console.error("加载潜水分析失败:",l)}finally{n.value=!1}}}return E(()=>[s.sessionId,s.timeFilter],()=>r(),{immediate:!0,deep:!0}),(l,d)=>n.value?(o(),C(e(se),{key:0,text:"正在统计潜水数据..."})):a.value&&a.value.rank.length>0?(o(),C(e(cs),{key:1,items:a.value.rank,"global-top-n":m.globalTopN},null,8,["items","global-top-n"])):L("",!0)}}),Ss={class:"space-y-6"},Ms={class:"flex items-center gap-3"},Ts={key:1,class:"py-8 text-center text-sm text-gray-400"},Vs={key:1,class:"py-8 text-center text-sm text-gray-400"},Rs={class:"flex items-center gap-3"},Ls={key:1,class:"py-8 text-center text-sm text-gray-400"},Ds=B({__name:"NightOwlRank",props:{sessionId:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(m){const s=m,a=S(null),n=S(!1),r=S("first"),l=S("distribution"),d=S(s.globalTopN??10),f=S(s.globalTopN??10);E(()=>s.globalTopN,v=>{v!==void 0&&(d.value=v,f.value=v)});async function y(){if(s.sessionId){n.value=!0;try{a.value=await Q().getNightOwlAnalysis(s.sessionId,s.timeFilter)}catch(v){console.error("加载出勤分析失败:",v)}finally{n.value=!1}}}const k=w(()=>a.value?a.value.lastSpeakerRank.map(v=>({id:String(v.memberId),name:v.name,value:v.count,percentage:v.percentage})):[]),g=w(()=>a.value?a.value.firstSpeakerRank.map(v=>({id:String(v.memberId),name:v.name,value:v.count,percentage:v.percentage})):[]),c=w(()=>r.value==="last"?k.value:g.value),i=w(()=>r.value==="last"?"⏰ 出勤排行 - 最晚下班":"⏰ 出勤排行 - 最早上班"),p=w(()=>{const v=a.value?.totalDays??0;return r.value==="last"?`每天最后一个发言的人(共 ${v} 天)`:`每天第一个发言的人(共 ${v} 天)`}),I=w(()=>l.value==="distribution"?"🦉 修仙统计 - 发言分布":"🦉 修仙统计 - 连续记录"),h=w(()=>l.value==="distribution"?"深夜时段(23:00-05:00)各时段发言分布":"连续在深夜时段发言的天数");return E(()=>[s.sessionId,s.timeFilter],()=>y(),{immediate:!0,deep:!0}),(v,_)=>(o(),b("div",Ss,[n.value?(o(),C(e(se),{key:0,text:"正在加载出勤分析..."})):a.value?(o(),b(W,{key:1},[x(e(G),{title:I.value,description:h.value},{headerRight:M(()=>[t("div",Ms,[m.showTopNSelect?(o(),C(e(re),{key:0,modelValue:d.value,"onUpdate:modelValue":_[0]||(_[0]=$=>d.value=$)},null,8,["modelValue"])):L("",!0),x(e(le),{modelValue:l.value,"onUpdate:modelValue":_[1]||(_[1]=$=>l.value=$),items:[{label:"发言分布",value:"distribution"},{label:"连续记录",value:"consecutive"}],size:"sm"},null,8,["modelValue"])])]),default:M(()=>[l.value==="distribution"?(o(),b(W,{key:0},[a.value.nightOwlRank.length>0?(o(),C(e(vs),{key:0,items:a.value.nightOwlRank,"top-n":d.value,title:"",bare:""},null,8,["items","top-n"])):(o(),b("div",Ts,"暂无深夜发言数据"))],64)):(o(),b(W,{key:1},[a.value.consecutiveRecords.length>0?(o(),C(e(ds),{key:0,items:a.value.consecutiveRecords,"top-n":d.value,title:"",bare:""},null,8,["items","top-n"])):(o(),b("div",Vs,"暂无连续记录"))],64))]),_:1},8,["title","description"]),x(e(G),{title:i.value,description:p.value},{headerRight:M(()=>[t("div",Rs,[m.showTopNSelect?(o(),C(e(re),{key:0,modelValue:f.value,"onUpdate:modelValue":_[2]||(_[2]=$=>f.value=$)},null,8,["modelValue"])):L("",!0),x(e(le),{modelValue:r.value,"onUpdate:modelValue":_[3]||(_[3]=$=>r.value=$),items:[{label:"最早上班",value:"first"},{label:"最晚下班",value:"last"}],size:"sm"},null,8,["modelValue"])])]),default:M(()=>[c.value.length>0?(o(),C(e(ke),{key:0,members:c.value,title:i.value,"top-n":f.value,unit:"次",bare:""},null,8,["members","title","top-n"])):(o(),b("div",Ls,"暂无数据"))]),_:1},8,["title","description"])],64)):L("",!0)]))}}),Ns={class:"mb-8 mt-4"},As={class:"text-5xl tracking-wider",style:{"font-weight":"800",background:"linear-gradient(to right, #f59e0b, #ec4899, #9333ea)","-webkit-background-clip":"text","-webkit-text-fill-color":"transparent"}},zs={id:"activity-rank",class:"scroll-mt-24"},Us={id:"meme-battle",class:"scroll-mt-24"},Fs={id:"repeat",class:"scroll-mt-24"},Hs={id:"night-owl",class:"scroll-mt-24"},Bs={id:"diving",class:"scroll-mt-24"},Ws={class:"border-l border-gray-200 pl-4 dark:border-gray-800"},Os={class:"mt-4 border-l border-gray-200 pl-4 dark:border-gray-800"},js={class:"flex rounded-lg border border-gray-200 bg-white p-0.5 text-xs dark:border-gray-700 dark:bg-page-dark"},Es=["onClick"],Ps=B({__name:"RankingView",props:{sessionId:{},timeFilter:{}},setup(m){const s=m,a=S([]),n=S([]);async function r(){if(!s.sessionId)return;const h=Q(),[v,_]=await Promise.all([h.getMemberActivity(s.sessionId,s.timeFilter),h.getAvailableYears(s.sessionId)]);a.value=v,n.value=_}E(()=>[s.sessionId,s.timeFilter],()=>r(),{immediate:!0,deep:!0});const l=w(()=>{if(s.timeFilter?.startTs&&s.timeFilter?.endTs){const h=new Date(s.timeFilter.startTs*1e3).getFullYear(),v=new Date(s.timeFilter.endTs*1e3).getFullYear();return h===v?`${h} 赛季`:`${h}-${v} 赛季`}if(n.value.length>0){const h=[...n.value].sort(($,T)=>$-T),v=h[0],_=h[h.length-1];return v===_?`${v} 赛季`:`${v}-${_} 赛季`}return"全部赛季"}),d=w(()=>({startTs:s.timeFilter?.startTs,endTs:s.timeFilter?.endTs})),f=[{id:"activity-rank",label:"🏆 活跃榜"},{id:"streak-rank",label:"🔥 火花榜"},{id:"meme-battle",label:"⚔️ 斗图榜"},{id:"repeat",label:"🔁 复读榜"},{id:"night-owl",label:"⏰ 出勤榜"},{id:"diving",label:"🤿 潜水榜"}],{contentRef:y,activeAnchor:k,scrollToAnchor:g}=Qt(f,{threshold:350}),c=S(10),i=S("standard");ht(tt,i);const p=[{value:"standard",label:"标准"},{value:"wide",label:"宽屏"},{value:"full",label:"全宽"}],I=w(()=>at[i.value].contentClass);return(h,v)=>(o(),b("div",{ref_key:"contentRef",ref:y,class:"flex gap-6 p-6"},[t("div",{class:J(["main-content min-w-0 flex-1 px-8 mx-auto space-y-6",I.value])},[t("div",Ns,[t("h1",As," 🏆 "+u(l.value),1),v[1]||(v[1]=t("p",{class:"mt-4 text-sm text-gray-500 dark:text-gray-400"},"各榜单前三名请找群主领取奖励 🎁",-1))]),t("div",zs,[x(e(Za),{"session-id":s.sessionId,"member-activity":a.value,"time-filter":d.value,"global-top-n":c.value},null,8,["session-id","member-activity","time-filter","global-top-n"])]),x(e(gs),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":c.value},null,8,["session-id","time-filter","global-top-n"]),t("div",Us,[x(e(bs),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":c.value},null,8,["session-id","time-filter","global-top-n"])]),t("div",Fs,[x(e(Cs),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":c.value},null,8,["session-id","time-filter","global-top-n"])]),t("div",Hs,[x(e(Ds),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":c.value},null,8,["session-id","time-filter","global-top-n"])]),t("div",Bs,[x(e(Is),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":c.value},null,8,["session-id","time-filter","global-top-n"])]),v[2]||(v[2]=t("div",{class:"h-48 no-capture"},null,-1))],2),x(e(ta),{anchors:f,"active-anchor":e(k),onClick:e(g)},{default:M(()=>[t("div",Ws,[v[3]||(v[3]=t("div",{class:"text-xs text-gray-400 mb-2"},"显示数量",-1)),x(e(re),{modelValue:c.value,"onUpdate:modelValue":v[0]||(v[0]=_=>c.value=_)},null,8,["modelValue"])]),t("div",Os,[v[4]||(v[4]=t("div",{class:"mb-2 text-xs text-gray-400"},"榜单宽度",-1)),t("div",js,[(o(),b(W,null,Z(p,_=>t("button",{key:_.value,type:"button",class:J(["rounded-md px-2 py-1 transition",i.value===_.value?"bg-pink-500 text-white shadow-sm":"text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800"]),onClick:$=>i.value=_.value},u(_.label),11,Es)),64))])])]),_:1},8,["active-anchor","onClick"])],512))}}),qs={class:"flex h-full flex-col"},Gs={class:"flex items-center justify-end px-4 py-2"},Ks={class:"flex items-center gap-4"},Ys={class:"flex items-center gap-2"},Js={class:"text-xs text-gray-400"},Qs={class:"flex items-center gap-2"},Zs={class:"text-xs text-gray-400"},Xs={class:"flex-1 min-h-0 relative"},eo={key:0,class:"absolute inset-0 flex items-center justify-center"},to={key:0,class:"h-full"},ao={class:"absolute bottom-2 left-1/2 -translate-x-1/2 rounded-full bg-gray-100/80 px-3 py-1 text-xs text-gray-500 backdrop-blur-sm dark:bg-gray-800/80 dark:text-gray-400"},so={key:1,class:"flex h-full items-center justify-center text-gray-400"},oo={class:"text-center"},no={class:"mt-2 text-sm"},lo=B({__name:"InteractionView",props:{sessionId:{},timeFilter:{}},setup(m){const s=m,{t:a}=X(),n=S(!0),r=S({nodes:[],links:[],maxLinkValue:0}),l=S("circular"),d=S(!1),f=S(null);function y(){f.value?.resetView()}async function k(){if(s.sessionId){n.value=!0;try{const g=await Q().getMentionGraph(s.sessionId,s.timeFilter);r.value={nodes:g.nodes,links:g.links,maxLinkValue:g.maxLinkValue}}catch(g){console.error("[chart-interaction] 加载互动关系图数据失败:",g)}finally{n.value=!1}}}return E(()=>[s.sessionId,s.timeFilter],()=>{k()},{immediate:!0,deep:!0}),(g,c)=>{const i=ce,p=Ke("UButtonGroup"),I=ot,h=Re;return o(),b("div",qs,[t("div",Gs,[t("div",Ks,[t("div",Ys,[t("span",Js,u(e(a)("views.interaction.layout"))+":",1),x(p,{size:"xs"},{default:M(()=>[x(i,{color:l.value==="circular"?"primary":"neutral",variant:l.value==="circular"?"solid":"ghost",onClick:c[0]||(c[0]=v=>l.value="circular")},{default:M(()=>[K(u(e(a)("views.interaction.circular")),1)]),_:1},8,["color","variant"]),x(i,{color:l.value==="force"?"primary":"neutral",variant:l.value==="force"?"solid":"ghost",onClick:c[1]||(c[1]=v=>l.value="force")},{default:M(()=>[K(u(e(a)("views.interaction.force")),1)]),_:1},8,["color","variant"])]),_:1})]),t("div",Qs,[t("span",Zs,u(e(a)("views.interaction.directed"))+":",1),x(I,{modelValue:d.value,"onUpdate:modelValue":c[2]||(c[2]=v=>d.value=v),size:"xs"},null,8,["modelValue"])]),x(i,{size:"xs",color:"neutral",variant:"ghost",icon:"i-heroicons-arrow-path",onClick:y},{default:M(()=>[K(u(e(a)("views.interaction.reset")),1)]),_:1})])]),t("div",Xs,[n.value?(o(),b("div",eo,[x(h,{name:"i-heroicons-arrow-path",class:"h-8 w-8 animate-spin text-pink-500"})])):(o(),b(W,{key:1},[r.value.nodes.length>0?(o(),b("div",to,[x(e(aa),{ref_key:"graphRef",ref:f,data:r.value,layout:l.value,directed:d.value,height:"100%"},null,8,["data","layout","directed"]),t("div",ao,u(e(a)("views.interaction.graphHint",{nodes:r.value.nodes.length,links:r.value.links.length})),1)])):(o(),b("div",so,[t("div",oo,[x(h,{name:"i-heroicons-user-group",class:"mx-auto h-10 w-10 text-gray-300 dark:text-gray-600"}),t("p",no,u(e(a)("views.interaction.noInteraction")),1)])]))],64))])])}}}),io={class:"main-content mx-auto max-w-[920px] space-y-6 p-6"},ro={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},co={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},uo={class:"divide-y divide-gray-100 dark:divide-gray-800"},mo={class:"flex flex-1 items-center gap-2"},vo=["onClick"],ho={class:"flex items-center gap-1 text-pink-500"},po={class:"text-xs"},go=["onClick"],fo={class:"shrink-0 text-right text-sm text-gray-500"},yo={key:0,class:"text-red-500"},xo={key:1},bo={class:"divide-y divide-gray-100 dark:divide-gray-800"},ko={class:"flex flex-1 items-center gap-2"},_o=["onClick"],wo={class:"flex items-center gap-1"},$o={class:"text-xs text-gray-400"},Co={class:"text-xs text-gray-400"},Io=["onClick"],So={class:"shrink-0 text-right"},Mo={class:"text-lg font-bold text-pink-600"},To={class:"ml-1 text-sm text-gray-500"},Vo={key:0,class:"p-5"},Ro={class:"mb-4 text-lg font-semibold text-gray-900 dark:text-white"},Lo={key:0,class:"mb-4"},Do={class:"mb-2 text-sm font-medium text-gray-700 dark:text-gray-300"},No={class:"space-y-2"},Ao={class:"text-sm font-medium text-gray-900 dark:text-white"},zo={class:"text-xs text-gray-500"},Uo={key:1},Fo={class:"mb-2 text-sm font-medium text-gray-700 dark:text-gray-300"},Ho={class:"space-y-2"},Bo={class:"text-sm font-medium text-gray-900 dark:text-white"},Wo={class:"text-xs text-gray-500"},Oo={class:"mt-4 flex justify-end"},jo=B({__name:"Relationships",props:{sessionId:{},timeFilter:{}},setup(m){const{t:s}=X(),a=m,n=S(null),r=S(!1),l=S(null),d=S(!1);async function f(){if(a.sessionId){r.value=!0;try{n.value=await Q().getMentionAnalysis(a.sessionId,a.timeFilter)}catch(c){console.error("加载 @ 互动分析失败:",c)}finally{r.value=!1}}}const y=w(()=>n.value?n.value.topMentioners.map(c=>({id:c.memberId.toString(),name:c.name,value:c.count,percentage:c.percentage})):[]),k=w(()=>n.value?n.value.topMentioned.map(c=>({id:c.memberId.toString(),name:c.name,value:c.count,percentage:c.percentage})):[]);function g(c){if(!n.value)return;const i=n.value.memberDetails.find(p=>p.memberId===c);i&&(l.value=i,d.value=!0)}return E(()=>[a.sessionId,a.timeFilter],()=>{f()},{immediate:!0,deep:!0}),(c,i)=>{const p=Oe,I=ce,h=ge;return o(),b("div",io,[r.value?(o(),C(e(se),{key:0,text:e(s)("members.relationships.loading")},null,8,["text"])):n.value&&n.value.totalMentions>0?(o(),b(W,{key:1},[t("div",ro,[y.value.length>0?(o(),C(e(Be),{key:0,members:y.value,title:e(s)("members.relationships.topMentioners"),description:e(s)("members.relationships.totalMentions",{count:n.value.totalMentions}),unit:e(s)("members.relationships.times")},null,8,["members","title","description","unit"])):L("",!0),k.value.length>0?(o(),C(e(Be),{key:1,members:k.value,title:e(s)("members.relationships.topMentioned"),description:e(s)("members.relationships.popularMember"),unit:e(s)("members.relationships.times")},null,8,["members","title","description","unit"])):L("",!0)]),t("div",co,[n.value.oneWay.length>0?(o(),C(e(G),{key:0,class:"hidden",title:e(s)("members.relationships.oneWay.title"),description:e(s)("members.relationships.oneWay.description",{count:n.value.oneWay.length})},{default:M(()=>[t("div",uo,[(o(!0),b(W,null,Z(n.value.oneWay.slice(0,10),(v,_)=>(o(),b("div",{key:_,class:"flex items-center gap-4 px-5 py-3 transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/50"},[t("span",{class:J(["flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold",_===0?"bg-pink-100 text-pink-600 dark:bg-pink-900/30 dark:text-pink-400":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-500"])},u(_+1),3),t("div",mo,[t("button",{class:"font-medium text-gray-900 hover:text-pink-600 dark:text-white dark:hover:text-pink-600",onClick:$=>g(v.fromMemberId)},u(v.fromName),9,vo),t("div",ho,[i[2]||(i[2]=t("span",{class:"text-lg"},"→",-1)),t("span",po,u(v.fromToCount)+"次",1)]),t("button",{class:"font-medium text-gray-900 hover:text-pink-600 dark:text-white dark:hover:text-pink-600",onClick:$=>g(v.toMemberId)},u(v.toName),9,go)]),t("div",fo,[v.toFromCount===0?(o(),b("span",yo,u(e(s)("members.relationships.oneWay.neverRespond")),1)):(o(),b("span",xo,u(e(s)("members.relationships.oneWay.reverse",{count:v.toFromCount})),1))]),x(p,{color:"pink",variant:"soft",size:"xs"},{default:M(()=>[K(u(e(s)("members.relationships.oneWay.ratio",{value:Math.round(v.ratio*100)})),1)]),_:2},1024)]))),128))])]),_:1},8,["title","description"])):L("",!0),n.value.twoWay.length>0?(o(),C(e(G),{key:1,title:e(s)("members.relationships.twoWay.title"),description:e(s)("members.relationships.twoWay.description",{count:n.value.twoWay.length})},{default:M(()=>[t("div",bo,[(o(!0),b(W,null,Z(n.value.twoWay.slice(0,10),(v,_)=>(o(),b("div",{key:_,class:"flex items-center gap-4 px-5 py-3 transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/50"},[t("span",{class:J(["flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold",_===0?"bg-linear-to-r from-pink-400 to-red-400 text-white":_===1?"bg-linear-to-r from-pink-300 to-red-300 text-white":_===2?"bg-linear-to-r from-pink-200 to-red-200 text-pink-700":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-500"])},u(_+1),3),t("div",ko,[t("button",{class:"font-medium text-gray-900 hover:text-pink-600 dark:text-white dark:hover:text-pink-600",onClick:$=>g(v.member1Id)},u(v.member1Name),9,_o),t("div",wo,[t("span",$o,u(v.member1To2),1),i[3]||(i[3]=t("span",{class:"text-lg text-pink-500"},"⇄",-1)),t("span",Co,u(v.member2To1),1)]),t("button",{class:"font-medium text-gray-900 hover:text-pink-600 dark:text-white dark:hover:text-pink-600",onClick:$=>g(v.member2Id)},u(v.member2Name),9,Io)]),t("div",So,[t("span",Mo,u(v.total),1),t("span",To,u(e(s)("members.relationships.twoWay.interactions")),1)]),x(p,{color:v.balance>=.7?"green":v.balance>=.5?"blue":"gray",variant:"soft",size:"xs"},{default:M(()=>[K(u(e(s)("members.relationships.twoWay.balance",{value:Math.round(v.balance*100)})),1)]),_:2},1032,["color"])]))),128))])]),_:1},8,["title","description"])):L("",!0)])],64)):r.value?L("",!0):(o(),C(e(G),{key:2,title:e(s)("members.relationships.emptyTitle")},{default:M(()=>[x(e(ne),{text:e(s)("members.relationships.empty")},null,8,["text"])]),_:1},8,["title"])),x(h,{open:d.value,"onUpdate:open":i[1]||(i[1]=v=>d.value=v)},{content:M(()=>[l.value?(o(),b("div",Vo,[t("h3",Ro,u(e(s)("members.relationships.modal.title",{name:l.value.name})),1),l.value.topMentioned.length>0?(o(),b("div",Lo,[t("h4",Do,u(e(s)("members.relationships.modal.topMentioned")),1),t("div",No,[(o(!0),b(W,null,Z(l.value.topMentioned,(v,_)=>(o(),b("div",{key:_,class:"flex items-center gap-3 rounded-lg bg-gray-50 px-3 py-2 dark:bg-gray-800"},[t("span",Ao,u(v.toName),1),t("span",zo,u(e(s)("members.relationships.modal.timesCount",{count:v.count})),1)]))),128))])])):L("",!0),l.value.topMentioners.length>0?(o(),b("div",Uo,[t("h4",Fo,u(e(s)("members.relationships.modal.topMentioners")),1),t("div",Ho,[(o(!0),b(W,null,Z(l.value.topMentioners,(v,_)=>(o(),b("div",{key:_,class:"flex items-center gap-3 rounded-lg bg-gray-50 px-3 py-2 dark:bg-gray-800"},[t("span",Bo,u(v.fromName),1),t("span",Wo,u(e(s)("members.relationships.modal.timesCount",{count:v.count})),1)]))),128))])])):L("",!0),t("div",Oo,[x(I,{variant:"soft",onClick:i[0]||(i[0]=v=>d.value=!1)},{default:M(()=>[K(u(e(s)("members.relationships.modal.close")),1)]),_:1})])])):L("",!0)]),_:1},8,["open"])])}}}),Eo={class:"mx-auto max-w-[920px] p-4 h-full"},Po={class:"flex h-full flex-col rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-page-dark shadow-sm overflow-hidden"},qo={class:"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-page-dark/50"},Go={class:"flex items-center gap-3"},Ko={class:"flex items-center gap-3"},Yo={class:"p-3 w-64"},Jo={class:"text-sm font-medium mb-3"},Qo={class:"space-y-3"},Zo={class:"text-xs text-gray-500 mb-1 block"},Xo={class:"text-xs text-gray-400 mt-1"},en={class:"text-xs text-gray-500 mb-1 block"},tn={class:"text-xs text-gray-400 mt-1"},an={class:"flex-1 min-h-0 overflow-hidden"},sn={key:0,class:"h-full flex items-center justify-center"},on={key:1,class:"h-full flex items-center justify-center"},nn={class:"text-center text-gray-400"},ln={key:2,class:"h-full"},rn={key:3,class:"h-full flex overflow-hidden"},cn={class:"w-64 border-r border-gray-200 dark:border-gray-700 flex flex-col overflow-hidden"},un={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},dn={class:"text-sm font-medium flex items-center gap-2"},mn={class:"flex-1 overflow-y-auto"},vn=["onClick"],hn={class:"flex items-center justify-between"},pn={class:"text-sm truncate"},gn={class:"text-xs text-gray-400"},fn={class:"flex-1 overflow-hidden flex flex-col"},yn={key:0,class:"flex-1 flex items-center justify-center"},xn={class:"text-center text-gray-400"},bn={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700 flex items-center gap-3"},kn={class:"w-10 h-10 rounded-full flex items-center justify-center text-white font-bold bg-primary-500"},_n={class:"font-medium"},wn={class:"text-xs text-gray-400"},$n={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},Cn={class:"text-sm font-medium flex items-center gap-2"},In={class:"flex-1 overflow-y-auto"},Sn={key:0,class:"p-4 text-center text-gray-400"},Mn={class:"flex items-center gap-3"},Tn={class:"flex-1 min-w-0"},Vn={class:"text-sm font-medium truncate"},Rn={class:"flex items-center gap-3 mt-0.5 text-xs text-gray-400"},Ln={class:"w-20 h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"},Dn={key:4,class:"h-full flex flex-col overflow-hidden"},Nn={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},An={class:"text-sm font-medium flex items-center gap-2"},zn={class:"flex-1 overflow-y-auto"},Un={class:"flex items-center gap-3"},Fn={class:"flex-1 min-w-0"},Hn={class:"flex items-center gap-2 text-sm"},Bn={class:"font-medium truncate"},Wn={class:"font-medium truncate"},On={class:"flex items-center gap-3 mt-1 text-xs text-gray-400"},jn={class:"w-24 h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"},En={key:0,class:"px-4 py-2 border-t border-gray-200 dark:border-gray-700 text-xs text-gray-400 flex items-center gap-4 bg-gray-50 dark:bg-page-dark/50"},Pn=B({__name:"ClusterView",props:{sessionId:{},timeFilter:{}},setup(m){Qe([Kt,Ze,Yt,Jt,Xe]);const s=m,{t:a}=X(),n=gt(),r=w(()=>n.value==="dark"),l=S(!0),d=S(null),f=S("matrix"),y=S(null),k=S({lookAhead:3,decaySeconds:120,topEdges:150}),g=S(null);let c=null;async function i(){if(s.sessionId){l.value=!0;try{d.value=await Q().getClusterGraph(s.sessionId,s.timeFilter,{lookAhead:k.value.lookAhead,decaySeconds:k.value.decaySeconds,topEdges:k.value.topEdges})}catch(F){console.error("[chart-cluster] 加载小团体关系数据失败:",F),d.value=null}finally{l.value=!1}}}const p=w(()=>{if(!d.value||d.value.nodes.length===0)return null;const{nodes:F,links:U,maxLinkValue:O}=d.value,j=[...F].sort((V,Y)=>Y.messageCount-V.messageCount).slice(0,20).map(V=>V.name),te=new Map;for(const V of U)te.set(`${V.source}-${V.target}`,V.value),te.set(`${V.target}-${V.source}`,V.value);const q=[];for(let V=0;V<j.length;V++)for(let Y=0;Y<j.length;Y++)if(V===Y)q.push([V,Y,-1]);else{const ue=te.get(`${j[V]}-${j[Y]}`)||0;q.push([V,Y,ue])}return{names:j,data:q,maxValue:O}});function I(){if(!p.value)return{graphic:{type:"text",style:{text:a("views.cluster.noData"),fill:"#999"}}};const{names:F,data:U,maxValue:O}=p.value;return{tooltip:{position:"top",formatter:ee=>{const[j,te,q]=ee.data;return q<0?`${F[j]}`:q===0?`${F[j]} ↔ ${F[te]}<br/>暂无关系数据`:`${F[j]} ↔ ${F[te]}<br/>临近度: ${q.toFixed(2)}`}},grid:{left:120,right:40,top:40,bottom:120},xAxis:{type:"category",data:F,splitArea:{show:!0},axisLabel:{rotate:45,fontSize:10,color:r.value?"#ccc":"#333"}},yAxis:{type:"category",data:F,splitArea:{show:!0},axisLabel:{fontSize:10,color:r.value?"#ccc":"#333"}},visualMap:{min:0,max:O||1,calculable:!0,orient:"horizontal",left:"center",bottom:10,inRange:{color:r.value?["#1a1a2e","#16213e","#0f3460","#e94560"]:["#f7f7f7","#fce4ec","#f8bbd9","#ee4567"]},textStyle:{color:r.value?"#ccc":"#333"}},series:[{type:"heatmap",data:U.filter(ee=>ee[2]>=0),label:{show:!1},emphasis:{itemStyle:{shadowBlur:10,shadowColor:"rgba(0, 0, 0, 0.5)"}}}],backgroundColor:"transparent"}}const h=w(()=>d.value?[...d.value.nodes].sort((F,U)=>U.messageCount-F.messageCount):[]),v=w(()=>!d.value||y.value===null?null:d.value.nodes.find(F=>F.id===y.value)||null),_=w(()=>{if(!d.value||!v.value)return[];const F=v.value.name,U=[];for(const O of d.value.links)O.source===F?U.push({otherName:O.target,value:O.value,coOccurrenceCount:O.coOccurrenceCount}):O.target===F&&U.push({otherName:O.source,value:O.value,coOccurrenceCount:O.coOccurrenceCount});return U.sort((O,ee)=>ee.value-O.value),U}),$=w(()=>d.value?d.value.links.slice(0,50):[]);function T(){c&&f.value==="matrix"&&c.setOption(I(),{notMerge:!0})}function z(){g.value&&(c=et(g.value,r.value?"dark":void 0),T())}function D(){c?.resize()}return E(f,async(F,U)=>{U==="matrix"&&c&&(c.dispose(),c=null),F==="matrix"&&(await Me(),z())}),E([d,()=>r.value],()=>{f.value==="matrix"&&T()},{deep:!0}),E(l,async(F,U)=>{U&&!F&&f.value==="matrix"&&(c&&(c.dispose(),c=null),await Me(),z())}),E(()=>[s.sessionId,s.timeFilter],()=>i(),{immediate:!0,deep:!0}),fe(()=>{window.addEventListener("resize",D),f.value==="matrix"&&Me(()=>z())}),Le(()=>{window.removeEventListener("resize",D),c?.dispose(),c=null}),(F,U)=>{const O=ce,ee=Ke("UButtonGroup"),j=je,te=nt,q=Re;return o(),b("div",Eo,[t("div",Po,[t("div",qo,[t("div",Go,[x(ee,{size:"xs"},{default:M(()=>[x(O,{color:f.value==="matrix"?"primary":"neutral",variant:f.value==="matrix"?"solid":"ghost",onClick:U[0]||(U[0]=V=>f.value="matrix")},{default:M(()=>[K(u(e(a)("views.cluster.matrixView")),1)]),_:1},8,["color","variant"]),x(O,{color:f.value==="member"?"primary":"neutral",variant:f.value==="member"?"solid":"ghost",onClick:U[1]||(U[1]=V=>f.value="member")},{default:M(()=>[K(u(e(a)("views.cluster.memberView")),1)]),_:1},8,["color","variant"]),x(O,{color:f.value==="circle"?"primary":"neutral",variant:f.value==="circle"?"solid":"ghost",onClick:U[2]||(U[2]=V=>f.value="circle")},{default:M(()=>[K(u(e(a)("views.cluster.rankingView")),1)]),_:1},8,["color","variant"])]),_:1})]),t("div",Ko,[x(te,null,{content:M(()=>[t("div",Yo,[t("h4",Jo,u(e(a)("views.cluster.modelSettings")),1),t("div",Qo,[t("div",null,[t("label",Zo,u(e(a)("views.cluster.lookAhead")),1),x(j,{modelValue:k.value.lookAhead,"onUpdate:modelValue":U[3]||(U[3]=V=>k.value.lookAhead=V),modelModifiers:{number:!0},type:"number",min:1,max:10,size:"xs",placeholder:"1-10"},null,8,["modelValue"]),t("p",Xo,u(e(a)("views.cluster.lookAheadDesc")),1)]),t("div",null,[t("label",en,u(e(a)("views.cluster.decaySeconds")),1),x(j,{modelValue:k.value.decaySeconds,"onUpdate:modelValue":U[4]||(U[4]=V=>k.value.decaySeconds=V),modelModifiers:{number:!0},type:"number",min:30,max:3600,size:"xs",placeholder:"30-3600"},null,8,["modelValue"]),t("p",tn,u(e(a)("views.cluster.decaySecondsDesc")),1)]),x(O,{size:"xs",color:"primary",class:"w-full mt-2",onClick:i},{default:M(()=>[K(u(e(a)("views.cluster.applySettings")),1)]),_:1})])])]),default:M(()=>[x(O,{variant:"ghost",size:"xs",icon:"i-heroicons-adjustments-horizontal"})]),_:1}),x(O,{variant:"ghost",size:"xs",icon:"i-heroicons-arrow-path",onClick:i})])]),t("div",an,[l.value?(o(),b("div",sn,[x(q,{name:"i-heroicons-arrow-path",class:"w-6 h-6 animate-spin text-gray-400"})])):!d.value||d.value.nodes.length===0?(o(),b("div",on,[t("div",nn,[x(q,{name:"i-heroicons-user-group",class:"w-12 h-12 mx-auto mb-2 opacity-50"}),t("p",null,u(e(a)("views.cluster.noData")),1)])])):f.value==="matrix"?(o(),b("div",ln,[t("div",{ref_key:"chartRef",ref:g,class:"w-full h-full"},null,512)])):f.value==="member"?(o(),b("div",rn,[t("div",cn,[t("div",un,[t("h3",dn,[x(q,{name:"i-heroicons-users",class:"w-4 h-4"}),K(" "+u(e(a)("views.cluster.selectMember")),1)])]),t("div",mn,[(o(!0),b(W,null,Z(h.value,V=>(o(),b("div",{key:V.id,class:J(["px-4 py-2 cursor-pointer border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50",{"bg-primary-50 dark:bg-primary-900/30":y.value===V.id}]),onClick:Y=>y.value=V.id},[t("div",hn,[t("span",pn,u(V.name),1),t("span",gn,u(V.messageCount),1)])],10,vn))),128))])]),t("div",fn,[v.value?(o(),b(W,{key:1},[t("div",bn,[t("div",kn,u(v.value.name.charAt(0)),1),t("div",null,[t("div",_n,u(v.value.name),1),t("div",wn,u(e(a)("views.cluster.msgCount"))+": "+u(v.value.messageCount)+" | "+u(e(a)("views.cluster.relationCount"))+": "+u(_.value.length),1)])]),t("div",$n,[t("h3",Cn,[x(q,{name:"i-heroicons-heart",class:"w-4 h-4 text-pink-500"}),K(" "+u(e(a)("views.cluster.relationsByIntimacy")),1)])]),t("div",In,[_.value.length===0?(o(),b("div",Sn,u(e(a)("views.cluster.noRelations")),1)):L("",!0),(o(!0),b(W,null,Z(_.value,(V,Y)=>(o(),b("div",{key:V.otherName,class:"px-4 py-3 border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50"},[t("div",Mn,[t("span",{class:J(["w-6 h-6 rounded-full flex items-center justify-center text-xs font-bold",Y<3?"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400"])},u(Y+1),3),t("div",Tn,[t("div",Vn,u(V.otherName),1),t("div",Rn,[t("span",null,u(e(a)("views.cluster.intimacy"))+": "+u((V.value*100).toFixed(0))+"%",1),t("span",null,u(e(a)("views.cluster.coOccurrence"))+": "+u(V.coOccurrenceCount)+u(e(a)("views.cluster.times")),1)])]),t("div",Ln,[t("div",{class:"h-full bg-linear-to-r from-pink-400 to-pink-600",style:pe({width:`${_.value[0]?.value?V.value/_.value[0].value*100:0}%`})},null,4)])])]))),128))])],64)):(o(),b("div",yn,[t("div",xn,[x(q,{name:"i-heroicons-cursor-arrow-rays",class:"w-12 h-12 mx-auto mb-2 opacity-50"}),t("p",null,u(e(a)("views.cluster.selectMemberHint")),1)])]))])])):(o(),b("div",Dn,[t("div",Nn,[t("h3",An,[x(q,{name:"i-heroicons-trophy",class:"w-4 h-4 text-yellow-500"}),K(" "+u(e(a)("views.cluster.interactionRanking")),1)])]),t("div",zn,[(o(!0),b(W,null,Z($.value,(V,Y)=>(o(),b("div",{key:Y,class:"px-4 py-3 border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50"},[t("div",Un,[t("span",{class:J(["w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold",Y<3?"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400"])},u(Y+1),3),t("div",Fn,[t("div",Hn,[t("span",Bn,u(V.source),1),U[5]||(U[5]=t("span",{class:"text-gray-400"},"↔",-1)),t("span",Wn,u(V.target),1)]),t("div",On,[t("span",null,u(e(a)("views.cluster.score"))+": "+u(V.value.toFixed(2)),1),t("span",null,u(e(a)("views.cluster.coOccurrence"))+": "+u(V.coOccurrenceCount)+u(e(a)("views.cluster.times")),1)])]),t("div",jn,[t("div",{class:"h-full bg-linear-to-r from-yellow-400 to-orange-500",style:pe({width:`${$.value[0]?.value?V.value/$.value[0].value*100:0}%`})},null,4)])])]))),128))])]))]),d.value?(o(),b("div",En,[t("span",null,u(e(a)("views.cluster.totalMembers"))+": "+u(d.value.stats.totalMembers),1),t("span",null,u(e(a)("views.cluster.totalMessages"))+": "+u(d.value.stats.totalMessages.toLocaleString()),1),t("span",null,u(e(a)("views.cluster.involvedMembers"))+": "+u(d.value.stats.involvedMembers),1),t("span",null,u(e(a)("views.cluster.edgeCount"))+": "+u(d.value.stats.edgeCount),1)])):L("",!0)])])}}}),qn={class:"flex h-full flex-col"},Gn={class:"min-h-0 flex-1 overflow-y-auto"},Kn=B({__name:"GroupRelationships",props:{sessionId:{},timeFilter:{}},setup(m){const{t:s}=X(),a=m,n=S("mention-graph"),r=w(()=>[{id:"mention-graph",label:s("analysis.subTabs.groupRelationships.mentionGraph"),icon:"i-heroicons-arrows-right-left"},{id:"mention-ranking",label:s("analysis.subTabs.groupRelationships.mentionRanking"),icon:"i-heroicons-heart"},{id:"proximity",label:s("analysis.subTabs.groupRelationships.proximity"),icon:"i-heroicons-user-group"}]);return(l,d)=>(o(),b("div",qn,[x(e(Ye),{modelValue:n.value,"onUpdate:modelValue":d[0]||(d[0]=f=>n.value=f),items:r.value,"persist-key":"groupRelationshipsTab",size:"sm"},null,8,["modelValue","items"]),t("div",Gn,[x(De,{name:"fade",mode:"out-in"},{default:M(()=>[n.value==="mention-graph"?(o(),C(lo,{key:0,"session-id":a.sessionId,"time-filter":a.timeFilter},null,8,["session-id","time-filter"])):n.value==="mention-ranking"?(o(),C(jo,{key:1,"session-id":a.sessionId,"time-filter":a.timeFilter},null,8,["session-id","time-filter"])):n.value==="proximity"?(o(),C(Pn,{key:2,"session-id":a.sessionId,"time-filter":a.timeFilter},null,8,["session-id","time-filter"])):L("",!0)]),_:1})])]))}}),Yn=Ne(Kn,[["__scopeId","data-v-531340f2"]]),Jn={class:"flex h-full flex-col"},Qn={class:"flex-1 min-h-0 overflow-y-auto"},Zn=B({__name:"ViewTab",props:{sessionId:{},sessionName:{},timeFilter:{}},setup(m){const{t:s,locale:a}=X(),n=m,r=w(()=>{const y=[{id:"type-analysis",label:s("analysis.subTabs.view.typeAnalysis"),icon:"i-heroicons-chart-pie"},{id:"time-analysis",label:s("analysis.subTabs.view.timeAnalysis"),icon:"i-heroicons-clock"},{id:"topic",label:s("analysis.subTabs.view.topic"),icon:"i-heroicons-cloud"},{id:"group-relationships",label:s("analysis.subTabs.view.groupRelationships"),icon:"i-heroicons-heart"},{id:"hot-repeat",label:s("analysis.subTabs.quotes.hotRepeat"),icon:"i-heroicons-fire"},{id:"catchphrase",label:s("analysis.subTabs.quotes.catchphrase"),icon:"i-heroicons-chat-bubble-bottom-center-text"}];return ft("groupRanking",a.value)&&y.splice(2,0,{id:"ranking",label:s("analysis.subTabs.view.ranking"),icon:"i-heroicons-trophy"}),y}),l=S("type-analysis"),d=S(null),f=w(()=>({...n.timeFilter,memberId:d.value}));return(y,k)=>(o(),b("div",Jn,[x(e(Ye),{modelValue:l.value,"onUpdate:modelValue":k[1]||(k[1]=g=>l.value=g),items:r.value,"persist-key":"groupViewTab"},{right:M(()=>[l.value!=="topic"?(o(),C(Tt,{key:0,modelValue:d.value,"onUpdate:modelValue":k[0]||(k[0]=g=>d.value=g),"session-id":n.sessionId},null,8,["modelValue","session-id"])):L("",!0)]),_:1},8,["modelValue","items"]),t("div",Qn,[x(De,{name:"fade",mode:"out-in"},{default:M(()=>[l.value==="type-analysis"?(o(),C(Vt,{key:0,"session-id":n.sessionId,"session-name":n.sessionName,"time-filter":f.value},null,8,["session-id","session-name","time-filter"])):l.value==="time-analysis"?(o(),C(Rt,{key:1,"session-id":n.sessionId,"session-name":n.sessionName,"time-filter":f.value},null,8,["session-id","session-name","time-filter"])):l.value==="topic"?(o(),C(e(Lt),{key:2,"session-id":n.sessionId,"time-filter":n.timeFilter},null,8,["session-id","time-filter"])):l.value==="group-relationships"?(o(),C(Yn,{key:3,"session-id":n.sessionId,"time-filter":f.value},null,8,["session-id","time-filter"])):l.value==="ranking"?(o(),C(Ps,{key:4,"session-id":n.sessionId,"time-filter":f.value},null,8,["session-id","time-filter"])):l.value==="hot-repeat"?(o(),C(e(Ea),{key:5,"session-id":n.sessionId,"time-filter":n.timeFilter},null,8,["session-id","time-filter"])):l.value==="catchphrase"?(o(),C(e(za),{key:6,"session-id":n.sessionId,"time-filter":n.timeFilter},null,8,["session-id","time-filter"])):L("",!0)]),_:1})])]))}}),Xn=Ne(Zn,[["__scopeId","data-v-ab94305e"]]),el={key:0,class:"mb-6"},tl={class:"flex items-center gap-3"},al={class:"text-xl font-bold text-gray-900 dark:text-white"},sl={class:"text-sm text-gray-500 dark:text-gray-400"},ol={class:"mb-4 flex flex-wrap items-center justify-between gap-3"},nl={class:"flex items-center gap-2"},ll={class:"text-xs text-gray-500 dark:text-gray-400"},il={key:0,class:"flex h-60 items-center justify-center"},rl={key:1,class:"flex h-60 flex-col items-center justify-center"},cl={class:"text-gray-500 dark:text-gray-400"},ul={key:2,class:"flex min-h-0 flex-1 flex-col"},dl={class:"w-full"},ml={class:"sticky top-0 bg-gray-50 dark:bg-page-dark"},vl={class:"text-left text-xs font-medium uppercase text-gray-500 dark:text-gray-400"},hl={class:"px-4 py-4"},pl={class:"px-4 py-4"},gl={class:"px-4 py-4"},fl={class:"w-64 px-4 py-4"},yl={class:"inline-flex items-center gap-1.5"},xl={class:"px-4 py-4 text-right"},bl={class:"divide-y divide-gray-200 dark:divide-gray-700"},kl={class:"px-4 py-4"},_l={class:"px-4 py-4"},wl={class:"flex items-center gap-2"},$l=["src","alt"],Cl={key:1,class:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-pink-400 to-pink-600 text-xs font-medium text-white"},Il={class:"text-sm font-medium text-gray-900 dark:text-white"},Sl={class:"ml-1 text-sm text-gray-500 dark:text-gray-400"},Ml={class:"px-4 py-4"},Tl={key:0,class:"text-sm font-medium text-gray-900 dark:text-white"},Vl={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},Rl={class:"px-4 py-4"},Ll={class:"text-sm font-semibold text-gray-900 dark:text-white"},Dl={class:"px-4 py-4"},Nl={class:"max-w-xs"},Al={key:0,class:"absolute right-2 top-1/2 -translate-y-1/2"},zl={class:"px-4 py-4 text-right"},Ul={class:"flex justify-end gap-2"},Fl={key:0,class:"flex items-center justify-between border-t border-gray-200 px-6 py-4 dark:border-gray-700"},Hl={class:"text-sm text-gray-500 dark:text-gray-400"},Bl={class:"flex items-center gap-2"},Wl={class:"text-sm font-medium text-gray-600 dark:text-gray-300"},Ol={class:"p-6 text-center"},jl={class:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/30"},El={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},Pl={class:"mb-6 text-sm text-gray-500 dark:text-gray-400"},ql={class:"flex justify-center gap-3"},Gl={class:"p-6"},Kl={class:"mb-4 flex items-center gap-3"},Yl={class:"flex h-10 w-10 items-center justify-center rounded-full bg-amber-100 dark:bg-amber-900/30"},Jl={class:"text-lg font-semibold text-gray-900 dark:text-white"},Ql={class:"mb-2 text-sm text-gray-600 dark:text-gray-400"},Zl={class:"mb-6 text-xs text-amber-700 dark:text-amber-300"},Xl={class:"flex justify-end gap-2"},Te=20,ei=B({__name:"MemberList",props:{sessionId:{},showHeader:{type:Boolean,default:!0}},emits:["data-changed"],setup(m,{emit:s}){const{t:a}=X(),n=be(),r=m,l=s,d=S([]),f=S([]),y=S(!1),k=S(""),g=S(null),c=S(!1),i=S(new Set),p=S(!1),I=S(!1),h=S(1),v=S(0),_=S(0),$=S("desc"),T=S(null);let z=null;function D(R){return R.groupNickname||R.accountName||R.platformId}function F(R){return D(R).slice(0,1)}function U(R){n.openChatRecordDrawer({sessionId:r.sessionId,memberId:R.id,memberName:D(R)})}const O=w(()=>f.value.filter(R=>i.value.has(R.id))),ee=w(()=>O.value.length===2),j=w(()=>{if(O.value.length!==2)return null;const[R,H]=O.value;return H.messageCount>R.messageCount||H.messageCount===R.messageCount&&H.id<R.id?{primary:H,secondary:R}:{primary:R,secondary:H}});function te(){$.value=$.value==="desc"?"asc":"desc",h.value=1,q()}async function q(){if(r.sessionId){y.value=!0;try{const R=await Q().getMembersPaginated(r.sessionId,{page:h.value,pageSize:Te,search:k.value.trim(),sortOrder:$.value});d.value=R.items,v.value=R.total,_.value=R.totalPages}catch(R){console.error("加载成员列表失败:",R)}finally{y.value=!1}}}async function V(){if(r.sessionId)try{f.value=await Q().getMembers(r.sessionId)}catch(R){console.error("加载所有成员失败:",R)}}async function Y(R,H){const A=JSON.parse(JSON.stringify(H)),Ie=JSON.stringify(R.aliases),ie=JSON.stringify(A);if(Ie!==ie){T.value=R.id;try{if(await Q().updateMemberAliases(r.sessionId,R.id,A)){const he=d.value.findIndex(Se=>Se.id===R.id);he!==-1&&(d.value[he]={...d.value[he],aliases:A})}}catch(ye){console.error("保存别名失败:",ye)}finally{T.value=null}}}function ue(R){g.value=R}function _e(){g.value=null}async function we(){if(g.value){c.value=!0;try{await Q().deleteMember(r.sessionId,g.value.id)&&(await q(),await V(),l("data-changed"))}catch(R){console.error("删除成员失败:",R)}finally{c.value=!1,g.value=null}}}function $e(R){const H=new Set(i.value);H.has(R)?H.delete(R):H.add(R),i.value=H}function Ce(){ee.value&&(p.value=!0)}function oe(){i.value=new Set}async function N(){if(j.value){I.value=!0;try{await Q().mergeMembers(r.sessionId,j.value.primary.id,j.value.secondary.id)&&(p.value=!1,oe(),await q(),await V(),l("data-changed"))}catch(R){console.error("合并成员失败:",R)}finally{I.value=!1}}}return E(k,()=>{h.value=1,z&&clearTimeout(z),z=setTimeout(()=>{q()},300)}),E(h,()=>{q()}),E(()=>r.sessionId,()=>{k.value="",h.value=1,oe(),q(),V()},{immediate:!0}),fe(()=>{q(),V()}),(R,H)=>{const A=ce,Ie=je,ie=Re,ye=lt,he=it,Se=rt,Ae=ge;return o(),b("div",{class:J(["main-content",r.showHeader?"max-w-5xl p-6":"flex h-full max-w-none flex-col overflow-hidden p-4"])},[r.showHeader?(o(),b("div",el,[t("div",tl,[t("div",null,[t("h2",al,u(e(a)("members.list.title")),1),t("p",sl,u(e(a)("members.list.description",{count:v.value})),1)])])])):L("",!0),x(Dt,{class:"mb-6","session-id":m.sessionId,members:f.value,"chat-type":"group"},null,8,["session-id","members"]),t("div",ol,[x(Ie,{modelValue:k.value,"onUpdate:modelValue":H[1]||(H[1]=P=>k.value=P),placeholder:e(a)("members.list.searchPlaceholder"),icon:"i-heroicons-magnifying-glass",class:"w-full md:w-100"},Ge({_:2},[k.value?{name:"trailing",fn:M(()=>[x(A,{icon:"i-heroicons-x-mark",variant:"link",color:"neutral",size:"xs",onClick:H[0]||(H[0]=P=>k.value="")})]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),t("div",nl,[t("span",ll,u(e(a)("members.list.mergeSelectedCount",{count:i.value.size})),1),x(A,{icon:"i-heroicons-link",size:"sm",color:"primary",disabled:!ee.value,onClick:Ce},{default:M(()=>[K(u(e(a)("members.list.mergeSelected")),1)]),_:1},8,["disabled"])])]),t("div",{class:J(["rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-page-dark",r.showHeader?"":"flex min-h-0 flex-1 flex-col"])},[y.value?(o(),b("div",il,[x(ie,{name:"i-heroicons-arrow-path",class:"h-8 w-8 animate-spin text-pink-500"})])):d.value.length===0?(o(),b("div",rl,[x(ie,{name:"i-heroicons-user-group",class:"mb-3 h-12 w-12 text-gray-300 dark:text-gray-600"}),t("p",cl,u(k.value?e(a)("members.list.noMatch"):e(a)("members.list.empty")),1)])):(o(),b("div",ul,[t("div",{class:J(["max-h-[500px] overflow-y-auto",r.showHeader?"":"max-h-none min-h-0 flex-1"])},[t("table",dl,[t("thead",ml,[t("tr",vl,[H[7]||(H[7]=t("th",{class:"w-12 px-4 py-4"},null,-1)),t("th",hl,u(e(a)("members.list.table.accountName")),1),t("th",pl,u(e(a)("members.list.table.groupNickname")),1),t("th",gl,[t("button",{class:"flex items-center gap-1.5 hover:text-gray-700 dark:hover:text-gray-200",onClick:te},[K(u(e(a)("members.list.table.messageCount"))+" ",1),x(ie,{name:$.value==="desc"?"i-heroicons-arrow-down":"i-heroicons-arrow-up",class:"h-3.5 w-3.5"},null,8,["name"])])]),t("th",fl,[t("div",yl,[t("span",null,u(e(a)("members.list.table.customAlias")),1),x(ye,{text:e(a)("members.list.tip"),popper:{placement:"top"}},{default:M(()=>[x(ie,{name:"i-heroicons-question-mark-circle",class:"h-4 w-4 text-gray-400 dark:text-gray-500"})]),_:1},8,["text"])])]),t("th",xl,u(e(a)("members.list.table.actions")),1)])]),t("tbody",bl,[(o(!0),b(W,null,Z(d.value,P=>(o(),b("tr",{key:P.id,class:"hover:bg-gray-50 dark:hover:bg-gray-800/50"},[t("td",kl,[x(he,{"model-value":i.value.has(P.id),onClick:qe(xe=>$e(P.id),["stop"])},null,8,["model-value","onClick"])]),t("td",_l,[t("div",wl,[P.avatar?(o(),b("img",{key:0,src:P.avatar,alt:D(P),class:"h-8 w-8 shrink-0 rounded-full object-cover"},null,8,$l)):(o(),b("div",Cl,u(F(P)),1)),t("div",null,[t("span",Il,u(P.accountName||"-"),1),t("span",Sl,"("+u(P.platformId)+")",1)])])]),t("td",Ml,[P.groupNickname?(o(),b("span",Tl,u(P.groupNickname),1)):(o(),b("span",Vl,"-"))]),t("td",Rl,[t("span",Ll,u(P.messageCount.toLocaleString()),1)]),t("td",Dl,[t("div",Nl,[x(Se,{"model-value":P.aliases,placeholder:e(a)("members.list.aliasPlaceholder"),class:"w-80","onUpdate:modelValue":xe=>Y(P,xe)},null,8,["model-value","placeholder","onUpdate:modelValue"]),T.value===P.id?(o(),b("div",Al,[x(ie,{name:"i-heroicons-arrow-path",class:"h-4 w-4 animate-spin text-pink-500"})])):L("",!0)])]),t("td",zl,[t("div",Ul,[x(A,{icon:"i-heroicons-chat-bubble-left-ellipsis",size:"xs",color:"neutral",variant:"ghost",title:e(a)("common.viewChatRecords"),onClick:xe=>U(P)},null,8,["title","onClick"]),x(A,{label:e(a)("members.list.delete"),size:"xs",onClick:xe=>ue(P)},null,8,["label","onClick"])])])]))),128))])])],2),_.value>1?(o(),b("div",Fl,[t("p",Hl,u(e(a)("members.list.pagination",{start:(h.value-1)*Te+1,end:Math.min(h.value*Te,v.value),total:v.value})),1),t("div",Bl,[x(A,{icon:"i-heroicons-chevron-left",variant:"outline",size:"sm",disabled:h.value===1||y.value,onClick:H[2]||(H[2]=P=>h.value--)},null,8,["disabled"]),t("span",Wl,u(h.value)+" / "+u(_.value),1),x(A,{icon:"i-heroicons-chevron-right",variant:"outline",size:"sm",disabled:h.value>=_.value||y.value,onClick:H[3]||(H[3]=P=>h.value++)},null,8,["disabled"])])])):L("",!0)]))],2),x(Ae,{open:!!g.value,ui:{content:"max-w-sm"},"onUpdate:open":H[4]||(H[4]=P=>g.value=null)},{content:M(()=>[t("div",Ol,[t("div",jl,[x(ie,{name:"i-heroicons-exclamation-triangle",class:"h-7 w-7 text-red-500"})]),t("h3",El,u(e(a)("members.list.modal.title")),1),t("p",Pl,u(e(a)("members.list.modal.content",{name:g.value?D(g.value):"",count:g.value?.messageCount.toLocaleString()})),1),t("div",ql,[x(A,{variant:"outline",onClick:_e},{default:M(()=>[K(u(e(a)("members.list.modal.cancel")),1)]),_:1}),x(A,{color:"error",loading:c.value,onClick:we},{default:M(()=>[K(u(e(a)("members.list.modal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"]),x(Ae,{open:p.value,ui:{content:"max-w-md"},"onUpdate:open":H[6]||(H[6]=P=>p.value=P)},{content:M(()=>[t("div",Gl,[t("div",Kl,[t("div",Yl,[x(ie,{name:"i-heroicons-link",class:"h-5 w-5 text-amber-600 dark:text-amber-400"})]),t("h3",Jl,u(e(a)("members.list.mergeModal.title")),1)]),t("p",Ql,u(e(a)("members.list.mergeModal.content",{source:j.value?D(j.value.secondary):"",sourceCount:j.value?j.value.secondary.messageCount.toLocaleString():"0",target:j.value?D(j.value.primary):"",targetCount:j.value?j.value.primary.messageCount.toLocaleString():"0"})),1),t("p",Zl,u(e(a)("members.list.mergeModal.hint")),1),t("div",Xl,[x(A,{variant:"outline",disabled:I.value,onClick:H[5]||(H[5]=P=>p.value=!1)},{default:M(()=>[K(u(e(a)("members.list.mergeModal.cancel")),1)]),_:1},8,["disabled"]),x(A,{color:"primary",loading:I.value,onClick:N},{default:M(()=>[K(u(e(a)("members.list.mergeModal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"])],2)}}}),ti={class:"main-content max-w-5xl p-6"},ai={class:"mb-4 text-sm text-gray-500 dark:text-gray-400 no-capture"},si={key:0,class:"divide-y divide-gray-100 dark:divide-gray-800"},oi={class:"w-32 shrink-0 pt-0.5 font-medium text-gray-900 dark:text-white"},ni={class:"flex flex-1 flex-wrap items-center gap-2"},li={class:"flex items-center gap-1.5 rounded-lg bg-gray-50 px-3 py-1.5 dark:bg-gray-800"},ii={class:"text-xs text-gray-400"},ri={key:0,class:"text-gray-300 dark:text-gray-600"},ci=B({__name:"NicknameHistory",props:{sessionId:{}},setup(m){const{t:s}=X(),a=m,n=S([]),r=S([]),l=S(!1);function d(k){return k.groupNickname||k.accountName||k.platformId}async function f(){if(a.sessionId)try{n.value=await Q().getMembers(a.sessionId)}catch(k){console.error("加载成员列表失败:",k)}}async function y(){if(!a.sessionId||n.value.length===0)return;l.value=!0;const k=[];try{const g=n.value.map(i=>Q().getMemberNameHistory(a.sessionId,i.id)),c=await Promise.all(g);n.value.forEach((i,p)=>{const I=c[p];I.length>2&&k.push({memberId:i.id,name:d(i),history:I})}),r.value=k}catch(g){console.error("加载昵称变更记录失败:",g)}finally{l.value=!1}}return E(()=>a.sessionId,async()=>{await f()},{immediate:!0}),E(()=>n.value.length,()=>{n.value.length>0&&y()}),fe(async()=>{n.value.length===0&&await f()}),(k,g)=>{const c=Oe;return o(),b("div",ti,[t("p",ai,u(e(s)("members.nicknameHistory.note")),1),x(e(G),{title:e(s)("members.nicknameHistory.title"),description:l.value?e(s)("members.nicknameHistory.loading"):r.value.length>0?e(s)("members.nicknameHistory.hasChanges",{count:r.value.length}):e(s)("members.nicknameHistory.noChanges")},{default:M(()=>[!l.value&&r.value.length>0?(o(),b("div",si,[(o(!0),b(W,null,Z(r.value,i=>(o(),b("div",{key:i.memberId,class:"flex items-start gap-3 px-5 py-3"},[t("div",oi,u(i.name),1),t("div",ni,[(o(!0),b(W,null,Z(i.history,(p,I)=>(o(),b(W,{key:I},[t("div",li,[t("span",{class:J(["text-sm",p.endTs===null?"font-semibold text-pink-600":"text-gray-700 dark:text-gray-300"])},u(p.name),3),p.endTs===null?(o(),C(c,{key:0,color:"primary",variant:"soft",size:"xs"},{default:M(()=>[K(u(e(s)("members.nicknameHistory.current")),1)]),_:1})):L("",!0),t("span",ii,"("+u(e(Nt)(p.startTs,p.endTs))+")",1)]),I<i.history.length-1?(o(),b("span",ri,"→")):L("",!0)],64))),128))])]))),128))])):l.value?(o(),C(e(se),{key:2,text:e(s)("members.nicknameHistory.loadingText")},null,8,["text"])):(o(),C(e(ne),{key:1,text:e(s)("members.nicknameHistory.empty")},null,8,["text"]))]),_:1},8,["title","description"])])}}}),ui={class:"flex h-full flex-col overflow-hidden bg-white dark:bg-page-dark"},di={class:"flex flex-none items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"},mi={class:"text-lg font-semibold text-gray-900 dark:text-white"},vi={class:"flex-1 overflow-auto"},hi=B({__name:"NicknameHistoryEntry",props:{sessionId:{}},setup(m){const{t:s}=X(),a=m,n=S(!1);return(r,l)=>{const d=ce,f=ge;return o(),b(W,null,[x(d,{variant:"ghost",icon:"i-heroicons-clock",size:"sm",onClick:l[0]||(l[0]=y=>n.value=!0)},{default:M(()=>[K(u(e(s)("analysis.subTabs.member.nicknameHistory")),1)]),_:1}),a.sessionId?(o(),C(f,{key:0,open:n.value,"onUpdate:open":l[2]||(l[2]=y=>n.value=y),ui:{content:"max-w-6xl h-[85vh]"}},{content:M(()=>[t("div",ui,[t("div",di,[t("h2",mi,u(e(s)("analysis.subTabs.member.nicknameHistory")),1),x(d,{variant:"ghost",icon:"i-heroicons-x-mark",size:"sm",onClick:l[1]||(l[1]=y=>n.value=!1)})]),t("div",vi,[x(ci,{"session-id":a.sessionId},null,8,["session-id"])])])]),_:1},8,["open"])):L("",!0)],64)}}}),pi={class:"flex h-full flex-col bg-white dark:bg-page-dark",style:{"padding-top":"var(--titlebar-area-height)"}},gi={class:"relative flex-1 overflow-y-auto"},fi={class:"h-full"},yi={key:2,class:"flex h-full items-center justify-center"},xi={class:"text-gray-500"},bi={class:"flex h-full flex-col overflow-hidden bg-white dark:bg-page-dark"},ki={class:"flex flex-none items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"},_i={class:"text-lg font-semibold text-gray-900 dark:text-white"},wi={class:"text-sm text-gray-500 dark:text-gray-400"},$i={class:"flex items-center gap-2"},Ci={class:"flex-1 overflow-hidden"},Ii=B({__name:"index",setup(m){const s=Pe(()=>We(()=>import("./MessageExportModal-Ch0tqQix.js"),__vite__mapDeps([5,6,4,7,8,9]))),{t:a}=X(),n=ct(),r=ut(),l=yt(),d=be(),f=xt(),{currentSessionId:y}=bt(l),k=S(!1),g=S(!1),c=S(!1),i=S(!1),p=S(!1);function I(){d.openChatRecordDrawer({})}const h=[{id:"overview",labelKey:"analysis.tabs.overview",icon:"i-heroicons-chart-pie"},{id:"view",labelKey:"analysis.tabs.view",icon:"i-heroicons-presentation-chart-bar"},{id:"ai-chat",labelKey:"analysis.tabs.aiChat",icon:"i-heroicons-chat-bubble-left-ellipsis"},{id:"lab",labelKey:"analysis.tabs.lab",icon:"i-heroicons-beaker"}],v=w(()=>f.debugMode?[...h,{id:"debug",labelKey:"analysis.tabs.debug",icon:"i-heroicons-bug-ant"}]:h),_=w(()=>v.value.map(oe=>oe.id)),{activeTab:$,isLoading:T,isInitialLoad:z,session:D,memberActivity:F,hourlyActivity:U,dailyActivity:O,messageTypes:ee,timeRangeValue:j,fullTimeRange:te,availableYears:q,timeFilter:V,initialTimeState:Y,loadData:ue}=At({route:n,router:r,currentSessionId:y,selectSession:l.selectSession,defaultTab:f.defaultSessionTab,validTabIds:_.value}),_e=w(()=>F.value.slice(0,3)),we=w(()=>F.value.length<=1?[]:[...F.value].sort((oe,N)=>oe.messageCount-N.messageCount).slice(0,1)),$e=w(()=>F.value.reduce((oe,N)=>oe+N.messageCount,0)),Ce=w(()=>F.value.filter(oe=>oe.messageCount>0).length);return(oe,N)=>{const R=ce,H=ge;return o(),b("div",pi,[e(z)?(o(),C(se,{key:0,variant:"page",text:e(a)("analysis.groupChat.loading")},null,8,["text"])):e(D)?(o(),b(W,{key:1},[x(zt,{"active-tab":e($),"onUpdate:activeTab":N[0]||(N[0]=A=>ze($)?$.value=A:null),"time-range-value":e(j),"onUpdate:timeRangeValue":N[1]||(N[1]=A=>ze(j)?j.value=A:null),title:e(D).name,avatar:e(D).groupAvatar,icon:"i-heroicons-chat-bubble-left-right","icon-class":"bg-primary-600 text-white dark:bg-primary-500 dark:text-white",tabs:v.value,"current-session-id":e(y),"initial-time-state":e(Y),onOpenIncrementalImport:N[2]||(N[2]=A=>c.value=!0),onOpenMemberManagement:N[3]||(N[3]=A=>p.value=!0),onOpenChatRecord:I,"onUpdate:fullRange":N[4]||(N[4]=A=>te.value=A),"onUpdate:availableYears":N[5]||(N[5]=A=>q.value=A)},null,8,["active-tab","time-range-value","title","avatar","tabs","current-session-id","initial-time-state"]),t("div",gi,[e(T)?(o(),C(se,{key:0,variant:"overlay"})):L("",!0),t("div",fi,[x(De,{name:"tab-slide",mode:"out-in"},{default:M(()=>[e($)==="overview"?(o(),C(Ya,{key:"overview-"+e(y),session:e(D),"member-activity":e(F),"top-members":_e.value,"bottom-members":we.value,"message-types":e(ee),"hourly-activity":e(U),"daily-activity":e(O),"time-range":e(te),"filtered-message-count":$e.value,"filtered-member-count":Ce.value,"time-filter":e(V)},null,8,["session","member-activity","top-members","bottom-members","message-types","hourly-activity","daily-activity","time-range","filtered-message-count","filtered-member-count","time-filter"])):e($)==="view"?(o(),C(Xn,{key:"view-"+e(y),"session-id":e(y),"session-name":e(D).name,"time-filter":e(V)},null,8,["session-id","session-name","time-filter"])):e($)==="ai-chat"?(o(),C(e(Wt),{key:"ai-chat-"+e(y),"session-id":e(y),"session-name":e(D).name,"chat-type":"group"},null,8,["session-id","session-name"])):e($)==="memory"?(o(),C(Ot,{key:"memory-"+e(y),"session-id":e(y),"session-name":e(D).name},null,8,["session-id","session-name"])):e($)==="lab"?(o(),C(jt,{key:"lab-"+e(y),"session-id":e(y),"session-name":e(D).name,"time-filter":e(V),"chat-type":"group",mode:"sql-only"},null,8,["session-id","session-name","time-filter"])):e($)==="debug"?(o(),C(e(Et),{key:"debug-"+e(y),"session-id":e(y)},null,8,["session-id"])):L("",!0)]),_:1})])]),x(Ut,{onOpenIncrementalImport:N[6]||(N[6]=A=>c.value=!0),onOpenSemanticIndex:N[7]||(N[7]=A=>k.value=!0),onOpenMemberManagement:N[8]||(N[8]=A=>p.value=!0),onOpenChatRecord:I,onOpenMessageExport:N[9]||(N[9]=A=>i.value=!0)}),e(f).debugMode?(o(),C(Pt,{key:0})):L("",!0)],64)):(o(),b("div",yi,[t("p",xi,u(e(a)("analysis.groupChat.loadError")),1)])),e(y)&&e(D)?(o(),C(Ft,{key:3,modelValue:k.value,"onUpdate:modelValue":N[10]||(N[10]=A=>k.value=A),"session-id":e(y),"message-count":e(D).messageCount},null,8,["modelValue","session-id","message-count"])):L("",!0),e(y)&&e(D)?(o(),C(Ht,{key:4,modelValue:g.value,"onUpdate:modelValue":N[11]||(N[11]=A=>g.value=A),"session-id":e(y),"chat-type":"group","auto-check":""},null,8,["modelValue","session-id"])):L("",!0),e(y)&&e(D)?(o(),C(Bt,{key:5,modelValue:c.value,"onUpdate:modelValue":N[12]||(N[12]=A=>c.value=A),"session-id":e(y),"session-name":e(D).name,onImported:N[13]||(N[13]=()=>{e(ue)(),e(l).loadSessions()})},null,8,["modelValue","session-id","session-name"])):L("",!0),e(y)?(o(),C(e(s),{key:6,modelValue:i.value,"onUpdate:modelValue":N[14]||(N[14]=A=>i.value=A)},null,8,["modelValue"])):L("",!0),e(y)?(o(),C(H,{key:7,open:p.value,"onUpdate:open":N[16]||(N[16]=A=>p.value=A),ui:{content:"max-w-6xl h-[85vh]"}},{content:M(()=>[t("div",bi,[t("div",ki,[t("div",null,[t("h2",_i,u(e(a)("analysis.tooltip.memberManagement")),1),t("p",wi,u(e(a)("members.list.description",{count:e(D)?.memberCount??0})),1)]),t("div",$i,[x(hi,{"session-id":e(y)},null,8,["session-id"]),x(R,{variant:"ghost",icon:"i-heroicons-x-mark",size:"sm",onClick:N[15]||(N[15]=A=>p.value=!1)})])]),t("div",Ci,[x(ei,{"session-id":e(y),"show-header":!1,onDataChanged:e(ue)},null,8,["session-id","onDataChanged"])])])]),_:1},8,["open"])):L("",!0)])}}}),Fi=Ne(Ii,[["__scopeId","data-v-7722d374"]]);export{Fi as default};
|
|
@@ -0,0 +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};
|