chatlab-cli 0.37.0 → 0.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/{chat-command-WBAJBKIE.mjs → chat-command-YAFRLHMQ.mjs} +8 -8
  2. package/dist/{chunk-N2WGG3MS.mjs → chunk-2PY4XCH3.mjs} +6 -3
  3. package/dist/chunk-2PY4XCH3.mjs.map +1 -0
  4. package/dist/{chunk-FM3GXNEO.mjs → chunk-73TJ2S7W.mjs} +2 -2
  5. package/dist/{chunk-MSMDLDPB.mjs → chunk-ARIBCH47.mjs} +4 -4
  6. package/dist/{chunk-CR2MU7LN.mjs → chunk-FPVRSXQ4.mjs} +12 -12
  7. package/dist/{chunk-DQR2YS3I.mjs → chunk-GKCIRKOH.mjs} +8 -6
  8. package/dist/{chunk-DQR2YS3I.mjs.map → chunk-GKCIRKOH.mjs.map} +1 -1
  9. package/dist/{chunk-5YOHLJFB.mjs → chunk-JWJREWVN.mjs} +24 -7
  10. package/dist/chunk-JWJREWVN.mjs.map +1 -0
  11. package/dist/{chunk-RXMSZIYD.mjs → chunk-MMTEGUQA.mjs} +3 -3
  12. package/dist/{chunk-EJBBVLUN.mjs → chunk-N4SB6QZV.mjs} +2 -2
  13. package/dist/{chunk-4J4MA3RC.mjs → chunk-OTYNMDDL.mjs} +83 -55
  14. package/dist/chunk-OTYNMDDL.mjs.map +1 -0
  15. package/dist/{chunk-SQWN4GTQ.mjs → chunk-PDQV4RUA.mjs} +2 -2
  16. package/dist/{chunk-DKIYHA3O.mjs → chunk-UP6JIV3S.mjs} +15 -22
  17. package/dist/chunk-UP6JIV3S.mjs.map +1 -0
  18. package/dist/{chunk-2TV7M4CC.mjs → chunk-WDLO7OLX.mjs} +2 -2
  19. package/dist/cli.mjs +9 -9
  20. package/dist/contacts-worker.mjs +2 -2
  21. package/dist/global-insight-worker.mjs +1 -1
  22. package/dist/{http-X6OEOOSH.mjs → http-LPFPVTBC.mjs} +12 -12
  23. package/dist/{import-WBJ6YIQ7.mjs → import-T4WX2ZJL.mjs} +7 -7
  24. package/dist/index.mjs +12 -12
  25. package/dist/{mcp-FR6OKWKL.mjs → mcp-SMF3NWIN.mjs} +8 -8
  26. package/dist/people-relationships-worker.mjs +2 -2
  27. package/dist/semantic-index-worker.mjs +1 -1
  28. package/dist/{src-WE5HNN2O.mjs → src-EGLLMTAU.mjs} +6 -6
  29. package/dist/{stream-import-YYQVZDGQ.mjs → stream-import-2BXJTTCE.mjs} +7 -7
  30. package/dist/{worker-runtime-YGB5ZDE4.mjs → worker-runtime-RDLSPXFT.mjs} +5 -5
  31. package/dist-cli-web/assets/{AISettingsTab-Co2sM1iY.js → AISettingsTab-CEhrXlYR.js} +1 -1
  32. package/dist-cli-web/assets/{AboutTab-DQ8r6mYE.js → AboutTab-Bbu0SsMM.js} +1 -1
  33. package/dist-cli-web/assets/{ActionToolsPanel-CmYpw8Mt.css → ActionToolsPanel-DDNXXH8v.css} +1 -1
  34. package/dist-cli-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-IB1yZxCE.js +75 -0
  35. package/dist-cli-web/assets/{Alert-DU1tLAAg.js → Alert-510jTN3l.js} +1 -1
  36. package/dist-cli-web/assets/{ApiSettingsTab-D5g5b79L.js → ApiSettingsTab-Bi1GRMN4.js} +1 -1
  37. package/dist-cli-web/assets/{BatchManageTab-BFUyVaGU.js → BatchManageTab-DhnqMCSM.js} +1 -1
  38. package/dist-cli-web/assets/{BufferResource-C-RfYwQW.js → BufferResource-CKZxnACp.js} +1 -1
  39. package/dist-cli-web/assets/{CanvasRenderer-Dz7JAMrR.js → CanvasRenderer-BeK5POBy.js} +1 -1
  40. package/dist-cli-web/assets/{CardDecoration-D28DI1G9.js → CardDecoration-RuBA3N2j.js} +1 -1
  41. package/dist-cli-web/assets/{ChatRecordDrawer-Cph819yY.js → ChatRecordDrawer-BY_-lIEj.js} +1 -1
  42. package/dist-cli-web/assets/{ChatRecordWorkspace-BAfERdPc.js → ChatRecordWorkspace-7prKd-Tq.js} +1 -1
  43. package/dist-cli-web/assets/{Checkbox-B8uqt13j.js → Checkbox-_eH64bb0.js} +1 -1
  44. package/dist-cli-web/assets/{DataDirCleanupNotice-3sGBE5vU.js → DataDirCleanupNotice-BHaXwlfr.js} +1 -1
  45. package/dist-cli-web/assets/{DatePicker.vue_vue_type_script_setup_true_lang-CQuub8-f.js → DatePicker.vue_vue_type_script_setup_true_lang-D9Ul_GYz.js} +1 -1
  46. package/dist-cli-web/assets/{DebugToolsPanel-Cwkr0BOY.js → DebugToolsPanel-ByKItGrS.js} +1 -1
  47. package/dist-cli-web/assets/{EChart.vue_vue_type_script_setup_true_lang-BuLujQCF.js → EChart.vue_vue_type_script_setup_true_lang-DubnuUXI.js} +1 -1
  48. package/dist-cli-web/assets/{EChartBar.vue_vue_type_script_setup_true_lang-DuA5xbcC.js → EChartBar.vue_vue_type_script_setup_true_lang-DKNCZuFm.js} +1 -1
  49. package/dist-cli-web/assets/{EChartLine.vue_vue_type_script_setup_true_lang-CvmMEfYq.js → EChartLine.vue_vue_type_script_setup_true_lang-Fl7xAOSR.js} +1 -1
  50. package/dist-cli-web/assets/{EChartWordcloud-CHVtyPR7.js → EChartWordcloud-C6XM4KOX.js} +1 -1
  51. package/dist-cli-web/assets/{FileDropZone.vue_vue_type_script_setup_true_lang-BKPy9Qv-.js → FileDropZone.vue_vue_type_script_setup_true_lang-DYDdRSNE.js} +1 -1
  52. package/dist-cli-web/assets/{Filter-CMfRHIoK.js → Filter-CByj_rCR.js} +1 -1
  53. package/dist-cli-web/assets/{GlobalTaskBar-Jz6MASCu.js → GlobalTaskBar-BdELjzrs.js} +1 -1
  54. package/dist-cli-web/assets/{GroupRelationshipGalaxyView-Ch4obfEq.js → GroupRelationshipGalaxyView-CnzPEgUS.js} +1 -1
  55. package/dist-cli-web/assets/{Label-CuryuymO.js → Label-DCIcxkhU.js} +1 -1
  56. package/dist-cli-web/assets/{LoadingState.vue_vue_type_script_setup_true_lang-CoeQsaiL.js → LoadingState.vue_vue_type_script_setup_true_lang-BBcCt_Qm.js} +1 -1
  57. package/dist-cli-web/assets/{MessageExportModal-JqGZ-iLr.js → MessageExportModal-DNU16Bs8.js} +1 -1
  58. package/dist-cli-web/assets/{PageHeader-D4up77TB.js → PageHeader-CKeZjNNR.js} +1 -1
  59. package/dist-cli-web/assets/{PageTabs.vue_vue_type_script_setup_true_lang-DYQRFk9s.js → PageTabs.vue_vue_type_script_setup_true_lang-C8M3wNNH.js} +1 -1
  60. package/dist-cli-web/assets/{RelationshipGalaxyCanvas-Cn7Eta5U.js → RelationshipGalaxyCanvas-CDhljGyJ.js} +3 -3
  61. package/dist-cli-web/assets/{RelationshipGalaxyThreeCanvas-LlaX57z6.js → RelationshipGalaxyThreeCanvas-BP8fsvvf.js} +1 -1
  62. package/dist-cli-web/assets/{RenderTargetSystem-JhA2PUFi.js → RenderTargetSystem-D76QrDT_.js} +1 -1
  63. package/dist-cli-web/assets/{RovingFocusItem-DHaiTb4j.js → RovingFocusItem-BJMUQ5DJ.js} +1 -1
  64. package/dist-cli-web/assets/{ScreenCaptureModal-Bxhyt5g1.js → ScreenCaptureModal-DkX4z-M1.js} +1 -1
  65. package/dist-cli-web/assets/{SectionTabs.vue_vue_type_script_setup_true_lang-BlAje3Tf.js → SectionTabs.vue_vue_type_script_setup_true_lang-qFhJO5B0.js} +1 -1
  66. package/dist-cli-web/assets/{Select-Beeqv0wU.js → Select-B5oJc5y1.js} +1 -1
  67. package/dist-cli-web/assets/SettingsModal-BO-QKQ2h.js +2 -0
  68. package/dist-cli-web/assets/{StorageTab-B7GHadia.js → StorageTab-CPPXXaRm.js} +1 -1
  69. package/dist-cli-web/assets/{Switch-u4zlvUMa.js → Switch-CDk3LZ4_.js} +1 -1
  70. package/dist-cli-web/assets/{Tabs-RWKHwtfM.js → Tabs-BMq9wODW.js} +1 -1
  71. package/dist-cli-web/assets/{Tabs-B7-Koq3x.js → Tabs-DqWTBV8x.js} +1 -1
  72. package/dist-cli-web/assets/{ThemeCard.vue_vue_type_script_setup_true_lang-ndsa3-aT.js → ThemeCard.vue_vue_type_script_setup_true_lang-D2outEOV.js} +1 -1
  73. package/dist-cli-web/assets/{TimeSelect.vue_vue_type_script_setup_true_lang-DKa1flT-.js → TimeSelect.vue_vue_type_script_setup_true_lang-BcflxP_U.js} +1 -1
  74. package/dist-cli-web/assets/{VisuallyHiddenInput-DGDqcvUy.js → VisuallyHiddenInput-BAFpkxMI.js} +1 -1
  75. package/dist-cli-web/assets/{WebGLRenderer-ifvgA1fe.js → WebGLRenderer-DjCPvR_O.js} +1 -1
  76. package/dist-cli-web/assets/{WebGPURenderer-DwzmuWF0.js → WebGPURenderer-C2B_u03z.js} +1 -1
  77. package/dist-cli-web/assets/aiChat--CR4g2M7.js +8 -0
  78. package/dist-cli-web/assets/{base-BWDX-164.js → base-F6s0vTrr.js} +1 -1
  79. package/dist-cli-web/assets/{browserAll-CSIIETeE.js → browserAll-DiUAZg4L.js} +1 -1
  80. package/dist-cli-web/assets/{chatMessages--r0obAVw.css → chatMessages-BGRbSlvD.css} +1 -1
  81. package/dist-cli-web/assets/{chatMessages-Zywjea1n.js → chatMessages-Bd33SSXI.js} +20 -20
  82. package/dist-cli-web/assets/{cli-web-BRY49NWe.js → cli-web-DoibEdj2.js} +1 -1
  83. package/dist-cli-web/assets/{fetch-jx1VdM9j.js → fetch-4nh1LaVF.js} +1 -1
  84. package/dist-cli-web/assets/{fetch-qBaUXqFt.js → fetch-7lUvXbhU.js} +1 -1
  85. package/dist-cli-web/assets/{fetch-DNSDHSqQ.js → fetch-BEaW1j5H.js} +1 -1
  86. package/dist-cli-web/assets/{fetch-wzv71PYy.js → fetch-B_YFABxI.js} +1 -1
  87. package/dist-cli-web/assets/{fetch-D3nLtFBi.js → fetch-BeX69kpS.js} +1 -1
  88. package/dist-cli-web/assets/{fetch-Bf4cqeM3.js → fetch-CRocA-4C.js} +1 -1
  89. package/dist-cli-web/assets/{fetch-BiXab0IF.js → fetch-CXM-cjDS.js} +1 -1
  90. package/dist-cli-web/assets/{fetch-Co2vLmiE.js → fetch-CXqeAbnY.js} +1 -1
  91. package/dist-cli-web/assets/{fetch-r6mhEGrP.js → fetch-CxVcHNid.js} +1 -1
  92. package/dist-cli-web/assets/fetch-DBpDMy29.js +1 -0
  93. package/dist-cli-web/assets/{fetch-mYSeL4Ki.js → fetch-DKBBS9Op.js} +1 -1
  94. package/dist-cli-web/assets/{fetch-DeHqF6yL.js → fetch-epFXmPIQ.js} +1 -1
  95. package/dist-cli-web/assets/{host-jXJHyyOX.js → host-C4rU8pKA.js} +1 -1
  96. package/dist-cli-web/assets/{host-1emQf9_4.js → host-CtSqR_Zm.js} +1 -1
  97. package/dist-cli-web/assets/{index-Cw0IhKZ6.js → index-4DVZ2g0M.js} +1 -1
  98. package/dist-cli-web/assets/{index-DnpnIyle.js → index-B1oj9KDv.js} +33 -33
  99. package/dist-cli-web/assets/{index-slDUxib2.js → index-BFH1j_R9.js} +1 -1
  100. package/dist-cli-web/assets/{index-DOqbUvhA.js → index-BvMAw3Zd.js} +1 -1
  101. package/dist-cli-web/assets/{index-2dJCozDq.js → index-CaYtkONV.js} +4 -4
  102. package/dist-cli-web/assets/{index-B4mJkX_d.js → index-CuCQ1d9f.js} +1 -1
  103. package/dist-cli-web/assets/index-D3Hyjv4e.js +137 -0
  104. package/dist-cli-web/assets/{index-ClHMs0-a.js → index-D8cHMqV-.js} +2 -2
  105. package/dist-cli-web/assets/{index-BQ463TS7.js → index-DlHuILT_.js} +1 -1
  106. package/dist-cli-web/assets/{index-6ejRbH3h.js → index-R4LqAnx9.js} +2 -2
  107. package/dist-cli-web/assets/{index-LV9LfFNu.js → index-_m1mf1jm.js} +1 -1
  108. package/dist-cli-web/assets/{index-CYc_VLgK.js → index-ekvsNmfe.js} +1 -1
  109. package/dist-cli-web/assets/{index-B7biznha.js → index-mXe1LssU.js} +1 -1
  110. package/dist-cli-web/assets/{index-BOcFyPCa.js → index-mbLXPIyC.js} +1 -1
  111. package/dist-cli-web/assets/{people-page-header-Cx5r9Bk2.js → people-page-header-BbYSSpsO.js} +1 -1
  112. package/dist-cli-web/assets/{prompt-BggEDxxi.js → prompt-C-ofJ7t_.js} +1 -1
  113. package/dist-cli-web/assets/{semantic-index-config-builder-1sO0aEc1.js → semantic-index-config-builder-D3TYVYC-.js} +1 -1
  114. package/dist-cli-web/assets/service-BYOUkk7V.js +1 -0
  115. package/dist-cli-web/assets/{service-Bvq1fRkC.js → service-CppETV4a.js} +1 -1
  116. package/dist-cli-web/assets/service-tEx-5LUL.js +1 -0
  117. package/dist-cli-web/assets/useFormControl-CrWi_6Hn.js +1 -0
  118. package/dist-cli-web/assets/{useTable-DC7oxmBl.js → useTable-Clk7ecq-.js} +1 -1
  119. package/dist-cli-web/assets/{useToast-CCPBE-Sy.js → useToast-B5LaA6c-.js} +1 -1
  120. package/dist-cli-web/assets/{webworkerAll-FCJk6reG.js → webworkerAll-CyA4b4LT.js} +1 -1
  121. package/dist-cli-web/index.html +1 -1
  122. package/package.json +3 -3
  123. package/dist/chunk-4J4MA3RC.mjs.map +0 -1
  124. package/dist/chunk-5YOHLJFB.mjs.map +0 -1
  125. package/dist/chunk-DKIYHA3O.mjs.map +0 -1
  126. package/dist/chunk-N2WGG3MS.mjs.map +0 -1
  127. package/dist-cli-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang--RPlmfIu.js +0 -75
  128. package/dist-cli-web/assets/SettingsModal-DV8yDBJs.js +0 -2
  129. package/dist-cli-web/assets/aiChat-BY4C3UQe.js +0 -8
  130. package/dist-cli-web/assets/fetch-C8CcoTWY.js +0 -1
  131. package/dist-cli-web/assets/index-kePiJ3ca.js +0 -137
  132. package/dist-cli-web/assets/service-DkPheDt8.js +0 -1
  133. package/dist-cli-web/assets/service-DvI8O_7K.js +0 -1
  134. package/dist-cli-web/assets/useFormControl-B0aShtLp.js +0 -1
  135. /package/dist/{chat-command-WBAJBKIE.mjs.map → chat-command-YAFRLHMQ.mjs.map} +0 -0
  136. /package/dist/{chunk-FM3GXNEO.mjs.map → chunk-73TJ2S7W.mjs.map} +0 -0
  137. /package/dist/{chunk-MSMDLDPB.mjs.map → chunk-ARIBCH47.mjs.map} +0 -0
  138. /package/dist/{chunk-CR2MU7LN.mjs.map → chunk-FPVRSXQ4.mjs.map} +0 -0
  139. /package/dist/{chunk-RXMSZIYD.mjs.map → chunk-MMTEGUQA.mjs.map} +0 -0
  140. /package/dist/{chunk-EJBBVLUN.mjs.map → chunk-N4SB6QZV.mjs.map} +0 -0
  141. /package/dist/{chunk-SQWN4GTQ.mjs.map → chunk-PDQV4RUA.mjs.map} +0 -0
  142. /package/dist/{chunk-2TV7M4CC.mjs.map → chunk-WDLO7OLX.mjs.map} +0 -0
  143. /package/dist/{http-X6OEOOSH.mjs.map → http-LPFPVTBC.mjs.map} +0 -0
  144. /package/dist/{import-WBJ6YIQ7.mjs.map → import-T4WX2ZJL.mjs.map} +0 -0
  145. /package/dist/{mcp-FR6OKWKL.mjs.map → mcp-SMF3NWIN.mjs.map} +0 -0
  146. /package/dist/{src-WE5HNN2O.mjs.map → src-EGLLMTAU.mjs.map} +0 -0
  147. /package/dist/{stream-import-YYQVZDGQ.mjs.map → stream-import-2BXJTTCE.mjs.map} +0 -0
  148. /package/dist/{worker-runtime-YGB5ZDE4.mjs.map → worker-runtime-RDLSPXFT.mjs.map} +0 -0
