chatlab-cli 0.21.1 → 0.22.0

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 (60) hide show
  1. package/README.md +5 -5
  2. package/dist/{chunk-OQVKZTVD.mjs → chunk-3UBWLWXB.mjs} +2 -2
  3. package/dist/{chunk-AIR7EAF4.mjs → chunk-4U45E7TO.mjs} +2 -2
  4. package/dist/{chunk-OZWXLRJL.mjs → chunk-6GLMVWGA.mjs} +24 -15
  5. package/dist/chunk-6GLMVWGA.mjs.map +1 -0
  6. package/dist/{chunk-2AIOU3PW.mjs → chunk-6NB475AA.mjs} +12 -3
  7. package/dist/chunk-6NB475AA.mjs.map +1 -0
  8. package/dist/{chunk-LI4X52E7.mjs → chunk-AMMSVJG4.mjs} +325 -94
  9. package/dist/chunk-AMMSVJG4.mjs.map +1 -0
  10. package/dist/{chunk-4GI2UPCS.mjs → chunk-D2XJ4Z7G.mjs} +2 -2
  11. package/dist/{chunk-7HQWGLX6.mjs → chunk-QJQJIUUS.mjs} +102 -96
  12. package/dist/chunk-QJQJIUUS.mjs.map +1 -0
  13. package/dist/chunk-VSOWNKPA.mjs +49 -0
  14. package/dist/cli.mjs +4 -3
  15. package/dist/{http-DHQI4G5J.mjs → http-R5UECMPJ.mjs} +8 -7
  16. package/dist/{import-CQWGIMZQ.mjs → import-3LOWRXWA.mjs} +5 -4
  17. package/dist/index.mjs +8 -7
  18. package/dist/{mcp-7Q3FEI3Z.mjs → mcp-WBHNLED2.mjs} +8 -7
  19. package/dist/mcp-WBHNLED2.mjs.map +1 -0
  20. package/dist/{src-QBT5SYW5.mjs → src-UHM2UDRD.mjs} +3 -2
  21. package/dist/{stream-import-VG7RP6KJ.mjs → stream-import-V6Z7DXSW.mjs} +4 -3
  22. package/dist/stream-import-V6Z7DXSW.mjs.map +1 -0
  23. package/dist/update-checker-MQMQ6A4B.mjs +191 -0
  24. package/dist/update-checker-MQMQ6A4B.mjs.map +1 -0
  25. package/dist-web/assets/{DebugToolsPanel-CoBtqb--.css → DebugToolsPanel-DkbsB6lr.css} +1 -1
  26. package/dist-web/assets/{DebugToolsPanel.vue_vue_type_script_setup_true_lang-CpFGhsl5.js → DebugToolsPanel.vue_vue_type_script_setup_true_lang-CxYyne-Q.js} +5 -5
  27. package/dist-web/assets/{EChartWordcloud-BYLFxPAX.js → EChartWordcloud-Ubal_aYg.js} +1 -1
  28. package/dist-web/assets/{MessageExportModal-DTgxz1eQ.js → MessageExportModal-De5_tX6a.js} +1 -1
  29. package/dist-web/assets/{electron-CTK4NJag.js → electron-CRSL7qPM.js} +1 -1
  30. package/dist-web/assets/{fetch-C2vUkdnA.js → fetch-Q-PqsiMb.js} +1 -1
  31. package/dist-web/assets/{fetch-CTZXLLcn.js → fetch-cFjLAPG2.js} +1 -1
  32. package/dist-web/assets/{index-DeG0EHOT.js → index-BJUGnYn5.js} +1 -1
  33. package/dist-web/assets/{index-DuhN8jAf.js → index-B_31fXeB.js} +2 -2
  34. package/dist-web/assets/index-CbOwHYzO.css +1 -0
  35. package/dist-web/assets/index-DKMUn8F5.js +173 -0
  36. package/dist-web/assets/{index-C4B0hv6C.js → index-D_ksezTw.js} +4 -4
  37. package/dist-web/assets/index-Dhg3SDb6.js +7 -0
  38. package/dist-web/assets/logo-DXIuG_WE.svg +17 -0
  39. package/dist-web/assets/{vendor-echarts-C13vDgZW.js → vendor-echarts-C5u62NnM.js} +1 -1
  40. package/dist-web/assets/{vendor-echarts-wordcloud-uVdwYsYa.js → vendor-echarts-wordcloud-CZ9gsX8l.js} +1 -1
  41. package/dist-web/assets/{vendor-nuxt-ui-CYMNNdeD.js → vendor-nuxt-ui-7OAuiz_i.js} +1 -1
  42. package/dist-web/assets/{vendor-zrender-5DcYjSZk.js → vendor-zrender-DFl4U2Oe.js} +1 -1
  43. package/dist-web/assets/{web-DImo6Kjz.js → web-CZe0Ismu.js} +1 -1
  44. package/dist-web/index.html +3 -3
  45. package/package.json +4 -3
  46. package/dist/chunk-2AIOU3PW.mjs.map +0 -1
  47. package/dist/chunk-7HQWGLX6.mjs.map +0 -1
  48. package/dist/chunk-LI4X52E7.mjs.map +0 -1
  49. package/dist/chunk-OZWXLRJL.mjs.map +0 -1
  50. package/dist/mcp-7Q3FEI3Z.mjs.map +0 -1
  51. package/dist-web/assets/index-B8867dX7.css +0 -1
  52. package/dist-web/assets/index-DUXf21MT.js +0 -173
  53. package/dist-web/assets/index-DZiH2cC1.js +0 -7
  54. /package/dist/{chunk-OQVKZTVD.mjs.map → chunk-3UBWLWXB.mjs.map} +0 -0
  55. /package/dist/{chunk-AIR7EAF4.mjs.map → chunk-4U45E7TO.mjs.map} +0 -0
  56. /package/dist/{chunk-4GI2UPCS.mjs.map → chunk-D2XJ4Z7G.mjs.map} +0 -0
  57. /package/dist/{http-DHQI4G5J.mjs.map → chunk-VSOWNKPA.mjs.map} +0 -0
  58. /package/dist/{import-CQWGIMZQ.mjs.map → http-R5UECMPJ.mjs.map} +0 -0
  59. /package/dist/{src-QBT5SYW5.mjs.map → import-3LOWRXWA.mjs.map} +0 -0
  60. /package/dist/{stream-import-VG7RP6KJ.mjs.map → src-UHM2UDRD.mjs.map} +0 -0
