chatlab-cli 0.26.0 → 0.26.2

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 (72) hide show
  1. package/dist/{chat-command-ZP4WJVWC.mjs → chat-command-BVIG2LCO.mjs} +4 -4
  2. package/dist/{chunk-WXC6RZCX.mjs → chunk-3XFHIQIW.mjs} +2 -2
  3. package/dist/{chunk-UB4XBM4R.mjs → chunk-6AOEMUCM.mjs} +2 -2
  4. package/dist/{chunk-SJIOPSMM.mjs → chunk-GBQQJJKK.mjs} +93 -75
  5. package/dist/chunk-GBQQJJKK.mjs.map +1 -0
  6. package/dist/{chunk-6G7AIF7I.mjs → chunk-GTXX72AQ.mjs} +28 -13
  7. package/dist/chunk-GTXX72AQ.mjs.map +1 -0
  8. package/dist/{chunk-ILGSSXOG.mjs → chunk-JFSTXSX2.mjs} +5 -4
  9. package/dist/chunk-JFSTXSX2.mjs.map +1 -0
  10. package/dist/{chunk-TC74HESZ.mjs → chunk-QKQRV7RV.mjs} +2 -2
  11. package/dist/{chunk-IRZRIHIT.mjs → chunk-SCE4YL3M.mjs} +8 -4
  12. package/dist/chunk-SCE4YL3M.mjs.map +1 -0
  13. package/dist/{chunk-QY67NN65.mjs → chunk-TMZC3SNX.mjs} +6248 -4318
  14. package/dist/chunk-TMZC3SNX.mjs.map +1 -0
  15. package/dist/cli.mjs +3 -3
  16. package/dist/{http-J3IOFFIA.mjs → http-NLFLQDI7.mjs} +8 -8
  17. package/dist/{import-POYG5LOX.mjs → import-ILK6MGYR.mjs} +4 -4
  18. package/dist/index.mjs +8 -8
  19. package/dist/{mcp-7HH7UMXT.mjs → mcp-FOLR5XJL.mjs} +7 -7
  20. package/dist/src-OQN3VE73.mjs +439 -0
  21. package/dist/{stream-import-O3H3FGV2.mjs → stream-import-F5QI2HTO.mjs} +3 -3
  22. package/dist/stream-import-F5QI2HTO.mjs.map +1 -0
  23. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-D9mCNaYM.js +182 -0
  24. package/dist-web/assets/MessageExportModal-ttP_JPqO.js +1 -0
  25. package/dist-web/assets/{electron-B3DFm1cC.js → electron-BeJHY587.js} +1 -1
  26. package/dist-web/assets/{electron-BMM4Nfty.js → electron-Dbml-SPN.js} +1 -1
  27. package/dist-web/assets/{fetch-BaJDB31c.js → fetch-4s20GRbb.js} +1 -1
  28. package/dist-web/assets/{fetch-C5CLcpQW.js → fetch-B7USXx9R.js} +1 -1
  29. package/dist-web/assets/fetch-BETFYYe1.js +1 -0
  30. package/dist-web/assets/{fetch-SYrb-sZe.js → fetch-DBJ7Xkjt.js} +1 -1
  31. package/dist-web/assets/{fetch-BjDJgdN0.js → fetch-DW8r_JmP.js} +1 -1
  32. package/dist-web/assets/fetch-DcEBAz_3.js +1 -0
  33. package/dist-web/assets/{fetch-BFtuJaa1.js → fetch-DsCNr_M0.js} +1 -1
  34. package/dist-web/assets/{fetch-DQZvdHnG.js → fetch-DtXUkazy.js} +1 -1
  35. package/dist-web/assets/{fetch-Dhfbt1BQ.js → fetch-H4B1CK_T.js} +1 -1
  36. package/dist-web/assets/{fetch-ArMjdMcy.js → fetch-rtQEc8Bu.js} +1 -1
  37. package/dist-web/assets/index-C2ts-hTr.js +173 -0
  38. package/dist-web/assets/index-CYMTvtEI.js +24 -0
  39. package/dist-web/assets/index-CjnMyejM.css +1 -0
  40. package/dist-web/assets/index-CsxrXMkt.js +2 -0
  41. package/dist-web/assets/index-DkownpUj.js +163 -0
  42. package/dist-web/assets/{index-DK9LEEzT.js → index-Dov-rTKE.js} +1 -1
  43. package/dist-web/assets/index-Dtm2oajn.css +1 -0
  44. package/dist-web/assets/{index-CGNgUIT-.css → index-LCedyGl2.css} +1 -1
  45. package/dist-web/assets/index-m7v4PP7r.js +11 -0
  46. package/dist-web/assets/{web-zEXsvoZW.js → web-1-WNRDnP.js} +1 -1
  47. package/dist-web/index.html +2 -2
  48. package/package.json +1 -1
  49. package/dist/chunk-6G7AIF7I.mjs.map +0 -1
  50. package/dist/chunk-ILGSSXOG.mjs.map +0 -1
  51. package/dist/chunk-IRZRIHIT.mjs.map +0 -1
  52. package/dist/chunk-QY67NN65.mjs.map +0 -1
  53. package/dist/chunk-SJIOPSMM.mjs.map +0 -1
  54. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-BTJxEma5.js +0 -182
  55. package/dist-web/assets/MessageExportModal-C7NgEL8T.js +0 -1
  56. package/dist-web/assets/fetch-BGfaAqO9.js +0 -1
  57. package/dist-web/assets/fetch-DnEP0uyF.js +0 -1
  58. package/dist-web/assets/index-C3A_Rjh-.css +0 -1
  59. package/dist-web/assets/index-CWfkrx37.js +0 -173
  60. package/dist-web/assets/index-D3N4NDFx.css +0 -1
  61. package/dist-web/assets/index-D7_ch4zf.js +0 -24
  62. package/dist-web/assets/index-DqDa_on9.js +0 -9
  63. package/dist-web/assets/index-DrN1G9bl.js +0 -2
  64. package/dist-web/assets/index-MdYeovYo.js +0 -163
  65. /package/dist/{chat-command-ZP4WJVWC.mjs.map → chat-command-BVIG2LCO.mjs.map} +0 -0
  66. /package/dist/{chunk-WXC6RZCX.mjs.map → chunk-3XFHIQIW.mjs.map} +0 -0
  67. /package/dist/{chunk-UB4XBM4R.mjs.map → chunk-6AOEMUCM.mjs.map} +0 -0
  68. /package/dist/{chunk-TC74HESZ.mjs.map → chunk-QKQRV7RV.mjs.map} +0 -0
  69. /package/dist/{http-J3IOFFIA.mjs.map → http-NLFLQDI7.mjs.map} +0 -0
  70. /package/dist/{import-POYG5LOX.mjs.map → import-ILK6MGYR.mjs.map} +0 -0
  71. /package/dist/{mcp-7HH7UMXT.mjs.map → mcp-FOLR5XJL.mjs.map} +0 -0
  72. /package/dist/{stream-import-O3H3FGV2.mjs.map → src-OQN3VE73.mjs.map} +0 -0