@@ -1 +1 @@
1
- import{d as ke,a6 as be,o as c,f as re,w as T,c as f,a,p as o,g as r,z as y,a8 as _e,a7 as Se,F as q,j as he,l as N,a9 as Z,aE as Tt,e as u,ah as De,L as Lt,J as $t,ay as It,bg as Ft,K as O,x as Pt,y as Mt,aq as zt,a1 as At,O as X,n as U,bh as Et,b,C as Be,bv as Nt}from"./index-DnpnIyle.js";import{_ as Bt}from"./Tabs-RWKHwtfM.js";import{u as jt}from"./useToast-CCPBE-Sy.js";import{_ as Vt}from"./ThemeCard.vue_vue_type_script_setup_true_lang-ndsa3-aT.js";import{_ as Dt}from"./LoadingState.vue_vue_type_script_setup_true_lang-CoeQsaiL.js";import{_ as Gt}from"./SectionTabs.vue_vue_type_script_setup_true_lang-BlAje3Tf.js";import{u as Ot}from"./people-page-header-Cx5r9Bk2.js";import"./vendor-snapdom--nZvo8Sg.js";import"./RovingFocusItem-DHaiTb4j.js";const Ut={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"}},qt={class:"flex items-center justify-between border-b border-gray-200 px-4 py-3 dark:border-gray-800"},Rt={class:"text-base font-semibold text-gray-900 dark:text-white"},Ht={key:0,class:"flex min-h-0 flex-1 items-center justify-center gap-2 text-sm text-gray-400 dark:text-gray-500"},Kt={key:1,class:"min-h-0 flex-1 overflow-y-auto"},Yt={class:"px-5 py-5"},Qt={class:"flex items-start gap-4"},Wt={class:"relative shrink-0"},Jt=["src","alt"],Xt={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"},Zt={class:"min-w-0 flex-1 pt-1"},ea={class:"truncate text-lg font-bold tracking-tight text-gray-900 dark:text-white"},ta={class:"mt-1 truncate font-mono text-xs text-gray-400 dark:text-gray-500"},aa={key:0,class:"mt-2 flex flex-wrap gap-1.5"},na={key:1,class:"mt-3 flex flex-wrap items-center gap-2"},sa={class:"border-t border-gray-100 px-5 py-4 dark:border-white/5"},oa={class:"mb-3 text-[10px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500"},ra={class:"space-y-2.5"},ia={class:"flex items-center justify-between gap-2"},la={class:"truncate text-xs font-semibold text-gray-700 dark:text-gray-300"},ca={class:"flex items-center gap-1 text-[10px] font-bold text-gray-400 transition group-hover/item:text-pink-500 dark:text-gray-500"},da={class:"mt-1.5 truncate text-[11px] font-medium text-gray-400 dark:text-gray-500"},ua={class:"mt-2 flex flex-wrap gap-1.5"},fa=ke({__name:"ContactDetailPanel",props:{selectedKey:{},contact:{},isLoading:{type:Boolean},isFriendActionLoading:{type:Boolean}},emits:["clear","openSource","viewSourceRecords","markFriend","unmarkFriend"],setup(n,{emit:s}){const h=n,S=s,{t:C}=be(),A=u(()=>{const p=h.contact;if(!p)return[];const v=new Set([p.displayName.trim().toLowerCase(),p.platformId.trim().toLowerCase()]);return p.aliases.filter(w=>!v.has(w.trim().toLowerCase()))}),I=u(()=>h.contact?.pool==="non_friend"),F=u(()=>h.contact?.friendSource==="manual"),B=u(()=>I.value||F.value);function P(p){return p.displayName.trim().slice(0,1).toUpperCase()||"?"}return(p,v)=>{const w=_e,R=Se;return c(),re(Tt,{name:"contact-detail-panel"},{default:T(()=>[n.selectedKey?(c(),f("aside",Ut,[a("div",qt,[a("h3",Rt,o(r(C)("contacts.detail.title")),1),y(w,{"aria-label":r(C)("contacts.actions.clearSelection"),icon:"i-heroicons-x-mark",color:"neutral",variant:"ghost",size:"sm",onClick:v[0]||(v[0]=x=>S("clear"))},null,8,["aria-label"])]),n.isLoading?(c(),f("div",Ht,[y(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",Kt,[a("section",Yt,[a("div",Qt,[a("div",Wt,[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,Jt)):(c(),f("div",Xt,o(P(n.contact)),1))]),a("div",Zt,[a("h2",ea,o(n.contact.displayName),1),a("p",ta,o(n.contact.platform)+" · "+o(n.contact.platformId),1),A.value.length>0?(c(),f("div",aa,[(c(!0),f(q,null,he(A.value.slice(0,4),x=>(c(),f("span",{key:x,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(x),1))),128))])):N("",!0),B.value?(c(),f("div",na,[I.value?(c(),re(w,{key:0,icon:"i-lucide-user-plus",color:"primary",variant:"soft",size:"xs",loading:n.isFriendActionLoading,onClick:v[1]||(v[1]=x=>S("markFriend"))},{default:T(()=>[Z(o(r(C)("contacts.actions.markFriend")),1)]),_:1},8,["loading"])):F.value?(c(),re(w,{key:1,icon:"i-lucide-user-minus",color:"neutral",variant:"soft",size:"xs",loading:n.isFriendActionLoading,onClick:v[2]||(v[2]=x=>S("unmarkFriend"))},{default:T(()=>[Z(o(r(C)("contacts.actions.unmarkFriend")),1)]),_:1},8,["loading"])):N("",!0)])):N("",!0)])])]),a("section",sa,[a("h3",oa,o(r(C)("contacts.detail.sources")),1),a("div",ra,[(c(!0),f(q,null,he(n.contact.sourceSessions,x=>(c(),f("div",{key:x.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 dark:border-white/5 dark:bg-page-dark/10 dark:hover:border-white/10"},[a("div",ia,[a("span",la,o(x.name),1),a("span",ca,o(x.type==="private"?r(C)("contacts.detail.sourceType.private"):r(C)("contacts.detail.sourceType.group")),1)]),a("div",da,o(x.privateMessageCount!=null?r(C)("contacts.metrics.privateMessages",{count:x.privateMessageCount}):r(C)("contacts.metrics.groupSignals",{count:x.coOccurrenceCount??0})),1),a("div",ua,[y(w,{icon:"i-lucide-arrow-up-right",color:"primary",variant:"soft",size:"xs",onClick:j=>S("openSource",x)},{default:T(()=>[Z(o(r(C)("contacts.actions.openSourceSession")),1)]),_:1},8,["onClick"]),y(w,{icon:"i-lucide-messages-square",color:"primary",variant:"soft",size:"xs",onClick:j=>S("viewSourceRecords",x)},{default:T(()=>[Z(o(r(C)("contacts.actions.viewSourceRecords")),1)]),_:1},8,["onClick"])])]))),128))])])])):N("",!0)])):N("",!0)]),_:1})}}}),ma=De(fa,[["__scopeId","data-v-4df1b50a"]]),pa={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 backdrop-blur-sm dark:border-amber-900/40 dark:bg-amber-950/10 dark:text-amber-200"},ga={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-amber-100/80 dark:bg-amber-950/50"},va={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 backdrop-blur-sm dark:border-zinc-800/80 dark:bg-page-dark/40 dark:text-zinc-300 sm:flex-row sm:items-center sm:justify-between"},ya={class:"flex items-center gap-3.5"},ha={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-zinc-100 dark:bg-zinc-800/80"},ka={class:"font-medium"},ba={class:"flex items-center shrink-0 self-end sm:self-center"},_a={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 backdrop-blur-sm dark:border-red-900/40 dark:bg-red-950/10 dark:text-red-300 sm:flex-row sm:items-center sm:justify-between"},Sa={class:"flex min-w-0 items-center gap-3.5"},wa={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-red-100/80 dark:bg-red-950/50"},Ca={class:"truncate font-medium"},Ta={class:"flex items-center shrink-0 self-end sm:self-center"},La=ke({__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 h=s,{t:S}=be();return(C,A)=>{const I=Se,F=_e;return c(),f(q,null,[n.showDisabledNotice?(c(),f("div",pa,[a("div",ga,[y(I,{name:"i-lucide-alert-triangle",class:"h-5 w-5 text-amber-500"})]),a("span",va,o(r(S)("contacts.disabled",{count:n.activePrivateSessionCount})),1)])):N("",!0),n.cacheStatus==="stale"&&!n.isTaskRunning?(c(),f("div",xa,[a("div",ya,[a("div",ha,[y(I,{name:"i-lucide-history",class:"h-5 w-5 text-zinc-500 dark:text-zinc-400"})]),a("span",ka,o(r(S)("contacts.stale.inline")),1)]),a("div",ba,[y(F,{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=>h("recompute"))},{default:T(()=>[Z(o(r(S)("contacts.actions.recompute")),1)]),_:1},8,["loading","disabled"])])])):N("",!0),n.taskFailed?(c(),f("div",_a,[a("div",Sa,[a("div",wa,[y(I,{name:"i-lucide-alert-circle",class:"h-5 w-5 text-red-500"})]),a("span",Ca,o(n.taskLastError||r(S)("contacts.task.failed")),1)]),a("div",Ta,[y(F,{size:"sm",color:"error",variant:"soft",class:"rounded-xl px-4 font-medium",onClick:A[1]||(A[1]=B=>h("recompute"))},{default:T(()=>[Z(o(r(S)("contacts.task.retry")),1)]),_:1})])])):N("",!0)],64)}}});function $a(n){return!!n.diagnostics&&!n.showLoadingState&&!n.diagnostics.contactsEnabled}function Ia(n){return n.previousScrollTop}function je(n){return n!=="friend"}function Fa(n){return n.friendInitialLoading||n.groupmateInitialLoading}function Pa(n){return n.activeSection==="non_friend"||n.friendSectionReady}function Ma(n){return n.friendInitialLoading||n.groupmateInitialLoading||n.completionProgressVisible===!0||n.activeTaskStatus==="running"||n.friendTaskStatus==="running"||n.groupmateTaskStatus==="running"}function za(n){return n.previousStatus==="running"&&n.nextStatus==="succeeded"&&n.nextTotalSessions>0&&n.nextProcessedSessions>=n.nextTotalSessions&&n.previousProcessedSessions<n.nextTotalSessions}function Aa(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(h=>({type:"contact",key:h.key,pool:"friend",contact:h}))),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(h=>({type:"contact",key:h.key,pool:"non_friend",contact:h}))),n.groupmateLoadingMore&&s.push({type:"loading",key:"loading:non_friend",pool:"non_friend"})),s}const Na={class:"flex min-h-0 flex-1 flex-col text-gray-900 dark:bg-page-dark dark:text-gray-100"},Ba={class:"flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2 py-1.5 xl:py-0"},ja={class:"flex min-h-0 flex-1 overflow-hidden"},Va={class:"min-h-0 min-w-0 flex-1 overflow-hidden"},Da={class:"flex h-full min-h-0 w-full flex-col gap-6 px-6 pb-3 pt-4"},Ga={class:"flex min-h-0 flex-1 flex-col gap-4"},Oa={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"},Ua={key:2,class:"min-h-0 flex-1"},qa={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"},Ha={class:"mt-4 text-sm font-medium text-gray-400 dark:text-gray-500"},Ka={class:"shrink-0 overflow-hidden border-b border-gray-100 bg-white dark:border-white/5 dark:bg-[#202024]"},Ya={class:"flex min-w-0 items-center justify-end gap-1 text-right"},Qa={class:"truncate"},Wa={class:"max-w-[280px] whitespace-normal break-words text-left text-xs leading-5"},Ja={class:"flex min-w-0 items-center justify-end gap-1 text-right"},Xa={class:"truncate"},Za={class:"max-w-[280px] whitespace-normal break-words text-left text-xs leading-5"},en=["aria-label","onClick"],tn={class:"group flex min-w-0 w-full items-center gap-3"},an={class:"relative shrink-0 overflow-hidden rounded-lg"},nn=["src","alt"],sn={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"},on={class:"min-w-0 flex-1"},rn={class:"flex min-w-0 items-center gap-1"},ln={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"},cn={class:"contact-table-value"},dn={class:"contact-table-value"},un={class:"contact-table-value"},fn={class:"contact-table-value"},mn=100,Ve=69,pn=20,gn=ke({__name:"index",setup(n){const{t:s}=be(),h=jt(),S=Lt(),C=$t(),A=It(),I=b(!1),F=b(""),B=b(""),P=b("1y"),p=b("friend"),v=b(null),w=b(null),R=b(!1),x=b(!1),j=b(null),fe=b(!1),H=b(null),ee=b(null),te=b(null),M=b(null),ae={friend:null,non_friend:null},K=b(!1),Y=b(null),we=b(0),ne=b({});function me(){return{items:[],response:null,page:0,total:0,hasMore:!1,isLoadingInitial:!1,isLoadingMore:!1,error:"",requestId:0,scrollOffset:0}}const V=b({friend:me(),non_friend:me()}),ie=u(()=>V.value[p.value]),k=u(()=>V.value.friend),m=u(()=>V.value.non_friend),Ce=u(()=>!!k.value.response&&!k.value.hasMore&&!k.value.isLoadingInitial),pe=u(()=>Pa({activeSection:p.value,friendSectionReady:Ce.value,groupmateHasItems:m.value.items.length>0,groupmateLoading:m.value.isLoadingInitial||m.value.isLoadingMore})),E=u(()=>Ea({friends:k.value.items,groupmates:m.value.items,showGroupSection:pe.value,friendLoadingMore:k.value.isLoadingMore,groupmateLoadingMore:m.value.isLoadingInitial||m.value.isLoadingMore})),le=u(()=>ie.value.response??k.value.response??m.value.response),ge=u(()=>[ie.value.response,k.value.response,m.value.response].find(e=>e?.task?.status==="running")??le.value),Ge=u(()=>k.value.items.length+m.value.items.length>0),Oe=u(()=>!Ge.value&&!!k.value.response&&!!m.value.response&&!k.value.hasMore&&!m.value.hasMore&&!k.value.isLoadingInitial&&!m.value.isLoadingInitial),Te=u(()=>k.value.error||m.value.error),ve=u(()=>le.value?.diagnostics),z=u(()=>ge.value?.task),ce=u(()=>H.value??z.value),Q=u(()=>z.value?.status==="running"),Ue=u(()=>z.value?.status==="failed"),Le=u(()=>Ma({activeTaskStatus:ie.value.response?.task?.status,friendTaskStatus:k.value.response?.task?.status,groupmateTaskStatus:m.value.response?.task?.status,friendInitialLoading:k.value.isLoadingInitial,groupmateInitialLoading:m.value.isLoadingInitial,completionProgressVisible:H.value!==null})),qe=u(()=>H.value?s("contacts.task.running",{current:ce.value?.processedSessions??0,total:ce.value?.totalSessions??0}):ge.value?.cache.status==="stale"&&Q.value?s("contacts.task.updating"):ge.value?.cache.status==="missing"&&Q.value?s("contacts.task.running",{current:ce.value?.processedSessions??0,total:ce.value?.totalSessions??0}):s("common.loading")),Re=u(()=>$a({diagnostics:ve.value,showLoadingState:Le.value})),se=u(()=>{const e=le.value?.stats,t=e?.friendsTotal??0,i=e?.nonFriendsTotal??0;return{total:t+i,friends:t,nonFriends:i}}),He=u(()=>[{id:"friend",label:`${s("contacts.tabs.friends")} ${se.value.friends.toLocaleString()}`,icon:"i-heroicons-user"},{id:"non_friend",label:`${s("contacts.tabs.groupContacts")} ${se.value.nonFriends.toLocaleString()}`,icon:"i-heroicons-user-group"}]),Ke=u(()=>Nt.map(e=>({label:s(`contacts.timeRange.${e}`),value:e}))),de=Ft(u(()=>({count:E.value.length,getScrollElement:()=>Y.value,estimateSize:e=>Ze(E.value[e]),overscan:10,getItemKey:e=>E.value[e]?.key??e}))),xe=u(()=>de.value.getVirtualItems()),Ye=u(()=>de.value.getTotalSize());O(F,e=>{te.value&&clearTimeout(te.value),te.value=setTimeout(()=>{B.value=e.trim()},300)}),O(()=>z.value?.status,()=>Pe()),O(()=>({status:z.value?.status,processedSessions:z.value?.processedSessions??0,totalSessions:z.value?.totalSessions??0}),(e,t)=>{e.status==="running"&&ue(),z.value&&za({previousStatus:t?.status,nextStatus:e.status,previousProcessedSessions:t?.processedSessions??0,nextProcessedSessions:e.processedSessions,nextTotalSessions:e.totalSessions})&&rt(z.value)}),O([B,P],()=>{nt(),$e()}),O(()=>E.value.length,()=>{de.value.measure()}),O(xe,()=>{Xe()},{flush:"post"}),O(E,()=>{v.value&&(k.value.items.some(e=>e.key===v.value)||m.value.items.some(e=>e.key===v.value)||oe())}),Pt(()=>{$e()}),Mt(()=>{Me(),ue(),te.value&&clearTimeout(te.value),M.value&&clearTimeout(M.value)});async function D(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 $e(){await Promise.all([D("friend"),D("non_friend")])}async function Ie(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:P.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;We(d,l,_,{preserveExisting:i?.preserveExisting}),Pe()}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(p.value,1,{acceptStale:!0,force:!0,replace:!0,throwOnError:!0}),h.success(s("contacts.toast.recomputeStarted"))}catch(e){h.fail(s("contacts.toast.recomputeFailed"),{description:String(e)})}finally{I.value=!1}}const Qe=u(()=>({title:s("layout.relationships"),description:s("contacts.subtitle",{count:ve.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:se.value.total.toLocaleString()},{id:"friends",label:s("contacts.stats.friends"),value:se.value.friends.toLocaleString()},{id:"nonFriends",label:s("contacts.stats.nonFriends"),value:se.value.nonFriends.toLocaleString(),dividerBefore:!0}]}));Ot(Qe);function We(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:Je(e.items,t.contacts),$&&oe()}function Je(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 Xe(){const t=xe.value.at(-1);if(!t||t.index<E.value.length-pn)return;if(G(t.index).pool==="friend"){if(k.value.hasMore){Ie("friend");return}Ce.value&&!m.value.response&&!m.value.isLoadingInitial&&D("non_friend");return}if(!m.value.response&&!m.value.isLoadingInitial){D("non_friend");return}m.value.hasMore&&Ie("non_friend")}function G(e){return E.value[e]}function g(e){return G(e)}function Ze(e){return e?.type==="section"?e.pool==="non_friend"?42:1:e?.type==="loading"?44:Ve}async function et(e){const t=e==="non_friend"?"non_friend":"friend";p.value=t,K.value=!0,M.value&&clearTimeout(M.value),t==="non_friend"&&await tt(),await Be();const i=E.value.findIndex(d=>d.type==="section"&&d.pool===t);if(i>=0){const d=t==="non_friend"?Math.min(i+1,E.value.length-1):i;de.value.scrollToIndex(d,{align:"start"})}M.value=setTimeout(()=>{K.value=!1,p.value=t},350)}async function tt(){!m.value.response&&!m.value.isLoadingInitial&&await D("non_friend",{acceptStale:!0}),await at()}async function at(e){if(!Fa({friendInitialLoading:k.value.isLoadingInitial,groupmateInitialLoading:m.value.isLoadingInitial}))return;const t=[ae.friend,ae.non_friend].filter(i=>!!i);t.length!==0&&await Promise.allSettled(t)}function nt(){K.value=!1,M.value&&clearTimeout(M.value),ue();for(const e of["friend","non_friend"])V.value[e].requestId++,V.value[e]=me();oe(),ne.value={},Y.value&&(Y.value.scrollTop=0)}function Pe(){Q.value?st():Me()}function st(){j.value||(j.value=setInterval(()=>{ot()},1500))}async function ot(){if(!fe.value){fe.value=!0;try{const e=Aa({activePool:p.value,friendTaskStatus:k.value.response?.task?.status,groupmateTaskStatus:m.value.response?.task?.status});await Promise.all(e.map(t=>W(t,1,{acceptStale:!0,replace:!0,preserveExisting:!0,silent:!0})))}finally{fe.value=!1}}}function Me(){j.value&&(clearInterval(j.value),j.value=null)}function rt(e){ue(),H.value={...e,processedSessions:e.totalSessions},ee.value=setTimeout(()=>{H.value=null,ee.value=null},450)}function ue(){ee.value&&(clearTimeout(ee.value),ee.value=null),H.value=null}async function it(e){v.value=e.key,await ze(e.key)}async function ze(e,t){const i=`${P.value}:${e}`,d=ne.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:P.value});if(v.value!==e)return;w.value=_.contact,_.contact&&(ne.value={...ne.value,[i]:_.contact})}catch(_){h.fail(s("contacts.toast.recomputeFailed"),{description:String(_)})}finally{v.value===e&&(R.value=!1)}}async function lt(){const e=w.value?.key;if(!(!e||x.value)){x.value=!0;try{await S.markContactAsFriend(e,{timeRangePreset:P.value}),h.success(s("contacts.toast.markFriendSucceeded")),await Ae(e)}catch(t){h.fail(s("contacts.toast.markFriendFailed"),{description:String(t)})}finally{x.value=!1}}}async function ct(){const e=w.value?.key;if(!(!e||x.value)){x.value=!0;try{await S.unmarkContactAsFriend(e,{timeRangePreset:P.value}),h.success(s("contacts.toast.unmarkFriendSucceeded")),await Ae(e)}catch(t){h.fail(s("contacts.toast.unmarkFriendFailed"),{description:String(t)})}finally{x.value=!1}}}async function Ae(e){const t=p.value,i=Y.value?.scrollTop??0,d=w.value?.pool??t;if(ne.value={},d==="non_friend"){dt(e),oe(),await Ne(t,i),await ut();return}await Promise.all([D("friend",{acceptStale:!0}),D("non_friend",{acceptStale:!0})]),v.value=e,await ze(e,{skipCache:!0}),await Ne(t,i)}function dt(e){const t=m.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 ut(){await Promise.all([W("friend",1,{acceptStale:!0,replace:!0,preserveExisting:je("friend"),silent:!0}),W("non_friend",1,{acceptStale:!0,replace:!0,preserveExisting:je("non_friend"),silent:!0})])}function oe(){v.value=null,w.value=null,R.value=!1}function ft(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 ye(e){return e==="friend"?"contact-table-grid--friends":"contact-table-grid--group-contacts"}function pt(e,t){return J(e==="friend"?t.scoreBreakdown.privateMessageCount:t.scoreBreakdown.commonGroupCount)}function gt(e,t){return J(e==="friend"?t.scoreBreakdown.activePrivateMonths:t.scoreBreakdown.coOccurrenceCount)}function vt(e,t){return J(e==="friend"?t.scoreBreakdown.commonGroupCount:t.scoreBreakdown.replyInteractionCount)}function xt(e){return(e.displayName||e.platformId||"?").slice(0,1)}function yt(e){return Math.round(e*100).toString()}function ht(e){return e.friendSource==="manual"?"-":yt(e.score)}function J(e){return String(e??0)}function kt(e){return e?new Date(e*1e3).toLocaleDateString():s("contacts.emptyValue")}function bt(e){A.push({name:e.type==="private"?"private-chat":"group-chat",params:{id:e.id}})}function _t(e){C.openChatRecordDrawer({sessionId:e.id})}function St(e){const t=e.target;if(ie.value.scrollOffset=t.scrollTop,we.value=t.scrollLeft,K.value)return;const i=wt(t);p.value!==i&&(p.value=i)}function wt(e){return pe.value&&e.scrollTop>=Ee()?"non_friend":"friend"}function Ee(){return 1+k.value.items.length*Ve+(k.value.isLoadingMore?44:0)}async function Ne(e,t){p.value=e,await Be();const i=Y.value;i&&(K.value=!0,M.value&&clearTimeout(M.value),i.scrollTop=Ia({previousScrollTop:t,groupSectionScrollTop:Ct()}),M.value=setTimeout(()=>{K.value=!1,p.value=e},150))}function Ct(){return pe.value?Ee():null}return(e,t)=>{const i=Bt,d=_e,_=zt,L=Se,$=Et;return c(),f("div",Na,[y(r(Gt),{modelValue:p.value,"onUpdate:modelValue":t[3]||(t[3]=l=>p.value=l),items:He.value,"persist-key":"contactsTab",onChange:et},{right:T(()=>[a("div",Ba,[y(i,{modelValue:P.value,"onUpdate:modelValue":t[0]||(t[0]=l=>P.value=l),items:Ke.value,content:!1,size:"xs",class:"min-w-max gap-0 bg-transparent dark:bg-transparent shadow-none",disabled:Q.value},null,8,["modelValue","items","disabled"]),y(_,{modelValue:F.value,"onUpdate:modelValue":t[2]||(t[2]=l=>F.value=l),icon:"i-lucide-search",placeholder:r(s)("contacts.search"),size:"sm",class:"w-full sm:w-36"},At({_:2},[F.value?{name:"trailing",fn:T(()=>[y(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=>F.value="")},null,8,["aria-label"])]),key:"0"}:void 0]),1032,["modelValue","placeholder"])])]),_:1},8,["modelValue","items"]),a("div",ja,[a("main",Va,[a("div",Da,[y(La,{"show-disabled-notice":Re.value,"active-private-session-count":ve.value?.activePrivateSessionCount??0,"cache-status":le.value?.cache.status,"task-failed":Ue.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",Ga,[Le.value?(c(),re(r(Dt),{key:0,text:qe.value,height:"py-16"},null,8,["text"])):Te.value?(c(),f("div",Oa,o(Te.value),1)):(c(),f("div",Ua,[Oe.value?(c(),f("div",qa,[a("div",Ra,[y(L,{name:"i-lucide-users-2",class:"h-6 w-6"})]),a("p",Ha,o(r(s)("contacts.empty")),1)])):(c(),re(r(Vt),{key:1,shadow:!1,class:"flex h-full min-w-0 flex-col"},{default:T(()=>[a("div",Ka,[a("div",{class:U(["contact-table-grid min-w-[720px] px-4 py-3 text-[11px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500",ye(p.value)]),style:X({transform:`translateX(-${we.value}px)`})},[a("span",null,o(r(s)("contacts.table.contact")),1),a("span",null,o(r(s)("contacts.table.status")),1),p.value==="friend"?(c(),f(q,{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(q,{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",Ya,[a("span",Qa,o(r(s)("contacts.detail.score")),1),y($,{content:{side:"top"},ui:{content:"h-auto"}},{content:T(()=>[a("div",Wa,o(r(s)("contacts.detail.scoreHelp")),1)]),default:T(()=>[y(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:"scrollContainerRef",ref:Y,class:"min-h-0 flex-1 overflow-auto scrollbar-hide",onScroll:St},[a("div",{class:"relative min-w-[720px]",style:X({height:`${Ye.value}px`})},[(c(!0),f(q,null,he(xe.value,l=>(c(),f(q,{key:String(l.key)},[G(l.index).type==="section"&&G(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)):G(l.index).type==="section"?(c(),f("div",{key:1,class:U(["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-white/5 dark:bg-[#202024] dark:text-gray-500",ye(G(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",Ja,[a("span",Xa,o(r(s)("contacts.detail.score")),1),y($,{content:{side:"top"},ui:{content:"h-auto"}},{content:T(()=>[a("div",Za,o(r(s)("contacts.detail.scoreHelp")),1)]),default:T(()=>[y(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)):G(l.index).type==="contact"?(c(),f("button",{key:2,type:"button",class:U(["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",[ye(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:vn=>it(g(l.index).contact)},[a("div",{class:U(["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",tn,[a("div",an,[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,nn)):(c(),f("div",sn,o(xt(g(l.index).contact)),1))]),a("div",on,[a("div",rn,[a("span",{class:U(["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",ln,o(g(l.index).contact.platform),1)])]),a("span",{class:U(["inline-flex w-fit justify-self-start rounded-lg px-2.5 py-1 text-xs font-semibold",mt(g(l.index).contact)])},o(ft(g(l.index).contact)),3),a("span",cn,o(pt(g(l.index).pool,g(l.index).contact)),1),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(kt(g(l.index).contact.lastInteractionTs)),1),a("span",{class:U(["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(ht(g(l.index).contact)),3)],14,en)):(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)`})},[y(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)]),_:1}))]))])])]),y(ma,{"selected-key":v.value,contact:w.value,"is-loading":R.value,"is-friend-action-loading":x.value,onClear:oe,onOpenSource:bt,onViewSourceRecords:_t,onMarkFriend:lt,onUnmarkFriend:ct},null,8,["selected-key","contact","is-loading","is-friend-action-loading"])])])}}}),Tn=De(gn,[["__scopeId","data-v-30c675a1"]]);export{Tn as default};
1
+ import{d as ke,a6 as be,o as c,f as re,w as T,c as f,a,p as o,g as r,z as y,a8 as _e,a7 as Se,F as q,j as he,l as N,a9 as Z,aE as Tt,e as u,ah as De,L as Lt,J as $t,ay as It,bg as Ft,K as O,x as Pt,y as Mt,aq as zt,a1 as At,O as X,n as U,bh as Et,b,C as Be,bv as Nt}from"./index-B1oj9KDv.js";import{_ as Bt}from"./Tabs-BMq9wODW.js";import{u as jt}from"./useToast-B5LaA6c-.js";import{_ as Vt}from"./ThemeCard.vue_vue_type_script_setup_true_lang-D2outEOV.js";import{_ as Dt}from"./LoadingState.vue_vue_type_script_setup_true_lang-BBcCt_Qm.js";import{_ as Gt}from"./SectionTabs.vue_vue_type_script_setup_true_lang-qFhJO5B0.js";import{u as Ot}from"./people-page-header-BbYSSpsO.js";import"./vendor-snapdom--nZvo8Sg.js";import"./RovingFocusItem-BJMUQ5DJ.js";const Ut={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"}},qt={class:"flex items-center justify-between border-b border-gray-200 px-4 py-3 dark:border-gray-800"},Rt={class:"text-base font-semibold text-gray-900 dark:text-white"},Ht={key:0,class:"flex min-h-0 flex-1 items-center justify-center gap-2 text-sm text-gray-400 dark:text-gray-500"},Kt={key:1,class:"min-h-0 flex-1 overflow-y-auto"},Yt={class:"px-5 py-5"},Qt={class:"flex items-start gap-4"},Wt={class:"relative shrink-0"},Jt=["src","alt"],Xt={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"},Zt={class:"min-w-0 flex-1 pt-1"},ea={class:"truncate text-lg font-bold tracking-tight text-gray-900 dark:text-white"},ta={class:"mt-1 truncate font-mono text-xs text-gray-400 dark:text-gray-500"},aa={key:0,class:"mt-2 flex flex-wrap gap-1.5"},na={key:1,class:"mt-3 flex flex-wrap items-center gap-2"},sa={class:"border-t border-gray-100 px-5 py-4 dark:border-white/5"},oa={class:"mb-3 text-[10px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500"},ra={class:"space-y-2.5"},ia={class:"flex items-center justify-between gap-2"},la={class:"truncate text-xs font-semibold text-gray-700 dark:text-gray-300"},ca={class:"flex items-center gap-1 text-[10px] font-bold text-gray-400 transition group-hover/item:text-pink-500 dark:text-gray-500"},da={class:"mt-1.5 truncate text-[11px] font-medium text-gray-400 dark:text-gray-500"},ua={class:"mt-2 flex flex-wrap gap-1.5"},fa=ke({__name:"ContactDetailPanel",props:{selectedKey:{},contact:{},isLoading:{type:Boolean},isFriendActionLoading:{type:Boolean}},emits:["clear","openSource","viewSourceRecords","markFriend","unmarkFriend"],setup(n,{emit:s}){const h=n,S=s,{t:C}=be(),A=u(()=>{const p=h.contact;if(!p)return[];const v=new Set([p.displayName.trim().toLowerCase(),p.platformId.trim().toLowerCase()]);return p.aliases.filter(w=>!v.has(w.trim().toLowerCase()))}),I=u(()=>h.contact?.pool==="non_friend"),F=u(()=>h.contact?.friendSource==="manual"),B=u(()=>I.value||F.value);function P(p){return p.displayName.trim().slice(0,1).toUpperCase()||"?"}return(p,v)=>{const w=_e,R=Se;return c(),re(Tt,{name:"contact-detail-panel"},{default:T(()=>[n.selectedKey?(c(),f("aside",Ut,[a("div",qt,[a("h3",Rt,o(r(C)("contacts.detail.title")),1),y(w,{"aria-label":r(C)("contacts.actions.clearSelection"),icon:"i-heroicons-x-mark",color:"neutral",variant:"ghost",size:"sm",onClick:v[0]||(v[0]=x=>S("clear"))},null,8,["aria-label"])]),n.isLoading?(c(),f("div",Ht,[y(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",Kt,[a("section",Yt,[a("div",Qt,[a("div",Wt,[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,Jt)):(c(),f("div",Xt,o(P(n.contact)),1))]),a("div",Zt,[a("h2",ea,o(n.contact.displayName),1),a("p",ta,o(n.contact.platform)+" · "+o(n.contact.platformId),1),A.value.length>0?(c(),f("div",aa,[(c(!0),f(q,null,he(A.value.slice(0,4),x=>(c(),f("span",{key:x,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(x),1))),128))])):N("",!0),B.value?(c(),f("div",na,[I.value?(c(),re(w,{key:0,icon:"i-lucide-user-plus",color:"primary",variant:"soft",size:"xs",loading:n.isFriendActionLoading,onClick:v[1]||(v[1]=x=>S("markFriend"))},{default:T(()=>[Z(o(r(C)("contacts.actions.markFriend")),1)]),_:1},8,["loading"])):F.value?(c(),re(w,{key:1,icon:"i-lucide-user-minus",color:"neutral",variant:"soft",size:"xs",loading:n.isFriendActionLoading,onClick:v[2]||(v[2]=x=>S("unmarkFriend"))},{default:T(()=>[Z(o(r(C)("contacts.actions.unmarkFriend")),1)]),_:1},8,["loading"])):N("",!0)])):N("",!0)])])]),a("section",sa,[a("h3",oa,o(r(C)("contacts.detail.sources")),1),a("div",ra,[(c(!0),f(q,null,he(n.contact.sourceSessions,x=>(c(),f("div",{key:x.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 dark:border-white/5 dark:bg-page-dark/10 dark:hover:border-white/10"},[a("div",ia,[a("span",la,o(x.name),1),a("span",ca,o(x.type==="private"?r(C)("contacts.detail.sourceType.private"):r(C)("contacts.detail.sourceType.group")),1)]),a("div",da,o(x.privateMessageCount!=null?r(C)("contacts.metrics.privateMessages",{count:x.privateMessageCount}):r(C)("contacts.metrics.groupSignals",{count:x.coOccurrenceCount??0})),1),a("div",ua,[y(w,{icon:"i-lucide-arrow-up-right",color:"primary",variant:"soft",size:"xs",onClick:j=>S("openSource",x)},{default:T(()=>[Z(o(r(C)("contacts.actions.openSourceSession")),1)]),_:1},8,["onClick"]),y(w,{icon:"i-lucide-messages-square",color:"primary",variant:"soft",size:"xs",onClick:j=>S("viewSourceRecords",x)},{default:T(()=>[Z(o(r(C)("contacts.actions.viewSourceRecords")),1)]),_:1},8,["onClick"])])]))),128))])])])):N("",!0)])):N("",!0)]),_:1})}}}),ma=De(fa,[["__scopeId","data-v-4df1b50a"]]),pa={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 backdrop-blur-sm dark:border-amber-900/40 dark:bg-amber-950/10 dark:text-amber-200"},ga={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-amber-100/80 dark:bg-amber-950/50"},va={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 backdrop-blur-sm dark:border-zinc-800/80 dark:bg-page-dark/40 dark:text-zinc-300 sm:flex-row sm:items-center sm:justify-between"},ya={class:"flex items-center gap-3.5"},ha={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-zinc-100 dark:bg-zinc-800/80"},ka={class:"font-medium"},ba={class:"flex items-center shrink-0 self-end sm:self-center"},_a={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 backdrop-blur-sm dark:border-red-900/40 dark:bg-red-950/10 dark:text-red-300 sm:flex-row sm:items-center sm:justify-between"},Sa={class:"flex min-w-0 items-center gap-3.5"},wa={class:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-red-100/80 dark:bg-red-950/50"},Ca={class:"truncate font-medium"},Ta={class:"flex items-center shrink-0 self-end sm:self-center"},La=ke({__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 h=s,{t:S}=be();return(C,A)=>{const I=Se,F=_e;return c(),f(q,null,[n.showDisabledNotice?(c(),f("div",pa,[a("div",ga,[y(I,{name:"i-lucide-alert-triangle",class:"h-5 w-5 text-amber-500"})]),a("span",va,o(r(S)("contacts.disabled",{count:n.activePrivateSessionCount})),1)])):N("",!0),n.cacheStatus==="stale"&&!n.isTaskRunning?(c(),f("div",xa,[a("div",ya,[a("div",ha,[y(I,{name:"i-lucide-history",class:"h-5 w-5 text-zinc-500 dark:text-zinc-400"})]),a("span",ka,o(r(S)("contacts.stale.inline")),1)]),a("div",ba,[y(F,{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=>h("recompute"))},{default:T(()=>[Z(o(r(S)("contacts.actions.recompute")),1)]),_:1},8,["loading","disabled"])])])):N("",!0),n.taskFailed?(c(),f("div",_a,[a("div",Sa,[a("div",wa,[y(I,{name:"i-lucide-alert-circle",class:"h-5 w-5 text-red-500"})]),a("span",Ca,o(n.taskLastError||r(S)("contacts.task.failed")),1)]),a("div",Ta,[y(F,{size:"sm",color:"error",variant:"soft",class:"rounded-xl px-4 font-medium",onClick:A[1]||(A[1]=B=>h("recompute"))},{default:T(()=>[Z(o(r(S)("contacts.task.retry")),1)]),_:1})])])):N("",!0)],64)}}});function $a(n){return!!n.diagnostics&&!n.showLoadingState&&!n.diagnostics.contactsEnabled}function Ia(n){return n.previousScrollTop}function je(n){return n!=="friend"}function Fa(n){return n.friendInitialLoading||n.groupmateInitialLoading}function Pa(n){return n.activeSection==="non_friend"||n.friendSectionReady}function Ma(n){return n.friendInitialLoading||n.groupmateInitialLoading||n.completionProgressVisible===!0||n.activeTaskStatus==="running"||n.friendTaskStatus==="running"||n.groupmateTaskStatus==="running"}function za(n){return n.previousStatus==="running"&&n.nextStatus==="succeeded"&&n.nextTotalSessions>0&&n.nextProcessedSessions>=n.nextTotalSessions&&n.previousProcessedSessions<n.nextTotalSessions}function Aa(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(h=>({type:"contact",key:h.key,pool:"friend",contact:h}))),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(h=>({type:"contact",key:h.key,pool:"non_friend",contact:h}))),n.groupmateLoadingMore&&s.push({type:"loading",key:"loading:non_friend",pool:"non_friend"})),s}const Na={class:"flex min-h-0 flex-1 flex-col text-gray-900 dark:bg-page-dark dark:text-gray-100"},Ba={class:"flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2 py-1.5 xl:py-0"},ja={class:"flex min-h-0 flex-1 overflow-hidden"},Va={class:"min-h-0 min-w-0 flex-1 overflow-hidden"},Da={class:"flex h-full min-h-0 w-full flex-col gap-6 px-6 pb-3 pt-4"},Ga={class:"flex min-h-0 flex-1 flex-col gap-4"},Oa={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"},Ua={key:2,class:"min-h-0 flex-1"},qa={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"},Ha={class:"mt-4 text-sm font-medium text-gray-400 dark:text-gray-500"},Ka={class:"shrink-0 overflow-hidden border-b border-gray-100 bg-white dark:border-white/5 dark:bg-[#202024]"},Ya={class:"flex min-w-0 items-center justify-end gap-1 text-right"},Qa={class:"truncate"},Wa={class:"max-w-[280px] whitespace-normal break-words text-left text-xs leading-5"},Ja={class:"flex min-w-0 items-center justify-end gap-1 text-right"},Xa={class:"truncate"},Za={class:"max-w-[280px] whitespace-normal break-words text-left text-xs leading-5"},en=["aria-label","onClick"],tn={class:"group flex min-w-0 w-full items-center gap-3"},an={class:"relative shrink-0 overflow-hidden rounded-lg"},nn=["src","alt"],sn={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"},on={class:"min-w-0 flex-1"},rn={class:"flex min-w-0 items-center gap-1"},ln={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"},cn={class:"contact-table-value"},dn={class:"contact-table-value"},un={class:"contact-table-value"},fn={class:"contact-table-value"},mn=100,Ve=69,pn=20,gn=ke({__name:"index",setup(n){const{t:s}=be(),h=jt(),S=Lt(),C=$t(),A=It(),I=b(!1),F=b(""),B=b(""),P=b("1y"),p=b("friend"),v=b(null),w=b(null),R=b(!1),x=b(!1),j=b(null),fe=b(!1),H=b(null),ee=b(null),te=b(null),M=b(null),ae={friend:null,non_friend:null},K=b(!1),Y=b(null),we=b(0),ne=b({});function me(){return{items:[],response:null,page:0,total:0,hasMore:!1,isLoadingInitial:!1,isLoadingMore:!1,error:"",requestId:0,scrollOffset:0}}const V=b({friend:me(),non_friend:me()}),ie=u(()=>V.value[p.value]),k=u(()=>V.value.friend),m=u(()=>V.value.non_friend),Ce=u(()=>!!k.value.response&&!k.value.hasMore&&!k.value.isLoadingInitial),pe=u(()=>Pa({activeSection:p.value,friendSectionReady:Ce.value,groupmateHasItems:m.value.items.length>0,groupmateLoading:m.value.isLoadingInitial||m.value.isLoadingMore})),E=u(()=>Ea({friends:k.value.items,groupmates:m.value.items,showGroupSection:pe.value,friendLoadingMore:k.value.isLoadingMore,groupmateLoadingMore:m.value.isLoadingInitial||m.value.isLoadingMore})),le=u(()=>ie.value.response??k.value.response??m.value.response),ge=u(()=>[ie.value.response,k.value.response,m.value.response].find(e=>e?.task?.status==="running")??le.value),Ge=u(()=>k.value.items.length+m.value.items.length>0),Oe=u(()=>!Ge.value&&!!k.value.response&&!!m.value.response&&!k.value.hasMore&&!m.value.hasMore&&!k.value.isLoadingInitial&&!m.value.isLoadingInitial),Te=u(()=>k.value.error||m.value.error),ve=u(()=>le.value?.diagnostics),z=u(()=>ge.value?.task),ce=u(()=>H.value??z.value),Q=u(()=>z.value?.status==="running"),Ue=u(()=>z.value?.status==="failed"),Le=u(()=>Ma({activeTaskStatus:ie.value.response?.task?.status,friendTaskStatus:k.value.response?.task?.status,groupmateTaskStatus:m.value.response?.task?.status,friendInitialLoading:k.value.isLoadingInitial,groupmateInitialLoading:m.value.isLoadingInitial,completionProgressVisible:H.value!==null})),qe=u(()=>H.value?s("contacts.task.running",{current:ce.value?.processedSessions??0,total:ce.value?.totalSessions??0}):ge.value?.cache.status==="stale"&&Q.value?s("contacts.task.updating"):ge.value?.cache.status==="missing"&&Q.value?s("contacts.task.running",{current:ce.value?.processedSessions??0,total:ce.value?.totalSessions??0}):s("common.loading")),Re=u(()=>$a({diagnostics:ve.value,showLoadingState:Le.value})),se=u(()=>{const e=le.value?.stats,t=e?.friendsTotal??0,i=e?.nonFriendsTotal??0;return{total:t+i,friends:t,nonFriends:i}}),He=u(()=>[{id:"friend",label:`${s("contacts.tabs.friends")} ${se.value.friends.toLocaleString()}`,icon:"i-heroicons-user"},{id:"non_friend",label:`${s("contacts.tabs.groupContacts")} ${se.value.nonFriends.toLocaleString()}`,icon:"i-heroicons-user-group"}]),Ke=u(()=>Nt.map(e=>({label:s(`contacts.timeRange.${e}`),value:e}))),de=Ft(u(()=>({count:E.value.length,getScrollElement:()=>Y.value,estimateSize:e=>Ze(E.value[e]),overscan:10,getItemKey:e=>E.value[e]?.key??e}))),xe=u(()=>de.value.getVirtualItems()),Ye=u(()=>de.value.getTotalSize());O(F,e=>{te.value&&clearTimeout(te.value),te.value=setTimeout(()=>{B.value=e.trim()},300)}),O(()=>z.value?.status,()=>Pe()),O(()=>({status:z.value?.status,processedSessions:z.value?.processedSessions??0,totalSessions:z.value?.totalSessions??0}),(e,t)=>{e.status==="running"&&ue(),z.value&&za({previousStatus:t?.status,nextStatus:e.status,previousProcessedSessions:t?.processedSessions??0,nextProcessedSessions:e.processedSessions,nextTotalSessions:e.totalSessions})&&rt(z.value)}),O([B,P],()=>{nt(),$e()}),O(()=>E.value.length,()=>{de.value.measure()}),O(xe,()=>{Xe()},{flush:"post"}),O(E,()=>{v.value&&(k.value.items.some(e=>e.key===v.value)||m.value.items.some(e=>e.key===v.value)||oe())}),Pt(()=>{$e()}),Mt(()=>{Me(),ue(),te.value&&clearTimeout(te.value),M.value&&clearTimeout(M.value)});async function D(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 $e(){await Promise.all([D("friend"),D("non_friend")])}async function Ie(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:P.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;We(d,l,_,{preserveExisting:i?.preserveExisting}),Pe()}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(p.value,1,{acceptStale:!0,force:!0,replace:!0,throwOnError:!0}),h.success(s("contacts.toast.recomputeStarted"))}catch(e){h.fail(s("contacts.toast.recomputeFailed"),{description:String(e)})}finally{I.value=!1}}const Qe=u(()=>({title:s("layout.relationships"),description:s("contacts.subtitle",{count:ve.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:se.value.total.toLocaleString()},{id:"friends",label:s("contacts.stats.friends"),value:se.value.friends.toLocaleString()},{id:"nonFriends",label:s("contacts.stats.nonFriends"),value:se.value.nonFriends.toLocaleString(),dividerBefore:!0}]}));Ot(Qe);function We(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:Je(e.items,t.contacts),$&&oe()}function Je(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 Xe(){const t=xe.value.at(-1);if(!t||t.index<E.value.length-pn)return;if(G(t.index).pool==="friend"){if(k.value.hasMore){Ie("friend");return}Ce.value&&!m.value.response&&!m.value.isLoadingInitial&&D("non_friend");return}if(!m.value.response&&!m.value.isLoadingInitial){D("non_friend");return}m.value.hasMore&&Ie("non_friend")}function G(e){return E.value[e]}function g(e){return G(e)}function Ze(e){return e?.type==="section"?e.pool==="non_friend"?42:1:e?.type==="loading"?44:Ve}async function et(e){const t=e==="non_friend"?"non_friend":"friend";p.value=t,K.value=!0,M.value&&clearTimeout(M.value),t==="non_friend"&&await tt(),await Be();const i=E.value.findIndex(d=>d.type==="section"&&d.pool===t);if(i>=0){const d=t==="non_friend"?Math.min(i+1,E.value.length-1):i;de.value.scrollToIndex(d,{align:"start"})}M.value=setTimeout(()=>{K.value=!1,p.value=t},350)}async function tt(){!m.value.response&&!m.value.isLoadingInitial&&await D("non_friend",{acceptStale:!0}),await at()}async function at(e){if(!Fa({friendInitialLoading:k.value.isLoadingInitial,groupmateInitialLoading:m.value.isLoadingInitial}))return;const t=[ae.friend,ae.non_friend].filter(i=>!!i);t.length!==0&&await Promise.allSettled(t)}function nt(){K.value=!1,M.value&&clearTimeout(M.value),ue();for(const e of["friend","non_friend"])V.value[e].requestId++,V.value[e]=me();oe(),ne.value={},Y.value&&(Y.value.scrollTop=0)}function Pe(){Q.value?st():Me()}function st(){j.value||(j.value=setInterval(()=>{ot()},1500))}async function ot(){if(!fe.value){fe.value=!0;try{const e=Aa({activePool:p.value,friendTaskStatus:k.value.response?.task?.status,groupmateTaskStatus:m.value.response?.task?.status});await Promise.all(e.map(t=>W(t,1,{acceptStale:!0,replace:!0,preserveExisting:!0,silent:!0})))}finally{fe.value=!1}}}function Me(){j.value&&(clearInterval(j.value),j.value=null)}function rt(e){ue(),H.value={...e,processedSessions:e.totalSessions},ee.value=setTimeout(()=>{H.value=null,ee.value=null},450)}function ue(){ee.value&&(clearTimeout(ee.value),ee.value=null),H.value=null}async function it(e){v.value=e.key,await ze(e.key)}async function ze(e,t){const i=`${P.value}:${e}`,d=ne.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:P.value});if(v.value!==e)return;w.value=_.contact,_.contact&&(ne.value={...ne.value,[i]:_.contact})}catch(_){h.fail(s("contacts.toast.recomputeFailed"),{description:String(_)})}finally{v.value===e&&(R.value=!1)}}async function lt(){const e=w.value?.key;if(!(!e||x.value)){x.value=!0;try{await S.markContactAsFriend(e,{timeRangePreset:P.value}),h.success(s("contacts.toast.markFriendSucceeded")),await Ae(e)}catch(t){h.fail(s("contacts.toast.markFriendFailed"),{description:String(t)})}finally{x.value=!1}}}async function ct(){const e=w.value?.key;if(!(!e||x.value)){x.value=!0;try{await S.unmarkContactAsFriend(e,{timeRangePreset:P.value}),h.success(s("contacts.toast.unmarkFriendSucceeded")),await Ae(e)}catch(t){h.fail(s("contacts.toast.unmarkFriendFailed"),{description:String(t)})}finally{x.value=!1}}}async function Ae(e){const t=p.value,i=Y.value?.scrollTop??0,d=w.value?.pool??t;if(ne.value={},d==="non_friend"){dt(e),oe(),await Ne(t,i),await ut();return}await Promise.all([D("friend",{acceptStale:!0}),D("non_friend",{acceptStale:!0})]),v.value=e,await ze(e,{skipCache:!0}),await Ne(t,i)}function dt(e){const t=m.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 ut(){await Promise.all([W("friend",1,{acceptStale:!0,replace:!0,preserveExisting:je("friend"),silent:!0}),W("non_friend",1,{acceptStale:!0,replace:!0,preserveExisting:je("non_friend"),silent:!0})])}function oe(){v.value=null,w.value=null,R.value=!1}function ft(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 ye(e){return e==="friend"?"contact-table-grid--friends":"contact-table-grid--group-contacts"}function pt(e,t){return J(e==="friend"?t.scoreBreakdown.privateMessageCount:t.scoreBreakdown.commonGroupCount)}function gt(e,t){return J(e==="friend"?t.scoreBreakdown.activePrivateMonths:t.scoreBreakdown.coOccurrenceCount)}function vt(e,t){return J(e==="friend"?t.scoreBreakdown.commonGroupCount:t.scoreBreakdown.replyInteractionCount)}function xt(e){return(e.displayName||e.platformId||"?").slice(0,1)}function yt(e){return Math.round(e*100).toString()}function ht(e){return e.friendSource==="manual"?"-":yt(e.score)}function J(e){return String(e??0)}function kt(e){return e?new Date(e*1e3).toLocaleDateString():s("contacts.emptyValue")}function bt(e){A.push({name:e.type==="private"?"private-chat":"group-chat",params:{id:e.id}})}function _t(e){C.openChatRecordDrawer({sessionId:e.id})}function St(e){const t=e.target;if(ie.value.scrollOffset=t.scrollTop,we.value=t.scrollLeft,K.value)return;const i=wt(t);p.value!==i&&(p.value=i)}function wt(e){return pe.value&&e.scrollTop>=Ee()?"non_friend":"friend"}function Ee(){return 1+k.value.items.length*Ve+(k.value.isLoadingMore?44:0)}async function Ne(e,t){p.value=e,await Be();const i=Y.value;i&&(K.value=!0,M.value&&clearTimeout(M.value),i.scrollTop=Ia({previousScrollTop:t,groupSectionScrollTop:Ct()}),M.value=setTimeout(()=>{K.value=!1,p.value=e},150))}function Ct(){return pe.value?Ee():null}return(e,t)=>{const i=Bt,d=_e,_=zt,L=Se,$=Et;return c(),f("div",Na,[y(r(Gt),{modelValue:p.value,"onUpdate:modelValue":t[3]||(t[3]=l=>p.value=l),items:He.value,"persist-key":"contactsTab",onChange:et},{right:T(()=>[a("div",Ba,[y(i,{modelValue:P.value,"onUpdate:modelValue":t[0]||(t[0]=l=>P.value=l),items:Ke.value,content:!1,size:"xs",class:"min-w-max gap-0 bg-transparent dark:bg-transparent shadow-none",disabled:Q.value},null,8,["modelValue","items","disabled"]),y(_,{modelValue:F.value,"onUpdate:modelValue":t[2]||(t[2]=l=>F.value=l),icon:"i-lucide-search",placeholder:r(s)("contacts.search"),size:"sm",class:"w-full sm:w-36"},At({_:2},[F.value?{name:"trailing",fn:T(()=>[y(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=>F.value="")},null,8,["aria-label"])]),key:"0"}:void 0]),1032,["modelValue","placeholder"])])]),_:1},8,["modelValue","items"]),a("div",ja,[a("main",Va,[a("div",Da,[y(La,{"show-disabled-notice":Re.value,"active-private-session-count":ve.value?.activePrivateSessionCount??0,"cache-status":le.value?.cache.status,"task-failed":Ue.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",Ga,[Le.value?(c(),re(r(Dt),{key:0,text:qe.value,height:"py-16"},null,8,["text"])):Te.value?(c(),f("div",Oa,o(Te.value),1)):(c(),f("div",Ua,[Oe.value?(c(),f("div",qa,[a("div",Ra,[y(L,{name:"i-lucide-users-2",class:"h-6 w-6"})]),a("p",Ha,o(r(s)("contacts.empty")),1)])):(c(),re(r(Vt),{key:1,shadow:!1,class:"flex h-full min-w-0 flex-col"},{default:T(()=>[a("div",Ka,[a("div",{class:U(["contact-table-grid min-w-[720px] px-4 py-3 text-[11px] font-bold uppercase tracking-wider text-gray-400 dark:text-gray-500",ye(p.value)]),style:X({transform:`translateX(-${we.value}px)`})},[a("span",null,o(r(s)("contacts.table.contact")),1),a("span",null,o(r(s)("contacts.table.status")),1),p.value==="friend"?(c(),f(q,{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(q,{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",Ya,[a("span",Qa,o(r(s)("contacts.detail.score")),1),y($,{content:{side:"top"},ui:{content:"h-auto"}},{content:T(()=>[a("div",Wa,o(r(s)("contacts.detail.scoreHelp")),1)]),default:T(()=>[y(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:"scrollContainerRef",ref:Y,class:"min-h-0 flex-1 overflow-auto scrollbar-hide",onScroll:St},[a("div",{class:"relative min-w-[720px]",style:X({height:`${Ye.value}px`})},[(c(!0),f(q,null,he(xe.value,l=>(c(),f(q,{key:String(l.key)},[G(l.index).type==="section"&&G(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)):G(l.index).type==="section"?(c(),f("div",{key:1,class:U(["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-white/5 dark:bg-[#202024] dark:text-gray-500",ye(G(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",Ja,[a("span",Xa,o(r(s)("contacts.detail.score")),1),y($,{content:{side:"top"},ui:{content:"h-auto"}},{content:T(()=>[a("div",Za,o(r(s)("contacts.detail.scoreHelp")),1)]),default:T(()=>[y(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)):G(l.index).type==="contact"?(c(),f("button",{key:2,type:"button",class:U(["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",[ye(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:vn=>it(g(l.index).contact)},[a("div",{class:U(["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",tn,[a("div",an,[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,nn)):(c(),f("div",sn,o(xt(g(l.index).contact)),1))]),a("div",on,[a("div",rn,[a("span",{class:U(["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",ln,o(g(l.index).contact.platform),1)])]),a("span",{class:U(["inline-flex w-fit justify-self-start rounded-lg px-2.5 py-1 text-xs font-semibold",mt(g(l.index).contact)])},o(ft(g(l.index).contact)),3),a("span",cn,o(pt(g(l.index).pool,g(l.index).contact)),1),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(kt(g(l.index).contact.lastInteractionTs)),1),a("span",{class:U(["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(ht(g(l.index).contact)),3)],14,en)):(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)`})},[y(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)]),_:1}))]))])])]),y(ma,{"selected-key":v.value,contact:w.value,"is-loading":R.value,"is-friend-action-loading":x.value,onClear:oe,onOpenSource:bt,onViewSourceRecords:_t,onMarkFriend:lt,onUnmarkFriend:ct},null,8,["selected-key","contact","is-loading","is-friend-action-loading"])])])}}}),Tn=De(gn,[["__scopeId","data-v-30c675a1"]]);export{Tn as default};
@@ -1 +1 @@
1
- import{d as _e,a6 as ke,aF as we,L as ze,ap as Pe,K,al as Ee,o as c,f as ee,w as E,a as i,p as d,g as n,z as u,a8 as Ue,a9 as B,c as m,aq as je,a7 as Ce,F as te,j as be,n as qe,l as U,b as g,e as H,aa as Re,aD as Fe,ay as Be,J as Le,x as Ne,aG as De,C as ge,y as Oe,aE as Ge,aH as ye}from"./index-DnpnIyle.js";import{_ as He,u as Ke,a as Je,b as Qe,c as We,d as he,e as Xe,f as Ye,g as Ze,h as et}from"./chatMessages-Zywjea1n.js";import{_ as tt}from"./Tabs-RWKHwtfM.js";import{u as Se}from"./useToast-CCPBE-Sy.js";import{P as at}from"./PageHeader-D4up77TB.js";import{u as st}from"./aiChat-BY4C3UQe.js";import"./vendor-snapdom--nZvo8Sg.js";import"./index-Cw0IhKZ6.js";import"./service-Bvq1fRkC.js";import"./EChartBar.vue_vue_type_script_setup_true_lang-DuA5xbcC.js";import"./EChart.vue_vue_type_script_setup_true_lang-BuLujQCF.js";import"./vendor-echarts-C9ugTmum.js";import"./vendor-zrender-D8psf1AA.js";import"./EChartLine.vue_vue_type_script_setup_true_lang-CvmMEfYq.js";import"./prompt-BggEDxxi.js";import"./RovingFocusItem-DHaiTb4j.js";import"./chatlabSiteLocale-CrCNb8QP.js";const lt={class:"flex max-h-[78vh] min-h-[520px] flex-col overflow-hidden"},ot={class:"flex items-start justify-between border-b border-gray-200 px-5 py-4 dark:border-gray-800"},nt={class:"text-base font-semibold text-gray-900 dark:text-white"},it={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},rt={class:"flex min-h-0 flex-1 flex-col px-5 py-4"},ct={class:"mb-3 flex items-center justify-between gap-3"},ut={class:"flex items-center gap-2"},dt={class:"text-xs text-gray-400"},mt={key:0,class:"mb-3 rounded-xl border border-primary-200 bg-primary-50/40 p-3 dark:border-primary-900/70 dark:bg-primary-950/20"},ft={class:"mb-2 flex items-center justify-between gap-3"},pt={class:"text-xs font-medium text-gray-700 dark:text-gray-200"},vt={class:"truncate text-[11px] text-gray-400"},gt={key:0,class:"mb-3 space-y-2"},yt={class:"max-h-36 space-y-1 overflow-y-auto rounded-lg border border-gray-200 p-1 dark:border-gray-800"},ht={key:0,class:"flex h-20 items-center justify-center"},bt=["onClick"],xt={class:"truncate"},_t={class:"shrink-0 text-[10px] text-gray-400"},kt={key:2,class:"flex h-20 items-center justify-center text-xs text-gray-400"},wt={class:"mt-2 flex items-center justify-between gap-3"},Ct={class:"text-[11px] text-gray-400"},St={class:"flex items-center gap-2"},It={class:"min-h-0 flex-1 overflow-y-auto pr-1"},Tt={key:0,class:"flex h-full min-h-56 items-center justify-center"},At={key:1,class:"flex min-h-56 flex-col items-center justify-center text-center"},$t={class:"text-sm text-gray-500 dark:text-gray-400"},Mt={key:2,class:"space-y-2"},Vt={key:0,class:"mb-2 flex items-center gap-1.5 text-xs text-gray-500"},zt={class:"truncate"},Pt={key:1},Et={class:"mt-2 flex justify-end gap-2"},Ut={class:"whitespace-pre-wrap break-words text-sm leading-6 text-gray-800 dark:text-gray-200"},jt={class:"mt-2 flex items-center justify-between gap-3"},qt={class:"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 text-[11px] text-gray-400"},Rt={class:"flex shrink-0 items-center gap-0.5"},Ft={key:0,class:"mt-2 flex flex-wrap items-center justify-between gap-2 border-t border-gray-100 pt-2 text-[11px] dark:border-gray-800"},Bt={key:0,class:"text-amber-600 dark:text-amber-400"},Lt={key:1,class:"ml-auto text-gray-400 dark:text-gray-500"},Nt={class:"flex items-center justify-between border-t border-gray-200 px-5 py-3 dark:border-gray-800"},Dt={class:"flex items-center gap-2"},Ot=1500,Gt=_e({__name:"AIMemoryManagerModal",props:{open:{type:Boolean}},emits:["update:open","view-source"],setup(ue,{emit:_}){const ae=ue,z=_,{t:s,locale:D}=ke(),S=Se(),h=we(),O=ze(),A=Pe(),f=g("preferences"),k=g([]),j=g(new Map),v=g(!1),w=g(null),G=g(null),I=g(""),L=g(!1),q=g(""),C=g("contact"),b=g(null),$=g(""),M=g([]),R=g(!1);let T=null,P=null,F=0;const se=H(()=>[{label:s("ai.global.memory.preferences"),value:"preferences"},{label:s("ai.global.memory.self"),value:"self"},{label:s("ai.global.memory.entities"),value:"entities"}]),J=H(()=>k.value.filter(e=>f.value==="preferences"?e.scopeType==="global":f.value==="self"?e.scopeType==="self":e.scopeType==="contact"||e.scopeType==="group")),re=H(()=>[{label:s("ai.global.entityPicker.contacts"),value:"contact"},{label:s("ai.global.entityPicker.groups"),value:"group"}]),le=H(()=>{const e=$.value.trim().toLocaleLowerCase();return A.sessions.filter(a=>a.type==="group").filter(a=>!e||`${a.name} ${a.platform}`.toLocaleLowerCase().includes(e)).map(a=>({scopeType:"group",scopeId:a.id,label:a.name,detail:a.platform}))}),oe=H(()=>C.value==="contact"?M.value:le.value),ce=H(()=>f.value==="preferences"?s("ai.global.memory.preferences"):f.value==="self"?s("ai.global.memory.self"):b.value?.label??s("ai.global.memory.selectEntity")),Y=H(()=>q.value.trim().length>0&&q.value.trim().length<=2e3&&(f.value!=="entities"||b.value!==null));function Q(){z("update:open",!1)}function ne(e){G.value=e.id,I.value=e.content}function N(){G.value=null,I.value=""}function de(){N(),L.value=!0,q.value="",b.value=null,$.value="",f.value==="entities"&&C.value==="contact"&&t("")}function W(){L.value=!1,q.value="",b.value=null,$.value="",F++,R.value=!1,T&&(clearTimeout(T),T=null),o()}function ie(e){return new Intl.DateTimeFormat(D.value,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(e)}function me(e){!e.sourceAIChatId||e.sourceStatus!=="conversation"&&e.sourceStatus!=="message"||(z("update:open",!1),z("view-source",{aiChatId:e.sourceAIChatId,messageId:e.sourceStatus==="message"?e.sourceMessageId:null}))}function fe(e){return e.scopeId?e.scopeType==="contact"?j.value.get(e.scopeId)??e.scopeId:A.sessions.find(a=>a.id===e.scopeId)?.name??e.scopeId:""}async function pe(e){const a=[...new Set(e.filter(x=>x.scopeType==="contact").map(x=>x.scopeId))].filter(x=>!!x),p=new Map,X=await Promise.allSettled(a.map(async x=>({key:x,detail:await O.getContactDetail(x,{acceptStale:!0})})));for(const x of X)x.status==="fulfilled"&&x.value.detail.contact&&p.set(x.value.key,x.value.detail.contact.displayName);j.value=p}async function t(e){const a=++F;R.value=!0;try{const p={acceptStale:!0,timeRangePreset:"all",page:1,pageSize:100,query:e.trim()||void 0},X=await Promise.all([O.getContacts({...p,pool:"friend"}),O.getContacts({...p,pool:"non_friend"})]);if(a!==F)return;const x=new Map;X.flatMap(V=>V.contacts).forEach(V=>x.set(V.key,V)),M.value=[...x.values()].map(V=>({scopeType:"contact",scopeId:V.key,label:V.displayName,detail:V.platformId})),y(X,e)}catch(p){if(a!==F)return;o(),M.value=[],S.fail(s("ai.global.entityPicker.loadFailed"),{description:String(p)})}finally{a===F&&(R.value=!1)}}function o(){P&&(clearTimeout(P),P=null)}function y(e,a){o(),!(!L.value||f.value!=="entities"||C.value!=="contact")&&e.some(p=>p.task?.status==="running")&&(P=setTimeout(()=>{P=null,t(a)},Ot))}function l(e){T&&clearTimeout(T),o(),F++,T=setTimeout(()=>{T=null,t(e)},200)}async function ve(){v.value=!0;try{const e=await h.getAIMemories();k.value=e,await Promise.all([A.loadSessions(),pe(e)])}catch(e){S.fail(s("ai.global.memory.toast.loadFailed"),{description:String(e)})}finally{v.value=!1}}async function Ie(e){if(I.value.trim()){w.value=e.id;try{const a=await h.updateAIMemory(e.id,I.value);k.value=k.value.map(p=>p.id===a.id?a:p),N(),S.success(s("ai.global.memory.toast.saved"))}catch(a){S.fail(s("ai.global.memory.toast.saveFailed"),{description:String(a)})}finally{w.value=null}}}async function Te(){if(Y.value){w.value="new";try{const e=f.value==="preferences"?{scopeType:"global",scopeId:null}:f.value==="self"?{scopeType:"self",scopeId:null}:{scopeType:b.value.scopeType,scopeId:b.value.scopeId},a=await h.createAIMemory({...e,content:q.value});k.value=[a,...k.value],a.scopeType==="contact"&&a.scopeId&&b.value&&(j.value=new Map(j.value).set(a.scopeId,b.value.label)),W(),S.success(s("ai.global.memory.toast.created"))}catch(e){S.fail(s("ai.global.memory.toast.createFailed"),{description:String(e)})}finally{w.value=null}}}async function Ae(e){if(confirm(s("ai.global.memory.confirmDelete"))){w.value=e.id;try{await h.deleteAIMemory(e.id),k.value=k.value.filter(a=>a.id!==e.id),G.value===e.id&&N(),S.success(s("ai.global.memory.toast.deleted"))}catch(a){S.fail(s("ai.global.memory.toast.deleteFailed"),{description:String(a)})}finally{w.value=null}}}async function $e(){const e=J.value;if(!(e.length===0||!confirm(s("ai.global.memory.confirmClearView")))){v.value=!0;try{f.value==="entities"?await Promise.all(e.map(a=>h.deleteAIMemory(a.id))):await h.clearAIMemories({scopeType:f.value==="preferences"?"global":"self",scopeId:null}),await ve(),S.success(s("ai.global.memory.toast.cleared"))}catch(a){await ve(),S.fail(s("ai.global.memory.toast.clearFailed"),{description:String(a)})}finally{v.value=!1}}}async function Me(){if(!(k.value.length===0||!confirm(s("ai.global.memory.confirmClearAll")))){v.value=!0;try{await h.clearAIMemories({all:!0}),k.value=[],j.value=new Map,N(),S.success(s("ai.global.memory.toast.cleared"))}catch(e){S.fail(s("ai.global.memory.toast.clearFailed"),{description:String(e)})}finally{v.value=!1}}}return K(()=>ae.open,e=>{e?ve():(N(),W())},{immediate:!0}),K(f,()=>W()),K(C,e=>{o(),F++,R.value=!1,b.value=null,$.value="",L.value&&f.value==="entities"&&e==="contact"&&t("")}),K($,e=>{b.value=null,L.value&&f.value==="entities"&&C.value==="contact"&&l(e)}),Ee(()=>{F++,T&&clearTimeout(T),o()}),(e,a)=>{const p=Ue,X=tt,x=je,V=Ce,xe=He,Ve=Re;return c(),ee(Ve,{open:ue.open,ui:{content:"sm:max-w-2xl"},"onUpdate:open":a[6]||(a[6]=r=>z("update:open",r))},{content:E(()=>[i("div",lt,[i("header",ot,[i("div",null,[i("h2",nt,d(n(s)("ai.global.memory.title")),1),i("p",it,d(n(s)("ai.global.memory.description")),1)]),u(p,{icon:"i-lucide-x",color:"neutral",variant:"ghost",size:"sm","aria-label":n(s)("common.close"),onClick:Q},null,8,["aria-label"])]),i("div",rt,[i("div",ct,[u(X,{modelValue:f.value,"onUpdate:modelValue":a[0]||(a[0]=r=>f.value=r),items:se.value,content:!1,size:"sm",class:"min-w-max"},null,8,["modelValue","items"]),i("div",ut,[i("span",dt,d(n(s)("ai.global.memory.count",{count:J.value.length})),1),u(p,{icon:"i-lucide-plus",color:"primary",variant:"soft",size:"xs",disabled:v.value,onClick:a[1]||(a[1]=r=>L.value?W():de())},{default:E(()=>[B(d(n(s)("ai.global.memory.add")),1)]),_:1},8,["disabled"])])]),L.value?(c(),m("div",mt,[i("div",ft,[i("span",pt,d(n(s)("ai.global.memory.createTitle")),1),i("span",vt,d(n(s)("ai.global.memory.scopeLabel",{scope:ce.value})),1)]),f.value==="entities"?(c(),m("div",gt,[u(X,{modelValue:C.value,"onUpdate:modelValue":a[2]||(a[2]=r=>C.value=r),items:re.value,content:!1,size:"xs"},null,8,["modelValue","items"]),u(x,{modelValue:$.value,"onUpdate:modelValue":a[3]||(a[3]=r=>$.value=r),icon:"i-lucide-search",size:"sm",placeholder:n(s)("ai.global.entityPicker.search")},null,8,["modelValue","placeholder"]),i("div",yt,[R.value?(c(),m("div",ht,[u(V,{name:"i-lucide-loader-2",class:"h-4 w-4 animate-spin text-gray-400"})])):(c(!0),m(te,{key:1},be(oe.value,r=>(c(),m("button",{key:`${r.scopeType}:${r.scopeId}`,type:"button",class:qe(["flex w-full items-center justify-between gap-3 rounded-md px-2.5 py-2 text-left text-xs transition-colors",b.value?.scopeId===r.scopeId&&b.value.scopeType===r.scopeType?"bg-primary-100 text-primary-700 dark:bg-primary-900/50 dark:text-primary-200":"hover:bg-gray-100 dark:hover:bg-gray-800"]),onClick:Z=>b.value=r},[i("span",xt,d(r.label),1),i("span",_t,d(r.detail),1)],10,bt))),128)),!R.value&&oe.value.length===0?(c(),m("p",kt,d(n(s)("ai.global.entityPicker.empty")),1)):U("",!0)])])):U("",!0),u(xe,{modelValue:q.value,"onUpdate:modelValue":a[4]||(a[4]=r=>q.value=r),rows:3,maxlength:2e3,autoresize:"",class:"w-full",placeholder:n(s)("ai.global.memory.contentPlaceholder")},null,8,["modelValue","placeholder"]),i("div",wt,[i("span",Ct,d(q.value.trim().length)+" / 2000",1),i("div",St,[u(p,{color:"neutral",variant:"ghost",size:"xs",onClick:W},{default:E(()=>[B(d(n(s)("common.cancel")),1)]),_:1}),u(p,{size:"xs",loading:w.value==="new",disabled:!Y.value,onClick:Te},{default:E(()=>[B(d(n(s)("common.save")),1)]),_:1},8,["loading","disabled"])])])])):U("",!0),i("div",It,[v.value?(c(),m("div",Tt,[u(V,{name:"i-lucide-loader-2",class:"h-5 w-5 animate-spin text-gray-400"})])):J.value.length===0?(c(),m("div",At,[u(V,{name:"i-lucide-brain",class:"mb-3 h-8 w-8 text-gray-300 dark:text-gray-600"}),i("p",$t,d(n(s)("ai.global.memory.empty")),1)])):(c(),m("div",Mt,[(c(!0),m(te,null,be(J.value,r=>(c(),m("article",{key:r.id,class:"rounded-xl border border-gray-200 px-4 py-3 dark:border-gray-800"},[r.scopeType==="contact"||r.scopeType==="group"?(c(),m("div",Vt,[u(V,{name:r.scopeType==="contact"?"i-lucide-user-round":"i-lucide-users-round",class:"h-3.5 w-3.5"},null,8,["name"]),i("span",zt,d(fe(r)),1)])):U("",!0),G.value===r.id?(c(),m("div",Pt,[u(xe,{modelValue:I.value,"onUpdate:modelValue":a[5]||(a[5]=Z=>I.value=Z),rows:3,autoresize:"",class:"w-full"},null,8,["modelValue"]),i("div",Et,[u(p,{color:"neutral",variant:"ghost",size:"xs",onClick:N},{default:E(()=>[B(d(n(s)("common.cancel")),1)]),_:1}),u(p,{size:"xs",loading:w.value===r.id,disabled:!I.value.trim(),onClick:Z=>Ie(r)},{default:E(()=>[B(d(n(s)("common.save")),1)]),_:1},8,["loading","disabled","onClick"])])])):(c(),m(te,{key:2},[i("p",Ut,d(r.content),1),i("div",jt,[i("div",qt,[i("span",null,d(n(s)(`ai.global.memory.source.${r.sourceType}`)),1),a[8]||(a[8]=i("span",{"aria-hidden":"true"},"·",-1)),i("span",null,d(n(s)("ai.global.memory.createdAt",{time:ie(r.createdAt)})),1),r.updatedAt!==r.createdAt?(c(),m(te,{key:0},[a[7]||(a[7]=i("span",{"aria-hidden":"true"},"·",-1)),i("span",null,d(n(s)("ai.global.memory.updatedAt",{time:ie(r.updatedAt)})),1)],64)):U("",!0)]),i("div",Rt,[u(p,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"xs","aria-label":n(s)("common.edit"),onClick:Z=>ne(r)},null,8,["aria-label","onClick"]),u(p,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"xs",loading:w.value===r.id,"aria-label":n(s)("common.delete"),onClick:Z=>Ae(r)},null,8,["loading","aria-label","onClick"])])]),r.sourceType==="ai"||r.sourceStatus!=="none"?(c(),m("div",Ft,[r.sourceType==="ai"?(c(),m("span",Bt,d(n(s)("ai.global.memory.aiSourceWarning")),1)):U("",!0),r.sourceStatus==="unavailable"?(c(),m("span",Lt,d(n(s)("ai.global.memory.sourceUnavailable")),1)):r.sourceStatus==="conversation"||r.sourceStatus==="message"?(c(),ee(p,{key:2,class:"ml-auto",icon:"i-lucide-external-link",color:"neutral",variant:"ghost",size:"xs",onClick:Z=>me(r)},{default:E(()=>[B(d(n(s)("ai.global.memory.viewSource")),1)]),_:1},8,["onClick"])):U("",!0)])):U("",!0)],64))]))),128))]))])]),i("footer",Nt,[u(p,{color:"error",variant:"ghost",size:"sm",disabled:J.value.length===0||v.value,onClick:$e},{default:E(()=>[B(d(n(s)("ai.global.memory.clearCurrent")),1)]),_:1},8,["disabled"]),i("div",Dt,[u(p,{color:"error",variant:"soft",size:"sm",disabled:k.value.length===0||v.value,onClick:Me},{default:E(()=>[B(d(n(s)("ai.global.memory.clearAll")),1)]),_:1},8,["disabled"]),u(p,{color:"neutral",variant:"outline",size:"sm",onClick:Q},{default:E(()=>[B(d(n(s)("common.close")),1)]),_:1})])])])]),_:1},8,["open"])}}}),Ht={class:"flex h-full min-w-0 flex-col dark:bg-page-dark",style:{"padding-top":"var(--titlebar-area-height)"}},Kt=["aria-expanded"],Jt={class:"main-content flex min-h-0 flex-1 overflow-hidden"},Qt={class:"flex h-full min-w-0 flex-1 flex-col overflow-hidden"},Wt={class:"relative min-h-0 flex-1"},Xt={key:0,class:"flex h-full items-center justify-center"},Yt={key:1,class:"mx-auto flex h-full max-w-lg flex-col items-center justify-center pb-16 text-center"},Zt={class:"mb-4 flex h-12 w-12 items-center justify-center rounded-2xl bg-primary-50 text-primary-500 dark:bg-primary-500/10 dark:text-primary-300"},ea={class:"text-base text-gray-800 dark:text-gray-100"},ta={class:"mt-2 text-sm leading-6 text-gray-500 dark:text-gray-400"},aa={key:2,class:"mx-auto max-w-3xl space-y-4"},sa={key:0,class:"flex justify-center pb-2"},la={key:1,class:"qa-pair space-y-6 pb-4"},oa={class:"shrink-0 px-4 pb-4"},na={class:"relative mx-auto max-w-3xl overflow-visible rounded-2xl bg-white shadow-[0_2px_14px_rgba(0,0,0,0.04)] ring-1 ring-gray-200/60 transition-all focus-within:ring-primary-500/40 focus-within:shadow-[0_4px_20px_rgba(0,0,0,0.08)] dark:bg-page-dark dark:ring-white/5"},Ca=_e({__name:"index",setup(ue){const{t:_,locale:ae}=ke(),z=Fe(),s=Be(),D=Se(),S=Le(),h=st(),O=we(),{chatKey:A,state:f}=h.ensureGlobalState(ae.value),k=ye(f,"messages"),j=ye(f,"isAIThinking"),v=ye(f,"currentAIChatId"),w=g([]),G=g(!1),I=g(!0),L=g(null);let q=!1,C=0,b=0,$=null;function M(){return!q&&z.name==="global-ai"}const R=g(0),T=g(!1),P=g(null),F=H(()=>et(k.value)),{messagesContainer:se,showScrollToBottom:J,handleScrollToBottom:re,scrollToBottom:le}=Ke(k,j),{visiblePairs:oe,hasOlderPairs:ce,loadOlderPairs:Y}=Je(F,v,se);async function Q(t){!M()||(typeof z.query.aiChatId=="string"?z.query.aiChatId:null)===t||await s.replace({query:{...z.query,aiChatId:t||void 0}})}async function ne(){G.value=!0;try{w.value=await O.getGlobalAIChats()}catch(t){D.fail(_("ai.global.toast.loadFailed"),{description:String(t)})}finally{G.value=!1}}async function N(t,o=null){const y=++C,l=await h.loadAIChat(A,t);if(!(y!==C||!M())){if(!l){D.fail(_("ai.global.toast.loadFailed"));return}I.value=!1,await Q(t),!(y!==C||!M())&&(await ge(),o?await de(o):(P.value=null,le(!0)))}}async function de(t){if(!F.value.some(l=>l.user?.id===t||l.assistant?.id===t||l.standalone?.id===t)){D.warn(_("ai.global.memory.sourceUnavailable"));return}for(;ce.value&&!oe.value.some(l=>l.user?.id===t||l.assistant?.id===t||l.standalone?.id===t);)await Y();P.value=t,await ge(),se.value?.querySelector(`[data-ai-message-id="${CSS.escape(t)}"]`)?.scrollIntoView({behavior:"smooth",block:"center"}),$&&clearTimeout($),$=setTimeout(()=>{P.value===t&&(P.value=null)},4e3)}async function W(t){await N(t.aiChatId,t.messageId)}function ie(){C++,h.startNewAIChat(A)&&(L.value?.clearDraft(),I.value=!1,Q(null))}async function me(t){try{await O.updateAIChatTitle(t.id,t.title);const o=w.value.find(y=>y.id===t.id);o&&(o.title=t.title)}catch(o){D.fail(_("ai.global.toast.renameFailed"),{description:String(o)})}}async function fe(t){try{await O.deleteAIChat(t),w.value=w.value.filter(o=>o.id!==t),v.value===t&&ie()}catch(o){D.fail(_("ai.global.toast.deleteFailed"),{description:String(o)})}}async function pe(t){const o=await h.sendMessage(A,t.content,{entityRefs:t.entityRefs,onAccepted:t.onAccepted});if(o.success){le(!0),await ne();return}if(o.reason!=="aborted"){if(o.reason==="no_config"){S.openSettings("ai","defaultModel");return}o.reason==="busy"&&D.warn(_("ai.global.toast.busy"))}}return K(ae,t=>{h.ensureGlobalState(t)}),K(v,(t,o)=>{t!==o&&(I.value||Q(t),t&&ne())}),K(v,async t=>{const o=++b;if(!t){R.value=0;return}try{const y=await O.estimateContextTokens(t);if(o!==b||v.value!==t)return;R.value=y.success?y.tokens:0}catch{if(o!==b||v.value!==t)return;R.value=0}},{immediate:!0}),K(()=>z.query.aiChatId,t=>{const o=typeof t=="string"?t:null;if(!(I.value||j.value)){if(!o){v.value&&h.startNewAIChat(A);return}o!==v.value&&N(o)}}),Ne(async()=>{if(h.selectAssistantForSession(A,De(ae.value)),await ne(),!M())return;const t=++C,o=typeof z.query.aiChatId=="string"?z.query.aiChatId:null;let y=o?await h.loadAIChat(A,o):!1;if(t!==C||!M())return;const l=w.value[0]?.id;!y&&l&&l!==o&&(y=await h.loadAIChat(A,l),t!==C||!M())||(y||h.startNewAIChat(A),M()&&(I.value=!1,await Q(v.value),M()&&(await ge(),M()&&le(!0))))}),Oe(()=>{q=!0,C++,b++,$&&clearTimeout($)}),(t,o)=>{const y=Ce;return c(),m("div",Ht,[u(at,{title:n(_)("ai.global.title"),description:n(_)("ai.global.subtitle"),icon:"i-heroicons-sparkles","icon-class":"bg-primary-600 text-white dark:bg-primary-500 dark:text-white",size:"compact"},{actions:E(()=>[i("button",{type:"button",class:"flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-200","aria-expanded":T.value,onClick:o[0]||(o[0]=l=>T.value=!0)},[u(y,{name:"i-lucide-brain",class:"h-3.5 w-3.5"}),i("span",null,d(n(_)("ai.global.memory.button")),1)],8,Kt),u(Qe,{"current-ai-chat-id":v.value,"current-messages":k.value,"fallback-title":n(_)("ai.global.title")},null,8,["current-ai-chat-id","current-messages","fallback-title"])]),_:1},8,["title","description"]),i("div",Jt,[u(We,{"session-id":"","active-id":v.value,conversations:w.value,loading:G.value,disabled:j.value,onSelect:N,onCreate:ie,onRename:me,onDelete:fe},null,8,["active-id","conversations","loading","disabled"]),i("section",Qt,[i("div",Wt,[i("div",{ref_key:"messagesContainer",ref:se,class:"absolute inset-0 overflow-y-auto px-5 py-6"},[I.value?(c(),m("div",Xt,[u(y,{name:"i-lucide-loader-2",class:"h-5 w-5 animate-spin text-gray-400"})])):k.value.length===0?(c(),m("div",Yt,[i("div",Zt,[u(y,{name:"i-heroicons-chat-bubble-left-right",class:"h-6 w-6"})]),i("h2",ea,d(n(_)("ai.global.empty.title")),1),i("p",ta,d(n(_)("ai.global.empty.description")),1)])):(c(),m("div",aa,[n(ce)?(c(),m("div",sa,[i("button",{type:"button",class:"flex h-8 items-center gap-1.5 rounded-full px-3 text-xs text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-200",onClick:o[1]||(o[1]=(...l)=>n(Y)&&n(Y)(...l))},[u(y,{name:"i-heroicons-arrow-up",class:"h-3.5 w-3.5"}),B(" "+d(n(_)("ai.chat.history.loadEarlier")),1)])])):U("",!0),(c(!0),m(te,null,be(n(oe),l=>(c(),m(te,{key:l.id},[l.standalone?(c(),ee(he,{key:0,role:l.standalone.role,content:l.standalone.content,timestamp:l.standalone.timestamp},null,8,["role","content","timestamp"])):(c(),m("div",la,[l.user?(c(),ee(he,{key:0,role:l.user.role,"message-id":l.user.id,content:l.user.content,timestamp:l.user.timestamp,"entity-refs":l.user.entityRefs,highlighted:P.value===l.user.id},null,8,["role","message-id","content","timestamp","entity-refs","highlighted"])):U("",!0),l.assistant&&(l.assistant.content||l.assistant.contentBlocks?.length||!l.assistant.isStreaming)?(c(),ee(he,{key:1,role:l.assistant.role,"message-id":l.assistant.id,content:l.assistant.content,timestamp:l.assistant.timestamp,"is-streaming":l.assistant.isStreaming,"process-duration-ms":l.assistant.processDurationMs,"content-blocks":l.assistant.contentBlocks,"show-capture-button":!l.assistant.isStreaming,"active-tool":l.assistant.isStreaming?n(f).currentToolStatus:null,highlighted:P.value===l.assistant.id},null,8,["role","message-id","content","timestamp","is-streaming","process-duration-ms","content-blocks","show-capture-button","active-tool","highlighted"])):l.assistant?.isStreaming?(c(),ee(Xe,{key:2,"current-tool-status":n(f).currentToolStatus,"agent-status":n(f).agentStatus},null,8,["current-tool-status","agent-status"])):U("",!0)]))],64))),128))]))],512),u(Ge,{name:"fade-up"},{default:E(()=>[n(J)?(c(),m("button",{key:0,type:"button",class:"absolute bottom-4 left-1/2 z-10 flex -translate-x-1/2 items-center gap-1.5 rounded-full bg-gray-800/90 px-3 py-1.5 text-xs text-white shadow-lg backdrop-blur-sm hover:bg-gray-700 dark:bg-gray-700/90",onClick:o[2]||(o[2]=(...l)=>n(re)&&n(re)(...l))},[u(y,{name:"i-heroicons-arrow-down",class:"h-3.5 w-3.5"}),B(" "+d(n(_)("ai.chat.scrollToBottom")),1)])):U("",!0)]),_:1})]),i("div",oa,[i("div",na,[u(Ye,{ref_key:"chatInputRef",ref:L,embedded:"",disabled:j.value,status:j.value?"streaming":"ready","mention-scope":"global","skills-enabled":!1,placeholder:n(_)("ai.global.input.placeholder"),onSend:pe,onStop:o[3]||(o[3]=l=>n(h).stopGeneration(n(A)))},null,8,["disabled","status","placeholder"]),u(Ze,{class:"pb-1.5 pl-2 pr-[52px] pt-0.5","session-token-usage":n(f).sessionTokenUsage,"agent-status":n(f).agentStatus,"estimated-context-tokens":R.value},null,8,["session-token-usage","agent-status","estimated-context-tokens"])])])])]),u(Gt,{open:T.value,"onUpdate:open":o[4]||(o[4]=l=>T.value=l),onViewSource:W},null,8,["open"])])}}});export{Ca as default};
1
+ import{d as _e,a6 as ke,aF as we,L as ze,ap as Pe,K,al as Ee,o as c,f as ee,w as E,a as i,p as d,g as n,z as u,a8 as Ue,a9 as B,c as m,aq as je,a7 as Ce,F as te,j as be,n as qe,l as U,b as g,e as H,aa as Re,aD as Fe,ay as Be,J as Le,x as Ne,aG as De,C as ge,y as Oe,aE as Ge,aH as ye}from"./index-B1oj9KDv.js";import{_ as He,u as Ke,a as Je,b as Qe,c as We,d as he,e as Xe,f as Ye,g as Ze,h as et}from"./chatMessages-Bd33SSXI.js";import{_ as tt}from"./Tabs-BMq9wODW.js";import{u as Se}from"./useToast-B5LaA6c-.js";import{P as at}from"./PageHeader-CKeZjNNR.js";import{u as st}from"./aiChat--CR4g2M7.js";import"./vendor-snapdom--nZvo8Sg.js";import"./index-4DVZ2g0M.js";import"./service-CppETV4a.js";import"./EChartBar.vue_vue_type_script_setup_true_lang-DKNCZuFm.js";import"./EChart.vue_vue_type_script_setup_true_lang-DubnuUXI.js";import"./vendor-echarts-C9ugTmum.js";import"./vendor-zrender-D8psf1AA.js";import"./EChartLine.vue_vue_type_script_setup_true_lang-Fl7xAOSR.js";import"./prompt-C-ofJ7t_.js";import"./RovingFocusItem-BJMUQ5DJ.js";import"./chatlabSiteLocale-CrCNb8QP.js";const lt={class:"flex max-h-[78vh] min-h-[520px] flex-col overflow-hidden"},ot={class:"flex items-start justify-between border-b border-gray-200 px-5 py-4 dark:border-gray-800"},nt={class:"text-base font-semibold text-gray-900 dark:text-white"},it={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},rt={class:"flex min-h-0 flex-1 flex-col px-5 py-4"},ct={class:"mb-3 flex items-center justify-between gap-3"},ut={class:"flex items-center gap-2"},dt={class:"text-xs text-gray-400"},mt={key:0,class:"mb-3 rounded-xl border border-primary-200 bg-primary-50/40 p-3 dark:border-primary-900/70 dark:bg-primary-950/20"},ft={class:"mb-2 flex items-center justify-between gap-3"},pt={class:"text-xs font-medium text-gray-700 dark:text-gray-200"},vt={class:"truncate text-[11px] text-gray-400"},gt={key:0,class:"mb-3 space-y-2"},yt={class:"max-h-36 space-y-1 overflow-y-auto rounded-lg border border-gray-200 p-1 dark:border-gray-800"},ht={key:0,class:"flex h-20 items-center justify-center"},bt=["onClick"],xt={class:"truncate"},_t={class:"shrink-0 text-[10px] text-gray-400"},kt={key:2,class:"flex h-20 items-center justify-center text-xs text-gray-400"},wt={class:"mt-2 flex items-center justify-between gap-3"},Ct={class:"text-[11px] text-gray-400"},St={class:"flex items-center gap-2"},It={class:"min-h-0 flex-1 overflow-y-auto pr-1"},Tt={key:0,class:"flex h-full min-h-56 items-center justify-center"},At={key:1,class:"flex min-h-56 flex-col items-center justify-center text-center"},$t={class:"text-sm text-gray-500 dark:text-gray-400"},Mt={key:2,class:"space-y-2"},Vt={key:0,class:"mb-2 flex items-center gap-1.5 text-xs text-gray-500"},zt={class:"truncate"},Pt={key:1},Et={class:"mt-2 flex justify-end gap-2"},Ut={class:"whitespace-pre-wrap break-words text-sm leading-6 text-gray-800 dark:text-gray-200"},jt={class:"mt-2 flex items-center justify-between gap-3"},qt={class:"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1 text-[11px] text-gray-400"},Rt={class:"flex shrink-0 items-center gap-0.5"},Ft={key:0,class:"mt-2 flex flex-wrap items-center justify-between gap-2 border-t border-gray-100 pt-2 text-[11px] dark:border-gray-800"},Bt={key:0,class:"text-amber-600 dark:text-amber-400"},Lt={key:1,class:"ml-auto text-gray-400 dark:text-gray-500"},Nt={class:"flex items-center justify-between border-t border-gray-200 px-5 py-3 dark:border-gray-800"},Dt={class:"flex items-center gap-2"},Ot=1500,Gt=_e({__name:"AIMemoryManagerModal",props:{open:{type:Boolean}},emits:["update:open","view-source"],setup(ue,{emit:_}){const ae=ue,z=_,{t:s,locale:D}=ke(),S=Se(),h=we(),O=ze(),A=Pe(),f=g("preferences"),k=g([]),j=g(new Map),v=g(!1),w=g(null),G=g(null),I=g(""),L=g(!1),q=g(""),C=g("contact"),b=g(null),$=g(""),M=g([]),R=g(!1);let T=null,P=null,F=0;const se=H(()=>[{label:s("ai.global.memory.preferences"),value:"preferences"},{label:s("ai.global.memory.self"),value:"self"},{label:s("ai.global.memory.entities"),value:"entities"}]),J=H(()=>k.value.filter(e=>f.value==="preferences"?e.scopeType==="global":f.value==="self"?e.scopeType==="self":e.scopeType==="contact"||e.scopeType==="group")),re=H(()=>[{label:s("ai.global.entityPicker.contacts"),value:"contact"},{label:s("ai.global.entityPicker.groups"),value:"group"}]),le=H(()=>{const e=$.value.trim().toLocaleLowerCase();return A.sessions.filter(a=>a.type==="group").filter(a=>!e||`${a.name} ${a.platform}`.toLocaleLowerCase().includes(e)).map(a=>({scopeType:"group",scopeId:a.id,label:a.name,detail:a.platform}))}),oe=H(()=>C.value==="contact"?M.value:le.value),ce=H(()=>f.value==="preferences"?s("ai.global.memory.preferences"):f.value==="self"?s("ai.global.memory.self"):b.value?.label??s("ai.global.memory.selectEntity")),Y=H(()=>q.value.trim().length>0&&q.value.trim().length<=2e3&&(f.value!=="entities"||b.value!==null));function Q(){z("update:open",!1)}function ne(e){G.value=e.id,I.value=e.content}function N(){G.value=null,I.value=""}function de(){N(),L.value=!0,q.value="",b.value=null,$.value="",f.value==="entities"&&C.value==="contact"&&t("")}function W(){L.value=!1,q.value="",b.value=null,$.value="",F++,R.value=!1,T&&(clearTimeout(T),T=null),o()}function ie(e){return new Intl.DateTimeFormat(D.value,{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(e)}function me(e){!e.sourceAIChatId||e.sourceStatus!=="conversation"&&e.sourceStatus!=="message"||(z("update:open",!1),z("view-source",{aiChatId:e.sourceAIChatId,messageId:e.sourceStatus==="message"?e.sourceMessageId:null}))}function fe(e){return e.scopeId?e.scopeType==="contact"?j.value.get(e.scopeId)??e.scopeId:A.sessions.find(a=>a.id===e.scopeId)?.name??e.scopeId:""}async function pe(e){const a=[...new Set(e.filter(x=>x.scopeType==="contact").map(x=>x.scopeId))].filter(x=>!!x),p=new Map,X=await Promise.allSettled(a.map(async x=>({key:x,detail:await O.getContactDetail(x,{acceptStale:!0})})));for(const x of X)x.status==="fulfilled"&&x.value.detail.contact&&p.set(x.value.key,x.value.detail.contact.displayName);j.value=p}async function t(e){const a=++F;R.value=!0;try{const p={acceptStale:!0,timeRangePreset:"all",page:1,pageSize:100,query:e.trim()||void 0},X=await Promise.all([O.getContacts({...p,pool:"friend"}),O.getContacts({...p,pool:"non_friend"})]);if(a!==F)return;const x=new Map;X.flatMap(V=>V.contacts).forEach(V=>x.set(V.key,V)),M.value=[...x.values()].map(V=>({scopeType:"contact",scopeId:V.key,label:V.displayName,detail:V.platformId})),y(X,e)}catch(p){if(a!==F)return;o(),M.value=[],S.fail(s("ai.global.entityPicker.loadFailed"),{description:String(p)})}finally{a===F&&(R.value=!1)}}function o(){P&&(clearTimeout(P),P=null)}function y(e,a){o(),!(!L.value||f.value!=="entities"||C.value!=="contact")&&e.some(p=>p.task?.status==="running")&&(P=setTimeout(()=>{P=null,t(a)},Ot))}function l(e){T&&clearTimeout(T),o(),F++,T=setTimeout(()=>{T=null,t(e)},200)}async function ve(){v.value=!0;try{const e=await h.getAIMemories();k.value=e,await Promise.all([A.loadSessions(),pe(e)])}catch(e){S.fail(s("ai.global.memory.toast.loadFailed"),{description:String(e)})}finally{v.value=!1}}async function Ie(e){if(I.value.trim()){w.value=e.id;try{const a=await h.updateAIMemory(e.id,I.value);k.value=k.value.map(p=>p.id===a.id?a:p),N(),S.success(s("ai.global.memory.toast.saved"))}catch(a){S.fail(s("ai.global.memory.toast.saveFailed"),{description:String(a)})}finally{w.value=null}}}async function Te(){if(Y.value){w.value="new";try{const e=f.value==="preferences"?{scopeType:"global",scopeId:null}:f.value==="self"?{scopeType:"self",scopeId:null}:{scopeType:b.value.scopeType,scopeId:b.value.scopeId},a=await h.createAIMemory({...e,content:q.value});k.value=[a,...k.value],a.scopeType==="contact"&&a.scopeId&&b.value&&(j.value=new Map(j.value).set(a.scopeId,b.value.label)),W(),S.success(s("ai.global.memory.toast.created"))}catch(e){S.fail(s("ai.global.memory.toast.createFailed"),{description:String(e)})}finally{w.value=null}}}async function Ae(e){if(confirm(s("ai.global.memory.confirmDelete"))){w.value=e.id;try{await h.deleteAIMemory(e.id),k.value=k.value.filter(a=>a.id!==e.id),G.value===e.id&&N(),S.success(s("ai.global.memory.toast.deleted"))}catch(a){S.fail(s("ai.global.memory.toast.deleteFailed"),{description:String(a)})}finally{w.value=null}}}async function $e(){const e=J.value;if(!(e.length===0||!confirm(s("ai.global.memory.confirmClearView")))){v.value=!0;try{f.value==="entities"?await Promise.all(e.map(a=>h.deleteAIMemory(a.id))):await h.clearAIMemories({scopeType:f.value==="preferences"?"global":"self",scopeId:null}),await ve(),S.success(s("ai.global.memory.toast.cleared"))}catch(a){await ve(),S.fail(s("ai.global.memory.toast.clearFailed"),{description:String(a)})}finally{v.value=!1}}}async function Me(){if(!(k.value.length===0||!confirm(s("ai.global.memory.confirmClearAll")))){v.value=!0;try{await h.clearAIMemories({all:!0}),k.value=[],j.value=new Map,N(),S.success(s("ai.global.memory.toast.cleared"))}catch(e){S.fail(s("ai.global.memory.toast.clearFailed"),{description:String(e)})}finally{v.value=!1}}}return K(()=>ae.open,e=>{e?ve():(N(),W())},{immediate:!0}),K(f,()=>W()),K(C,e=>{o(),F++,R.value=!1,b.value=null,$.value="",L.value&&f.value==="entities"&&e==="contact"&&t("")}),K($,e=>{b.value=null,L.value&&f.value==="entities"&&C.value==="contact"&&l(e)}),Ee(()=>{F++,T&&clearTimeout(T),o()}),(e,a)=>{const p=Ue,X=tt,x=je,V=Ce,xe=He,Ve=Re;return c(),ee(Ve,{open:ue.open,ui:{content:"sm:max-w-2xl"},"onUpdate:open":a[6]||(a[6]=r=>z("update:open",r))},{content:E(()=>[i("div",lt,[i("header",ot,[i("div",null,[i("h2",nt,d(n(s)("ai.global.memory.title")),1),i("p",it,d(n(s)("ai.global.memory.description")),1)]),u(p,{icon:"i-lucide-x",color:"neutral",variant:"ghost",size:"sm","aria-label":n(s)("common.close"),onClick:Q},null,8,["aria-label"])]),i("div",rt,[i("div",ct,[u(X,{modelValue:f.value,"onUpdate:modelValue":a[0]||(a[0]=r=>f.value=r),items:se.value,content:!1,size:"sm",class:"min-w-max"},null,8,["modelValue","items"]),i("div",ut,[i("span",dt,d(n(s)("ai.global.memory.count",{count:J.value.length})),1),u(p,{icon:"i-lucide-plus",color:"primary",variant:"soft",size:"xs",disabled:v.value,onClick:a[1]||(a[1]=r=>L.value?W():de())},{default:E(()=>[B(d(n(s)("ai.global.memory.add")),1)]),_:1},8,["disabled"])])]),L.value?(c(),m("div",mt,[i("div",ft,[i("span",pt,d(n(s)("ai.global.memory.createTitle")),1),i("span",vt,d(n(s)("ai.global.memory.scopeLabel",{scope:ce.value})),1)]),f.value==="entities"?(c(),m("div",gt,[u(X,{modelValue:C.value,"onUpdate:modelValue":a[2]||(a[2]=r=>C.value=r),items:re.value,content:!1,size:"xs"},null,8,["modelValue","items"]),u(x,{modelValue:$.value,"onUpdate:modelValue":a[3]||(a[3]=r=>$.value=r),icon:"i-lucide-search",size:"sm",placeholder:n(s)("ai.global.entityPicker.search")},null,8,["modelValue","placeholder"]),i("div",yt,[R.value?(c(),m("div",ht,[u(V,{name:"i-lucide-loader-2",class:"h-4 w-4 animate-spin text-gray-400"})])):(c(!0),m(te,{key:1},be(oe.value,r=>(c(),m("button",{key:`${r.scopeType}:${r.scopeId}`,type:"button",class:qe(["flex w-full items-center justify-between gap-3 rounded-md px-2.5 py-2 text-left text-xs transition-colors",b.value?.scopeId===r.scopeId&&b.value.scopeType===r.scopeType?"bg-primary-100 text-primary-700 dark:bg-primary-900/50 dark:text-primary-200":"hover:bg-gray-100 dark:hover:bg-gray-800"]),onClick:Z=>b.value=r},[i("span",xt,d(r.label),1),i("span",_t,d(r.detail),1)],10,bt))),128)),!R.value&&oe.value.length===0?(c(),m("p",kt,d(n(s)("ai.global.entityPicker.empty")),1)):U("",!0)])])):U("",!0),u(xe,{modelValue:q.value,"onUpdate:modelValue":a[4]||(a[4]=r=>q.value=r),rows:3,maxlength:2e3,autoresize:"",class:"w-full",placeholder:n(s)("ai.global.memory.contentPlaceholder")},null,8,["modelValue","placeholder"]),i("div",wt,[i("span",Ct,d(q.value.trim().length)+" / 2000",1),i("div",St,[u(p,{color:"neutral",variant:"ghost",size:"xs",onClick:W},{default:E(()=>[B(d(n(s)("common.cancel")),1)]),_:1}),u(p,{size:"xs",loading:w.value==="new",disabled:!Y.value,onClick:Te},{default:E(()=>[B(d(n(s)("common.save")),1)]),_:1},8,["loading","disabled"])])])])):U("",!0),i("div",It,[v.value?(c(),m("div",Tt,[u(V,{name:"i-lucide-loader-2",class:"h-5 w-5 animate-spin text-gray-400"})])):J.value.length===0?(c(),m("div",At,[u(V,{name:"i-lucide-brain",class:"mb-3 h-8 w-8 text-gray-300 dark:text-gray-600"}),i("p",$t,d(n(s)("ai.global.memory.empty")),1)])):(c(),m("div",Mt,[(c(!0),m(te,null,be(J.value,r=>(c(),m("article",{key:r.id,class:"rounded-xl border border-gray-200 px-4 py-3 dark:border-gray-800"},[r.scopeType==="contact"||r.scopeType==="group"?(c(),m("div",Vt,[u(V,{name:r.scopeType==="contact"?"i-lucide-user-round":"i-lucide-users-round",class:"h-3.5 w-3.5"},null,8,["name"]),i("span",zt,d(fe(r)),1)])):U("",!0),G.value===r.id?(c(),m("div",Pt,[u(xe,{modelValue:I.value,"onUpdate:modelValue":a[5]||(a[5]=Z=>I.value=Z),rows:3,autoresize:"",class:"w-full"},null,8,["modelValue"]),i("div",Et,[u(p,{color:"neutral",variant:"ghost",size:"xs",onClick:N},{default:E(()=>[B(d(n(s)("common.cancel")),1)]),_:1}),u(p,{size:"xs",loading:w.value===r.id,disabled:!I.value.trim(),onClick:Z=>Ie(r)},{default:E(()=>[B(d(n(s)("common.save")),1)]),_:1},8,["loading","disabled","onClick"])])])):(c(),m(te,{key:2},[i("p",Ut,d(r.content),1),i("div",jt,[i("div",qt,[i("span",null,d(n(s)(`ai.global.memory.source.${r.sourceType}`)),1),a[8]||(a[8]=i("span",{"aria-hidden":"true"},"·",-1)),i("span",null,d(n(s)("ai.global.memory.createdAt",{time:ie(r.createdAt)})),1),r.updatedAt!==r.createdAt?(c(),m(te,{key:0},[a[7]||(a[7]=i("span",{"aria-hidden":"true"},"·",-1)),i("span",null,d(n(s)("ai.global.memory.updatedAt",{time:ie(r.updatedAt)})),1)],64)):U("",!0)]),i("div",Rt,[u(p,{icon:"i-lucide-pencil",color:"neutral",variant:"ghost",size:"xs","aria-label":n(s)("common.edit"),onClick:Z=>ne(r)},null,8,["aria-label","onClick"]),u(p,{icon:"i-lucide-trash-2",color:"error",variant:"ghost",size:"xs",loading:w.value===r.id,"aria-label":n(s)("common.delete"),onClick:Z=>Ae(r)},null,8,["loading","aria-label","onClick"])])]),r.sourceType==="ai"||r.sourceStatus!=="none"?(c(),m("div",Ft,[r.sourceType==="ai"?(c(),m("span",Bt,d(n(s)("ai.global.memory.aiSourceWarning")),1)):U("",!0),r.sourceStatus==="unavailable"?(c(),m("span",Lt,d(n(s)("ai.global.memory.sourceUnavailable")),1)):r.sourceStatus==="conversation"||r.sourceStatus==="message"?(c(),ee(p,{key:2,class:"ml-auto",icon:"i-lucide-external-link",color:"neutral",variant:"ghost",size:"xs",onClick:Z=>me(r)},{default:E(()=>[B(d(n(s)("ai.global.memory.viewSource")),1)]),_:1},8,["onClick"])):U("",!0)])):U("",!0)],64))]))),128))]))])]),i("footer",Nt,[u(p,{color:"error",variant:"ghost",size:"sm",disabled:J.value.length===0||v.value,onClick:$e},{default:E(()=>[B(d(n(s)("ai.global.memory.clearCurrent")),1)]),_:1},8,["disabled"]),i("div",Dt,[u(p,{color:"error",variant:"soft",size:"sm",disabled:k.value.length===0||v.value,onClick:Me},{default:E(()=>[B(d(n(s)("ai.global.memory.clearAll")),1)]),_:1},8,["disabled"]),u(p,{color:"neutral",variant:"outline",size:"sm",onClick:Q},{default:E(()=>[B(d(n(s)("common.close")),1)]),_:1})])])])]),_:1},8,["open"])}}}),Ht={class:"flex h-full min-w-0 flex-col dark:bg-page-dark",style:{"padding-top":"var(--titlebar-area-height)"}},Kt=["aria-expanded"],Jt={class:"main-content flex min-h-0 flex-1 overflow-hidden"},Qt={class:"flex h-full min-w-0 flex-1 flex-col overflow-hidden"},Wt={class:"relative min-h-0 flex-1"},Xt={key:0,class:"flex h-full items-center justify-center"},Yt={key:1,class:"mx-auto flex h-full max-w-lg flex-col items-center justify-center pb-16 text-center"},Zt={class:"mb-4 flex h-12 w-12 items-center justify-center rounded-2xl bg-primary-50 text-primary-500 dark:bg-primary-500/10 dark:text-primary-300"},ea={class:"text-base text-gray-800 dark:text-gray-100"},ta={class:"mt-2 text-sm leading-6 text-gray-500 dark:text-gray-400"},aa={key:2,class:"mx-auto max-w-3xl space-y-4"},sa={key:0,class:"flex justify-center pb-2"},la={key:1,class:"qa-pair space-y-6 pb-4"},oa={class:"shrink-0 px-4 pb-4"},na={class:"relative mx-auto max-w-3xl overflow-visible rounded-2xl bg-white shadow-[0_2px_14px_rgba(0,0,0,0.04)] ring-1 ring-gray-200/60 transition-all focus-within:ring-primary-500/40 focus-within:shadow-[0_4px_20px_rgba(0,0,0,0.08)] dark:bg-page-dark dark:ring-white/5"},Ca=_e({__name:"index",setup(ue){const{t:_,locale:ae}=ke(),z=Fe(),s=Be(),D=Se(),S=Le(),h=st(),O=we(),{chatKey:A,state:f}=h.ensureGlobalState(ae.value),k=ye(f,"messages"),j=ye(f,"isAIThinking"),v=ye(f,"currentAIChatId"),w=g([]),G=g(!1),I=g(!0),L=g(null);let q=!1,C=0,b=0,$=null;function M(){return!q&&z.name==="global-ai"}const R=g(0),T=g(!1),P=g(null),F=H(()=>et(k.value)),{messagesContainer:se,showScrollToBottom:J,handleScrollToBottom:re,scrollToBottom:le}=Ke(k,j),{visiblePairs:oe,hasOlderPairs:ce,loadOlderPairs:Y}=Je(F,v,se);async function Q(t){!M()||(typeof z.query.aiChatId=="string"?z.query.aiChatId:null)===t||await s.replace({query:{...z.query,aiChatId:t||void 0}})}async function ne(){G.value=!0;try{w.value=await O.getGlobalAIChats()}catch(t){D.fail(_("ai.global.toast.loadFailed"),{description:String(t)})}finally{G.value=!1}}async function N(t,o=null){const y=++C,l=await h.loadAIChat(A,t);if(!(y!==C||!M())){if(!l){D.fail(_("ai.global.toast.loadFailed"));return}I.value=!1,await Q(t),!(y!==C||!M())&&(await ge(),o?await de(o):(P.value=null,le(!0)))}}async function de(t){if(!F.value.some(l=>l.user?.id===t||l.assistant?.id===t||l.standalone?.id===t)){D.warn(_("ai.global.memory.sourceUnavailable"));return}for(;ce.value&&!oe.value.some(l=>l.user?.id===t||l.assistant?.id===t||l.standalone?.id===t);)await Y();P.value=t,await ge(),se.value?.querySelector(`[data-ai-message-id="${CSS.escape(t)}"]`)?.scrollIntoView({behavior:"smooth",block:"center"}),$&&clearTimeout($),$=setTimeout(()=>{P.value===t&&(P.value=null)},4e3)}async function W(t){await N(t.aiChatId,t.messageId)}function ie(){C++,h.startNewAIChat(A)&&(L.value?.clearDraft(),I.value=!1,Q(null))}async function me(t){try{await O.updateAIChatTitle(t.id,t.title);const o=w.value.find(y=>y.id===t.id);o&&(o.title=t.title)}catch(o){D.fail(_("ai.global.toast.renameFailed"),{description:String(o)})}}async function fe(t){try{await O.deleteAIChat(t),w.value=w.value.filter(o=>o.id!==t),v.value===t&&ie()}catch(o){D.fail(_("ai.global.toast.deleteFailed"),{description:String(o)})}}async function pe(t){const o=await h.sendMessage(A,t.content,{entityRefs:t.entityRefs,onAccepted:t.onAccepted});if(o.success){le(!0),await ne();return}if(o.reason!=="aborted"){if(o.reason==="no_config"){S.openSettings("ai","defaultModel");return}o.reason==="busy"&&D.warn(_("ai.global.toast.busy"))}}return K(ae,t=>{h.ensureGlobalState(t)}),K(v,(t,o)=>{t!==o&&(I.value||Q(t),t&&ne())}),K(v,async t=>{const o=++b;if(!t){R.value=0;return}try{const y=await O.estimateContextTokens(t);if(o!==b||v.value!==t)return;R.value=y.success?y.tokens:0}catch{if(o!==b||v.value!==t)return;R.value=0}},{immediate:!0}),K(()=>z.query.aiChatId,t=>{const o=typeof t=="string"?t:null;if(!(I.value||j.value)){if(!o){v.value&&h.startNewAIChat(A);return}o!==v.value&&N(o)}}),Ne(async()=>{if(h.selectAssistantForSession(A,De(ae.value)),await ne(),!M())return;const t=++C,o=typeof z.query.aiChatId=="string"?z.query.aiChatId:null;let y=o?await h.loadAIChat(A,o):!1;if(t!==C||!M())return;const l=w.value[0]?.id;!y&&l&&l!==o&&(y=await h.loadAIChat(A,l),t!==C||!M())||(y||h.startNewAIChat(A),M()&&(I.value=!1,await Q(v.value),M()&&(await ge(),M()&&le(!0))))}),Oe(()=>{q=!0,C++,b++,$&&clearTimeout($)}),(t,o)=>{const y=Ce;return c(),m("div",Ht,[u(at,{title:n(_)("ai.global.title"),description:n(_)("ai.global.subtitle"),icon:"i-heroicons-sparkles","icon-class":"bg-primary-600 text-white dark:bg-primary-500 dark:text-white",size:"compact"},{actions:E(()=>[i("button",{type:"button",class:"flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-200","aria-expanded":T.value,onClick:o[0]||(o[0]=l=>T.value=!0)},[u(y,{name:"i-lucide-brain",class:"h-3.5 w-3.5"}),i("span",null,d(n(_)("ai.global.memory.button")),1)],8,Kt),u(Qe,{"current-ai-chat-id":v.value,"current-messages":k.value,"fallback-title":n(_)("ai.global.title")},null,8,["current-ai-chat-id","current-messages","fallback-title"])]),_:1},8,["title","description"]),i("div",Jt,[u(We,{"session-id":"","active-id":v.value,conversations:w.value,loading:G.value,disabled:j.value,onSelect:N,onCreate:ie,onRename:me,onDelete:fe},null,8,["active-id","conversations","loading","disabled"]),i("section",Qt,[i("div",Wt,[i("div",{ref_key:"messagesContainer",ref:se,class:"absolute inset-0 overflow-y-auto px-5 py-6"},[I.value?(c(),m("div",Xt,[u(y,{name:"i-lucide-loader-2",class:"h-5 w-5 animate-spin text-gray-400"})])):k.value.length===0?(c(),m("div",Yt,[i("div",Zt,[u(y,{name:"i-heroicons-chat-bubble-left-right",class:"h-6 w-6"})]),i("h2",ea,d(n(_)("ai.global.empty.title")),1),i("p",ta,d(n(_)("ai.global.empty.description")),1)])):(c(),m("div",aa,[n(ce)?(c(),m("div",sa,[i("button",{type:"button",class:"flex h-8 items-center gap-1.5 rounded-full px-3 text-xs text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-200",onClick:o[1]||(o[1]=(...l)=>n(Y)&&n(Y)(...l))},[u(y,{name:"i-heroicons-arrow-up",class:"h-3.5 w-3.5"}),B(" "+d(n(_)("ai.chat.history.loadEarlier")),1)])])):U("",!0),(c(!0),m(te,null,be(n(oe),l=>(c(),m(te,{key:l.id},[l.standalone?(c(),ee(he,{key:0,role:l.standalone.role,content:l.standalone.content,timestamp:l.standalone.timestamp},null,8,["role","content","timestamp"])):(c(),m("div",la,[l.user?(c(),ee(he,{key:0,role:l.user.role,"message-id":l.user.id,content:l.user.content,timestamp:l.user.timestamp,"entity-refs":l.user.entityRefs,highlighted:P.value===l.user.id},null,8,["role","message-id","content","timestamp","entity-refs","highlighted"])):U("",!0),l.assistant&&(l.assistant.content||l.assistant.contentBlocks?.length||!l.assistant.isStreaming)?(c(),ee(he,{key:1,role:l.assistant.role,"message-id":l.assistant.id,content:l.assistant.content,timestamp:l.assistant.timestamp,"is-streaming":l.assistant.isStreaming,"process-duration-ms":l.assistant.processDurationMs,"content-blocks":l.assistant.contentBlocks,"show-capture-button":!l.assistant.isStreaming,"active-tool":l.assistant.isStreaming?n(f).currentToolStatus:null,highlighted:P.value===l.assistant.id},null,8,["role","message-id","content","timestamp","is-streaming","process-duration-ms","content-blocks","show-capture-button","active-tool","highlighted"])):l.assistant?.isStreaming?(c(),ee(Xe,{key:2,"current-tool-status":n(f).currentToolStatus,"agent-status":n(f).agentStatus},null,8,["current-tool-status","agent-status"])):U("",!0)]))],64))),128))]))],512),u(Ge,{name:"fade-up"},{default:E(()=>[n(J)?(c(),m("button",{key:0,type:"button",class:"absolute bottom-4 left-1/2 z-10 flex -translate-x-1/2 items-center gap-1.5 rounded-full bg-gray-800/90 px-3 py-1.5 text-xs text-white shadow-lg backdrop-blur-sm hover:bg-gray-700 dark:bg-gray-700/90",onClick:o[2]||(o[2]=(...l)=>n(re)&&n(re)(...l))},[u(y,{name:"i-heroicons-arrow-down",class:"h-3.5 w-3.5"}),B(" "+d(n(_)("ai.chat.scrollToBottom")),1)])):U("",!0)]),_:1})]),i("div",oa,[i("div",na,[u(Ye,{ref_key:"chatInputRef",ref:L,embedded:"",disabled:j.value,status:j.value?"streaming":"ready","mention-scope":"global","skills-enabled":!1,placeholder:n(_)("ai.global.input.placeholder"),onSend:pe,onStop:o[3]||(o[3]=l=>n(h).stopGeneration(n(A)))},null,8,["disabled","status","placeholder"]),u(Ze,{class:"pb-1.5 pl-2 pr-[52px] pt-0.5","session-token-usage":n(f).sessionTokenUsage,"agent-status":n(f).agentStatus,"estimated-context-tokens":R.value},null,8,["session-token-usage","agent-status","estimated-context-tokens"])])])])]),u(Gt,{open:T.value,"onUpdate:open":o[4]||(o[4]=l=>T.value=l),onViewSource:W},null,8,["open"])])}}});export{Ca as default};
@@ -1 +1 @@
1
- import{E as l,e as n,G as u,H as d}from"./index-DnpnIyle.js";const o=Symbol("PeoplePageHeader");function P(e){const a=u(null),r=n(()=>a.value?.value??e.value);function s(t){a.value=t}return d(o,{setHeader:s}),{header:r}}function c(e){l(o)?.setHeader(e)}export{P as p,c as u};
1
+ import{E as l,e as n,G as u,H as d}from"./index-B1oj9KDv.js";const o=Symbol("PeoplePageHeader");function P(e){const a=u(null),r=n(()=>a.value?.value??e.value);function s(t){a.value=t}return d(o,{setHeader:s}),{header:r}}function c(e){l(o)?.setHeader(e)}export{P as p,c as u};
@@ -1 +1 @@
1
- import{h as x,b as s}from"./index-DnpnIyle.js";const k=x("prompt",()=>{const u=s(0),i=s({maxMessagesPerRequest:1e3,exportFormat:"markdown",sqlExportFormat:"csv",enableAutoSkill:!0,chartAutoMode:"suggest",searchContextBefore:2,searchContextAfter:2}),n=s([]),l=s([]),a=s({});function r(){u.value++}function d(e){i.value={...i.value,...e},r()}function c(e){n.value.push(e)}function f(e,t){const o=n.value.findIndex(h=>h.id===e);o!==-1&&(n.value[o]={...n.value[o],...t})}function m(e){const t=n.value.findIndex(o=>o.id===e);t!==-1&&n.value.splice(t,1)}function p(e){l.value.includes(e)||l.value.push(e)}function v(e,t){return a.value[`${e}:${t}`]}function g(e,t,o){a.value={...a.value,[`${e}:${t}`]:o}}return{aiConfigVersion:u,aiGlobalSettings:i,customKeywordTemplates:n,deletedPresetTemplateIds:l,thinkingLevels:a,notifyAIConfigChanged:r,updateAIGlobalSettings:d,addCustomKeywordTemplate:c,updateCustomKeywordTemplate:f,removeCustomKeywordTemplate:m,addDeletedPresetTemplateId:p,getThinkingLevel:v,setThinkingLevel:g}},{persist:!1,backendPersist:{pick:["aiGlobalSettings","customKeywordTemplates","deletedPresetTemplateIds","thinkingLevels"]}});export{k as u};
1
+ import{h as x,b as s}from"./index-B1oj9KDv.js";const k=x("prompt",()=>{const u=s(0),i=s({maxMessagesPerRequest:1e3,exportFormat:"markdown",sqlExportFormat:"csv",enableAutoSkill:!0,chartAutoMode:"suggest",searchContextBefore:2,searchContextAfter:2}),n=s([]),l=s([]),a=s({});function r(){u.value++}function d(e){i.value={...i.value,...e},r()}function c(e){n.value.push(e)}function f(e,t){const o=n.value.findIndex(h=>h.id===e);o!==-1&&(n.value[o]={...n.value[o],...t})}function m(e){const t=n.value.findIndex(o=>o.id===e);t!==-1&&n.value.splice(t,1)}function p(e){l.value.includes(e)||l.value.push(e)}function v(e,t){return a.value[`${e}:${t}`]}function g(e,t,o){a.value={...a.value,[`${e}:${t}`]:o}}return{aiConfigVersion:u,aiGlobalSettings:i,customKeywordTemplates:n,deletedPresetTemplateIds:l,thinkingLevels:a,notifyAIConfigChanged:r,updateAIGlobalSettings:d,addCustomKeywordTemplate:c,updateCustomKeywordTemplate:f,removeCustomKeywordTemplate:m,addDeletedPresetTemplateId:p,getThinkingLevel:v,setThinkingLevel:g}},{persist:!1,backendPersist:{pick:["aiGlobalSettings","customKeywordTemplates","deletedPresetTemplateIds","thinkingLevels"]}});export{k as u};
@@ -1 +1 @@
1
- import{C as l,b as d,V as r,S as u,W as p}from"./index-DnpnIyle.js";function h(e){const n=d(!1);function t(){n.value=!0}function a(o){l(()=>{n.value=!1,e?.(o)})}return{isComposing:n,handleCompositionStart:t,handleCompositionEnd:a}}const s="/ai/semantic-index";function i(e){return async n=>(await r(`${s}/${e}`,{sessionId:n})).status}const m={getConfig:()=>u(`${s}/config`),setConfig:(e,n)=>p(`${s}/config`,{config:e,apiKey:n}),listEnabled:async()=>(await u(`${s}/enabled`)).sessions,status:async e=>(await u(`${s}/status?sessionId=${encodeURIComponent(e)}`)).status,statusForSessions:async e=>(await r(`${s}/status`,{sessionIds:e})).sessions,enable:i("enable"),remove:i("remove"),build:i("build"),pause:i("pause"),cancel:i("cancel"),rebuild:i("rebuild"),buildPending:async()=>(await r(`${s}/build-pending`)).sessions,cleanup:()=>r(`${s}/cleanup`)};function S(){return m}function c(e){return(e??"").trim().replace(/\/+$/,"")}function $(e){if(!e)return!0;try{const n=new URL(e),t=n.hostname.toLowerCase(),a=t==="localhost"||t==="127.0.0.1"||t==="::1",o=n.port||(n.protocol==="https:"?"443":"80");return!(a&&o==="11434")}catch{return!0}}function f(e,n,t=!0){return!t||e?.mode!=="api"||!e.api?.authProfile?!1:c(e.api.baseUrl)===c(n)}function w(e,n){const t=n.apiBaseUrl.trim(),a=n.apiModel.trim(),o=f(e,t)?e?.api?.authProfile:void 0;return{version:e?.version??1,enabled:e?.enabled??!0,mode:n.mode,local:{modelId:n.localModelId,downloadSource:n.localDownloadSource},api:n.mode==="api"?{baseUrl:t,model:a,...o?{authProfile:o}:{}}:null,searchMaxResults:10}}export{S as a,w as b,f as c,$ as i,h as u};
1
+ import{C as l,b as d,V as r,S as u,W as p}from"./index-B1oj9KDv.js";function h(e){const n=d(!1);function t(){n.value=!0}function a(o){l(()=>{n.value=!1,e?.(o)})}return{isComposing:n,handleCompositionStart:t,handleCompositionEnd:a}}const s="/ai/semantic-index";function i(e){return async n=>(await r(`${s}/${e}`,{sessionId:n})).status}const m={getConfig:()=>u(`${s}/config`),setConfig:(e,n)=>p(`${s}/config`,{config:e,apiKey:n}),listEnabled:async()=>(await u(`${s}/enabled`)).sessions,status:async e=>(await u(`${s}/status?sessionId=${encodeURIComponent(e)}`)).status,statusForSessions:async e=>(await r(`${s}/status`,{sessionIds:e})).sessions,enable:i("enable"),remove:i("remove"),build:i("build"),pause:i("pause"),cancel:i("cancel"),rebuild:i("rebuild"),buildPending:async()=>(await r(`${s}/build-pending`)).sessions,cleanup:()=>r(`${s}/cleanup`)};function S(){return m}function c(e){return(e??"").trim().replace(/\/+$/,"")}function $(e){if(!e)return!0;try{const n=new URL(e),t=n.hostname.toLowerCase(),a=t==="localhost"||t==="127.0.0.1"||t==="::1",o=n.port||(n.protocol==="https:"?"443":"80");return!(a&&o==="11434")}catch{return!0}}function f(e,n,t=!0){return!t||e?.mode!=="api"||!e.api?.authProfile?!1:c(e.api.baseUrl)===c(n)}function w(e,n){const t=n.apiBaseUrl.trim(),a=n.apiModel.trim(),o=f(e,t)?e?.api?.authProfile:void 0;return{version:e?.version??1,enabled:e?.enabled??!0,mode:n.mode,local:{modelId:n.localModelId,downloadSource:n.localDownloadSource},api:n.mode==="api"?{baseUrl:t,model:a,...o?{authProfile:o}:{}}:null,searchMaxResults:10}}export{S as a,w as b,f as c,$ as i,h as u};
@@ -0,0 +1 @@
1
+ import{N as e}from"./index-B1oj9KDv.js";const t=e("insight.time-investment.ui-service");export{t as T};
@@ -1 +1 @@
1
- import{$ as e}from"./index-DnpnIyle.js";import"./vendor-snapdom--nZvo8Sg.js";function c(){return e("cache")}export{c as useCacheService};
1
+ import{$ as e}from"./index-B1oj9KDv.js";import"./vendor-snapdom--nZvo8Sg.js";function c(){return e("cache")}export{c as useCacheService};
@@ -0,0 +1 @@
1
+ import{N as e}from"./index-B1oj9KDv.js";const r=e("insight.annual-summary.ui-service");export{r as A};
@@ -0,0 +1 @@
1
+ import{e,t,i as r}from"./index-B1oj9KDv.js";function n(o){return e(()=>t(o)?!!r(o)?.closest("form"):!0)}export{n as u};
@@ -1 +1 @@
1
- import{d as G,a6 as Q,ap as H,K as z,x as J,o as u,f as N,aa as W,w as V,a as n,n as A,z as S,a7 as X,p as f,g as p,a8 as Y,aq as Z,c as h,F as ee,j as te,l as U,a9 as M,e as j,b as C,L as se,G as L}from"./index-DnpnIyle.js";import{u as ae}from"./useToast-CCPBE-Sy.js";const oe={class:"p-6"},ne={class:"mb-4 flex items-center justify-between"},re={class:"flex items-center gap-3"},le={class:"text-lg font-semibold text-gray-900 dark:text-white"},ie={class:"text-sm text-gray-500 dark:text-gray-400"},ce={class:"h-56 overflow-y-auto rounded-lg border border-gray-200 dark:border-gray-700"},ue={key:0,class:"flex h-full items-center justify-center"},de={key:1,class:"flex h-full items-center justify-center"},fe={class:"text-sm text-gray-500 dark:text-gray-400"},me={key:2,class:"divide-y divide-gray-100 dark:divide-gray-800"},ve=["onClick"],pe=["src","alt"],he={key:1,class:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-linear-to-br from-gray-300 to-gray-400 text-xs font-medium text-white dark:from-gray-600 dark:to-gray-700"},ye={class:"min-w-0 flex-1"},we={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},ge={class:"truncate text-xs text-gray-500 dark:text-gray-400"},_e={class:"mt-3 text-xs text-gray-500 dark:text-gray-400"},xe={key:0,class:"mt-2"},ke={class:"mt-5 flex items-center justify-between gap-2"},Ie={key:1},be={class:"flex gap-2"},Oe=G({__name:"OwnerPromptModal",props:{sessionId:{},modelValue:{type:Boolean,default:!1},chatType:{default:"group"},autoCheck:{type:Boolean,default:!1}},emits:["update:modelValue","saved","cleared"],setup(y,{emit:c}){const e=y,w=c,{t:a}=Q(),g=ae(),m=H(),i=j({get:()=>e.modelValue,set:t=>w("update:modelValue",t)}),o=C([]),s=C(!1),r=C(!1),P=C(!1),x=C(""),v=C(null),_=j(()=>m.sessions.find(t=>t.id===e.sessionId)?.ownerId??null);function k(t){return t.groupNickname||t.accountName||t.platformId}const O=j(()=>{const t=x.value.trim().toLowerCase(),I=o.value.filter(d=>d.platformId&&d.platformId.trim()!=="");return t?I.filter(d=>[d.platformId,d.accountName??"",d.groupNickname??"",...d.aliases].some(b=>b.toLowerCase().includes(t))):I});async function R(){if(e.sessionId){s.value=!0;try{o.value=await se().getMembers(e.sessionId)}catch(t){console.error("加载成员列表失败:",t)}finally{s.value=!1}}}async function B(){if(!(!e.sessionId||!e.autoCheck)&&!_.value)try{const t=await m.tryApplyOwnerProfile(e.sessionId);if(t.applied||t.reason==="already_set"||t.reason==="missing_session"||t.excluded)return;i.value=!0}catch(t){console.error("检查会话 owner 失败:",t)}}async function $(){if(!(!v.value||!e.sessionId)){r.value=!0;try{const t=await m.setOwnerAndApplyProfile(e.sessionId,v.value);t.updatedSessionIds.length>0?g.success(a("members.ownerPrompt.saved"),{description:a("members.ownerPrompt.appliedToOthers",{count:t.updatedSessionIds.length})}):g.success(a("members.ownerPrompt.saved")),w("saved",t.ownerId),i.value=!1}catch(t){console.error("设置会话 owner 失败:",t),g.fail(a("members.ownerPrompt.saveFailed"))}finally{r.value=!1}}}async function F(){if(!(!e.sessionId||!_.value)){r.value=!0;try{await m.updateSessionOwnerId(e.sessionId,null)&&(v.value=null,w("cleared"),i.value=!1)}catch(t){console.error("清除会话 owner 失败:",t)}finally{r.value=!1}}}async function K(){if(e.sessionId){P.value=!0;try{await m.excludeOwnerSession(e.sessionId),i.value=!1}catch(t){console.error("忽略 owner 提醒失败:",t)}finally{P.value=!1}}}function D(){i.value=!1}function T(){x.value="",v.value=_.value,o.value=[],R()}return z(i,t=>{t&&T()},{immediate:!0}),z(()=>e.sessionId,()=>{i.value&&T(),B()}),J(()=>{B()}),(t,I)=>{const d=X,b=Y,q=Z,E=W;return u(),N(E,{open:i.value,"onUpdate:open":I[1]||(I[1]=l=>i.value=l),ui:{content:"max-w-md z-[111]",overlay:"z-[110]"}},{content:V(()=>[n("div",oe,[n("div",ne,[n("div",re,[n("div",{class:A(["flex h-10 w-10 items-center justify-center rounded-full bg-linear-to-br",y.chatType==="group"?"from-pink-400 to-pink-600":"from-purple-400 to-purple-600"])},[S(d,{name:"i-heroicons-user",class:"h-5 w-5 text-white"})],2),n("div",null,[n("h3",le,f(p(a)("members.ownerPrompt.title")),1),n("p",ie,f(p(a)("members.ownerPrompt.subtitle")),1)])]),S(b,{icon:"i-heroicons-x-mark",color:"neutral",variant:"ghost",size:"sm",onClick:D})]),S(q,{modelValue:x.value,"onUpdate:modelValue":I[0]||(I[0]=l=>x.value=l),placeholder:p(a)("members.ownerPrompt.searchPlaceholder"),icon:"i-heroicons-magnifying-glass",class:"mb-3 w-full"},null,8,["modelValue","placeholder"]),n("div",ce,[s.value?(u(),h("div",ue,[S(d,{name:"i-heroicons-arrow-path",class:"h-5 w-5 animate-spin text-gray-400"})])):O.value.length===0?(u(),h("div",de,[n("p",fe,f(x.value?p(a)("members.ownerPrompt.noMatch"):p(a)("members.ownerPrompt.empty")),1)])):(u(),h("ul",me,[(u(!0),h(ee,null,te(O.value,l=>(u(),h("li",{key:l.id},[n("button",{type:"button",class:A(["flex w-full items-center gap-3 px-3 py-2 text-left hover:bg-gray-50 dark:hover:bg-gray-800/50",v.value===l.platformId?"bg-primary-50 dark:bg-primary-900/20":""]),onClick:Se=>v.value=l.platformId},[l.avatar?(u(),h("img",{key:0,src:l.avatar,alt:k(l),class:"h-8 w-8 shrink-0 rounded-full object-cover"},null,8,pe)):(u(),h("div",he,f(k(l).slice(0,1)),1)),n("div",ye,[n("p",we,f(k(l)),1),n("p",ge,f(l.platformId),1)]),v.value===l.platformId?(u(),N(d,{key:2,name:"i-heroicons-check-circle-solid",class:"h-5 w-5 shrink-0 text-primary-500"})):U("",!0)],10,ve)]))),128))]))]),n("p",_e,f(p(a)("members.ownerPrompt.description")),1),_.value?(u(),h("div",xe,[S(b,{variant:"link",color:"neutral",size:"xs",disabled:r.value,onClick:F},{default:V(()=>[M(f(p(a)("members.ownerPrompt.clear")),1)]),_:1},8,["disabled"])])):U("",!0),n("div",ke,[_.value?(u(),h("span",Ie)):(u(),N(b,{key:0,variant:"soft",color:"primary",size:"sm",loading:P.value,onClick:K},{default:V(()=>[M(f(p(a)("members.ownerPrompt.notInConversation")),1)]),_:1},8,["loading"])),n("div",be,[S(b,{variant:"ghost",color:"neutral",onClick:D},{default:V(()=>[M(f(p(a)("members.ownerPrompt.later")),1)]),_:1}),S(b,{color:"primary",loading:r.value,disabled:!v.value,onClick:$},{default:V(()=>[M(f(p(a)("members.ownerPrompt.save")),1)]),_:1},8,["loading","disabled"])])])])]),_:1},8,["open"])}}});function Ve(y={}){const c=y.initialState??{field:null,direction:null},e=L({...c});function w(o){if(e.value.field!==o){e.value={field:o,direction:"asc"};return}if(e.value.direction==="asc"){e.value={field:o,direction:"desc"};return}if(e.value.direction==="desc"){e.value={field:null,direction:null};return}e.value={field:o,direction:"asc"}}function a(o,s){e.value={field:o,direction:s}}function g(){e.value={...c}}function m(o){return e.value.field===o?e.value.direction:null}function i(o,s){return m(o)===s}return{sortState:e,toggleSort:w,setSort:a,resetSort:g,getSortDirection:m,isSortActive:i}}function Me(y){const c=L(new Set),e=C(null);z(y.rows,()=>{e.value=null});function w(s){c.value=new Set(s)}function a(){w([]),e.value=null}function g(s){const r=new Set(c.value);r.has(s)?r.delete(s):r.add(s),c.value=r}function m(s){return c.value.has(s)}function i(s,r,P){if(P.shiftKey&&e.value!==null){const x=Math.min(e.value,s),v=Math.max(e.value,s),_=new Set(c.value);for(let k=x;k<=v;k+=1){const O=y.rows.value[k];O&&_.add(y.getRowId(O))}c.value=_}else g(r);e.value=s}function o(s){!s.shiftKey||s.target?.closest?.('input, textarea, [contenteditable="true"]')||s.preventDefault()}return{selectedIds:c,setSelection:w,clearSelection:a,toggleSelection:g,isSelected:m,handleRowClick:i,handleRowMouseDown:o}}export{Oe as _,Me as a,Ve as u};
1
+ import{d as G,a6 as Q,ap as H,K as z,x as J,o as u,f as N,aa as W,w as V,a as n,n as A,z as S,a7 as X,p as f,g as p,a8 as Y,aq as Z,c as h,F as ee,j as te,l as U,a9 as M,e as j,b as C,L as se,G as L}from"./index-B1oj9KDv.js";import{u as ae}from"./useToast-B5LaA6c-.js";const oe={class:"p-6"},ne={class:"mb-4 flex items-center justify-between"},re={class:"flex items-center gap-3"},le={class:"text-lg font-semibold text-gray-900 dark:text-white"},ie={class:"text-sm text-gray-500 dark:text-gray-400"},ce={class:"h-56 overflow-y-auto rounded-lg border border-gray-200 dark:border-gray-700"},ue={key:0,class:"flex h-full items-center justify-center"},de={key:1,class:"flex h-full items-center justify-center"},fe={class:"text-sm text-gray-500 dark:text-gray-400"},me={key:2,class:"divide-y divide-gray-100 dark:divide-gray-800"},ve=["onClick"],pe=["src","alt"],he={key:1,class:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-linear-to-br from-gray-300 to-gray-400 text-xs font-medium text-white dark:from-gray-600 dark:to-gray-700"},ye={class:"min-w-0 flex-1"},we={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},ge={class:"truncate text-xs text-gray-500 dark:text-gray-400"},_e={class:"mt-3 text-xs text-gray-500 dark:text-gray-400"},xe={key:0,class:"mt-2"},ke={class:"mt-5 flex items-center justify-between gap-2"},Ie={key:1},be={class:"flex gap-2"},Oe=G({__name:"OwnerPromptModal",props:{sessionId:{},modelValue:{type:Boolean,default:!1},chatType:{default:"group"},autoCheck:{type:Boolean,default:!1}},emits:["update:modelValue","saved","cleared"],setup(y,{emit:c}){const e=y,w=c,{t:a}=Q(),g=ae(),m=H(),i=j({get:()=>e.modelValue,set:t=>w("update:modelValue",t)}),o=C([]),s=C(!1),r=C(!1),P=C(!1),x=C(""),v=C(null),_=j(()=>m.sessions.find(t=>t.id===e.sessionId)?.ownerId??null);function k(t){return t.groupNickname||t.accountName||t.platformId}const O=j(()=>{const t=x.value.trim().toLowerCase(),I=o.value.filter(d=>d.platformId&&d.platformId.trim()!=="");return t?I.filter(d=>[d.platformId,d.accountName??"",d.groupNickname??"",...d.aliases].some(b=>b.toLowerCase().includes(t))):I});async function R(){if(e.sessionId){s.value=!0;try{o.value=await se().getMembers(e.sessionId)}catch(t){console.error("加载成员列表失败:",t)}finally{s.value=!1}}}async function B(){if(!(!e.sessionId||!e.autoCheck)&&!_.value)try{const t=await m.tryApplyOwnerProfile(e.sessionId);if(t.applied||t.reason==="already_set"||t.reason==="missing_session"||t.excluded)return;i.value=!0}catch(t){console.error("检查会话 owner 失败:",t)}}async function $(){if(!(!v.value||!e.sessionId)){r.value=!0;try{const t=await m.setOwnerAndApplyProfile(e.sessionId,v.value);t.updatedSessionIds.length>0?g.success(a("members.ownerPrompt.saved"),{description:a("members.ownerPrompt.appliedToOthers",{count:t.updatedSessionIds.length})}):g.success(a("members.ownerPrompt.saved")),w("saved",t.ownerId),i.value=!1}catch(t){console.error("设置会话 owner 失败:",t),g.fail(a("members.ownerPrompt.saveFailed"))}finally{r.value=!1}}}async function F(){if(!(!e.sessionId||!_.value)){r.value=!0;try{await m.updateSessionOwnerId(e.sessionId,null)&&(v.value=null,w("cleared"),i.value=!1)}catch(t){console.error("清除会话 owner 失败:",t)}finally{r.value=!1}}}async function K(){if(e.sessionId){P.value=!0;try{await m.excludeOwnerSession(e.sessionId),i.value=!1}catch(t){console.error("忽略 owner 提醒失败:",t)}finally{P.value=!1}}}function D(){i.value=!1}function T(){x.value="",v.value=_.value,o.value=[],R()}return z(i,t=>{t&&T()},{immediate:!0}),z(()=>e.sessionId,()=>{i.value&&T(),B()}),J(()=>{B()}),(t,I)=>{const d=X,b=Y,q=Z,E=W;return u(),N(E,{open:i.value,"onUpdate:open":I[1]||(I[1]=l=>i.value=l),ui:{content:"max-w-md z-[111]",overlay:"z-[110]"}},{content:V(()=>[n("div",oe,[n("div",ne,[n("div",re,[n("div",{class:A(["flex h-10 w-10 items-center justify-center rounded-full bg-linear-to-br",y.chatType==="group"?"from-pink-400 to-pink-600":"from-purple-400 to-purple-600"])},[S(d,{name:"i-heroicons-user",class:"h-5 w-5 text-white"})],2),n("div",null,[n("h3",le,f(p(a)("members.ownerPrompt.title")),1),n("p",ie,f(p(a)("members.ownerPrompt.subtitle")),1)])]),S(b,{icon:"i-heroicons-x-mark",color:"neutral",variant:"ghost",size:"sm",onClick:D})]),S(q,{modelValue:x.value,"onUpdate:modelValue":I[0]||(I[0]=l=>x.value=l),placeholder:p(a)("members.ownerPrompt.searchPlaceholder"),icon:"i-heroicons-magnifying-glass",class:"mb-3 w-full"},null,8,["modelValue","placeholder"]),n("div",ce,[s.value?(u(),h("div",ue,[S(d,{name:"i-heroicons-arrow-path",class:"h-5 w-5 animate-spin text-gray-400"})])):O.value.length===0?(u(),h("div",de,[n("p",fe,f(x.value?p(a)("members.ownerPrompt.noMatch"):p(a)("members.ownerPrompt.empty")),1)])):(u(),h("ul",me,[(u(!0),h(ee,null,te(O.value,l=>(u(),h("li",{key:l.id},[n("button",{type:"button",class:A(["flex w-full items-center gap-3 px-3 py-2 text-left hover:bg-gray-50 dark:hover:bg-gray-800/50",v.value===l.platformId?"bg-primary-50 dark:bg-primary-900/20":""]),onClick:Se=>v.value=l.platformId},[l.avatar?(u(),h("img",{key:0,src:l.avatar,alt:k(l),class:"h-8 w-8 shrink-0 rounded-full object-cover"},null,8,pe)):(u(),h("div",he,f(k(l).slice(0,1)),1)),n("div",ye,[n("p",we,f(k(l)),1),n("p",ge,f(l.platformId),1)]),v.value===l.platformId?(u(),N(d,{key:2,name:"i-heroicons-check-circle-solid",class:"h-5 w-5 shrink-0 text-primary-500"})):U("",!0)],10,ve)]))),128))]))]),n("p",_e,f(p(a)("members.ownerPrompt.description")),1),_.value?(u(),h("div",xe,[S(b,{variant:"link",color:"neutral",size:"xs",disabled:r.value,onClick:F},{default:V(()=>[M(f(p(a)("members.ownerPrompt.clear")),1)]),_:1},8,["disabled"])])):U("",!0),n("div",ke,[_.value?(u(),h("span",Ie)):(u(),N(b,{key:0,variant:"soft",color:"primary",size:"sm",loading:P.value,onClick:K},{default:V(()=>[M(f(p(a)("members.ownerPrompt.notInConversation")),1)]),_:1},8,["loading"])),n("div",be,[S(b,{variant:"ghost",color:"neutral",onClick:D},{default:V(()=>[M(f(p(a)("members.ownerPrompt.later")),1)]),_:1}),S(b,{color:"primary",loading:r.value,disabled:!v.value,onClick:$},{default:V(()=>[M(f(p(a)("members.ownerPrompt.save")),1)]),_:1},8,["loading","disabled"])])])])]),_:1},8,["open"])}}});function Ve(y={}){const c=y.initialState??{field:null,direction:null},e=L({...c});function w(o){if(e.value.field!==o){e.value={field:o,direction:"asc"};return}if(e.value.direction==="asc"){e.value={field:o,direction:"desc"};return}if(e.value.direction==="desc"){e.value={field:null,direction:null};return}e.value={field:o,direction:"asc"}}function a(o,s){e.value={field:o,direction:s}}function g(){e.value={...c}}function m(o){return e.value.field===o?e.value.direction:null}function i(o,s){return m(o)===s}return{sortState:e,toggleSort:w,setSort:a,resetSort:g,getSortDirection:m,isSortActive:i}}function Me(y){const c=L(new Set),e=C(null);z(y.rows,()=>{e.value=null});function w(s){c.value=new Set(s)}function a(){w([]),e.value=null}function g(s){const r=new Set(c.value);r.has(s)?r.delete(s):r.add(s),c.value=r}function m(s){return c.value.has(s)}function i(s,r,P){if(P.shiftKey&&e.value!==null){const x=Math.min(e.value,s),v=Math.max(e.value,s),_=new Set(c.value);for(let k=x;k<=v;k+=1){const O=y.rows.value[k];O&&_.add(y.getRowId(O))}c.value=_}else g(r);e.value=s}function o(s){!s.shiftKey||s.target?.closest?.('input, textarea, [contenteditable="true"]')||s.preventDefault()}return{selectedIds:c,setSelection:w,clearSelection:a,toggleSelection:g,isSelected:m,handleRowClick:i,handleRowMouseDown:o}}export{Oe as _,Me as a,Ve as u};
@@ -1 +1 @@
1
- import{a4 as c}from"./index-DnpnIyle.js";const t=2e3;function e(){const a=c(),s=o=>a.add({duration:t,...o});return{add:s,success:(o,r={})=>s({title:o,color:"success",...r}),fail:(o,r={})=>s({title:o,color:"error",...r}),info:(o,r={})=>s({title:o,color:"primary",...r}),warn:(o,r={})=>s({title:o,color:"warning",...r})}}export{e as u};
1
+ import{a4 as c}from"./index-B1oj9KDv.js";const t=2e3;function e(){const a=c(),s=o=>a.add({duration:t,...o});return{add:s,success:(o,r={})=>s({title:o,color:"success",...r}),fail:(o,r={})=>s({title:o,color:"error",...r}),info:(o,r={})=>s({title:o,color:"primary",...r}),warn:(o,r={})=>s({title:o,color:"warning",...r})}}export{e as u};
@@ -1,4 +1,4 @@
1
- import{M as w,f as B,O,ar as A,a0 as k,j as _,G as M,b as U,N as E,I as z,a1 as T,T as b,ak as V,R as Y,w as X,r as P}from"./RelationshipGalaxyCanvas-Cn7Eta5U.js";import{F as q}from"./Filter-CMfRHIoK.js";import"./index-DnpnIyle.js";import"./vendor-snapdom--nZvo8Sg.js";import"./index-ClHMs0-a.js";import"./Tabs-RWKHwtfM.js";import"./RovingFocusItem-DHaiTb4j.js";import"./useToast-CCPBE-Sy.js";import"./LoadingState.vue_vue_type_script_setup_true_lang-CoeQsaiL.js";import"./people-page-header-Cx5r9Bk2.js";import"./relationship-galaxy-connections-Cg4G5yYE.js";import"./relationship-galaxy-viewport-Cwfa51ER.js";const v=new w;function G(g,e){e.clear();const t=e.matrix;for(let r=0;r<g.length;r++){const i=g[r];if(i.globalDisplayStatus<7)continue;const s=i.renderGroup??i.parentRenderGroup;s?.isCachedAsTexture?e.matrix=v.copyFrom(s.textureOffsetInverseTransform).append(i.worldTransform):s?._parentCacheAsTextureRenderGroup?e.matrix=v.copyFrom(s._parentCacheAsTextureRenderGroup.inverseWorldTransform).append(i.groupTransform):e.matrix=i.worldTransform,e.addBounds(i.bounds)}return e.matrix=t,e}function y(g){return typeof g.getCanvasFilterString=="function"}class L{constructor(){this.skip=!1,this.useClip=!1,this.filters=null,this.container=null,this.bounds=new k,this.cssFilterString=""}}class R{constructor(e){this._filterStack=[],this._filterStackIndex=0,this._savedStates=[],this._alphaMultiplier=1,this._warnedFilterTypes=new Set,this.renderer=e}push(e){const t=this._pushFilterFrame(),r=e.filterEffect.filters;if(t.skip=!1,t.useClip=!1,t.filters=r,t.container=e.container,t.cssFilterString="",r.every(o=>!o.enabled)){t.skip=!0;return}const i=[],s=1;for(const o of r){if(!o.enabled)continue;if(!y(o)){this._warnUnsupportedFilter(o);continue}const l=o.getCanvasFilterString();if(l===null){this._warnUnsupportedFilter(o);continue}l&&i.push(l)}if(i.length===0&&s===1){t.skip=!0;return}t.cssFilterString=i.join(" "),this._calculateFilterArea(e,t.bounds),t.useClip=!!e.filterEffect.filterArea;const n=this.renderer.canvasContext.activeContext,a=n.filter||"none";if(this._savedStates.push({filter:a,alphaMultiplier:this._alphaMultiplier}),t.useClip&&Number.isFinite(t.bounds.width)&&Number.isFinite(t.bounds.height)&&t.bounds.width>0&&t.bounds.height>0){const o=this.renderer.canvasContext.activeResolution||1;n.save(),n.setTransform(1,0,0,1,0,0),n.beginPath(),n.rect(t.bounds.x*o,t.bounds.y*o,t.bounds.width*o,t.bounds.height*o),n.clip()}else t.useClip=!1;t.cssFilterString&&(n.filter=a!=="none"?`${a} ${t.cssFilterString}`:t.cssFilterString)}pop(){const e=this._popFilterFrame();if(e.skip)return;const t=this._savedStates.pop();if(!t)return;const r=this.renderer.canvasContext.activeContext;e.useClip?r.restore():r.filter=t.filter,this._alphaMultiplier=t.alphaMultiplier}generateFilteredTexture({texture:e,filters:t}){if(!t?.length||t.every(d=>!d.enabled))return e;const r=[],i=1;for(const d of t){if(!d.enabled)continue;if(!y(d)){this._warnUnsupportedFilter(d);continue}const h=d.getCanvasFilterString();if(h===null){this._warnUnsupportedFilter(d);continue}h&&r.push(h)}if(r.length===0&&i===1)return e;const s=B.getCanvasSource(e);if(!s)return e;const n=e.frame,a=e.source._resolution??e.source.resolution??1,o=n.width,l=n.height,f=O.getOptimalCanvasAndContext(o,l,a),{canvas:c,context:u}=f;u.setTransform(1,0,0,1,0,0),u.clearRect(0,0,c.width,c.height),r.length&&(u.filter=r.join(" "));const p=n.x*a,m=n.y*a,x=o*a,F=l*a;return u.drawImage(s,p,m,x,F,0,0,x,F),u.filter="none",u.globalAlpha=1,A(c,o,l,a)}_calculateFilterArea(e,t){if(e.renderables?G(e.renderables,t):e.filterEffect.filterArea?(t.clear(),t.addRect(e.filterEffect.filterArea),t.applyMatrix(e.container.worldTransform)):e.container.getFastGlobalBounds(!0,t),e.container){const i=(e.container.renderGroup||e.container.parentRenderGroup)?.cacheToLocalTransform;i&&t.applyMatrix(i)}}_warnUnsupportedFilter(e){const t=e?.constructor?.name||"Filter";this._warnedFilterTypes.has(t)||(this._warnedFilterTypes.add(t),console.warn(`CanvasRenderer: filter "${t}" is not supported in Canvas2D and will be skipped.`))}get alphaMultiplier(){return this._alphaMultiplier}_pushFilterFrame(){let e=this._filterStack[this._filterStackIndex];return e||(e=this._filterStack[this._filterStackIndex]=new L),this._filterStackIndex++,e}_popFilterFrame(){return this._filterStackIndex<=0?this._filterStack[0]:(this._filterStackIndex--,this._filterStack[this._filterStackIndex])}destroy(){this._filterStack=null,this._savedStates=null,this._warnedFilterTypes=null,this._alphaMultiplier=1}}R.extension={type:[_.CanvasSystem],name:"filter"};var W=`in vec2 aPosition;
1
+ import{M as w,f as B,O,ar as A,a0 as k,j as _,G as M,b as U,N as E,I as z,a1 as T,T as b,ak as V,R as Y,w as X,r as P}from"./RelationshipGalaxyCanvas-CDhljGyJ.js";import{F as q}from"./Filter-CByj_rCR.js";import"./index-B1oj9KDv.js";import"./vendor-snapdom--nZvo8Sg.js";import"./index-D8cHMqV-.js";import"./Tabs-BMq9wODW.js";import"./RovingFocusItem-BJMUQ5DJ.js";import"./useToast-B5LaA6c-.js";import"./LoadingState.vue_vue_type_script_setup_true_lang-BBcCt_Qm.js";import"./people-page-header-BbYSSpsO.js";import"./relationship-galaxy-connections-Cg4G5yYE.js";import"./relationship-galaxy-viewport-Cwfa51ER.js";const v=new w;function G(g,e){e.clear();const t=e.matrix;for(let r=0;r<g.length;r++){const i=g[r];if(i.globalDisplayStatus<7)continue;const s=i.renderGroup??i.parentRenderGroup;s?.isCachedAsTexture?e.matrix=v.copyFrom(s.textureOffsetInverseTransform).append(i.worldTransform):s?._parentCacheAsTextureRenderGroup?e.matrix=v.copyFrom(s._parentCacheAsTextureRenderGroup.inverseWorldTransform).append(i.groupTransform):e.matrix=i.worldTransform,e.addBounds(i.bounds)}return e.matrix=t,e}function y(g){return typeof g.getCanvasFilterString=="function"}class L{constructor(){this.skip=!1,this.useClip=!1,this.filters=null,this.container=null,this.bounds=new k,this.cssFilterString=""}}class R{constructor(e){this._filterStack=[],this._filterStackIndex=0,this._savedStates=[],this._alphaMultiplier=1,this._warnedFilterTypes=new Set,this.renderer=e}push(e){const t=this._pushFilterFrame(),r=e.filterEffect.filters;if(t.skip=!1,t.useClip=!1,t.filters=r,t.container=e.container,t.cssFilterString="",r.every(o=>!o.enabled)){t.skip=!0;return}const i=[],s=1;for(const o of r){if(!o.enabled)continue;if(!y(o)){this._warnUnsupportedFilter(o);continue}const l=o.getCanvasFilterString();if(l===null){this._warnUnsupportedFilter(o);continue}l&&i.push(l)}if(i.length===0&&s===1){t.skip=!0;return}t.cssFilterString=i.join(" "),this._calculateFilterArea(e,t.bounds),t.useClip=!!e.filterEffect.filterArea;const n=this.renderer.canvasContext.activeContext,a=n.filter||"none";if(this._savedStates.push({filter:a,alphaMultiplier:this._alphaMultiplier}),t.useClip&&Number.isFinite(t.bounds.width)&&Number.isFinite(t.bounds.height)&&t.bounds.width>0&&t.bounds.height>0){const o=this.renderer.canvasContext.activeResolution||1;n.save(),n.setTransform(1,0,0,1,0,0),n.beginPath(),n.rect(t.bounds.x*o,t.bounds.y*o,t.bounds.width*o,t.bounds.height*o),n.clip()}else t.useClip=!1;t.cssFilterString&&(n.filter=a!=="none"?`${a} ${t.cssFilterString}`:t.cssFilterString)}pop(){const e=this._popFilterFrame();if(e.skip)return;const t=this._savedStates.pop();if(!t)return;const r=this.renderer.canvasContext.activeContext;e.useClip?r.restore():r.filter=t.filter,this._alphaMultiplier=t.alphaMultiplier}generateFilteredTexture({texture:e,filters:t}){if(!t?.length||t.every(d=>!d.enabled))return e;const r=[],i=1;for(const d of t){if(!d.enabled)continue;if(!y(d)){this._warnUnsupportedFilter(d);continue}const h=d.getCanvasFilterString();if(h===null){this._warnUnsupportedFilter(d);continue}h&&r.push(h)}if(r.length===0&&i===1)return e;const s=B.getCanvasSource(e);if(!s)return e;const n=e.frame,a=e.source._resolution??e.source.resolution??1,o=n.width,l=n.height,f=O.getOptimalCanvasAndContext(o,l,a),{canvas:c,context:u}=f;u.setTransform(1,0,0,1,0,0),u.clearRect(0,0,c.width,c.height),r.length&&(u.filter=r.join(" "));const p=n.x*a,m=n.y*a,x=o*a,F=l*a;return u.drawImage(s,p,m,x,F,0,0,x,F),u.filter="none",u.globalAlpha=1,A(c,o,l,a)}_calculateFilterArea(e,t){if(e.renderables?G(e.renderables,t):e.filterEffect.filterArea?(t.clear(),t.addRect(e.filterEffect.filterArea),t.applyMatrix(e.container.worldTransform)):e.container.getFastGlobalBounds(!0,t),e.container){const i=(e.container.renderGroup||e.container.parentRenderGroup)?.cacheToLocalTransform;i&&t.applyMatrix(i)}}_warnUnsupportedFilter(e){const t=e?.constructor?.name||"Filter";this._warnedFilterTypes.has(t)||(this._warnedFilterTypes.add(t),console.warn(`CanvasRenderer: filter "${t}" is not supported in Canvas2D and will be skipped.`))}get alphaMultiplier(){return this._alphaMultiplier}_pushFilterFrame(){let e=this._filterStack[this._filterStackIndex];return e||(e=this._filterStack[this._filterStackIndex]=new L),this._filterStackIndex++,e}_popFilterFrame(){return this._filterStackIndex<=0?this._filterStack[0]:(this._filterStackIndex--,this._filterStack[this._filterStackIndex])}destroy(){this._filterStack=null,this._savedStates=null,this._warnedFilterTypes=null,this._alphaMultiplier=1}}R.extension={type:[_.CanvasSystem],name:"filter"};var W=`in vec2 aPosition;
2
2
  out vec2 vTextureCoord;
3
3
 
4
4
  uniform vec4 uInputSize;
@@ -5,7 +5,7 @@
5
5
  <title>ChatLab</title>
6
6
  <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
7
7
  <link rel="icon" href="/favicon.ico" />
8
- <script type="module" crossorigin src="/assets/index-DnpnIyle.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-B1oj9KDv.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/vendor-snapdom--nZvo8Sg.js">
10
10
  <link rel="stylesheet" crossorigin href="/assets/index-BZpR015e.css">
11
11
  </head>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chatlab-cli",
3
- "version": "0.37.0",
3
+ "version": "0.37.1",
4
4
  "description": "ChatLab CLI & Service - Chat history analysis tool",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,8 +48,8 @@
48
48
  "dependencies": {
49
49
  "@fastify/multipart": "^10.0.0",
50
50
  "@fastify/static": "^9.1.3",
51
- "@earendil-works/pi-agent-core": "0.83.0",
52
- "@earendil-works/pi-ai": "0.83.0",
51
+ "@earendil-works/pi-agent-core": "0.84.2",
52
+ "@earendil-works/pi-ai": "0.84.2",
53
53
  "@modelcontextprotocol/sdk": "^1.12.1",
54
54
  "better-sqlite3": "^12.4.6",
55
55
  "commander": "^13.1.0",