aitu-app 0.6.65 → 0.6.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/assets/{CanvasAudioPlayer-6l1I5Lqd.js → CanvasAudioPlayer-DehstSKa.js} +1 -1
- package/assets/{ChatDrawer-DbZTxU-f.js → ChatDrawer-BjUZR3Ue.js} +2 -2
- package/assets/{ChatMessagesArea-7lBnHy3Q.js → ChatMessagesArea-CHN35Bt6.js} +2 -2
- package/assets/{DeferredAIInputBar-PLctvL0R.js → DeferredAIInputBar-C6ENqLwa.js} +2 -2
- package/assets/{DrawnixDeferredFeatures-DXh8gpt8.js → DrawnixDeferredFeatures-BYL_ERsh.js} +1 -1
- package/assets/{KnowledgeBaseContent-CdEhjgBI.js → KnowledgeBaseContent-BwGY_qsu.js} +3 -3
- package/assets/{MVCreator-B86ODho9.js → MVCreator-DJkJsQuX.js} +1 -1
- package/assets/{ModelBenchmarkWorkbench-DIHvV_DH.js → ModelBenchmarkWorkbench-CkXsdob8.js} +1 -1
- package/assets/{ModelDropdown-DXdFoWuh.js → ModelDropdown-DpI44I0p.js} +1 -1
- package/assets/{MusicAnalyzer-Ba8Gn2q4.js → MusicAnalyzer-BaYRTMMG.js} +1 -1
- package/assets/{MusicAnalyzer-DkgrnbK5.js → MusicAnalyzer-C2j9LDif.js} +1 -1
- package/assets/{ResizableDivider-TXo-USgj.js → ResizableDivider-BATl1sGS.js} +1 -1
- package/assets/{TaskQueuePanel-a1ceEkkd.js → TaskQueuePanel-ZJX0CDL6.js} +1 -1
- package/assets/{VideoAnalyzer-_Cokr0CY.js → VideoAnalyzer-WPFOUMu7.js} +1 -1
- package/assets/{ai-generation-preferences-service-DdO9WJV_.js → ai-generation-preferences-service-MDhEmT94.js} +1 -1
- package/assets/{arc-BfRSg5KI.js → arc-D0E8dDvV.js} +1 -1
- package/assets/{arc-IQz2CQv5.js → arc-DSuKU8Cn.js} +1 -1
- package/assets/{batch-image-generation-Ddl_vYG-.js → batch-image-generation-DAD4V5fA.js} +1 -1
- package/assets/{blockDiagram-38ab4fdb-D6OrlC8Z.js → blockDiagram-38ab4fdb-D6mNUW-x.js} +1 -1
- package/assets/{blockDiagram-38ab4fdb-ZE1WCNLb.js → blockDiagram-38ab4fdb-nWFzncGz.js} +1 -1
- package/assets/{browser-DgoP18Ce.js → browser-DpqKW_QY.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-7h9oaCbH.js → c4Diagram-3d4e48cf-B5u5Kjaz.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-Dv5HBI95.js → c4Diagram-3d4e48cf-CcCJ_F4i.js} +1 -1
- package/assets/{canvas-insertion-C4rNVYF7.js → canvas-insertion-BF1cov5E.js} +1 -1
- package/assets/channel-B-y22R1O.js +1 -0
- package/assets/channel-CYnC4CUY.js +1 -0
- package/assets/{classDiagram-70f12bd4-Cp9arv3R.js → classDiagram-70f12bd4-CYPkzlJ8.js} +1 -1
- package/assets/{classDiagram-70f12bd4-C4B0AJIf.js → classDiagram-70f12bd4-Cf8mSq5b.js} +1 -1
- package/assets/{classDiagram-v2-f2320105-DIRy9QeW.js → classDiagram-v2-f2320105-C0hyfd3v.js} +1 -1
- package/assets/{classDiagram-v2-f2320105-Cs-sapdX.js → classDiagram-v2-f2320105-DmggKKc-.js} +1 -1
- package/assets/{clipper-DP_O7Yft.js → clipper-BmThH3aG.js} +1 -1
- package/assets/clone-BuI525yo.js +1 -0
- package/assets/{createText-2e5e7dd3-BYKBZPU4.js → createText-2e5e7dd3-Cox-BB0L.js} +1 -1
- package/assets/{createText-2e5e7dd3-kuOWgidv.js → createText-2e5e7dd3-vP_23WJo.js} +1 -1
- package/assets/{edges-e0da2a9e-C7YGVJx_.js → edges-e0da2a9e-D74nlZE2.js} +1 -1
- package/assets/{edges-e0da2a9e-MPMUB2v9.js → edges-e0da2a9e-WVzLV7hZ.js} +1 -1
- package/assets/{erDiagram-9861fffd-9zikM2Di.js → erDiagram-9861fffd-BzX6gc0Q.js} +1 -1
- package/assets/{erDiagram-9861fffd-CfmNiDLl.js → erDiagram-9861fffd-CZHVuNma.js} +1 -1
- package/assets/{flowDb-956e92f1-DXu56JhR.js → flowDb-956e92f1-qlrwenZX.js} +1 -1
- package/assets/{flowDb-956e92f1-BKsMxZKt.js → flowDb-956e92f1-vimC-tGu.js} +1 -1
- package/assets/{flowDiagram-66a62f08-DyT62Jz6.js → flowDiagram-66a62f08-BDjjSlH9.js} +1 -1
- package/assets/{flowDiagram-66a62f08-DuvPyZE3.js → flowDiagram-66a62f08-BlW7YW3z.js} +1 -1
- package/assets/flowDiagram-v2-96b9c2cf-CsjN9JiQ.js +1 -0
- package/assets/flowDiagram-v2-96b9c2cf-DtHWej6J.js +1 -0
- package/assets/{flowchart-elk-definition-4a651766-BV3wFAUW.js → flowchart-elk-definition-4a651766-B0shgjzP.js} +1 -1
- package/assets/{flowchart-elk-definition-4a651766-DBELl1nj.js → flowchart-elk-definition-4a651766-hphk0M6_.js} +1 -1
- package/assets/{ganttDiagram-c361ad54-r7Zmmwnk.js → ganttDiagram-c361ad54-B6r60PGa.js} +1 -1
- package/assets/{ganttDiagram-c361ad54-Bo2Lux4A.js → ganttDiagram-c361ad54-dVSYbZ-7.js} +1 -1
- package/assets/{gitGraphDiagram-72cf32ee-DNqmjGxa.js → gitGraphDiagram-72cf32ee-Bz4HGEuX.js} +1 -1
- package/assets/{gitGraphDiagram-72cf32ee-DWStIatv.js → gitGraphDiagram-72cf32ee-zFZt29lK.js} +1 -1
- package/assets/{graph-DyEmAEwR.js → graph-COW73APK.js} +1 -1
- package/assets/{graph-CeyoT8oY.js → graph-ejFSPIaT.js} +1 -1
- package/assets/{index-Dm-zCEmK.js → index-1pHfuurY.js} +1 -1
- package/assets/{index-3862675e-DyL74Z30.js → index-3862675e-3nyHSGZK.js} +1 -1
- package/assets/{index-3862675e-Bw9XkkAE.js → index-3862675e-DOwTWVKV.js} +1 -1
- package/assets/{index-CjbxE3Az.js → index-5PR39hVf.js} +1 -1
- package/assets/{index-p1_Pf_AF.js → index-BTZzUEEr.js} +1 -1
- package/assets/{index-Bns1e--x.js → index-BUKgbEWB.js} +1 -1
- package/assets/{index-C9e1lioT.js → index-BXExiwY_.js} +1 -1
- package/assets/{index-VdmalGxj.js → index-BcC0SMY8.js} +1 -1
- package/assets/{index-CbzaYYgx.js → index-Bhlefqv2.js} +1 -1
- package/assets/{index-DkplRqAR.js → index-Bj7B5TN9.js} +1 -1
- package/assets/{index-CajOz75p.js → index-BnwC-7J7.js} +1 -1
- package/assets/{index-B3f7QsYc.js → index-Bw9ue7i7.js} +3 -3
- package/assets/{index-DaAPo9Bt.js → index-BwYg4i9u.js} +1 -1
- package/assets/{index--NkKSBxC.js → index-C5E_-osl.js} +1 -1
- package/assets/{index-BHQeHPLm.js → index-CCLFpqha.js} +1 -1
- package/assets/{index-UqWDFJpd.js → index-CFNNtiz8.js} +1 -1
- package/assets/{index-BKIiB4R6.js → index-CM89tZ00.js} +1 -1
- package/assets/{index-CcOkPeuu.js → index-Ca_NVpVU.js} +1 -1
- package/assets/{index-zePTpYkn.js → index-CrU-4p5_.js} +1 -1
- package/assets/{index-c77vpcXD.js → index-DAjwjJ2D.js} +1 -1
- package/assets/{index-DTu_1uDk.js → index-DG4grBsT.js} +1 -1
- package/assets/{index-B8a_luXY.js → index-DQgPKdcG.js} +1 -1
- package/assets/{index-BNgy3vXU.js → index-DRMIFlp9.js} +1 -1
- package/assets/{index-DvvmMI3h.js → index-DXAGczwQ.js} +2 -2
- package/assets/{index-BzTkNNwC.js → index-DZXt2tnx.js} +1 -1
- package/assets/{index-Bfz0XlML.js → index-De0hx68H.js} +1 -1
- package/assets/{index-GHYKCP34.js → index-DoMqcM-0.js} +1 -1
- package/assets/{index-CRw6uJMw.js → index-Dodj0hfI.js} +1 -1
- package/assets/{index-C8GvCkEd.js → index-HZvT_wuy.js} +1 -1
- package/assets/{index-CkAzCDTh.js → index-M-cYFC7f.js} +1 -1
- package/assets/{index-CdPgRhLY.js → index-QhWxY7tl.js} +1 -1
- package/assets/{index-B900lcJ5.js → index-aMQ1oY6Y.js} +1 -1
- package/assets/{index-BFPxz0B6.js → index-v6PZMkUB.js} +1 -1
- package/assets/{index-C5kIlOTh.js → index-zpftae7X.js} +3 -3
- package/assets/{infoDiagram-f8f76790-DeKswkFi.js → infoDiagram-f8f76790-C-hbPrFY.js} +1 -1
- package/assets/{infoDiagram-f8f76790-D_tJHpjh.js → infoDiagram-f8f76790-CoAoigEy.js} +1 -1
- package/assets/{journeyDiagram-49397b02-DhHqZNiJ.js → journeyDiagram-49397b02-BULlS9sg.js} +1 -1
- package/assets/{journeyDiagram-49397b02-DU1Y_2Fn.js → journeyDiagram-49397b02-DsA3R601.js} +1 -1
- package/assets/{layout-CfXsPUCq.js → layout-CClXl0Sh.js} +1 -1
- package/assets/{layout-BmrSDeuT.js → layout-FyZ8SI9y.js} +1 -1
- package/assets/{line-DXBIg66-.js → line-DknSeDVC.js} +1 -1
- package/assets/{line-plvvn2nA.js → line-bInjZjBL.js} +1 -1
- package/assets/{linear-CjeXoa79.js → linear-C5umUnPr.js} +1 -1
- package/assets/{linear-CalIn0uM.js → linear-RdYr8J3L.js} +1 -1
- package/assets/{main-BXWdvMAl.js → main-0j7izJQ5.js} +19 -19
- package/assets/{mermaid.core-CjOLfhsp.js → mermaid.core-v6SLAE1o.js} +3 -3
- package/assets/{mindmap-definition-fc14e90a-Do4ZFdfK.js → mindmap-definition-fc14e90a-BpbkLGO-.js} +1 -1
- package/assets/{mindmap-definition-fc14e90a-AYapTt2g.js → mindmap-definition-fc14e90a-DMhqNBEJ.js} +1 -1
- package/assets/{model-benchmark-launcher-B4uA9Ksu.js → model-benchmark-launcher-C6wBiLhU.js} +1 -1
- package/assets/{model-benchmark-service-BMrNQ15Z.js → model-benchmark-service-CRrqv98_.js} +1 -1
- package/assets/{model-selection-_kjwhKax.js → model-selection-BOQrGhyv.js} +1 -1
- package/assets/{photo-wall-splitter-lQSplrRi.js → photo-wall-splitter-BRNHKiqj.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-B0Q3kSMt.js → pieDiagram-8a3498a8-Bk1AJqOH.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-jSD2S3PD.js → pieDiagram-8a3498a8-DEDbiBjZ.js} +1 -1
- package/assets/{quadrantDiagram-120e2f19-aa34tSqs.js → quadrantDiagram-120e2f19-Bt1_MRTW.js} +1 -1
- package/assets/{quadrantDiagram-120e2f19-3JcEKmQ-.js → quadrantDiagram-120e2f19-DuB1gXOY.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-BF5G6K-5.js → requirementDiagram-deff3bca-C_NgrzNs.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-DYWDrb2Y.js → requirementDiagram-deff3bca-DCklko7w.js} +1 -1
- package/assets/{sankeyDiagram-04a897e0-BUNoyo-Y.js → sankeyDiagram-04a897e0-Cx0ckaAh.js} +1 -1
- package/assets/{sankeyDiagram-04a897e0-4Ocx8Wvw.js → sankeyDiagram-04a897e0-ESZyHG9Y.js} +1 -1
- package/assets/{sequenceDiagram-704730f1-D8_pQugm.js → sequenceDiagram-704730f1-Cc4Z2nNq.js} +1 -1
- package/assets/{sequenceDiagram-704730f1-DipyJY2a.js → sequenceDiagram-704730f1-DrIjWFCK.js} +1 -1
- package/assets/{settings-dialog-zHWa4bex.js → settings-dialog-CC-uZD79.js} +1 -1
- package/assets/{skill-dsl-parser-D01Yastb.js → skill-dsl-parser-dcUEIIHI.js} +1 -1
- package/assets/{stateDiagram-587899a1-ESSem5Ko.js → stateDiagram-587899a1-DzZjcMr3.js} +1 -1
- package/assets/{stateDiagram-587899a1-Cw6p6f0a.js → stateDiagram-587899a1-RH43hRqi.js} +1 -1
- package/assets/{stateDiagram-v2-d93cdb3a-Can05cVu.js → stateDiagram-v2-d93cdb3a-7iYdddwF.js} +1 -1
- package/assets/{stateDiagram-v2-d93cdb3a-C_pRuBhv.js → stateDiagram-v2-d93cdb3a-EZVIeil1.js} +1 -1
- package/assets/{styles-6aaf32cf-l_jW_kK6.js → styles-6aaf32cf-Chr0m3Mm.js} +1 -1
- package/assets/{styles-6aaf32cf-BPDUF7mc.js → styles-6aaf32cf-CxGoph9H.js} +1 -1
- package/assets/{styles-9a916d00-D3RHUvWQ.js → styles-9a916d00-CodFEMZn.js} +1 -1
- package/assets/{styles-9a916d00-CzmE6m3h.js → styles-9a916d00-DN4Uig9g.js} +1 -1
- package/assets/{styles-c10674c1-BHX6e3-e.js → styles-c10674c1-D85xPrJI.js} +1 -1
- package/assets/{styles-c10674c1-BsUwSkwM.js → styles-c10674c1-U82jFj9c.js} +1 -1
- package/assets/{svgDrawCommon-08f97a94-1f8QBa20.js → svgDrawCommon-08f97a94-B4MV1knL.js} +1 -1
- package/assets/{svgDrawCommon-08f97a94-Cj-KK7-e.js → svgDrawCommon-08f97a94-CjWQPFKc.js} +1 -1
- package/assets/{timeline-definition-85554ec2-DfoFLRZN.js → timeline-definition-85554ec2-By3aK5On.js} +1 -1
- package/assets/{timeline-definition-85554ec2-CvXI80pm.js → timeline-definition-85554ec2-ptFotBYf.js} +1 -1
- package/assets/{tool-windows-DdXLUjNe.js → tool-windows-4YKdHn6i.js} +10 -10
- package/assets/{ttd-dialog-D2Pcr00l.js → ttd-dialog-CIDwCzQB.js} +4 -4
- package/assets/{use-runtime-models-B8cfYHZK.js → use-runtime-models-DozK0BOE.js} +1 -1
- package/assets/{useCharacters-UWRvbEhO.js → useCharacters-CysLVGji.js} +1 -1
- package/assets/{useWorkflowSubmission-D_HbRMSe.js → useWorkflowSubmission-BkgBdujS.js} +2 -2
- package/assets/{video-analyze-DeC2mOyV.js → video-analyze-DKuJ1k82.js} +1 -1
- package/assets/{video-generation-Cn1z7Fiq.js → video-generation-B6Lrskoi.js} +1 -1
- package/assets/{video-recovery-service-A4R9f-xZ.js → video-recovery-service-DGs5YYqt.js} +1 -1
- package/assets/{workflow-generation-utils-1OIhJefp.js → workflow-generation-utils-BUBqbnOO.js} +2 -2
- package/assets/{workflow-submission-service-D9jgDszg.js → workflow-submission-service-CX0BKuHd.js} +1 -1
- package/assets/{xychartDiagram-e933f94c-BSC2Ia3F.js → xychartDiagram-e933f94c-BeaDVSoy.js} +1 -1
- package/assets/{xychartDiagram-e933f94c-D6N0O4h-.js → xychartDiagram-e933f94c-CQtUS0pf.js} +1 -1
- package/changelog.json +13 -0
- package/idle-prefetch-manifest.json +12 -9
- package/manifest.json +3 -3
- package/package.json +1 -1
- package/precache-manifest.json +308 -308
- package/sw.js +4 -4
- package/version.json +3 -4
- package/assets/channel-BU1ebhin.js +0 -1
- package/assets/channel-BrLFXXq0.js +0 -1
- package/assets/clone-Bd6JiLrb.js +0 -1
- package/assets/flowDiagram-v2-96b9c2cf-B1WPGLAs.js +0 -1
- package/assets/flowDiagram-v2-96b9c2cf-DI_iBWYi.js +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Opentu CDN Assets v0.6.
|
|
1
|
+
# Opentu CDN Assets v0.6.66
|
|
2
2
|
|
|
3
3
|
> 静态资源包,不含 HTML 文件
|
|
4
4
|
|
|
5
|
-
- unpkg: https://unpkg.com/aitu-app@0.6.
|
|
6
|
-
- jsdelivr: https://cdn.jsdelivr.net/npm/aitu-app@0.6.
|
|
5
|
+
- unpkg: https://unpkg.com/aitu-app@0.6.66/
|
|
6
|
+
- jsdelivr: https://cdn.jsdelivr.net/npm/aitu-app@0.6.66/
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./tool-windows-Cos6lOhr.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as s,y as a,z as Ne,bV as q,cP as Ae,cQ as _e,hs as Ee,jc as Ce,iR as De,jd as Ue,je as de,jf as J,jg as z,jh as Ve,ji as qe,jj as ce,ho as me,jk as Z,jl as Ie,cr as Se,ig as Te,as as Le,cy as Me,hF as te,jm as fe,gP as oe,jn as le,jo as ge,jp as Re,bw as ze,jq as $e,jr as Oe,da as Fe,js as Ye,jt as pe,ju as Be,jv as He,_ as We,jw as Qe,jx as Xe,bW as Ke,jy as Ge,jz as Je,jA as Ze,jB as ea,jC as aa}from"./tool-windows-DdXLUjNe.js";const ye=5;function ve(e,o,i){const r=Math.max(0,window.innerWidth-o),f=Math.max(0,window.innerHeight-i);return{x:Math.max(0,Math.min(e.x,r)),y:Math.max(0,Math.min(e.y,f))}}function na(e){try{const o=localStorage.getItem(e);if(!o)return null;const i=JSON.parse(o);if(typeof i.x=="number"&&typeof i.y=="number")return i}catch{}return null}function sa(e,o){try{localStorage.setItem(e,JSON.stringify(o))}catch{}}function ia(e){const{storageKey:o,enabled:i=!0}=e,[r,f]=s.useState(()=>i?na(o):null),[v,x]=s.useState(!1),P=s.useRef(!1),N=s.useRef(null),k=s.useRef(null),g=s.useCallback(p=>{if(!i||p.button!==0)return;const y=k.current;if(!y)return;const m=y.getBoundingClientRect();N.current={startPointerX:p.clientX,startPointerY:p.clientY,startElX:m.left,startElY:m.top,activated:!1,frameId:0}},[i]);s.useEffect(()=>{if(!i)return;const p=m=>{const d=N.current;if(!d)return;const b=m.clientX-d.startPointerX,I=m.clientY-d.startPointerY;if(!d.activated){if(Math.abs(b)<ye&&Math.abs(I)<ye)return;d.activated=!0,x(!0)}cancelAnimationFrame(d.frameId),d.frameId=requestAnimationFrame(()=>{const E=k.current;if(!E)return;const c=ve({x:d.startElX+b,y:d.startElY+I},E.offsetWidth,E.offsetHeight);f(c)})},y=()=>{const m=N.current;if(!m)return;cancelAnimationFrame(m.frameId);const d=m.activated;N.current=null,x(!1),d&&(P.current=!0,requestAnimationFrame(()=>{P.current=!1}),f(b=>(b&&sa(o,b),b)))};return window.addEventListener("pointermove",p),window.addEventListener("pointerup",y),()=>{window.removeEventListener("pointermove",p),window.removeEventListener("pointerup",y)}},[i,o]),s.useEffect(()=>{if(!i||!r)return;const p=()=>{const y=k.current;y&&f(m=>m&&ve(m,y.offsetWidth,y.offsetHeight))};return window.addEventListener("resize",p),()=>window.removeEventListener("resize",p)},[i,!!r]);const w=s.useCallback(()=>{f(null);try{localStorage.removeItem(o)}catch{}},[o]);return{position:r,isDragging:v,wasDraggedRef:P,elementRef:k,handlePointerDown:g,resetPosition:w}}const ta=({volume:e,onVolumeChange:o})=>{const i=s.useRef(null),r=s.useRef(null),f=s.useRef(!1),v=s.useRef(!1),x=s.useRef(!1),[P,N]=s.useState(!1),[k,g]=s.useState(!1),[w,p]=s.useState(!1),y=Math.round(e*100),m={"--canvas-audio-progress":`${e*100}%`},d=()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},b=()=>{d(),N(!0)},I=()=>{d(),N(c=>!c)},E=()=>{d(),!(v.current||x.current)&&(r.current=window.setTimeout(()=>{N(!1)},180))};return s.useEffect(()=>{v.current=k},[k]),s.useEffect(()=>{x.current=w},[w]),s.useEffect(()=>()=>d(),[]),s.useEffect(()=>{if(!P)return;const c=h=>{var A;(A=i.current)!=null&&A.contains(h.target)||(d(),N(!1),p(!1),g(!1),f.current=!1)};return document.addEventListener("pointerdown",c,!0),()=>document.removeEventListener("pointerdown",c,!0)},[P]),s.useEffect(()=>{if(!w)return;const c=()=>{x.current=!1,p(!1),v.current||(d(),r.current=window.setTimeout(()=>{N(!1)},180))};return window.addEventListener("pointerup",c),()=>window.removeEventListener("pointerup",c)},[w]),a.jsxDEV("div",{ref:i,className:Ne("canvas-audio-player__volume",{"canvas-audio-player__volume--expanded":P}),onPointerDown:c=>c.stopPropagation(),onMouseEnter:()=>{v.current=!0,g(!0),d()},onMouseLeave:()=>{v.current=!1,g(!1),E()},onBlur:c=>{var A;const h=c.relatedTarget;h&&((A=i.current)!=null&&A.contains(h))||E()},children:a.jsxDEV("div",{className:"canvas-audio-player__volume-shell",children:[a.jsxDEV("div",{className:"canvas-audio-player__volume-slider-wrap",children:a.jsxDEV("input",{type:"range",min:0,max:1,step:.01,value:e,onFocus:b,onPointerDown:c=>{c.stopPropagation(),x.current=!0,p(!0),b()},onChange:c=>o(Number(c.target.value)),className:"canvas-audio-player__slider canvas-audio-player__slider--volume",style:m,"aria-label":"Playback volume","aria-valuetext":`${y}%`},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:121,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:120,columnNumber:9},void 0),a.jsxDEV("span",{className:"canvas-audio-player__volume-value",children:[y,"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:141,columnNumber:9},void 0),a.jsxDEV(q,{content:"音量",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__volume-toggle",onPointerDown:c=>{c.stopPropagation(),f.current=!0},onClick:()=>{f.current=!1,I()},onFocus:()=>{f.current||b()},onBlur:()=>{f.current=!1},"aria-label":"Volume controls","aria-expanded":P,children:e<=.01?a.jsxDEV(Ae,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:166,columnNumber:31},void 0):a.jsxDEV(_e,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:166,columnNumber:55},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:145,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:144,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:119,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:97,columnNumber:5},void 0)},be="asset:";function oa(e){var o;return(o=e==null?void 0:e.elementId)!=null&&o.startsWith(be)?e.elementId.slice(be.length):null}function he(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const o=Math.floor(e),i=Math.floor(o/60),r=o%60;return`${i}:${String(r).padStart(2,"0")}`}function la(e){var i;const o=((i=e.segments[e.segments.length-1])==null?void 0:i.endMs)||0;return he(o/1e3)}const ua=({queue:e,activeQueueIndex:o,queueSource:i,activePlaylistId:r,playing:f=!1,activeReadingSourceId:v,onSelect:x,onPlayAllTracksItem:P})=>{const{assets:N}=Ee(),{playlists:k,playlistItems:g,favoriteAssetIds:w,createPlaylist:p,addAssetToPlaylist:y,removeAssetFromPlaylist:m,toggleFavorite:d}=Ce(),{contextMenu:b,openAt:I,close:E}=De(),[c,h]=s.useState(!1),[A,U]=s.useState(""),[$,C]=s.useState(null),{noteMetas:L,loadReadingSource:Q,buildReadingQueue:X}=Ue(),[O,F]=s.useState(i==="reading"?de:J),Y=O===de,S=i==="playlist"&&r?r:J,D=e.filter(n=>!z(n)),ee=Ve(D),K=n=>{const t=oa(n);if(t)return t;if(!(n!=null&&n.audioUrl))return null;const u=N.find(j=>j.type===Le.AUDIO&&j.url===n.audioUrl);return(u==null?void 0:u.id)||null},B=s.useMemo(()=>new Set(S!==J?(g[S]||[]).map(n=>n.assetId?qe({kind:"asset",assetId:n.assetId}):null).filter(n=>!!n):[]),[g,S]),T=s.useCallback(async n=>{if(P){P(n);return}const t=await Q(n);t&&(await X(n),x(t))},[P,Q,X,x]),M=s.useMemo(()=>L.map(n=>({id:n.id,title:n.title||"未命名笔记",subtitle:new Date(n.updatedAt).toLocaleDateString("zh-CN"),canFavorite:!1,isActive:(v==null?void 0:v.includes(n.id))===!0,isPlaying:f&&(v==null?void 0:v.includes(n.id))===!0})),[L,v,f]);return i==="reading"?a.jsxDEV("div",{className:"canvas-audio-player__playlist",children:[a.jsxDEV(ce,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:O,allCount:D.length,allTracksCount:L.length,playlists:k,playlistItems:g,onSelect:F,onCreate:()=>{U(""),h(!0)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:157,columnNumber:9},void 0),Y?M.length===0?a.jsxDEV("div",{className:"canvas-audio-player__playlist-empty",children:[a.jsxDEV(me,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:173,columnNumber:15},void 0),a.jsxDEV("span",{children:"知识库还没有笔记"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:174,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:172,columnNumber:13},void 0):a.jsxDEV(Z,{className:"canvas-audio-player__playlist-list",items:M,onSelect:n=>void T(n.id),onTogglePlayback:n=>void T(n.id),showPlaybackIndicator:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:177,columnNumber:13},void 0):a.jsxDEV(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:e.map((n,t)=>{const u=n;return{id:u.readingSourceId,title:u.title||"朗读轨道",subtitle:la(u),previewImageUrl:u.previewImageUrl,isActive:t===o,isPlaying:t===o,canFavorite:!1}}),onSelect:n=>{const t=e.find(u=>z(u)&&u.readingSourceId===n.id);t&&x(t)},onTogglePlayback:n=>{const t=e.find(u=>z(u)&&u.readingSourceId===n.id);t&&x(t)},showPlaybackIndicator:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:186,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:156,columnNumber:7},void 0):a.jsxDEV("div",{className:"canvas-audio-player__playlist",children:[a.jsxDEV(ce,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:O,allCount:D.length,allTracksCount:L.length,playlists:k,playlistItems:g,onSelect:F,onCreate:()=>{U(""),h(!0)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:229,columnNumber:7},void 0),Y?M.length===0?a.jsxDEV("div",{className:"canvas-audio-player__playlist-empty",children:[a.jsxDEV(me,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:245,columnNumber:13},void 0),a.jsxDEV("span",{children:"知识库还没有笔记"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:246,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:244,columnNumber:11},void 0):a.jsxDEV(Z,{className:"canvas-audio-player__playlist-list",items:M,onSelect:n=>void T(n.id),onTogglePlayback:n=>void T(n.id),showPlaybackIndicator:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:249,columnNumber:11},void 0):a.jsxDEV(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:D.map((n,t)=>{const u=K(n);return{id:`${n.audioUrl}-${t}`,title:n.title||"未命名音频",subtitle:he(ee.get(n.audioUrl)??n.duration),previewImageUrl:n.previewImageUrl,isActive:t===o,isPlaying:t===o,isFavorite:u?w.has(u):!1,canFavorite:!!u}}),onSelect:n=>{const t=D.find((u,j)=>`${u.audioUrl}-${j}`===n.id);t&&x(t)},onContextMenu:(n,t)=>{const u=D.find((H,ae)=>`${H.audioUrl}-${ae}`===n.id),j=K(u);j&&(t.preventDefault(),t.stopPropagation(),I(t.clientX,t.clientY,{kind:"asset",assetId:j}))},onToggleFavorite:n=>{const t=D.find((j,H)=>`${j.audioUrl}-${H}`===n.id),u=K(t);u&&d(u)},onTogglePlayback:n=>{const t=D.find((u,j)=>`${u.audioUrl}-${j}`===n.id);t&&x(t)},showFavoriteButton:!0,showPlaybackIndicator:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:258,columnNumber:9},void 0),a.jsxDEV(Ie,{contextMenu:b?{x:b.x,y:b.y,item:b.payload}:null,playlists:k,playlistItems:g,favoriteAssetIds:w,selectedPlaylistId:S===J?null:S,currentPlaylistItemKeys:B,onClose:E,onToggleFavorite:n=>void d(n),onAddToPlaylist:(n,t)=>{n.kind==="asset"&&y(n.assetId,t)},onRemoveFromPlaylist:(n,t)=>{n.kind==="asset"&&m(n.assetId,t)},onCreatePlaylistAndAdd:n=>{n.kind==="asset"&&(C(n.assetId),U(""),h(!0))}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:307,columnNumber:7},void 0),a.jsxDEV(Se,{visible:c,header:"新建播放列表",onClose:()=>h(!1),onConfirm:async()=>{const n=await p(A);$&&await y($,n.id),h(!1),U(""),C(null)},onCancel:()=>{h(!1),C(null)},confirmBtn:"确定",cancelBtn:"取消",children:a.jsxDEV(Te,{value:A,onChange:n=>U(String(n)),placeholder:"请输入播放列表名称"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:363,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:343,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:228,columnNumber:5},void 0)},Pe={sequential:a.jsxDEV(ea,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:45,columnNumber:15},void 0),"list-loop":a.jsxDEV(Ze,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:46,columnNumber:16},void 0),"single-loop":a.jsxDEV(Je,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:47,columnNumber:18},void 0),shuffle:a.jsxDEV(Ge,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:48,columnNumber:12},void 0)},ra=Object.keys(le).map(e=>({value:e,content:le[e],prefixIcon:Pe[e]}));function da(e,o){return aa(o).map(i=>{const r=ge(i),f=Math.abs(i-e)<.001;return{value:i,content:f?`✓ ${r}`:r}})}function xe(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const o=Math.floor(e),i=Math.floor(o/60),r=o%60;return`${i}:${String(r).padStart(2,"0")}`}const fa=()=>{const e=Me(),o=s.useRef(null),[i,r]=s.useState(!1),[f,v]=s.useState(()=>{const l=te.getToolState(fe);return(l==null?void 0:l.status)==="open"}),[x,P]=s.useState(()=>{try{return localStorage.getItem(oe.AUDIO_PLAYER_LAYOUT)==="vertical"?"vertical":"horizontal"}catch{return"horizontal"}}),[N,k]=s.useState(()=>typeof window<"u"?window.innerWidth:1024);s.useEffect(()=>{const l=()=>k(window.innerWidth);return window.addEventListener("resize",l),window.addEventListener("orientationchange",l),()=>{window.removeEventListener("resize",l),window.removeEventListener("orientationchange",l)}},[]);const g=N<=768?"vertical":x,[w,p]=s.useState(null),y=N<=768,{position:m,isDragging:d,wasDraggedRef:b,elementRef:I,handlePointerDown:E}=ia({storageKey:oe.AUDIO_PLAYER_POSITION,enabled:!y}),c=s.useMemo(()=>!e.duration||e.duration<=0?0:Math.max(0,Math.min(100,e.currentTime/e.duration*100)),[e.currentTime,e.duration]),h=Number.isFinite(e.currentTime)?e.currentTime:0,A=Number.isFinite(e.duration)?e.duration:0,U=xe(h),$=xe(A),C=e.activeQueueIndex>=0?e.queue[e.activeQueueIndex]:null,L=e.activeTitle||(z(C)?C.title:void 0),Q=e.activePreviewImageUrl||(z(C)?C.previewImageUrl:void 0),X=e.activeQueueIndex>0,O=e.activeQueueIndex>=0&&e.activeQueueIndex<e.queue.length-1,F=e.queue.length>1&&e.activeQueueIndex>=0,Y=F?`${e.activeQueueIndex+1}/${e.queue.length}`:null,S=e.queueSource==="playlist"?e.activePlaylistName||"播放列表":e.activePlaylistName||(e.queueSource==="reading"?"朗读轨道":"画布音频"),D=F?`${S} ${e.activeQueueIndex+1} / ${e.queue.length}`:S,ee=Y?`${Y} · ${U} / ${$}`:`${U} / ${$}`,B=e.queueSource==="reading"&&(!!e.activeReadingSourceId||C!==null&&z(C))||!!e.activeAudioUrl,T=e.mediaType==="audio",M=e.mediaType==="reading"?"reading":"audio",n=le[e.playbackMode],t=Pe[e.playbackMode],u=s.useMemo(()=>da(e.effectivePlaybackRate,M),[e.effectivePlaybackRate,M]),j=ge(e.effectivePlaybackRate),H=`${e.mediaType==="reading"?"语音速度":"播放速度"} ${j}`,ae={"--canvas-audio-progress":`${c}%`},we=s.useCallback(()=>{P(l=>{const _=l==="horizontal"?"vertical":"horizontal";try{localStorage.setItem(oe.AUDIO_PLAYER_LAYOUT,_)}catch{}return _})},[]),je=s.useCallback(async()=>{try{e.playing?e.pausePlayback():await e.resumePlayback()}catch{}},[e]);if(s.useEffect(()=>{if(!B){r(!1),p(null);return}let l=0;const _=()=>{const re=document.querySelector(".ai-input-bar__container");if(!(re instanceof HTMLElement)){p(null);return}const ie=re.getBoundingClientRect(),G={left:Math.round(ie.left),width:Math.round(ie.width),bottom:Math.max(0,Math.round(window.innerHeight-ie.top))};p(W=>W&&W.left===G.left&&W.width===G.width&&W.bottom===G.bottom?W:G)},V=()=>{window.cancelAnimationFrame(l),l=window.requestAnimationFrame(_)},ne=document.querySelector(".ai-input-bar__container"),se=document.querySelector(".ai-input-bar"),R=typeof ResizeObserver<"u"?new ResizeObserver(()=>V()):null;return R&&ne instanceof HTMLElement&&R.observe(ne),R&&se instanceof HTMLElement&&se!==ne&&R.observe(se),V(),window.addEventListener("resize",V),window.addEventListener("orientationchange",V),()=>{window.cancelAnimationFrame(l),window.removeEventListener("resize",V),window.removeEventListener("orientationchange",V),R==null||R.disconnect()}},[B]),s.useEffect(()=>{if(!i)return;const l=_=>{var V;(V=o.current)!=null&&V.contains(_.target)||r(!1)};return document.addEventListener("pointerdown",l,!0),()=>document.removeEventListener("pointerdown",l,!0)},[i]),s.useEffect(()=>{I.current=o.current}),s.useEffect(()=>{const l=te.observeToolStates().subscribe(()=>{const _=te.getToolState(fe);v((_==null?void 0:_.status)==="open")});return()=>l.unsubscribe()},[]),!B||f)return null;const ke=m&&!y?{left:m.x,top:m.y}:{},ue={...w?{"--canvas-audio-mobile-left":`${w.left}px`,"--canvas-audio-mobile-width":`${w.width}px`,"--canvas-audio-mobile-offset":`${w.bottom}px`}:{},...ke};return a.jsxDEV("div",{ref:o,className:Ne("canvas-audio-player",{"canvas-audio-player--playlist-open":i,"canvas-audio-player--positioned":!!m,"canvas-audio-player--dragging":d,"canvas-audio-player--vertical":g==="vertical"}),style:Object.keys(ue).length>0?ue:void 0,children:[a.jsxDEV("button",{type:"button",className:"canvas-audio-player__queue-trigger",onPointerDown:E,onClick:()=>{b.current||r(l=>!l)},"aria-expanded":i,"aria-label":"切换播放列表",children:[a.jsxDEV("div",{className:"canvas-audio-player__cover",children:a.jsxDEV(Re,{src:Q,alt:L||"Audio cover",fallbackClassName:"canvas-audio-player__cover-fallback",iconSize:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:370,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:369,columnNumber:9},void 0),a.jsxDEV("div",{className:"canvas-audio-player__meta",children:[a.jsxDEV("div",{className:"canvas-audio-player__title",children:L||"未命名音频"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:379,columnNumber:11},void 0),a.jsxDEV("div",{className:"canvas-audio-player__subtitle",children:[a.jsxDEV("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--desktop",children:D},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:383,columnNumber:13},void 0),a.jsxDEV("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--mobile",children:ee},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:386,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:382,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:378,columnNumber:9},void 0),a.jsxDEV("span",{className:"canvas-audio-player__queue-indicator","aria-hidden":"true",children:a.jsxDEV(ze,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:396,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:392,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:359,columnNumber:7},void 0),a.jsxDEV("div",{className:"canvas-audio-player__controls",children:[a.jsxDEV(q,{content:"上一首",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--previous",onClick:()=>void e.playPrevious(),disabled:!X,children:a.jsxDEV($e,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:408,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:402,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:401,columnNumber:9},void 0),a.jsxDEV(q,{content:e.playing?"暂停":"播放",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--primary",onClick:()=>void je(),children:e.playing?a.jsxDEV(Oe,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:417,columnNumber:33},void 0):a.jsxDEV(Fe,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:417,columnNumber:55},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:412,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:411,columnNumber:9},void 0),a.jsxDEV(q,{content:"下一首",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--next",onClick:()=>void e.playNext(),disabled:!O,children:a.jsxDEV(Ye,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:427,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:421,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:420,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:400,columnNumber:7},void 0),a.jsxDEV("div",{className:"canvas-audio-player__progress",children:[a.jsxDEV("span",{className:"canvas-audio-player__time",children:U},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:433,columnNumber:9},void 0),a.jsxDEV("input",{type:"range",min:0,max:A||0,step:.1,value:Math.min(h,A||h),onChange:l=>{T&&e.seekTo(Number(l.target.value))},className:"canvas-audio-player__slider canvas-audio-player__slider--progress",style:ae,"aria-label":T?"Audio progress":"Reading progress",disabled:!T},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:434,columnNumber:9},void 0),a.jsxDEV("span",{className:"canvas-audio-player__time",children:$},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:450,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:432,columnNumber:7},void 0),a.jsxDEV(ta,{volume:e.volume,onVolumeChange:e.setVolume},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:453,columnNumber:7},void 0),a.jsxDEV(pe,{options:u,trigger:"click",placement:"bottom",minColumnWidth:112,onClick:l=>e.setPlaybackRate(Number(l.value)),children:a.jsxDEV(q,{content:H,children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__speed-toggle","aria-label":`切换播放速度,当前${j}`,children:a.jsxDEV(Be,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:471,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:466,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:465,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:458,columnNumber:7},void 0),a.jsxDEV(pe,{options:ra,trigger:"click",placement:"bottom",minColumnWidth:132,onClick:l=>e.setPlaybackMode(l.value),children:a.jsxDEV(q,{content:n,children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__mode-toggle","aria-label":`切换播放模式,当前${n}`,children:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:484,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:483,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:476,columnNumber:7},void 0),a.jsxDEV(q,{content:"打开播放器工具",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__player-switch canvas-audio-player__switch-toggle",onClick:()=>{We(async()=>{const{openMusicPlayerTool:l}=await import("./tool-windows-DdXLUjNe.js").then(_=>_.oS);return{openMusicPlayerTool:l}},__vite__mapDeps([0]),import.meta.url).then(({openMusicPlayerTool:l})=>{l()})},"aria-label":"打开播放器工具",children:a.jsxDEV(He,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:507,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:495,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:494,columnNumber:7},void 0),a.jsxDEV(q,{content:g==="horizontal"?"切换为垂直布局":"切换为水平布局",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__layout-toggle",onClick:we,style:{display:N<=768?"none":""},children:g==="horizontal"?a.jsxDEV(Qe,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:523,columnNumber:13},void 0):a.jsxDEV(Xe,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:525,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:516,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:511,columnNumber:7},void 0),a.jsxDEV(q,{content:"关闭播放器",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__close",onClick:e.stopPlayback,children:a.jsxDEV(Ke,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:536,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:531,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:530,columnNumber:7},void 0),i?a.jsxDEV(ua,{queue:e.queue,activeQueueIndex:e.activeQueueIndex,queueSource:e.queueSource,activePlaylistId:e.activePlaylistId,playing:e.playing,activeReadingSourceId:e.activeReadingSourceId,onSelect:l=>{z(l)?e.toggleReadingPlayback(l):e.togglePlayback(l),r(!1)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:541,columnNumber:9},void 0):null]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:349,columnNumber:5},void 0)};export{fa as CanvasAudioPlayer};
|
|
2
|
+
import{r as s,y as a,z as Ne,bV as q,cP as Ae,cQ as _e,hs as Ee,jc as Ce,iR as De,jd as Ue,je as de,jf as J,jg as z,jh as Ve,ji as qe,jj as ce,ho as me,jk as Z,jl as Ie,cr as Se,ig as Te,as as Le,cy as Me,hF as te,jm as fe,gP as oe,jn as le,jo as ge,jp as Re,bw as ze,jq as $e,jr as Oe,da as Fe,js as Ye,jt as pe,ju as Be,jv as He,_ as We,jw as Qe,jx as Xe,bW as Ke,jy as Ge,jz as Je,jA as Ze,jB as ea,jC as aa}from"./tool-windows-4YKdHn6i.js";const ye=5;function ve(e,o,i){const r=Math.max(0,window.innerWidth-o),f=Math.max(0,window.innerHeight-i);return{x:Math.max(0,Math.min(e.x,r)),y:Math.max(0,Math.min(e.y,f))}}function na(e){try{const o=localStorage.getItem(e);if(!o)return null;const i=JSON.parse(o);if(typeof i.x=="number"&&typeof i.y=="number")return i}catch{}return null}function sa(e,o){try{localStorage.setItem(e,JSON.stringify(o))}catch{}}function ia(e){const{storageKey:o,enabled:i=!0}=e,[r,f]=s.useState(()=>i?na(o):null),[v,x]=s.useState(!1),P=s.useRef(!1),N=s.useRef(null),k=s.useRef(null),g=s.useCallback(p=>{if(!i||p.button!==0)return;const y=k.current;if(!y)return;const m=y.getBoundingClientRect();N.current={startPointerX:p.clientX,startPointerY:p.clientY,startElX:m.left,startElY:m.top,activated:!1,frameId:0}},[i]);s.useEffect(()=>{if(!i)return;const p=m=>{const d=N.current;if(!d)return;const b=m.clientX-d.startPointerX,I=m.clientY-d.startPointerY;if(!d.activated){if(Math.abs(b)<ye&&Math.abs(I)<ye)return;d.activated=!0,x(!0)}cancelAnimationFrame(d.frameId),d.frameId=requestAnimationFrame(()=>{const E=k.current;if(!E)return;const c=ve({x:d.startElX+b,y:d.startElY+I},E.offsetWidth,E.offsetHeight);f(c)})},y=()=>{const m=N.current;if(!m)return;cancelAnimationFrame(m.frameId);const d=m.activated;N.current=null,x(!1),d&&(P.current=!0,requestAnimationFrame(()=>{P.current=!1}),f(b=>(b&&sa(o,b),b)))};return window.addEventListener("pointermove",p),window.addEventListener("pointerup",y),()=>{window.removeEventListener("pointermove",p),window.removeEventListener("pointerup",y)}},[i,o]),s.useEffect(()=>{if(!i||!r)return;const p=()=>{const y=k.current;y&&f(m=>m&&ve(m,y.offsetWidth,y.offsetHeight))};return window.addEventListener("resize",p),()=>window.removeEventListener("resize",p)},[i,!!r]);const w=s.useCallback(()=>{f(null);try{localStorage.removeItem(o)}catch{}},[o]);return{position:r,isDragging:v,wasDraggedRef:P,elementRef:k,handlePointerDown:g,resetPosition:w}}const ta=({volume:e,onVolumeChange:o})=>{const i=s.useRef(null),r=s.useRef(null),f=s.useRef(!1),v=s.useRef(!1),x=s.useRef(!1),[P,N]=s.useState(!1),[k,g]=s.useState(!1),[w,p]=s.useState(!1),y=Math.round(e*100),m={"--canvas-audio-progress":`${e*100}%`},d=()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},b=()=>{d(),N(!0)},I=()=>{d(),N(c=>!c)},E=()=>{d(),!(v.current||x.current)&&(r.current=window.setTimeout(()=>{N(!1)},180))};return s.useEffect(()=>{v.current=k},[k]),s.useEffect(()=>{x.current=w},[w]),s.useEffect(()=>()=>d(),[]),s.useEffect(()=>{if(!P)return;const c=h=>{var A;(A=i.current)!=null&&A.contains(h.target)||(d(),N(!1),p(!1),g(!1),f.current=!1)};return document.addEventListener("pointerdown",c,!0),()=>document.removeEventListener("pointerdown",c,!0)},[P]),s.useEffect(()=>{if(!w)return;const c=()=>{x.current=!1,p(!1),v.current||(d(),r.current=window.setTimeout(()=>{N(!1)},180))};return window.addEventListener("pointerup",c),()=>window.removeEventListener("pointerup",c)},[w]),a.jsxDEV("div",{ref:i,className:Ne("canvas-audio-player__volume",{"canvas-audio-player__volume--expanded":P}),onPointerDown:c=>c.stopPropagation(),onMouseEnter:()=>{v.current=!0,g(!0),d()},onMouseLeave:()=>{v.current=!1,g(!1),E()},onBlur:c=>{var A;const h=c.relatedTarget;h&&((A=i.current)!=null&&A.contains(h))||E()},children:a.jsxDEV("div",{className:"canvas-audio-player__volume-shell",children:[a.jsxDEV("div",{className:"canvas-audio-player__volume-slider-wrap",children:a.jsxDEV("input",{type:"range",min:0,max:1,step:.01,value:e,onFocus:b,onPointerDown:c=>{c.stopPropagation(),x.current=!0,p(!0),b()},onChange:c=>o(Number(c.target.value)),className:"canvas-audio-player__slider canvas-audio-player__slider--volume",style:m,"aria-label":"Playback volume","aria-valuetext":`${y}%`},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:121,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:120,columnNumber:9},void 0),a.jsxDEV("span",{className:"canvas-audio-player__volume-value",children:[y,"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:141,columnNumber:9},void 0),a.jsxDEV(q,{content:"音量",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__volume-toggle",onPointerDown:c=>{c.stopPropagation(),f.current=!0},onClick:()=>{f.current=!1,I()},onFocus:()=>{f.current||b()},onBlur:()=>{f.current=!1},"aria-label":"Volume controls","aria-expanded":P,children:e<=.01?a.jsxDEV(Ae,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:166,columnNumber:31},void 0):a.jsxDEV(_e,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:166,columnNumber:55},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:145,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:144,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:119,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerVolume.tsx",lineNumber:97,columnNumber:5},void 0)},be="asset:";function oa(e){var o;return(o=e==null?void 0:e.elementId)!=null&&o.startsWith(be)?e.elementId.slice(be.length):null}function he(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const o=Math.floor(e),i=Math.floor(o/60),r=o%60;return`${i}:${String(r).padStart(2,"0")}`}function la(e){var i;const o=((i=e.segments[e.segments.length-1])==null?void 0:i.endMs)||0;return he(o/1e3)}const ua=({queue:e,activeQueueIndex:o,queueSource:i,activePlaylistId:r,playing:f=!1,activeReadingSourceId:v,onSelect:x,onPlayAllTracksItem:P})=>{const{assets:N}=Ee(),{playlists:k,playlistItems:g,favoriteAssetIds:w,createPlaylist:p,addAssetToPlaylist:y,removeAssetFromPlaylist:m,toggleFavorite:d}=Ce(),{contextMenu:b,openAt:I,close:E}=De(),[c,h]=s.useState(!1),[A,U]=s.useState(""),[$,C]=s.useState(null),{noteMetas:L,loadReadingSource:Q,buildReadingQueue:X}=Ue(),[O,F]=s.useState(i==="reading"?de:J),Y=O===de,S=i==="playlist"&&r?r:J,D=e.filter(n=>!z(n)),ee=Ve(D),K=n=>{const t=oa(n);if(t)return t;if(!(n!=null&&n.audioUrl))return null;const u=N.find(j=>j.type===Le.AUDIO&&j.url===n.audioUrl);return(u==null?void 0:u.id)||null},B=s.useMemo(()=>new Set(S!==J?(g[S]||[]).map(n=>n.assetId?qe({kind:"asset",assetId:n.assetId}):null).filter(n=>!!n):[]),[g,S]),T=s.useCallback(async n=>{if(P){P(n);return}const t=await Q(n);t&&(await X(n),x(t))},[P,Q,X,x]),M=s.useMemo(()=>L.map(n=>({id:n.id,title:n.title||"未命名笔记",subtitle:new Date(n.updatedAt).toLocaleDateString("zh-CN"),canFavorite:!1,isActive:(v==null?void 0:v.includes(n.id))===!0,isPlaying:f&&(v==null?void 0:v.includes(n.id))===!0})),[L,v,f]);return i==="reading"?a.jsxDEV("div",{className:"canvas-audio-player__playlist",children:[a.jsxDEV(ce,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:O,allCount:D.length,allTracksCount:L.length,playlists:k,playlistItems:g,onSelect:F,onCreate:()=>{U(""),h(!0)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:157,columnNumber:9},void 0),Y?M.length===0?a.jsxDEV("div",{className:"canvas-audio-player__playlist-empty",children:[a.jsxDEV(me,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:173,columnNumber:15},void 0),a.jsxDEV("span",{children:"知识库还没有笔记"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:174,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:172,columnNumber:13},void 0):a.jsxDEV(Z,{className:"canvas-audio-player__playlist-list",items:M,onSelect:n=>void T(n.id),onTogglePlayback:n=>void T(n.id),showPlaybackIndicator:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:177,columnNumber:13},void 0):a.jsxDEV(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:e.map((n,t)=>{const u=n;return{id:u.readingSourceId,title:u.title||"朗读轨道",subtitle:la(u),previewImageUrl:u.previewImageUrl,isActive:t===o,isPlaying:t===o,canFavorite:!1}}),onSelect:n=>{const t=e.find(u=>z(u)&&u.readingSourceId===n.id);t&&x(t)},onTogglePlayback:n=>{const t=e.find(u=>z(u)&&u.readingSourceId===n.id);t&&x(t)},showPlaybackIndicator:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:186,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:156,columnNumber:7},void 0):a.jsxDEV("div",{className:"canvas-audio-player__playlist",children:[a.jsxDEV(ce,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:O,allCount:D.length,allTracksCount:L.length,playlists:k,playlistItems:g,onSelect:F,onCreate:()=>{U(""),h(!0)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:229,columnNumber:7},void 0),Y?M.length===0?a.jsxDEV("div",{className:"canvas-audio-player__playlist-empty",children:[a.jsxDEV(me,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:245,columnNumber:13},void 0),a.jsxDEV("span",{children:"知识库还没有笔记"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:246,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:244,columnNumber:11},void 0):a.jsxDEV(Z,{className:"canvas-audio-player__playlist-list",items:M,onSelect:n=>void T(n.id),onTogglePlayback:n=>void T(n.id),showPlaybackIndicator:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:249,columnNumber:11},void 0):a.jsxDEV(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:D.map((n,t)=>{const u=K(n);return{id:`${n.audioUrl}-${t}`,title:n.title||"未命名音频",subtitle:he(ee.get(n.audioUrl)??n.duration),previewImageUrl:n.previewImageUrl,isActive:t===o,isPlaying:t===o,isFavorite:u?w.has(u):!1,canFavorite:!!u}}),onSelect:n=>{const t=D.find((u,j)=>`${u.audioUrl}-${j}`===n.id);t&&x(t)},onContextMenu:(n,t)=>{const u=D.find((H,ae)=>`${H.audioUrl}-${ae}`===n.id),j=K(u);j&&(t.preventDefault(),t.stopPropagation(),I(t.clientX,t.clientY,{kind:"asset",assetId:j}))},onToggleFavorite:n=>{const t=D.find((j,H)=>`${j.audioUrl}-${H}`===n.id),u=K(t);u&&d(u)},onTogglePlayback:n=>{const t=D.find((u,j)=>`${u.audioUrl}-${j}`===n.id);t&&x(t)},showFavoriteButton:!0,showPlaybackIndicator:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:258,columnNumber:9},void 0),a.jsxDEV(Ie,{contextMenu:b?{x:b.x,y:b.y,item:b.payload}:null,playlists:k,playlistItems:g,favoriteAssetIds:w,selectedPlaylistId:S===J?null:S,currentPlaylistItemKeys:B,onClose:E,onToggleFavorite:n=>void d(n),onAddToPlaylist:(n,t)=>{n.kind==="asset"&&y(n.assetId,t)},onRemoveFromPlaylist:(n,t)=>{n.kind==="asset"&&m(n.assetId,t)},onCreatePlaylistAndAdd:n=>{n.kind==="asset"&&(C(n.assetId),U(""),h(!0))}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:307,columnNumber:7},void 0),a.jsxDEV(Se,{visible:c,header:"新建播放列表",onClose:()=>h(!1),onConfirm:async()=>{const n=await p(A);$&&await y($,n.id),h(!1),U(""),C(null)},onCancel:()=>{h(!1),C(null)},confirmBtn:"确定",cancelBtn:"取消",children:a.jsxDEV(Te,{value:A,onChange:n=>U(String(n)),placeholder:"请输入播放列表名称"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:363,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:343,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayerPlaylist.tsx",lineNumber:228,columnNumber:5},void 0)},Pe={sequential:a.jsxDEV(ea,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:45,columnNumber:15},void 0),"list-loop":a.jsxDEV(Ze,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:46,columnNumber:16},void 0),"single-loop":a.jsxDEV(Je,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:47,columnNumber:18},void 0),shuffle:a.jsxDEV(Ge,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:48,columnNumber:12},void 0)},ra=Object.keys(le).map(e=>({value:e,content:le[e],prefixIcon:Pe[e]}));function da(e,o){return aa(o).map(i=>{const r=ge(i),f=Math.abs(i-e)<.001;return{value:i,content:f?`✓ ${r}`:r}})}function xe(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const o=Math.floor(e),i=Math.floor(o/60),r=o%60;return`${i}:${String(r).padStart(2,"0")}`}const fa=()=>{const e=Me(),o=s.useRef(null),[i,r]=s.useState(!1),[f,v]=s.useState(()=>{const l=te.getToolState(fe);return(l==null?void 0:l.status)==="open"}),[x,P]=s.useState(()=>{try{return localStorage.getItem(oe.AUDIO_PLAYER_LAYOUT)==="vertical"?"vertical":"horizontal"}catch{return"horizontal"}}),[N,k]=s.useState(()=>typeof window<"u"?window.innerWidth:1024);s.useEffect(()=>{const l=()=>k(window.innerWidth);return window.addEventListener("resize",l),window.addEventListener("orientationchange",l),()=>{window.removeEventListener("resize",l),window.removeEventListener("orientationchange",l)}},[]);const g=N<=768?"vertical":x,[w,p]=s.useState(null),y=N<=768,{position:m,isDragging:d,wasDraggedRef:b,elementRef:I,handlePointerDown:E}=ia({storageKey:oe.AUDIO_PLAYER_POSITION,enabled:!y}),c=s.useMemo(()=>!e.duration||e.duration<=0?0:Math.max(0,Math.min(100,e.currentTime/e.duration*100)),[e.currentTime,e.duration]),h=Number.isFinite(e.currentTime)?e.currentTime:0,A=Number.isFinite(e.duration)?e.duration:0,U=xe(h),$=xe(A),C=e.activeQueueIndex>=0?e.queue[e.activeQueueIndex]:null,L=e.activeTitle||(z(C)?C.title:void 0),Q=e.activePreviewImageUrl||(z(C)?C.previewImageUrl:void 0),X=e.activeQueueIndex>0,O=e.activeQueueIndex>=0&&e.activeQueueIndex<e.queue.length-1,F=e.queue.length>1&&e.activeQueueIndex>=0,Y=F?`${e.activeQueueIndex+1}/${e.queue.length}`:null,S=e.queueSource==="playlist"?e.activePlaylistName||"播放列表":e.activePlaylistName||(e.queueSource==="reading"?"朗读轨道":"画布音频"),D=F?`${S} ${e.activeQueueIndex+1} / ${e.queue.length}`:S,ee=Y?`${Y} · ${U} / ${$}`:`${U} / ${$}`,B=e.queueSource==="reading"&&(!!e.activeReadingSourceId||C!==null&&z(C))||!!e.activeAudioUrl,T=e.mediaType==="audio",M=e.mediaType==="reading"?"reading":"audio",n=le[e.playbackMode],t=Pe[e.playbackMode],u=s.useMemo(()=>da(e.effectivePlaybackRate,M),[e.effectivePlaybackRate,M]),j=ge(e.effectivePlaybackRate),H=`${e.mediaType==="reading"?"语音速度":"播放速度"} ${j}`,ae={"--canvas-audio-progress":`${c}%`},we=s.useCallback(()=>{P(l=>{const _=l==="horizontal"?"vertical":"horizontal";try{localStorage.setItem(oe.AUDIO_PLAYER_LAYOUT,_)}catch{}return _})},[]),je=s.useCallback(async()=>{try{e.playing?e.pausePlayback():await e.resumePlayback()}catch{}},[e]);if(s.useEffect(()=>{if(!B){r(!1),p(null);return}let l=0;const _=()=>{const re=document.querySelector(".ai-input-bar__container");if(!(re instanceof HTMLElement)){p(null);return}const ie=re.getBoundingClientRect(),G={left:Math.round(ie.left),width:Math.round(ie.width),bottom:Math.max(0,Math.round(window.innerHeight-ie.top))};p(W=>W&&W.left===G.left&&W.width===G.width&&W.bottom===G.bottom?W:G)},V=()=>{window.cancelAnimationFrame(l),l=window.requestAnimationFrame(_)},ne=document.querySelector(".ai-input-bar__container"),se=document.querySelector(".ai-input-bar"),R=typeof ResizeObserver<"u"?new ResizeObserver(()=>V()):null;return R&&ne instanceof HTMLElement&&R.observe(ne),R&&se instanceof HTMLElement&&se!==ne&&R.observe(se),V(),window.addEventListener("resize",V),window.addEventListener("orientationchange",V),()=>{window.cancelAnimationFrame(l),window.removeEventListener("resize",V),window.removeEventListener("orientationchange",V),R==null||R.disconnect()}},[B]),s.useEffect(()=>{if(!i)return;const l=_=>{var V;(V=o.current)!=null&&V.contains(_.target)||r(!1)};return document.addEventListener("pointerdown",l,!0),()=>document.removeEventListener("pointerdown",l,!0)},[i]),s.useEffect(()=>{I.current=o.current}),s.useEffect(()=>{const l=te.observeToolStates().subscribe(()=>{const _=te.getToolState(fe);v((_==null?void 0:_.status)==="open")});return()=>l.unsubscribe()},[]),!B||f)return null;const ke=m&&!y?{left:m.x,top:m.y}:{},ue={...w?{"--canvas-audio-mobile-left":`${w.left}px`,"--canvas-audio-mobile-width":`${w.width}px`,"--canvas-audio-mobile-offset":`${w.bottom}px`}:{},...ke};return a.jsxDEV("div",{ref:o,className:Ne("canvas-audio-player",{"canvas-audio-player--playlist-open":i,"canvas-audio-player--positioned":!!m,"canvas-audio-player--dragging":d,"canvas-audio-player--vertical":g==="vertical"}),style:Object.keys(ue).length>0?ue:void 0,children:[a.jsxDEV("button",{type:"button",className:"canvas-audio-player__queue-trigger",onPointerDown:E,onClick:()=>{b.current||r(l=>!l)},"aria-expanded":i,"aria-label":"切换播放列表",children:[a.jsxDEV("div",{className:"canvas-audio-player__cover",children:a.jsxDEV(Re,{src:Q,alt:L||"Audio cover",fallbackClassName:"canvas-audio-player__cover-fallback",iconSize:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:370,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:369,columnNumber:9},void 0),a.jsxDEV("div",{className:"canvas-audio-player__meta",children:[a.jsxDEV("div",{className:"canvas-audio-player__title",children:L||"未命名音频"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:379,columnNumber:11},void 0),a.jsxDEV("div",{className:"canvas-audio-player__subtitle",children:[a.jsxDEV("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--desktop",children:D},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:383,columnNumber:13},void 0),a.jsxDEV("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--mobile",children:ee},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:386,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:382,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:378,columnNumber:9},void 0),a.jsxDEV("span",{className:"canvas-audio-player__queue-indicator","aria-hidden":"true",children:a.jsxDEV(ze,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:396,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:392,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:359,columnNumber:7},void 0),a.jsxDEV("div",{className:"canvas-audio-player__controls",children:[a.jsxDEV(q,{content:"上一首",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--previous",onClick:()=>void e.playPrevious(),disabled:!X,children:a.jsxDEV($e,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:408,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:402,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:401,columnNumber:9},void 0),a.jsxDEV(q,{content:e.playing?"暂停":"播放",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--primary",onClick:()=>void je(),children:e.playing?a.jsxDEV(Oe,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:417,columnNumber:33},void 0):a.jsxDEV(Fe,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:417,columnNumber:55},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:412,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:411,columnNumber:9},void 0),a.jsxDEV(q,{content:"下一首",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--next",onClick:()=>void e.playNext(),disabled:!O,children:a.jsxDEV(Ye,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:427,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:421,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:420,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:400,columnNumber:7},void 0),a.jsxDEV("div",{className:"canvas-audio-player__progress",children:[a.jsxDEV("span",{className:"canvas-audio-player__time",children:U},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:433,columnNumber:9},void 0),a.jsxDEV("input",{type:"range",min:0,max:A||0,step:.1,value:Math.min(h,A||h),onChange:l=>{T&&e.seekTo(Number(l.target.value))},className:"canvas-audio-player__slider canvas-audio-player__slider--progress",style:ae,"aria-label":T?"Audio progress":"Reading progress",disabled:!T},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:434,columnNumber:9},void 0),a.jsxDEV("span",{className:"canvas-audio-player__time",children:$},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:450,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:432,columnNumber:7},void 0),a.jsxDEV(ta,{volume:e.volume,onVolumeChange:e.setVolume},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:453,columnNumber:7},void 0),a.jsxDEV(pe,{options:u,trigger:"click",placement:"bottom",minColumnWidth:112,onClick:l=>e.setPlaybackRate(Number(l.value)),children:a.jsxDEV(q,{content:H,children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__speed-toggle","aria-label":`切换播放速度,当前${j}`,children:a.jsxDEV(Be,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:471,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:466,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:465,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:458,columnNumber:7},void 0),a.jsxDEV(pe,{options:ra,trigger:"click",placement:"bottom",minColumnWidth:132,onClick:l=>e.setPlaybackMode(l.value),children:a.jsxDEV(q,{content:n,children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__mode-toggle","aria-label":`切换播放模式,当前${n}`,children:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:484,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:483,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:476,columnNumber:7},void 0),a.jsxDEV(q,{content:"打开播放器工具",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__player-switch canvas-audio-player__switch-toggle",onClick:()=>{We(async()=>{const{openMusicPlayerTool:l}=await import("./tool-windows-4YKdHn6i.js").then(_=>_.oS);return{openMusicPlayerTool:l}},__vite__mapDeps([0]),import.meta.url).then(({openMusicPlayerTool:l})=>{l()})},"aria-label":"打开播放器工具",children:a.jsxDEV(He,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:507,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:495,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:494,columnNumber:7},void 0),a.jsxDEV(q,{content:g==="horizontal"?"切换为垂直布局":"切换为水平布局",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__layout-toggle",onClick:we,style:{display:N<=768?"none":""},children:g==="horizontal"?a.jsxDEV(Qe,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:523,columnNumber:13},void 0):a.jsxDEV(Xe,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:525,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:516,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:511,columnNumber:7},void 0),a.jsxDEV(q,{content:"关闭播放器",children:a.jsxDEV("button",{type:"button",className:"canvas-audio-player__close",onClick:e.stopPlayback,children:a.jsxDEV(Ke,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:536,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:531,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:530,columnNumber:7},void 0),i?a.jsxDEV(ua,{queue:e.queue,activeQueueIndex:e.activeQueueIndex,queueSource:e.queueSource,activePlaylistId:e.activePlaylistId,playing:e.playing,activeReadingSourceId:e.activeReadingSourceId,onSelect:l=>{z(l)?e.toggleReadingPlayback(l):e.togglePlayback(l),r(!1)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:541,columnNumber:9},void 0):null]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/audio-node-element/CanvasAudioPlayer.tsx",lineNumber:349,columnNumber:5},void 0)};export{fa as CanvasAudioPlayer};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./tool-windows-Cos6lOhr.css","./index-CJ7peDFP.css","./MediaLibrarySidebar-CNCXXhfY.css","./use-runtime-models-BgWWl4Ng.css","./index-I7GscWS1.css","./main-i0s2IJTn.css","./ChatMessagesArea-DyR_wHFQ.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{aI as ie,r as s,y as r,kf as vt,i9 as Dt,f_ as rt,fP as Mt,bV as Ee,hm as It,lE as jt,hv as Se,hy as Ct,lF as it,f$ as Tt,dM as Rt,ig as At,ih as Ut,bD as Vt,lG as qt,lH as Lt,bj as ot,h7 as Xe,fR as re,lI as Wt,lJ as $t,lK as Pt,lL as zt,lM as Ht,lN as Ft,lO as Gt,l3 as Kt,hd as qe,l2 as Bt,kR as Ot,lP as Xt,lQ as Jt,hK as Qt,hw as Je,bL as Yt,b7 as Zt,hQ as es,lR as ts,_ as ct}from"./tool-windows-DdXLUjNe.js";import{u as ss,b as as,i as Qe,V as ns,j as rs,h as is,f as os}from"./use-runtime-models-B8cfYHZK.js";import{a as cs,f as Ye,b as ls}from"./model-selection-_kjwhKax.js";import{S as ds,i as us,u as ms}from"./index-C5kIlOTh.js";import{u as fs,e as hs}from"./main-BXWdvMAl.js";const lt=ie.memo(({session:t,isActive:e,onSelect:i,onDelete:d,onRename:w})=>{const[o,c]=s.useState(!1),[l,S]=s.useState(t.title),y=s.useRef(null),N=s.useCallback(()=>{o||i()},[i,o]),_=s.useCallback(x=>{x.stopPropagation(),d()},[d]),j=s.useCallback(x=>{x.stopPropagation(),S(t.title),c(!0)},[t.title]),k=s.useCallback(()=>{const x=l.trim();x&&x!==t.title&&w(x),c(!1)},[l,t.title,w]),$=s.useCallback(()=>{S(t.title),c(!1)},[t.title]),E=s.useCallback(x=>{x.key==="Enter"?(x.preventDefault(),k()):x.key==="Escape"&&(x.preventDefault(),$())},[k,$]),v=s.useCallback(x=>{S(x.target.value)},[]);s.useEffect(()=>{o&&y.current&&(y.current.focus(),y.current.select())},[o]);const P=s.useMemo(()=>{const x=new Date(t.updatedAt),X=new Date;return x.toDateString()===X.toDateString()?x.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):x.toLocaleDateString("zh-CN",{month:"short",day:"numeric"})},[t.updatedAt]);return r.jsxDEV("div",{className:`session-item ${e?"session-item--active":""} ${o?"session-item--editing":""}`,"data-track":"chat_click_session_select",onClick:N,role:"button",tabIndex:0,onKeyDown:x=>!o&&x.key==="Enter"&&N(),children:[r.jsxDEV("div",{className:"session-item__content",children:[o?r.jsxDEV("input",{ref:y,className:"session-item__title-input",value:l,onChange:v,onKeyDown:E,onBlur:k,onClick:x=>x.stopPropagation(),maxLength:50},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:101,columnNumber:13},void 0):r.jsxDEV("div",{className:"session-item__title",children:t.title},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:112,columnNumber:13},void 0),r.jsxDEV("div",{className:"session-item__time",children:P},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:114,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:99,columnNumber:9},void 0),!o&&r.jsxDEV("div",{className:"session-item__actions",children:[r.jsxDEV("button",{className:"session-item__edit","data-track":"chat_click_session_edit",onClick:j,"aria-label":`编辑会话标题: ${t.title}`,children:r.jsxDEV(vt,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:124,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:118,columnNumber:13},void 0),r.jsxDEV("button",{className:"session-item__delete","data-track":"chat_click_session_delete",onClick:_,"aria-label":`删除会话: ${t.title}`,children:r.jsxDEV(Dt,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:132,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:126,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:117,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:91,columnNumber:7},void 0)});lt.displayName="SessionItem";const dt=ie.memo(({sessions:t,activeSessionId:e,onSelectSession:i,onNewSession:d,onDeleteSession:w,onRenameSession:o})=>{const[c,l]=ie.useState(null),S=s.useCallback(k=>{i(k)},[i]),y=s.useCallback(k=>{l(k)},[]),N=s.useCallback(()=>{c&&(w(c),l(null))},[c,w]),_=s.useCallback(()=>{l(null)},[]),j=s.useCallback((k,$)=>{o(k,$)},[o]);return r.jsxDEV("div",{className:"session-list",children:[r.jsxDEV("div",{className:"session-list__header",children:[r.jsxDEV("span",{className:"session-list__title",children:"会话列表"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:49,columnNumber:11},void 0),r.jsxDEV("button",{className:"session-list__new-btn","data-track":"chat_click_session_new",onClick:d,"aria-label":"新建会话",children:[r.jsxDEV(rt,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:56,columnNumber:13},void 0),r.jsxDEV("span",{children:"新建"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:57,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:50,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:48,columnNumber:9},void 0),r.jsxDEV("div",{className:"session-list__items",children:t.length===0?r.jsxDEV("div",{className:"session-list__empty",children:"暂无会话"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:62,columnNumber:13},void 0):t.map(k=>r.jsxDEV(lt,{session:k,isActive:k.id===e,onSelect:()=>S(k.id),onDelete:()=>y(k.id),onRename:$=>j(k.id,$)},k.id,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:65,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:60,columnNumber:9},void 0),r.jsxDEV(Mt,{open:c!==null,title:"删除会话",description:"确定删除此会话吗?删除后无法恢复。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:k=>{k||_()},onConfirm:N},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:77,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:47,columnNumber:7},void 0)});dt.displayName="SessionList";const ut=ie.memo(({isOpen:t,onClick:e,drawerWidth:i})=>{const d=t&&i?{right:i-18}:void 0;return r.jsxDEV(Ee,{content:t?"收起对话":"展开对话",children:r.jsxDEV("button",{className:`chat-drawer-trigger ${t?"chat-drawer-trigger--active":""}`,"data-track":t?"chat_click_drawer_close":"chat_click_drawer_open",onClick:e,"aria-label":t?"收起对话":"展开对话","aria-expanded":t,style:d,children:r.jsxDEV(It,{size:16,className:"chat-drawer-trigger__icon"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawerTrigger.tsx",lineNumber:38,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawerTrigger.tsx",lineNumber:26,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawerTrigger.tsx",lineNumber:25,columnNumber:7},void 0)});ut.displayName="ChatDrawerTrigger";function _e(t){return t.sourceProfileName||it[t.vendor]||t.id}const ps=ie.memo(({model:t})=>{const e=is(t.sourceProfileId,t.id);return e?r.jsxDEV("span",{className:"model-selector__item-price",children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:60,columnNumber:12},void 0):null}),ws=ie.memo(({model:t})=>{const e=os(t.sourceProfileId,t.id);return e!=null&&e.description?r.jsxDEV("div",{className:"model-selector__item-desc",children:e.description},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:69,columnNumber:7},void 0):null});function gs(t,e){var o;const i=_e(t),d=(o=t.description)==null?void 0:o.trim(),w=(e==null?void 0:e.includeProvider)??!0;return d?!w||d.includes(i)?d:`${i} · ${d}`:w?i:""}function xs(t){return _e(t).trim().slice(0,1).toUpperCase()||"M"}const mt=ie.memo(({className:t,value:e,valueRef:i,onChange:d,variant:w="capsule"})=>{var q;const o=ss("text"),c=((q=o[0])==null?void 0:q.id)||jt,[l,S]=s.useState(c),[y,N]=s.useState(()=>Se(null,c)),_=e??l,j=i===void 0?y:i,[k,$]=s.useState(!1),[E,v]=s.useState(""),[P,x]=s.useState(null),X=s.useRef(null),B=s.useRef(null);s.useEffect(()=>{!e&&c&&l!==c&&(S(c),N(Se(null,c)))},[c,l,e]),s.useEffect(()=>{if(!k)return;const h=f=>{const W=f.target;X.current&&!X.current.contains(W)&&B.current&&!B.current.contains(W)&&($(!1),v(""))},u=setTimeout(()=>{document.addEventListener("mousedown",h)},100);return()=>{clearTimeout(u),document.removeEventListener("mousedown",h)}},[k]);const G=s.useMemo(()=>_?cs(_,j):null,[_,j]),A=s.useMemo(()=>{if(Ye(o,_,j)||!_)return o;const u=Ct("text",_,j);return u?[u,...o]:o},[o,_,j]),b=s.useMemo(()=>Ye(A,_,j)||A.find(h=>h.id===_),[A,_,j]),I=s.useCallback(h=>{const u=Se(h.sourceProfileId||null,h.id);e===void 0&&S(h.id),i===void 0&&N(u),d==null||d(h.id,u),$(!1),v("")},[e,i,d]),L=s.useCallback(()=>{const h=!k;$(h),h?x((b==null?void 0:b.vendor)||null):v("")},[b==null?void 0:b.vendor,k]),V=s.useMemo(()=>{const h=new Map,u=[];return A.forEach(f=>{h.has(f.vendor)||(u.push(f.vendor),h.set(f.vendor,0)),h.set(f.vendor,(h.get(f.vendor)??0)+1)}),u.map(f=>({id:f,label:it[f],count:h.get(f)??0,icon:r.jsxDEV(as,{vendor:f,size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:225,columnNumber:15},void 0)}))},[A]),ae=s.useCallback(h=>{x(h)},[]),oe=s.useMemo(()=>{const h=E.toLowerCase().trim();return h?A.filter(u=>{var W,J;const f=_e(u).toLowerCase();return u.id.toLowerCase().includes(h)||u.label.toLowerCase().includes(h)||((W=u.shortLabel)==null?void 0:W.toLowerCase().includes(h))||((J=u.description)==null?void 0:J.toLowerCase().includes(h))||f.includes(h)}):P?A.filter(u=>u.vendor===P):A},[E,P,A]),[O,Z]=s.useState({top:0,left:0,width:0,bottom:0,placement:"bottom",maxHeight:480});s.useLayoutEffect(()=>{if(!k)return;const h=()=>{if(!B.current)return;const u=B.current.getBoundingClientRect(),f=window.innerHeight,W=f-u.bottom,J=u.top,de=W<400&&J>W?"top":"bottom",ee=de==="top"?J-16:f-u.bottom-16;Z({top:u.top,left:u.left,width:u.width,bottom:u.bottom,placement:de,maxHeight:Math.min(Math.max(ee,200),600)})};return h(),window.addEventListener("resize",h),window.addEventListener("scroll",h,!0),()=>{window.removeEventListener("resize",h),window.removeEventListener("scroll",h,!0)}},[k]);const le=()=>{if(!k)return null;const h=r.jsxDEV("div",{ref:X,className:"model-selector__dropdown",style:{position:"fixed",zIndex:Rt.DROPDOWN_PORTAL,left:O.left,top:O.placement==="bottom"?O.bottom+8:"auto",bottom:O.placement==="top"?window.innerHeight-O.top+8:"auto",minWidth:360,width:w==="form"?O.width:"auto",maxHeight:O.maxHeight,visibility:O.width===0?"hidden":"visible",transformOrigin:O.placement==="bottom"?"top left":"bottom left",display:"flex",flexDirection:"column"},onClick:u=>u.stopPropagation(),children:[r.jsxDEV("div",{className:"model-selector__search",children:r.jsxDEV(At,{value:E,onChange:v,placeholder:"搜索模型...",prefixIcon:r.jsxDEV(Ut,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:339,columnNumber:27},void 0),clearable:!0,autofocus:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:335,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:334,columnNumber:11},void 0),r.jsxDEV(ns,{tabs:V,activeTab:P,onTabChange:ae,searchQuery:E,compact:!0,children:r.jsxDEV("div",{className:"model-selector__list",children:oe.length===0?r.jsxDEV("div",{className:"model-selector__empty",children:"未找到匹配的模型"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:354,columnNumber:17},void 0):oe.map(u=>{const f=ls(u),W=f===G,J=!!E.trim(),de=gs(u,{includeProvider:!J});return r.jsxDEV("button",{className:`model-selector__item ${W?"model-selector__item--active":""}`,"data-track":"chat_click_model_select",onClick:()=>I(u),children:[r.jsxDEV("span",{className:"model-selector__item-icon model-selector__item-icon--text","aria-hidden":"true",children:xs(u)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:372,columnNumber:23},void 0),r.jsxDEV("div",{className:"model-selector__item-content",children:[r.jsxDEV("div",{className:"model-selector__item-header",children:[r.jsxDEV("span",{className:"model-selector__item-name",children:u.shortLabel||u.label},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:380,columnNumber:27},void 0),J?r.jsxDEV("span",{className:"model-selector__item-provider",children:_e(u)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:384,columnNumber:29},void 0):null,r.jsxDEV(Qe,{modelId:u.id,profileId:u.sourceProfileId||null},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:388,columnNumber:27},void 0),r.jsxDEV(rs,{modelId:u.id},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:392,columnNumber:27},void 0),r.jsxDEV(ps,{model:u},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:393,columnNumber:27},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:379,columnNumber:25},void 0),de?r.jsxDEV("div",{className:"model-selector__item-desc",children:de},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:396,columnNumber:27},void 0):r.jsxDEV(ws,{model:u},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:400,columnNumber:27},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:378,columnNumber:23},void 0),W&&r.jsxDEV("svg",{className:"model-selector__check",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:r.jsxDEV("path",{d:"M13.3334 4L6.00002 11.3333L2.66669 8",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:411,columnNumber:27},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:404,columnNumber:25},void 0)]},f,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:364,columnNumber:21},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:352,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:345,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:306,columnNumber:9},void 0);return Vt.createPortal(h,document.body)};return r.jsxDEV("div",{className:`model-selector ${t||""} model-selector--variant-${w}`,children:[r.jsxDEV("button",{ref:B,className:`model-selector__trigger ${k?"model-selector__trigger--active":""}`,"data-track":"chat_click_model_selector",onClick:L,"aria-label":"选择模型","aria-expanded":k,children:[r.jsxDEV("div",{className:"model-selector__trigger-content",children:[r.jsxDEV(Qe,{modelId:(b==null?void 0:b.id)||_,profileId:(b==null?void 0:b.sourceProfileId)||null,className:"model-selector__trigger-health"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:449,columnNumber:13},void 0),r.jsxDEV("span",{className:"model-selector__trigger-text",children:(b==null?void 0:b.shortLabel)||(b==null?void 0:b.label)||"选择模型"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:454,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:448,columnNumber:11},void 0),r.jsxDEV(Tt,{size:16,className:`model-selector__trigger-icon ${k?"model-selector__trigger-icon--open":""}`},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:458,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:438,columnNumber:9},void 0),le()]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:433,columnNumber:7},void 0)});mt.displayName="ModelSelector";const ft=s.forwardRef(({selectedContent:t,onSend:e,disabled:i=!1,placeholder:d="输入消息..."},w)=>{const o=s.useRef(null),c=s.useRef(null),[l,S]=s.useState(""),y=t.length>0,{addHistory:N}=fs();s.useImperativeHandle(w,()=>({setContent:E=>{var v;S(E),(v=o.current)==null||v.focus()},getContent:()=>l,focus:()=>{var E;return(E=o.current)==null?void 0:E.focus()}}),[l]);const _=s.useCallback(()=>{const E=l.trim();if(!E&&t.length===0)return;const v=[];E&&v.push({type:"text",text:E}),t.forEach((x,X)=>{x.type==="image"||x.type==="graphics"?v.push({type:"data-file",data:{filename:`${x.type}-${X+1}.png`,mediaType:"image/png",url:x.url||""}}):x.type==="video"&&v.push({type:"data-file",data:{filename:`video-${X+1}.mp4`,mediaType:"video/mp4",url:x.url||""}})});const P={id:`msg_${Date.now()}`,role:"user",parts:v};E&&N(E,y,"agent"),Promise.resolve(e(P)).catch(x=>{console.error("[EnhancedChatInput] send failed:",x)}),S("")},[l,t,e,N,y]),j=s.useCallback(E=>{E.nativeEvent.isComposing||E.key==="Enter"&&!E.shiftKey&&(E.preventDefault(),_())},[_]);s.useEffect(()=>{o.current&&(o.current.style.height="auto",o.current.style.height=`${Math.min(o.current.scrollHeight,120)}px`)},[l]);const k=()=>t.length===0?null:r.jsxDEV("div",{className:"enhanced-chat-input__selection",children:r.jsxDEV(ds,{items:t,language:"zh",enableHoverPreview:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:138,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:137,columnNumber:7},void 0),$=(l.trim()||t.length>0)&&!i;return r.jsxDEV("div",{className:"enhanced-chat-input",ref:c,children:[k(),r.jsxDEV("div",{className:"enhanced-chat-input__form",children:[r.jsxDEV("div",{className:"enhanced-chat-input__input-wrapper",children:r.jsxDEV("textarea",{ref:o,className:"enhanced-chat-input__textarea",value:l,onChange:E=>S(E.target.value),onKeyDown:j,placeholder:y?"描述你想要的效果...":d,disabled:i,rows:4},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:155,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:154,columnNumber:9},void 0),r.jsxDEV("button",{className:`enhanced-chat-input__send ${$?"enhanced-chat-input__send--active":""}`,onClick:_,disabled:!$,"aria-label":"发送",children:r.jsxDEV(qt,{size:20},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:173,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:167,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:153,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:150,columnNumber:5},void 0)});ft.displayName="EnhancedChatInput";const ye={MAX_TITLE_LENGTH:30,DRAWER_MIN_WIDTH:320,DRAWER_MAX_WIDTH:500,DRAWER_DEFAULT_WIDTH_RATIO:.3},we={DRAWER_STATE:"aitu:chat:drawer-state",ACTIVE_SESSION:"aitu:chat:active-session",DATABASE_NAME:"aitu-chat",SESSIONS_STORE:"sessions",MESSAGES_STORE:"messages"},xe=ot.createInstance({name:we.DATABASE_NAME,storeName:we.SESSIONS_STORE}),he=ot.createInstance({name:we.DATABASE_NAME,storeName:we.MESSAGES_STORE});function ht(){return Lt()}function Ns(t){const e=t.trim().replace(/\n/g," ");return e.length<=ye.MAX_TITLE_LENGTH?e:e.slice(0,ye.MAX_TITLE_LENGTH-3)+"..."}async function bs(){const t=Date.now(),e={id:ht(),title:"新对话",createdAt:t,updatedAt:t,messageCount:0};return await xe.setItem(e.id,e),e}async function ve(t){return xe.getItem(t)}async function Ss(){const t=[];return await xe.iterate(e=>{t.push(e)}),await new Promise(e=>{typeof window<"u"&&"requestIdleCallback"in window?window.requestIdleCallback(()=>e(),{timeout:50}):setTimeout(e,0)}),t.sort((e,i)=>i.updatedAt-e.updatedAt)}async function We(t,e){const i=await ve(t);if(i){const d={...i,...e,updatedAt:Date.now()};await xe.setItem(t,d)}}async function ys(t){const e=await pt(t);for(const i of e)await he.removeItem(i.id);await xe.removeItem(t)}async function ks(t){await he.setItem(t.id,t);const e=await ve(t.sessionId);if(e){const i={messageCount:e.messageCount+1,updatedAt:Date.now()};await We(t.sessionId,i)}}async function pt(t){const e=[];return await he.iterate(i=>{i.sessionId===t&&e.push(i)}),e.sort((i,d)=>i.timestamp-d.timestamp)}async function Es(t,e){const i=await he.getItem(t);if(i){const d={...i,...e};await he.setItem(t,d)}}async function _s(t){const e=await he.getItem(t);if(e){await he.removeItem(t);const i=await ve(e.sessionId);i&&await We(e.sessionId,{messageCount:Math.max(0,i.messageCount-1)})}}const Ze={isOpen:!1,width:Math.min(ye.DRAWER_MAX_WIDTH,Math.max(ye.DRAWER_MIN_WIDTH,window.innerWidth*ye.DRAWER_DEFAULT_WIDTH_RATIO)),activeSessionId:null};function wt(){try{const t=localStorage.getItem(we.DRAWER_STATE);if(t)return{...Ze,...JSON.parse(t)}}catch(t){console.error("[ChatStorage] Failed to get drawer state:",t)}return Ze}function vs(t){try{const i={...wt(),...t};localStorage.setItem(we.DRAWER_STATE,JSON.stringify(i))}catch(e){console.error("[ChatStorage] Failed to set drawer state:",e)}}async function Ds(){await xe.clear(),await he.clear(),localStorage.removeItem(we.DRAWER_STATE)}const M={createSession:bs,getSession:ve,getAllSessions:Ss,updateSession:We,deleteSession:ys,addMessage:ks,getMessages:pt,updateMessage:Es,deleteMessage:_s,getDrawerState:wt,setDrawerState:vs,clearAllData:Ds,generateId:ht,generateTitle:Ns};var Y=(t=>(t.SENDING="sending",t.STREAMING="streaming",t.SUCCESS="success",t.FAILED="failed",t))(Y||{}),se=(t=>(t.USER="user",t.ASSISTANT="assistant",t))(se||{});let ce=null;function gt(t){const e={};let i=1,d=1,w=1,o=t;return o=o.replace(/data:image\/[^;]+;base64,[A-Za-z0-9+/=]+/g,c=>{const l=`[图片${i}]`;return e[l]=c,i++,l}),o=o.replace(/data:video\/[^;]+;base64,[A-Za-z0-9+/=]+/g,c=>{const l=`[视频${d}]`;return e[l]=c,d++,l}),o=o.replace(/blob:[^\s"'<>]+/g,c=>{const l=`[媒体${w}]`;return e[l]=c,w++,l}),o=o.replace(/https?:\/\/[^\s"'<>]+\.(png|jpg|jpeg|gif|webp|svg|bmp)(\?[^\s"'<>]*)?/gi,c=>{const l=`[图片${i}]`;return e[l]=c,i++,l}),o=o.replace(/https?:\/\/[^\s"'<>]+\.(mp4|webm|mov|avi|mkv)(\?[^\s"'<>]*)?/gi,c=>{const l=`[视频${d}]`;return e[l]=c,d++,l}),{sanitized:o,urlMap:e}}function Ms(t,e){let i=t;for(const[d,w]of Object.entries(e))i=i.split(d).join(w);return i}async function Is(t,e={}){const i={};let d=e.maxImageCount??Number.POSITIVE_INFINITY;return{geminiMessages:await Promise.all(t.filter(o=>o.status==="success"||o.status==="streaming").map(async o=>{const{sanitized:c,urlMap:l}=gt(o.content);Object.assign(i,l);const S=[{type:"text",text:c}];if(e.includeImageAttachments&&o.role===se.USER&&o.attachments&&o.attachments.length>0&&d>0){const y=await Gt(o.attachments,d);d-=y.length,S.push(...y)}return{role:o.role===se.USER?"user":"assistant",content:S}})),urlMap:i}}async function js(t,e,i=[],d,w,o){return Cs(t,e,i,d,w,o)}async function Cs(t,e,i=[],d,w,o){ce&&ce.abort(),ce=new AbortController;const c=ce.signal,l=Date.now().toString(),S=Date.now(),y=(typeof w=="string"?w:w==null?void 0:w.modelId)||Xe.getConfig().modelName||"unknown";try{re.trackModelCall({taskId:l,taskType:"chat",model:y,promptLength:e.length,hasUploadedImage:i.length>0,startTime:S});const N=Wt("text",w),_=$t(N==null?void 0:N.binding),j=Pt(N==null?void 0:N.binding),k=zt(i),$=Math.max(j-k,0),{geminiMessages:E,urlMap:v}=await Is(t,{includeImageAttachments:_,maxImageCount:$}),{sanitized:P,urlMap:x}=gt(e),X={...v,...x},B=Ht(E),G=Math.max(j-B,0),A=[{type:"text",text:P}];if(_&&i.length>0&&G>0){const V=await Ft(i,G);A.push(...V)}const b=[];o&&b.push({role:"system",content:[{type:"text",text:o}]}),b.push(...E,{role:"user",content:A});let I="";if(await Xe.sendChat(b,V=>{if(c.aborted)return;const ae=Ms(V,X);I=ae,d({type:"content",content:ae})},c,w||void 0),c.aborted)throw new Error("Request cancelled");const L=Date.now()-S;return re.trackModelSuccess({taskId:l,taskType:"chat",model:y,duration:L,resultSize:I.length}),d({type:"done"}),ce=null,I}catch(N){ce=null;const _=Date.now()-S;if(c.aborted||N.message==="Request cancelled"||N.name==="AbortError")throw re.trackTaskCancellation({taskId:l,taskType:"chat",duration:_}),d({type:"done"}),new Error("Request cancelled");const j=N instanceof Error?N.message:"Unknown error occurred";throw re.trackModelFailure({taskId:l,taskType:"chat",model:y,duration:_,error:j}),d({type:"error",error:j}),N}}function Ts(){ce&&(ce.abort(),ce=null)}function Rs(){return ce!==null}const et={sendChatMessage:js,stopGeneration:Ts,isGenerating:Rs},Le="[[WORKFLOW_MESSAGE]]",As=["generate_image","generate_video","generate_grid_image","generate_photo_wall"];function Us(t){var w;if(!As.includes(t.name))return t;const e={...t.arguments},i=e.model;let d=!1;if(!i)d=!0;else{const o=Kt(i),c=t.name==="generate_video";(c&&o!=="video"||!c&&o!=="image")&&(d=!0)}if(d){const o=qe.get(),c=t.name==="generate_video";let l;c?l=o.videoModelName||"veo3":l=o.imageModelName||((w=Bt[0])==null?void 0:w.id)||"gemini-2.5-flash-image-vip",e.model=l}return{...t,arguments:e}}function Vs(t){const e=[];t.aiAnalysis&&e.push(t.aiAnalysis);const i=t.steps.filter(c=>c.status==="completed"),d=t.steps.filter(c=>c.status==="failed");if(i.length>0||d.length>0){const c=[];i.length>0&&c.push(`成功执行 ${i.length} 个工具`),d.length>0&&c.push(`${d.length} 个工具执行失败`),c.length>0&&e.push(`[执行结果: ${c.join(",")}]`)}const w=t.steps.map(c=>{const l={};for(const[S,y]of Object.entries(c.args||{}))S!=="context"&&(typeof y=="string"&&y.length>200?l[S]=y.substring(0,200)+"...":l[S]=y);return{mcp:c.mcp,args:l}}),o={content:e.join(`
|
|
3
|
-
`)||`已完成任务: ${t.name}`,next:w};return JSON.stringify(o)}function qs(t){const e=[{type:"text",text:t.content}];if(t.attachments&&t.attachments.length>0)for(const i of t.attachments)e.push({type:"data-file",data:{filename:i.name,mediaType:i.type,url:i.data}});return{id:t.id,role:t.role===se.USER?"user":"assistant",parts:e}}function Ls(t,e){const d=t.parts.filter(c=>c.type==="text").map(c=>c.text).join(""),o=t.parts.filter(c=>c.type==="data-file").map((c,l)=>{const S=c.data;return{id:`${t.id}-att-${l}`,name:S.filename,type:S.mediaType,size:0,data:S.url,isBlob:!1}});return{id:t.id,sessionId:e,role:t.role==="user"?se.USER:se.ASSISTANT,content:d,timestamp:Date.now(),status:Y.SUCCESS,attachments:o.length>0?o:void 0}}function Ws(t){return t.workflow&&t.content.startsWith(Le)?{...t,content:Vs(t.workflow)}:t}function tt(t){return t.parts.filter(e=>e.type==="text").map(e=>e.text).join("")}us();function $s(t){const{sessionId:e,temporaryModel:i,onToolCalls:d,onWorkflowUpdate:w}=t,o=s.useRef(Ot()),c=s.useRef(d);c.current=d;const l=s.useRef(w);l.current=w;const S=s.useRef(i);S.current=i;const[y,N]=s.useState([]),[_,j]=s.useState("ready"),[k,$]=s.useState(!1),E=s.useRef(null),v=s.useRef([]),P=s.useRef(!1);s.useEffect(()=>{if(!e){N([]),v.current=[];return}(async()=>{$(!0);try{const I=await M.getMessages(e);v.current=I,N(I.map(qs))}catch(I){console.error("[useChatHandler] Failed to load messages:",I),N([]),v.current=[]}finally{$(!1)}})()},[e]);const x=s.useCallback(async b=>{if(!e)return;if(P.current){console.warn("[useChatHandler] Message already being sent, ignoring duplicate call");return}P.current=!0,j("submitted");const I=Ls(b,e);await M.addMessage(I),N(q=>[...q,b]);const L=await M.getSession(e);await M.updateSession(e,{updatedAt:Date.now(),messageCount:((L==null?void 0:L.messageCount)||0)+1});const V=M.generateId();E.current=V;const ae={id:V,role:"assistant",parts:[{type:"text",text:""}]};N(q=>[...q,ae]),j("streaming");const oe=v.current.map(Ws);oe.push(I),v.current=[...v.current,I];const O=tt(b);let Z="",le=!1;try{await et.sendChatMessage(oe.slice(0,-1),O,I.attachments||[],q=>{if(q.type==="content"&&q.content)Z=q.content,N(h=>h.map(u=>u.id===V?{...u,parts:[{type:"text",text:Z}]}:u));else if(q.type==="done"){const h=Xt(Z),u=Jt(Z)||Z;if(h.length>0&&c.current){const W=h.map(ee=>Us(ee)),J=async()=>{const ee=[];for(const ue of W)try{const me=await Qt.executeTool(ue);ee.push({toolCall:ue,success:me.success,data:me.data,error:me.error,taskId:me.taskId})}catch(me){ee.push({toolCall:ue,success:!1,error:me.message||"工具执行失败"})}return ee},de=`${Le}${V}`;N(ee=>ee.map(ue=>ue.id===V?{...ue,parts:[{type:"text",text:de}]}:ue)),c.current(W,V,J,u)}j("ready");const f={id:V,sessionId:e,role:se.ASSISTANT,content:h.length>0?`${Le}${V}`:Z,timestamp:Date.now(),status:h.length>0?Y.STREAMING:Y.SUCCESS};M.addMessage(f),v.current=[...v.current,f],M.updateSession(e,{updatedAt:Date.now(),messageCount:((L==null?void 0:L.messageCount)||0)+2}),E.current=null,P.current=!1}else if(q.type==="error"&&q.error){le=!0,j("error");const h=`❌ 错误: ${q.error}`;N(f=>f.map(W=>W.id===V?{...W,parts:[{type:"text",text:h}]}:W));const u={id:V,sessionId:e,role:se.ASSISTANT,content:h,timestamp:Date.now(),status:Y.FAILED,error:q.error};M.addMessage(u),v.current=[...v.current,u],E.current=null,P.current=!1}},S.current,o.current)}catch(q){if(q.message!=="Request cancelled"&&!le){j("error"),console.error("[useChatHandler] Stream error:",q);const h=`❌ 错误: ${q.message||"未知错误"}`;if(N(u=>u.map(f=>f.id===V?{...f,parts:[{type:"text",text:h}]}:f)),e&&V){const u={id:V,sessionId:e,role:se.ASSISTANT,content:h,timestamp:Date.now(),status:Y.FAILED,error:q.message||"未知错误"};M.addMessage(u),v.current=[...v.current,u]}}E.current=null,P.current=!1}},[e]),X=s.useCallback(async()=>{if(et.stopGeneration(),j("ready"),E.current&&e){const b=y.find(I=>I.id===E.current);if(b){const I=tt(b),L={id:b.id,sessionId:e,role:se.ASSISTANT,content:I,timestamp:Date.now(),status:Y.SUCCESS};await M.addMessage(L)}E.current=null}},[e,y]),B=s.useCallback(b=>{if(y.length<2)return;const I=[...y].reverse().findIndex(oe=>oe.role==="user");if(I===-1)return;const L=y.length-1-I,V=y[L],ae=y.slice(0,L+1);N(ae),x(V)},[y,x]),G=s.useCallback((b,I)=>{N(b),I&&(v.current=I)},[]),A=s.useCallback((b,I)=>{v.current=v.current.map(L=>L.id===b?{...L,workflow:I}:L)},[]);return{messages:y,status:_,sendMessage:x,stop:X,regenerate:B,setMessages:N,setMessagesWithRaw:G,updateRawMessageWorkflow:A,isLoading:k}}const Ps=ie.lazy(()=>ct(()=>import("./ChatMessagesArea-7lBnHy3Q.js").then(t=>t.C),__vite__mapDeps([0,1,2,3,4,5,6]),import.meta.url)),st="[[WORKFLOW_MESSAGE]]";function zs(t,e){switch(t){case"generate_image":return`生成图片: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_video":return`生成视频: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_audio":return`生成音频: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_text":return`生成文本: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_grid_image":return`生成宫格图: ${((e==null?void 0:e.theme)||"").substring(0,30)}...`;case"canvas_insertion":return"插入到画布";case"generate_mermaid":return"生成流程图";case"generate_mindmap":return"生成思维导图";default:return`执行 ${t}`}}const at="chat-drawer-width",Hs=Math.max(375,window.innerWidth*.5),nt=375,Fs=s.forwardRef(({defaultOpen:t=!1,onOpenChange:e},i)=>{const[d,w]=s.useState(()=>M.getDrawerState().isOpen??t),[o,c]=s.useState([]),[l,S]=s.useState(null),[y,N]=s.useState(!1),[_,j]=s.useState(()=>{const n=localStorage.getItem(at);if(n){const a=parseInt(n,10);if(!isNaN(a)&&a>=nt)return Math.min(a,window.innerWidth-60)}return Hs}),[k,$]=s.useState(!1),E=s.useRef(null),[v,P]=s.useState(()=>Je("text").modelId),[x,X]=s.useState(()=>{const n=Je("text");return Se(n.profileId,n.modelId)}),[B,G]=s.useState(new Map),A=s.useRef(null),[b,I]=s.useState(null),{executeRetry:L,selectedContent:V,setIsDrawerOpen:ae,setDrawerWidth:oe}=hs();s.useEffect(()=>{ae(d)},[d,ae]),s.useEffect(()=>{oe(_)},[_,oe]);const O=ie.useRef(null),Z=ie.useRef(null),{appState:le,setAppState:q}=Yt();s.useEffect(()=>{if(!k)return;const n=p=>{const m=window.innerWidth-p.clientX,g=Math.max(nt,Math.min(m,window.innerWidth-60));j(g)},a=()=>{$(!1),localStorage.setItem(at,String(_))};return document.addEventListener("mousemove",n),document.addEventListener("mouseup",a),document.body.style.userSelect="none",document.body.style.cursor="ew-resize",()=>{document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",a),document.body.style.userSelect="",document.body.style.cursor=""}},[k,_]),s.useEffect(()=>{const n=()=>{const a=window.innerWidth-60;_>a&&j(a)};return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[_]);const h=s.useCallback(n=>{n.preventDefault(),$(!0)},[]),u=s.useCallback(async(n,a,p,m)=>{var U,D;const T={id:`workflow-${Date.now()}`,name:"AI 智能生成",generationType:(U=n[0])!=null&&U.name.includes("video")?"video":(D=n[0])!=null&&D.name.includes("audio")?"audio":"image",prompt:m||"",aiAnalysis:m,count:n.length,steps:n.map((C,F)=>({id:`step-${F}`,mcp:C.name,status:"pending",description:zs(C.name,C.arguments),args:C.arguments}))};G(C=>{const F=new Map(C);return F.set(a,T),F}),A.current=a,M.updateMessage(a,{workflow:T});try{const C=await p();re.track("chat_tool_execution_complete",{success:!0,resultCount:C.length}),G(F=>{const R=new Map(F),z=R.get(a);if(z){const K={...z,steps:z.steps.map((fe,be)=>{const Q=C[be];return{...fe,status:Q!=null&&Q.success?"completed":"failed",error:Q==null?void 0:Q.error,result:Q==null?void 0:Q.data}})};R.set(a,K),M.updateMessage(a,{workflow:K,status:Y.SUCCESS})}return R})}catch(C){console.error("[ChatDrawer] Tool execution failed:",C),G(F=>{const R=new Map(F),z=R.get(a);if(z){const K={...z,steps:z.steps.map(fe=>({...fe,status:"failed",error:C.message||"执行失败"}))};R.set(a,K),M.updateMessage(a,{workflow:K,status:Y.FAILED})}return R})}},[]),f=$s({sessionId:l,temporaryModel:x||v,onToolCalls:u}),W=s.useRef(f.sendMessage);W.current=f.sendMessage,s.useEffect(()=>{(async()=>{const a=M.getDrawerState(),p=await M.getAllSessions();c(p);let m=null;if(a.activeSessionId?(m=a.activeSessionId,S(a.activeSessionId)):p.length>0&&(m=p[0].id,S(p[0].id)),m)try{const g=await M.getMessages(m),T=new Map;for(const D of g)D.workflow&&T.set(D.id,D.workflow);G(T);const U=g.find(D=>D.workflow&&D.status===Y.STREAMING);A.current=(U==null?void 0:U.id)||null}catch(g){console.error("[ChatDrawer] Failed to load workflow messages:",g)}})()},[]),s.useEffect(()=>{M.setDrawerState({isOpen:d,activeSessionId:l})},[d,l]),s.useEffect(()=>{if(l&&ne.current){const n=ne.current;ne.current=null,setTimeout(()=>{W.current(n)},100)}},[l]),s.useEffect(()=>{if(!le.openSettings&&ne.current){const n=qe.get();if(n!=null&&n.apiKey){const a=ne.current;ne.current=null,l?setTimeout(()=>{W.current(a)},100):(async()=>{const p=await M.createSession();c(m=>[p,...m]),S(p.id),ne.current=a})()}}},[le.openSettings,l]),s.useEffect(()=>{const n=a=>{a.key==="Escape"&&d&&(w(!1),e==null||e(!1))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[d,e]),s.useEffect(()=>{let n=null;return(async()=>{const{workflowSubmissionService:p}=await ct(async()=>{const{workflowSubmissionService:m}=await import("./workflow-submission-service-D9jgDszg.js").then(g=>g.a);return{workflowSubmissionService:m}},__vite__mapDeps([0]),import.meta.url);n=p.subscribeToAllEvents(m=>{const g=m;G(T=>{let U=null;for(const[R,z]of T.entries())if(z.id===g.workflowId){U=R;break}if(!U)return T;const D=T.get(U);if(!D)return T;const C=new Map(T);let F;switch(g.type){case"step":{F={...D,steps:D.steps.map(R=>R.id===g.stepId?{...R,status:g.status||R.status,result:g.result??R.result,error:g.error??R.error}:R)};break}case"steps_added":{const z=(g.steps||[]).map(K=>({id:K.id,mcp:K.mcp,args:K.args,description:K.description,status:K.status}));F={...D,steps:[...D.steps,...z]};break}case"completed":case"failed":{const R=g.type==="completed"?"completed":"failed";F={...D,status:R,steps:D.steps.map(z=>{if(z.status==="running"||z.status==="pending"){const K=z.result;return K!=null&&K.taskId?z:{...z,status:R,error:g.type==="failed"?g.error:void 0}}return z})};break}default:return T}return C.set(U,F),M.updateMessage(U,{workflow:F}),C})})})().catch(p=>{console.error("[ChatDrawer] Failed to setup workflow sync:",p)}),()=>{n==null||n.unsubscribe()}},[]),s.useEffect(()=>{if(!y)return;const n=p=>{const m=p.target;m.closest(".t-dialog")===null&&O.current&&!O.current.contains(m)&&Z.current&&!Z.current.contains(m)&&N(!1)},a=setTimeout(()=>{document.addEventListener("mousedown",n)},100);return()=>{clearTimeout(a),document.removeEventListener("mousedown",n)}},[y]);const J=s.useCallback(()=>{w(n=>{const a=!n;return e==null||e(a),a})},[e]),de=s.useCallback(()=>{w(!1),e==null||e(!1)},[e]),ee=s.useCallback(async()=>{re.track("chat_session_create");const n=await M.createSession();c(a=>[n,...a]),S(n.id),N(!1),G(new Map),A.current=null,P(void 0)},[]),ue=s.useCallback(()=>{N(n=>!n)},[]),me=s.useCallback(async n=>{re.track("chat_session_select"),S(n),N(!1),P(void 0);try{const a=await M.getMessages(n),p=new Map;for(const g of a)g.workflow&&p.set(g.id,g.workflow);G(p);const m=a.find(g=>g.workflow&&g.status===Y.STREAMING);A.current=(m==null?void 0:m.id)||null}catch(a){console.error("[ChatDrawer] Failed to load workflow messages:",a),G(new Map),A.current=null}},[]),xt=s.useCallback(async n=>{re.track("chat_session_delete"),await M.deleteSession(n),c(a=>{const p=a.filter(m=>m.id!==n);if(l===n){const m=p[0]||null;S((m==null?void 0:m.id)||null)}return p})},[l]),De=s.useCallback(async(n,a)=>{re.track("chat_session_rename"),await M.updateSession(n,{title:a}),c(p=>p.map(m=>m.id===n?{...m,title:a}:m))},[]),ne=ie.useRef(null),Ne=s.useCallback(async n=>{try{re.track("chat_message_send",{hasImages:n.parts.some(p=>p.type==="image_url")});const a=qe.get();if(!(a!=null&&a.apiKey)){ne.current=n,q({...le,openSettings:!0});return}if(ne.current=null,!l){const p=await M.createSession();c(m=>[p,...m]),S(p.id),ne.current=n;return}await f.sendMessage(n)}catch(a){console.error("[ChatDrawer] send message failed:",a),ne.current=n}},[l,f,le,q]),$e=s.useCallback(async n=>{var Oe;const{context:a,workflow:p,textModel:m,autoOpen:g=!0}=n;g&&(w(!0),e==null||e(!0)),m&&P(m);const T=await M.createSession(),U=[];a.userInstruction&&U.push(a.userInstruction),a.selection.texts.length>0&&U.push(`
|
|
2
|
+
import{aI as ie,r as s,y as r,kf as vt,i9 as Dt,f_ as rt,fP as Mt,bV as Ee,hm as It,lE as jt,hv as Se,hy as Ct,lF as it,f$ as Tt,dM as Rt,ig as At,ih as Ut,bD as Vt,lG as qt,lH as Lt,bj as ot,h7 as Xe,fR as re,lI as Wt,lJ as $t,lK as Pt,lL as zt,lM as Ht,lN as Ft,lO as Gt,l3 as Kt,hd as qe,l2 as Bt,kR as Ot,lP as Xt,lQ as Jt,hK as Qt,hw as Je,bL as Yt,b7 as Zt,hQ as es,lR as ts,_ as ct}from"./tool-windows-4YKdHn6i.js";import{u as ss,b as as,i as Qe,V as ns,j as rs,h as is,f as os}from"./use-runtime-models-DozK0BOE.js";import{a as cs,f as Ye,b as ls}from"./model-selection-BOQrGhyv.js";import{S as ds,i as us,u as ms}from"./index-zpftae7X.js";import{u as fs,e as hs}from"./main-0j7izJQ5.js";const lt=ie.memo(({session:t,isActive:e,onSelect:i,onDelete:d,onRename:w})=>{const[o,c]=s.useState(!1),[l,S]=s.useState(t.title),y=s.useRef(null),N=s.useCallback(()=>{o||i()},[i,o]),_=s.useCallback(x=>{x.stopPropagation(),d()},[d]),j=s.useCallback(x=>{x.stopPropagation(),S(t.title),c(!0)},[t.title]),k=s.useCallback(()=>{const x=l.trim();x&&x!==t.title&&w(x),c(!1)},[l,t.title,w]),$=s.useCallback(()=>{S(t.title),c(!1)},[t.title]),E=s.useCallback(x=>{x.key==="Enter"?(x.preventDefault(),k()):x.key==="Escape"&&(x.preventDefault(),$())},[k,$]),v=s.useCallback(x=>{S(x.target.value)},[]);s.useEffect(()=>{o&&y.current&&(y.current.focus(),y.current.select())},[o]);const P=s.useMemo(()=>{const x=new Date(t.updatedAt),X=new Date;return x.toDateString()===X.toDateString()?x.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):x.toLocaleDateString("zh-CN",{month:"short",day:"numeric"})},[t.updatedAt]);return r.jsxDEV("div",{className:`session-item ${e?"session-item--active":""} ${o?"session-item--editing":""}`,"data-track":"chat_click_session_select",onClick:N,role:"button",tabIndex:0,onKeyDown:x=>!o&&x.key==="Enter"&&N(),children:[r.jsxDEV("div",{className:"session-item__content",children:[o?r.jsxDEV("input",{ref:y,className:"session-item__title-input",value:l,onChange:v,onKeyDown:E,onBlur:k,onClick:x=>x.stopPropagation(),maxLength:50},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:101,columnNumber:13},void 0):r.jsxDEV("div",{className:"session-item__title",children:t.title},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:112,columnNumber:13},void 0),r.jsxDEV("div",{className:"session-item__time",children:P},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:114,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:99,columnNumber:9},void 0),!o&&r.jsxDEV("div",{className:"session-item__actions",children:[r.jsxDEV("button",{className:"session-item__edit","data-track":"chat_click_session_edit",onClick:j,"aria-label":`编辑会话标题: ${t.title}`,children:r.jsxDEV(vt,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:124,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:118,columnNumber:13},void 0),r.jsxDEV("button",{className:"session-item__delete","data-track":"chat_click_session_delete",onClick:_,"aria-label":`删除会话: ${t.title}`,children:r.jsxDEV(Dt,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:132,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:126,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:117,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:91,columnNumber:7},void 0)});lt.displayName="SessionItem";const dt=ie.memo(({sessions:t,activeSessionId:e,onSelectSession:i,onNewSession:d,onDeleteSession:w,onRenameSession:o})=>{const[c,l]=ie.useState(null),S=s.useCallback(k=>{i(k)},[i]),y=s.useCallback(k=>{l(k)},[]),N=s.useCallback(()=>{c&&(w(c),l(null))},[c,w]),_=s.useCallback(()=>{l(null)},[]),j=s.useCallback((k,$)=>{o(k,$)},[o]);return r.jsxDEV("div",{className:"session-list",children:[r.jsxDEV("div",{className:"session-list__header",children:[r.jsxDEV("span",{className:"session-list__title",children:"会话列表"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:49,columnNumber:11},void 0),r.jsxDEV("button",{className:"session-list__new-btn","data-track":"chat_click_session_new",onClick:d,"aria-label":"新建会话",children:[r.jsxDEV(rt,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:56,columnNumber:13},void 0),r.jsxDEV("span",{children:"新建"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:57,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:50,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:48,columnNumber:9},void 0),r.jsxDEV("div",{className:"session-list__items",children:t.length===0?r.jsxDEV("div",{className:"session-list__empty",children:"暂无会话"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:62,columnNumber:13},void 0):t.map(k=>r.jsxDEV(lt,{session:k,isActive:k.id===e,onSelect:()=>S(k.id),onDelete:()=>y(k.id),onRename:$=>j(k.id,$)},k.id,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:65,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:60,columnNumber:9},void 0),r.jsxDEV(Mt,{open:c!==null,title:"删除会话",description:"确定删除此会话吗?删除后无法恢复。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:k=>{k||_()},onConfirm:N},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:77,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:47,columnNumber:7},void 0)});dt.displayName="SessionList";const ut=ie.memo(({isOpen:t,onClick:e,drawerWidth:i})=>{const d=t&&i?{right:i-18}:void 0;return r.jsxDEV(Ee,{content:t?"收起对话":"展开对话",children:r.jsxDEV("button",{className:`chat-drawer-trigger ${t?"chat-drawer-trigger--active":""}`,"data-track":t?"chat_click_drawer_close":"chat_click_drawer_open",onClick:e,"aria-label":t?"收起对话":"展开对话","aria-expanded":t,style:d,children:r.jsxDEV(It,{size:16,className:"chat-drawer-trigger__icon"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawerTrigger.tsx",lineNumber:38,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawerTrigger.tsx",lineNumber:26,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawerTrigger.tsx",lineNumber:25,columnNumber:7},void 0)});ut.displayName="ChatDrawerTrigger";function _e(t){return t.sourceProfileName||it[t.vendor]||t.id}const ps=ie.memo(({model:t})=>{const e=is(t.sourceProfileId,t.id);return e?r.jsxDEV("span",{className:"model-selector__item-price",children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:60,columnNumber:12},void 0):null}),ws=ie.memo(({model:t})=>{const e=os(t.sourceProfileId,t.id);return e!=null&&e.description?r.jsxDEV("div",{className:"model-selector__item-desc",children:e.description},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:69,columnNumber:7},void 0):null});function gs(t,e){var o;const i=_e(t),d=(o=t.description)==null?void 0:o.trim(),w=(e==null?void 0:e.includeProvider)??!0;return d?!w||d.includes(i)?d:`${i} · ${d}`:w?i:""}function xs(t){return _e(t).trim().slice(0,1).toUpperCase()||"M"}const mt=ie.memo(({className:t,value:e,valueRef:i,onChange:d,variant:w="capsule"})=>{var q;const o=ss("text"),c=((q=o[0])==null?void 0:q.id)||jt,[l,S]=s.useState(c),[y,N]=s.useState(()=>Se(null,c)),_=e??l,j=i===void 0?y:i,[k,$]=s.useState(!1),[E,v]=s.useState(""),[P,x]=s.useState(null),X=s.useRef(null),B=s.useRef(null);s.useEffect(()=>{!e&&c&&l!==c&&(S(c),N(Se(null,c)))},[c,l,e]),s.useEffect(()=>{if(!k)return;const h=f=>{const W=f.target;X.current&&!X.current.contains(W)&&B.current&&!B.current.contains(W)&&($(!1),v(""))},u=setTimeout(()=>{document.addEventListener("mousedown",h)},100);return()=>{clearTimeout(u),document.removeEventListener("mousedown",h)}},[k]);const G=s.useMemo(()=>_?cs(_,j):null,[_,j]),A=s.useMemo(()=>{if(Ye(o,_,j)||!_)return o;const u=Ct("text",_,j);return u?[u,...o]:o},[o,_,j]),b=s.useMemo(()=>Ye(A,_,j)||A.find(h=>h.id===_),[A,_,j]),I=s.useCallback(h=>{const u=Se(h.sourceProfileId||null,h.id);e===void 0&&S(h.id),i===void 0&&N(u),d==null||d(h.id,u),$(!1),v("")},[e,i,d]),L=s.useCallback(()=>{const h=!k;$(h),h?x((b==null?void 0:b.vendor)||null):v("")},[b==null?void 0:b.vendor,k]),V=s.useMemo(()=>{const h=new Map,u=[];return A.forEach(f=>{h.has(f.vendor)||(u.push(f.vendor),h.set(f.vendor,0)),h.set(f.vendor,(h.get(f.vendor)??0)+1)}),u.map(f=>({id:f,label:it[f],count:h.get(f)??0,icon:r.jsxDEV(as,{vendor:f,size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:225,columnNumber:15},void 0)}))},[A]),ae=s.useCallback(h=>{x(h)},[]),oe=s.useMemo(()=>{const h=E.toLowerCase().trim();return h?A.filter(u=>{var W,J;const f=_e(u).toLowerCase();return u.id.toLowerCase().includes(h)||u.label.toLowerCase().includes(h)||((W=u.shortLabel)==null?void 0:W.toLowerCase().includes(h))||((J=u.description)==null?void 0:J.toLowerCase().includes(h))||f.includes(h)}):P?A.filter(u=>u.vendor===P):A},[E,P,A]),[O,Z]=s.useState({top:0,left:0,width:0,bottom:0,placement:"bottom",maxHeight:480});s.useLayoutEffect(()=>{if(!k)return;const h=()=>{if(!B.current)return;const u=B.current.getBoundingClientRect(),f=window.innerHeight,W=f-u.bottom,J=u.top,de=W<400&&J>W?"top":"bottom",ee=de==="top"?J-16:f-u.bottom-16;Z({top:u.top,left:u.left,width:u.width,bottom:u.bottom,placement:de,maxHeight:Math.min(Math.max(ee,200),600)})};return h(),window.addEventListener("resize",h),window.addEventListener("scroll",h,!0),()=>{window.removeEventListener("resize",h),window.removeEventListener("scroll",h,!0)}},[k]);const le=()=>{if(!k)return null;const h=r.jsxDEV("div",{ref:X,className:"model-selector__dropdown",style:{position:"fixed",zIndex:Rt.DROPDOWN_PORTAL,left:O.left,top:O.placement==="bottom"?O.bottom+8:"auto",bottom:O.placement==="top"?window.innerHeight-O.top+8:"auto",minWidth:360,width:w==="form"?O.width:"auto",maxHeight:O.maxHeight,visibility:O.width===0?"hidden":"visible",transformOrigin:O.placement==="bottom"?"top left":"bottom left",display:"flex",flexDirection:"column"},onClick:u=>u.stopPropagation(),children:[r.jsxDEV("div",{className:"model-selector__search",children:r.jsxDEV(At,{value:E,onChange:v,placeholder:"搜索模型...",prefixIcon:r.jsxDEV(Ut,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:339,columnNumber:27},void 0),clearable:!0,autofocus:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:335,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:334,columnNumber:11},void 0),r.jsxDEV(ns,{tabs:V,activeTab:P,onTabChange:ae,searchQuery:E,compact:!0,children:r.jsxDEV("div",{className:"model-selector__list",children:oe.length===0?r.jsxDEV("div",{className:"model-selector__empty",children:"未找到匹配的模型"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:354,columnNumber:17},void 0):oe.map(u=>{const f=ls(u),W=f===G,J=!!E.trim(),de=gs(u,{includeProvider:!J});return r.jsxDEV("button",{className:`model-selector__item ${W?"model-selector__item--active":""}`,"data-track":"chat_click_model_select",onClick:()=>I(u),children:[r.jsxDEV("span",{className:"model-selector__item-icon model-selector__item-icon--text","aria-hidden":"true",children:xs(u)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:372,columnNumber:23},void 0),r.jsxDEV("div",{className:"model-selector__item-content",children:[r.jsxDEV("div",{className:"model-selector__item-header",children:[r.jsxDEV("span",{className:"model-selector__item-name",children:u.shortLabel||u.label},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:380,columnNumber:27},void 0),J?r.jsxDEV("span",{className:"model-selector__item-provider",children:_e(u)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:384,columnNumber:29},void 0):null,r.jsxDEV(Qe,{modelId:u.id,profileId:u.sourceProfileId||null},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:388,columnNumber:27},void 0),r.jsxDEV(rs,{modelId:u.id},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:392,columnNumber:27},void 0),r.jsxDEV(ps,{model:u},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:393,columnNumber:27},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:379,columnNumber:25},void 0),de?r.jsxDEV("div",{className:"model-selector__item-desc",children:de},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:396,columnNumber:27},void 0):r.jsxDEV(ws,{model:u},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:400,columnNumber:27},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:378,columnNumber:23},void 0),W&&r.jsxDEV("svg",{className:"model-selector__check",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:r.jsxDEV("path",{d:"M13.3334 4L6.00002 11.3333L2.66669 8",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:411,columnNumber:27},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:404,columnNumber:25},void 0)]},f,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:364,columnNumber:21},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:352,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:345,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:306,columnNumber:9},void 0);return Vt.createPortal(h,document.body)};return r.jsxDEV("div",{className:`model-selector ${t||""} model-selector--variant-${w}`,children:[r.jsxDEV("button",{ref:B,className:`model-selector__trigger ${k?"model-selector__trigger--active":""}`,"data-track":"chat_click_model_selector",onClick:L,"aria-label":"选择模型","aria-expanded":k,children:[r.jsxDEV("div",{className:"model-selector__trigger-content",children:[r.jsxDEV(Qe,{modelId:(b==null?void 0:b.id)||_,profileId:(b==null?void 0:b.sourceProfileId)||null,className:"model-selector__trigger-health"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:449,columnNumber:13},void 0),r.jsxDEV("span",{className:"model-selector__trigger-text",children:(b==null?void 0:b.shortLabel)||(b==null?void 0:b.label)||"选择模型"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:454,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:448,columnNumber:11},void 0),r.jsxDEV(Tt,{size:16,className:`model-selector__trigger-icon ${k?"model-selector__trigger-icon--open":""}`},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:458,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:438,columnNumber:9},void 0),le()]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:433,columnNumber:7},void 0)});mt.displayName="ModelSelector";const ft=s.forwardRef(({selectedContent:t,onSend:e,disabled:i=!1,placeholder:d="输入消息..."},w)=>{const o=s.useRef(null),c=s.useRef(null),[l,S]=s.useState(""),y=t.length>0,{addHistory:N}=fs();s.useImperativeHandle(w,()=>({setContent:E=>{var v;S(E),(v=o.current)==null||v.focus()},getContent:()=>l,focus:()=>{var E;return(E=o.current)==null?void 0:E.focus()}}),[l]);const _=s.useCallback(()=>{const E=l.trim();if(!E&&t.length===0)return;const v=[];E&&v.push({type:"text",text:E}),t.forEach((x,X)=>{x.type==="image"||x.type==="graphics"?v.push({type:"data-file",data:{filename:`${x.type}-${X+1}.png`,mediaType:"image/png",url:x.url||""}}):x.type==="video"&&v.push({type:"data-file",data:{filename:`video-${X+1}.mp4`,mediaType:"video/mp4",url:x.url||""}})});const P={id:`msg_${Date.now()}`,role:"user",parts:v};E&&N(E,y,"agent"),Promise.resolve(e(P)).catch(x=>{console.error("[EnhancedChatInput] send failed:",x)}),S("")},[l,t,e,N,y]),j=s.useCallback(E=>{E.nativeEvent.isComposing||E.key==="Enter"&&!E.shiftKey&&(E.preventDefault(),_())},[_]);s.useEffect(()=>{o.current&&(o.current.style.height="auto",o.current.style.height=`${Math.min(o.current.scrollHeight,120)}px`)},[l]);const k=()=>t.length===0?null:r.jsxDEV("div",{className:"enhanced-chat-input__selection",children:r.jsxDEV(ds,{items:t,language:"zh",enableHoverPreview:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:138,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:137,columnNumber:7},void 0),$=(l.trim()||t.length>0)&&!i;return r.jsxDEV("div",{className:"enhanced-chat-input",ref:c,children:[k(),r.jsxDEV("div",{className:"enhanced-chat-input__form",children:[r.jsxDEV("div",{className:"enhanced-chat-input__input-wrapper",children:r.jsxDEV("textarea",{ref:o,className:"enhanced-chat-input__textarea",value:l,onChange:E=>S(E.target.value),onKeyDown:j,placeholder:y?"描述你想要的效果...":d,disabled:i,rows:4},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:155,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:154,columnNumber:9},void 0),r.jsxDEV("button",{className:`enhanced-chat-input__send ${$?"enhanced-chat-input__send--active":""}`,onClick:_,disabled:!$,"aria-label":"发送",children:r.jsxDEV(qt,{size:20},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:173,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:167,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:153,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:150,columnNumber:5},void 0)});ft.displayName="EnhancedChatInput";const ye={MAX_TITLE_LENGTH:30,DRAWER_MIN_WIDTH:320,DRAWER_MAX_WIDTH:500,DRAWER_DEFAULT_WIDTH_RATIO:.3},we={DRAWER_STATE:"aitu:chat:drawer-state",ACTIVE_SESSION:"aitu:chat:active-session",DATABASE_NAME:"aitu-chat",SESSIONS_STORE:"sessions",MESSAGES_STORE:"messages"},xe=ot.createInstance({name:we.DATABASE_NAME,storeName:we.SESSIONS_STORE}),he=ot.createInstance({name:we.DATABASE_NAME,storeName:we.MESSAGES_STORE});function ht(){return Lt()}function Ns(t){const e=t.trim().replace(/\n/g," ");return e.length<=ye.MAX_TITLE_LENGTH?e:e.slice(0,ye.MAX_TITLE_LENGTH-3)+"..."}async function bs(){const t=Date.now(),e={id:ht(),title:"新对话",createdAt:t,updatedAt:t,messageCount:0};return await xe.setItem(e.id,e),e}async function ve(t){return xe.getItem(t)}async function Ss(){const t=[];return await xe.iterate(e=>{t.push(e)}),await new Promise(e=>{typeof window<"u"&&"requestIdleCallback"in window?window.requestIdleCallback(()=>e(),{timeout:50}):setTimeout(e,0)}),t.sort((e,i)=>i.updatedAt-e.updatedAt)}async function We(t,e){const i=await ve(t);if(i){const d={...i,...e,updatedAt:Date.now()};await xe.setItem(t,d)}}async function ys(t){const e=await pt(t);for(const i of e)await he.removeItem(i.id);await xe.removeItem(t)}async function ks(t){await he.setItem(t.id,t);const e=await ve(t.sessionId);if(e){const i={messageCount:e.messageCount+1,updatedAt:Date.now()};await We(t.sessionId,i)}}async function pt(t){const e=[];return await he.iterate(i=>{i.sessionId===t&&e.push(i)}),e.sort((i,d)=>i.timestamp-d.timestamp)}async function Es(t,e){const i=await he.getItem(t);if(i){const d={...i,...e};await he.setItem(t,d)}}async function _s(t){const e=await he.getItem(t);if(e){await he.removeItem(t);const i=await ve(e.sessionId);i&&await We(e.sessionId,{messageCount:Math.max(0,i.messageCount-1)})}}const Ze={isOpen:!1,width:Math.min(ye.DRAWER_MAX_WIDTH,Math.max(ye.DRAWER_MIN_WIDTH,window.innerWidth*ye.DRAWER_DEFAULT_WIDTH_RATIO)),activeSessionId:null};function wt(){try{const t=localStorage.getItem(we.DRAWER_STATE);if(t)return{...Ze,...JSON.parse(t)}}catch(t){console.error("[ChatStorage] Failed to get drawer state:",t)}return Ze}function vs(t){try{const i={...wt(),...t};localStorage.setItem(we.DRAWER_STATE,JSON.stringify(i))}catch(e){console.error("[ChatStorage] Failed to set drawer state:",e)}}async function Ds(){await xe.clear(),await he.clear(),localStorage.removeItem(we.DRAWER_STATE)}const M={createSession:bs,getSession:ve,getAllSessions:Ss,updateSession:We,deleteSession:ys,addMessage:ks,getMessages:pt,updateMessage:Es,deleteMessage:_s,getDrawerState:wt,setDrawerState:vs,clearAllData:Ds,generateId:ht,generateTitle:Ns};var Y=(t=>(t.SENDING="sending",t.STREAMING="streaming",t.SUCCESS="success",t.FAILED="failed",t))(Y||{}),se=(t=>(t.USER="user",t.ASSISTANT="assistant",t))(se||{});let ce=null;function gt(t){const e={};let i=1,d=1,w=1,o=t;return o=o.replace(/data:image\/[^;]+;base64,[A-Za-z0-9+/=]+/g,c=>{const l=`[图片${i}]`;return e[l]=c,i++,l}),o=o.replace(/data:video\/[^;]+;base64,[A-Za-z0-9+/=]+/g,c=>{const l=`[视频${d}]`;return e[l]=c,d++,l}),o=o.replace(/blob:[^\s"'<>]+/g,c=>{const l=`[媒体${w}]`;return e[l]=c,w++,l}),o=o.replace(/https?:\/\/[^\s"'<>]+\.(png|jpg|jpeg|gif|webp|svg|bmp)(\?[^\s"'<>]*)?/gi,c=>{const l=`[图片${i}]`;return e[l]=c,i++,l}),o=o.replace(/https?:\/\/[^\s"'<>]+\.(mp4|webm|mov|avi|mkv)(\?[^\s"'<>]*)?/gi,c=>{const l=`[视频${d}]`;return e[l]=c,d++,l}),{sanitized:o,urlMap:e}}function Ms(t,e){let i=t;for(const[d,w]of Object.entries(e))i=i.split(d).join(w);return i}async function Is(t,e={}){const i={};let d=e.maxImageCount??Number.POSITIVE_INFINITY;return{geminiMessages:await Promise.all(t.filter(o=>o.status==="success"||o.status==="streaming").map(async o=>{const{sanitized:c,urlMap:l}=gt(o.content);Object.assign(i,l);const S=[{type:"text",text:c}];if(e.includeImageAttachments&&o.role===se.USER&&o.attachments&&o.attachments.length>0&&d>0){const y=await Gt(o.attachments,d);d-=y.length,S.push(...y)}return{role:o.role===se.USER?"user":"assistant",content:S}})),urlMap:i}}async function js(t,e,i=[],d,w,o){return Cs(t,e,i,d,w,o)}async function Cs(t,e,i=[],d,w,o){ce&&ce.abort(),ce=new AbortController;const c=ce.signal,l=Date.now().toString(),S=Date.now(),y=(typeof w=="string"?w:w==null?void 0:w.modelId)||Xe.getConfig().modelName||"unknown";try{re.trackModelCall({taskId:l,taskType:"chat",model:y,promptLength:e.length,hasUploadedImage:i.length>0,startTime:S});const N=Wt("text",w),_=$t(N==null?void 0:N.binding),j=Pt(N==null?void 0:N.binding),k=zt(i),$=Math.max(j-k,0),{geminiMessages:E,urlMap:v}=await Is(t,{includeImageAttachments:_,maxImageCount:$}),{sanitized:P,urlMap:x}=gt(e),X={...v,...x},B=Ht(E),G=Math.max(j-B,0),A=[{type:"text",text:P}];if(_&&i.length>0&&G>0){const V=await Ft(i,G);A.push(...V)}const b=[];o&&b.push({role:"system",content:[{type:"text",text:o}]}),b.push(...E,{role:"user",content:A});let I="";if(await Xe.sendChat(b,V=>{if(c.aborted)return;const ae=Ms(V,X);I=ae,d({type:"content",content:ae})},c,w||void 0),c.aborted)throw new Error("Request cancelled");const L=Date.now()-S;return re.trackModelSuccess({taskId:l,taskType:"chat",model:y,duration:L,resultSize:I.length}),d({type:"done"}),ce=null,I}catch(N){ce=null;const _=Date.now()-S;if(c.aborted||N.message==="Request cancelled"||N.name==="AbortError")throw re.trackTaskCancellation({taskId:l,taskType:"chat",duration:_}),d({type:"done"}),new Error("Request cancelled");const j=N instanceof Error?N.message:"Unknown error occurred";throw re.trackModelFailure({taskId:l,taskType:"chat",model:y,duration:_,error:j}),d({type:"error",error:j}),N}}function Ts(){ce&&(ce.abort(),ce=null)}function Rs(){return ce!==null}const et={sendChatMessage:js,stopGeneration:Ts,isGenerating:Rs},Le="[[WORKFLOW_MESSAGE]]",As=["generate_image","generate_video","generate_grid_image","generate_photo_wall"];function Us(t){var w;if(!As.includes(t.name))return t;const e={...t.arguments},i=e.model;let d=!1;if(!i)d=!0;else{const o=Kt(i),c=t.name==="generate_video";(c&&o!=="video"||!c&&o!=="image")&&(d=!0)}if(d){const o=qe.get(),c=t.name==="generate_video";let l;c?l=o.videoModelName||"veo3":l=o.imageModelName||((w=Bt[0])==null?void 0:w.id)||"gemini-2.5-flash-image-vip",e.model=l}return{...t,arguments:e}}function Vs(t){const e=[];t.aiAnalysis&&e.push(t.aiAnalysis);const i=t.steps.filter(c=>c.status==="completed"),d=t.steps.filter(c=>c.status==="failed");if(i.length>0||d.length>0){const c=[];i.length>0&&c.push(`成功执行 ${i.length} 个工具`),d.length>0&&c.push(`${d.length} 个工具执行失败`),c.length>0&&e.push(`[执行结果: ${c.join(",")}]`)}const w=t.steps.map(c=>{const l={};for(const[S,y]of Object.entries(c.args||{}))S!=="context"&&(typeof y=="string"&&y.length>200?l[S]=y.substring(0,200)+"...":l[S]=y);return{mcp:c.mcp,args:l}}),o={content:e.join(`
|
|
3
|
+
`)||`已完成任务: ${t.name}`,next:w};return JSON.stringify(o)}function qs(t){const e=[{type:"text",text:t.content}];if(t.attachments&&t.attachments.length>0)for(const i of t.attachments)e.push({type:"data-file",data:{filename:i.name,mediaType:i.type,url:i.data}});return{id:t.id,role:t.role===se.USER?"user":"assistant",parts:e}}function Ls(t,e){const d=t.parts.filter(c=>c.type==="text").map(c=>c.text).join(""),o=t.parts.filter(c=>c.type==="data-file").map((c,l)=>{const S=c.data;return{id:`${t.id}-att-${l}`,name:S.filename,type:S.mediaType,size:0,data:S.url,isBlob:!1}});return{id:t.id,sessionId:e,role:t.role==="user"?se.USER:se.ASSISTANT,content:d,timestamp:Date.now(),status:Y.SUCCESS,attachments:o.length>0?o:void 0}}function Ws(t){return t.workflow&&t.content.startsWith(Le)?{...t,content:Vs(t.workflow)}:t}function tt(t){return t.parts.filter(e=>e.type==="text").map(e=>e.text).join("")}us();function $s(t){const{sessionId:e,temporaryModel:i,onToolCalls:d,onWorkflowUpdate:w}=t,o=s.useRef(Ot()),c=s.useRef(d);c.current=d;const l=s.useRef(w);l.current=w;const S=s.useRef(i);S.current=i;const[y,N]=s.useState([]),[_,j]=s.useState("ready"),[k,$]=s.useState(!1),E=s.useRef(null),v=s.useRef([]),P=s.useRef(!1);s.useEffect(()=>{if(!e){N([]),v.current=[];return}(async()=>{$(!0);try{const I=await M.getMessages(e);v.current=I,N(I.map(qs))}catch(I){console.error("[useChatHandler] Failed to load messages:",I),N([]),v.current=[]}finally{$(!1)}})()},[e]);const x=s.useCallback(async b=>{if(!e)return;if(P.current){console.warn("[useChatHandler] Message already being sent, ignoring duplicate call");return}P.current=!0,j("submitted");const I=Ls(b,e);await M.addMessage(I),N(q=>[...q,b]);const L=await M.getSession(e);await M.updateSession(e,{updatedAt:Date.now(),messageCount:((L==null?void 0:L.messageCount)||0)+1});const V=M.generateId();E.current=V;const ae={id:V,role:"assistant",parts:[{type:"text",text:""}]};N(q=>[...q,ae]),j("streaming");const oe=v.current.map(Ws);oe.push(I),v.current=[...v.current,I];const O=tt(b);let Z="",le=!1;try{await et.sendChatMessage(oe.slice(0,-1),O,I.attachments||[],q=>{if(q.type==="content"&&q.content)Z=q.content,N(h=>h.map(u=>u.id===V?{...u,parts:[{type:"text",text:Z}]}:u));else if(q.type==="done"){const h=Xt(Z),u=Jt(Z)||Z;if(h.length>0&&c.current){const W=h.map(ee=>Us(ee)),J=async()=>{const ee=[];for(const ue of W)try{const me=await Qt.executeTool(ue);ee.push({toolCall:ue,success:me.success,data:me.data,error:me.error,taskId:me.taskId})}catch(me){ee.push({toolCall:ue,success:!1,error:me.message||"工具执行失败"})}return ee},de=`${Le}${V}`;N(ee=>ee.map(ue=>ue.id===V?{...ue,parts:[{type:"text",text:de}]}:ue)),c.current(W,V,J,u)}j("ready");const f={id:V,sessionId:e,role:se.ASSISTANT,content:h.length>0?`${Le}${V}`:Z,timestamp:Date.now(),status:h.length>0?Y.STREAMING:Y.SUCCESS};M.addMessage(f),v.current=[...v.current,f],M.updateSession(e,{updatedAt:Date.now(),messageCount:((L==null?void 0:L.messageCount)||0)+2}),E.current=null,P.current=!1}else if(q.type==="error"&&q.error){le=!0,j("error");const h=`❌ 错误: ${q.error}`;N(f=>f.map(W=>W.id===V?{...W,parts:[{type:"text",text:h}]}:W));const u={id:V,sessionId:e,role:se.ASSISTANT,content:h,timestamp:Date.now(),status:Y.FAILED,error:q.error};M.addMessage(u),v.current=[...v.current,u],E.current=null,P.current=!1}},S.current,o.current)}catch(q){if(q.message!=="Request cancelled"&&!le){j("error"),console.error("[useChatHandler] Stream error:",q);const h=`❌ 错误: ${q.message||"未知错误"}`;if(N(u=>u.map(f=>f.id===V?{...f,parts:[{type:"text",text:h}]}:f)),e&&V){const u={id:V,sessionId:e,role:se.ASSISTANT,content:h,timestamp:Date.now(),status:Y.FAILED,error:q.message||"未知错误"};M.addMessage(u),v.current=[...v.current,u]}}E.current=null,P.current=!1}},[e]),X=s.useCallback(async()=>{if(et.stopGeneration(),j("ready"),E.current&&e){const b=y.find(I=>I.id===E.current);if(b){const I=tt(b),L={id:b.id,sessionId:e,role:se.ASSISTANT,content:I,timestamp:Date.now(),status:Y.SUCCESS};await M.addMessage(L)}E.current=null}},[e,y]),B=s.useCallback(b=>{if(y.length<2)return;const I=[...y].reverse().findIndex(oe=>oe.role==="user");if(I===-1)return;const L=y.length-1-I,V=y[L],ae=y.slice(0,L+1);N(ae),x(V)},[y,x]),G=s.useCallback((b,I)=>{N(b),I&&(v.current=I)},[]),A=s.useCallback((b,I)=>{v.current=v.current.map(L=>L.id===b?{...L,workflow:I}:L)},[]);return{messages:y,status:_,sendMessage:x,stop:X,regenerate:B,setMessages:N,setMessagesWithRaw:G,updateRawMessageWorkflow:A,isLoading:k}}const Ps=ie.lazy(()=>ct(()=>import("./ChatMessagesArea-CHN35Bt6.js").then(t=>t.C),__vite__mapDeps([0,1,2,3,4,5,6]),import.meta.url)),st="[[WORKFLOW_MESSAGE]]";function zs(t,e){switch(t){case"generate_image":return`生成图片: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_video":return`生成视频: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_audio":return`生成音频: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_text":return`生成文本: ${((e==null?void 0:e.prompt)||"").substring(0,30)}...`;case"generate_grid_image":return`生成宫格图: ${((e==null?void 0:e.theme)||"").substring(0,30)}...`;case"canvas_insertion":return"插入到画布";case"generate_mermaid":return"生成流程图";case"generate_mindmap":return"生成思维导图";default:return`执行 ${t}`}}const at="chat-drawer-width",Hs=Math.max(375,window.innerWidth*.5),nt=375,Fs=s.forwardRef(({defaultOpen:t=!1,onOpenChange:e},i)=>{const[d,w]=s.useState(()=>M.getDrawerState().isOpen??t),[o,c]=s.useState([]),[l,S]=s.useState(null),[y,N]=s.useState(!1),[_,j]=s.useState(()=>{const n=localStorage.getItem(at);if(n){const a=parseInt(n,10);if(!isNaN(a)&&a>=nt)return Math.min(a,window.innerWidth-60)}return Hs}),[k,$]=s.useState(!1),E=s.useRef(null),[v,P]=s.useState(()=>Je("text").modelId),[x,X]=s.useState(()=>{const n=Je("text");return Se(n.profileId,n.modelId)}),[B,G]=s.useState(new Map),A=s.useRef(null),[b,I]=s.useState(null),{executeRetry:L,selectedContent:V,setIsDrawerOpen:ae,setDrawerWidth:oe}=hs();s.useEffect(()=>{ae(d)},[d,ae]),s.useEffect(()=>{oe(_)},[_,oe]);const O=ie.useRef(null),Z=ie.useRef(null),{appState:le,setAppState:q}=Yt();s.useEffect(()=>{if(!k)return;const n=p=>{const m=window.innerWidth-p.clientX,g=Math.max(nt,Math.min(m,window.innerWidth-60));j(g)},a=()=>{$(!1),localStorage.setItem(at,String(_))};return document.addEventListener("mousemove",n),document.addEventListener("mouseup",a),document.body.style.userSelect="none",document.body.style.cursor="ew-resize",()=>{document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",a),document.body.style.userSelect="",document.body.style.cursor=""}},[k,_]),s.useEffect(()=>{const n=()=>{const a=window.innerWidth-60;_>a&&j(a)};return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[_]);const h=s.useCallback(n=>{n.preventDefault(),$(!0)},[]),u=s.useCallback(async(n,a,p,m)=>{var U,D;const T={id:`workflow-${Date.now()}`,name:"AI 智能生成",generationType:(U=n[0])!=null&&U.name.includes("video")?"video":(D=n[0])!=null&&D.name.includes("audio")?"audio":"image",prompt:m||"",aiAnalysis:m,count:n.length,steps:n.map((C,F)=>({id:`step-${F}`,mcp:C.name,status:"pending",description:zs(C.name,C.arguments),args:C.arguments}))};G(C=>{const F=new Map(C);return F.set(a,T),F}),A.current=a,M.updateMessage(a,{workflow:T});try{const C=await p();re.track("chat_tool_execution_complete",{success:!0,resultCount:C.length}),G(F=>{const R=new Map(F),z=R.get(a);if(z){const K={...z,steps:z.steps.map((fe,be)=>{const Q=C[be];return{...fe,status:Q!=null&&Q.success?"completed":"failed",error:Q==null?void 0:Q.error,result:Q==null?void 0:Q.data}})};R.set(a,K),M.updateMessage(a,{workflow:K,status:Y.SUCCESS})}return R})}catch(C){console.error("[ChatDrawer] Tool execution failed:",C),G(F=>{const R=new Map(F),z=R.get(a);if(z){const K={...z,steps:z.steps.map(fe=>({...fe,status:"failed",error:C.message||"执行失败"}))};R.set(a,K),M.updateMessage(a,{workflow:K,status:Y.FAILED})}return R})}},[]),f=$s({sessionId:l,temporaryModel:x||v,onToolCalls:u}),W=s.useRef(f.sendMessage);W.current=f.sendMessage,s.useEffect(()=>{(async()=>{const a=M.getDrawerState(),p=await M.getAllSessions();c(p);let m=null;if(a.activeSessionId?(m=a.activeSessionId,S(a.activeSessionId)):p.length>0&&(m=p[0].id,S(p[0].id)),m)try{const g=await M.getMessages(m),T=new Map;for(const D of g)D.workflow&&T.set(D.id,D.workflow);G(T);const U=g.find(D=>D.workflow&&D.status===Y.STREAMING);A.current=(U==null?void 0:U.id)||null}catch(g){console.error("[ChatDrawer] Failed to load workflow messages:",g)}})()},[]),s.useEffect(()=>{M.setDrawerState({isOpen:d,activeSessionId:l})},[d,l]),s.useEffect(()=>{if(l&&ne.current){const n=ne.current;ne.current=null,setTimeout(()=>{W.current(n)},100)}},[l]),s.useEffect(()=>{if(!le.openSettings&&ne.current){const n=qe.get();if(n!=null&&n.apiKey){const a=ne.current;ne.current=null,l?setTimeout(()=>{W.current(a)},100):(async()=>{const p=await M.createSession();c(m=>[p,...m]),S(p.id),ne.current=a})()}}},[le.openSettings,l]),s.useEffect(()=>{const n=a=>{a.key==="Escape"&&d&&(w(!1),e==null||e(!1))};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[d,e]),s.useEffect(()=>{let n=null;return(async()=>{const{workflowSubmissionService:p}=await ct(async()=>{const{workflowSubmissionService:m}=await import("./workflow-submission-service-CX0BKuHd.js").then(g=>g.a);return{workflowSubmissionService:m}},__vite__mapDeps([0]),import.meta.url);n=p.subscribeToAllEvents(m=>{const g=m;G(T=>{let U=null;for(const[R,z]of T.entries())if(z.id===g.workflowId){U=R;break}if(!U)return T;const D=T.get(U);if(!D)return T;const C=new Map(T);let F;switch(g.type){case"step":{F={...D,steps:D.steps.map(R=>R.id===g.stepId?{...R,status:g.status||R.status,result:g.result??R.result,error:g.error??R.error}:R)};break}case"steps_added":{const z=(g.steps||[]).map(K=>({id:K.id,mcp:K.mcp,args:K.args,description:K.description,status:K.status}));F={...D,steps:[...D.steps,...z]};break}case"completed":case"failed":{const R=g.type==="completed"?"completed":"failed";F={...D,status:R,steps:D.steps.map(z=>{if(z.status==="running"||z.status==="pending"){const K=z.result;return K!=null&&K.taskId?z:{...z,status:R,error:g.type==="failed"?g.error:void 0}}return z})};break}default:return T}return C.set(U,F),M.updateMessage(U,{workflow:F}),C})})})().catch(p=>{console.error("[ChatDrawer] Failed to setup workflow sync:",p)}),()=>{n==null||n.unsubscribe()}},[]),s.useEffect(()=>{if(!y)return;const n=p=>{const m=p.target;m.closest(".t-dialog")===null&&O.current&&!O.current.contains(m)&&Z.current&&!Z.current.contains(m)&&N(!1)},a=setTimeout(()=>{document.addEventListener("mousedown",n)},100);return()=>{clearTimeout(a),document.removeEventListener("mousedown",n)}},[y]);const J=s.useCallback(()=>{w(n=>{const a=!n;return e==null||e(a),a})},[e]),de=s.useCallback(()=>{w(!1),e==null||e(!1)},[e]),ee=s.useCallback(async()=>{re.track("chat_session_create");const n=await M.createSession();c(a=>[n,...a]),S(n.id),N(!1),G(new Map),A.current=null,P(void 0)},[]),ue=s.useCallback(()=>{N(n=>!n)},[]),me=s.useCallback(async n=>{re.track("chat_session_select"),S(n),N(!1),P(void 0);try{const a=await M.getMessages(n),p=new Map;for(const g of a)g.workflow&&p.set(g.id,g.workflow);G(p);const m=a.find(g=>g.workflow&&g.status===Y.STREAMING);A.current=(m==null?void 0:m.id)||null}catch(a){console.error("[ChatDrawer] Failed to load workflow messages:",a),G(new Map),A.current=null}},[]),xt=s.useCallback(async n=>{re.track("chat_session_delete"),await M.deleteSession(n),c(a=>{const p=a.filter(m=>m.id!==n);if(l===n){const m=p[0]||null;S((m==null?void 0:m.id)||null)}return p})},[l]),De=s.useCallback(async(n,a)=>{re.track("chat_session_rename"),await M.updateSession(n,{title:a}),c(p=>p.map(m=>m.id===n?{...m,title:a}:m))},[]),ne=ie.useRef(null),Ne=s.useCallback(async n=>{try{re.track("chat_message_send",{hasImages:n.parts.some(p=>p.type==="image_url")});const a=qe.get();if(!(a!=null&&a.apiKey)){ne.current=n,q({...le,openSettings:!0});return}if(ne.current=null,!l){const p=await M.createSession();c(m=>[p,...m]),S(p.id),ne.current=n;return}await f.sendMessage(n)}catch(a){console.error("[ChatDrawer] send message failed:",a),ne.current=n}},[l,f,le,q]),$e=s.useCallback(async n=>{var Oe;const{context:a,workflow:p,textModel:m,autoOpen:g=!0}=n;g&&(w(!0),e==null||e(!0)),m&&P(m);const T=await M.createSession(),U=[];a.userInstruction&&U.push(a.userInstruction),a.selection.texts.length>0&&U.push(`
|
|
4
4
|
📝 选中的文本:
|
|
5
5
|
${a.selection.texts.join(`
|
|
6
6
|
`)}`),a.selection.texts.length===0&&!a.userInstruction&&a.finalPrompt&&U.push(`
|