@@ -1,10 +1,10 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EChartWordcloud-BYLFxPAX.js","assets/vendor-echarts-wordcloud-uVdwYsYa.js","assets/vendor-echarts-C13vDgZW.js","assets/vendor-zrender-5DcYjSZk.js","assets/vendor-reka-ui-CW2cIgMu.js","assets/MessageExportModal-DTgxz1eQ.js","assets/vendor-nuxt-ui-CYMNNdeD.js","assets/index-DZiH2cC1.js","assets/vendor-snapdom-XnBoh1gd.js","assets/index-B8867dX7.css","assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-CpFGhsl5.js","assets/index-DeG0EHOT.js","assets/DebugToolsPanel-CoBtqb--.css"])))=>i.map(i=>d[i]);
2
- import{_ as ze}from"./vendor-snapdom-XnBoh1gd.js";import{l as st,g as _e,a as ge,j as at,b as we,k as Fe,c as nt,e as Be,_ as Ue,o as ot,C as it,u as rt,d as lt}from"./vendor-nuxt-ui-CYMNNdeD.js";import{b as A,d as ke,F as Re,p as P,G as r,P as I,Q as Z,a5 as s,Z as q,a3 as te,T as x,O as He,J as ct,H as N,a0 as be,h as D,w as G,u as t,K as V,L as $,U,R as Q,bI as We,a9 as je,bJ as dt,au as Pe,bF as qe,n as Se,bD as Ne,i as ut}from"./vendor-reka-ui-CW2cIgMu.js";import{l as mt,u as se,m as Ae,T as ce,h as ue,n as gt,o as Ye,_ as Le,p as pt,d as ht,a as vt,s as ft}from"./index-DZiH2cC1.js";import{a as Te}from"./index-DeG0EHOT.js";import{_ as ae,a as K,g as Ge,b as yt,c as ne,d as le,e as xt,f as De,h as bt,i as Ve,j as _t,u as kt,k as wt,l as $t,m as It,n as Ct,o as St,p as Mt,q as Tt,r as Dt,s as Rt,t as Nt,P as At,v as Lt,w as Vt,x as Et,y as Ot,C as zt,z as Ft,A as Bt,D as Ut,B as Ht}from"./DebugToolsPanel.vue_vue_type_script_setup_true_lang-CpFGhsl5.js";import"./vendor-echarts-wordcloud-uVdwYsYa.js";import{u as Je,i as Wt,j as Ke,k as jt,m as Qe,n as Xe,o as Pt,p as qt,q as Yt}from"./vendor-echarts-C13vDgZW.js";import"./vendor-zrender-5DcYjSZk.js";function Gt(l,a={}){const{threshold:e=300,containerSelector:o=".overflow-y-auto",scrollLockDuration:c=800}=a,u=A(l[0]?.id||"");let d=!1;const g=A(null);let p=null;function _(){if(d)return;const m=[];l.forEach(i=>{const h=document.getElementById(i.id);if(h){const f=h.getBoundingClientRect();m.push({id:i.id,top:Math.round(f.top)})}});let n=0;for(let i=0;i<m.length;i++){if(m[i].top>e){n=Math.max(0,i-1);break}n=i}u.value=l[n]?.id||""}function y(m){const n=document.getElementById(m);n&&(u.value=m,d=!0,n.scrollIntoView({behavior:"smooth",block:"start"}),setTimeout(()=>{d=!1,_()},c))}return ke(()=>{p=g.value?.closest(o)||null,p&&(p.addEventListener("scroll",_,{passive:!0}),_())}),Re(()=>{p&&p.removeEventListener("scroll",_)}),{contentRef:g,activeAnchor:u,scrollToAnchor:y,updateActiveAnchor:_}}const Jt={class:"sticky top-24 space-y-6"},Kt={class:"border-l border-gray-200 dark:border-gray-800"},Qt=["onClick"],Xt=P({__name:"PageAnchorsNav",props:{anchors:{},activeAnchor:{},width:{default:"w-44"},hideOnMobile:{type:Boolean,default:!0}},emits:["click"],setup(l,{emit:a}){const e=a;function o(c){e("click",c)}return(c,u)=>(r(),I("div",{class:Z([l.width,"shrink-0",l.hideOnMobile?"hidden lg:block":""])},[s("div",Jt,[s("nav",null,[s("div",Kt,[(r(!0),I(q,null,te(l.anchors,d=>(r(),I("button",{key:d.id,class:Z(["-ml-px block border-l-2 py-1.5 pl-4 text-left text-sm transition-colors",[l.activeAnchor===d.id?"border-pink-500 font-medium text-pink-600 dark:text-pink-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]]),onClick:g=>o(d.id)},x(d.label),11,Qt))),128))])]),He(c.$slots,"default")])],2))}}),me=P({__name:"TopNSelect",props:{modelValue:{default:10},modelModifiers:{}},emits:["update:modelValue"],setup(l){const a=ct(l,"modelValue"),e=[{label:"Top 5",value:5},{label:"Top 10",value:10},{label:"Top 20",value:20},{label:"Top 30",value:30},{label:"Top 50",value:50},{label:"Top 100",value:100}];return(o,c)=>{const u=st;return r(),N(u,{modelValue:a.value,"onUpdate:modelValue":c[0]||(c[0]=d=>a.value=d),items:e,"value-key":"value",class:"w-25"},null,8,["modelValue"])}}}),ye=P({__name:"ScrollableChart",props:{contentHeight:{},maxHeightVh:{default:60},paddingClass:{default:"px-3 py-2"}},setup(l){const a=l,e=D(()=>typeof window>"u"?500:Math.round(window.innerHeight*a.maxHeightVh/100)),o=D(()=>a.contentHeight>e.value),c=D(()=>({maxHeight:`${a.maxHeightVh}vh`,overflowY:o.value?"auto":"hidden"}));return(u,d)=>(r(),I("div",{class:Z(l.paddingClass),style:be(c.value)},[He(u.$slots,"default")],6))}}),Zt=P({__name:"EChartGraph",props:{data:{},height:{default:400},layout:{default:"circular"},directed:{type:Boolean,default:!1}},setup(l,{expose:a}){Je([Wt,Ke,jt,Qe]);const e=l,o=D(()=>typeof e.height=="number"?`${e.height}px`:e.height),c=mt(),u=A(null);let d=null;const g=["#ee4567","#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#9a60b4","#fc8452","#3ba272","#ea7ccc","#6e7074","#546570"],p=D(()=>{const b=new Set;return e.data.nodes.filter(k=>b.has(k.name)?!1:(b.add(k.name),!0))}),_=D(()=>{const b=new Map;return p.value.forEach((k,C)=>{b.set(k.name,g[C%g.length])}),b});function y(b,k){return k<=0?1:1+b/k*5}const m=D(()=>{const b=e.data.maxLinkValue||Math.max(...e.data.links.map(k=>k.value||1),1);return{tooltip:{trigger:"item",backgroundColor:c.value?"rgba(30, 30, 30, 0.9)":"rgba(255, 255, 255, 0.95)",borderColor:c.value?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)",textStyle:{color:c.value?"#e5e7eb":"#374151"},formatter:k=>k.dataType==="node"?`<b>${k.data.name}</b><br/>消息数: ${k.data.value||0}`:k.dataType==="edge"?`${k.data.source} → ${k.data.target}<br/>艾特次数: ${k.data.value||0}`:""},animationDuration:1e3,animationDurationUpdate:500,animationEasingUpdate:"quinticInOut",series:[{type:"graph",layout:e.layout,circular:e.layout==="circular"?{rotateLabel:!0}:void 0,force:e.layout==="force"?{repulsion:300,gravity:.1,edgeLength:[80,200],friction:.6}:void 0,roam:!0,scaleLimit:{min:.3,max:3},draggable:!0,label:{show:!0,position:"right",formatter:"{b}",color:c.value?"#e5e7eb":"#374151",fontSize:11,fontWeight:500},edgeSymbol:e.directed?["none","arrow"]:["none","none"],edgeSymbolSize:e.directed?[0,10]:[0,0],lineStyle:{curveness:.3,opacity:.5},emphasis:{focus:"adjacency",label:{show:!0,fontSize:13,fontWeight:600},lineStyle:{width:4,opacity:.9},itemStyle:{shadowBlur:15,shadowColor:"rgba(0, 0, 0, 0.3)"}},data:p.value.map(k=>{const C=_.value.get(k.name)||g[0];return{name:k.name,value:k.value,symbolSize:k.symbolSize||30,label:{show:e.layout==="circular"?!0:(k.symbolSize||30)>30},itemStyle:{color:C,borderColor:"#fff",borderWidth:2,shadowBlur:5,shadowColor:`${C}66`}}}),links:e.data.links.filter(k=>_.value.has(k.source)&&_.value.has(k.target)).map(k=>{const C=_.value.get(k.source)||g[0];return{source:k.source,target:k.target,value:k.value,lineStyle:{color:C,width:y(k.value||1,b)}}})}]}});function n(){u.value&&(d=Xe(u.value,c.value?"dark":void 0,{renderer:"canvas"}),d.setOption({backgroundColor:"transparent",...m.value}))}function i(){d&&d.setOption({backgroundColor:"transparent",...m.value},{notMerge:!0})}function h(){d?.resize()}function f(){d&&d.dispatchAction({type:"restore"})}return a({resetView:f}),G([()=>e.data,()=>e.layout,()=>e.directed,c],()=>{d?i():n()},{deep:!0}),ke(()=>{n(),window.addEventListener("resize",h)}),Re(()=>{window.removeEventListener("resize",h),d?.dispose()}),(b,k)=>(r(),I("div",{ref_key:"chartRef",ref:u,style:be({height:o.value,width:"100%"})},null,4))}}),es={class:"px-3 py-2"},$e=P({__name:"EChartRank",props:{members:{},title:{},description:{},topN:{default:10},unit:{default:"条"},height:{default:"auto"},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(l){const a=l,e=D(()=>a.members.slice(0,a.topN)),o=D(()=>{if(a.height!=="auto")return a.height;const g=e.value.length*36;return Math.max(g+30,180)}),c={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#ee4567"},{offset:1,color:"#f7758c"}]};function u(g,p=8){return g.length<=p?g:g.slice(0,p)+"…"}const d=D(()=>{const g=[...e.value].reverse(),p=g.map(n=>u(n.name)),_=g.map(n=>n.value),y=Math.max(..._,1),m=g.map(n=>({value:n.value,itemStyle:{color:c,borderRadius:[0,4,4,0]}}));return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"},formatter:n=>{const i=n[0];if(!i)return"";const h=e.value.length-1-i.dataIndex,f=e.value[h];return`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EChartWordcloud-Ubal_aYg.js","assets/vendor-echarts-wordcloud-CZ9gsX8l.js","assets/vendor-echarts-C5u62NnM.js","assets/vendor-zrender-DFl4U2Oe.js","assets/vendor-reka-ui-CW2cIgMu.js","assets/MessageExportModal-De5_tX6a.js","assets/vendor-nuxt-ui-7OAuiz_i.js","assets/index-Dhg3SDb6.js","assets/vendor-snapdom-XnBoh1gd.js","assets/index-CbOwHYzO.css","assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-CxYyne-Q.js","assets/index-BJUGnYn5.js","assets/DebugToolsPanel-DkbsB6lr.css"])))=>i.map(i=>d[i]);
2
+ import{_ as ze}from"./vendor-snapdom-XnBoh1gd.js";import{l as st,g as _e,a as ge,j as at,b as we,k as Fe,c as nt,e as Be,_ as Ue,p as ot,C as it,u as rt,d as lt}from"./vendor-nuxt-ui-7OAuiz_i.js";import{b as A,d as ke,F as Re,p as P,G as r,P as I,Q as Z,a5 as s,Z as q,a3 as te,T as x,O as He,J as ct,H as N,a0 as be,h as D,w as G,u as t,K as V,L as $,U,R as Q,bI as We,a9 as je,bJ as dt,au as Pe,bF as qe,n as Se,bD as Ne,i as ut}from"./vendor-reka-ui-CW2cIgMu.js";import{n as mt,u as se,i as Ae,T as ce,h as ue,o as gt,p as Ye,_ as Le,q as pt,d as ht,a as vt,s as ft}from"./index-Dhg3SDb6.js";import{a as Te}from"./index-BJUGnYn5.js";import{_ as ae,a as K,g as Ge,b as yt,c as ne,d as le,e as xt,f as De,h as bt,i as Ve,j as _t,u as kt,k as wt,l as $t,m as It,n as Ct,o as St,p as Mt,q as Tt,r as Dt,s as Rt,t as Nt,P as At,v as Lt,w as Vt,x as Et,y as Ot,C as zt,z as Ft,A as Bt,D as Ut,B as Ht}from"./DebugToolsPanel.vue_vue_type_script_setup_true_lang-CxYyne-Q.js";import"./vendor-echarts-wordcloud-CZ9gsX8l.js";import{u as Je,i as Wt,j as Ke,k as jt,m as Qe,n as Xe,o as Pt,p as qt,q as Yt}from"./vendor-echarts-C5u62NnM.js";import"./vendor-zrender-DFl4U2Oe.js";function Gt(l,a={}){const{threshold:e=300,containerSelector:o=".overflow-y-auto",scrollLockDuration:c=800}=a,u=A(l[0]?.id||"");let d=!1;const g=A(null);let p=null;function _(){if(d)return;const m=[];l.forEach(i=>{const h=document.getElementById(i.id);if(h){const f=h.getBoundingClientRect();m.push({id:i.id,top:Math.round(f.top)})}});let n=0;for(let i=0;i<m.length;i++){if(m[i].top>e){n=Math.max(0,i-1);break}n=i}u.value=l[n]?.id||""}function y(m){const n=document.getElementById(m);n&&(u.value=m,d=!0,n.scrollIntoView({behavior:"smooth",block:"start"}),setTimeout(()=>{d=!1,_()},c))}return ke(()=>{p=g.value?.closest(o)||null,p&&(p.addEventListener("scroll",_,{passive:!0}),_())}),Re(()=>{p&&p.removeEventListener("scroll",_)}),{contentRef:g,activeAnchor:u,scrollToAnchor:y,updateActiveAnchor:_}}const Jt={class:"sticky top-24 space-y-6"},Kt={class:"border-l border-gray-200 dark:border-gray-800"},Qt=["onClick"],Xt=P({__name:"PageAnchorsNav",props:{anchors:{},activeAnchor:{},width:{default:"w-44"},hideOnMobile:{type:Boolean,default:!0}},emits:["click"],setup(l,{emit:a}){const e=a;function o(c){e("click",c)}return(c,u)=>(r(),I("div",{class:Z([l.width,"shrink-0",l.hideOnMobile?"hidden lg:block":""])},[s("div",Jt,[s("nav",null,[s("div",Kt,[(r(!0),I(q,null,te(l.anchors,d=>(r(),I("button",{key:d.id,class:Z(["-ml-px block border-l-2 py-1.5 pl-4 text-left text-sm transition-colors",[l.activeAnchor===d.id?"border-pink-500 font-medium text-pink-600 dark:text-pink-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]]),onClick:g=>o(d.id)},x(d.label),11,Qt))),128))])]),He(c.$slots,"default")])],2))}}),me=P({__name:"TopNSelect",props:{modelValue:{default:10},modelModifiers:{}},emits:["update:modelValue"],setup(l){const a=ct(l,"modelValue"),e=[{label:"Top 5",value:5},{label:"Top 10",value:10},{label:"Top 20",value:20},{label:"Top 30",value:30},{label:"Top 50",value:50},{label:"Top 100",value:100}];return(o,c)=>{const u=st;return r(),N(u,{modelValue:a.value,"onUpdate:modelValue":c[0]||(c[0]=d=>a.value=d),items:e,"value-key":"value",class:"w-25"},null,8,["modelValue"])}}}),ye=P({__name:"ScrollableChart",props:{contentHeight:{},maxHeightVh:{default:60},paddingClass:{default:"px-3 py-2"}},setup(l){const a=l,e=D(()=>typeof window>"u"?500:Math.round(window.innerHeight*a.maxHeightVh/100)),o=D(()=>a.contentHeight>e.value),c=D(()=>({maxHeight:`${a.maxHeightVh}vh`,overflowY:o.value?"auto":"hidden"}));return(u,d)=>(r(),I("div",{class:Z(l.paddingClass),style:be(c.value)},[He(u.$slots,"default")],6))}}),Zt=P({__name:"EChartGraph",props:{data:{},height:{default:400},layout:{default:"circular"},directed:{type:Boolean,default:!1}},setup(l,{expose:a}){Je([Wt,Ke,jt,Qe]);const e=l,o=D(()=>typeof e.height=="number"?`${e.height}px`:e.height),c=mt(),u=A(null);let d=null;const g=["#ee4567","#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#9a60b4","#fc8452","#3ba272","#ea7ccc","#6e7074","#546570"],p=D(()=>{const b=new Set;return e.data.nodes.filter(k=>b.has(k.name)?!1:(b.add(k.name),!0))}),_=D(()=>{const b=new Map;return p.value.forEach((k,C)=>{b.set(k.name,g[C%g.length])}),b});function y(b,k){return k<=0?1:1+b/k*5}const m=D(()=>{const b=e.data.maxLinkValue||Math.max(...e.data.links.map(k=>k.value||1),1);return{tooltip:{trigger:"item",backgroundColor:c.value?"rgba(30, 30, 30, 0.9)":"rgba(255, 255, 255, 0.95)",borderColor:c.value?"rgba(255, 255, 255, 0.1)":"rgba(0, 0, 0, 0.1)",textStyle:{color:c.value?"#e5e7eb":"#374151"},formatter:k=>k.dataType==="node"?`<b>${k.data.name}</b><br/>消息数: ${k.data.value||0}`:k.dataType==="edge"?`${k.data.source} → ${k.data.target}<br/>艾特次数: ${k.data.value||0}`:""},animationDuration:1e3,animationDurationUpdate:500,animationEasingUpdate:"quinticInOut",series:[{type:"graph",layout:e.layout,circular:e.layout==="circular"?{rotateLabel:!0}:void 0,force:e.layout==="force"?{repulsion:300,gravity:.1,edgeLength:[80,200],friction:.6}:void 0,roam:!0,scaleLimit:{min:.3,max:3},draggable:!0,label:{show:!0,position:"right",formatter:"{b}",color:c.value?"#e5e7eb":"#374151",fontSize:11,fontWeight:500},edgeSymbol:e.directed?["none","arrow"]:["none","none"],edgeSymbolSize:e.directed?[0,10]:[0,0],lineStyle:{curveness:.3,opacity:.5},emphasis:{focus:"adjacency",label:{show:!0,fontSize:13,fontWeight:600},lineStyle:{width:4,opacity:.9},itemStyle:{shadowBlur:15,shadowColor:"rgba(0, 0, 0, 0.3)"}},data:p.value.map(k=>{const C=_.value.get(k.name)||g[0];return{name:k.name,value:k.value,symbolSize:k.symbolSize||30,label:{show:e.layout==="circular"?!0:(k.symbolSize||30)>30},itemStyle:{color:C,borderColor:"#fff",borderWidth:2,shadowBlur:5,shadowColor:`${C}66`}}}),links:e.data.links.filter(k=>_.value.has(k.source)&&_.value.has(k.target)).map(k=>{const C=_.value.get(k.source)||g[0];return{source:k.source,target:k.target,value:k.value,lineStyle:{color:C,width:y(k.value||1,b)}}})}]}});function n(){u.value&&(d=Xe(u.value,c.value?"dark":void 0,{renderer:"canvas"}),d.setOption({backgroundColor:"transparent",...m.value}))}function i(){d&&d.setOption({backgroundColor:"transparent",...m.value},{notMerge:!0})}function h(){d?.resize()}function f(){d&&d.dispatchAction({type:"restore"})}return a({resetView:f}),G([()=>e.data,()=>e.layout,()=>e.directed,c],()=>{d?i():n()},{deep:!0}),ke(()=>{n(),window.addEventListener("resize",h)}),Re(()=>{window.removeEventListener("resize",h),d?.dispose()}),(b,k)=>(r(),I("div",{ref_key:"chartRef",ref:u,style:be({height:o.value,width:"100%"})},null,4))}}),es={class:"px-3 py-2"},$e=P({__name:"EChartRank",props:{members:{},title:{},description:{},topN:{default:10},unit:{default:"条"},height:{default:"auto"},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(l){const a=l,e=D(()=>a.members.slice(0,a.topN)),o=D(()=>{if(a.height!=="auto")return a.height;const g=e.value.length*36;return Math.max(g+30,180)}),c={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#ee4567"},{offset:1,color:"#f7758c"}]};function u(g,p=8){return g.length<=p?g:g.slice(0,p)+"…"}const d=D(()=>{const g=[...e.value].reverse(),p=g.map(n=>u(n.name)),_=g.map(n=>n.value),y=Math.max(..._,1),m=g.map(n=>({value:n.value,itemStyle:{color:c,borderRadius:[0,4,4,0]}}));return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"},formatter:n=>{const i=n[0];if(!i)return"";const h=e.value.length-1-i.dataIndex,f=e.value[h];return`
3
3
  <div style="padding: 4px 8px;">
4
4
  <div style="font-weight: bold; margin-bottom: 4px;">${f.name}</div>
5
5
  <div>${f.value} ${a.unit} (${f.percentage}%)</div>
6
6
  </div>
7
- `}},grid:{left:110,right:70,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:y*1.1,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:p,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(n,i)=>{const f=e.value.length-1-i+1;return`${f===1?"🥇":f===2?"🥈":f===3?"🥉":`${f}.`} ${n}`}}},series:[{type:"bar",data:m,barWidth:18,barCategoryGap:"30%",label:{show:!0,position:"right",distance:8,formatter:n=>{const i=e.value.length-1-n.dataIndex;return`${e.value[i].value} ${a.unit}`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(238, 69, 103, 0.3)"}}}]}});return(g,p)=>l.bare?(r(),N(t(ye),{key:0,"content-height":o.value,"max-height-vh":l.maxHeightVh},{default:V(()=>[$(ae,{option:d.value,height:o.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(r(),N(t(K),{key:1,title:l.title,description:l.description,scrollable:"","max-height-vh":l.maxHeightVh},{default:V(()=>[s("div",es,[$(ae,{option:d.value,height:o.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),ts={class:"divide-y divide-gray-100 dark:divide-gray-800"},ss={key:0,class:"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-linear-to-br from-pink-100 to-rose-100 text-sm font-medium text-pink-600 dark:from-pink-900/30 dark:to-rose-900/30 dark:text-pink-400"},as={class:"w-32 shrink-0"},ns={class:"wrap-break-word font-medium text-gray-900 dark:text-white"},os={class:"flex flex-1 items-center"},is={class:"h-2 w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800"},rs={class:"flex shrink-0 items-baseline gap-2 whitespace-nowrap"},ls={class:"text-lg font-bold text-gray-900 dark:text-white"},cs={class:"text-sm text-gray-500"},Ee=P({__name:"RankList",props:{members:{},showAvatar:{type:Boolean,default:!1},rankLimit:{default:0},unit:{}},setup(l){const{t:a}=se(),e=l,o=D(()=>e.unit||a("views.charts.rankList.unit")),c=D(()=>e.rankLimit>0?e.members.slice(0,e.rankLimit):e.members);function u(d){if(c.value.length===0)return 0;const g=c.value[0].value;return g===0?0:Math.round(c.value[d].value/g*100)}return(d,g)=>(r(),I("div",ts,[(r(!0),I(q,null,te(c.value,(p,_)=>(r(),I("div",{key:p.id,class:"flex items-center gap-3 px-5 py-3 transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/50"},[s("div",{class:Z(["flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-sm font-bold",t(Ge)(_)])},x(_+1),3),l.showAvatar?(r(),I("div",ss,x(p.name.slice(0,1)),1)):U("",!0),s("div",as,[s("p",ns,x(p.name),1)]),s("div",os,[s("div",is,[s("div",{class:Z(["h-full rounded-full bg-linear-to-r transition-all",t(yt)(_)]),style:be({width:`${u(_)}%`})},null,6)])]),s("div",rs,[s("span",ls,x(p.value),1),s("span",cs,x(o.value)+" ("+x(p.percentage)+"%)",1)])]))),128))]))}}),ds={class:"flex items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-800"},us={class:"font-semibold text-gray-900 whitespace-nowrap dark:text-white"},ms={key:0,class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},gs={class:"no-capture flex items-center gap-1"},ps={class:"flex w-full items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700"},hs={class:"flex items-center gap-2"},vs={class:"text-lg font-semibold text-gray-900 whitespace-nowrap dark:text-white"},fs={class:"text-sm text-gray-500"},ys={class:"max-h-[60vh] p-4 overflow-y-auto"},Oe=P({__name:"RankListPro",props:{members:{},title:{},description:{},topN:{default:10},unit:{}},setup(l){const{t:a}=se(),e=l,o=A(!1),c=A(null),u=A(null),d=D(()=>e.members.slice(0,e.topN)),g=D(()=>e.members.length>e.topN);return(p,_)=>{const y=ge,m=_e;return r(),I("div",{ref_key:"cardRef",ref:c,class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},[s("div",ds,[s("div",null,[s("h3",us,x(l.title),1),l.description?(r(),I("p",ms,x(l.description),1)):U("",!0)]),s("div",gs,[$(Te,{size:"xs",type:"element","target-element":c.value},null,8,["target-element"]),$(m,{open:o.value,"onUpdate:open":_[0]||(_[0]=n=>o.value=n),ui:{content:"md:w-full max-w-3xl"}},{content:V(()=>[s("div",{ref_key:"modalBodyRef",ref:u,class:"section-content flex flex-col"},[s("div",ps,[s("div",hs,[s("h3",vs,x(l.title),1),s("span",fs," ("+x(t(a)("views.charts.rankListPro.memberCount",{count:l.members.length}))+") ",1)]),$(Te,{size:"xs",type:"element","target-element":u.value},null,8,["target-element"])]),s("div",ys,[$(Ee,{members:l.members,unit:l.unit},null,8,["members","unit"])])],512)]),default:V(()=>[g.value?(r(),N(y,{key:0,icon:"i-heroicons-list-bullet",variant:"ghost"},{default:V(()=>[Q(x(t(a)("views.charts.rankListPro.fullRanking")),1)]),_:1})):U("",!0)]),_:1},8,["open"])])]),$(Ee,{members:d.value,unit:l.unit},null,8,["members","unit"])],512)}}}),xs={class:"main-content mx-auto max-w-6xl py-6"},bs={class:"mb-4 flex items-center justify-end gap-4"},_s={class:"text-xs text-gray-500 dark:text-gray-400"},ks={key:0,class:"grid grid-cols-2 gap-6"},ws={class:"mb-3 text-center"},$s={class:"text-base font-semibold text-gray-900 dark:text-white"},Is={class:"flex flex-wrap gap-2"},Cs=["title","onClick"],Ss={class:"text-xs opacity-50"},Ms={key:1,class:"grid grid-cols-2 gap-6"},Ts={class:"mb-3 text-center"},Ds={class:"text-base font-semibold text-gray-900 dark:text-white"},Rs={class:"relative w-full",style:{"aspect-ratio":"4 / 3"}},Ns={class:"mt-4 text-center text-xs text-gray-500 dark:text-gray-400"},As=P({__name:"CatchphraseTab",props:{sessionId:{},timeFilter:{}},setup(l){const a=We(()=>ze(()=>import("./EChartWordcloud-BYLFxPAX.js"),__vite__mapDeps([0,1,2,3,4]))),{t:e}=se(),o=Ae(),c=l,u=A(null),d=A(!1),g=A("list"),p=A(30),_=D(()=>[{label:e("quotes.catchphrase.viewMode.list"),value:"list"},{label:e("quotes.catchphrase.viewMode.wordcloud"),value:"wordcloud"}]),y=[{label:"10",value:10},{label:"30",value:30},{label:"50",value:50},{label:"100",value:100}],m=D(()=>u.value&&u.value.members.length>0),n=D(()=>{if(!u.value)return[];const v=p.value;return console.log("[CatchphraseTab] displayMembers recompute, topN:",v,"type:",typeof v),u.value.members.map(w=>{const S=w.catchphrases.slice(0,v);return console.log("[CatchphraseTab]",w.name,"total:",w.catchphrases.length,"display:",S.length),{...w,catchphrases:S}})}),i=D(()=>n.value.map(v=>({name:v.name,data:{words:v.catchphrases.map(w=>({word:w.content,count:w.count}))}}))),h=[{bg:"bg-amber-50 dark:bg-amber-900/20",text:"text-amber-700 dark:text-amber-400",badge:"bg-amber-100 dark:bg-amber-800/40 text-amber-600 dark:text-amber-300"},{bg:"bg-slate-50 dark:bg-slate-800/40",text:"text-slate-600 dark:text-slate-300",badge:"bg-slate-100 dark:bg-slate-700/60 text-slate-500 dark:text-slate-400"},{bg:"bg-orange-50 dark:bg-orange-900/15",text:"text-orange-600 dark:text-orange-400",badge:"bg-orange-100 dark:bg-orange-800/30 text-orange-500 dark:text-orange-300"}];function f(v){return v<h.length?h[v]:{bg:"bg-gray-50 dark:bg-gray-800/30",text:"text-gray-600 dark:text-gray-400",badge:"bg-gray-100 dark:bg-gray-700/40 text-gray-500 dark:text-gray-400"}}function b(v,w=20){return v.length<=w?v:v.slice(0,w)+"..."}async function k(){if(c.sessionId){d.value=!0;try{u.value=await ue().getCatchphraseAnalysis(c.sessionId,c.timeFilter),console.log("[CatchphraseTab] API result: members:",u.value?.members.length,"per-member catchphrases:",u.value?.members.map(v=>({name:v.name,count:v.catchphrases.length})))}catch(v){console.error("Failed to load catchphrase analysis:",v)}finally{d.value=!1}}}function C(v){o.openChatRecordDrawer({keywords:[v]})}return G(p,(v,w)=>{console.log("[CatchphraseTab] topN changed:",w,"->",v,"type:",typeof v)}),G(()=>[c.sessionId,c.timeFilter],()=>{k()},{immediate:!0,deep:!0}),(v,w)=>(r(),I("div",xs,[d.value?(r(),N(t(ne),{key:0,text:t(e)("quotes.catchphrase.loading")},null,8,["text"])):m.value?(r(),I(q,{key:2},[s("div",bs,[s("span",_s,x(t(e)("quotes.catchphrase.topN")),1),$(t(ce),{modelValue:p.value,"onUpdate:modelValue":w[0]||(w[0]=S=>p.value=S),size:"xs",items:y},null,8,["modelValue"]),w[2]||(w[2]=s("div",{class:"h-4 w-px bg-gray-200 dark:bg-gray-700"},null,-1)),$(t(ce),{modelValue:g.value,"onUpdate:modelValue":w[1]||(w[1]=S=>g.value=S),size:"xs",items:_.value},null,8,["modelValue","items"])]),g.value==="list"?(r(),I("div",ks,[(r(!0),I(q,null,te(n.value,S=>(r(),I("div",{key:S.memberId},[s("div",ws,[s("span",$s,x(S.name),1)]),s("div",Is,[(r(!0),I(q,null,te(S.catchphrases,(M,T)=>(r(),I("div",{key:T,class:Z(["inline-flex cursor-pointer items-center gap-1.5 rounded-full px-3 py-1.5 transition-opacity hover:opacity-75",f(T).bg]),title:M.content,onClick:L=>C(M.content)},[T<3?(r(),I("span",{key:0,class:Z(["flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-bold",f(T).badge])},x(T+1),3)):U("",!0),s("span",{class:Z(["text-sm font-medium",f(T).text])},x(b(M.content)),3),s("span",Ss,x(t(e)("quotes.catchphrase.times",{count:M.count})),1)],10,Cs))),128))])]))),128))])):(r(),I("div",Ms,[(r(!0),I(q,null,te(i.value,S=>(r(),I("div",{key:S.name},[s("div",Ts,[s("span",Ds,x(S.name),1)]),s("div",Rs,[S.data.words.length===0?(r(),N(t(le),{key:0,text:t(e)("quotes.catchphrase.empty.title"),class:"h-full"},null,8,["text"])):(r(),N(t(a),{key:1,data:S.data,height:"100%","max-words":p.value,"color-scheme":"default","size-scale":1,loading:d.value,onWordClick:C},null,8,["data","max-words","loading"]))])]))),128))])),s("p",Ns,x(t(e)("quotes.catchphrase.stats.clickHint")),1)],64)):(r(),N(t(le),{key:1,text:t(e)("quotes.catchphrase.empty.title")},null,8,["text"]))]))}});function xe(l){const a=[],e=[];return l?.startTs!=null&&(a.push("AND msg.ts >= ?"),e.push(l.startTs)),l?.endTs!=null&&(a.push("AND msg.ts <= ?"),e.push(l.endTs)),l?.memberId!=null&&(a.push("AND msg.sender_id = ?"),e.push(l.memberId)),{conditions:a.join(" "),params:e}}const fe="AND COALESCE(m.account_name, '') != '系统消息'";async function Ls(l,a){const{conditions:e,params:o}=xe(a),[c,u]=await Promise.all([window.chatApi.pluginQuery(l,`WITH daily_counts AS (
7
+ `}},grid:{left:110,right:70,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:y*1.1,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:p,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(n,i)=>{const f=e.value.length-1-i+1;return`${f===1?"🥇":f===2?"🥈":f===3?"🥉":`${f}.`} ${n}`}}},series:[{type:"bar",data:m,barWidth:18,barCategoryGap:"30%",label:{show:!0,position:"right",distance:8,formatter:n=>{const i=e.value.length-1-n.dataIndex;return`${e.value[i].value} ${a.unit}`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(238, 69, 103, 0.3)"}}}]}});return(g,p)=>l.bare?(r(),N(t(ye),{key:0,"content-height":o.value,"max-height-vh":l.maxHeightVh},{default:V(()=>[$(ae,{option:d.value,height:o.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(r(),N(t(K),{key:1,title:l.title,description:l.description,scrollable:"","max-height-vh":l.maxHeightVh},{default:V(()=>[s("div",es,[$(ae,{option:d.value,height:o.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),ts={class:"divide-y divide-gray-100 dark:divide-gray-800"},ss={key:0,class:"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-linear-to-br from-pink-100 to-rose-100 text-sm font-medium text-pink-600 dark:from-pink-900/30 dark:to-rose-900/30 dark:text-pink-400"},as={class:"w-32 shrink-0"},ns={class:"wrap-break-word font-medium text-gray-900 dark:text-white"},os={class:"flex flex-1 items-center"},is={class:"h-2 w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800"},rs={class:"flex shrink-0 items-baseline gap-2 whitespace-nowrap"},ls={class:"text-lg font-bold text-gray-900 dark:text-white"},cs={class:"text-sm text-gray-500"},Ee=P({__name:"RankList",props:{members:{},showAvatar:{type:Boolean,default:!1},rankLimit:{default:0},unit:{}},setup(l){const{t:a}=se(),e=l,o=D(()=>e.unit||a("views.charts.rankList.unit")),c=D(()=>e.rankLimit>0?e.members.slice(0,e.rankLimit):e.members);function u(d){if(c.value.length===0)return 0;const g=c.value[0].value;return g===0?0:Math.round(c.value[d].value/g*100)}return(d,g)=>(r(),I("div",ts,[(r(!0),I(q,null,te(c.value,(p,_)=>(r(),I("div",{key:p.id,class:"flex items-center gap-3 px-5 py-3 transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/50"},[s("div",{class:Z(["flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-sm font-bold",t(Ge)(_)])},x(_+1),3),l.showAvatar?(r(),I("div",ss,x(p.name.slice(0,1)),1)):U("",!0),s("div",as,[s("p",ns,x(p.name),1)]),s("div",os,[s("div",is,[s("div",{class:Z(["h-full rounded-full bg-linear-to-r transition-all",t(yt)(_)]),style:be({width:`${u(_)}%`})},null,6)])]),s("div",rs,[s("span",ls,x(p.value),1),s("span",cs,x(o.value)+" ("+x(p.percentage)+"%)",1)])]))),128))]))}}),ds={class:"flex items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-800"},us={class:"font-semibold text-gray-900 whitespace-nowrap dark:text-white"},ms={key:0,class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},gs={class:"no-capture flex items-center gap-1"},ps={class:"flex w-full items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700"},hs={class:"flex items-center gap-2"},vs={class:"text-lg font-semibold text-gray-900 whitespace-nowrap dark:text-white"},fs={class:"text-sm text-gray-500"},ys={class:"max-h-[60vh] p-4 overflow-y-auto"},Oe=P({__name:"RankListPro",props:{members:{},title:{},description:{},topN:{default:10},unit:{}},setup(l){const{t:a}=se(),e=l,o=A(!1),c=A(null),u=A(null),d=D(()=>e.members.slice(0,e.topN)),g=D(()=>e.members.length>e.topN);return(p,_)=>{const y=ge,m=_e;return r(),I("div",{ref_key:"cardRef",ref:c,class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},[s("div",ds,[s("div",null,[s("h3",us,x(l.title),1),l.description?(r(),I("p",ms,x(l.description),1)):U("",!0)]),s("div",gs,[$(Te,{size:"xs",type:"element","target-element":c.value},null,8,["target-element"]),$(m,{open:o.value,"onUpdate:open":_[0]||(_[0]=n=>o.value=n),ui:{content:"md:w-full max-w-3xl"}},{content:V(()=>[s("div",{ref_key:"modalBodyRef",ref:u,class:"section-content flex flex-col"},[s("div",ps,[s("div",hs,[s("h3",vs,x(l.title),1),s("span",fs," ("+x(t(a)("views.charts.rankListPro.memberCount",{count:l.members.length}))+") ",1)]),$(Te,{size:"xs",type:"element","target-element":u.value},null,8,["target-element"])]),s("div",ys,[$(Ee,{members:l.members,unit:l.unit},null,8,["members","unit"])])],512)]),default:V(()=>[g.value?(r(),N(y,{key:0,icon:"i-heroicons-list-bullet",variant:"ghost"},{default:V(()=>[Q(x(t(a)("views.charts.rankListPro.fullRanking")),1)]),_:1})):U("",!0)]),_:1},8,["open"])])]),$(Ee,{members:d.value,unit:l.unit},null,8,["members","unit"])],512)}}}),xs={class:"main-content mx-auto max-w-6xl py-6"},bs={class:"mb-4 flex items-center justify-end gap-4"},_s={class:"text-xs text-gray-500 dark:text-gray-400"},ks={key:0,class:"grid grid-cols-2 gap-6"},ws={class:"mb-3 text-center"},$s={class:"text-base font-semibold text-gray-900 dark:text-white"},Is={class:"flex flex-wrap gap-2"},Cs=["title","onClick"],Ss={class:"text-xs opacity-50"},Ms={key:1,class:"grid grid-cols-2 gap-6"},Ts={class:"mb-3 text-center"},Ds={class:"text-base font-semibold text-gray-900 dark:text-white"},Rs={class:"relative w-full",style:{"aspect-ratio":"4 / 3"}},Ns={class:"mt-4 text-center text-xs text-gray-500 dark:text-gray-400"},As=P({__name:"CatchphraseTab",props:{sessionId:{},timeFilter:{}},setup(l){const a=We(()=>ze(()=>import("./EChartWordcloud-Ubal_aYg.js"),__vite__mapDeps([0,1,2,3,4]))),{t:e}=se(),o=Ae(),c=l,u=A(null),d=A(!1),g=A("list"),p=A(30),_=D(()=>[{label:e("quotes.catchphrase.viewMode.list"),value:"list"},{label:e("quotes.catchphrase.viewMode.wordcloud"),value:"wordcloud"}]),y=[{label:"10",value:10},{label:"30",value:30},{label:"50",value:50},{label:"100",value:100}],m=D(()=>u.value&&u.value.members.length>0),n=D(()=>{if(!u.value)return[];const v=p.value;return console.log("[CatchphraseTab] displayMembers recompute, topN:",v,"type:",typeof v),u.value.members.map(w=>{const S=w.catchphrases.slice(0,v);return console.log("[CatchphraseTab]",w.name,"total:",w.catchphrases.length,"display:",S.length),{...w,catchphrases:S}})}),i=D(()=>n.value.map(v=>({name:v.name,data:{words:v.catchphrases.map(w=>({word:w.content,count:w.count}))}}))),h=[{bg:"bg-amber-50 dark:bg-amber-900/20",text:"text-amber-700 dark:text-amber-400",badge:"bg-amber-100 dark:bg-amber-800/40 text-amber-600 dark:text-amber-300"},{bg:"bg-slate-50 dark:bg-slate-800/40",text:"text-slate-600 dark:text-slate-300",badge:"bg-slate-100 dark:bg-slate-700/60 text-slate-500 dark:text-slate-400"},{bg:"bg-orange-50 dark:bg-orange-900/15",text:"text-orange-600 dark:text-orange-400",badge:"bg-orange-100 dark:bg-orange-800/30 text-orange-500 dark:text-orange-300"}];function f(v){return v<h.length?h[v]:{bg:"bg-gray-50 dark:bg-gray-800/30",text:"text-gray-600 dark:text-gray-400",badge:"bg-gray-100 dark:bg-gray-700/40 text-gray-500 dark:text-gray-400"}}function b(v,w=20){return v.length<=w?v:v.slice(0,w)+"..."}async function k(){if(c.sessionId){d.value=!0;try{u.value=await ue().getCatchphraseAnalysis(c.sessionId,c.timeFilter),console.log("[CatchphraseTab] API result: members:",u.value?.members.length,"per-member catchphrases:",u.value?.members.map(v=>({name:v.name,count:v.catchphrases.length})))}catch(v){console.error("Failed to load catchphrase analysis:",v)}finally{d.value=!1}}}function C(v){o.openChatRecordDrawer({keywords:[v]})}return G(p,(v,w)=>{console.log("[CatchphraseTab] topN changed:",w,"->",v,"type:",typeof v)}),G(()=>[c.sessionId,c.timeFilter],()=>{k()},{immediate:!0,deep:!0}),(v,w)=>(r(),I("div",xs,[d.value?(r(),N(t(ne),{key:0,text:t(e)("quotes.catchphrase.loading")},null,8,["text"])):m.value?(r(),I(q,{key:2},[s("div",bs,[s("span",_s,x(t(e)("quotes.catchphrase.topN")),1),$(t(ce),{modelValue:p.value,"onUpdate:modelValue":w[0]||(w[0]=S=>p.value=S),size:"xs",items:y},null,8,["modelValue"]),w[2]||(w[2]=s("div",{class:"h-4 w-px bg-gray-200 dark:bg-gray-700"},null,-1)),$(t(ce),{modelValue:g.value,"onUpdate:modelValue":w[1]||(w[1]=S=>g.value=S),size:"xs",items:_.value},null,8,["modelValue","items"])]),g.value==="list"?(r(),I("div",ks,[(r(!0),I(q,null,te(n.value,S=>(r(),I("div",{key:S.memberId},[s("div",ws,[s("span",$s,x(S.name),1)]),s("div",Is,[(r(!0),I(q,null,te(S.catchphrases,(M,T)=>(r(),I("div",{key:T,class:Z(["inline-flex cursor-pointer items-center gap-1.5 rounded-full px-3 py-1.5 transition-opacity hover:opacity-75",f(T).bg]),title:M.content,onClick:L=>C(M.content)},[T<3?(r(),I("span",{key:0,class:Z(["flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-bold",f(T).badge])},x(T+1),3)):U("",!0),s("span",{class:Z(["text-sm font-medium",f(T).text])},x(b(M.content)),3),s("span",Ss,x(t(e)("quotes.catchphrase.times",{count:M.count})),1)],10,Cs))),128))])]))),128))])):(r(),I("div",Ms,[(r(!0),I(q,null,te(i.value,S=>(r(),I("div",{key:S.name},[s("div",Ts,[s("span",Ds,x(S.name),1)]),s("div",Rs,[S.data.words.length===0?(r(),N(t(le),{key:0,text:t(e)("quotes.catchphrase.empty.title"),class:"h-full"},null,8,["text"])):(r(),N(t(a),{key:1,data:S.data,height:"100%","max-words":p.value,"color-scheme":"default","size-scale":1,loading:d.value,onWordClick:C},null,8,["data","max-words","loading"]))])]))),128))])),s("p",Ns,x(t(e)("quotes.catchphrase.stats.clickHint")),1)],64)):(r(),N(t(le),{key:1,text:t(e)("quotes.catchphrase.empty.title")},null,8,["text"]))]))}});function xe(l){const a=[],e=[];return l?.startTs!=null&&(a.push("AND msg.ts >= ?"),e.push(l.startTs)),l?.endTs!=null&&(a.push("AND msg.ts <= ?"),e.push(l.endTs)),l?.memberId!=null&&(a.push("AND msg.sender_id = ?"),e.push(l.memberId)),{conditions:a.join(" "),params:e}}const fe="AND COALESCE(m.account_name, '') != '系统消息'";async function Ls(l,a){const{conditions:e,params:o}=xe(a),[c,u]=await Promise.all([window.chatApi.pluginQuery(l,`WITH daily_counts AS (
8
8
  SELECT
9
9
  strftime('%Y-%m-%d', msg.ts, 'unixepoch', 'localtime') as date,
10
10
  msg.sender_id,
@@ -160,4 +160,4 @@ import{_ as ze}from"./vendor-snapdom-XnBoh1gd.js";import{l as st,g as _e,a as ge
160
160
  FROM message msg
161
161
  JOIN member m ON msg.sender_id = m.id
162
162
  WHERE 1=1 ${eo} ${e}
163
- ORDER BY msg.ts ASC, msg.id ASC`,o)}function no(l){const{members:a,messages:e,options:o}=l;function c(R,O){return R<O?`${R}-${O}`:`${O}-${R}`}function u(R){return Math.round(R*100)/100}const d={nodes:[],links:[],maxLinkValue:0,communities:[],stats:{totalMembers:0,totalMessages:0,involvedMembers:0,edgeCount:0,communityCount:0}};if(a.length<2)return{...d,stats:{...d.stats,totalMembers:a.length}};const g=new Map;for(const R of a)g.set(R.id,{name:R.name,platformId:R.platformId,messageCount:R.messageCount});if(e.length<2)return{...d,stats:{...d.stats,totalMembers:a.length,totalMessages:e.length}};const p=new Map;for(const R of e)p.set(R.senderId,(p.get(R.senderId)||0)+1);const _=e.length,y=new Map,m=new Map;for(let R=0;R<e.length-1;R++){const O=e[R],E=new Set;let j=0;for(let X=R+1;X<e.length&&j<o.lookAhead;X++){const ee=e[X];if(ee.senderId===O.senderId||E.has(ee.senderId))continue;E.add(ee.senderId),j++;const re=(ee.ts-O.ts)/1e3,oe=Math.exp(-re/o.decaySeconds),de=1-(j-1)*.2,z=oe*de,F=c(O.senderId,ee.senderId);y.set(F,(y.get(F)||0)+z),m.set(F,(m.get(F)||0)+1)}}const n=o.lookAhead*.8,i=[];for(const[R,O]of y){const[E,j]=R.split("-"),X=parseInt(E),ee=parseInt(j),re=p.get(X)||0,oe=p.get(ee)||0,de=re*oe/_*n,z=de>0?O/de:0;i.push({sourceId:X,targetId:ee,rawScore:O,expectedScore:de,normalizedScore:z,coOccurrenceCount:m.get(R)||0})}const h=Math.max(...i.map(R=>R.rawScore),1),f=Math.max(...i.map(R=>R.normalizedScore),1),b=i.map(R=>{const O=.5*(R.rawScore/h)+.5*(R.normalizedScore/f);return{...R,rawScore:u(R.rawScore),expectedScore:u(R.expectedScore),normalizedScore:u(R.normalizedScore),hybridScore:u(O)}});b.sort((R,O)=>O.hybridScore-R.hybridScore);const k=b.slice(0,o.topEdges);if(k.length===0)return{...d,stats:{...d.stats,totalMembers:a.length,totalMessages:e.length}};const C=new Set;for(const R of k)C.add(R.sourceId),C.add(R.targetId);const v=new Map;for(const R of k)v.set(R.sourceId,(v.get(R.sourceId)||0)+R.hybridScore),v.set(R.targetId,(v.get(R.targetId)||0)+R.hybridScore);const w=Math.max(...v.values(),1),S=new Map;for(const R of C){const O=g.get(R)?.name||String(R);S.set(O,(S.get(O)||0)+1)}const M=new Map;for(const R of C){const O=g.get(R),E=O?.name||String(R);(S.get(E)||0)>1?M.set(R,`${E}#${(O?.platformId||String(R)).slice(-4)}`):M.set(R,E)}const T=Math.max(...[...C].map(R=>g.get(R)?.messageCount||0),1),L=[...C].map(R=>{const O=g.get(R),E=v.get(R)||0,j=E/w,X=O.messageCount/T,ee=20+(.7*j+.3*X)*35;return{id:R,name:M.get(R),messageCount:O.messageCount,symbolSize:Math.round(ee),degree:u(E),normalizedDegree:u(j)}});L.sort((R,O)=>O.degree-R.degree);const W=k.length>0?Math.max(...k.map(R=>R.hybridScore)):0,H=k.map(R=>({source:M.get(R.sourceId),target:M.get(R.targetId),value:R.hybridScore,rawScore:R.rawScore,expectedScore:R.expectedScore,coOccurrenceCount:R.coOccurrenceCount}));return{nodes:L,links:H,maxLinkValue:u(W),communities:[],stats:{totalMembers:a.length,totalMessages:e.length,involvedMembers:C.size,edgeCount:k.length,communityCount:0}}}async function oo(l,a,e){const o={nodes:[],links:[],maxLinkValue:0,communities:[],stats:{totalMembers:0,totalMessages:0,involvedMembers:0,edgeCount:0,communityCount:0}};try{const[c,u]=await Promise.all([so(l),ao(l,a)]);if(c.length<2||u.length<2)return{...o,stats:{...o.stats,totalMembers:c.length,totalMessages:u.length}};const d={...Zn,...e};return await window.chatApi.pluginCompute(no.toString(),{members:c,messages:u,options:d})}catch(c){return console.error("[chart-cluster] Failed to load cluster graph:",c),o}}const io={class:"mx-auto max-w-[920px] p-4 h-full"},ro={class:"flex h-full flex-col rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 shadow-sm overflow-hidden"},lo={class:"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50"},co={class:"flex items-center gap-3"},uo={class:"flex items-center gap-3"},mo={class:"p-3 w-64"},go={class:"text-sm font-medium mb-3"},po={class:"space-y-3"},ho={class:"text-xs text-gray-500 mb-1 block"},vo={class:"text-xs text-gray-400 mt-1"},fo={class:"text-xs text-gray-500 mb-1 block"},yo={class:"text-xs text-gray-400 mt-1"},xo={class:"flex-1 min-h-0 overflow-hidden"},bo={key:0,class:"h-full flex items-center justify-center"},_o={key:1,class:"h-full flex items-center justify-center"},ko={class:"text-center text-gray-400"},wo={key:2,class:"h-full"},$o={key:3,class:"h-full flex overflow-hidden"},Io={class:"w-64 border-r border-gray-200 dark:border-gray-700 flex flex-col overflow-hidden"},Co={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},So={class:"text-sm font-medium flex items-center gap-2"},Mo={class:"flex-1 overflow-y-auto"},To=["onClick"],Do={class:"flex items-center justify-between"},Ro={class:"text-sm truncate"},No={class:"text-xs text-gray-400"},Ao={class:"flex-1 overflow-hidden flex flex-col"},Lo={key:0,class:"flex-1 flex items-center justify-center"},Vo={class:"text-center text-gray-400"},Eo={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700 flex items-center gap-3"},Oo={class:"w-10 h-10 rounded-full flex items-center justify-center text-white font-bold bg-primary-500"},zo={class:"font-medium"},Fo={class:"text-xs text-gray-400"},Bo={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},Uo={class:"text-sm font-medium flex items-center gap-2"},Ho={class:"flex-1 overflow-y-auto"},Wo={key:0,class:"p-4 text-center text-gray-400"},jo={class:"flex items-center gap-3"},Po={class:"flex-1 min-w-0"},qo={class:"text-sm font-medium truncate"},Yo={class:"flex items-center gap-3 mt-0.5 text-xs text-gray-400"},Go={class:"w-20 h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"},Jo={key:4,class:"h-full flex flex-col overflow-hidden"},Ko={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},Qo={class:"text-sm font-medium flex items-center gap-2"},Xo={class:"flex-1 overflow-y-auto"},Zo={class:"flex items-center gap-3"},ei={class:"flex-1 min-w-0"},ti={class:"flex items-center gap-2 text-sm"},si={class:"font-medium truncate"},ai={class:"font-medium truncate"},ni={class:"flex items-center gap-3 mt-1 text-xs text-gray-400"},oi={class:"w-24 h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"},ii={key:0,class:"px-4 py-2 border-t border-gray-200 dark:border-gray-700 text-xs text-gray-400 flex items-center gap-4 bg-gray-50 dark:bg-gray-800/50"},ri=P({__name:"ClusterView",props:{sessionId:{},timeFilter:{}},setup(l){Je([Pt,Ke,qt,Yt,Qe]);const a=l,{t:e}=se(),o=gt(),c=D(()=>o.value==="dark"),u=A(!0),d=A(null),g=A("matrix"),p=A(null),_=A({lookAhead:3,decaySeconds:120,topEdges:150}),y=A(null);let m=null;async function n(){if(a.sessionId){u.value=!0;try{d.value=await oo(a.sessionId,a.timeFilter,{lookAhead:_.value.lookAhead,decaySeconds:_.value.decaySeconds,topEdges:_.value.topEdges})}catch(M){console.error("[chart-cluster] 加载小团体关系数据失败:",M),d.value=null}finally{u.value=!1}}}const i=D(()=>{if(!d.value||d.value.nodes.length===0)return null;const{nodes:M,links:T,maxLinkValue:L}=d.value,H=[...M].sort((E,j)=>j.messageCount-E.messageCount).slice(0,20).map(E=>E.name),R=new Map;for(const E of T)R.set(`${E.source}-${E.target}`,E.value),R.set(`${E.target}-${E.source}`,E.value);const O=[];for(let E=0;E<H.length;E++)for(let j=0;j<H.length;j++)if(E===j)O.push([E,j,-1]);else{const X=R.get(`${H[E]}-${H[j]}`)||0;O.push([E,j,X])}return{names:H,data:O,maxValue:L}});function h(){if(!i.value)return{graphic:{type:"text",style:{text:e("views.cluster.noData"),fill:"#999"}}};const{names:M,data:T,maxValue:L}=i.value;return{tooltip:{position:"top",formatter:W=>{const[H,R,O]=W.data;return O<0?`${M[H]}`:O===0?`${M[H]} ↔ ${M[R]}<br/>暂无关系数据`:`${M[H]} ↔ ${M[R]}<br/>临近度: ${O.toFixed(2)}`}},grid:{left:120,right:40,top:40,bottom:120},xAxis:{type:"category",data:M,splitArea:{show:!0},axisLabel:{rotate:45,fontSize:10,color:c.value?"#ccc":"#333"}},yAxis:{type:"category",data:M,splitArea:{show:!0},axisLabel:{fontSize:10,color:c.value?"#ccc":"#333"}},visualMap:{min:0,max:L||1,calculable:!0,orient:"horizontal",left:"center",bottom:10,inRange:{color:c.value?["#1a1a2e","#16213e","#0f3460","#e94560"]:["#f7f7f7","#fce4ec","#f8bbd9","#ee4567"]},textStyle:{color:c.value?"#ccc":"#333"}},series:[{type:"heatmap",data:T.filter(W=>W[2]>=0),label:{show:!1},emphasis:{itemStyle:{shadowBlur:10,shadowColor:"rgba(0, 0, 0, 0.5)"}}}],backgroundColor:"transparent"}}const f=D(()=>d.value?[...d.value.nodes].sort((M,T)=>T.messageCount-M.messageCount):[]),b=D(()=>!d.value||p.value===null?null:d.value.nodes.find(M=>M.id===p.value)||null),k=D(()=>{if(!d.value||!b.value)return[];const M=b.value.name,T=[];for(const L of d.value.links)L.source===M?T.push({otherName:L.target,value:L.value,coOccurrenceCount:L.coOccurrenceCount}):L.target===M&&T.push({otherName:L.source,value:L.value,coOccurrenceCount:L.coOccurrenceCount});return T.sort((L,W)=>W.value-L.value),T}),C=D(()=>d.value?d.value.links.slice(0,50):[]);function v(){m&&g.value==="matrix"&&m.setOption(h(),{notMerge:!0})}function w(){y.value&&(m=Xe(y.value,c.value?"dark":void 0),v())}function S(){m?.resize()}return G(g,async(M,T)=>{T==="matrix"&&m&&(m.dispose(),m=null),M==="matrix"&&(await Se(),w())}),G([d,()=>c.value],()=>{g.value==="matrix"&&v()},{deep:!0}),G(u,async(M,T)=>{T&&!M&&g.value==="matrix"&&(m&&(m.dispose(),m=null),await Se(),w())}),G(()=>[a.sessionId,a.timeFilter],()=>n(),{immediate:!0,deep:!0}),ke(()=>{window.addEventListener("resize",S),g.value==="matrix"&&Se(()=>w())}),Re(()=>{window.removeEventListener("resize",S),m?.dispose(),m=null}),(M,T)=>{const L=ge,W=qe("UButtonGroup"),H=Be,R=nt,O=we;return r(),I("div",io,[s("div",ro,[s("div",lo,[s("div",co,[$(W,{size:"xs"},{default:V(()=>[$(L,{color:g.value==="matrix"?"primary":"neutral",variant:g.value==="matrix"?"solid":"ghost",onClick:T[0]||(T[0]=E=>g.value="matrix")},{default:V(()=>[Q(x(t(e)("views.cluster.matrixView")),1)]),_:1},8,["color","variant"]),$(L,{color:g.value==="member"?"primary":"neutral",variant:g.value==="member"?"solid":"ghost",onClick:T[1]||(T[1]=E=>g.value="member")},{default:V(()=>[Q(x(t(e)("views.cluster.memberView")),1)]),_:1},8,["color","variant"]),$(L,{color:g.value==="circle"?"primary":"neutral",variant:g.value==="circle"?"solid":"ghost",onClick:T[2]||(T[2]=E=>g.value="circle")},{default:V(()=>[Q(x(t(e)("views.cluster.rankingView")),1)]),_:1},8,["color","variant"])]),_:1})]),s("div",uo,[$(R,null,{content:V(()=>[s("div",mo,[s("h4",go,x(t(e)("views.cluster.modelSettings")),1),s("div",po,[s("div",null,[s("label",ho,x(t(e)("views.cluster.lookAhead")),1),$(H,{modelValue:_.value.lookAhead,"onUpdate:modelValue":T[3]||(T[3]=E=>_.value.lookAhead=E),modelModifiers:{number:!0},type:"number",min:1,max:10,size:"xs",placeholder:"1-10"},null,8,["modelValue"]),s("p",vo,x(t(e)("views.cluster.lookAheadDesc")),1)]),s("div",null,[s("label",fo,x(t(e)("views.cluster.decaySeconds")),1),$(H,{modelValue:_.value.decaySeconds,"onUpdate:modelValue":T[4]||(T[4]=E=>_.value.decaySeconds=E),modelModifiers:{number:!0},type:"number",min:30,max:3600,size:"xs",placeholder:"30-3600"},null,8,["modelValue"]),s("p",yo,x(t(e)("views.cluster.decaySecondsDesc")),1)]),$(L,{size:"xs",color:"primary",class:"w-full mt-2",onClick:n},{default:V(()=>[Q(x(t(e)("views.cluster.applySettings")),1)]),_:1})])])]),default:V(()=>[$(L,{variant:"ghost",size:"xs",icon:"i-heroicons-adjustments-horizontal"})]),_:1}),$(L,{variant:"ghost",size:"xs",icon:"i-heroicons-arrow-path",onClick:n})])]),s("div",xo,[u.value?(r(),I("div",bo,[$(O,{name:"i-heroicons-arrow-path",class:"w-6 h-6 animate-spin text-gray-400"})])):!d.value||d.value.nodes.length===0?(r(),I("div",_o,[s("div",ko,[$(O,{name:"i-heroicons-user-group",class:"w-12 h-12 mx-auto mb-2 opacity-50"}),s("p",null,x(t(e)("views.cluster.noData")),1)])])):g.value==="matrix"?(r(),I("div",wo,[s("div",{ref_key:"chartRef",ref:y,class:"w-full h-full"},null,512)])):g.value==="member"?(r(),I("div",$o,[s("div",Io,[s("div",Co,[s("h3",So,[$(O,{name:"i-heroicons-users",class:"w-4 h-4"}),Q(" "+x(t(e)("views.cluster.selectMember")),1)])]),s("div",Mo,[(r(!0),I(q,null,te(f.value,E=>(r(),I("div",{key:E.id,class:Z(["px-4 py-2 cursor-pointer border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50",{"bg-primary-50 dark:bg-primary-900/30":p.value===E.id}]),onClick:j=>p.value=E.id},[s("div",Do,[s("span",Ro,x(E.name),1),s("span",No,x(E.messageCount),1)])],10,To))),128))])]),s("div",Ao,[b.value?(r(),I(q,{key:1},[s("div",Eo,[s("div",Oo,x(b.value.name.charAt(0)),1),s("div",null,[s("div",zo,x(b.value.name),1),s("div",Fo,x(t(e)("views.cluster.msgCount"))+": "+x(b.value.messageCount)+" | "+x(t(e)("views.cluster.relationCount"))+": "+x(k.value.length),1)])]),s("div",Bo,[s("h3",Uo,[$(O,{name:"i-heroicons-heart",class:"w-4 h-4 text-pink-500"}),Q(" "+x(t(e)("views.cluster.relationsByIntimacy")),1)])]),s("div",Ho,[k.value.length===0?(r(),I("div",Wo,x(t(e)("views.cluster.noRelations")),1)):U("",!0),(r(!0),I(q,null,te(k.value,(E,j)=>(r(),I("div",{key:E.otherName,class:"px-4 py-3 border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50"},[s("div",jo,[s("span",{class:Z(["w-6 h-6 rounded-full flex items-center justify-center text-xs font-bold",j<3?"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400"])},x(j+1),3),s("div",Po,[s("div",qo,x(E.otherName),1),s("div",Yo,[s("span",null,x(t(e)("views.cluster.intimacy"))+": "+x((E.value*100).toFixed(0))+"%",1),s("span",null,x(t(e)("views.cluster.coOccurrence"))+": "+x(E.coOccurrenceCount)+x(t(e)("views.cluster.times")),1)])]),s("div",Go,[s("div",{class:"h-full bg-linear-to-r from-pink-400 to-pink-600",style:be({width:`${k.value[0]?.value?E.value/k.value[0].value*100:0}%`})},null,4)])])]))),128))])],64)):(r(),I("div",Lo,[s("div",Vo,[$(O,{name:"i-heroicons-cursor-arrow-rays",class:"w-12 h-12 mx-auto mb-2 opacity-50"}),s("p",null,x(t(e)("views.cluster.selectMemberHint")),1)])]))])])):(r(),I("div",Jo,[s("div",Ko,[s("h3",Qo,[$(O,{name:"i-heroicons-trophy",class:"w-4 h-4 text-yellow-500"}),Q(" "+x(t(e)("views.cluster.interactionRanking")),1)])]),s("div",Xo,[(r(!0),I(q,null,te(C.value,(E,j)=>(r(),I("div",{key:j,class:"px-4 py-3 border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50"},[s("div",Zo,[s("span",{class:Z(["w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold",j<3?"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400"])},x(j+1),3),s("div",ei,[s("div",ti,[s("span",si,x(E.source),1),T[5]||(T[5]=s("span",{class:"text-gray-400"},"↔",-1)),s("span",ai,x(E.target),1)]),s("div",ni,[s("span",null,x(t(e)("views.cluster.score"))+": "+x(E.value.toFixed(2)),1),s("span",null,x(t(e)("views.cluster.coOccurrence"))+": "+x(E.coOccurrenceCount)+x(t(e)("views.cluster.times")),1)])]),s("div",oi,[s("div",{class:"h-full bg-linear-to-r from-yellow-400 to-orange-500",style:be({width:`${C.value[0]?.value?E.value/C.value[0].value*100:0}%`})},null,4)])])]))),128))])]))]),d.value?(r(),I("div",ii,[s("span",null,x(t(e)("views.cluster.totalMembers"))+": "+x(d.value.stats.totalMembers),1),s("span",null,x(t(e)("views.cluster.totalMessages"))+": "+x(d.value.stats.totalMessages.toLocaleString()),1),s("span",null,x(t(e)("views.cluster.involvedMembers"))+": "+x(d.value.stats.involvedMembers),1),s("span",null,x(t(e)("views.cluster.edgeCount"))+": "+x(d.value.stats.edgeCount),1)])):U("",!0)])])}}}),li={class:"flex h-full flex-col"},ci={class:"min-h-0 flex-1 overflow-y-auto"},di=P({__name:"GroupRelationships",props:{sessionId:{},timeFilter:{}},setup(l){const{t:a}=se(),e=l,o=A("mention-graph"),c=D(()=>[{id:"mention-graph",label:a("analysis.subTabs.groupRelationships.mentionGraph"),icon:"i-heroicons-arrows-right-left"},{id:"mention-ranking",label:a("analysis.subTabs.groupRelationships.mentionRanking"),icon:"i-heroicons-heart"},{id:"proximity",label:a("analysis.subTabs.groupRelationships.proximity"),icon:"i-heroicons-user-group"}]);return(u,d)=>(r(),I("div",li,[$(t(Ye),{modelValue:o.value,"onUpdate:modelValue":d[0]||(d[0]=g=>o.value=g),items:c.value,"persist-key":"groupRelationshipsTab",size:"sm"},null,8,["modelValue","items"]),s("div",ci,[$(Ne,{name:"fade",mode:"out-in"},{default:V(()=>[o.value==="mention-graph"?(r(),N(vn,{key:0,"session-id":e.sessionId,"time-filter":e.timeFilter},null,8,["session-id","time-filter"])):o.value==="mention-ranking"?(r(),N(Xn,{key:1,"session-id":e.sessionId,"time-filter":e.timeFilter},null,8,["session-id","time-filter"])):o.value==="proximity"?(r(),N(ri,{key:2,"session-id":e.sessionId,"time-filter":e.timeFilter},null,8,["session-id","time-filter"])):U("",!0)]),_:1})])]))}}),ui=Le(di,[["__scopeId","data-v-90e47115"]]),mi={class:"flex h-full flex-col"},gi={class:"flex-1 min-h-0 overflow-y-auto"},pi=P({__name:"ViewTab",props:{sessionId:{},sessionName:{},timeFilter:{}},setup(l){const{t:a,locale:e}=se(),o=l,c=D(()=>{const p=[{id:"message",label:a("analysis.subTabs.view.message"),icon:"i-heroicons-chat-bubble-left-right"},{id:"topic",label:a("analysis.subTabs.view.topic"),icon:"i-heroicons-cloud"},{id:"group-relationships",label:a("analysis.subTabs.view.groupRelationships"),icon:"i-heroicons-heart"},{id:"hot-repeat",label:a("analysis.subTabs.quotes.hotRepeat"),icon:"i-heroicons-fire"},{id:"catchphrase",label:a("analysis.subTabs.quotes.catchphrase"),icon:"i-heroicons-chat-bubble-bottom-center-text"}];return pt("groupRanking",e.value)&&p.splice(1,0,{id:"ranking",label:a("analysis.subTabs.view.ranking"),icon:"i-heroicons-trophy"}),p}),u=A("message"),d=A(null),g=D(()=>({...o.timeFilter,memberId:d.value}));return(p,_)=>(r(),I("div",mi,[$(t(Ye),{modelValue:u.value,"onUpdate:modelValue":_[1]||(_[1]=y=>u.value=y),items:c.value,"persist-key":"groupViewTab"},{right:V(()=>[u.value!=="topic"?(r(),N(Ct,{key:0,modelValue:d.value,"onUpdate:modelValue":_[0]||(_[0]=y=>d.value=y),"session-id":o.sessionId},null,8,["modelValue","session-id"])):U("",!0)]),_:1},8,["modelValue","items"]),s("div",gi,[$(Ne,{name:"fade",mode:"out-in"},{default:V(()=>[u.value==="message"?(r(),N(St,{key:0,"session-id":o.sessionId,"session-name":o.sessionName,"time-filter":g.value},null,8,["session-id","session-name","time-filter"])):u.value==="topic"?(r(),N(t(Mt),{key:1,"session-id":o.sessionId,"time-filter":o.timeFilter},null,8,["session-id","time-filter"])):u.value==="group-relationships"?(r(),N(ui,{key:2,"session-id":o.sessionId,"time-filter":g.value},null,8,["session-id","time-filter"])):u.value==="ranking"?(r(),N(Ga,{key:3,"session-id":o.sessionId,"time-filter":g.value},null,8,["session-id","time-filter"])):u.value==="hot-repeat"?(r(),N(t(Js),{key:4,"session-id":o.sessionId,"time-filter":o.timeFilter},null,8,["session-id","time-filter"])):u.value==="catchphrase"?(r(),N(t(As),{key:5,"session-id":o.sessionId,"time-filter":o.timeFilter},null,8,["session-id","time-filter"])):U("",!0)]),_:1})])]))}}),hi=Le(pi,[["__scopeId","data-v-6549d466"]]),vi={key:0,class:"mb-6"},fi={class:"flex items-center gap-3"},yi={class:"text-xl font-bold text-gray-900 dark:text-white"},xi={class:"text-sm text-gray-500 dark:text-gray-400"},bi={class:"mb-4 flex flex-wrap items-center justify-between gap-3"},_i={class:"flex items-center gap-2"},ki={class:"text-xs text-gray-500 dark:text-gray-400"},wi={key:0,class:"flex h-60 items-center justify-center"},$i={key:1,class:"flex h-60 flex-col items-center justify-center"},Ii={class:"text-gray-500 dark:text-gray-400"},Ci={key:2,class:"flex min-h-0 flex-1 flex-col"},Si={class:"w-full"},Mi={class:"sticky top-0 bg-gray-50 dark:bg-gray-800"},Ti={class:"text-left text-xs font-medium uppercase text-gray-500 dark:text-gray-400"},Di={class:"px-4 py-4"},Ri={class:"px-4 py-4"},Ni={class:"px-4 py-4"},Ai={class:"w-64 px-4 py-4"},Li={class:"inline-flex items-center gap-1.5"},Vi={class:"px-4 py-4 text-right"},Ei={class:"divide-y divide-gray-200 dark:divide-gray-700"},Oi={class:"px-4 py-4"},zi={class:"px-4 py-4"},Fi={class:"flex items-center gap-2"},Bi=["src","alt"],Ui={key:1,class:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-pink-400 to-pink-600 text-xs font-medium text-white"},Hi={class:"text-sm font-medium text-gray-900 dark:text-white"},Wi={class:"ml-1 text-sm text-gray-500 dark:text-gray-400"},ji={class:"px-4 py-4"},Pi={key:0,class:"text-sm font-medium text-gray-900 dark:text-white"},qi={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},Yi={class:"px-4 py-4"},Gi={class:"text-sm font-semibold text-gray-900 dark:text-white"},Ji={class:"px-4 py-4"},Ki={class:"max-w-xs"},Qi={key:0,class:"absolute right-2 top-1/2 -translate-y-1/2"},Xi={class:"px-4 py-4 text-right"},Zi={key:0,class:"flex items-center justify-between border-t border-gray-200 px-6 py-4 dark:border-gray-700"},er={class:"text-sm text-gray-500 dark:text-gray-400"},tr={class:"flex items-center gap-2"},sr={class:"text-sm font-medium text-gray-600 dark:text-gray-300"},ar={class:"p-6 text-center"},nr={class:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/30"},or={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},ir={class:"mb-6 text-sm text-gray-500 dark:text-gray-400"},rr={class:"flex justify-center gap-3"},lr={class:"p-6"},cr={class:"mb-4 flex items-center gap-3"},dr={class:"flex h-10 w-10 items-center justify-center rounded-full bg-amber-100 dark:bg-amber-900/30"},ur={class:"text-lg font-semibold text-gray-900 dark:text-white"},mr={class:"mb-2 text-sm text-gray-600 dark:text-gray-400"},gr={class:"mb-6 text-xs text-amber-700 dark:text-amber-300"},pr={class:"flex justify-end gap-2"},Me=20,hr=P({__name:"MemberList",props:{sessionId:{},showHeader:{type:Boolean,default:!0}},emits:["data-changed"],setup(l,{emit:a}){const{t:e}=se(),o=l,c=a,u=A([]),d=A([]),g=A(!1),p=A(""),_=A(null),y=A(!1),m=A(new Set),n=A(!1),i=A(!1),h=A(1),f=A(0),b=A(0),k=A("desc"),C=A(null);let v=null;function w(z){return z.groupNickname||z.accountName||z.platformId}function S(z){return w(z).slice(0,1)}const M=D(()=>d.value.filter(z=>m.value.has(z.id))),T=D(()=>M.value.length===2),L=D(()=>{if(M.value.length!==2)return null;const[z,F]=M.value;return F.messageCount>z.messageCount||F.messageCount===z.messageCount&&F.id<z.id?{primary:F,secondary:z}:{primary:z,secondary:F}});function W(){k.value=k.value==="desc"?"asc":"desc",h.value=1,H()}async function H(){if(o.sessionId){g.value=!0;try{const z=await ue().getMembersPaginated(o.sessionId,{page:h.value,pageSize:Me,search:p.value.trim(),sortOrder:k.value});u.value=z.items,f.value=z.total,b.value=z.totalPages}catch(z){console.error("加载成员列表失败:",z)}finally{g.value=!1}}}async function R(){if(o.sessionId)try{d.value=await ue().getMembers(o.sessionId)}catch(z){console.error("加载所有成员失败:",z)}}async function O(z,F){const B=JSON.parse(JSON.stringify(F)),he=JSON.stringify(z.aliases),ie=JSON.stringify(B);if(he!==ie){C.value=z.id;try{if(await ue().updateMemberAliases(o.sessionId,z.id,B)){const pe=u.value.findIndex(Y=>Y.id===z.id);pe!==-1&&(u.value[pe]={...u.value[pe],aliases:B})}}catch(ve){console.error("保存别名失败:",ve)}finally{C.value=null}}}function E(z){_.value=z}function j(){_.value=null}async function X(){if(_.value){y.value=!0;try{await ue().deleteMember(o.sessionId,_.value.id)&&(await H(),await R(),c("data-changed"))}catch(z){console.error("删除成员失败:",z)}finally{y.value=!1,_.value=null}}}function ee(z){const F=new Set(m.value);F.has(z)?F.delete(z):F.add(z),m.value=F}function re(){T.value&&(n.value=!0)}function oe(){m.value=new Set}async function de(){if(L.value){i.value=!0;try{await ue().mergeMembers(o.sessionId,L.value.primary.id,L.value.secondary.id)&&(n.value=!1,oe(),await H(),await R(),c("data-changed"))}catch(z){console.error("合并成员失败:",z)}finally{i.value=!1}}}return G(p,()=>{h.value=1,v&&clearTimeout(v),v=setTimeout(()=>{H()},300)}),G(h,()=>{H()}),G(()=>o.sessionId,()=>{p.value="",h.value=1,oe(),H(),R()},{immediate:!0}),ke(()=>{H(),R()}),(z,F)=>{const B=ge,he=Be,ie=we,ve=Ue,pe=ot,Y=it,Ie=_e;return r(),I("div",{class:Z(["main-content",o.showHeader?"max-w-5xl p-6":"flex h-full max-w-none flex-col overflow-hidden p-4"])},[o.showHeader?(r(),I("div",vi,[s("div",fi,[s("div",null,[s("h2",yi,x(t(e)("members.list.title")),1),s("p",xi,x(t(e)("members.list.description",{count:f.value})),1)])])])):U("",!0),$(Tt,{class:"mb-6","session-id":l.sessionId,members:d.value,"is-loading":g.value,"chat-type":"group"},null,8,["session-id","members","is-loading"]),s("div",bi,[$(he,{modelValue:p.value,"onUpdate:modelValue":F[1]||(F[1]=J=>p.value=J),placeholder:t(e)("members.list.searchPlaceholder"),icon:"i-heroicons-magnifying-glass",class:"w-full md:w-100"},Pe({_:2},[p.value?{name:"trailing",fn:V(()=>[$(B,{icon:"i-heroicons-x-mark",variant:"link",color:"neutral",size:"xs",onClick:F[0]||(F[0]=J=>p.value="")})]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),s("div",_i,[s("span",ki,x(t(e)("members.list.mergeSelectedCount",{count:m.value.size})),1),$(B,{icon:"i-heroicons-link",size:"sm",color:"primary",disabled:!T.value,onClick:re},{default:V(()=>[Q(x(t(e)("members.list.mergeSelected")),1)]),_:1},8,["disabled"])])]),s("div",{class:Z(["rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900",o.showHeader?"":"flex min-h-0 flex-1 flex-col"])},[g.value?(r(),I("div",wi,[$(ie,{name:"i-heroicons-arrow-path",class:"h-8 w-8 animate-spin text-pink-500"})])):u.value.length===0?(r(),I("div",$i,[$(ie,{name:"i-heroicons-user-group",class:"mb-3 h-12 w-12 text-gray-300 dark:text-gray-600"}),s("p",Ii,x(p.value?t(e)("members.list.noMatch"):t(e)("members.list.empty")),1)])):(r(),I("div",Ci,[s("div",{class:Z(["max-h-[500px] overflow-y-auto",o.showHeader?"":"max-h-none min-h-0 flex-1"])},[s("table",Si,[s("thead",Mi,[s("tr",Ti,[F[7]||(F[7]=s("th",{class:"w-12 px-4 py-4"},null,-1)),s("th",Di,x(t(e)("members.list.table.accountName")),1),s("th",Ri,x(t(e)("members.list.table.groupNickname")),1),s("th",Ni,[s("button",{class:"flex items-center gap-1.5 hover:text-gray-700 dark:hover:text-gray-200",onClick:W},[Q(x(t(e)("members.list.table.messageCount"))+" ",1),$(ie,{name:k.value==="desc"?"i-heroicons-arrow-down":"i-heroicons-arrow-up",class:"h-3.5 w-3.5"},null,8,["name"])])]),s("th",Ai,[s("div",Li,[s("span",null,x(t(e)("members.list.table.customAlias")),1),$(ve,{text:t(e)("members.list.tip"),popper:{placement:"top"}},{default:V(()=>[$(ie,{name:"i-heroicons-question-mark-circle",class:"h-4 w-4 text-gray-400 dark:text-gray-500"})]),_:1},8,["text"])])]),s("th",Vi,x(t(e)("members.list.table.actions")),1)])]),s("tbody",Ei,[(r(!0),I(q,null,te(u.value,J=>(r(),I("tr",{key:J.id,class:"hover:bg-gray-50 dark:hover:bg-gray-800/50"},[s("td",Oi,[$(pe,{"model-value":m.value.has(J.id),onClick:je(Ce=>ee(J.id),["stop"])},null,8,["model-value","onClick"])]),s("td",zi,[s("div",Fi,[J.avatar?(r(),I("img",{key:0,src:J.avatar,alt:w(J),class:"h-8 w-8 shrink-0 rounded-full object-cover"},null,8,Bi)):(r(),I("div",Ui,x(S(J)),1)),s("div",null,[s("span",Hi,x(J.accountName||"-"),1),s("span",Wi,"("+x(J.platformId)+")",1)])])]),s("td",ji,[J.groupNickname?(r(),I("span",Pi,x(J.groupNickname),1)):(r(),I("span",qi,"-"))]),s("td",Yi,[s("span",Gi,x(J.messageCount.toLocaleString()),1)]),s("td",Ji,[s("div",Ki,[$(Y,{"model-value":J.aliases,placeholder:t(e)("members.list.aliasPlaceholder"),class:"w-80","onUpdate:modelValue":Ce=>O(J,Ce)},null,8,["model-value","placeholder","onUpdate:modelValue"]),C.value===J.id?(r(),I("div",Qi,[$(ie,{name:"i-heroicons-arrow-path",class:"h-4 w-4 animate-spin text-pink-500"})])):U("",!0)])]),s("td",Xi,[$(B,{label:t(e)("members.list.delete"),size:"xs",onClick:Ce=>E(J)},null,8,["label","onClick"])])]))),128))])])],2),b.value>1?(r(),I("div",Zi,[s("p",er,x(t(e)("members.list.pagination",{start:(h.value-1)*Me+1,end:Math.min(h.value*Me,f.value),total:f.value})),1),s("div",tr,[$(B,{icon:"i-heroicons-chevron-left",variant:"outline",size:"sm",disabled:h.value===1||g.value,onClick:F[2]||(F[2]=J=>h.value--)},null,8,["disabled"]),s("span",sr,x(h.value)+" / "+x(b.value),1),$(B,{icon:"i-heroicons-chevron-right",variant:"outline",size:"sm",disabled:h.value>=b.value||g.value,onClick:F[3]||(F[3]=J=>h.value++)},null,8,["disabled"])])])):U("",!0)]))],2),$(Ie,{open:!!_.value,ui:{content:"max-w-sm"},"onUpdate:open":F[4]||(F[4]=J=>_.value=null)},{content:V(()=>[s("div",ar,[s("div",nr,[$(ie,{name:"i-heroicons-exclamation-triangle",class:"h-7 w-7 text-red-500"})]),s("h3",or,x(t(e)("members.list.modal.title")),1),s("p",ir,x(t(e)("members.list.modal.content",{name:_.value?w(_.value):"",count:_.value?.messageCount.toLocaleString()})),1),s("div",rr,[$(B,{variant:"outline",onClick:j},{default:V(()=>[Q(x(t(e)("members.list.modal.cancel")),1)]),_:1}),$(B,{color:"error",loading:y.value,onClick:X},{default:V(()=>[Q(x(t(e)("members.list.modal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"]),$(Ie,{open:n.value,ui:{content:"max-w-md"},"onUpdate:open":F[6]||(F[6]=J=>n.value=J)},{content:V(()=>[s("div",lr,[s("div",cr,[s("div",dr,[$(ie,{name:"i-heroicons-link",class:"h-5 w-5 text-amber-600 dark:text-amber-400"})]),s("h3",ur,x(t(e)("members.list.mergeModal.title")),1)]),s("p",mr,x(t(e)("members.list.mergeModal.content",{source:L.value?w(L.value.secondary):"",sourceCount:L.value?L.value.secondary.messageCount.toLocaleString():"0",target:L.value?w(L.value.primary):"",targetCount:L.value?L.value.primary.messageCount.toLocaleString():"0"})),1),s("p",gr,x(t(e)("members.list.mergeModal.hint")),1),s("div",pr,[$(B,{variant:"outline",disabled:i.value,onClick:F[5]||(F[5]=J=>n.value=!1)},{default:V(()=>[Q(x(t(e)("members.list.mergeModal.cancel")),1)]),_:1},8,["disabled"]),$(B,{color:"primary",loading:i.value,onClick:de},{default:V(()=>[Q(x(t(e)("members.list.mergeModal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"])],2)}}}),vr={class:"main-content max-w-5xl p-6"},fr={class:"mb-4 text-sm text-gray-500 dark:text-gray-400 no-capture"},yr={key:0,class:"divide-y divide-gray-100 dark:divide-gray-800"},xr={class:"w-32 shrink-0 pt-0.5 font-medium text-gray-900 dark:text-white"},br={class:"flex flex-1 flex-wrap items-center gap-2"},_r={class:"flex items-center gap-1.5 rounded-lg bg-gray-50 px-3 py-1.5 dark:bg-gray-800"},kr={class:"text-xs text-gray-400"},wr={key:0,class:"text-gray-300 dark:text-gray-600"},$r=P({__name:"NicknameHistory",props:{sessionId:{}},setup(l){const{t:a}=se(),e=l,o=A([]),c=A([]),u=A(!1);function d(_){return _.groupNickname||_.accountName||_.platformId}async function g(){if(e.sessionId)try{o.value=await ue().getMembers(e.sessionId)}catch(_){console.error("加载成员列表失败:",_)}}async function p(){if(!e.sessionId||o.value.length===0)return;u.value=!0;const _=[];try{const y=o.value.map(n=>ue().getMemberNameHistory(e.sessionId,n.id)),m=await Promise.all(y);o.value.forEach((n,i)=>{const h=m[i];h.length>2&&_.push({memberId:n.id,name:d(n),history:h})}),c.value=_}catch(y){console.error("加载昵称变更记录失败:",y)}finally{u.value=!1}}return G(()=>e.sessionId,async()=>{await g()},{immediate:!0}),G(()=>o.value.length,()=>{o.value.length>0&&p()}),ke(async()=>{o.value.length===0&&await g()}),(_,y)=>{const m=Fe;return r(),I("div",vr,[s("p",fr,x(t(a)("members.nicknameHistory.note")),1),$(t(K),{title:t(a)("members.nicknameHistory.title"),description:u.value?t(a)("members.nicknameHistory.loading"):c.value.length>0?t(a)("members.nicknameHistory.hasChanges",{count:c.value.length}):t(a)("members.nicknameHistory.noChanges")},{default:V(()=>[!u.value&&c.value.length>0?(r(),I("div",yr,[(r(!0),I(q,null,te(c.value,n=>(r(),I("div",{key:n.memberId,class:"flex items-start gap-3 px-5 py-3"},[s("div",xr,x(n.name),1),s("div",br,[(r(!0),I(q,null,te(n.history,(i,h)=>(r(),I(q,{key:h},[s("div",_r,[s("span",{class:Z(["text-sm",i.endTs===null?"font-semibold text-pink-600":"text-gray-700 dark:text-gray-300"])},x(i.name),3),i.endTs===null?(r(),N(m,{key:0,color:"primary",variant:"soft",size:"xs"},{default:V(()=>[Q(x(t(a)("members.nicknameHistory.current")),1)]),_:1})):U("",!0),s("span",kr,"("+x(t(Dt)(i.startTs,i.endTs))+")",1)]),h<n.history.length-1?(r(),I("span",wr,"→")):U("",!0)],64))),128))])]))),128))])):u.value?(r(),N(t(ne),{key:2,text:t(a)("members.nicknameHistory.loadingText")},null,8,["text"])):(r(),N(t(le),{key:1,text:t(a)("members.nicknameHistory.empty")},null,8,["text"]))]),_:1},8,["title","description"])])}}}),Ir={class:"flex h-full flex-col overflow-hidden bg-white dark:bg-gray-900"},Cr={class:"flex flex-none items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"},Sr={class:"text-lg font-semibold text-gray-900 dark:text-white"},Mr={class:"flex-1 overflow-auto"},Tr=P({__name:"NicknameHistoryEntry",props:{sessionId:{}},setup(l){const{t:a}=se(),e=l,o=A(!1);return(c,u)=>{const d=ge,g=_e;return r(),I(q,null,[$(d,{variant:"ghost",icon:"i-heroicons-clock",size:"sm",onClick:u[0]||(u[0]=p=>o.value=!0)},{default:V(()=>[Q(x(t(a)("analysis.subTabs.member.nicknameHistory")),1)]),_:1}),e.sessionId?(r(),N(g,{key:0,open:o.value,"onUpdate:open":u[2]||(u[2]=p=>o.value=p),ui:{content:"max-w-6xl h-[85vh]"}},{content:V(()=>[s("div",Ir,[s("div",Cr,[s("h2",Sr,x(t(a)("analysis.subTabs.member.nicknameHistory")),1),$(d,{variant:"ghost",icon:"i-heroicons-x-mark",size:"sm",onClick:u[1]||(u[1]=p=>o.value=!1)})]),s("div",Mr,[$($r,{"session-id":e.sessionId},null,8,["session-id"])])])]),_:1},8,["open"])):U("",!0)],64)}}}),Dr={class:"flex h-full flex-col bg-white dark:bg-gray-900",style:{"padding-top":"var(--titlebar-area-height)"}},Rr={class:"mt-2 flex items-center justify-between gap-3"},Nr={class:"flex shrink-0 items-center gap-0.5 overflow-x-auto scrollbar-hide"},Ar=["onClick"],Lr={class:"whitespace-nowrap"},Vr={class:"relative flex-1 overflow-y-auto"},Er={class:"h-full"},Or={key:2,class:"flex h-full items-center justify-center"},zr={class:"text-gray-500"},Fr={class:"flex h-full flex-col overflow-hidden bg-white dark:bg-gray-900"},Br={class:"flex flex-none items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"},Ur={class:"text-lg font-semibold text-gray-900 dark:text-white"},Hr={class:"text-sm text-gray-500 dark:text-gray-400"},Wr={class:"flex items-center gap-2"},jr={class:"flex-1 overflow-hidden"},Pr=P({__name:"index",setup(l){const a=We(()=>ze(()=>import("./MessageExportModal-DTgxz1eQ.js"),__vite__mapDeps([5,6,4,7,8,9,10,11,1,2,3,12]))),{t:e}=se(),o=rt(),c=lt(),u=ht(),d=Ae(),g=vt(),{currentSessionId:p}=ft(u),_=A(!1),y=A(!1),m=A(!1),n=A(!1);function i(){d.openChatRecordDrawer({})}const h=[{id:"overview",labelKey:"analysis.tabs.overview",icon:"i-heroicons-chart-pie"},{id:"view",labelKey:"analysis.tabs.view",icon:"i-heroicons-presentation-chart-bar"},{id:"ai-chat",labelKey:"analysis.tabs.aiChat",icon:"i-heroicons-chat-bubble-left-ellipsis"},{id:"lab",labelKey:"analysis.tabs.lab",icon:"i-heroicons-beaker"}],f=D(()=>g.debugMode?[...h,{id:"debug",labelKey:"analysis.tabs.debug",icon:"i-heroicons-bug-ant"}]:h),b=D(()=>f.value.map(F=>F.id)),{activeTab:k,isLoading:C,isInitialLoad:v,session:w,memberActivity:S,hourlyActivity:M,dailyActivity:T,messageTypes:L,timeRangeValue:W,fullTimeRange:H,availableYears:R,timeFilter:O,selectedYearForOverview:E,initialTimeState:j,loadData:X}=Rt({route:o,router:c,currentSessionId:p,selectSession:u.selectSession,defaultTab:g.defaultSessionTab,validTabIds:b.value}),ee=D(()=>S.value.slice(0,3)),re=D(()=>S.value.length<=1?[]:[...S.value].sort((F,B)=>F.messageCount-B.messageCount).slice(0,1)),oe=D(()=>S.value.reduce((F,B)=>F+B.messageCount,0)),de=D(()=>S.value.filter(F=>F.messageCount>0).length),{headerDescription:z}=Nt({session:w,fullTimeRange:H,timeRangeValue:W,descriptionKey:"analysis.groupChat.description"});return(F,B)=>{const he=ge,ie=Ue,ve=we,pe=_e;return r(),I("div",Dr,[t(v)?(r(),N(ne,{key:0,variant:"page",text:t(e)("analysis.groupChat.loading")},null,8,["text"])):t(w)?(r(),I(q,{key:1},[$(At,{title:t(w).name,description:t(z),avatar:t(w).groupAvatar,icon:"i-heroicons-chat-bubble-left-right","icon-class":"bg-primary-600 text-white dark:bg-primary-500 dark:text-white"},{actions:V(()=>[t(d).toolsPanelPosition==="header"?(r(),N(ie,{key:0,text:t(e)("analysis.overview.tools")},{default:V(()=>[$(he,{icon:"i-heroicons-wrench-screwdriver",variant:"ghost",color:"primary",size:"sm",onClick:B[0]||(B[0]=Y=>t(d).toggleToolsPanelOpen())})]),_:1},8,["text"])):U("",!0),$(Te)]),default:V(()=>[s("div",Rr,[s("div",Nr,[(r(!0),I(q,null,te(f.value,Y=>(r(),I("button",{key:Y.id,class:Z(["flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all",[t(k)===Y.id?"bg-pink-500 text-white dark:bg-pink-900/30 dark:text-pink-300":"text-gray-600 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800"]]),onClick:Ie=>k.value=Y.id},[$(ve,{name:Y.icon,class:"h-4 w-4"},null,8,["name"]),s("span",Lr,x(t(e)(Y.labelKey)),1)],10,Ar))),128))]),$(Ot,{modelValue:t(W),"onUpdate:modelValue":B[1]||(B[1]=Y=>ut(W)?W.value=Y:null),"session-id":t(p)??void 0,visible:t(k)!=="ai-chat"&&t(k)!=="memory"&&t(k)!=="lab"&&t(k)!=="debug","initial-state":t(j),"onUpdate:fullRange":B[2]||(B[2]=Y=>H.value=Y),"onUpdate:availableYears":B[3]||(B[3]=Y=>R.value=Y)},null,8,["modelValue","session-id","visible","initial-state"])])]),_:1},8,["title","description","avatar"]),s("div",Vr,[t(C)?(r(),N(ne,{key:0,variant:"overlay"})):U("",!0),s("div",Er,[$(Ne,{name:"tab-slide",mode:"out-in"},{default:V(()=>[t(k)==="overview"?(r(),N(ea,{key:"overview-"+t(p),session:t(w),"member-activity":t(S),"top-members":ee.value,"bottom-members":re.value,"message-types":t(L),"hourly-activity":t(M),"daily-activity":t(T),"time-range":t(H),"selected-year":t(E),"filtered-message-count":oe.value,"filtered-member-count":de.value,"time-filter":t(O)},null,8,["session","member-activity","top-members","bottom-members","message-types","hourly-activity","daily-activity","time-range","selected-year","filtered-message-count","filtered-member-count","time-filter"])):t(k)==="view"?(r(),N(hi,{key:"view-"+t(p),"session-id":t(p),"session-name":t(w).name,"time-filter":t(O)},null,8,["session-id","session-name","time-filter"])):t(k)==="ai-chat"?(r(),N(t(zt),{key:"ai-chat-"+t(p),"session-id":t(p),"session-name":t(w).name,"chat-type":"group"},null,8,["session-id","session-name"])):t(k)==="memory"?(r(),N(Ft,{key:"memory-"+t(p),"session-id":t(p),"session-name":t(w).name},null,8,["session-id","session-name"])):t(k)==="lab"?(r(),N(Bt,{key:"lab-"+t(p),"session-id":t(p),"session-name":t(w).name,"time-filter":t(O),"chat-type":"group",mode:"sql-only"},null,8,["session-id","session-name","time-filter"])):t(k)==="debug"?(r(),N(t(Ut),{key:"debug-"+t(p),"session-id":t(p)},null,8,["session-id"])):U("",!0)]),_:1})])]),$(Lt,{onOpenIncrementalImport:B[4]||(B[4]=Y=>y.value=!0),onOpenSessionIndex:B[5]||(B[5]=Y=>_.value=!0),onOpenMemberManagement:B[6]||(B[6]=Y=>n.value=!0),onOpenChatRecord:i,onOpenMessageExport:B[7]||(B[7]=Y=>m.value=!0)}),t(g).debugMode?(r(),N(Ht,{key:0})):U("",!0)],64)):(r(),I("div",Or,[s("p",zr,x(t(e)("analysis.groupChat.loadError")),1)])),t(p)&&t(w)&&t(w).messageCount>0?(r(),N(Vt,{key:3,modelValue:_.value,"onUpdate:modelValue":B[8]||(B[8]=Y=>_.value=Y),"session-id":t(p),"message-count":t(w).messageCount},null,8,["modelValue","session-id","message-count"])):U("",!0),t(p)&&t(w)?(r(),N(Et,{key:4,modelValue:y.value,"onUpdate:modelValue":B[9]||(B[9]=Y=>y.value=Y),"session-id":t(p),"session-name":t(w).name,onImported:t(X)},null,8,["modelValue","session-id","session-name","onImported"])):U("",!0),t(p)?(r(),N(t(a),{key:5,modelValue:m.value,"onUpdate:modelValue":B[10]||(B[10]=Y=>m.value=Y)},null,8,["modelValue"])):U("",!0),t(p)?(r(),N(pe,{key:6,open:n.value,"onUpdate:open":B[12]||(B[12]=Y=>n.value=Y),ui:{content:"max-w-6xl h-[85vh]"}},{content:V(()=>[s("div",Fr,[s("div",Br,[s("div",null,[s("h2",Ur,x(t(e)("analysis.tooltip.memberManagement")),1),s("p",Hr,x(t(e)("members.list.description",{count:t(w)?.memberCount??0})),1)]),s("div",Wr,[$(Tr,{"session-id":t(p)},null,8,["session-id"]),$(he,{variant:"ghost",icon:"i-heroicons-x-mark",size:"sm",onClick:B[11]||(B[11]=Y=>n.value=!1)})])]),s("div",jr,[$(hr,{"session-id":t(p),"show-header":!1,onDataChanged:t(X)},null,8,["session-id","onDataChanged"])])])]),_:1},8,["open"])):U("",!0)])}}}),tl=Le(Pr,[["__scopeId","data-v-c37848ed"]]);export{tl as default};
163
+ ORDER BY msg.ts ASC, msg.id ASC`,o)}function no(l){const{members:a,messages:e,options:o}=l;function c(R,O){return R<O?`${R}-${O}`:`${O}-${R}`}function u(R){return Math.round(R*100)/100}const d={nodes:[],links:[],maxLinkValue:0,communities:[],stats:{totalMembers:0,totalMessages:0,involvedMembers:0,edgeCount:0,communityCount:0}};if(a.length<2)return{...d,stats:{...d.stats,totalMembers:a.length}};const g=new Map;for(const R of a)g.set(R.id,{name:R.name,platformId:R.platformId,messageCount:R.messageCount});if(e.length<2)return{...d,stats:{...d.stats,totalMembers:a.length,totalMessages:e.length}};const p=new Map;for(const R of e)p.set(R.senderId,(p.get(R.senderId)||0)+1);const _=e.length,y=new Map,m=new Map;for(let R=0;R<e.length-1;R++){const O=e[R],E=new Set;let j=0;for(let X=R+1;X<e.length&&j<o.lookAhead;X++){const ee=e[X];if(ee.senderId===O.senderId||E.has(ee.senderId))continue;E.add(ee.senderId),j++;const re=(ee.ts-O.ts)/1e3,oe=Math.exp(-re/o.decaySeconds),de=1-(j-1)*.2,z=oe*de,F=c(O.senderId,ee.senderId);y.set(F,(y.get(F)||0)+z),m.set(F,(m.get(F)||0)+1)}}const n=o.lookAhead*.8,i=[];for(const[R,O]of y){const[E,j]=R.split("-"),X=parseInt(E),ee=parseInt(j),re=p.get(X)||0,oe=p.get(ee)||0,de=re*oe/_*n,z=de>0?O/de:0;i.push({sourceId:X,targetId:ee,rawScore:O,expectedScore:de,normalizedScore:z,coOccurrenceCount:m.get(R)||0})}const h=Math.max(...i.map(R=>R.rawScore),1),f=Math.max(...i.map(R=>R.normalizedScore),1),b=i.map(R=>{const O=.5*(R.rawScore/h)+.5*(R.normalizedScore/f);return{...R,rawScore:u(R.rawScore),expectedScore:u(R.expectedScore),normalizedScore:u(R.normalizedScore),hybridScore:u(O)}});b.sort((R,O)=>O.hybridScore-R.hybridScore);const k=b.slice(0,o.topEdges);if(k.length===0)return{...d,stats:{...d.stats,totalMembers:a.length,totalMessages:e.length}};const C=new Set;for(const R of k)C.add(R.sourceId),C.add(R.targetId);const v=new Map;for(const R of k)v.set(R.sourceId,(v.get(R.sourceId)||0)+R.hybridScore),v.set(R.targetId,(v.get(R.targetId)||0)+R.hybridScore);const w=Math.max(...v.values(),1),S=new Map;for(const R of C){const O=g.get(R)?.name||String(R);S.set(O,(S.get(O)||0)+1)}const M=new Map;for(const R of C){const O=g.get(R),E=O?.name||String(R);(S.get(E)||0)>1?M.set(R,`${E}#${(O?.platformId||String(R)).slice(-4)}`):M.set(R,E)}const T=Math.max(...[...C].map(R=>g.get(R)?.messageCount||0),1),L=[...C].map(R=>{const O=g.get(R),E=v.get(R)||0,j=E/w,X=O.messageCount/T,ee=20+(.7*j+.3*X)*35;return{id:R,name:M.get(R),messageCount:O.messageCount,symbolSize:Math.round(ee),degree:u(E),normalizedDegree:u(j)}});L.sort((R,O)=>O.degree-R.degree);const W=k.length>0?Math.max(...k.map(R=>R.hybridScore)):0,H=k.map(R=>({source:M.get(R.sourceId),target:M.get(R.targetId),value:R.hybridScore,rawScore:R.rawScore,expectedScore:R.expectedScore,coOccurrenceCount:R.coOccurrenceCount}));return{nodes:L,links:H,maxLinkValue:u(W),communities:[],stats:{totalMembers:a.length,totalMessages:e.length,involvedMembers:C.size,edgeCount:k.length,communityCount:0}}}async function oo(l,a,e){const o={nodes:[],links:[],maxLinkValue:0,communities:[],stats:{totalMembers:0,totalMessages:0,involvedMembers:0,edgeCount:0,communityCount:0}};try{const[c,u]=await Promise.all([so(l),ao(l,a)]);if(c.length<2||u.length<2)return{...o,stats:{...o.stats,totalMembers:c.length,totalMessages:u.length}};const d={...Zn,...e};return await window.chatApi.pluginCompute(no.toString(),{members:c,messages:u,options:d})}catch(c){return console.error("[chart-cluster] Failed to load cluster graph:",c),o}}const io={class:"mx-auto max-w-[920px] p-4 h-full"},ro={class:"flex h-full flex-col rounded-lg border border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 shadow-sm overflow-hidden"},lo={class:"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50"},co={class:"flex items-center gap-3"},uo={class:"flex items-center gap-3"},mo={class:"p-3 w-64"},go={class:"text-sm font-medium mb-3"},po={class:"space-y-3"},ho={class:"text-xs text-gray-500 mb-1 block"},vo={class:"text-xs text-gray-400 mt-1"},fo={class:"text-xs text-gray-500 mb-1 block"},yo={class:"text-xs text-gray-400 mt-1"},xo={class:"flex-1 min-h-0 overflow-hidden"},bo={key:0,class:"h-full flex items-center justify-center"},_o={key:1,class:"h-full flex items-center justify-center"},ko={class:"text-center text-gray-400"},wo={key:2,class:"h-full"},$o={key:3,class:"h-full flex overflow-hidden"},Io={class:"w-64 border-r border-gray-200 dark:border-gray-700 flex flex-col overflow-hidden"},Co={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},So={class:"text-sm font-medium flex items-center gap-2"},Mo={class:"flex-1 overflow-y-auto"},To=["onClick"],Do={class:"flex items-center justify-between"},Ro={class:"text-sm truncate"},No={class:"text-xs text-gray-400"},Ao={class:"flex-1 overflow-hidden flex flex-col"},Lo={key:0,class:"flex-1 flex items-center justify-center"},Vo={class:"text-center text-gray-400"},Eo={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700 flex items-center gap-3"},Oo={class:"w-10 h-10 rounded-full flex items-center justify-center text-white font-bold bg-primary-500"},zo={class:"font-medium"},Fo={class:"text-xs text-gray-400"},Bo={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},Uo={class:"text-sm font-medium flex items-center gap-2"},Ho={class:"flex-1 overflow-y-auto"},Wo={key:0,class:"p-4 text-center text-gray-400"},jo={class:"flex items-center gap-3"},Po={class:"flex-1 min-w-0"},qo={class:"text-sm font-medium truncate"},Yo={class:"flex items-center gap-3 mt-0.5 text-xs text-gray-400"},Go={class:"w-20 h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"},Jo={key:4,class:"h-full flex flex-col overflow-hidden"},Ko={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},Qo={class:"text-sm font-medium flex items-center gap-2"},Xo={class:"flex-1 overflow-y-auto"},Zo={class:"flex items-center gap-3"},ei={class:"flex-1 min-w-0"},ti={class:"flex items-center gap-2 text-sm"},si={class:"font-medium truncate"},ai={class:"font-medium truncate"},ni={class:"flex items-center gap-3 mt-1 text-xs text-gray-400"},oi={class:"w-24 h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"},ii={key:0,class:"px-4 py-2 border-t border-gray-200 dark:border-gray-700 text-xs text-gray-400 flex items-center gap-4 bg-gray-50 dark:bg-gray-800/50"},ri=P({__name:"ClusterView",props:{sessionId:{},timeFilter:{}},setup(l){Je([Pt,Ke,qt,Yt,Qe]);const a=l,{t:e}=se(),o=gt(),c=D(()=>o.value==="dark"),u=A(!0),d=A(null),g=A("matrix"),p=A(null),_=A({lookAhead:3,decaySeconds:120,topEdges:150}),y=A(null);let m=null;async function n(){if(a.sessionId){u.value=!0;try{d.value=await oo(a.sessionId,a.timeFilter,{lookAhead:_.value.lookAhead,decaySeconds:_.value.decaySeconds,topEdges:_.value.topEdges})}catch(M){console.error("[chart-cluster] 加载小团体关系数据失败:",M),d.value=null}finally{u.value=!1}}}const i=D(()=>{if(!d.value||d.value.nodes.length===0)return null;const{nodes:M,links:T,maxLinkValue:L}=d.value,H=[...M].sort((E,j)=>j.messageCount-E.messageCount).slice(0,20).map(E=>E.name),R=new Map;for(const E of T)R.set(`${E.source}-${E.target}`,E.value),R.set(`${E.target}-${E.source}`,E.value);const O=[];for(let E=0;E<H.length;E++)for(let j=0;j<H.length;j++)if(E===j)O.push([E,j,-1]);else{const X=R.get(`${H[E]}-${H[j]}`)||0;O.push([E,j,X])}return{names:H,data:O,maxValue:L}});function h(){if(!i.value)return{graphic:{type:"text",style:{text:e("views.cluster.noData"),fill:"#999"}}};const{names:M,data:T,maxValue:L}=i.value;return{tooltip:{position:"top",formatter:W=>{const[H,R,O]=W.data;return O<0?`${M[H]}`:O===0?`${M[H]} ↔ ${M[R]}<br/>暂无关系数据`:`${M[H]} ↔ ${M[R]}<br/>临近度: ${O.toFixed(2)}`}},grid:{left:120,right:40,top:40,bottom:120},xAxis:{type:"category",data:M,splitArea:{show:!0},axisLabel:{rotate:45,fontSize:10,color:c.value?"#ccc":"#333"}},yAxis:{type:"category",data:M,splitArea:{show:!0},axisLabel:{fontSize:10,color:c.value?"#ccc":"#333"}},visualMap:{min:0,max:L||1,calculable:!0,orient:"horizontal",left:"center",bottom:10,inRange:{color:c.value?["#1a1a2e","#16213e","#0f3460","#e94560"]:["#f7f7f7","#fce4ec","#f8bbd9","#ee4567"]},textStyle:{color:c.value?"#ccc":"#333"}},series:[{type:"heatmap",data:T.filter(W=>W[2]>=0),label:{show:!1},emphasis:{itemStyle:{shadowBlur:10,shadowColor:"rgba(0, 0, 0, 0.5)"}}}],backgroundColor:"transparent"}}const f=D(()=>d.value?[...d.value.nodes].sort((M,T)=>T.messageCount-M.messageCount):[]),b=D(()=>!d.value||p.value===null?null:d.value.nodes.find(M=>M.id===p.value)||null),k=D(()=>{if(!d.value||!b.value)return[];const M=b.value.name,T=[];for(const L of d.value.links)L.source===M?T.push({otherName:L.target,value:L.value,coOccurrenceCount:L.coOccurrenceCount}):L.target===M&&T.push({otherName:L.source,value:L.value,coOccurrenceCount:L.coOccurrenceCount});return T.sort((L,W)=>W.value-L.value),T}),C=D(()=>d.value?d.value.links.slice(0,50):[]);function v(){m&&g.value==="matrix"&&m.setOption(h(),{notMerge:!0})}function w(){y.value&&(m=Xe(y.value,c.value?"dark":void 0),v())}function S(){m?.resize()}return G(g,async(M,T)=>{T==="matrix"&&m&&(m.dispose(),m=null),M==="matrix"&&(await Se(),w())}),G([d,()=>c.value],()=>{g.value==="matrix"&&v()},{deep:!0}),G(u,async(M,T)=>{T&&!M&&g.value==="matrix"&&(m&&(m.dispose(),m=null),await Se(),w())}),G(()=>[a.sessionId,a.timeFilter],()=>n(),{immediate:!0,deep:!0}),ke(()=>{window.addEventListener("resize",S),g.value==="matrix"&&Se(()=>w())}),Re(()=>{window.removeEventListener("resize",S),m?.dispose(),m=null}),(M,T)=>{const L=ge,W=qe("UButtonGroup"),H=Be,R=nt,O=we;return r(),I("div",io,[s("div",ro,[s("div",lo,[s("div",co,[$(W,{size:"xs"},{default:V(()=>[$(L,{color:g.value==="matrix"?"primary":"neutral",variant:g.value==="matrix"?"solid":"ghost",onClick:T[0]||(T[0]=E=>g.value="matrix")},{default:V(()=>[Q(x(t(e)("views.cluster.matrixView")),1)]),_:1},8,["color","variant"]),$(L,{color:g.value==="member"?"primary":"neutral",variant:g.value==="member"?"solid":"ghost",onClick:T[1]||(T[1]=E=>g.value="member")},{default:V(()=>[Q(x(t(e)("views.cluster.memberView")),1)]),_:1},8,["color","variant"]),$(L,{color:g.value==="circle"?"primary":"neutral",variant:g.value==="circle"?"solid":"ghost",onClick:T[2]||(T[2]=E=>g.value="circle")},{default:V(()=>[Q(x(t(e)("views.cluster.rankingView")),1)]),_:1},8,["color","variant"])]),_:1})]),s("div",uo,[$(R,null,{content:V(()=>[s("div",mo,[s("h4",go,x(t(e)("views.cluster.modelSettings")),1),s("div",po,[s("div",null,[s("label",ho,x(t(e)("views.cluster.lookAhead")),1),$(H,{modelValue:_.value.lookAhead,"onUpdate:modelValue":T[3]||(T[3]=E=>_.value.lookAhead=E),modelModifiers:{number:!0},type:"number",min:1,max:10,size:"xs",placeholder:"1-10"},null,8,["modelValue"]),s("p",vo,x(t(e)("views.cluster.lookAheadDesc")),1)]),s("div",null,[s("label",fo,x(t(e)("views.cluster.decaySeconds")),1),$(H,{modelValue:_.value.decaySeconds,"onUpdate:modelValue":T[4]||(T[4]=E=>_.value.decaySeconds=E),modelModifiers:{number:!0},type:"number",min:30,max:3600,size:"xs",placeholder:"30-3600"},null,8,["modelValue"]),s("p",yo,x(t(e)("views.cluster.decaySecondsDesc")),1)]),$(L,{size:"xs",color:"primary",class:"w-full mt-2",onClick:n},{default:V(()=>[Q(x(t(e)("views.cluster.applySettings")),1)]),_:1})])])]),default:V(()=>[$(L,{variant:"ghost",size:"xs",icon:"i-heroicons-adjustments-horizontal"})]),_:1}),$(L,{variant:"ghost",size:"xs",icon:"i-heroicons-arrow-path",onClick:n})])]),s("div",xo,[u.value?(r(),I("div",bo,[$(O,{name:"i-heroicons-arrow-path",class:"w-6 h-6 animate-spin text-gray-400"})])):!d.value||d.value.nodes.length===0?(r(),I("div",_o,[s("div",ko,[$(O,{name:"i-heroicons-user-group",class:"w-12 h-12 mx-auto mb-2 opacity-50"}),s("p",null,x(t(e)("views.cluster.noData")),1)])])):g.value==="matrix"?(r(),I("div",wo,[s("div",{ref_key:"chartRef",ref:y,class:"w-full h-full"},null,512)])):g.value==="member"?(r(),I("div",$o,[s("div",Io,[s("div",Co,[s("h3",So,[$(O,{name:"i-heroicons-users",class:"w-4 h-4"}),Q(" "+x(t(e)("views.cluster.selectMember")),1)])]),s("div",Mo,[(r(!0),I(q,null,te(f.value,E=>(r(),I("div",{key:E.id,class:Z(["px-4 py-2 cursor-pointer border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50",{"bg-primary-50 dark:bg-primary-900/30":p.value===E.id}]),onClick:j=>p.value=E.id},[s("div",Do,[s("span",Ro,x(E.name),1),s("span",No,x(E.messageCount),1)])],10,To))),128))])]),s("div",Ao,[b.value?(r(),I(q,{key:1},[s("div",Eo,[s("div",Oo,x(b.value.name.charAt(0)),1),s("div",null,[s("div",zo,x(b.value.name),1),s("div",Fo,x(t(e)("views.cluster.msgCount"))+": "+x(b.value.messageCount)+" | "+x(t(e)("views.cluster.relationCount"))+": "+x(k.value.length),1)])]),s("div",Bo,[s("h3",Uo,[$(O,{name:"i-heroicons-heart",class:"w-4 h-4 text-pink-500"}),Q(" "+x(t(e)("views.cluster.relationsByIntimacy")),1)])]),s("div",Ho,[k.value.length===0?(r(),I("div",Wo,x(t(e)("views.cluster.noRelations")),1)):U("",!0),(r(!0),I(q,null,te(k.value,(E,j)=>(r(),I("div",{key:E.otherName,class:"px-4 py-3 border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50"},[s("div",jo,[s("span",{class:Z(["w-6 h-6 rounded-full flex items-center justify-center text-xs font-bold",j<3?"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400"])},x(j+1),3),s("div",Po,[s("div",qo,x(E.otherName),1),s("div",Yo,[s("span",null,x(t(e)("views.cluster.intimacy"))+": "+x((E.value*100).toFixed(0))+"%",1),s("span",null,x(t(e)("views.cluster.coOccurrence"))+": "+x(E.coOccurrenceCount)+x(t(e)("views.cluster.times")),1)])]),s("div",Go,[s("div",{class:"h-full bg-linear-to-r from-pink-400 to-pink-600",style:be({width:`${k.value[0]?.value?E.value/k.value[0].value*100:0}%`})},null,4)])])]))),128))])],64)):(r(),I("div",Lo,[s("div",Vo,[$(O,{name:"i-heroicons-cursor-arrow-rays",class:"w-12 h-12 mx-auto mb-2 opacity-50"}),s("p",null,x(t(e)("views.cluster.selectMemberHint")),1)])]))])])):(r(),I("div",Jo,[s("div",Ko,[s("h3",Qo,[$(O,{name:"i-heroicons-trophy",class:"w-4 h-4 text-yellow-500"}),Q(" "+x(t(e)("views.cluster.interactionRanking")),1)])]),s("div",Xo,[(r(!0),I(q,null,te(C.value,(E,j)=>(r(),I("div",{key:j,class:"px-4 py-3 border-b border-gray-100 dark:border-gray-800 hover:bg-gray-50 dark:hover:bg-gray-800/50"},[s("div",Zo,[s("span",{class:Z(["w-8 h-8 rounded-full flex items-center justify-center text-sm font-bold",j<3?"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400"])},x(j+1),3),s("div",ei,[s("div",ti,[s("span",si,x(E.source),1),T[5]||(T[5]=s("span",{class:"text-gray-400"},"↔",-1)),s("span",ai,x(E.target),1)]),s("div",ni,[s("span",null,x(t(e)("views.cluster.score"))+": "+x(E.value.toFixed(2)),1),s("span",null,x(t(e)("views.cluster.coOccurrence"))+": "+x(E.coOccurrenceCount)+x(t(e)("views.cluster.times")),1)])]),s("div",oi,[s("div",{class:"h-full bg-linear-to-r from-yellow-400 to-orange-500",style:be({width:`${C.value[0]?.value?E.value/C.value[0].value*100:0}%`})},null,4)])])]))),128))])]))]),d.value?(r(),I("div",ii,[s("span",null,x(t(e)("views.cluster.totalMembers"))+": "+x(d.value.stats.totalMembers),1),s("span",null,x(t(e)("views.cluster.totalMessages"))+": "+x(d.value.stats.totalMessages.toLocaleString()),1),s("span",null,x(t(e)("views.cluster.involvedMembers"))+": "+x(d.value.stats.involvedMembers),1),s("span",null,x(t(e)("views.cluster.edgeCount"))+": "+x(d.value.stats.edgeCount),1)])):U("",!0)])])}}}),li={class:"flex h-full flex-col"},ci={class:"min-h-0 flex-1 overflow-y-auto"},di=P({__name:"GroupRelationships",props:{sessionId:{},timeFilter:{}},setup(l){const{t:a}=se(),e=l,o=A("mention-graph"),c=D(()=>[{id:"mention-graph",label:a("analysis.subTabs.groupRelationships.mentionGraph"),icon:"i-heroicons-arrows-right-left"},{id:"mention-ranking",label:a("analysis.subTabs.groupRelationships.mentionRanking"),icon:"i-heroicons-heart"},{id:"proximity",label:a("analysis.subTabs.groupRelationships.proximity"),icon:"i-heroicons-user-group"}]);return(u,d)=>(r(),I("div",li,[$(t(Ye),{modelValue:o.value,"onUpdate:modelValue":d[0]||(d[0]=g=>o.value=g),items:c.value,"persist-key":"groupRelationshipsTab",size:"sm"},null,8,["modelValue","items"]),s("div",ci,[$(Ne,{name:"fade",mode:"out-in"},{default:V(()=>[o.value==="mention-graph"?(r(),N(vn,{key:0,"session-id":e.sessionId,"time-filter":e.timeFilter},null,8,["session-id","time-filter"])):o.value==="mention-ranking"?(r(),N(Xn,{key:1,"session-id":e.sessionId,"time-filter":e.timeFilter},null,8,["session-id","time-filter"])):o.value==="proximity"?(r(),N(ri,{key:2,"session-id":e.sessionId,"time-filter":e.timeFilter},null,8,["session-id","time-filter"])):U("",!0)]),_:1})])]))}}),ui=Le(di,[["__scopeId","data-v-90e47115"]]),mi={class:"flex h-full flex-col"},gi={class:"flex-1 min-h-0 overflow-y-auto"},pi=P({__name:"ViewTab",props:{sessionId:{},sessionName:{},timeFilter:{}},setup(l){const{t:a,locale:e}=se(),o=l,c=D(()=>{const p=[{id:"message",label:a("analysis.subTabs.view.message"),icon:"i-heroicons-chat-bubble-left-right"},{id:"topic",label:a("analysis.subTabs.view.topic"),icon:"i-heroicons-cloud"},{id:"group-relationships",label:a("analysis.subTabs.view.groupRelationships"),icon:"i-heroicons-heart"},{id:"hot-repeat",label:a("analysis.subTabs.quotes.hotRepeat"),icon:"i-heroicons-fire"},{id:"catchphrase",label:a("analysis.subTabs.quotes.catchphrase"),icon:"i-heroicons-chat-bubble-bottom-center-text"}];return pt("groupRanking",e.value)&&p.splice(1,0,{id:"ranking",label:a("analysis.subTabs.view.ranking"),icon:"i-heroicons-trophy"}),p}),u=A("message"),d=A(null),g=D(()=>({...o.timeFilter,memberId:d.value}));return(p,_)=>(r(),I("div",mi,[$(t(Ye),{modelValue:u.value,"onUpdate:modelValue":_[1]||(_[1]=y=>u.value=y),items:c.value,"persist-key":"groupViewTab"},{right:V(()=>[u.value!=="topic"?(r(),N(Ct,{key:0,modelValue:d.value,"onUpdate:modelValue":_[0]||(_[0]=y=>d.value=y),"session-id":o.sessionId},null,8,["modelValue","session-id"])):U("",!0)]),_:1},8,["modelValue","items"]),s("div",gi,[$(Ne,{name:"fade",mode:"out-in"},{default:V(()=>[u.value==="message"?(r(),N(St,{key:0,"session-id":o.sessionId,"session-name":o.sessionName,"time-filter":g.value},null,8,["session-id","session-name","time-filter"])):u.value==="topic"?(r(),N(t(Mt),{key:1,"session-id":o.sessionId,"time-filter":o.timeFilter},null,8,["session-id","time-filter"])):u.value==="group-relationships"?(r(),N(ui,{key:2,"session-id":o.sessionId,"time-filter":g.value},null,8,["session-id","time-filter"])):u.value==="ranking"?(r(),N(Ga,{key:3,"session-id":o.sessionId,"time-filter":g.value},null,8,["session-id","time-filter"])):u.value==="hot-repeat"?(r(),N(t(Js),{key:4,"session-id":o.sessionId,"time-filter":o.timeFilter},null,8,["session-id","time-filter"])):u.value==="catchphrase"?(r(),N(t(As),{key:5,"session-id":o.sessionId,"time-filter":o.timeFilter},null,8,["session-id","time-filter"])):U("",!0)]),_:1})])]))}}),hi=Le(pi,[["__scopeId","data-v-6549d466"]]),vi={key:0,class:"mb-6"},fi={class:"flex items-center gap-3"},yi={class:"text-xl font-bold text-gray-900 dark:text-white"},xi={class:"text-sm text-gray-500 dark:text-gray-400"},bi={class:"mb-4 flex flex-wrap items-center justify-between gap-3"},_i={class:"flex items-center gap-2"},ki={class:"text-xs text-gray-500 dark:text-gray-400"},wi={key:0,class:"flex h-60 items-center justify-center"},$i={key:1,class:"flex h-60 flex-col items-center justify-center"},Ii={class:"text-gray-500 dark:text-gray-400"},Ci={key:2,class:"flex min-h-0 flex-1 flex-col"},Si={class:"w-full"},Mi={class:"sticky top-0 bg-gray-50 dark:bg-gray-800"},Ti={class:"text-left text-xs font-medium uppercase text-gray-500 dark:text-gray-400"},Di={class:"px-4 py-4"},Ri={class:"px-4 py-4"},Ni={class:"px-4 py-4"},Ai={class:"w-64 px-4 py-4"},Li={class:"inline-flex items-center gap-1.5"},Vi={class:"px-4 py-4 text-right"},Ei={class:"divide-y divide-gray-200 dark:divide-gray-700"},Oi={class:"px-4 py-4"},zi={class:"px-4 py-4"},Fi={class:"flex items-center gap-2"},Bi=["src","alt"],Ui={key:1,class:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-pink-400 to-pink-600 text-xs font-medium text-white"},Hi={class:"text-sm font-medium text-gray-900 dark:text-white"},Wi={class:"ml-1 text-sm text-gray-500 dark:text-gray-400"},ji={class:"px-4 py-4"},Pi={key:0,class:"text-sm font-medium text-gray-900 dark:text-white"},qi={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},Yi={class:"px-4 py-4"},Gi={class:"text-sm font-semibold text-gray-900 dark:text-white"},Ji={class:"px-4 py-4"},Ki={class:"max-w-xs"},Qi={key:0,class:"absolute right-2 top-1/2 -translate-y-1/2"},Xi={class:"px-4 py-4 text-right"},Zi={key:0,class:"flex items-center justify-between border-t border-gray-200 px-6 py-4 dark:border-gray-700"},er={class:"text-sm text-gray-500 dark:text-gray-400"},tr={class:"flex items-center gap-2"},sr={class:"text-sm font-medium text-gray-600 dark:text-gray-300"},ar={class:"p-6 text-center"},nr={class:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/30"},or={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},ir={class:"mb-6 text-sm text-gray-500 dark:text-gray-400"},rr={class:"flex justify-center gap-3"},lr={class:"p-6"},cr={class:"mb-4 flex items-center gap-3"},dr={class:"flex h-10 w-10 items-center justify-center rounded-full bg-amber-100 dark:bg-amber-900/30"},ur={class:"text-lg font-semibold text-gray-900 dark:text-white"},mr={class:"mb-2 text-sm text-gray-600 dark:text-gray-400"},gr={class:"mb-6 text-xs text-amber-700 dark:text-amber-300"},pr={class:"flex justify-end gap-2"},Me=20,hr=P({__name:"MemberList",props:{sessionId:{},showHeader:{type:Boolean,default:!0}},emits:["data-changed"],setup(l,{emit:a}){const{t:e}=se(),o=l,c=a,u=A([]),d=A([]),g=A(!1),p=A(""),_=A(null),y=A(!1),m=A(new Set),n=A(!1),i=A(!1),h=A(1),f=A(0),b=A(0),k=A("desc"),C=A(null);let v=null;function w(z){return z.groupNickname||z.accountName||z.platformId}function S(z){return w(z).slice(0,1)}const M=D(()=>d.value.filter(z=>m.value.has(z.id))),T=D(()=>M.value.length===2),L=D(()=>{if(M.value.length!==2)return null;const[z,F]=M.value;return F.messageCount>z.messageCount||F.messageCount===z.messageCount&&F.id<z.id?{primary:F,secondary:z}:{primary:z,secondary:F}});function W(){k.value=k.value==="desc"?"asc":"desc",h.value=1,H()}async function H(){if(o.sessionId){g.value=!0;try{const z=await ue().getMembersPaginated(o.sessionId,{page:h.value,pageSize:Me,search:p.value.trim(),sortOrder:k.value});u.value=z.items,f.value=z.total,b.value=z.totalPages}catch(z){console.error("加载成员列表失败:",z)}finally{g.value=!1}}}async function R(){if(o.sessionId)try{d.value=await ue().getMembers(o.sessionId)}catch(z){console.error("加载所有成员失败:",z)}}async function O(z,F){const B=JSON.parse(JSON.stringify(F)),he=JSON.stringify(z.aliases),ie=JSON.stringify(B);if(he!==ie){C.value=z.id;try{if(await ue().updateMemberAliases(o.sessionId,z.id,B)){const pe=u.value.findIndex(Y=>Y.id===z.id);pe!==-1&&(u.value[pe]={...u.value[pe],aliases:B})}}catch(ve){console.error("保存别名失败:",ve)}finally{C.value=null}}}function E(z){_.value=z}function j(){_.value=null}async function X(){if(_.value){y.value=!0;try{await ue().deleteMember(o.sessionId,_.value.id)&&(await H(),await R(),c("data-changed"))}catch(z){console.error("删除成员失败:",z)}finally{y.value=!1,_.value=null}}}function ee(z){const F=new Set(m.value);F.has(z)?F.delete(z):F.add(z),m.value=F}function re(){T.value&&(n.value=!0)}function oe(){m.value=new Set}async function de(){if(L.value){i.value=!0;try{await ue().mergeMembers(o.sessionId,L.value.primary.id,L.value.secondary.id)&&(n.value=!1,oe(),await H(),await R(),c("data-changed"))}catch(z){console.error("合并成员失败:",z)}finally{i.value=!1}}}return G(p,()=>{h.value=1,v&&clearTimeout(v),v=setTimeout(()=>{H()},300)}),G(h,()=>{H()}),G(()=>o.sessionId,()=>{p.value="",h.value=1,oe(),H(),R()},{immediate:!0}),ke(()=>{H(),R()}),(z,F)=>{const B=ge,he=Be,ie=we,ve=Ue,pe=ot,Y=it,Ie=_e;return r(),I("div",{class:Z(["main-content",o.showHeader?"max-w-5xl p-6":"flex h-full max-w-none flex-col overflow-hidden p-4"])},[o.showHeader?(r(),I("div",vi,[s("div",fi,[s("div",null,[s("h2",yi,x(t(e)("members.list.title")),1),s("p",xi,x(t(e)("members.list.description",{count:f.value})),1)])])])):U("",!0),$(Tt,{class:"mb-6","session-id":l.sessionId,members:d.value,"is-loading":g.value,"chat-type":"group"},null,8,["session-id","members","is-loading"]),s("div",bi,[$(he,{modelValue:p.value,"onUpdate:modelValue":F[1]||(F[1]=J=>p.value=J),placeholder:t(e)("members.list.searchPlaceholder"),icon:"i-heroicons-magnifying-glass",class:"w-full md:w-100"},Pe({_:2},[p.value?{name:"trailing",fn:V(()=>[$(B,{icon:"i-heroicons-x-mark",variant:"link",color:"neutral",size:"xs",onClick:F[0]||(F[0]=J=>p.value="")})]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),s("div",_i,[s("span",ki,x(t(e)("members.list.mergeSelectedCount",{count:m.value.size})),1),$(B,{icon:"i-heroicons-link",size:"sm",color:"primary",disabled:!T.value,onClick:re},{default:V(()=>[Q(x(t(e)("members.list.mergeSelected")),1)]),_:1},8,["disabled"])])]),s("div",{class:Z(["rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900",o.showHeader?"":"flex min-h-0 flex-1 flex-col"])},[g.value?(r(),I("div",wi,[$(ie,{name:"i-heroicons-arrow-path",class:"h-8 w-8 animate-spin text-pink-500"})])):u.value.length===0?(r(),I("div",$i,[$(ie,{name:"i-heroicons-user-group",class:"mb-3 h-12 w-12 text-gray-300 dark:text-gray-600"}),s("p",Ii,x(p.value?t(e)("members.list.noMatch"):t(e)("members.list.empty")),1)])):(r(),I("div",Ci,[s("div",{class:Z(["max-h-[500px] overflow-y-auto",o.showHeader?"":"max-h-none min-h-0 flex-1"])},[s("table",Si,[s("thead",Mi,[s("tr",Ti,[F[7]||(F[7]=s("th",{class:"w-12 px-4 py-4"},null,-1)),s("th",Di,x(t(e)("members.list.table.accountName")),1),s("th",Ri,x(t(e)("members.list.table.groupNickname")),1),s("th",Ni,[s("button",{class:"flex items-center gap-1.5 hover:text-gray-700 dark:hover:text-gray-200",onClick:W},[Q(x(t(e)("members.list.table.messageCount"))+" ",1),$(ie,{name:k.value==="desc"?"i-heroicons-arrow-down":"i-heroicons-arrow-up",class:"h-3.5 w-3.5"},null,8,["name"])])]),s("th",Ai,[s("div",Li,[s("span",null,x(t(e)("members.list.table.customAlias")),1),$(ve,{text:t(e)("members.list.tip"),popper:{placement:"top"}},{default:V(()=>[$(ie,{name:"i-heroicons-question-mark-circle",class:"h-4 w-4 text-gray-400 dark:text-gray-500"})]),_:1},8,["text"])])]),s("th",Vi,x(t(e)("members.list.table.actions")),1)])]),s("tbody",Ei,[(r(!0),I(q,null,te(u.value,J=>(r(),I("tr",{key:J.id,class:"hover:bg-gray-50 dark:hover:bg-gray-800/50"},[s("td",Oi,[$(pe,{"model-value":m.value.has(J.id),onClick:je(Ce=>ee(J.id),["stop"])},null,8,["model-value","onClick"])]),s("td",zi,[s("div",Fi,[J.avatar?(r(),I("img",{key:0,src:J.avatar,alt:w(J),class:"h-8 w-8 shrink-0 rounded-full object-cover"},null,8,Bi)):(r(),I("div",Ui,x(S(J)),1)),s("div",null,[s("span",Hi,x(J.accountName||"-"),1),s("span",Wi,"("+x(J.platformId)+")",1)])])]),s("td",ji,[J.groupNickname?(r(),I("span",Pi,x(J.groupNickname),1)):(r(),I("span",qi,"-"))]),s("td",Yi,[s("span",Gi,x(J.messageCount.toLocaleString()),1)]),s("td",Ji,[s("div",Ki,[$(Y,{"model-value":J.aliases,placeholder:t(e)("members.list.aliasPlaceholder"),class:"w-80","onUpdate:modelValue":Ce=>O(J,Ce)},null,8,["model-value","placeholder","onUpdate:modelValue"]),C.value===J.id?(r(),I("div",Qi,[$(ie,{name:"i-heroicons-arrow-path",class:"h-4 w-4 animate-spin text-pink-500"})])):U("",!0)])]),s("td",Xi,[$(B,{label:t(e)("members.list.delete"),size:"xs",onClick:Ce=>E(J)},null,8,["label","onClick"])])]))),128))])])],2),b.value>1?(r(),I("div",Zi,[s("p",er,x(t(e)("members.list.pagination",{start:(h.value-1)*Me+1,end:Math.min(h.value*Me,f.value),total:f.value})),1),s("div",tr,[$(B,{icon:"i-heroicons-chevron-left",variant:"outline",size:"sm",disabled:h.value===1||g.value,onClick:F[2]||(F[2]=J=>h.value--)},null,8,["disabled"]),s("span",sr,x(h.value)+" / "+x(b.value),1),$(B,{icon:"i-heroicons-chevron-right",variant:"outline",size:"sm",disabled:h.value>=b.value||g.value,onClick:F[3]||(F[3]=J=>h.value++)},null,8,["disabled"])])])):U("",!0)]))],2),$(Ie,{open:!!_.value,ui:{content:"max-w-sm"},"onUpdate:open":F[4]||(F[4]=J=>_.value=null)},{content:V(()=>[s("div",ar,[s("div",nr,[$(ie,{name:"i-heroicons-exclamation-triangle",class:"h-7 w-7 text-red-500"})]),s("h3",or,x(t(e)("members.list.modal.title")),1),s("p",ir,x(t(e)("members.list.modal.content",{name:_.value?w(_.value):"",count:_.value?.messageCount.toLocaleString()})),1),s("div",rr,[$(B,{variant:"outline",onClick:j},{default:V(()=>[Q(x(t(e)("members.list.modal.cancel")),1)]),_:1}),$(B,{color:"error",loading:y.value,onClick:X},{default:V(()=>[Q(x(t(e)("members.list.modal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"]),$(Ie,{open:n.value,ui:{content:"max-w-md"},"onUpdate:open":F[6]||(F[6]=J=>n.value=J)},{content:V(()=>[s("div",lr,[s("div",cr,[s("div",dr,[$(ie,{name:"i-heroicons-link",class:"h-5 w-5 text-amber-600 dark:text-amber-400"})]),s("h3",ur,x(t(e)("members.list.mergeModal.title")),1)]),s("p",mr,x(t(e)("members.list.mergeModal.content",{source:L.value?w(L.value.secondary):"",sourceCount:L.value?L.value.secondary.messageCount.toLocaleString():"0",target:L.value?w(L.value.primary):"",targetCount:L.value?L.value.primary.messageCount.toLocaleString():"0"})),1),s("p",gr,x(t(e)("members.list.mergeModal.hint")),1),s("div",pr,[$(B,{variant:"outline",disabled:i.value,onClick:F[5]||(F[5]=J=>n.value=!1)},{default:V(()=>[Q(x(t(e)("members.list.mergeModal.cancel")),1)]),_:1},8,["disabled"]),$(B,{color:"primary",loading:i.value,onClick:de},{default:V(()=>[Q(x(t(e)("members.list.mergeModal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"])],2)}}}),vr={class:"main-content max-w-5xl p-6"},fr={class:"mb-4 text-sm text-gray-500 dark:text-gray-400 no-capture"},yr={key:0,class:"divide-y divide-gray-100 dark:divide-gray-800"},xr={class:"w-32 shrink-0 pt-0.5 font-medium text-gray-900 dark:text-white"},br={class:"flex flex-1 flex-wrap items-center gap-2"},_r={class:"flex items-center gap-1.5 rounded-lg bg-gray-50 px-3 py-1.5 dark:bg-gray-800"},kr={class:"text-xs text-gray-400"},wr={key:0,class:"text-gray-300 dark:text-gray-600"},$r=P({__name:"NicknameHistory",props:{sessionId:{}},setup(l){const{t:a}=se(),e=l,o=A([]),c=A([]),u=A(!1);function d(_){return _.groupNickname||_.accountName||_.platformId}async function g(){if(e.sessionId)try{o.value=await ue().getMembers(e.sessionId)}catch(_){console.error("加载成员列表失败:",_)}}async function p(){if(!e.sessionId||o.value.length===0)return;u.value=!0;const _=[];try{const y=o.value.map(n=>ue().getMemberNameHistory(e.sessionId,n.id)),m=await Promise.all(y);o.value.forEach((n,i)=>{const h=m[i];h.length>2&&_.push({memberId:n.id,name:d(n),history:h})}),c.value=_}catch(y){console.error("加载昵称变更记录失败:",y)}finally{u.value=!1}}return G(()=>e.sessionId,async()=>{await g()},{immediate:!0}),G(()=>o.value.length,()=>{o.value.length>0&&p()}),ke(async()=>{o.value.length===0&&await g()}),(_,y)=>{const m=Fe;return r(),I("div",vr,[s("p",fr,x(t(a)("members.nicknameHistory.note")),1),$(t(K),{title:t(a)("members.nicknameHistory.title"),description:u.value?t(a)("members.nicknameHistory.loading"):c.value.length>0?t(a)("members.nicknameHistory.hasChanges",{count:c.value.length}):t(a)("members.nicknameHistory.noChanges")},{default:V(()=>[!u.value&&c.value.length>0?(r(),I("div",yr,[(r(!0),I(q,null,te(c.value,n=>(r(),I("div",{key:n.memberId,class:"flex items-start gap-3 px-5 py-3"},[s("div",xr,x(n.name),1),s("div",br,[(r(!0),I(q,null,te(n.history,(i,h)=>(r(),I(q,{key:h},[s("div",_r,[s("span",{class:Z(["text-sm",i.endTs===null?"font-semibold text-pink-600":"text-gray-700 dark:text-gray-300"])},x(i.name),3),i.endTs===null?(r(),N(m,{key:0,color:"primary",variant:"soft",size:"xs"},{default:V(()=>[Q(x(t(a)("members.nicknameHistory.current")),1)]),_:1})):U("",!0),s("span",kr,"("+x(t(Dt)(i.startTs,i.endTs))+")",1)]),h<n.history.length-1?(r(),I("span",wr,"→")):U("",!0)],64))),128))])]))),128))])):u.value?(r(),N(t(ne),{key:2,text:t(a)("members.nicknameHistory.loadingText")},null,8,["text"])):(r(),N(t(le),{key:1,text:t(a)("members.nicknameHistory.empty")},null,8,["text"]))]),_:1},8,["title","description"])])}}}),Ir={class:"flex h-full flex-col overflow-hidden bg-white dark:bg-gray-900"},Cr={class:"flex flex-none items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"},Sr={class:"text-lg font-semibold text-gray-900 dark:text-white"},Mr={class:"flex-1 overflow-auto"},Tr=P({__name:"NicknameHistoryEntry",props:{sessionId:{}},setup(l){const{t:a}=se(),e=l,o=A(!1);return(c,u)=>{const d=ge,g=_e;return r(),I(q,null,[$(d,{variant:"ghost",icon:"i-heroicons-clock",size:"sm",onClick:u[0]||(u[0]=p=>o.value=!0)},{default:V(()=>[Q(x(t(a)("analysis.subTabs.member.nicknameHistory")),1)]),_:1}),e.sessionId?(r(),N(g,{key:0,open:o.value,"onUpdate:open":u[2]||(u[2]=p=>o.value=p),ui:{content:"max-w-6xl h-[85vh]"}},{content:V(()=>[s("div",Ir,[s("div",Cr,[s("h2",Sr,x(t(a)("analysis.subTabs.member.nicknameHistory")),1),$(d,{variant:"ghost",icon:"i-heroicons-x-mark",size:"sm",onClick:u[1]||(u[1]=p=>o.value=!1)})]),s("div",Mr,[$($r,{"session-id":e.sessionId},null,8,["session-id"])])])]),_:1},8,["open"])):U("",!0)],64)}}}),Dr={class:"flex h-full flex-col bg-white dark:bg-gray-900",style:{"padding-top":"var(--titlebar-area-height)"}},Rr={class:"mt-2 flex items-center justify-between gap-3"},Nr={class:"flex shrink-0 items-center gap-0.5 overflow-x-auto scrollbar-hide"},Ar=["onClick"],Lr={class:"whitespace-nowrap"},Vr={class:"relative flex-1 overflow-y-auto"},Er={class:"h-full"},Or={key:2,class:"flex h-full items-center justify-center"},zr={class:"text-gray-500"},Fr={class:"flex h-full flex-col overflow-hidden bg-white dark:bg-gray-900"},Br={class:"flex flex-none items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"},Ur={class:"text-lg font-semibold text-gray-900 dark:text-white"},Hr={class:"text-sm text-gray-500 dark:text-gray-400"},Wr={class:"flex items-center gap-2"},jr={class:"flex-1 overflow-hidden"},Pr=P({__name:"index",setup(l){const a=We(()=>ze(()=>import("./MessageExportModal-De5_tX6a.js"),__vite__mapDeps([5,6,4,7,8,9,10,11,1,2,3,12]))),{t:e}=se(),o=rt(),c=lt(),u=ht(),d=Ae(),g=vt(),{currentSessionId:p}=ft(u),_=A(!1),y=A(!1),m=A(!1),n=A(!1);function i(){d.openChatRecordDrawer({})}const h=[{id:"overview",labelKey:"analysis.tabs.overview",icon:"i-heroicons-chart-pie"},{id:"view",labelKey:"analysis.tabs.view",icon:"i-heroicons-presentation-chart-bar"},{id:"ai-chat",labelKey:"analysis.tabs.aiChat",icon:"i-heroicons-chat-bubble-left-ellipsis"},{id:"lab",labelKey:"analysis.tabs.lab",icon:"i-heroicons-beaker"}],f=D(()=>g.debugMode?[...h,{id:"debug",labelKey:"analysis.tabs.debug",icon:"i-heroicons-bug-ant"}]:h),b=D(()=>f.value.map(F=>F.id)),{activeTab:k,isLoading:C,isInitialLoad:v,session:w,memberActivity:S,hourlyActivity:M,dailyActivity:T,messageTypes:L,timeRangeValue:W,fullTimeRange:H,availableYears:R,timeFilter:O,selectedYearForOverview:E,initialTimeState:j,loadData:X}=Rt({route:o,router:c,currentSessionId:p,selectSession:u.selectSession,defaultTab:g.defaultSessionTab,validTabIds:b.value}),ee=D(()=>S.value.slice(0,3)),re=D(()=>S.value.length<=1?[]:[...S.value].sort((F,B)=>F.messageCount-B.messageCount).slice(0,1)),oe=D(()=>S.value.reduce((F,B)=>F+B.messageCount,0)),de=D(()=>S.value.filter(F=>F.messageCount>0).length),{headerDescription:z}=Nt({session:w,fullTimeRange:H,timeRangeValue:W,descriptionKey:"analysis.groupChat.description"});return(F,B)=>{const he=ge,ie=Ue,ve=we,pe=_e;return r(),I("div",Dr,[t(v)?(r(),N(ne,{key:0,variant:"page",text:t(e)("analysis.groupChat.loading")},null,8,["text"])):t(w)?(r(),I(q,{key:1},[$(At,{title:t(w).name,description:t(z),avatar:t(w).groupAvatar,icon:"i-heroicons-chat-bubble-left-right","icon-class":"bg-primary-600 text-white dark:bg-primary-500 dark:text-white"},{actions:V(()=>[t(d).toolsPanelPosition==="header"?(r(),N(ie,{key:0,text:t(e)("analysis.overview.tools")},{default:V(()=>[$(he,{icon:"i-heroicons-wrench-screwdriver",variant:"ghost",color:"primary",size:"sm",onClick:B[0]||(B[0]=Y=>t(d).toggleToolsPanelOpen())})]),_:1},8,["text"])):U("",!0),$(Te)]),default:V(()=>[s("div",Rr,[s("div",Nr,[(r(!0),I(q,null,te(f.value,Y=>(r(),I("button",{key:Y.id,class:Z(["flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all",[t(k)===Y.id?"bg-pink-500 text-white dark:bg-pink-900/30 dark:text-pink-300":"text-gray-600 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800"]]),onClick:Ie=>k.value=Y.id},[$(ve,{name:Y.icon,class:"h-4 w-4"},null,8,["name"]),s("span",Lr,x(t(e)(Y.labelKey)),1)],10,Ar))),128))]),$(Ot,{modelValue:t(W),"onUpdate:modelValue":B[1]||(B[1]=Y=>ut(W)?W.value=Y:null),"session-id":t(p)??void 0,visible:t(k)!=="ai-chat"&&t(k)!=="memory"&&t(k)!=="lab"&&t(k)!=="debug","initial-state":t(j),"onUpdate:fullRange":B[2]||(B[2]=Y=>H.value=Y),"onUpdate:availableYears":B[3]||(B[3]=Y=>R.value=Y)},null,8,["modelValue","session-id","visible","initial-state"])])]),_:1},8,["title","description","avatar"]),s("div",Vr,[t(C)?(r(),N(ne,{key:0,variant:"overlay"})):U("",!0),s("div",Er,[$(Ne,{name:"tab-slide",mode:"out-in"},{default:V(()=>[t(k)==="overview"?(r(),N(ea,{key:"overview-"+t(p),session:t(w),"member-activity":t(S),"top-members":ee.value,"bottom-members":re.value,"message-types":t(L),"hourly-activity":t(M),"daily-activity":t(T),"time-range":t(H),"selected-year":t(E),"filtered-message-count":oe.value,"filtered-member-count":de.value,"time-filter":t(O)},null,8,["session","member-activity","top-members","bottom-members","message-types","hourly-activity","daily-activity","time-range","selected-year","filtered-message-count","filtered-member-count","time-filter"])):t(k)==="view"?(r(),N(hi,{key:"view-"+t(p),"session-id":t(p),"session-name":t(w).name,"time-filter":t(O)},null,8,["session-id","session-name","time-filter"])):t(k)==="ai-chat"?(r(),N(t(zt),{key:"ai-chat-"+t(p),"session-id":t(p),"session-name":t(w).name,"chat-type":"group"},null,8,["session-id","session-name"])):t(k)==="memory"?(r(),N(Ft,{key:"memory-"+t(p),"session-id":t(p),"session-name":t(w).name},null,8,["session-id","session-name"])):t(k)==="lab"?(r(),N(Bt,{key:"lab-"+t(p),"session-id":t(p),"session-name":t(w).name,"time-filter":t(O),"chat-type":"group",mode:"sql-only"},null,8,["session-id","session-name","time-filter"])):t(k)==="debug"?(r(),N(t(Ut),{key:"debug-"+t(p),"session-id":t(p)},null,8,["session-id"])):U("",!0)]),_:1})])]),$(Lt,{onOpenIncrementalImport:B[4]||(B[4]=Y=>y.value=!0),onOpenSessionIndex:B[5]||(B[5]=Y=>_.value=!0),onOpenMemberManagement:B[6]||(B[6]=Y=>n.value=!0),onOpenChatRecord:i,onOpenMessageExport:B[7]||(B[7]=Y=>m.value=!0)}),t(g).debugMode?(r(),N(Ht,{key:0})):U("",!0)],64)):(r(),I("div",Or,[s("p",zr,x(t(e)("analysis.groupChat.loadError")),1)])),t(p)&&t(w)&&t(w).messageCount>0?(r(),N(Vt,{key:3,modelValue:_.value,"onUpdate:modelValue":B[8]||(B[8]=Y=>_.value=Y),"session-id":t(p),"message-count":t(w).messageCount},null,8,["modelValue","session-id","message-count"])):U("",!0),t(p)&&t(w)?(r(),N(Et,{key:4,modelValue:y.value,"onUpdate:modelValue":B[9]||(B[9]=Y=>y.value=Y),"session-id":t(p),"session-name":t(w).name,onImported:t(X)},null,8,["modelValue","session-id","session-name","onImported"])):U("",!0),t(p)?(r(),N(t(a),{key:5,modelValue:m.value,"onUpdate:modelValue":B[10]||(B[10]=Y=>m.value=Y)},null,8,["modelValue"])):U("",!0),t(p)?(r(),N(pe,{key:6,open:n.value,"onUpdate:open":B[12]||(B[12]=Y=>n.value=Y),ui:{content:"max-w-6xl h-[85vh]"}},{content:V(()=>[s("div",Fr,[s("div",Br,[s("div",null,[s("h2",Ur,x(t(e)("analysis.tooltip.memberManagement")),1),s("p",Hr,x(t(e)("members.list.description",{count:t(w)?.memberCount??0})),1)]),s("div",Wr,[$(Tr,{"session-id":t(p)},null,8,["session-id"]),$(he,{variant:"ghost",icon:"i-heroicons-x-mark",size:"sm",onClick:B[11]||(B[11]=Y=>n.value=!1)})])]),s("div",jr,[$(hr,{"session-id":t(p),"show-header":!1,onDataChanged:t(X)},null,8,["session-id","onDataChanged"])])])]),_:1},8,["open"])):U("",!0)])}}}),tl=Le(Pr,[["__scopeId","data-v-c37848ed"]]);export{tl as default};