@@ -0,0 +1,163 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/EChartWordcloud-B_YisOW5.js","assets/vendor-echarts-wordcloud-B1kQMklB.js","assets/vendor-echarts-CITQeskI.js","assets/vendor-zrender-DFl4U2Oe.js","assets/vendor-reka-ui-mMvma1EP.js","assets/MessageExportModal-ttP_JPqO.js","assets/vendor-nuxt-ui-Zy8txNdC.js","assets/index-m7v4PP7r.js","assets/vendor-snapdom-XnBoh1gd.js","assets/index-CjnMyejM.css"])))=>i.map(i=>d[i]);
2
+ import{_ as Fe}from"./vendor-snapdom-XnBoh1gd.js";import{k as st,g as be,b as ge,l as at,a as Me,j as Be,c as nt,e as Ue,_ as ot,n as rt,D as it,u as lt,d as ct}from"./vendor-nuxt-ui-Zy8txNdC.js";import{b as L,d as ke,F as Te,p as P,G as i,P as S,Q as te,a5 as a,Z as q,a3 as se,T as x,O as He,J as dt,H as N,a0 as xe,h as D,w as J,u as t,K as A,L as $,U,R as X,bI as We,a9 as je,bJ as ut,au as Pe,bF as qe,n as Ie,bD as De,i as Ve}from"./vendor-reka-ui-mMvma1EP.js";import{p as mt,u as ae,k as Re,T as de,j as G,q as gt,r as Ye,_ as Ne,t as pt,e as ht,b as vt,s as ft}from"./index-m7v4PP7r.js";import{_ as ne,a as K,g as Ge,b as yt,c as oe,d as ce,e as xt,f as Se,h as bt,i as Ae,j as kt,u as _t,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,v as Lt,w as Vt,x as At,y as Et,z as Ot,C as zt,A as Ft,B as Bt,D as Ut,E as Ht}from"./DebugToolsPanel.vue_vue_type_script_setup_true_lang-D9mCNaYM.js";import"./vendor-echarts-wordcloud-B1kQMklB.js";import{u as Je,i as Wt,j as Qe,k as jt,m as Ke,n as Xe,o as Pt,p as qt,q as Yt}from"./vendor-echarts-CITQeskI.js";import{a as Ee}from"./index-CYMTvtEI.js";import"./vendor-zrender-DFl4U2Oe.js";function Gt(l,s={}){const{threshold:e=300,containerSelector:o=".overflow-y-auto",scrollLockDuration:c=800}=s,u=L(l[0]?.id||"");let d=!1;const g=L(null);let p=null;function k(){if(d)return;const m=[];l.forEach(r=>{const h=document.getElementById(r.id);if(h){const f=h.getBoundingClientRect();m.push({id:r.id,top:Math.round(f.top)})}});let n=0;for(let r=0;r<m.length;r++){if(m[r].top>e){n=Math.max(0,r-1);break}n=r}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,k()},c))}return ke(()=>{p=g.value?.closest(o)||null,p&&(p.addEventListener("scroll",k,{passive:!0}),k())}),Te(()=>{p&&p.removeEventListener("scroll",k)}),{contentRef:g,activeAnchor:u,scrollToAnchor:y,updateActiveAnchor:k}}const Jt={class:"sticky top-24 space-y-6"},Qt={class:"border-l border-gray-200 dark:border-gray-800"},Kt=["onClick"],Xt=P({__name:"PageAnchorsNav",props:{anchors:{},activeAnchor:{},width:{default:"w-44"},hideOnMobile:{type:Boolean,default:!0}},emits:["click"],setup(l,{emit:s}){const e=s;function o(c){e("click",c)}return(c,u)=>(i(),S("div",{class:te([l.width,"shrink-0",l.hideOnMobile?"hidden lg:block":""])},[a("div",Jt,[a("nav",null,[a("div",Qt,[(i(!0),S(q,null,se(l.anchors,d=>(i(),S("button",{key:d.id,class:te(["-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,Kt))),128))])]),He(c.$slots,"default")])],2))}}),me=P({__name:"TopNSelect",props:{modelValue:{default:10},modelModifiers:{}},emits:["update:modelValue"],setup(l){const s=dt(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 i(),N(u,{modelValue:s.value,"onUpdate:modelValue":c[0]||(c[0]=d=>s.value=d),items:e,"value-key":"value",class:"w-25"},null,8,["modelValue"])}}}),he=P({__name:"ScrollableChart",props:{contentHeight:{},maxHeightVh:{default:60},paddingClass:{default:"px-3 py-2"}},setup(l){const s=l,e=D(()=>typeof window>"u"?500:Math.round(window.innerHeight*s.maxHeightVh/100)),o=D(()=>s.contentHeight>e.value),c=D(()=>({maxHeight:`${s.maxHeightVh}vh`,overflowY:o.value?"auto":"hidden"}));return(u,d)=>(i(),S("div",{class:te(l.paddingClass),style:xe(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:s}){Je([Wt,Qe,jt,Ke]);const e=l,o=D(()=>typeof e.height=="number"?`${e.height}px`:e.height),c=mt(),u=L(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(_=>b.has(_.name)?!1:(b.add(_.name),!0))}),k=D(()=>{const b=new Map;return p.value.forEach((_,I)=>{b.set(_.name,g[I%g.length])}),b});function y(b,_){return _<=0?1:1+b/_*5}const m=D(()=>{const b=e.data.maxLinkValue||Math.max(...e.data.links.map(_=>_.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:_=>_.dataType==="node"?`<b>${_.data.name}</b><br/>消息数: ${_.data.value||0}`:_.dataType==="edge"?`${_.data.source} → ${_.data.target}<br/>艾特次数: ${_.data.value||0}`:""},animationDuration:1e3,animationDurationUpdate:500,animationEasingUpdate:"quinticInOut",series:[{type:"graph",layout: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(_=>{const I=k.value.get(_.name)||g[0];return{name:_.name,value:_.value,symbolSize:_.symbolSize||30,label:{show:e.layout==="circular"?!0:(_.symbolSize||30)>30},itemStyle:{color:I,borderColor:"#fff",borderWidth:2,shadowBlur:5,shadowColor:`${I}66`}}}),links:e.data.links.filter(_=>k.value.has(_.source)&&k.value.has(_.target)).map(_=>{const I=k.value.get(_.source)||g[0];return{source:_.source,target:_.target,value:_.value,lineStyle:{color:I,width:y(_.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 r(){d&&d.setOption({backgroundColor:"transparent",...m.value},{notMerge:!0})}function h(){d?.resize()}function f(){d&&d.dispatchAction({type:"restore"})}return s({resetView:f}),J([()=>e.data,()=>e.layout,()=>e.directed,c],()=>{d?r():n()},{deep:!0}),ke(()=>{n(),window.addEventListener("resize",h)}),Te(()=>{window.removeEventListener("resize",h),d?.dispose()}),(b,_)=>(i(),S("div",{ref_key:"chartRef",ref:u,style:xe({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 s=l,e=D(()=>s.members.slice(0,s.topN)),o=D(()=>{if(s.height!=="auto")return s.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)),k=g.map(n=>n.value),y=Math.max(...k,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 r=n[0];if(!r)return"";const h=e.value.length-1-r.dataIndex,f=e.value[h];return`
3
+ <div style="padding: 4px 8px;">
4
+ <div style="font-weight: bold; margin-bottom: 4px;">${f.name}</div>
5
+ <div>${f.value} ${s.unit} (${f.percentage}%)</div>
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,r)=>{const f=e.value.length-1-r+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 r=e.value.length-1-n.dataIndex;return`${e.value[r].value} ${s.unit}`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(238, 69, 103, 0.3)"}}}]}});return(g,p)=>l.bare?(i(),N(t(he),{key:0,"content-height":o.value,"max-height-vh":l.maxHeightVh},{default:A(()=>[$(ne,{option:d.value,height:o.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(i(),N(t(K),{key:1,title:l.title,description:l.description,scrollable:"","max-height-vh":l.maxHeightVh},{default:A(()=>[a("div",es,[$(ne,{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"},rs={class:"h-2 w-full overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800"},is={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"},Oe=P({__name:"RankList",props:{members:{},showAvatar:{type:Boolean,default:!1},rankLimit:{default:0},unit:{}},setup(l){const{t:s}=ae(),e=l,o=D(()=>e.unit||s("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)=>(i(),S("div",ts,[(i(!0),S(q,null,se(c.value,(p,k)=>(i(),S("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"},[a("div",{class:te(["flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-sm font-bold",t(Ge)(k)])},x(k+1),3),l.showAvatar?(i(),S("div",ss,x(p.name.slice(0,1)),1)):U("",!0),a("div",as,[a("p",ns,x(p.name),1)]),a("div",os,[a("div",rs,[a("div",{class:te(["h-full rounded-full bg-linear-to-r transition-all",t(yt)(k)]),style:xe({width:`${u(k)}%`})},null,6)])]),a("div",is,[a("span",ls,x(p.value),1),a("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"},ze=P({__name:"RankListPro",props:{members:{},title:{},description:{},topN:{default:10},unit:{}},setup(l){const{t:s}=ae(),e=l,o=L(!1),c=L(null),u=L(null),d=D(()=>e.members.slice(0,e.topN)),g=D(()=>e.members.length>e.topN);return(p,k)=>{const y=ge,m=be;return i(),S("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"},[a("div",ds,[a("div",null,[a("h3",us,x(l.title),1),l.description?(i(),S("p",ms,x(l.description),1)):U("",!0)]),a("div",gs,[$(Ee,{size:"xs",type:"element","target-element":c.value},null,8,["target-element"]),$(m,{open:o.value,"onUpdate:open":k[0]||(k[0]=n=>o.value=n),ui:{content:"md:w-full max-w-3xl"}},{content:A(()=>[a("div",{ref_key:"modalBodyRef",ref:u,class:"section-content flex flex-col"},[a("div",ps,[a("div",hs,[a("h3",vs,x(l.title),1),a("span",fs," ("+x(t(s)("views.charts.rankListPro.memberCount",{count:l.members.length}))+") ",1)]),$(Ee,{size:"xs",type:"element","target-element":u.value},null,8,["target-element"])]),a("div",ys,[$(Oe,{members:l.members,unit:l.unit},null,8,["members","unit"])])],512)]),default:A(()=>[g.value?(i(),N(y,{key:0,icon:"i-heroicons-list-bullet",variant:"ghost"},{default:A(()=>[X(x(t(s)("views.charts.rankListPro.fullRanking")),1)]),_:1})):U("",!0)]),_:1},8,["open"])])]),$(Oe,{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"},ks={class:"text-xs text-gray-500 dark:text-gray-400"},_s={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"},Ls=P({__name:"CatchphraseTab",props:{sessionId:{},timeFilter:{}},setup(l){const s=We(()=>Fe(()=>import("./EChartWordcloud-B_YisOW5.js"),__vite__mapDeps([0,1,2,3,4]))),{t:e}=ae(),o=Re(),c=l,u=L(null),d=L(!1),g=L("list"),p=L(30),k=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(C=>{const w=C.catchphrases.slice(0,v);return console.log("[CatchphraseTab]",C.name,"total:",C.catchphrases.length,"display:",w.length),{...C,catchphrases:w}})}),r=D(()=>n.value.map(v=>({name:v.name,data:{words:v.catchphrases.map(C=>({word:C.content,count:C.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,C=20){return v.length<=C?v:v.slice(0,C)+"..."}async function _(){if(c.sessionId){d.value=!0;try{u.value=await G().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 I(v){o.openChatRecordDrawer({keywords:[v]})}return J(p,(v,C)=>{console.log("[CatchphraseTab] topN changed:",C,"->",v,"type:",typeof v)}),J(()=>[c.sessionId,c.timeFilter],()=>{_()},{immediate:!0,deep:!0}),(v,C)=>(i(),S("div",xs,[d.value?(i(),N(t(oe),{key:0,text:t(e)("quotes.catchphrase.loading")},null,8,["text"])):m.value?(i(),S(q,{key:2},[a("div",bs,[a("span",ks,x(t(e)("quotes.catchphrase.topN")),1),$(t(de),{modelValue:p.value,"onUpdate:modelValue":C[0]||(C[0]=w=>p.value=w),size:"xs",items:y},null,8,["modelValue"]),C[2]||(C[2]=a("div",{class:"h-4 w-px bg-gray-200 dark:bg-gray-700"},null,-1)),$(t(de),{modelValue:g.value,"onUpdate:modelValue":C[1]||(C[1]=w=>g.value=w),size:"xs",items:k.value},null,8,["modelValue","items"])]),g.value==="list"?(i(),S("div",_s,[(i(!0),S(q,null,se(n.value,w=>(i(),S("div",{key:w.memberId},[a("div",ws,[a("span",$s,x(w.name),1)]),a("div",Is,[(i(!0),S(q,null,se(w.catchphrases,(M,T)=>(i(),S("div",{key:T,class:te(["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:V=>I(M.content)},[T<3?(i(),S("span",{key:0,class:te(["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),a("span",{class:te(["text-sm font-medium",f(T).text])},x(b(M.content)),3),a("span",Ss,x(t(e)("quotes.catchphrase.times",{count:M.count})),1)],10,Cs))),128))])]))),128))])):(i(),S("div",Ms,[(i(!0),S(q,null,se(r.value,w=>(i(),S("div",{key:w.name},[a("div",Ts,[a("span",Ds,x(w.name),1)]),a("div",Rs,[w.data.words.length===0?(i(),N(t(ce),{key:0,text:t(e)("quotes.catchphrase.empty.title"),class:"h-full"},null,8,["text"])):(i(),N(t(s),{key:1,data:w.data,height:"100%","max-words":p.value,"color-scheme":"default","size-scale":1,loading:d.value,onWordClick:I},null,8,["data","max-words","loading"]))])]))),128))])),a("p",Ns,x(t(e)("quotes.catchphrase.stats.clickHint")),1)],64)):(i(),N(t(ce),{key:1,text:t(e)("quotes.catchphrase.empty.title")},null,8,["text"]))]))}});function ve(l){const s=[],e=[];return l?.startTs!=null&&(s.push("AND msg.ts >= ?"),e.push(l.startTs)),l?.endTs!=null&&(s.push("AND msg.ts <= ?"),e.push(l.endTs)),l?.memberId!=null&&(s.push("AND msg.sender_id = ?"),e.push(l.memberId)),{conditions:s.join(" "),params:e}}const pe="AND COALESCE(m.account_name, '') != '系统消息'";async function Vs(l,s){const{conditions:e,params:o}=ve(s),[c,u]=await Promise.all([G().pluginQuery(l,`WITH daily_counts AS (
8
+ SELECT
9
+ strftime('%Y-%m-%d', msg.ts, 'unixepoch', 'localtime') as date,
10
+ msg.sender_id,
11
+ m.platform_id,
12
+ COALESCE(m.group_nickname, m.account_name, m.platform_id) as name,
13
+ COUNT(*) as msg_count
14
+ FROM message msg
15
+ JOIN member m ON msg.sender_id = m.id
16
+ WHERE 1=1 ${pe} ${e}
17
+ GROUP BY date, msg.sender_id
18
+ ),
19
+ daily_max AS (
20
+ SELECT date, MAX(msg_count) as max_count
21
+ FROM daily_counts
22
+ GROUP BY date
23
+ )
24
+ SELECT dc.sender_id, dc.platform_id, dc.name, COUNT(*) as dragon_days
25
+ FROM daily_counts dc
26
+ JOIN daily_max dm ON dc.date = dm.date AND dc.msg_count = dm.max_count
27
+ GROUP BY dc.sender_id
28
+ ORDER BY dragon_days DESC`,o),G().pluginQuery(l,`SELECT COUNT(DISTINCT strftime('%Y-%m-%d', msg.ts, 'unixepoch', 'localtime')) as total
29
+ FROM message msg
30
+ JOIN member m ON msg.sender_id = m.id
31
+ WHERE 1=1 ${pe} ${e}`,o)]),d=u[0]?.total??0;return{rank:c.map(p=>({memberId:p.sender_id,platformId:p.platform_id,name:p.name,count:p.dragon_days,percentage:d>0?Math.round(p.dragon_days/d*1e4)/100:0})),totalDays:d}}async function As(l,s){const{conditions:e,params:o}=ve(s),c=await G().pluginQuery(l,`SELECT
32
+ m.id as member_id,
33
+ m.platform_id,
34
+ COALESCE(m.group_nickname, m.account_name, m.platform_id) as name,
35
+ MAX(msg.ts) as last_ts
36
+ FROM member m
37
+ JOIN message msg ON m.id = msg.sender_id
38
+ WHERE 1=1 ${pe} ${e}
39
+ GROUP BY m.id
40
+ ORDER BY last_ts ASC`,o),u=Math.floor(Date.now()/1e3);return{rank:c.map(g=>({memberId:g.member_id,platformId:g.platform_id,name:g.name,lastMessageTs:g.last_ts,daysSinceLastMessage:Math.floor((u-g.last_ts)/86400)}))}}function Es(l){const{dailyActivity:s}=l;if(s.length===0)return{streakRank:[],loyaltyRank:[],totalDays:0};const e=new Set(s.map(r=>r.day)),o=e.size,c=Array.from(e).sort(),u=c[c.length-1],d=new Map;for(const r of s)d.has(r.senderId)||d.set(r.senderId,{name:r.name,days:new Set}),d.get(r.senderId).days.add(r.day);const g=[],p=[];for(const[r,h]of d){const f=Array.from(h.days).sort(),b=f.length;let _=1,I=f[0],v=f[0],C=1,w=f[0];for(let T=1;T<f.length;T++){const V=new Date(f[T-1]),W=new Date(f[T]);Math.round((W.getTime()-V.getTime())/(1e3*60*60*24))===1?C++:(C>_&&(_=C,I=w,v=f[T-1]),C=1,w=f[T])}C>_&&(_=C,I=w,v=f[f.length-1]);let M=0;if(f[f.length-1]===u){M=1;for(let T=f.length-2;T>=0;T--){const V=new Date(f[T+1]),W=new Date(f[T]);if(Math.round((V.getTime()-W.getTime())/(1e3*60*60*24))===1)M++;else break}}g.push({memberId:r,name:h.name,maxStreak:_,maxStreakStart:I,maxStreakEnd:v,currentStreak:M}),p.push({memberId:r,name:h.name,totalDays:b})}const k=g.sort((r,h)=>h.maxStreak-r.maxStreak),y=p.sort((r,h)=>h.totalDays-r.totalDays),m=y.length>0?y[0].totalDays:1,n=y.map(r=>({...r,percentage:Math.round(r.totalDays/m*100)}));return{streakRank:k,loyaltyRank:n,totalDays:o}}async function Ze(l,s){const{conditions:e,params:o}=ve(s),c=await G().pluginQuery(l,`SELECT
41
+ msg.sender_id as senderId,
42
+ COALESCE(m.group_nickname, m.account_name, m.platform_id) as name,
43
+ DATE(msg.ts, 'unixepoch', 'localtime') as day
44
+ FROM message msg
45
+ JOIN member m ON msg.sender_id = m.id
46
+ WHERE 1=1 ${pe} ${e}
47
+ GROUP BY msg.sender_id, day
48
+ ORDER BY msg.sender_id, day`,o);return c.length===0?{streakRank:[],loyaltyRank:[],totalDays:0}:G().pluginCompute(Es.toString(),{dailyActivity:c})}function Os(l){const{messages:s}=l,e={topBattles:[],rankByCount:[],rankByImageCount:[],totalBattles:0},o=[];let c=[];const u=()=>{c.length>=3&&new Set(c.map(r=>r.senderId)).size>=2&&o.push({startTime:c[0].ts,endTime:c[c.length-1].ts,msgs:c.map(({senderId:r,name:h,platformId:f})=>({senderId:r,name:h,platformId:f}))}),c=[]};for(const n of s)n.type===1||n.type===5?c.push({senderId:n.senderId,name:n.name,platformId:n.platformId,ts:n.ts}):u();if(u(),o.length===0)return e;const d=o.map(n=>({startTime:n.startTime,endTime:n.endTime,totalImages:n.msgs.length,participantCount:new Set(n.msgs.map(r=>r.senderId)).size,participants:Object.values(n.msgs.reduce((r,h)=>(r[h.senderId]||(r[h.senderId]={memberId:h.senderId,name:h.name,imageCount:0}),r[h.senderId].imageCount++,r),{})).sort((r,h)=>h.imageCount-r.imageCount)})).sort((n,r)=>r.totalImages-n.totalImages).slice(0,30),g=new Map;for(const n of o){const r=new Set;for(const h of n.msgs)g.has(h.senderId)||g.set(h.senderId,{memberId:h.senderId,platformId:h.platformId,name:h.name,battleCount:0,imageCount:0}),g.get(h.senderId).imageCount++,r.add(h.senderId);for(const h of r)g.get(h).battleCount++}const p=Array.from(g.values()),k=[...p].sort((n,r)=>r.battleCount-n.battleCount).map(n=>({memberId:n.memberId,platformId:n.platformId,name:n.name,count:n.battleCount,percentage:o.length>0?Math.round(n.battleCount/o.length*1e4)/100:0})),y=o.reduce((n,r)=>n+r.msgs.length,0),m=[...p].sort((n,r)=>r.imageCount-n.imageCount).map(n=>({memberId:n.memberId,platformId:n.platformId,name:n.name,count:n.imageCount,percentage:y>0?Math.round(n.imageCount/y*1e4)/100:0}));return{topBattles:d,rankByCount:k,rankByImageCount:m,totalBattles:o.length}}async function zs(l,s){const{conditions:e,params:o}=ve(s),c=await G().pluginQuery(l,`SELECT
49
+ msg.sender_id as senderId,
50
+ msg.type,
51
+ msg.ts,
52
+ m.platform_id as platformId,
53
+ COALESCE(m.group_nickname, m.account_name, m.platform_id) as name
54
+ FROM message msg
55
+ JOIN member m ON msg.sender_id = m.id
56
+ WHERE msg.type != 6 ${e}
57
+ ORDER BY msg.ts ASC`,o);return c.length===0?{topBattles:[],rankByCount:[],rankByImageCount:[],totalBattles:0}:G().pluginCompute(Os.toString(),{messages:c})}function Fs(l){const{messages:s}=l,e={nightOwlRank:[],lastSpeakerRank:[],firstSpeakerRank:[],consecutiveRecords:[],champions:[],totalDays:0};if(s.length===0)return e;function o(v){return v===0?"养生达人":v<=20?"偶尔失眠":v<=50?"经常失眠":v<=100?"夜猫子":v<=200?"秃头预备役":v<=500?"修仙练习生":"守夜冠军"}function c(v){const C=new Date(v*1e3);return C.getHours()<5&&C.setDate(C.getDate()-1),C.toISOString().split("T")[0]}function u(v){const C=Math.floor(v/60),w=Math.round(v%60);return`${C.toString().padStart(2,"0")}:${w.toString().padStart(2,"0")}`}const d=new Map,g=new Map,p=new Map,k=new Map;for(const v of s){d.has(v.senderId)||d.set(v.senderId,{platformId:v.platformId,name:v.name});const C=new Date(v.ts*1e3),w=C.getHours(),M=C.getMinutes(),T=c(v.ts);g.has(v.senderId)||g.set(v.senderId,{total:0,h23:0,h0:0,h1:0,h2:0,h3to4:0,totalMessages:0});const V=g.get(v.senderId);V.totalMessages++,w===23?(V.h23++,V.total++):w===0?(V.h0++,V.total++):w===1?(V.h1++,V.total++):w===2?(V.h2++,V.total++):w>=3&&w<5&&(V.h3to4++,V.total++),(w>=23||w<5)&&(k.has(v.senderId)||k.set(v.senderId,new Set),k.get(v.senderId).add(T)),p.has(T)||p.set(T,[]),p.get(T).push({senderId:v.senderId,ts:v.ts,hour:w,minute:M})}const y=p.size,m=[];for(const[v,C]of g.entries()){if(C.total===0)continue;const w=d.get(v);m.push({memberId:v,platformId:w.platformId,name:w.name,totalNightMessages:C.total,title:o(C.total),hourlyBreakdown:{h23:C.h23,h0:C.h0,h1:C.h1,h2:C.h2,h3to4:C.h3to4},percentage:C.totalMessages>0?Math.round(C.total/C.totalMessages*1e4)/100:0})}m.sort((v,C)=>C.totalNightMessages-v.totalNightMessages);const n=new Map,r=new Map;for(const[,v]of p.entries()){if(v.length===0)continue;const C=v[v.length-1];n.has(C.senderId)||n.set(C.senderId,{count:0,times:[]});const w=n.get(C.senderId);w.count++,w.times.push(C.hour*60+C.minute);const M=v[0];r.has(M.senderId)||r.set(M.senderId,{count:0,times:[]});const T=r.get(M.senderId);T.count++,T.times.push(M.hour*60+M.minute)}const h=[];for(const[v,C]of n.entries()){const w=d.get(v),M=C.times.reduce((V,W)=>V+W,0)/C.times.length,T=Math.max(...C.times);h.push({memberId:v,platformId:w.platformId,name:w.name,count:C.count,avgTime:u(M),extremeTime:u(T),percentage:y>0?Math.round(C.count/y*1e4)/100:0})}h.sort((v,C)=>C.count-v.count);const f=[];for(const[v,C]of r.entries()){const w=d.get(v),M=C.times.reduce((V,W)=>V+W,0)/C.times.length,T=Math.min(...C.times);f.push({memberId:v,platformId:w.platformId,name:w.name,count:C.count,avgTime:u(M),extremeTime:u(T),percentage:y>0?Math.round(C.count/y*1e4)/100:0})}f.sort((v,C)=>C.count-v.count);const b=[];for(const[v,C]of k.entries()){if(C.size===0)continue;const w=d.get(v),M=Array.from(C).sort();let T=1,V=1;for(let E=1;E<M.length;E++){const j=new Date(M[E-1]);(new Date(M[E]).getTime()-j.getTime())/(1e3*60*60*24)===1?(V++,T=Math.max(T,V)):V=1}const W=M[M.length-1],H=new Date().toISOString().split("T")[0],R=new Date(Date.now()-864e5).toISOString().split("T")[0],z=W===H||W===R;b.push({memberId:v,platformId:w.platformId,name:w.name,maxConsecutiveDays:T,currentStreak:z?V:0})}b.sort((v,C)=>C.maxConsecutiveDays-v.maxConsecutiveDays);const _=new Map;for(const v of m)_.has(v.memberId)||_.set(v.memberId,{nightMessages:0,lastSpeakerCount:0,consecutiveDays:0}),_.get(v.memberId).nightMessages=v.totalNightMessages;for(const v of h)_.has(v.memberId)||_.set(v.memberId,{nightMessages:0,lastSpeakerCount:0,consecutiveDays:0}),_.get(v.memberId).lastSpeakerCount=v.count;for(const v of b)_.has(v.memberId)||_.set(v.memberId,{nightMessages:0,lastSpeakerCount:0,consecutiveDays:0}),_.get(v.memberId).consecutiveDays=v.maxConsecutiveDays;const I=[];for(const[v,C]of _.entries()){const w=d.get(v),M=C.nightMessages*1+C.lastSpeakerCount*10+C.consecutiveDays*20;M>0&&I.push({memberId:v,platformId:w.platformId,name:w.name,score:M,nightMessages:C.nightMessages,lastSpeakerCount:C.lastSpeakerCount,consecutiveDays:C.consecutiveDays})}return I.sort((v,C)=>C.score-v.score),{nightOwlRank:m,lastSpeakerRank:h,firstSpeakerRank:f,consecutiveRecords:b,champions:I,totalDays:y}}async function Bs(l,s){const{conditions:e,params:o}=ve(s),c=await G().pluginQuery(l,`SELECT
58
+ msg.id,
59
+ msg.sender_id as senderId,
60
+ msg.ts,
61
+ m.platform_id as platformId,
62
+ COALESCE(m.group_nickname, m.account_name, m.platform_id) as name
63
+ FROM message msg
64
+ JOIN member m ON msg.sender_id = m.id
65
+ WHERE 1=1 ${pe} ${e}
66
+ ORDER BY msg.ts ASC`,o);return c.length===0?{nightOwlRank:[],lastSpeakerRank:[],firstSpeakerRank:[],consecutiveRecords:[],champions:[],totalDays:0}:G().pluginCompute(Fs.toString(),{messages:c})}function Us(l){const{messages:s}=l,e=new Map,o=new Map,c=new Map,u=new Map,d=new Map,g=new Map,p=new Map;let k=null,y=[],m=0,n=0;const r=new Map,h=(w,M)=>{if(w.length<3)return;m++;const T=w.length;n+=T;const V=w[0].senderId;e.set(V,(e.get(V)||0)+1);const W=w[1].senderId;o.set(W,(o.get(W)||0)+1),M!==void 0&&c.set(M,(c.get(M)||0)+1),g.set(T,(g.get(T)||0)+1);const H=w[0].content,R=w[0].ts,z=w[0].id,E=p.get(H);E?(E.count++,E.lastTs=Math.max(E.lastTs,R),T>E.maxChainLength&&(E.maxChainLength=T,E.originatorId=V,E.firstMessageId=z)):p.set(H,{count:1,maxChainLength:T,originatorId:V,lastTs:R,firstMessageId:z});for(let j=1;j<w.length;j++){const Z=w[j],ee=w[j-1],le=(Z.ts-ee.ts)*1e3;if(le<=20*1e3){r.has(Z.senderId)||r.set(Z.senderId,{totalDiff:0,count:0});const re=r.get(Z.senderId);re.totalDiff+=le,re.count++}}};for(const w of s){d.has(w.senderId)||d.set(w.senderId,{platformId:w.platformId,name:w.name}),u.set(w.senderId,(u.get(w.senderId)||0)+1);const M=w.content.trim();M===k?y[y.length-1]?.senderId!==w.senderId&&y.push({id:w.id,senderId:w.senderId,content:M,ts:w.ts}):(h(y,w.senderId),k=M,y=[{id:w.id,senderId:w.senderId,content:M,ts:w.ts}])}h(y);const f=(w,M)=>{const T=[];for(const[V,W]of w.entries()){const H=d.get(V);H&&T.push({memberId:V,platformId:H.platformId,name:H.name,count:W,percentage:M>0?Math.round(W/M*1e4)/100:0})}return T.sort((V,W)=>W.count-V.count)},b=w=>{const M=[];for(const[T,V]of w.entries()){const W=d.get(T),H=u.get(T)||0;W&&H>0&&M.push({memberId:T,platformId:W.platformId,name:W.name,count:V,totalMessages:H,rate:Math.round(V/H*1e4)/100})}return M.sort((T,V)=>V.rate-T.rate)},_=()=>{const w=[];for(const[M,T]of r.entries()){if(T.count<5)continue;const V=d.get(M);V&&w.push({memberId:M,platformId:V.platformId,name:V.name,count:T.count,avgTimeDiff:Math.round(T.totalDiff/T.count)})}return w.sort((M,T)=>M.avgTimeDiff-T.avgTimeDiff)},I=[];for(const[w,M]of g.entries())I.push({length:w,count:M});I.sort((w,M)=>w.length-M.length);const v=[];for(const[w,M]of p.entries()){const T=d.get(M.originatorId);v.push({content:w,count:M.count,maxChainLength:M.maxChainLength,originatorName:T?.name||"未知",lastTs:M.lastTs,firstMessageId:M.firstMessageId})}v.sort((w,M)=>M.maxChainLength-w.maxChainLength);const C=v.slice(0,100);return{originators:f(e,m),initiators:f(o,m),breakers:f(c,m),fastestRepeaters:_(),originatorRates:b(e),initiatorRates:b(o),breakerRates:b(c),chainLengthDistribution:I,hotContents:C,avgChainLength:m>0?Math.round(n/m*100)/100:0,totalRepeatChains:m}}async function et(l,s){const{conditions:e,params:o}=ve(s),c=await G().pluginQuery(l,`SELECT
67
+ msg.id,
68
+ msg.sender_id as senderId,
69
+ msg.content,
70
+ msg.ts,
71
+ m.platform_id as platformId,
72
+ COALESCE(m.group_nickname, m.account_name, m.platform_id) as name
73
+ FROM message msg
74
+ JOIN member m ON msg.sender_id = m.id
75
+ WHERE 1=1 ${pe}
76
+ AND msg.type = 0
77
+ AND msg.content IS NOT NULL
78
+ AND TRIM(msg.content) != ''
79
+ ${e}
80
+ ORDER BY msg.ts ASC, msg.id ASC`,o);return c.length===0?{originators:[],initiators:[],breakers:[],fastestRepeaters:[],originatorRates:[],initiatorRates:[],breakerRates:[],chainLengthDistribution:[],hotContents:[],avgChainLength:0,totalRepeatChains:0}:G().pluginCompute(Us.toString(),{messages:c})}const Hs={class:"main-content mx-auto max-w-3xl p-6"},Ws={class:"flex items-center gap-3"},js={class:"shrink-0 text-lg font-bold text-pink-600"},Ps={class:"flex flex-1 items-center gap-1 overflow-hidden text-sm"},qs={class:"shrink-0 font-medium text-gray-900 dark:text-white whitespace-nowrap"},Ys=["title"],Gs={class:"flex shrink-0 items-center gap-2 text-xs text-gray-500"},Js=P({__name:"HotRepeatTab",props:{sessionId:{},timeFilter:{}},setup(l){const{t:s}=ae(),e=l,o=Re(),c=L(null),u=L(!1);async function d(){if(e.sessionId){u.value=!0;try{c.value=await et(e.sessionId,e.timeFilter)}catch(k){console.error("Failed to load repeat analysis:",k)}finally{u.value=!1}}}function g(k,y=30){return k.length<=y?k:k.slice(0,y)+"..."}function p(k){o.openChatRecordDrawer({scrollToMessageId:k.firstMessageId,highlightKeywords:[k.content]})}return J(()=>[e.sessionId,e.timeFilter],()=>{d()},{immediate:!0,deep:!0}),(k,y)=>{const m=ge;return i(),S("div",Hs,[u.value?(i(),N(t(oe),{key:0,text:t(s)("quotes.hotRepeat.loading")},null,8,["text"])):c.value&&c.value.hotContents.length>0?(i(),N(t(xt),{key:1,items:c.value.hotContents,title:t(s)("quotes.hotRepeat.title"),description:t(s)("quotes.hotRepeat.description"),"top-n":50,"count-template":t(s)("quotes.hotRepeat.countTemplate")},{item:A(({item:n,index:r})=>[a("div",Ws,[a("span",{class:te(["flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold",t(Ge)(r)])},x(r+1),3),a("span",js,x(t(s)("quotes.hotRepeat.people",{count:n.maxChainLength})),1),a("div",Ps,[a("span",qs,x(n.originatorName)+x(t(s)("quotes.hotRepeat.colon")),1),a("span",{class:"truncate text-gray-600 dark:text-gray-400",title:n.content},x(g(n.content)),9,Ys)]),a("div",Gs,[a("span",null,x(t(s)("quotes.hotRepeat.times",{count:n.count})),1),y[0]||(y[0]=a("span",{class:"text-gray-300 dark:text-gray-600"},"|",-1)),a("span",null,x(t(Se)(n.lastTs)),1),$(m,{icon:"i-heroicons-chat-bubble-left-right",color:"neutral",variant:"ghost",size:"xs",title:t(s)("quotes.hotRepeat.viewChat"),onClick:je(h=>p(n),["stop"])},null,8,["title","onClick"])])])]),_:1},8,["items","title","description","count-template"])):(i(),N(t(K),{key:2,title:t(s)("quotes.hotRepeat.title")},{default:A(()=>[$(t(ce),{text:t(s)("quotes.hotRepeat.empty")},null,8,["text"])]),_:1},8,["title"]))])}}}),Qs={class:"main-content mx-auto max-w-[920px] space-y-6 p-6"},Ks={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},Xs={class:"p-5"},Zs={class:"p-5"},ea=P({__name:"OverviewTab",props:{session:{},memberActivity:{},topMembers:{},bottomMembers:{},messageTypes:{},hourlyActivity:{},dailyActivity:{},timeRange:{},selectedYear:{},filteredMessageCount:{},filteredMemberCount:{},timeFilter:{}},setup(l){const{t:s}=ae(),e=l,{dailyChartData:o}=_t(()=>e.dailyActivity),c=D(()=>({labels:e.messageTypes.map(d=>wt(d.type,s)),values:e.messageTypes.map(d=>d.count)})),u=D(()=>{const d=[...e.memberActivity].sort((m,n)=>n.messageCount-m.messageCount),g=d.slice(0,10),p=d.slice(10).reduce((m,n)=>m+n.messageCount,0),k=g.map(m=>m.name),y=g.map(m=>m.messageCount);return p>0&&(k.push(s("analysis.overview.others")),y.push(p)),{labels:k,values:y}});return(d,g)=>(i(),S("div",Qs,[$(bt,{session:l.session,"daily-activity":l.dailyActivity,"message-types":l.messageTypes,"hourly-activity":l.hourlyActivity,"time-range":l.timeRange,"selected-year":l.selectedYear,"filtered-message-count":l.filteredMessageCount,"time-filter":l.timeFilter},null,8,["session","daily-activity","message-types","hourly-activity","time-range","selected-year","filtered-message-count","time-filter"]),a("div",Ks,[$(t(K),{title:t(s)("analysis.overview.messageTypeDistribution"),"show-divider":!1},{default:A(()=>[a("div",Xs,[$(t(Ae),{data:c.value,height:280},null,8,["data"])])]),_:1},8,["title"]),$(t(K),{title:t(s)("analysis.overview.memberDistribution"),"show-divider":!1},{default:A(()=>[a("div",Zs,[$(t(Ae),{data:u.value,height:280},null,8,["data"])])]),_:1},8,["title"])]),$(kt,{"daily-activity":l.dailyActivity,"daily-chart-data":t(o)},null,8,["daily-activity","daily-chart-data"])]))}}),ta={class:"flex items-center gap-3"},sa={key:1,class:"py-8 text-center text-sm text-gray-400"},aa=P({__name:"ActivityRank",props:{sessionId:{},memberActivity:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(l){const s=l,e=L(null),o=L(null),c=L(!1),u=L("activity"),d=L(s.globalTopN??10);J(()=>s.globalTopN,f=>{f!==void 0&&(d.value=f)});async function g(){if(s.sessionId){c.value=!0;try{const[f,b]=await Promise.all([Vs(s.sessionId,s.timeFilter),Ze(s.sessionId,s.timeFilter)]);e.value=f,o.value=b}catch(f){console.error("加载活跃数据失败:",f)}finally{c.value=!1}}}const p=D(()=>s.memberActivity.map(f=>({id:f.memberId.toString(),name:f.name,value:f.messageCount,percentage:f.percentage}))),k=D(()=>e.value?e.value.rank.map(f=>({id:f.memberId.toString(),name:f.name,value:f.count,percentage:f.percentage})):[]),y=D(()=>o.value?o.value.loyaltyRank.map(f=>({id:f.memberId.toString(),name:f.name,value:f.totalDays,percentage:f.percentage})):[]),m=D(()=>{switch(u.value){case"activity":return p.value;case"dragon":return k.value;case"loyalty":return y.value;default:return p.value}}),n=D(()=>{switch(u.value){case"activity":return"条";case"dragon":case"loyalty":return"天";default:return"条"}}),r=D(()=>{switch(u.value){case"activity":return"🏆 活跃榜 - 发言数量";case"dragon":return"🏆 活跃榜 - 龙王";case"loyalty":return"🏆 活跃榜 - 累计发言";default:return"🏆 活跃榜"}}),h=D(()=>{switch(u.value){case"activity":return"按消息发送数量排名";case"dragon":return`每天发言最多的人+1(共 ${e.value?.totalDays??0} 天)`;case"loyalty":return`累计发言天数排名(共 ${o.value?.totalDays??0} 天)`;default:return""}});return J(()=>[s.sessionId,s.timeFilter],()=>g(),{immediate:!0,deep:!0}),(f,b)=>(i(),N(t(K),{title:r.value,description:h.value},{headerRight:A(()=>[a("div",ta,[l.showTopNSelect?(i(),N(t(me),{key:0,modelValue:d.value,"onUpdate:modelValue":b[0]||(b[0]=_=>d.value=_)},null,8,["modelValue"])):U("",!0),$(t(de),{modelValue:u.value,"onUpdate:modelValue":b[1]||(b[1]=_=>u.value=_),items:[{label:"发言数量",value:"activity"},{label:"龙王",value:"dragon"},{label:"累计发言",value:"loyalty"}],size:"sm"},null,8,["modelValue"])])]),default:A(()=>[c.value&&(u.value==="dragon"||u.value==="loyalty")?(i(),N(t(oe),{key:0,text:"正在加载数据..."})):(i(),S(q,{key:1},[m.value.length>0?(i(),N(t(_e),{key:0,members:m.value,title:r.value,unit:n.value,"top-n":d.value,bare:""},null,8,["members","title","unit","top-n"])):(i(),S("div",sa,"暂无数据"))],64))]),_:1},8,["title","description"]))}}),na={key:0},oa={key:0,class:"flex items-center justify-center gap-6 border-t border-gray-100 px-5 py-3 dark:border-gray-800"},ra={class:"px-3 py-2"},ia=P({__name:"EChartStreakRank",props:{items:{},title:{},description:{},topN:{default:10},mode:{default:"max"},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(l){const s=l,e=D(()=>s.mode==="current"?s.items.filter(y=>y.currentStreak>0).sort((y,m)=>m.currentStreak-y.currentStreak).slice(0,s.topN):s.items.slice(0,s.topN)),o=D(()=>{const y=e.value.length*36;return Math.max(y+30,180)}),c={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#ee4567"},{offset:1,color:"#f7758c"}]},u={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#f97316"},{offset:1,color:"#fb923c"}]};function d(y,m=8){return y.length<=m?y:y.slice(0,m)+"…"}function g(y,m){return`${y} ~ ${m}`}function p(y){return s.mode==="current"?y.currentStreak:y.maxStreak}const k=D(()=>{const y=[...e.value].reverse(),m=y.map(f=>d(f.name)),n=y.map(f=>p(f)),r=Math.max(...n,1),h=y.map(f=>({value:p(f),itemStyle:{color:s.mode==="current"||f.currentStreak>0?u: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:f=>{const b=f[0];if(!b)return"";const _=e.value.length-1-b.dataIndex,I=e.value[_];if(s.mode==="current")return`
81
+ <div style="padding: 4px 8px;">
82
+ <div style="font-weight: bold; margin-bottom: 6px;">${I.name}</div>
83
+ <div style="color: #fb923c;">🔥 当前连续 <b>${I.currentStreak}</b> 天</div>
84
+ <div style="margin-top: 4px; font-size: 12px; color: #9ca3af;">最长记录: ${I.maxStreak} 天</div>
85
+ </div>
86
+ `;let v=`
87
+ <div style="padding: 4px 8px;">
88
+ <div style="font-weight: bold; margin-bottom: 6px;">${I.name}</div>
89
+ <div style="margin-bottom: 4px;">🔥 最长连续: <b>${I.maxStreak}</b> 天</div>
90
+ <div style="font-size: 12px; color: #9ca3af;">${g(I.maxStreakStart,I.maxStreakEnd)}</div>
91
+ `;return I.currentStreak>0&&(v+=`<div style="margin-top: 6px; color: #fb923c;">🔥 当前连续 ${I.currentStreak} 天</div>`),v+="</div>",v}},grid:{left:110,right:70,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:r*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:m,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(f,b)=>{const I=e.value.length-1-b+1;return`${I===1?"🥇":I===2?"🥈":I===3?"🥉":`${I}.`} ${f}`}}},series:[{type:"bar",data:h,barWidth:18,barCategoryGap:"30%",label:{show:!0,position:"right",distance:8,formatter:f=>{const b=e.value.length-1-f.dataIndex,_=e.value[b],I=p(_),v=s.mode==="current"||_.currentStreak>0?" 🔥":"";return`${I} 天${v}`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(249, 115, 22, 0.3)"}}}]}});return(y,m)=>l.bare?(i(),S("div",na,[$(t(he),{"content-height":o.value,"max-height-vh":l.maxHeightVh},{default:A(()=>[$(t(ne),{option:k.value,height:o.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"]),l.mode==="max"?(i(),S("div",oa,[...m[0]||(m[0]=[ut('<div class="flex items-center gap-1.5"><div class="h-3 w-6 rounded bg-linear-to-r from-orange-500 to-orange-400"></div><span class="text-xs text-gray-500">当前连续中 🔥</span></div><div class="flex items-center gap-1.5"><div class="h-3 w-6 rounded bg-linear-to-r from-pink-500 to-pink-400"></div><span class="text-xs text-gray-500">已中断</span></div>',2)])])):U("",!0)])):(i(),N(t(K),{key:1,title:l.title,description:l.description,scrollable:"","max-height-vh":l.maxHeightVh},Pe({default:A(()=>[a("div",ra,[$(t(ne),{option:k.value,height:o.value},null,8,["option","height"])])]),_:2},[l.mode==="max"?{name:"footer",fn:A(()=>[m[1]||(m[1]=a("div",{class:"flex items-center justify-center gap-6 border-t border-gray-100 px-5 py-3 dark:border-gray-800"},[a("div",{class:"flex items-center gap-1.5"},[a("div",{class:"h-3 w-6 rounded bg-linear-to-r from-orange-500 to-orange-400"}),a("span",{class:"text-xs text-gray-500"},"当前连续中 🔥")]),a("div",{class:"flex items-center gap-1.5"},[a("div",{class:"h-3 w-6 rounded bg-linear-to-r from-pink-500 to-pink-400"}),a("span",{class:"text-xs text-gray-500"},"已中断")])],-1))]),key:"0"}:void 0]),1032,["title","description","max-height-vh"]))}}),la={class:"px-3 py-2"},ca=P({__name:"EChartBattleRank",props:{battles:{},title:{},description:{},topN:{default:10},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(l){const s=l,e=D(()=>s.battles.slice(0,s.topN)),o=D(()=>{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){return`${g.participantCount} 人参战`}const d=D(()=>{const g=[...e.value].reverse(),p=g.map(n=>u(n)),k=g.map(n=>n.totalImages),y=Math.max(...k,1),m=g.map(n=>({value:n.totalImages,itemStyle:{color:c,borderRadius:[0,4,4,0]}}));return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.85)",borderColor:"transparent",textStyle:{color:"#fff",fontSize:12},extraCssText:"max-width: 300px;",formatter:n=>{const r=n[0];if(!r)return"";const h=e.value.length-1-r.dataIndex,f=e.value[h],b=f.participants.slice(0,5).map(I=>`<span style="color: #d1d5db;">${I.name}</span> <b>${I.imageCount}</b>张`).join("、"),_=f.participants.length>5?`、+${f.participants.length-5}`:"";return`
92
+ <div style="padding: 6px 8px;">
93
+ <div style="font-weight: bold; margin-bottom: 8px; font-size: 13px;">
94
+ ⚔️ ${Se(f.startTime)}
95
+ </div>
96
+ <div style="margin-bottom: 6px;">
97
+ <span style="color: #9ca3af;">参战人数:</span> <b>${f.participantCount}</b> 人
98
+ </div>
99
+ <div style="margin-bottom: 8px;">
100
+ <span style="color: #9ca3af;">总图片数:</span> <b style="color: #f472b6;">${f.totalImages}</b> 张
101
+ </div>
102
+ <div style="border-top: 1px solid #374151; padding-top: 6px; font-size: 11px;">
103
+ ${b}${_}
104
+ </div>
105
+ </div>
106
+ `}},grid:{left:95,right:125,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:y*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:p,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:11,color:"#4b5563",margin:12,formatter:(n,r)=>{const f=e.value.length-1-r+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 r=e.value.length-1-n.dataIndex,h=e.value[r],f=Se(h.startTime);return`${h.totalImages} 张 (${f})`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(238, 69, 103, 0.3)"}}}]}});return(g,p)=>l.bare?(i(),N(t(he),{key:0,"content-height":o.value,"max-height-vh":l.maxHeightVh},{default:A(()=>[$(t(ne),{option:d.value,height:o.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(i(),N(t(K),{key:1,title:l.title,description:l.description,scrollable:"","max-height-vh":l.maxHeightVh},{default:A(()=>[a("div",la,[$(t(ne),{option:d.value,height:o.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),da={class:"px-3 py-2"},ua=P({__name:"EChartTimeRank",props:{items:{},title:{},description:{},topN:{default:10},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(l){const s=l,e=D(()=>s.items.slice(0,s.topN)),o=D(()=>{const p=e.value.length*36;return Math.max(p+30,180)}),c={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#f59e0b"},{offset:1,color:"#fbbf24"}]};function u(p,k=8){return p.length<=k?p:p.slice(0,k)+"…"}function d(p){return(p/1e3).toFixed(2)+"s"}const g=D(()=>{if(e.value.length===0)return{};const p=[...e.value].reverse(),k=p.map(n=>u(n.name)),y=e.value[0].avgTimeDiff,m=p.map(n=>({value:Math.round(y/n.avgTimeDiff*100),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 r=n[0];if(!r)return"";const h=e.value.length-1-r.dataIndex,f=e.value[h];return`
107
+ <div style="padding: 4px 8px;">
108
+ <div style="font-weight: bold; margin-bottom: 6px;">${f.name}</div>
109
+ <div style="margin-bottom: 4px;">⚡️ 平均反应时间: <b>${d(f.avgTimeDiff)}</b></div>
110
+ <div style="font-size: 12px; color: #9ca3af;">参与复读 ${f.count} 次</div>
111
+ </div>
112
+ `}},grid:{left:110,right:100,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:105,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:k,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(n,r)=>{const f=e.value.length-1-r+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 r=e.value.length-1-n.dataIndex,h=e.value[r];return`${d(h.avgTimeDiff)} · ${h.count}次`},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(245, 158, 11, 0.3)"}}}]}});return(p,k)=>l.bare?(i(),N(t(he),{key:0,"content-height":o.value,"max-height-vh":l.maxHeightVh},{default:A(()=>[$(t(ne),{option:g.value,height:o.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(i(),N(t(K),{key:1,title:l.title,description:l.description,scrollable:"","max-height-vh":l.maxHeightVh},{default:A(()=>[a("div",da,[$(t(ne),{option:g.value,height:o.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),ma={class:"flex items-center gap-3"},ga={class:"px-3 py-2"},pa=P({__name:"EChartDivingRank",props:{items:{},showTopNSelect:{type:Boolean,default:!0},maxHeightVh:{default:60},globalTopN:{}},setup(l){const s=l,e=L("desc"),o=L(s.globalTopN??10);J(()=>s.globalTopN,n=>{n!==void 0&&(o.value=n)});const c=D(()=>[...s.items].sort((r,h)=>e.value==="desc"?h.daysSinceLastMessage-r.daysSinceLastMessage:r.daysSinceLastMessage-h.daysSinceLastMessage).slice(0,o.value)),u=D(()=>e.value==="desc"?"🤿 潜水榜 - 潜水最久":"🤿 潜水榜 - 最近冒泡"),d=D(()=>e.value==="desc"?"距离上次发言时间最久的成员":"最近发言过的成员"),g=D(()=>{const n=c.value.length*36;return Math.max(n+30,180)}),p={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#06b6d4"},{offset:1,color:"#22d3ee"}]};function k(n,r=8){return n.length<=r?n:n.slice(0,r)+"…"}function y(n){return n===0?"今天":n===1?"昨天":`${n} 天前`}const m=D(()=>{if(c.value.length===0)return{};const n=[...c.value].reverse(),r=n.map(b=>k(b.name)),h=Math.max(...c.value.map(b=>b.daysSinceLastMessage),1),f=n.map(b=>({value:b.daysSinceLastMessage,itemStyle:{color:p,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:b=>{const _=b[0];if(!_)return"";const I=c.value.length-1-_.dataIndex,v=c.value[I];return`
113
+ <div style="padding: 4px 8px;">
114
+ <div style="font-weight: bold; margin-bottom: 6px;">${v.name}</div>
115
+ <div style="margin-bottom: 4px;">🤿 ${y(v.daysSinceLastMessage)}</div>
116
+ <div style="font-size: 12px; color: #9ca3af;">最后发言: ${$t(v.lastMessageTs)}</div>
117
+ </div>
118
+ `}},grid:{left:110,right:100,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:h*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:r,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(b,_)=>{const v=c.value.length-1-_+1;return`${v===1?"🥇":v===2?"🥈":v===3?"🥉":`${v}.`} ${b}`}}},series:[{type:"bar",data:f,barWidth:18,barCategoryGap:"30%",label:{show:!0,position:"right",distance:8,formatter:b=>{const _=c.value.length-1-b.dataIndex,I=c.value[_];return y(I.daysSinceLastMessage)},fontSize:11,fontWeight:500,color:"#6b7280"},emphasis:{itemStyle:{shadowBlur:6,shadowColor:"rgba(0, 0, 0, 0.2)"}}}]}});return(n,r)=>(i(),N(t(K),{title:u.value,description:d.value,scrollable:"","max-height-vh":l.maxHeightVh},{headerRight:A(()=>[a("div",ma,[l.showTopNSelect?(i(),N(t(me),{key:0,modelValue:o.value,"onUpdate:modelValue":r[0]||(r[0]=h=>o.value=h)},null,8,["modelValue"])):U("",!0),$(t(de),{modelValue:e.value,"onUpdate:modelValue":r[1]||(r[1]=h=>e.value=h),items:[{label:"潜水最久",value:"desc"},{label:"最近冒泡",value:"asc"}],size:"sm"},null,8,["modelValue"])])]),default:A(()=>[a("div",ga,[$(t(ne),{option:m.value,height:g.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),ha={class:"px-3 py-2"},va=P({__name:"EChartConsecutiveRank",props:{items:{},title:{},description:{},topN:{default:10},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(l){const s=l,e=D(()=>[...s.items].sort((p,k)=>k.maxConsecutiveDays-p.maxConsecutiveDays).slice(0,s.topN)),o=D(()=>{const p=e.value.length*36;return Math.max(p+30,180)}),c={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#f97316"},{offset:1,color:"#fb923c"}]},u={type:"linear",x:0,y:0,x2:1,y2:0,colorStops:[{offset:0,color:"#ec4899"},{offset:1,color:"#f472b6"}]};function d(p,k=8){return p.length<=k?p:p.slice(0,k)+"…"}const g=D(()=>{if(e.value.length===0)return{};const p=[...e.value].reverse(),k=p.map(m=>d(m.name)),y=Math.max(...e.value.map(m=>m.maxConsecutiveDays),1);return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.85)",borderColor:"transparent",textStyle:{color:"#fff",fontSize:12},formatter:m=>{if(!m||m.length===0)return"";const n=m[0].dataIndex,r=e.value.length-1-n,h=e.value[r];let f=`
119
+ <div style="padding: 6px 8px;">
120
+ <div style="font-weight: bold; margin-bottom: 6px;">${h.name}</div>
121
+ <div>最长连续: <b style="color: #f472b6;">${h.maxConsecutiveDays}</b> 天</div>
122
+ `;return h.currentStreak>0&&(f+=`<div style="color: #f97316;">🔥 当前连续 ${h.currentStreak} 天</div>`),f+="</div>",f}},legend:{show:!1},grid:{left:110,right:75,top:15,bottom:15,containLabel:!1},xAxis:{type:"value",max:y*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:k,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(m,n)=>{const h=e.value.length-1-n+1;return`${h===1?"🥇":h===2?"🥈":h===3?"🥉":`${h}.`} ${m}`}}},series:[{name:"当前连续",type:"bar",data:p.map(m=>({value:m.currentStreak>0?m.maxConsecutiveDays:0,itemStyle:{color:c,borderRadius:[0,4,4,0]}})),barWidth:18,barGap:"-100%",label:{show:!0,position:"right",distance:8,formatter:m=>{const n=e.value.length-1-m.dataIndex,r=e.value[n];return r.currentStreak>0?`${r.maxConsecutiveDays} 天`:""},fontSize:11,fontWeight:500,color:"#6b7280"}},{name:"已中断",type:"bar",data:p.map(m=>({value:m.currentStreak===0?m.maxConsecutiveDays:0,itemStyle:{color:u,borderRadius:[0,4,4,0]}})),barWidth:18,label:{show:!0,position:"right",distance:8,formatter:m=>{const n=e.value.length-1-m.dataIndex,r=e.value[n];return r.currentStreak===0?`${r.maxConsecutiveDays} 天`:""},fontSize:11,fontWeight:500,color:"#6b7280"}}]}});return(p,k)=>l.bare?(i(),N(t(he),{key:0,"content-height":o.value,"max-height-vh":l.maxHeightVh},{default:A(()=>[$(t(ne),{option:g.value,height:o.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(i(),N(t(K),{key:1,title:l.title,description:l.description,scrollable:"","max-height-vh":l.maxHeightVh},{default:A(()=>[a("div",ha,[$(t(ne),{option:g.value,height:o.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),fa={class:"px-3 py-2"},ya=P({__name:"EChartNightOwlRank",props:{items:{},title:{},description:{},topN:{default:10},maxHeightVh:{default:60},bare:{type:Boolean,default:!1}},setup(l){const s=l,e=D(()=>s.items.slice(0,s.topN)),o=D(()=>{const g=e.value.length*36;return Math.max(g+50,200)}),c={h23:"#8b5cf6",h0:"#3b82f6",h1:"#06b6d4",h2:"#f59e0b",h3to4:"#ef4444"};function u(g,p=8){return g.length<=p?g:g.slice(0,p)+"…"}const d=D(()=>{if(e.value.length===0)return{};const g=[...e.value].reverse(),p=g.map(y=>u(y.name)),k=Math.max(...e.value.map(y=>y.totalNightMessages),1);return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},backgroundColor:"rgba(0, 0, 0, 0.85)",borderColor:"transparent",textStyle:{color:"#fff",fontSize:12},formatter:y=>{if(!y||y.length===0)return"";const m=y[0].dataIndex,n=e.value.length-1-m,r=e.value[n],h=r.hourlyBreakdown;return`
123
+ <div style="padding: 6px 8px;">
124
+ <div style="font-weight: bold; margin-bottom: 6px;">${r.name}</div>
125
+ <div style="margin-bottom: 4px;">
126
+ 称号: <b style="color: #f472b6;">${r.title}</b>
127
+ </div>
128
+ <div style="margin-bottom: 6px;">总发言: <b>${r.totalNightMessages}</b> 条</div>
129
+ <div style="border-top: 1px solid #374151; padding-top: 6px;">
130
+ <div><span style="color: ${c.h23};">●</span> 23点: ${h.h23} 条</div>
131
+ <div><span style="color: ${c.h0};">●</span> 0点: ${h.h0} 条</div>
132
+ <div><span style="color: ${c.h1};">●</span> 1点: ${h.h1} 条</div>
133
+ <div><span style="color: ${c.h2};">●</span> 2点: ${h.h2} 条</div>
134
+ <div><span style="color: ${c.h3to4};">●</span> 3-4点: ${h.h3to4} 条</div>
135
+ </div>
136
+ </div>
137
+ `}},legend:{show:!0,bottom:0,itemWidth:12,itemHeight:12,textStyle:{color:"#6b7280",fontSize:10}},grid:{left:110,right:70,top:15,bottom:35,containLabel:!1},xAxis:{type:"value",max:k*1.15,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:p,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:12,color:"#4b5563",margin:12,formatter:(y,m)=>{const r=e.value.length-1-m+1;return`${r===1?"🥇":r===2?"🥈":r===3?"🥉":`${r}.`} ${y}`}}},series:[{name:"23点",type:"bar",stack:"total",data:g.map(y=>y.hourlyBreakdown.h23),itemStyle:{color:c.h23},barWidth:18},{name:"0点",type:"bar",stack:"total",data:g.map(y=>y.hourlyBreakdown.h0),itemStyle:{color:c.h0},barWidth:18},{name:"1点",type:"bar",stack:"total",data:g.map(y=>y.hourlyBreakdown.h1),itemStyle:{color:c.h1},barWidth:18},{name:"2点",type:"bar",stack:"total",data:g.map(y=>y.hourlyBreakdown.h2),itemStyle:{color:c.h2},barWidth:18},{name:"3-4点",type:"bar",stack:"total",data:g.map(y=>y.hourlyBreakdown.h3to4),itemStyle:{color:c.h3to4,borderRadius:[0,4,4,0]},barWidth:18,label:{show:!0,position:"right",distance:8,formatter:y=>{const m=e.value.length-1-y.dataIndex;return`${e.value[m].totalNightMessages} 条`},fontSize:11,fontWeight:500,color:"#6b7280"}}]}});return(g,p)=>l.bare?(i(),N(t(he),{key:0,"content-height":o.value,"max-height-vh":l.maxHeightVh},{default:A(()=>[$(t(ne),{option:d.value,height:o.value},null,8,["option","height"])]),_:1},8,["content-height","max-height-vh"])):(i(),N(t(K),{key:1,title:l.title,description:l.description,scrollable:"","max-height-vh":l.maxHeightVh},{default:A(()=>[a("div",fa,[$(t(ne),{option:d.value,height:o.value},null,8,["option","height"])])]),_:1},8,["title","description","max-height-vh"]))}}),xa={id:"streak-rank",class:"scroll-mt-24"},ba={class:"flex items-center gap-3"},ka=P({__name:"CheckInRank",props:{sessionId:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(l){const s=l,e=L(null),o=L(!1),c=L("max"),u=L(s.globalTopN??10);J(()=>s.globalTopN,y=>{y!==void 0&&(u.value=y)});const d=D(()=>c.value==="max"?"🔥 火花榜 - 最长连续":"🔥 火花榜 - 当前连续"),g=D(()=>c.value==="max"?"历史最长连续发言天数":"正在持续连续发言的成员"),p=D(()=>e.value?e.value.streakRank.some(y=>y.currentStreak>0):!1);async function k(){if(s.sessionId){o.value=!0;try{e.value=await Ze(s.sessionId,s.timeFilter)}catch(y){console.error("加载打卡分析失败:",y)}finally{o.value=!1}}}return J(()=>[s.sessionId,s.timeFilter],()=>{k()},{immediate:!0,deep:!0}),(y,m)=>(i(),S("div",xa,[o.value?(i(),N(t(oe),{key:0,text:"正在分析数据..."})):e.value&&e.value.streakRank.length>0?(i(),N(t(K),{key:1,title:d.value,description:g.value},{headerRight:A(()=>[a("div",ba,[l.showTopNSelect?(i(),N(t(me),{key:0,modelValue:u.value,"onUpdate:modelValue":m[0]||(m[0]=n=>u.value=n)},null,8,["modelValue"])):U("",!0),p.value?(i(),N(t(de),{key:1,modelValue:c.value,"onUpdate:modelValue":m[1]||(m[1]=n=>c.value=n),items:[{label:"最长连续",value:"max"},{label:"当前连续",value:"current"}],size:"sm"},null,8,["modelValue"])):U("",!0)])]),default:A(()=>[$(t(ia),{items:e.value.streakRank,title:d.value,mode:c.value,"top-n":u.value,bare:""},null,8,["items","title","mode","top-n"])]),_:1},8,["title","description"])):(i(),N(t(K),{key:2,title:"🔥 火花榜"},{default:A(()=>[$(t(ce),{text:"暂无连续发言数据"})]),_:1}))]))}}),_a={class:"flex items-center gap-3"},wa={key:1,class:"py-8 text-center text-sm text-gray-400"},$a={key:1,class:"py-8 text-center text-sm text-gray-400"},Ia=P({__name:"MemeBattleRank",props:{sessionId:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(l){const s=l,e=L(null),o=L(!1),c=L("count"),u=L(s.globalTopN??10);J(()=>s.globalTopN,r=>{r!==void 0&&(u.value=r)});async function d(){if(s.sessionId){o.value=!0;try{e.value=await zs(s.sessionId,s.timeFilter)}catch(r){console.error("加载斗图分析失败:",r)}finally{o.value=!1}}}const g=D(()=>e.value?e.value.rankByCount.map(r=>({id:r.memberId.toString(),name:r.name,value:r.count,percentage:r.percentage})):[]),p=D(()=>e.value?e.value.rankByImageCount.map(r=>({id:r.memberId.toString(),name:r.name,value:r.count,percentage:r.percentage})):[]),k=D(()=>c.value==="count"?g.value:p.value),y=D(()=>c.value==="count"?"场":"张"),m=D(()=>{switch(c.value){case"battle":return"⚔️ 斗图榜 - 史诗级战役";case"count":return"⚔️ 斗图榜 - 按场次";case"image":return"⚔️ 斗图榜 - 按图量";default:return"⚔️ 斗图榜"}}),n=D(()=>{switch(c.value){case"battle":return"记录最激烈的斗图大战";case"count":return"参与斗图次数最多的人";case"image":return"在斗图中发送图片最多的人";default:return""}});return J(()=>[s.sessionId,s.timeFilter],()=>d(),{immediate:!0,deep:!0}),(r,h)=>o.value?(i(),N(t(oe),{key:0,text:"正在统计斗图数据..."})):e.value?(i(),N(t(K),{key:1,title:m.value,description:n.value},{headerRight:A(()=>[a("div",_a,[l.showTopNSelect?(i(),N(t(me),{key:0,modelValue:u.value,"onUpdate:modelValue":h[0]||(h[0]=f=>u.value=f)},null,8,["modelValue"])):U("",!0),$(t(de),{modelValue:c.value,"onUpdate:modelValue":h[1]||(h[1]=f=>c.value=f),items:[{label:"按场次",value:"count"},{label:"按图量",value:"image"},{label:"史诗级战役",value:"battle"}],size:"sm"},null,8,["modelValue"])])]),default:A(()=>[c.value==="battle"?(i(),S(q,{key:0},[e.value.topBattles.length>0?(i(),N(t(ca),{key:0,battles:e.value.topBattles,title:"","top-n":u.value,bare:""},null,8,["battles","top-n"])):(i(),S("div",wa,"暂无史诗级战役数据"))],64)):(i(),S(q,{key:1},[k.value.length>0?(i(),N(t(_e),{key:0,members:k.value,title:m.value,unit:y.value,"top-n":u.value,bare:""},null,8,["members","title","unit","top-n"])):(i(),S("div",$a,"暂无斗图数据"))],64))]),_:1},8,["title","description"])):U("",!0)}}),Ca={class:"space-y-6"},Sa={class:"flex items-center gap-3"},Ma={class:"flex items-center gap-3"},Ta={key:1,class:"px-3 py-2"},Da=P({__name:"RepeatSection",props:{sessionId:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(l){const s=l,e=L(null),o=L(!1),c=L("originator"),u=L("fastest"),d=L(s.globalTopN??10),g=L(s.globalTopN??10);J(()=>s.globalTopN,I=>{I!==void 0&&(d.value=I,g.value=I)});async function p(){if(s.sessionId){o.value=!0;try{e.value=await et(s.sessionId,s.timeFilter)}catch(I){console.error("加载复读分析失败:",I)}finally{o.value=!1}}}const k=D(()=>e.value?e.value.originators.map(I=>({id:I.memberId.toString(),name:I.name,value:I.count,percentage:I.percentage})):[]),y=D(()=>e.value?e.value.initiators.map(I=>({id:I.memberId.toString(),name:I.name,value:I.count,percentage:I.percentage})):[]),m=D(()=>e.value?e.value.breakers.map(I=>({id:I.memberId.toString(),name:I.name,value:I.count,percentage:I.percentage})):[]),n=D(()=>{switch(c.value){case"originator":return k.value;case"initiator":return y.value;case"breaker":return m.value;default:return k.value}}),r=D(()=>{switch(c.value){case"originator":return"🔁 复读榜 - 被复读";case"initiator":return"🔁 复读榜 - 挑起";case"breaker":return"🔁 复读榜 - 打断";default:return"🔁 复读榜"}}),h=D(()=>{switch(c.value){case"originator":return"发出的消息被别人复读的次数";case"initiator":return"第二个发送相同消息、带起节奏的人";case"breaker":return"终结复读链的人";default:return""}}),f=D(()=>{if(!e.value)return{labels:[],values:[]};const I=e.value.chainLengthDistribution;return{labels:I.map(v=>`${v.length}人`),values:I.map(v=>v.count)}}),b=D(()=>u.value==="fastest"?"📊 复读统计 - 最快反应":"📊 复读统计 - 链长分布"),_=D(()=>{if(u.value==="fastest")return"平均复读反应时间(至少参与5次复读)";const I=e.value?.totalRepeatChains??0,v=e.value?.avgChainLength??0;return`共 ${I} 次复读,平均 ${v} 人参与`});return J(()=>[s.sessionId,s.timeFilter],()=>p(),{immediate:!0,deep:!0}),(I,v)=>(i(),S("div",Ca,[o.value?(i(),N(t(oe),{key:0,text:"正在分析复读数据..."})):e.value&&e.value.totalRepeatChains>0?(i(),S(q,{key:1},[$(t(K),{title:r.value,description:h.value},{headerRight:A(()=>[a("div",Sa,[l.showTopNSelect?(i(),N(t(me),{key:0,modelValue:d.value,"onUpdate:modelValue":v[0]||(v[0]=C=>d.value=C)},null,8,["modelValue"])):U("",!0),$(t(de),{modelValue:c.value,"onUpdate:modelValue":v[1]||(v[1]=C=>c.value=C),items:[{label:"被复读",value:"originator"},{label:"挑起",value:"initiator"},{label:"打断",value:"breaker"}],size:"sm"},null,8,["modelValue"])])]),default:A(()=>[n.value.length>0?(i(),N(t(_e),{key:0,members:n.value,title:r.value,unit:"次","top-n":d.value,bare:""},null,8,["members","title","top-n"])):(i(),N(t(ce),{key:1,text:"暂无数据"}))]),_:1},8,["title","description"]),$(t(K),{title:b.value,description:_.value},{headerRight:A(()=>[a("div",Ma,[l.showTopNSelect&&u.value==="fastest"?(i(),N(t(me),{key:0,modelValue:g.value,"onUpdate:modelValue":v[2]||(v[2]=C=>g.value=C)},null,8,["modelValue"])):U("",!0),$(t(de),{modelValue:u.value,"onUpdate:modelValue":v[3]||(v[3]=C=>u.value=C),items:[{label:"最快反应",value:"fastest"},{label:"链长分布",value:"distribution"}],size:"sm"},null,8,["modelValue"])])]),default:A(()=>[u.value==="fastest"?(i(),S(q,{key:0},[e.value.fastestRepeaters&&e.value.fastestRepeaters.length>0?(i(),N(t(ua),{key:0,items:e.value.fastestRepeaters,"top-n":g.value,title:"",bare:""},null,8,["items","top-n"])):(i(),N(t(ce),{key:1,text:"暂无最快复读数据"}))],64)):(i(),S("div",Ta,[f.value.labels.length>0?(i(),N(t(It),{key:0,data:f.value,height:200},null,8,["data"])):(i(),N(t(ce),{key:1,text:"暂无分布数据"}))]))]),_:1},8,["title","description"])],64)):(i(),N(t(K),{key:2,title:"🔁 复读榜"},{default:A(()=>[$(t(ce),{text:"该群组暂无复读记录"})]),_:1}))]))}}),Ra=P({__name:"DivingRank",props:{sessionId:{},timeFilter:{},globalTopN:{}},setup(l){const s=l,e=L(null),o=L(!1);async function c(){if(s.sessionId){o.value=!0;try{e.value=await As(s.sessionId,s.timeFilter)}catch(u){console.error("加载潜水分析失败:",u)}finally{o.value=!1}}}return J(()=>[s.sessionId,s.timeFilter],()=>c(),{immediate:!0,deep:!0}),(u,d)=>o.value?(i(),N(t(oe),{key:0,text:"正在统计潜水数据..."})):e.value&&e.value.rank.length>0?(i(),N(t(pa),{key:1,items:e.value.rank,"global-top-n":l.globalTopN},null,8,["items","global-top-n"])):U("",!0)}}),Na={class:"space-y-6"},La={class:"flex items-center gap-3"},Va={key:1,class:"py-8 text-center text-sm text-gray-400"},Aa={key:1,class:"py-8 text-center text-sm text-gray-400"},Ea={class:"flex items-center gap-3"},Oa={key:1,class:"py-8 text-center text-sm text-gray-400"},za=P({__name:"NightOwlRank",props:{sessionId:{},timeFilter:{},showTopNSelect:{type:Boolean,default:!0},globalTopN:{}},setup(l){const s=l,e=L(null),o=L(!1),c=L("first"),u=L("distribution"),d=L(s.globalTopN??10),g=L(s.globalTopN??10);J(()=>s.globalTopN,b=>{b!==void 0&&(d.value=b,g.value=b)});async function p(){if(s.sessionId){o.value=!0;try{e.value=await Bs(s.sessionId,s.timeFilter)}catch(b){console.error("加载出勤分析失败:",b)}finally{o.value=!1}}}const k=D(()=>e.value?e.value.lastSpeakerRank.map(b=>({id:String(b.memberId),name:b.name,value:b.count,percentage:b.percentage})):[]),y=D(()=>e.value?e.value.firstSpeakerRank.map(b=>({id:String(b.memberId),name:b.name,value:b.count,percentage:b.percentage})):[]),m=D(()=>c.value==="last"?k.value:y.value),n=D(()=>c.value==="last"?"⏰ 出勤排行 - 最晚下班":"⏰ 出勤排行 - 最早上班"),r=D(()=>{const b=e.value?.totalDays??0;return c.value==="last"?`每天最后一个发言的人(共 ${b} 天)`:`每天第一个发言的人(共 ${b} 天)`}),h=D(()=>u.value==="distribution"?"🦉 修仙统计 - 发言分布":"🦉 修仙统计 - 连续记录"),f=D(()=>u.value==="distribution"?"深夜时段(23:00-05:00)各时段发言分布":"连续在深夜时段发言的天数");return J(()=>[s.sessionId,s.timeFilter],()=>p(),{immediate:!0,deep:!0}),(b,_)=>(i(),S("div",Na,[o.value?(i(),N(t(oe),{key:0,text:"正在加载出勤分析..."})):e.value?(i(),S(q,{key:1},[$(t(K),{title:h.value,description:f.value},{headerRight:A(()=>[a("div",La,[l.showTopNSelect?(i(),N(t(me),{key:0,modelValue:d.value,"onUpdate:modelValue":_[0]||(_[0]=I=>d.value=I)},null,8,["modelValue"])):U("",!0),$(t(de),{modelValue:u.value,"onUpdate:modelValue":_[1]||(_[1]=I=>u.value=I),items:[{label:"发言分布",value:"distribution"},{label:"连续记录",value:"consecutive"}],size:"sm"},null,8,["modelValue"])])]),default:A(()=>[u.value==="distribution"?(i(),S(q,{key:0},[e.value.nightOwlRank.length>0?(i(),N(t(ya),{key:0,items:e.value.nightOwlRank,"top-n":d.value,title:"",bare:""},null,8,["items","top-n"])):(i(),S("div",Va,"暂无深夜发言数据"))],64)):(i(),S(q,{key:1},[e.value.consecutiveRecords.length>0?(i(),N(t(va),{key:0,items:e.value.consecutiveRecords,"top-n":d.value,title:"",bare:""},null,8,["items","top-n"])):(i(),S("div",Aa,"暂无连续记录"))],64))]),_:1},8,["title","description"]),$(t(K),{title:n.value,description:r.value},{headerRight:A(()=>[a("div",Ea,[l.showTopNSelect?(i(),N(t(me),{key:0,modelValue:g.value,"onUpdate:modelValue":_[2]||(_[2]=I=>g.value=I)},null,8,["modelValue"])):U("",!0),$(t(de),{modelValue:c.value,"onUpdate:modelValue":_[3]||(_[3]=I=>c.value=I),items:[{label:"最早上班",value:"first"},{label:"最晚下班",value:"last"}],size:"sm"},null,8,["modelValue"])])]),default:A(()=>[m.value.length>0?(i(),N(t(_e),{key:0,members:m.value,title:n.value,"top-n":g.value,unit:"次",bare:""},null,8,["members","title","top-n"])):(i(),S("div",Oa,"暂无数据"))]),_:1},8,["title","description"])],64)):U("",!0)]))}}),Fa={class:"main-content min-w-0 flex-1 px-8 mx-auto max-w-3xl space-y-6"},Ba={class:"mb-8 mt-4"},Ua={class:"text-5xl tracking-wider",style:{"font-weight":"800",background:"linear-gradient(to right, #f59e0b, #ec4899, #9333ea)","-webkit-background-clip":"text","-webkit-text-fill-color":"transparent"}},Ha={id:"activity-rank",class:"scroll-mt-24"},Wa={id:"meme-battle",class:"scroll-mt-24"},ja={id:"repeat",class:"scroll-mt-24"},Pa={id:"night-owl",class:"scroll-mt-24"},qa={id:"diving",class:"scroll-mt-24"},Ya={class:"border-l border-gray-200 pl-4 dark:border-gray-800"},Ga=P({__name:"RankingView",props:{sessionId:{},timeFilter:{}},setup(l){const s=l,e=L([]),o=L([]);async function c(){if(!s.sessionId)return;const n=G(),[r,h]=await Promise.all([n.getMemberActivity(s.sessionId,s.timeFilter),n.getAvailableYears(s.sessionId)]);e.value=r,o.value=h}J(()=>[s.sessionId,s.timeFilter],()=>c(),{immediate:!0,deep:!0});const u=D(()=>{if(s.timeFilter?.startTs&&s.timeFilter?.endTs){const n=new Date(s.timeFilter.startTs*1e3).getFullYear(),r=new Date(s.timeFilter.endTs*1e3).getFullYear();return n===r?`${n} 赛季`:`${n}-${r} 赛季`}if(o.value.length>0){const n=[...o.value].sort((f,b)=>f-b),r=n[0],h=n[n.length-1];return r===h?`${r} 赛季`:`${r}-${h} 赛季`}return"全部赛季"}),d=D(()=>({startTs:s.timeFilter?.startTs,endTs:s.timeFilter?.endTs})),g=[{id:"activity-rank",label:"🏆 活跃榜"},{id:"streak-rank",label:"🔥 火花榜"},{id:"meme-battle",label:"⚔️ 斗图榜"},{id:"repeat",label:"🔁 复读榜"},{id:"night-owl",label:"⏰ 出勤榜"},{id:"diving",label:"🤿 潜水榜"}],{contentRef:p,activeAnchor:k,scrollToAnchor:y}=Gt(g,{threshold:350}),m=L(10);return(n,r)=>(i(),S("div",{ref_key:"contentRef",ref:p,class:"flex gap-6 p-6"},[a("div",Fa,[a("div",Ba,[a("h1",Ua," 🏆 "+x(u.value),1),r[1]||(r[1]=a("p",{class:"mt-4 text-sm text-gray-500 dark:text-gray-400"},"各榜单前三名请找群主领取奖励 🎁",-1))]),a("div",Ha,[$(t(aa),{"session-id":s.sessionId,"member-activity":e.value,"time-filter":d.value,"global-top-n":m.value},null,8,["session-id","member-activity","time-filter","global-top-n"])]),$(t(ka),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":m.value},null,8,["session-id","time-filter","global-top-n"]),a("div",Wa,[$(t(Ia),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":m.value},null,8,["session-id","time-filter","global-top-n"])]),a("div",ja,[$(t(Da),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":m.value},null,8,["session-id","time-filter","global-top-n"])]),a("div",Pa,[$(t(za),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":m.value},null,8,["session-id","time-filter","global-top-n"])]),a("div",qa,[$(t(Ra),{"session-id":s.sessionId,"time-filter":d.value,"global-top-n":m.value},null,8,["session-id","time-filter","global-top-n"])]),r[2]||(r[2]=a("div",{class:"h-48 no-capture"},null,-1))]),$(t(Xt),{anchors:g,"active-anchor":t(k),onClick:t(y)},{default:A(()=>[a("div",Ya,[r[3]||(r[3]=a("div",{class:"text-xs text-gray-400 mb-2"},"显示数量",-1)),$(t(me),{modelValue:m.value,"onUpdate:modelValue":r[0]||(r[0]=h=>m.value=h)},null,8,["modelValue"])])]),_:1},8,["active-anchor","onClick"])],512))}});function tt(l){const s=[],e=[];return l?.startTs!=null&&(s.push("AND msg.ts >= ?"),e.push(l.startTs)),l?.endTs!=null&&(s.push("AND msg.ts <= ?"),e.push(l.endTs)),l?.memberId!=null&&(s.push("AND msg.sender_id = ?"),e.push(l.memberId)),{conditions:s.join(" "),params:e}}const Ja="AND COALESCE(m.account_name, '') != '系统消息'";async function Qa(l,s){const{conditions:e,params:o}=tt(s);return G().pluginQuery(l,`SELECT
138
+ m.id,
139
+ m.platform_id as platformId,
140
+ COALESCE(m.group_nickname, m.account_name, m.platform_id) as name,
141
+ COUNT(msg.id) as messageCount
142
+ FROM member m
143
+ LEFT JOIN message msg ON m.id = msg.sender_id ${e} ${Ja}
144
+ WHERE COALESCE(m.account_name, '') != '系统消息'
145
+ GROUP BY m.id`,o)}async function Ka(l){return G().pluginQuery(l,`SELECT member_id as memberId, name
146
+ FROM member_name_history`)}async function Xa(l,s){const{conditions:e,params:o}=tt(s);return G().pluginQuery(l,`SELECT msg.sender_id as senderId, msg.content
147
+ FROM message msg
148
+ JOIN member m ON msg.sender_id = m.id
149
+ WHERE COALESCE(m.account_name, '') != '系统消息'
150
+ AND msg.type = 0
151
+ AND msg.content IS NOT NULL
152
+ AND msg.content LIKE '%@%'
153
+ ${e}`,o)}function Za(l){const{members:s,nameHistory:e,messages:o}=l,c={nodes:[],links:[],maxLinkValue:0};if(s.length===0)return c;const u=new Map,d=new Map;for(const h of s)d.set(h.id,{name:h.name,messageCount:h.messageCount}),u.set(h.name,h.id);for(const h of e)u.has(h.name)||u.set(h.name,h.memberId);const g=new Map,p=/@([^\s@]+)/g;for(const h of o){const f=h.content.matchAll(p),b=new Set;for(const _ of f){const I=_[1],v=u.get(I);if(v&&v!==h.senderId&&!b.has(v)){b.add(v),g.has(h.senderId)||g.set(h.senderId,new Map);const C=g.get(h.senderId);C.set(v,(C.get(v)||0)+1)}}}const k=new Set;for(const[h,f]of g.entries()){k.add(h);for(const b of f.keys())k.add(b)}const y=Math.max(...s.filter(h=>k.has(h.id)).map(h=>h.messageCount),1),m=[];for(const h of k){const f=d.get(h);if(f){const b=20+f.messageCount/y*40;m.push({id:h,name:f.name,value:f.messageCount,symbolSize:Math.round(b)})}}const n=[];let r=0;for(const[h,f]of g.entries()){const b=d.get(h);if(b)for(const[_,I]of f.entries()){const v=d.get(_);v&&(n.push({source:b.name,target:v.name,value:I}),r=Math.max(r,I))}}return{nodes:m,links:n,maxLinkValue:r}}async function en(l,s){const e={nodes:[],links:[],maxLinkValue:0};try{const[o,c,u]=await Promise.all([Qa(l,s),Ka(l),Xa(l,s)]);return o.length===0?e:await G().pluginCompute(Za.toString(),{members:o,nameHistory:c,messages:u})}catch(o){return console.error("[chart-interaction] Failed to load mention graph:",o),e}}const tn={class:"flex h-full flex-col"},sn={class:"flex items-center justify-end px-4 py-2"},an={class:"flex items-center gap-4"},nn={class:"flex items-center gap-2"},on={class:"text-xs text-gray-400"},rn={class:"flex items-center gap-2"},ln={class:"text-xs text-gray-400"},cn={class:"flex-1 min-h-0 relative"},dn={key:0,class:"absolute inset-0 flex items-center justify-center"},un={key:0,class:"h-full"},mn={class:"absolute bottom-2 left-1/2 -translate-x-1/2 rounded-full bg-gray-100/80 px-3 py-1 text-xs text-gray-500 backdrop-blur-sm dark:bg-gray-800/80 dark:text-gray-400"},gn={key:1,class:"flex h-full items-center justify-center text-gray-400"},pn={class:"text-center"},hn={class:"mt-2 text-sm"},vn=P({__name:"InteractionView",props:{sessionId:{},timeFilter:{}},setup(l){const s=l,{t:e}=ae(),o=L(!0),c=L({nodes:[],links:[],maxLinkValue:0}),u=L("circular"),d=L(!1),g=L(null);function p(){g.value?.resetView()}async function k(){if(s.sessionId){o.value=!0;try{const y=await en(s.sessionId,s.timeFilter);c.value={nodes:y.nodes,links:y.links,maxLinkValue:y.maxLinkValue}}catch(y){console.error("[chart-interaction] 加载互动关系图数据失败:",y)}finally{o.value=!1}}}return J(()=>[s.sessionId,s.timeFilter],()=>{k()},{immediate:!0,deep:!0}),(y,m)=>{const n=ge,r=qe("UButtonGroup"),h=at,f=Me;return i(),S("div",tn,[a("div",sn,[a("div",an,[a("div",nn,[a("span",on,x(t(e)("views.interaction.layout"))+":",1),$(r,{size:"xs"},{default:A(()=>[$(n,{color:u.value==="circular"?"primary":"neutral",variant:u.value==="circular"?"solid":"ghost",onClick:m[0]||(m[0]=b=>u.value="circular")},{default:A(()=>[X(x(t(e)("views.interaction.circular")),1)]),_:1},8,["color","variant"]),$(n,{color:u.value==="force"?"primary":"neutral",variant:u.value==="force"?"solid":"ghost",onClick:m[1]||(m[1]=b=>u.value="force")},{default:A(()=>[X(x(t(e)("views.interaction.force")),1)]),_:1},8,["color","variant"])]),_:1})]),a("div",rn,[a("span",ln,x(t(e)("views.interaction.directed"))+":",1),$(h,{modelValue:d.value,"onUpdate:modelValue":m[2]||(m[2]=b=>d.value=b),size:"xs"},null,8,["modelValue"])]),$(n,{size:"xs",color:"neutral",variant:"ghost",icon:"i-heroicons-arrow-path",onClick:p},{default:A(()=>[X(x(t(e)("views.interaction.reset")),1)]),_:1})])]),a("div",cn,[o.value?(i(),S("div",dn,[$(f,{name:"i-heroicons-arrow-path",class:"h-8 w-8 animate-spin text-pink-500"})])):(i(),S(q,{key:1},[c.value.nodes.length>0?(i(),S("div",un,[$(t(Zt),{ref_key:"graphRef",ref:g,data:c.value,layout:u.value,directed:d.value,height:"100%"},null,8,["data","layout","directed"]),a("div",mn,x(t(e)("views.interaction.graphHint",{nodes:c.value.nodes.length,links:c.value.links.length})),1)])):(i(),S("div",gn,[a("div",pn,[$(f,{name:"i-heroicons-user-group",class:"mx-auto h-10 w-10 text-gray-300 dark:text-gray-600"}),a("p",hn,x(t(e)("views.interaction.noInteraction")),1)])]))],64))])])}}}),fn={class:"main-content mx-auto max-w-[920px] space-y-6 p-6"},yn={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},xn={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},bn={class:"divide-y divide-gray-100 dark:divide-gray-800"},kn={class:"flex flex-1 items-center gap-2"},_n=["onClick"],wn={class:"flex items-center gap-1 text-pink-500"},$n={class:"text-xs"},In=["onClick"],Cn={class:"shrink-0 text-right text-sm text-gray-500"},Sn={key:0,class:"text-red-500"},Mn={key:1},Tn={class:"divide-y divide-gray-100 dark:divide-gray-800"},Dn={class:"flex flex-1 items-center gap-2"},Rn=["onClick"],Nn={class:"flex items-center gap-1"},Ln={class:"text-xs text-gray-400"},Vn={class:"text-xs text-gray-400"},An=["onClick"],En={class:"shrink-0 text-right"},On={class:"text-lg font-bold text-pink-600"},zn={class:"ml-1 text-sm text-gray-500"},Fn={key:0,class:"p-5"},Bn={class:"mb-4 text-lg font-semibold text-gray-900 dark:text-white"},Un={key:0,class:"mb-4"},Hn={class:"mb-2 text-sm font-medium text-gray-700 dark:text-gray-300"},Wn={class:"space-y-2"},jn={class:"text-sm font-medium text-gray-900 dark:text-white"},Pn={class:"text-xs text-gray-500"},qn={key:1},Yn={class:"mb-2 text-sm font-medium text-gray-700 dark:text-gray-300"},Gn={class:"space-y-2"},Jn={class:"text-sm font-medium text-gray-900 dark:text-white"},Qn={class:"text-xs text-gray-500"},Kn={class:"mt-4 flex justify-end"},Xn=P({__name:"Relationships",props:{sessionId:{},timeFilter:{}},setup(l){const{t:s}=ae(),e=l,o=L(null),c=L(!1),u=L(null),d=L(!1);async function g(){if(e.sessionId){c.value=!0;try{o.value=await G().getMentionAnalysis(e.sessionId,e.timeFilter)}catch(m){console.error("加载 @ 互动分析失败:",m)}finally{c.value=!1}}}const p=D(()=>o.value?o.value.topMentioners.map(m=>({id:m.memberId.toString(),name:m.name,value:m.count,percentage:m.percentage})):[]),k=D(()=>o.value?o.value.topMentioned.map(m=>({id:m.memberId.toString(),name:m.name,value:m.count,percentage:m.percentage})):[]);function y(m){if(!o.value)return;const n=o.value.memberDetails.find(r=>r.memberId===m);n&&(u.value=n,d.value=!0)}return J(()=>[e.sessionId,e.timeFilter],()=>{g()},{immediate:!0,deep:!0}),(m,n)=>{const r=Be,h=ge,f=be;return i(),S("div",fn,[c.value?(i(),N(t(oe),{key:0,text:t(s)("members.relationships.loading")},null,8,["text"])):o.value&&o.value.totalMentions>0?(i(),S(q,{key:1},[a("div",yn,[p.value.length>0?(i(),N(t(ze),{key:0,members:p.value,title:t(s)("members.relationships.topMentioners"),description:t(s)("members.relationships.totalMentions",{count:o.value.totalMentions}),unit:t(s)("members.relationships.times")},null,8,["members","title","description","unit"])):U("",!0),k.value.length>0?(i(),N(t(ze),{key:1,members:k.value,title:t(s)("members.relationships.topMentioned"),description:t(s)("members.relationships.popularMember"),unit:t(s)("members.relationships.times")},null,8,["members","title","description","unit"])):U("",!0)]),a("div",xn,[o.value.oneWay.length>0?(i(),N(t(K),{key:0,class:"hidden",title:t(s)("members.relationships.oneWay.title"),description:t(s)("members.relationships.oneWay.description",{count:o.value.oneWay.length})},{default:A(()=>[a("div",bn,[(i(!0),S(q,null,se(o.value.oneWay.slice(0,10),(b,_)=>(i(),S("div",{key:_,class:"flex items-center gap-4 px-5 py-3 transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/50"},[a("span",{class:te(["flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold",_===0?"bg-pink-100 text-pink-600 dark:bg-pink-900/30 dark:text-pink-400":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-500"])},x(_+1),3),a("div",kn,[a("button",{class:"font-medium text-gray-900 hover:text-pink-600 dark:text-white dark:hover:text-pink-600",onClick:I=>y(b.fromMemberId)},x(b.fromName),9,_n),a("div",wn,[n[2]||(n[2]=a("span",{class:"text-lg"},"→",-1)),a("span",$n,x(b.fromToCount)+"次",1)]),a("button",{class:"font-medium text-gray-900 hover:text-pink-600 dark:text-white dark:hover:text-pink-600",onClick:I=>y(b.toMemberId)},x(b.toName),9,In)]),a("div",Cn,[b.toFromCount===0?(i(),S("span",Sn,x(t(s)("members.relationships.oneWay.neverRespond")),1)):(i(),S("span",Mn,x(t(s)("members.relationships.oneWay.reverse",{count:b.toFromCount})),1))]),$(r,{color:"pink",variant:"soft",size:"xs"},{default:A(()=>[X(x(t(s)("members.relationships.oneWay.ratio",{value:Math.round(b.ratio*100)})),1)]),_:2},1024)]))),128))])]),_:1},8,["title","description"])):U("",!0),o.value.twoWay.length>0?(i(),N(t(K),{key:1,title:t(s)("members.relationships.twoWay.title"),description:t(s)("members.relationships.twoWay.description",{count:o.value.twoWay.length})},{default:A(()=>[a("div",Tn,[(i(!0),S(q,null,se(o.value.twoWay.slice(0,10),(b,_)=>(i(),S("div",{key:_,class:"flex items-center gap-4 px-5 py-3 transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/50"},[a("span",{class:te(["flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-bold",_===0?"bg-linear-to-r from-pink-400 to-red-400 text-white":_===1?"bg-linear-to-r from-pink-300 to-red-300 text-white":_===2?"bg-linear-to-r from-pink-200 to-red-200 text-pink-700":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-500"])},x(_+1),3),a("div",Dn,[a("button",{class:"font-medium text-gray-900 hover:text-pink-600 dark:text-white dark:hover:text-pink-600",onClick:I=>y(b.member1Id)},x(b.member1Name),9,Rn),a("div",Nn,[a("span",Ln,x(b.member1To2),1),n[3]||(n[3]=a("span",{class:"text-lg text-pink-500"},"⇄",-1)),a("span",Vn,x(b.member2To1),1)]),a("button",{class:"font-medium text-gray-900 hover:text-pink-600 dark:text-white dark:hover:text-pink-600",onClick:I=>y(b.member2Id)},x(b.member2Name),9,An)]),a("div",En,[a("span",On,x(b.total),1),a("span",zn,x(t(s)("members.relationships.twoWay.interactions")),1)]),$(r,{color:b.balance>=.7?"green":b.balance>=.5?"blue":"gray",variant:"soft",size:"xs"},{default:A(()=>[X(x(t(s)("members.relationships.twoWay.balance",{value:Math.round(b.balance*100)})),1)]),_:2},1032,["color"])]))),128))])]),_:1},8,["title","description"])):U("",!0)])],64)):c.value?U("",!0):(i(),N(t(K),{key:2,title:t(s)("members.relationships.emptyTitle")},{default:A(()=>[$(t(ce),{text:t(s)("members.relationships.empty")},null,8,["text"])]),_:1},8,["title"])),$(f,{open:d.value,"onUpdate:open":n[1]||(n[1]=b=>d.value=b)},{content:A(()=>[u.value?(i(),S("div",Fn,[a("h3",Bn,x(t(s)("members.relationships.modal.title",{name:u.value.name})),1),u.value.topMentioned.length>0?(i(),S("div",Un,[a("h4",Hn,x(t(s)("members.relationships.modal.topMentioned")),1),a("div",Wn,[(i(!0),S(q,null,se(u.value.topMentioned,(b,_)=>(i(),S("div",{key:_,class:"flex items-center gap-3 rounded-lg bg-gray-50 px-3 py-2 dark:bg-gray-800"},[a("span",jn,x(b.toName),1),a("span",Pn,x(t(s)("members.relationships.modal.timesCount",{count:b.count})),1)]))),128))])])):U("",!0),u.value.topMentioners.length>0?(i(),S("div",qn,[a("h4",Yn,x(t(s)("members.relationships.modal.topMentioners")),1),a("div",Gn,[(i(!0),S(q,null,se(u.value.topMentioners,(b,_)=>(i(),S("div",{key:_,class:"flex items-center gap-3 rounded-lg bg-gray-50 px-3 py-2 dark:bg-gray-800"},[a("span",Jn,x(b.fromName),1),a("span",Qn,x(t(s)("members.relationships.modal.timesCount",{count:b.count})),1)]))),128))])])):U("",!0),a("div",Kn,[$(h,{variant:"soft",onClick:n[0]||(n[0]=b=>d.value=!1)},{default:A(()=>[X(x(t(s)("members.relationships.modal.close")),1)]),_:1})])])):U("",!0)]),_:1},8,["open"])])}}}),Zn={lookAhead:3,decaySeconds:120,topEdges:150},eo="AND COALESCE(m.account_name, '') != '系统消息'";function to(l){const s=[],e=[];return l?.startTs!=null&&(s.push("AND msg.ts >= ?"),e.push(l.startTs)),l?.endTs!=null&&(s.push("AND msg.ts <= ?"),e.push(l.endTs)),{conditions:s.join(" "),params:e}}async function so(l){return G().pluginQuery(l,`SELECT
154
+ id,
155
+ platform_id as platformId,
156
+ COALESCE(group_nickname, account_name, platform_id) as name,
157
+ (SELECT COUNT(*) FROM message WHERE sender_id = member.id) as messageCount
158
+ FROM member
159
+ WHERE COALESCE(account_name, '') != '系统消息'`)}async function ao(l,s){const{conditions:e,params:o}=to(s);return G().pluginQuery(l,`SELECT msg.sender_id as senderId, msg.ts as ts
160
+ FROM message msg
161
+ JOIN member m ON msg.sender_id = m.id
162
+ WHERE 1=1 ${eo} ${e}
163
+ ORDER BY msg.ts ASC, msg.id ASC`,o)}function no(l){const{members:s,messages:e,options:o}=l;function c(R,z){return R<z?`${R}-${z}`:`${z}-${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(s.length<2)return{...d,stats:{...d.stats,totalMembers:s.length}};const g=new Map;for(const R of s)g.set(R.id,{name:R.name,platformId:R.platformId,messageCount:R.messageCount});if(e.length<2)return{...d,stats:{...d.stats,totalMembers:s.length,totalMessages:e.length}};const p=new Map;for(const R of e)p.set(R.senderId,(p.get(R.senderId)||0)+1);const k=e.length,y=new Map,m=new Map;for(let R=0;R<e.length-1;R++){const z=e[R],E=new Set;let j=0;for(let Z=R+1;Z<e.length&&j<o.lookAhead;Z++){const ee=e[Z];if(ee.senderId===z.senderId||E.has(ee.senderId))continue;E.add(ee.senderId),j++;const le=(ee.ts-z.ts)/1e3,re=Math.exp(-le/o.decaySeconds),ue=1-(j-1)*.2,F=re*ue,B=c(z.senderId,ee.senderId);y.set(B,(y.get(B)||0)+F),m.set(B,(m.get(B)||0)+1)}}const n=o.lookAhead*.8,r=[];for(const[R,z]of y){const[E,j]=R.split("-"),Z=parseInt(E),ee=parseInt(j),le=p.get(Z)||0,re=p.get(ee)||0,ue=le*re/k*n,F=ue>0?z/ue:0;r.push({sourceId:Z,targetId:ee,rawScore:z,expectedScore:ue,normalizedScore:F,coOccurrenceCount:m.get(R)||0})}const h=Math.max(...r.map(R=>R.rawScore),1),f=Math.max(...r.map(R=>R.normalizedScore),1),b=r.map(R=>{const z=.5*(R.rawScore/h)+.5*(R.normalizedScore/f);return{...R,rawScore:u(R.rawScore),expectedScore:u(R.expectedScore),normalizedScore:u(R.normalizedScore),hybridScore:u(z)}});b.sort((R,z)=>z.hybridScore-R.hybridScore);const _=b.slice(0,o.topEdges);if(_.length===0)return{...d,stats:{...d.stats,totalMembers:s.length,totalMessages:e.length}};const I=new Set;for(const R of _)I.add(R.sourceId),I.add(R.targetId);const v=new Map;for(const R of _)v.set(R.sourceId,(v.get(R.sourceId)||0)+R.hybridScore),v.set(R.targetId,(v.get(R.targetId)||0)+R.hybridScore);const C=Math.max(...v.values(),1),w=new Map;for(const R of I){const z=g.get(R)?.name||String(R);w.set(z,(w.get(z)||0)+1)}const M=new Map;for(const R of I){const z=g.get(R),E=z?.name||String(R);(w.get(E)||0)>1?M.set(R,`${E}#${(z?.platformId||String(R)).slice(-4)}`):M.set(R,E)}const T=Math.max(...[...I].map(R=>g.get(R)?.messageCount||0),1),V=[...I].map(R=>{const z=g.get(R),E=v.get(R)||0,j=E/C,Z=z.messageCount/T,ee=20+(.7*j+.3*Z)*35;return{id:R,name:M.get(R),messageCount:z.messageCount,symbolSize:Math.round(ee),degree:u(E),normalizedDegree:u(j)}});V.sort((R,z)=>z.degree-R.degree);const W=_.length>0?Math.max(..._.map(R=>R.hybridScore)):0,H=_.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:V,links:H,maxLinkValue:u(W),communities:[],stats:{totalMembers:s.length,totalMessages:e.length,involvedMembers:I.size,edgeCount:_.length,communityCount:0}}}async function oo(l,s,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,s)]);if(c.length<2||u.length<2)return{...o,stats:{...o.stats,totalMembers:c.length,totalMessages:u.length}};const d={...Zn,...e};return await G().pluginCompute(no.toString(),{members:c,messages:u,options:d})}catch(c){return console.error("[chart-cluster] Failed to load cluster graph:",c),o}}const ro={class:"mx-auto max-w-[920px] p-4 h-full"},io={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"},ko={key:1,class:"h-full flex items-center justify-center"},_o={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"},Lo={class:"flex-1 overflow-hidden flex flex-col"},Vo={key:0,class:"flex-1 flex items-center justify-center"},Ao={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"},Qo={class:"px-4 py-3 border-b border-gray-200 dark:border-gray-700"},Ko={class:"text-sm font-medium flex items-center gap-2"},Xo={class:"flex-1 overflow-y-auto"},Zo={class:"flex items-center gap-3"},er={class:"flex-1 min-w-0"},tr={class:"flex items-center gap-2 text-sm"},sr={class:"font-medium truncate"},ar={class:"font-medium truncate"},nr={class:"flex items-center gap-3 mt-1 text-xs text-gray-400"},or={class:"w-24 h-2 bg-gray-200 dark:bg-gray-700 rounded-full overflow-hidden"},rr={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"},ir=P({__name:"ClusterView",props:{sessionId:{},timeFilter:{}},setup(l){Je([Pt,Qe,qt,Yt,Ke]);const s=l,{t:e}=ae(),o=gt(),c=D(()=>o.value==="dark"),u=L(!0),d=L(null),g=L("matrix"),p=L(null),k=L({lookAhead:3,decaySeconds:120,topEdges:150}),y=L(null);let m=null;async function n(){if(s.sessionId){u.value=!0;try{d.value=await oo(s.sessionId,s.timeFilter,{lookAhead:k.value.lookAhead,decaySeconds:k.value.decaySeconds,topEdges:k.value.topEdges})}catch(M){console.error("[chart-cluster] 加载小团体关系数据失败:",M),d.value=null}finally{u.value=!1}}}const r=D(()=>{if(!d.value||d.value.nodes.length===0)return null;const{nodes:M,links:T,maxLinkValue:V}=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 z=[];for(let E=0;E<H.length;E++)for(let j=0;j<H.length;j++)if(E===j)z.push([E,j,-1]);else{const Z=R.get(`${H[E]}-${H[j]}`)||0;z.push([E,j,Z])}return{names:H,data:z,maxValue:V}});function h(){if(!r.value)return{graphic:{type:"text",style:{text:e("views.cluster.noData"),fill:"#999"}}};const{names:M,data:T,maxValue:V}=r.value;return{tooltip:{position:"top",formatter:W=>{const[H,R,z]=W.data;return z<0?`${M[H]}`:z===0?`${M[H]} ↔ ${M[R]}<br/>暂无关系数据`:`${M[H]} ↔ ${M[R]}<br/>临近度: ${z.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:V||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),_=D(()=>{if(!d.value||!b.value)return[];const M=b.value.name,T=[];for(const V of d.value.links)V.source===M?T.push({otherName:V.target,value:V.value,coOccurrenceCount:V.coOccurrenceCount}):V.target===M&&T.push({otherName:V.source,value:V.value,coOccurrenceCount:V.coOccurrenceCount});return T.sort((V,W)=>W.value-V.value),T}),I=D(()=>d.value?d.value.links.slice(0,50):[]);function v(){m&&g.value==="matrix"&&m.setOption(h(),{notMerge:!0})}function C(){y.value&&(m=Xe(y.value,c.value?"dark":void 0),v())}function w(){m?.resize()}return J(g,async(M,T)=>{T==="matrix"&&m&&(m.dispose(),m=null),M==="matrix"&&(await Ie(),C())}),J([d,()=>c.value],()=>{g.value==="matrix"&&v()},{deep:!0}),J(u,async(M,T)=>{T&&!M&&g.value==="matrix"&&(m&&(m.dispose(),m=null),await Ie(),C())}),J(()=>[s.sessionId,s.timeFilter],()=>n(),{immediate:!0,deep:!0}),ke(()=>{window.addEventListener("resize",w),g.value==="matrix"&&Ie(()=>C())}),Te(()=>{window.removeEventListener("resize",w),m?.dispose(),m=null}),(M,T)=>{const V=ge,W=qe("UButtonGroup"),H=Ue,R=nt,z=Me;return i(),S("div",ro,[a("div",io,[a("div",lo,[a("div",co,[$(W,{size:"xs"},{default:A(()=>[$(V,{color:g.value==="matrix"?"primary":"neutral",variant:g.value==="matrix"?"solid":"ghost",onClick:T[0]||(T[0]=E=>g.value="matrix")},{default:A(()=>[X(x(t(e)("views.cluster.matrixView")),1)]),_:1},8,["color","variant"]),$(V,{color:g.value==="member"?"primary":"neutral",variant:g.value==="member"?"solid":"ghost",onClick:T[1]||(T[1]=E=>g.value="member")},{default:A(()=>[X(x(t(e)("views.cluster.memberView")),1)]),_:1},8,["color","variant"]),$(V,{color:g.value==="circle"?"primary":"neutral",variant:g.value==="circle"?"solid":"ghost",onClick:T[2]||(T[2]=E=>g.value="circle")},{default:A(()=>[X(x(t(e)("views.cluster.rankingView")),1)]),_:1},8,["color","variant"])]),_:1})]),a("div",uo,[$(R,null,{content:A(()=>[a("div",mo,[a("h4",go,x(t(e)("views.cluster.modelSettings")),1),a("div",po,[a("div",null,[a("label",ho,x(t(e)("views.cluster.lookAhead")),1),$(H,{modelValue:k.value.lookAhead,"onUpdate:modelValue":T[3]||(T[3]=E=>k.value.lookAhead=E),modelModifiers:{number:!0},type:"number",min:1,max:10,size:"xs",placeholder:"1-10"},null,8,["modelValue"]),a("p",vo,x(t(e)("views.cluster.lookAheadDesc")),1)]),a("div",null,[a("label",fo,x(t(e)("views.cluster.decaySeconds")),1),$(H,{modelValue:k.value.decaySeconds,"onUpdate:modelValue":T[4]||(T[4]=E=>k.value.decaySeconds=E),modelModifiers:{number:!0},type:"number",min:30,max:3600,size:"xs",placeholder:"30-3600"},null,8,["modelValue"]),a("p",yo,x(t(e)("views.cluster.decaySecondsDesc")),1)]),$(V,{size:"xs",color:"primary",class:"w-full mt-2",onClick:n},{default:A(()=>[X(x(t(e)("views.cluster.applySettings")),1)]),_:1})])])]),default:A(()=>[$(V,{variant:"ghost",size:"xs",icon:"i-heroicons-adjustments-horizontal"})]),_:1}),$(V,{variant:"ghost",size:"xs",icon:"i-heroicons-arrow-path",onClick:n})])]),a("div",xo,[u.value?(i(),S("div",bo,[$(z,{name:"i-heroicons-arrow-path",class:"w-6 h-6 animate-spin text-gray-400"})])):!d.value||d.value.nodes.length===0?(i(),S("div",ko,[a("div",_o,[$(z,{name:"i-heroicons-user-group",class:"w-12 h-12 mx-auto mb-2 opacity-50"}),a("p",null,x(t(e)("views.cluster.noData")),1)])])):g.value==="matrix"?(i(),S("div",wo,[a("div",{ref_key:"chartRef",ref:y,class:"w-full h-full"},null,512)])):g.value==="member"?(i(),S("div",$o,[a("div",Io,[a("div",Co,[a("h3",So,[$(z,{name:"i-heroicons-users",class:"w-4 h-4"}),X(" "+x(t(e)("views.cluster.selectMember")),1)])]),a("div",Mo,[(i(!0),S(q,null,se(f.value,E=>(i(),S("div",{key:E.id,class:te(["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},[a("div",Do,[a("span",Ro,x(E.name),1),a("span",No,x(E.messageCount),1)])],10,To))),128))])]),a("div",Lo,[b.value?(i(),S(q,{key:1},[a("div",Eo,[a("div",Oo,x(b.value.name.charAt(0)),1),a("div",null,[a("div",zo,x(b.value.name),1),a("div",Fo,x(t(e)("views.cluster.msgCount"))+": "+x(b.value.messageCount)+" | "+x(t(e)("views.cluster.relationCount"))+": "+x(_.value.length),1)])]),a("div",Bo,[a("h3",Uo,[$(z,{name:"i-heroicons-heart",class:"w-4 h-4 text-pink-500"}),X(" "+x(t(e)("views.cluster.relationsByIntimacy")),1)])]),a("div",Ho,[_.value.length===0?(i(),S("div",Wo,x(t(e)("views.cluster.noRelations")),1)):U("",!0),(i(!0),S(q,null,se(_.value,(E,j)=>(i(),S("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"},[a("div",jo,[a("span",{class:te(["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),a("div",Po,[a("div",qo,x(E.otherName),1),a("div",Yo,[a("span",null,x(t(e)("views.cluster.intimacy"))+": "+x((E.value*100).toFixed(0))+"%",1),a("span",null,x(t(e)("views.cluster.coOccurrence"))+": "+x(E.coOccurrenceCount)+x(t(e)("views.cluster.times")),1)])]),a("div",Go,[a("div",{class:"h-full bg-linear-to-r from-pink-400 to-pink-600",style:xe({width:`${_.value[0]?.value?E.value/_.value[0].value*100:0}%`})},null,4)])])]))),128))])],64)):(i(),S("div",Vo,[a("div",Ao,[$(z,{name:"i-heroicons-cursor-arrow-rays",class:"w-12 h-12 mx-auto mb-2 opacity-50"}),a("p",null,x(t(e)("views.cluster.selectMemberHint")),1)])]))])])):(i(),S("div",Jo,[a("div",Qo,[a("h3",Ko,[$(z,{name:"i-heroicons-trophy",class:"w-4 h-4 text-yellow-500"}),X(" "+x(t(e)("views.cluster.interactionRanking")),1)])]),a("div",Xo,[(i(!0),S(q,null,se(I.value,(E,j)=>(i(),S("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"},[a("div",Zo,[a("span",{class:te(["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),a("div",er,[a("div",tr,[a("span",sr,x(E.source),1),T[5]||(T[5]=a("span",{class:"text-gray-400"},"↔",-1)),a("span",ar,x(E.target),1)]),a("div",nr,[a("span",null,x(t(e)("views.cluster.score"))+": "+x(E.value.toFixed(2)),1),a("span",null,x(t(e)("views.cluster.coOccurrence"))+": "+x(E.coOccurrenceCount)+x(t(e)("views.cluster.times")),1)])]),a("div",or,[a("div",{class:"h-full bg-linear-to-r from-yellow-400 to-orange-500",style:xe({width:`${I.value[0]?.value?E.value/I.value[0].value*100:0}%`})},null,4)])])]))),128))])]))]),d.value?(i(),S("div",rr,[a("span",null,x(t(e)("views.cluster.totalMembers"))+": "+x(d.value.stats.totalMembers),1),a("span",null,x(t(e)("views.cluster.totalMessages"))+": "+x(d.value.stats.totalMessages.toLocaleString()),1),a("span",null,x(t(e)("views.cluster.involvedMembers"))+": "+x(d.value.stats.involvedMembers),1),a("span",null,x(t(e)("views.cluster.edgeCount"))+": "+x(d.value.stats.edgeCount),1)])):U("",!0)])])}}}),lr={class:"flex h-full flex-col"},cr={class:"min-h-0 flex-1 overflow-y-auto"},dr=P({__name:"GroupRelationships",props:{sessionId:{},timeFilter:{}},setup(l){const{t:s}=ae(),e=l,o=L("mention-graph"),c=D(()=>[{id:"mention-graph",label:s("analysis.subTabs.groupRelationships.mentionGraph"),icon:"i-heroicons-arrows-right-left"},{id:"mention-ranking",label:s("analysis.subTabs.groupRelationships.mentionRanking"),icon:"i-heroicons-heart"},{id:"proximity",label:s("analysis.subTabs.groupRelationships.proximity"),icon:"i-heroicons-user-group"}]);return(u,d)=>(i(),S("div",lr,[$(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"]),a("div",cr,[$(De,{name:"fade",mode:"out-in"},{default:A(()=>[o.value==="mention-graph"?(i(),N(vn,{key:0,"session-id":e.sessionId,"time-filter":e.timeFilter},null,8,["session-id","time-filter"])):o.value==="mention-ranking"?(i(),N(Xn,{key:1,"session-id":e.sessionId,"time-filter":e.timeFilter},null,8,["session-id","time-filter"])):o.value==="proximity"?(i(),N(ir,{key:2,"session-id":e.sessionId,"time-filter":e.timeFilter},null,8,["session-id","time-filter"])):U("",!0)]),_:1})])]))}}),ur=Ne(dr,[["__scopeId","data-v-90e47115"]]),mr={class:"flex h-full flex-col"},gr={class:"flex-1 min-h-0 overflow-y-auto"},pr=P({__name:"ViewTab",props:{sessionId:{},sessionName:{},timeFilter:{}},setup(l){const{t:s,locale:e}=ae(),o=l,c=D(()=>{const p=[{id:"type-analysis",label:s("analysis.subTabs.view.typeAnalysis"),icon:"i-heroicons-chart-pie"},{id:"time-analysis",label:s("analysis.subTabs.view.timeAnalysis"),icon:"i-heroicons-clock"},{id:"topic",label:s("analysis.subTabs.view.topic"),icon:"i-heroicons-cloud"},{id:"group-relationships",label:s("analysis.subTabs.view.groupRelationships"),icon:"i-heroicons-heart"},{id:"hot-repeat",label:s("analysis.subTabs.quotes.hotRepeat"),icon:"i-heroicons-fire"},{id:"catchphrase",label:s("analysis.subTabs.quotes.catchphrase"),icon:"i-heroicons-chat-bubble-bottom-center-text"}];return pt("groupRanking",e.value)&&p.splice(2,0,{id:"ranking",label:s("analysis.subTabs.view.ranking"),icon:"i-heroicons-trophy"}),p}),u=L("type-analysis"),d=L(null),g=D(()=>({...o.timeFilter,memberId:d.value}));return(p,k)=>(i(),S("div",mr,[$(t(Ye),{modelValue:u.value,"onUpdate:modelValue":k[1]||(k[1]=y=>u.value=y),items:c.value,"persist-key":"groupViewTab"},{right:A(()=>[u.value!=="topic"?(i(),N(Ct,{key:0,modelValue:d.value,"onUpdate:modelValue":k[0]||(k[0]=y=>d.value=y),"session-id":o.sessionId},null,8,["modelValue","session-id"])):U("",!0)]),_:1},8,["modelValue","items"]),a("div",gr,[$(De,{name:"fade",mode:"out-in"},{default:A(()=>[u.value==="type-analysis"?(i(),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==="time-analysis"?(i(),N(Mt,{key:1,"session-id":o.sessionId,"session-name":o.sessionName,"time-filter":g.value},null,8,["session-id","session-name","time-filter"])):u.value==="topic"?(i(),N(t(Tt),{key:2,"session-id":o.sessionId,"time-filter":o.timeFilter},null,8,["session-id","time-filter"])):u.value==="group-relationships"?(i(),N(ur,{key:3,"session-id":o.sessionId,"time-filter":g.value},null,8,["session-id","time-filter"])):u.value==="ranking"?(i(),N(Ga,{key:4,"session-id":o.sessionId,"time-filter":g.value},null,8,["session-id","time-filter"])):u.value==="hot-repeat"?(i(),N(t(Js),{key:5,"session-id":o.sessionId,"time-filter":o.timeFilter},null,8,["session-id","time-filter"])):u.value==="catchphrase"?(i(),N(t(Ls),{key:6,"session-id":o.sessionId,"time-filter":o.timeFilter},null,8,["session-id","time-filter"])):U("",!0)]),_:1})])]))}}),hr=Ne(pr,[["__scopeId","data-v-abeebf4d"]]),vr={key:0,class:"mb-6"},fr={class:"flex items-center gap-3"},yr={class:"text-xl font-bold text-gray-900 dark:text-white"},xr={class:"text-sm text-gray-500 dark:text-gray-400"},br={class:"mb-4 flex flex-wrap items-center justify-between gap-3"},kr={class:"flex items-center gap-2"},_r={class:"text-xs text-gray-500 dark:text-gray-400"},wr={key:0,class:"flex h-60 items-center justify-center"},$r={key:1,class:"flex h-60 flex-col items-center justify-center"},Ir={class:"text-gray-500 dark:text-gray-400"},Cr={key:2,class:"flex min-h-0 flex-1 flex-col"},Sr={class:"w-full"},Mr={class:"sticky top-0 bg-gray-50 dark:bg-gray-800"},Tr={class:"text-left text-xs font-medium uppercase text-gray-500 dark:text-gray-400"},Dr={class:"px-4 py-4"},Rr={class:"px-4 py-4"},Nr={class:"px-4 py-4"},Lr={class:"w-64 px-4 py-4"},Vr={class:"inline-flex items-center gap-1.5"},Ar={class:"px-4 py-4 text-right"},Er={class:"divide-y divide-gray-200 dark:divide-gray-700"},Or={class:"px-4 py-4"},zr={class:"px-4 py-4"},Fr={class:"flex items-center gap-2"},Br=["src","alt"],Ur={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"},Hr={class:"text-sm font-medium text-gray-900 dark:text-white"},Wr={class:"ml-1 text-sm text-gray-500 dark:text-gray-400"},jr={class:"px-4 py-4"},Pr={key:0,class:"text-sm font-medium text-gray-900 dark:text-white"},qr={key:1,class:"text-sm text-gray-400 dark:text-gray-500"},Yr={class:"px-4 py-4"},Gr={class:"text-sm font-semibold text-gray-900 dark:text-white"},Jr={class:"px-4 py-4"},Qr={class:"max-w-xs"},Kr={key:0,class:"absolute right-2 top-1/2 -translate-y-1/2"},Xr={class:"px-4 py-4 text-right"},Zr={key:0,class:"flex items-center justify-between border-t border-gray-200 px-6 py-4 dark:border-gray-700"},ei={class:"text-sm text-gray-500 dark:text-gray-400"},ti={class:"flex items-center gap-2"},si={class:"text-sm font-medium text-gray-600 dark:text-gray-300"},ai={class:"p-6 text-center"},ni={class:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/30"},oi={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},ri={class:"mb-6 text-sm text-gray-500 dark:text-gray-400"},ii={class:"flex justify-center gap-3"},li={class:"p-6"},ci={class:"mb-4 flex items-center gap-3"},di={class:"flex h-10 w-10 items-center justify-center rounded-full bg-amber-100 dark:bg-amber-900/30"},ui={class:"text-lg font-semibold text-gray-900 dark:text-white"},mi={class:"mb-2 text-sm text-gray-600 dark:text-gray-400"},gi={class:"mb-6 text-xs text-amber-700 dark:text-amber-300"},pi={class:"flex justify-end gap-2"},Ce=20,hi=P({__name:"MemberList",props:{sessionId:{},showHeader:{type:Boolean,default:!0}},emits:["data-changed"],setup(l,{emit:s}){const{t:e}=ae(),o=l,c=s,u=L([]),d=L([]),g=L(!1),p=L(""),k=L(null),y=L(!1),m=L(new Set),n=L(!1),r=L(!1),h=L(1),f=L(0),b=L(0),_=L("desc"),I=L(null);let v=null;function C(F){return F.groupNickname||F.accountName||F.platformId}function w(F){return C(F).slice(0,1)}const M=D(()=>d.value.filter(F=>m.value.has(F.id))),T=D(()=>M.value.length===2),V=D(()=>{if(M.value.length!==2)return null;const[F,B]=M.value;return B.messageCount>F.messageCount||B.messageCount===F.messageCount&&B.id<F.id?{primary:B,secondary:F}:{primary:F,secondary:B}});function W(){_.value=_.value==="desc"?"asc":"desc",h.value=1,H()}async function H(){if(o.sessionId){g.value=!0;try{const F=await G().getMembersPaginated(o.sessionId,{page:h.value,pageSize:Ce,search:p.value.trim(),sortOrder:_.value});u.value=F.items,f.value=F.total,b.value=F.totalPages}catch(F){console.error("加载成员列表失败:",F)}finally{g.value=!1}}}async function R(){if(o.sessionId)try{d.value=await G().getMembers(o.sessionId)}catch(F){console.error("加载所有成员失败:",F)}}async function z(F,B){const O=JSON.parse(JSON.stringify(B)),fe=JSON.stringify(F.aliases),ie=JSON.stringify(O);if(fe!==ie){I.value=F.id;try{if(await G().updateMemberAliases(o.sessionId,F.id,O)){const ye=u.value.findIndex(we=>we.id===F.id);ye!==-1&&(u.value[ye]={...u.value[ye],aliases:O})}}catch(Y){console.error("保存别名失败:",Y)}finally{I.value=null}}}function E(F){k.value=F}function j(){k.value=null}async function Z(){if(k.value){y.value=!0;try{await G().deleteMember(o.sessionId,k.value.id)&&(await H(),await R(),c("data-changed"))}catch(F){console.error("删除成员失败:",F)}finally{y.value=!1,k.value=null}}}function ee(F){const B=new Set(m.value);B.has(F)?B.delete(F):B.add(F),m.value=B}function le(){T.value&&(n.value=!0)}function re(){m.value=new Set}async function ue(){if(V.value){r.value=!0;try{await G().mergeMembers(o.sessionId,V.value.primary.id,V.value.secondary.id)&&(n.value=!1,re(),await H(),await R(),c("data-changed"))}catch(F){console.error("合并成员失败:",F)}finally{r.value=!1}}}return J(p,()=>{h.value=1,v&&clearTimeout(v),v=setTimeout(()=>{H()},300)}),J(h,()=>{H()}),J(()=>o.sessionId,()=>{p.value="",h.value=1,re(),H(),R()},{immediate:!0}),ke(()=>{H(),R()}),(F,B)=>{const O=ge,fe=Ue,ie=Me,Y=ot,ye=rt,we=it,Le=be;return i(),S("div",{class:te(["main-content",o.showHeader?"max-w-5xl p-6":"flex h-full max-w-none flex-col overflow-hidden p-4"])},[o.showHeader?(i(),S("div",vr,[a("div",fr,[a("div",null,[a("h2",yr,x(t(e)("members.list.title")),1),a("p",xr,x(t(e)("members.list.description",{count:f.value})),1)])])])):U("",!0),$(Dt,{class:"mb-6","session-id":l.sessionId,members:d.value,"chat-type":"group"},null,8,["session-id","members"]),a("div",br,[$(fe,{modelValue:p.value,"onUpdate:modelValue":B[1]||(B[1]=Q=>p.value=Q),placeholder:t(e)("members.list.searchPlaceholder"),icon:"i-heroicons-magnifying-glass",class:"w-full md:w-100"},Pe({_:2},[p.value?{name:"trailing",fn:A(()=>[$(O,{icon:"i-heroicons-x-mark",variant:"link",color:"neutral",size:"xs",onClick:B[0]||(B[0]=Q=>p.value="")})]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),a("div",kr,[a("span",_r,x(t(e)("members.list.mergeSelectedCount",{count:m.value.size})),1),$(O,{icon:"i-heroicons-link",size:"sm",color:"primary",disabled:!T.value,onClick:le},{default:A(()=>[X(x(t(e)("members.list.mergeSelected")),1)]),_:1},8,["disabled"])])]),a("div",{class:te(["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?(i(),S("div",wr,[$(ie,{name:"i-heroicons-arrow-path",class:"h-8 w-8 animate-spin text-pink-500"})])):u.value.length===0?(i(),S("div",$r,[$(ie,{name:"i-heroicons-user-group",class:"mb-3 h-12 w-12 text-gray-300 dark:text-gray-600"}),a("p",Ir,x(p.value?t(e)("members.list.noMatch"):t(e)("members.list.empty")),1)])):(i(),S("div",Cr,[a("div",{class:te(["max-h-[500px] overflow-y-auto",o.showHeader?"":"max-h-none min-h-0 flex-1"])},[a("table",Sr,[a("thead",Mr,[a("tr",Tr,[B[7]||(B[7]=a("th",{class:"w-12 px-4 py-4"},null,-1)),a("th",Dr,x(t(e)("members.list.table.accountName")),1),a("th",Rr,x(t(e)("members.list.table.groupNickname")),1),a("th",Nr,[a("button",{class:"flex items-center gap-1.5 hover:text-gray-700 dark:hover:text-gray-200",onClick:W},[X(x(t(e)("members.list.table.messageCount"))+" ",1),$(ie,{name:_.value==="desc"?"i-heroicons-arrow-down":"i-heroicons-arrow-up",class:"h-3.5 w-3.5"},null,8,["name"])])]),a("th",Lr,[a("div",Vr,[a("span",null,x(t(e)("members.list.table.customAlias")),1),$(Y,{text:t(e)("members.list.tip"),popper:{placement:"top"}},{default:A(()=>[$(ie,{name:"i-heroicons-question-mark-circle",class:"h-4 w-4 text-gray-400 dark:text-gray-500"})]),_:1},8,["text"])])]),a("th",Ar,x(t(e)("members.list.table.actions")),1)])]),a("tbody",Er,[(i(!0),S(q,null,se(u.value,Q=>(i(),S("tr",{key:Q.id,class:"hover:bg-gray-50 dark:hover:bg-gray-800/50"},[a("td",Or,[$(ye,{"model-value":m.value.has(Q.id),onClick:je($e=>ee(Q.id),["stop"])},null,8,["model-value","onClick"])]),a("td",zr,[a("div",Fr,[Q.avatar?(i(),S("img",{key:0,src:Q.avatar,alt:C(Q),class:"h-8 w-8 shrink-0 rounded-full object-cover"},null,8,Br)):(i(),S("div",Ur,x(w(Q)),1)),a("div",null,[a("span",Hr,x(Q.accountName||"-"),1),a("span",Wr,"("+x(Q.platformId)+")",1)])])]),a("td",jr,[Q.groupNickname?(i(),S("span",Pr,x(Q.groupNickname),1)):(i(),S("span",qr,"-"))]),a("td",Yr,[a("span",Gr,x(Q.messageCount.toLocaleString()),1)]),a("td",Jr,[a("div",Qr,[$(we,{"model-value":Q.aliases,placeholder:t(e)("members.list.aliasPlaceholder"),class:"w-80","onUpdate:modelValue":$e=>z(Q,$e)},null,8,["model-value","placeholder","onUpdate:modelValue"]),I.value===Q.id?(i(),S("div",Kr,[$(ie,{name:"i-heroicons-arrow-path",class:"h-4 w-4 animate-spin text-pink-500"})])):U("",!0)])]),a("td",Xr,[$(O,{label:t(e)("members.list.delete"),size:"xs",onClick:$e=>E(Q)},null,8,["label","onClick"])])]))),128))])])],2),b.value>1?(i(),S("div",Zr,[a("p",ei,x(t(e)("members.list.pagination",{start:(h.value-1)*Ce+1,end:Math.min(h.value*Ce,f.value),total:f.value})),1),a("div",ti,[$(O,{icon:"i-heroicons-chevron-left",variant:"outline",size:"sm",disabled:h.value===1||g.value,onClick:B[2]||(B[2]=Q=>h.value--)},null,8,["disabled"]),a("span",si,x(h.value)+" / "+x(b.value),1),$(O,{icon:"i-heroicons-chevron-right",variant:"outline",size:"sm",disabled:h.value>=b.value||g.value,onClick:B[3]||(B[3]=Q=>h.value++)},null,8,["disabled"])])])):U("",!0)]))],2),$(Le,{open:!!k.value,ui:{content:"max-w-sm"},"onUpdate:open":B[4]||(B[4]=Q=>k.value=null)},{content:A(()=>[a("div",ai,[a("div",ni,[$(ie,{name:"i-heroicons-exclamation-triangle",class:"h-7 w-7 text-red-500"})]),a("h3",oi,x(t(e)("members.list.modal.title")),1),a("p",ri,x(t(e)("members.list.modal.content",{name:k.value?C(k.value):"",count:k.value?.messageCount.toLocaleString()})),1),a("div",ii,[$(O,{variant:"outline",onClick:j},{default:A(()=>[X(x(t(e)("members.list.modal.cancel")),1)]),_:1}),$(O,{color:"error",loading:y.value,onClick:Z},{default:A(()=>[X(x(t(e)("members.list.modal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"]),$(Le,{open:n.value,ui:{content:"max-w-md"},"onUpdate:open":B[6]||(B[6]=Q=>n.value=Q)},{content:A(()=>[a("div",li,[a("div",ci,[a("div",di,[$(ie,{name:"i-heroicons-link",class:"h-5 w-5 text-amber-600 dark:text-amber-400"})]),a("h3",ui,x(t(e)("members.list.mergeModal.title")),1)]),a("p",mi,x(t(e)("members.list.mergeModal.content",{source:V.value?C(V.value.secondary):"",sourceCount:V.value?V.value.secondary.messageCount.toLocaleString():"0",target:V.value?C(V.value.primary):"",targetCount:V.value?V.value.primary.messageCount.toLocaleString():"0"})),1),a("p",gi,x(t(e)("members.list.mergeModal.hint")),1),a("div",pi,[$(O,{variant:"outline",disabled:r.value,onClick:B[5]||(B[5]=Q=>n.value=!1)},{default:A(()=>[X(x(t(e)("members.list.mergeModal.cancel")),1)]),_:1},8,["disabled"]),$(O,{color:"primary",loading:r.value,onClick:ue},{default:A(()=>[X(x(t(e)("members.list.mergeModal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"])],2)}}}),vi={class:"main-content max-w-5xl p-6"},fi={class:"mb-4 text-sm text-gray-500 dark:text-gray-400 no-capture"},yi={key:0,class:"divide-y divide-gray-100 dark:divide-gray-800"},xi={class:"w-32 shrink-0 pt-0.5 font-medium text-gray-900 dark:text-white"},bi={class:"flex flex-1 flex-wrap items-center gap-2"},ki={class:"flex items-center gap-1.5 rounded-lg bg-gray-50 px-3 py-1.5 dark:bg-gray-800"},_i={class:"text-xs text-gray-400"},wi={key:0,class:"text-gray-300 dark:text-gray-600"},$i=P({__name:"NicknameHistory",props:{sessionId:{}},setup(l){const{t:s}=ae(),e=l,o=L([]),c=L([]),u=L(!1);function d(k){return k.groupNickname||k.accountName||k.platformId}async function g(){if(e.sessionId)try{o.value=await G().getMembers(e.sessionId)}catch(k){console.error("加载成员列表失败:",k)}}async function p(){if(!e.sessionId||o.value.length===0)return;u.value=!0;const k=[];try{const y=o.value.map(n=>G().getMemberNameHistory(e.sessionId,n.id)),m=await Promise.all(y);o.value.forEach((n,r)=>{const h=m[r];h.length>2&&k.push({memberId:n.id,name:d(n),history:h})}),c.value=k}catch(y){console.error("加载昵称变更记录失败:",y)}finally{u.value=!1}}return J(()=>e.sessionId,async()=>{await g()},{immediate:!0}),J(()=>o.value.length,()=>{o.value.length>0&&p()}),ke(async()=>{o.value.length===0&&await g()}),(k,y)=>{const m=Be;return i(),S("div",vi,[a("p",fi,x(t(s)("members.nicknameHistory.note")),1),$(t(K),{title:t(s)("members.nicknameHistory.title"),description:u.value?t(s)("members.nicknameHistory.loading"):c.value.length>0?t(s)("members.nicknameHistory.hasChanges",{count:c.value.length}):t(s)("members.nicknameHistory.noChanges")},{default:A(()=>[!u.value&&c.value.length>0?(i(),S("div",yi,[(i(!0),S(q,null,se(c.value,n=>(i(),S("div",{key:n.memberId,class:"flex items-start gap-3 px-5 py-3"},[a("div",xi,x(n.name),1),a("div",bi,[(i(!0),S(q,null,se(n.history,(r,h)=>(i(),S(q,{key:h},[a("div",ki,[a("span",{class:te(["text-sm",r.endTs===null?"font-semibold text-pink-600":"text-gray-700 dark:text-gray-300"])},x(r.name),3),r.endTs===null?(i(),N(m,{key:0,color:"primary",variant:"soft",size:"xs"},{default:A(()=>[X(x(t(s)("members.nicknameHistory.current")),1)]),_:1})):U("",!0),a("span",_i,"("+x(t(Rt)(r.startTs,r.endTs))+")",1)]),h<n.history.length-1?(i(),S("span",wi,"→")):U("",!0)],64))),128))])]))),128))])):u.value?(i(),N(t(oe),{key:2,text:t(s)("members.nicknameHistory.loadingText")},null,8,["text"])):(i(),N(t(ce),{key:1,text:t(s)("members.nicknameHistory.empty")},null,8,["text"]))]),_:1},8,["title","description"])])}}}),Ii={class:"flex h-full flex-col overflow-hidden bg-white dark:bg-gray-900"},Ci={class:"flex flex-none items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"},Si={class:"text-lg font-semibold text-gray-900 dark:text-white"},Mi={class:"flex-1 overflow-auto"},Ti=P({__name:"NicknameHistoryEntry",props:{sessionId:{}},setup(l){const{t:s}=ae(),e=l,o=L(!1);return(c,u)=>{const d=ge,g=be;return i(),S(q,null,[$(d,{variant:"ghost",icon:"i-heroicons-clock",size:"sm",onClick:u[0]||(u[0]=p=>o.value=!0)},{default:A(()=>[X(x(t(s)("analysis.subTabs.member.nicknameHistory")),1)]),_:1}),e.sessionId?(i(),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:A(()=>[a("div",Ii,[a("div",Ci,[a("h2",Si,x(t(s)("analysis.subTabs.member.nicknameHistory")),1),$(d,{variant:"ghost",icon:"i-heroicons-x-mark",size:"sm",onClick:u[1]||(u[1]=p=>o.value=!1)})]),a("div",Mi,[$($i,{"session-id":e.sessionId},null,8,["session-id"])])])]),_:1},8,["open"])):U("",!0)],64)}}}),Di={class:"flex h-full flex-col bg-white dark:bg-gray-900",style:{"padding-top":"var(--titlebar-area-height)"}},Ri={class:"relative flex-1 overflow-y-auto"},Ni={class:"h-full"},Li={key:2,class:"flex h-full items-center justify-center"},Vi={class:"text-gray-500"},Ai={class:"flex h-full flex-col overflow-hidden bg-white dark:bg-gray-900"},Ei={class:"flex flex-none items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"},Oi={class:"text-lg font-semibold text-gray-900 dark:text-white"},zi={class:"text-sm text-gray-500 dark:text-gray-400"},Fi={class:"flex items-center gap-2"},Bi={class:"flex-1 overflow-hidden"},Ui=P({__name:"index",setup(l){const s=We(()=>Fe(()=>import("./MessageExportModal-ttP_JPqO.js"),__vite__mapDeps([5,6,4,7,8,9]))),{t:e}=ae(),o=lt(),c=ct(),u=ht(),d=Re(),g=vt(),{currentSessionId:p}=ft(u),k=L(!1),y=L(!1),m=L(!1),n=L(!1),r=L(!1);function h(){d.openChatRecordDrawer({})}const f=[{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"}],b=D(()=>g.debugMode?[...f,{id:"debug",labelKey:"analysis.tabs.debug",icon:"i-heroicons-bug-ant"}]:f),_=D(()=>b.value.map(B=>B.id)),{activeTab:I,isLoading:v,isInitialLoad:C,session:w,memberActivity:M,hourlyActivity:T,dailyActivity:V,messageTypes:W,timeRangeValue:H,fullTimeRange:R,availableYears:z,timeFilter:E,selectedYearForOverview:j,initialTimeState:Z,loadData:ee}=Nt({route:o,router:c,currentSessionId:p,selectSession:u.selectSession,defaultTab:g.defaultSessionTab,validTabIds:_.value}),le=D(()=>M.value.slice(0,3)),re=D(()=>M.value.length<=1?[]:[...M.value].sort((B,O)=>B.messageCount-O.messageCount).slice(0,1)),ue=D(()=>M.value.reduce((B,O)=>B+O.messageCount,0)),F=D(()=>M.value.filter(B=>B.messageCount>0).length);return(B,O)=>{const fe=ge,ie=be;return i(),S("div",Di,[t(C)?(i(),N(oe,{key:0,variant:"page",text:t(e)("analysis.groupChat.loading")},null,8,["text"])):t(w)?(i(),S(q,{key:1},[$(Lt,{"active-tab":t(I),"onUpdate:activeTab":O[0]||(O[0]=Y=>Ve(I)?I.value=Y:null),"time-range-value":t(H),"onUpdate:timeRangeValue":O[1]||(O[1]=Y=>Ve(H)?H.value=Y:null),title:t(w).name,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",tabs:b.value,"current-session-id":t(p),"initial-time-state":t(Z),onOpenIncrementalImport:O[2]||(O[2]=Y=>m.value=!0),onOpenMemberManagement:O[3]||(O[3]=Y=>r.value=!0),onOpenChatRecord:h,"onUpdate:fullRange":O[4]||(O[4]=Y=>R.value=Y),"onUpdate:availableYears":O[5]||(O[5]=Y=>z.value=Y)},null,8,["active-tab","time-range-value","title","avatar","tabs","current-session-id","initial-time-state"]),a("div",Ri,[t(v)?(i(),N(oe,{key:0,variant:"overlay"})):U("",!0),a("div",Ni,[$(De,{name:"tab-slide",mode:"out-in"},{default:A(()=>[t(I)==="overview"?(i(),N(ea,{key:"overview-"+t(p),session:t(w),"member-activity":t(M),"top-members":le.value,"bottom-members":re.value,"message-types":t(W),"hourly-activity":t(T),"daily-activity":t(V),"time-range":t(R),"selected-year":t(j),"filtered-message-count":ue.value,"filtered-member-count":F.value,"time-filter":t(E)},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(I)==="view"?(i(),N(hr,{key:"view-"+t(p),"session-id":t(p),"session-name":t(w).name,"time-filter":t(E)},null,8,["session-id","session-name","time-filter"])):t(I)==="ai-chat"?(i(),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(I)==="memory"?(i(),N(Ft,{key:"memory-"+t(p),"session-id":t(p),"session-name":t(w).name},null,8,["session-id","session-name"])):t(I)==="lab"?(i(),N(Bt,{key:"lab-"+t(p),"session-id":t(p),"session-name":t(w).name,"time-filter":t(E),"chat-type":"group",mode:"sql-only"},null,8,["session-id","session-name","time-filter"])):t(I)==="debug"?(i(),N(t(Ut),{key:"debug-"+t(p),"session-id":t(p)},null,8,["session-id"])):U("",!0)]),_:1})])]),$(Vt,{onOpenIncrementalImport:O[6]||(O[6]=Y=>m.value=!0),onOpenSessionIndex:O[7]||(O[7]=Y=>k.value=!0),onOpenMemberManagement:O[8]||(O[8]=Y=>r.value=!0),onOpenChatRecord:h,onOpenMessageExport:O[9]||(O[9]=Y=>n.value=!0)}),t(g).debugMode?(i(),N(Ht,{key:0})):U("",!0)],64)):(i(),S("div",Li,[a("p",Vi,x(t(e)("analysis.groupChat.loadError")),1)])),t(p)&&t(w)&&t(w).messageCount>0?(i(),N(At,{key:3,modelValue:k.value,"onUpdate:modelValue":O[10]||(O[10]=Y=>k.value=Y),"session-id":t(p),"message-count":t(w).messageCount},null,8,["modelValue","session-id","message-count"])):U("",!0),t(p)&&t(w)&&!k.value?(i(),N(Et,{key:4,modelValue:y.value,"onUpdate:modelValue":O[11]||(O[11]=Y=>y.value=Y),"session-id":t(p),"chat-type":"group","auto-check":""},null,8,["modelValue","session-id"])):U("",!0),t(p)&&t(w)?(i(),N(Ot,{key:5,modelValue:m.value,"onUpdate:modelValue":O[12]||(O[12]=Y=>m.value=Y),"session-id":t(p),"session-name":t(w).name,onImported:O[13]||(O[13]=()=>{t(ee)(),t(u).loadSessions()})},null,8,["modelValue","session-id","session-name"])):U("",!0),t(p)?(i(),N(t(s),{key:6,modelValue:n.value,"onUpdate:modelValue":O[14]||(O[14]=Y=>n.value=Y)},null,8,["modelValue"])):U("",!0),t(p)?(i(),N(ie,{key:7,open:r.value,"onUpdate:open":O[16]||(O[16]=Y=>r.value=Y),ui:{content:"max-w-6xl h-[85vh]"}},{content:A(()=>[a("div",Ai,[a("div",Ei,[a("div",null,[a("h2",Oi,x(t(e)("analysis.tooltip.memberManagement")),1),a("p",zi,x(t(e)("members.list.description",{count:t(w)?.memberCount??0})),1)]),a("div",Fi,[$(Ti,{"session-id":t(p)},null,8,["session-id"]),$(fe,{variant:"ghost",icon:"i-heroicons-x-mark",size:"sm",onClick:O[15]||(O[15]=Y=>r.value=!1)})])]),a("div",Bi,[$(hi,{"session-id":t(p),"show-header":!1,onDataChanged:t(ee)},null,8,["session-id","onDataChanged"])])])]),_:1},8,["open"])):U("",!0)])}}}),Ki=Ne(Ui,[["__scopeId","data-v-1452caf7"]]);export{Ki as default};
@@ -1 +1 @@
1
- import{C,n as B,b as N,d as $,u as I,e as L}from"./vendor-nuxt-ui-Zy8txNdC.js";import{p as R,b as c,P as _,a5 as o,T as r,u as s,a9 as S,L as i,K as x,U as h,G as g,R as D}from"./vendor-reka-ui-mMvma1EP.js";import{u as W,a as z}from"./index-DqDa_on9.js";import"./vendor-snapdom-XnBoh1gd.js";const A={class:"flex min-h-screen items-center justify-center bg-gray-50 dark:bg-gray-900"},E={class:"w-full max-w-sm space-y-6 rounded-xl bg-white p-8 shadow-lg dark:bg-gray-800"},F={class:"text-center"},M={class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},P={key:0,class:"text-sm text-red-500"},T={class:"flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400"},j={class:"text-center text-xs text-gray-400 dark:text-gray-500"},q={key:0,class:"text-center text-xs text-amber-500 dark:text-amber-400"},Q=R({__name:"index",setup(G){const{t:e}=W(),v=$(),y=I(),f=z(),m=c(""),l=c(f.rememberDevice),n=c(""),u=c(!1);function b(t){return!t||!t.startsWith("/")||t.startsWith("/login")?"/":t}async function k(){const t=m.value.trim();if(!t){n.value=e("common.login.errorEmpty");return}u.value=!0,n.value="";try{if(!(await fetch("/api/v1/status",{headers:{Authorization:`Bearer ${t}`}})).ok){n.value=e("common.login.errorInvalid");return}f.login(t,l.value);const d=b(y.query.redirect);v.replace(d)}catch{n.value=e("common.login.errorNetwork")}finally{u.value=!1}}return(t,a)=>{const d=L,V=C,w=B,U=N;return g(),_("div",A,[o("div",E,[o("div",F,[a[2]||(a[2]=o("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"ChatLab",-1)),o("p",M,r(s(e)("common.login.description")),1)]),o("form",{class:"space-y-4",onSubmit:S(k,["prevent"])},[i(V,{label:s(e)("common.login.tokenLabel")},{default:x(()=>[i(d,{modelValue:m.value,"onUpdate:modelValue":a[0]||(a[0]=p=>m.value=p),type:"password",placeholder:s(e)("common.login.tokenPlaceholder"),autocomplete:"off",class:"w-full"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),n.value?(g(),_("p",P,r(n.value),1)):h("",!0),o("label",T,[i(w,{modelValue:l.value,"onUpdate:modelValue":a[1]||(a[1]=p=>l.value=p)},null,8,["modelValue"]),o("span",null,r(s(e)("common.login.rememberDevice")),1)]),i(U,{type:"submit",block:"",loading:u.value,color:"primary"},{default:x(()=>[D(r(s(e)("common.login.submit")),1)]),_:1},8,["loading"])],32),o("p",j,r(s(e)("common.login.hint")),1),l.value?(g(),_("p",q,r(s(e)("common.login.rememberWarning")),1)):h("",!0)])])}}});export{Q as default};
1
+ import{C,n as B,b as N,d as $,u as I,e as L}from"./vendor-nuxt-ui-Zy8txNdC.js";import{p as R,b as c,P as _,a5 as o,T as r,u as s,a9 as S,L as i,K as x,U as h,G as g,R as D}from"./vendor-reka-ui-mMvma1EP.js";import{u as W,a as z}from"./index-m7v4PP7r.js";import"./vendor-snapdom-XnBoh1gd.js";const A={class:"flex min-h-screen items-center justify-center bg-gray-50 dark:bg-gray-900"},E={class:"w-full max-w-sm space-y-6 rounded-xl bg-white p-8 shadow-lg dark:bg-gray-800"},F={class:"text-center"},M={class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},P={key:0,class:"text-sm text-red-500"},T={class:"flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400"},j={class:"text-center text-xs text-gray-400 dark:text-gray-500"},q={key:0,class:"text-center text-xs text-amber-500 dark:text-amber-400"},Q=R({__name:"index",setup(G){const{t:e}=W(),v=$(),y=I(),f=z(),m=c(""),l=c(f.rememberDevice),n=c(""),u=c(!1);function b(t){return!t||!t.startsWith("/")||t.startsWith("/login")?"/":t}async function k(){const t=m.value.trim();if(!t){n.value=e("common.login.errorEmpty");return}u.value=!0,n.value="";try{if(!(await fetch("/api/v1/status",{headers:{Authorization:`Bearer ${t}`}})).ok){n.value=e("common.login.errorInvalid");return}f.login(t,l.value);const d=b(y.query.redirect);v.replace(d)}catch{n.value=e("common.login.errorNetwork")}finally{u.value=!1}}return(t,a)=>{const d=L,V=C,w=B,U=N;return g(),_("div",A,[o("div",E,[o("div",F,[a[2]||(a[2]=o("h1",{class:"text-2xl font-bold text-gray-900 dark:text-white"},"ChatLab",-1)),o("p",M,r(s(e)("common.login.description")),1)]),o("form",{class:"space-y-4",onSubmit:S(k,["prevent"])},[i(V,{label:s(e)("common.login.tokenLabel")},{default:x(()=>[i(d,{modelValue:m.value,"onUpdate:modelValue":a[0]||(a[0]=p=>m.value=p),type:"password",placeholder:s(e)("common.login.tokenPlaceholder"),autocomplete:"off",class:"w-full"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),n.value?(g(),_("p",P,r(n.value),1)):h("",!0),o("label",T,[i(w,{modelValue:l.value,"onUpdate:modelValue":a[1]||(a[1]=p=>l.value=p)},null,8,["modelValue"]),o("span",null,r(s(e)("common.login.rememberDevice")),1)]),i(U,{type:"submit",block:"",loading:u.value,color:"primary"},{default:x(()=>[D(r(s(e)("common.login.submit")),1)]),_:1},8,["loading"])],32),o("p",j,r(s(e)("common.login.hint")),1),l.value?(g(),_("p",q,r(s(e)("common.login.rememberWarning")),1)):h("",!0)])])}}});export{Q as default};
@@ -0,0 +1 @@
1
+ .fade-enter-active[data-v-6d591d2c],.fade-leave-active[data-v-6d591d2c]{transition:opacity .15s ease}.fade-enter-from[data-v-6d591d2c],.fade-leave-to[data-v-6d591d2c]{opacity:0}.tab-slide-enter-active[data-v-daf8ed15],.tab-slide-leave-active[data-v-daf8ed15]{transition:opacity .2s ease,transform .2s ease}.tab-slide-enter-from[data-v-daf8ed15]{opacity:0;transform:translateY(10px)}.tab-slide-leave-to[data-v-daf8ed15]{opacity:0;transform:translateY(-10px)}
@@ -1 +1 @@
1
- .fade-enter-active[data-v-90e47115],.fade-leave-active[data-v-90e47115]{transition:opacity .15s ease}.fade-enter-from[data-v-90e47115],.fade-leave-to[data-v-90e47115]{opacity:0}.fade-enter-active[data-v-abeebf4d],.fade-leave-active[data-v-abeebf4d]{transition:opacity .15s ease}.fade-enter-from[data-v-abeebf4d],.fade-leave-to[data-v-abeebf4d]{opacity:0}.tab-slide-enter-active[data-v-6ad95a6f],.tab-slide-leave-active[data-v-6ad95a6f]{transition:opacity .2s ease,transform .2s ease}.tab-slide-enter-from[data-v-6ad95a6f]{opacity:0;transform:translateY(10px)}.tab-slide-leave-to[data-v-6ad95a6f]{opacity:0;transform:translateY(-10px)}
1
+ .fade-enter-active[data-v-90e47115],.fade-leave-active[data-v-90e47115]{transition:opacity .15s ease}.fade-enter-from[data-v-90e47115],.fade-leave-to[data-v-90e47115]{opacity:0}.fade-enter-active[data-v-abeebf4d],.fade-leave-active[data-v-abeebf4d]{transition:opacity .15s ease}.fade-enter-from[data-v-abeebf4d],.fade-leave-to[data-v-abeebf4d]{opacity:0}.tab-slide-enter-active[data-v-1452caf7],.tab-slide-leave-active[data-v-1452caf7]{transition:opacity .2s ease,transform .2s ease}.tab-slide-enter-from[data-v-1452caf7]{opacity:0;transform:translateY(10px)}.tab-slide-leave-to[data-v-1452caf7]{opacity:0;transform:translateY(-10px)}