aitu-app 0.6.80 → 0.6.82
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-EQjMjqlc.js +2 -0
- package/assets/ChatDrawer-CbBhCIU_.js +11 -0
- package/assets/ChatMessagesArea-DatNDD1n.js +7 -0
- package/assets/DeferredAIInputBar-rIx0c8Qv.js +8 -0
- package/assets/DrawnixDeferredFeatures-C8aKfyQG.js +2 -0
- package/assets/{KnowledgeBaseContent-C_BAVG2b.css → KnowledgeBaseContent-t0hs8RQl.css} +1 -1
- package/assets/KnowledgeBaseContent-vj5G-Ele.js +53 -0
- package/assets/MVCreator-DM_I1mJr.js +152 -0
- package/assets/ModelBenchmarkWorkbench-CfgAcLzz.js +3 -0
- package/assets/MusicAnalyzer-C-ZI5UZd.js +6 -0
- package/assets/MusicAnalyzer-DcDwJ88i.js +1 -0
- package/assets/PromptHistoryTool-DtvW3bCO.js +2 -0
- package/assets/ResizableDivider-DYCCpuYw.js +1 -0
- package/assets/TaskQueuePanel-DE2L1_EL.js +1 -0
- package/assets/VideoAnalyzer-D2uuXL5i.js +2 -0
- package/assets/ai-generation-preferences-service-BZMqxTjU.js +1 -0
- package/assets/batch-image-generation-CNNwXxgK.js +7 -0
- package/assets/canvas-insertion-C-BRaM5S.js +15 -0
- package/assets/clipper-Cb0TKfsP.js +1 -0
- package/assets/diagram-engines-CGOhfK6V.css +1 -0
- package/assets/diagram-engines-DmAewdsu.js +6462 -0
- package/assets/{index-CJ7peDFP.css → editor-engines-B8u8agiX.css} +1 -1
- package/assets/editor-engines-DGOT7Xqo.js +956 -0
- package/assets/index-BDFn0Sob.js +1 -0
- package/assets/index-BVyqBBIM.js +1 -0
- package/assets/index-BbDNsPPx.js +5 -0
- package/assets/index-Bgp2wxvA.js +9 -0
- package/assets/{index-CP51k4n6.js → index-DDzCo7oj.js} +20 -96
- package/assets/index-DQQV1ik6.js +2 -0
- package/assets/index-Da_CCXZb.css +1 -0
- package/assets/index-DmlAaIoR.css +1 -0
- package/assets/index-mUUunEI1.js +1 -0
- package/assets/index-o5qBH2kC.js +33 -0
- package/assets/main-B2ZrUywM.js +37 -0
- package/assets/main-CRPCRx46.css +1 -0
- package/assets/media-viewer-DoEpBmJL.css +9 -0
- package/assets/media-viewer-xSaTD7_w.js +9 -0
- package/assets/model-benchmark-launcher-QpuZmCET.js +1 -0
- package/assets/office-data-2Ik8Wb2D.js +226 -0
- package/assets/photo-wall-splitter-BD8mt52h.js +1 -0
- package/assets/{ppt-generation-B5fKT_by.js → ppt-generation-BLs-dVnA.js} +6 -6
- package/assets/retry-image-BMMnhw_0.js +6 -0
- package/assets/settings-dialog-xu3d4MX_.js +1 -0
- package/assets/shared-runtime-DBavnB0U.js +5 -0
- package/assets/{skill-dsl-parser-b-aB3P5u.js → skill-dsl-parser-BAv2yCP9.js} +2 -2
- package/assets/startup-runtime-BbuNXj6O.js +1 -0
- package/assets/tool-windows-CqSDeXz5.css +1 -0
- package/assets/tool-windows-DV-j2p51.js +499 -0
- package/assets/ttd-dialog-BVnF62mS.css +1 -0
- package/assets/ttd-dialog-CwkEQ_6x.js +6 -0
- package/assets/useCharacters-D3PdMQMn.js +2 -0
- package/assets/useWorkflowSubmission-BIFN-qvq.js +70 -0
- package/assets/video-analyze-BeuyAh9W.js +1 -0
- package/assets/{video-generation-BXhS7x-a.js → video-generation-C2GITib6.js} +2 -2
- package/assets/video-recovery-service-BBDuz2L1.js +1 -0
- package/assets/workflow-generation-utils-Vh2FVA3M.js +3 -0
- package/assets/workflow-submission-service-BRb6CPDr.js +4 -0
- package/changelog.json +32 -0
- package/idle-prefetch-manifest.json +244 -816
- package/manifest.json +3 -3
- package/package.json +1 -1
- package/precache-manifest.json +6 -10
- package/sw.js +5 -5
- package/version.json +3 -9
- package/assets/CanvasAudioPlayer-CSFENxi6.js +0 -2
- package/assets/ChatDrawer-sVEVW11M.js +0 -11
- package/assets/ChatMessagesArea-Cnb94V8-.js +0 -7
- package/assets/DeferredAIInputBar-D99l6sBS.js +0 -8
- package/assets/DrawnixDeferredFeatures-78cIu-ev.js +0 -2
- package/assets/KnowledgeBaseContent-DZ-1fPZa.js +0 -53
- package/assets/MVCreator-BV8KDR6E.js +0 -152
- package/assets/ModelBenchmarkWorkbench-DL6r0Z_5.js +0 -2
- package/assets/MusicAnalyzer-DQtjf36o.js +0 -6
- package/assets/MusicAnalyzer-u_5sy56T.js +0 -1
- package/assets/PromptHistoryTool-B-ktaOpK.js +0 -2
- package/assets/ResizableDivider-BpUFdkte.js +0 -1
- package/assets/Tableau10-B-NsZVaP.js +0 -1
- package/assets/Tableau10-Dnlau_Wv.js +0 -1
- package/assets/TaskQueuePanel-BLD1r7_I.js +0 -1
- package/assets/VideoAnalyzer-Bjv9pyDs.js +0 -2
- package/assets/ai-generation-preferences-service-BSpgVCHz.js +0 -1
- package/assets/apl-B4CMkyY2.js +0 -1
- package/assets/arc-CnA_FoJK.js +0 -1
- package/assets/arc-DDvk_-VM.js +0 -1
- package/assets/array-B5oSNiGi.js +0 -1
- package/assets/array-BKyUJesY.js +0 -1
- package/assets/asciiarmor-Df11BRmG.js +0 -1
- package/assets/asn1-EdZsLKOL.js +0 -1
- package/assets/asterisk-B-8jnY81.js +0 -1
- package/assets/batch-image-generation-N-lwbjRE.js +0 -6
- package/assets/blockDiagram-38ab4fdb-B2G4wjZe.js +0 -118
- package/assets/blockDiagram-38ab4fdb-DBkZWrKk.js +0 -118
- package/assets/board-utils-CpAtoKn2.js +0 -1
- package/assets/brainfuck-C4LP7Hcl.js +0 -1
- package/assets/browser-ZXTF4AKv.js +0 -1
- package/assets/c4Diagram-3d4e48cf-BFg-wccg.js +0 -10
- package/assets/c4Diagram-3d4e48cf-CmyNnfip.js +0 -10
- package/assets/canvas-insertion-CKIoVZ9a.js +0 -15
- package/assets/channel-BQh3J7kz.js +0 -1
- package/assets/channel-CPsF_uSp.js +0 -1
- package/assets/classDiagram-70f12bd4-BoP-e23u.js +0 -2
- package/assets/classDiagram-70f12bd4-UTHJc2XA.js +0 -2
- package/assets/classDiagram-v2-f2320105-BeBc2H-D.js +0 -2
- package/assets/classDiagram-v2-f2320105-Bjwz5ljW.js +0 -2
- package/assets/clike-B9uivgTg.js +0 -1
- package/assets/clipper-NoHaeWV4.js +0 -1
- package/assets/clojure-BMjYHr_A.js +0 -1
- package/assets/clone-CA2KqVCK.js +0 -1
- package/assets/cmake-BQqOBYOt.js +0 -1
- package/assets/cobol-CWcv1MsR.js +0 -1
- package/assets/coffeescript-S37ZYGWr.js +0 -1
- package/assets/commonlisp-DBKNyK5s.js +0 -1
- package/assets/createText-2e5e7dd3-Bsu7vT-L.js +0 -8
- package/assets/createText-2e5e7dd3-DrWUfa-s.js +0 -8
- package/assets/crystal-SjHAIU92.js +0 -1
- package/assets/css-BnMrqG3P.js +0 -1
- package/assets/cypher-C_CwsFkJ.js +0 -1
- package/assets/d-pRatUO7H.js +0 -1
- package/assets/diff-DbItnlRl.js +0 -1
- package/assets/dockerfile-BKs6k2Af.js +0 -1
- package/assets/dtd-DF_7sFjM.js +0 -1
- package/assets/dylan-DwRh75JA.js +0 -1
- package/assets/ebnf-CDyGwa7X.js +0 -1
- package/assets/ecl-Cabwm37j.js +0 -1
- package/assets/edges-e0da2a9e-B9sYOHRt.js +0 -4
- package/assets/edges-e0da2a9e-DX4IQMED.js +0 -4
- package/assets/eiffel-CnydiIhH.js +0 -1
- package/assets/elm-vLlmbW-K.js +0 -1
- package/assets/erDiagram-9861fffd-B-LfsIMf.js +0 -51
- package/assets/erDiagram-9861fffd-DPdud_LA.js +0 -51
- package/assets/erlang-BNw1qcRV.js +0 -1
- package/assets/factor-kuTfRLto.js +0 -1
- package/assets/fcl-Kvtd6kyn.js +0 -1
- package/assets/flowDb-956e92f1-C3xKlizM.js +0 -10
- package/assets/flowDb-956e92f1-Ck5oiEta.js +0 -10
- package/assets/flowDiagram-66a62f08-Bkt2NoHM.js +0 -4
- package/assets/flowDiagram-66a62f08-CJnxo6dI.js +0 -4
- package/assets/flowDiagram-v2-96b9c2cf-MnwxRDMO.js +0 -1
- package/assets/flowDiagram-v2-96b9c2cf-U7nNPvdl.js +0 -1
- package/assets/flowchart-elk-definition-4a651766-2XkrsdKI.js +0 -139
- package/assets/flowchart-elk-definition-4a651766-ec8y1a8S.js +0 -139
- package/assets/forth-Ffai-XNe.js +0 -1
- package/assets/fortran-DYz_wnZ1.js +0 -1
- package/assets/ganttDiagram-c361ad54-1TA0mZY_.js +0 -257
- package/assets/ganttDiagram-c361ad54-D-OrVtXV.js +0 -257
- package/assets/gas-Bneqetm1.js +0 -1
- package/assets/gherkin-heZmZLOM.js +0 -1
- package/assets/gitGraphDiagram-72cf32ee-Blt3RsBD.js +0 -70
- package/assets/gitGraphDiagram-72cf32ee-CKf6xgO1.js +0 -70
- package/assets/graph-CUYgHJmb.js +0 -1
- package/assets/graph-WeSRtsZO.js +0 -1
- package/assets/groovy-D9Dt4D0W.js +0 -1
- package/assets/haskell-Cw1EW3IL.js +0 -1
- package/assets/haxe-H-WmDvRZ.js +0 -1
- package/assets/http-DBlCnlav.js +0 -1
- package/assets/idl-BEugSyMb.js +0 -1
- package/assets/index--MqiaN5t.js +0 -1
- package/assets/index-0b_TeH8L.js +0 -99
- package/assets/index-3862675e-C2ipEQC8.js +0 -1
- package/assets/index-3862675e-CeX6VlsU.js +0 -1
- package/assets/index-B-J0JJak.js +0 -1
- package/assets/index-B7Hj7g41.js +0 -1
- package/assets/index-BS_v5cOh.js +0 -3
- package/assets/index-Btk31p7r.js +0 -1
- package/assets/index-C-Samsu3.js +0 -13
- package/assets/index-C-llNX01.js +0 -1
- package/assets/index-C8c9icsH.js +0 -2
- package/assets/index-CAn2jfNg.js +0 -1
- package/assets/index-CK2zt94U.js +0 -1
- package/assets/index-CXBhIy30.js +0 -7
- package/assets/index-C_Mj1wbj.js +0 -2
- package/assets/index-CbfE0MBd.js +0 -6
- package/assets/index-CjeDxq0c.js +0 -1
- package/assets/index-Ct7OFnWK.js +0 -1
- package/assets/index-CxxUIkx1.js +0 -1
- package/assets/index-D2Kc-3MO.js +0 -1
- package/assets/index-DK0XEByD.js +0 -2
- package/assets/index-DQcV2DYj.js +0 -1
- package/assets/index-DSKRBuhn.js +0 -686
- package/assets/index-DXqL8NRE.js +0 -2
- package/assets/index-DcLrRIlS.js +0 -1
- package/assets/index-DdA-dF0D.js +0 -1
- package/assets/index-DdxTnVj5.js +0 -1
- package/assets/index-DmrnShhc.js +0 -1
- package/assets/index-QO0uGVDP.js +0 -1
- package/assets/index-aIKXDB1M.js +0 -1
- package/assets/index-n6JhNACm.js +0 -1
- package/assets/index-qbS_W7PW.js +0 -1
- package/assets/infoDiagram-f8f76790-DEWQ3NXc.js +0 -7
- package/assets/infoDiagram-f8f76790-u_qjHFCm.js +0 -7
- package/assets/init-A0kIFD9x.js +0 -1
- package/assets/init-Gi6I4Gst.js +0 -1
- package/assets/javascript-iXu5QeM3.js +0 -1
- package/assets/journeyDiagram-49397b02-C8A30CBr.js +0 -139
- package/assets/journeyDiagram-49397b02-hQJfqZih.js +0 -139
- package/assets/julia-DuME0IfC.js +0 -1
- package/assets/katex-Cu_Erd72.js +0 -261
- package/assets/layout-CFKTKeqQ.js +0 -1
- package/assets/layout-DvRyabpG.js +0 -1
- package/assets/line-C72F34Po.js +0 -1
- package/assets/line-W5R41tQ1.js +0 -1
- package/assets/linear-7FXykgHM.js +0 -1
- package/assets/linear-CVyOPUvz.js +0 -1
- package/assets/livescript-BwQOo05w.js +0 -1
- package/assets/lua-BgMRiT3U.js +0 -1
- package/assets/main-BO0HWBB1.js +0 -42
- package/assets/main-DAuE07rf.css +0 -9
- package/assets/mathematica-DTrFuWx2.js +0 -1
- package/assets/mbox-CNhZ1qSd.js +0 -1
- package/assets/mermaid.core-2VcXhn43.js +0 -91
- package/assets/mindmap-definition-fc14e90a-CcVXKGg4.js +0 -425
- package/assets/mindmap-definition-fc14e90a-DRDYXe84.js +0 -425
- package/assets/mirc-CjQqDB4T.js +0 -1
- package/assets/mllike-CXdrOF99.js +0 -1
- package/assets/model-benchmark-launcher-C2qBiDlM.js +0 -1
- package/assets/modelica-Dc1JOy9r.js +0 -1
- package/assets/mscgen-BA5vi2Kp.js +0 -1
- package/assets/mumps-BT43cFF4.js +0 -1
- package/assets/nginx-DdIZxoE0.js +0 -1
- package/assets/nsis-LdVXkNf5.js +0 -1
- package/assets/ntriples-BfvgReVJ.js +0 -1
- package/assets/octave-Ck1zUtKM.js +0 -1
- package/assets/ordinal-BRr1uYdk.js +0 -1
- package/assets/ordinal-Cboi1Yqb.js +0 -1
- package/assets/oz-BzwKVEFT.js +0 -1
- package/assets/pascal--L3eBynH.js +0 -1
- package/assets/path-CY0bYimO.js +0 -1
- package/assets/path-CbwjOpE9.js +0 -1
- package/assets/perl-CdXCOZ3F.js +0 -1
- package/assets/photo-wall-splitter-CFntSOdS.js +0 -1
- package/assets/pieDiagram-8a3498a8-Be9dl9pU.js +0 -35
- package/assets/pieDiagram-8a3498a8-DXZOJYBv.js +0 -35
- package/assets/pig-CevX1Tat.js +0 -1
- package/assets/powershell-CFHJl5sT.js +0 -1
- package/assets/properties-C78fOPTZ.js +0 -1
- package/assets/protobuf-ChK-085T.js +0 -1
- package/assets/pug-DeIclll2.js +0 -1
- package/assets/puppet-DMA9R1ak.js +0 -1
- package/assets/python-BuPzkPfP.js +0 -1
- package/assets/q-pXgVlZs6.js +0 -1
- package/assets/quadrantDiagram-120e2f19-DoU7aQSp.js +0 -7
- package/assets/quadrantDiagram-120e2f19-l5K9mx26.js +0 -7
- package/assets/r-B6wPVr8A.js +0 -1
- package/assets/requirementDiagram-deff3bca-DN_87Wxe.js +0 -52
- package/assets/requirementDiagram-deff3bca-DOooq7kx.js +0 -52
- package/assets/retry-image-BmIVuAVu.js +0 -6
- package/assets/rpm-CTu-6PCP.js +0 -1
- package/assets/ruby-B2Rjki9n.js +0 -1
- package/assets/sankeyDiagram-04a897e0-BB33nO6_.js +0 -8
- package/assets/sankeyDiagram-04a897e0-CCa0hwml.js +0 -8
- package/assets/sas-B4kiWyti.js +0 -1
- package/assets/scheme-C41bIUwD.js +0 -1
- package/assets/sequenceDiagram-704730f1-CNhXZiix.js +0 -122
- package/assets/sequenceDiagram-704730f1-ZqQ1QrY-.js +0 -122
- package/assets/settings-dialog-BFuWTeQR.js +0 -1
- package/assets/shell-CjFT_Tl9.js +0 -1
- package/assets/sieve-C3Gn_uJK.js +0 -1
- package/assets/simple-mode-GW_nhZxv.js +0 -1
- package/assets/smalltalk-CnHTOXQT.js +0 -1
- package/assets/solr-DehyRSwq.js +0 -1
- package/assets/sparql-DkYu6x3z.js +0 -1
- package/assets/spreadsheet-BCZA_wO0.js +0 -1
- package/assets/sql-D0XecflT.js +0 -1
- package/assets/stateDiagram-587899a1-BBlOIJr7.js +0 -1
- package/assets/stateDiagram-587899a1-BhomZ0AN.js +0 -1
- package/assets/stateDiagram-v2-d93cdb3a-BpJsgMa0.js +0 -1
- package/assets/stateDiagram-v2-d93cdb3a-CuOn9du2.js +0 -1
- package/assets/stex-C3f8Ysf7.js +0 -1
- package/assets/styles-6aaf32cf-C2WEewoA.js +0 -207
- package/assets/styles-6aaf32cf-CTtf8moq.js +0 -207
- package/assets/styles-9a916d00-44Xi2-39.js +0 -160
- package/assets/styles-9a916d00-DUU3VgNe.js +0 -160
- package/assets/styles-c10674c1--AhWSGg7.js +0 -116
- package/assets/styles-c10674c1-DS-wE3tK.js +0 -116
- package/assets/stylus-B533Al4x.js +0 -1
- package/assets/svgDrawCommon-08f97a94-CXcvtSSy.js +0 -1
- package/assets/svgDrawCommon-08f97a94-Dyqh4V2s.js +0 -1
- package/assets/swift-BzpIVaGY.js +0 -1
- package/assets/tcl-DVfN8rqt.js +0 -1
- package/assets/textile-CnDTJFAw.js +0 -1
- package/assets/tiddlywiki-DO-Gjzrf.js +0 -1
- package/assets/tiki-DGYXhP31.js +0 -1
- package/assets/timeline-definition-85554ec2-k788753O.js +0 -61
- package/assets/timeline-definition-85554ec2-sw6-UuBe.js +0 -61
- package/assets/toml-Bm5Em-hy.js +0 -1
- package/assets/tool-windows-BEnZdJqF.js +0 -2948
- package/assets/tool-windows-D61Le6TE.css +0 -1
- package/assets/troff-wAsdV37c.js +0 -1
- package/assets/ttcn-CfJYG6tj.js +0 -1
- package/assets/ttcn-cfg-B9xdYoR4.js +0 -1
- package/assets/ttd-dialog-BJzXAZ0l.js +0 -99
- package/assets/ttd-dialog-BlUvpMr5.css +0 -1
- package/assets/turtle-B1tBg_DP.js +0 -1
- package/assets/useCharacters-gsV4K8Hn.js +0 -2
- package/assets/useWorkflowSubmission-XRR21P6Y.js +0 -70
- package/assets/vb-CmGdzxic.js +0 -1
- package/assets/vbscript-BuJXcnF6.js +0 -1
- package/assets/velocity-D8B20fx6.js +0 -1
- package/assets/verilog-C6RDOZhf.js +0 -1
- package/assets/vhdl-lSbBsy5d.js +0 -1
- package/assets/video-analyze-CpbnpSiI.js +0 -1
- package/assets/video-recovery-service-6G2lkWcu.js +0 -1
- package/assets/webidl-ZXfAyPTL.js +0 -1
- package/assets/workflow-generation-utils-CYxtSHl0.js +0 -3
- package/assets/workflow-submission-service-DygSzydV.js +0 -4
- package/assets/xlsx-CkFp8p6R.js +0 -105
- package/assets/xquery-DzFWVndE.js +0 -1
- package/assets/xychartDiagram-e933f94c-CvTTDwPb.js +0 -7
- package/assets/xychartDiagram-e933f94c-Ga9zi9ha.js +0 -7
- package/assets/yacas-BJ4BC0dw.js +0 -1
- package/assets/z80-Hz9HOZM7.js +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Opentu CDN Assets v0.6.
|
|
1
|
+
# Opentu CDN Assets v0.6.82
|
|
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.82/
|
|
6
|
+
- jsdelivr: https://cdn.jsdelivr.net/npm/aitu-app@0.6.82/
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./diagram-engines-CGOhfK6V.css","./tool-windows-CqSDeXz5.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as ke}from"./startup-runtime-BbuNXj6O.js";import{r as n,j as t,i as be,H as N,fz as Ae,di as Se,bt as Le,aq as ue,cm as Te,c3 as Ee,aM as oe,cu as Ce,eR as Ne,cx as Me,cv as Re,cw as De,cy as ze,cz as de,cA as $e,hK as Oe,hL as Ue,hM as Fe,eS as qe,cC as Ye,cD as Ve,cE as He,cF as Be}from"./diagram-engines-DmAewdsu.js";import{co as Qe,cF as We,cG as Ke,cH as pe,cI as J,cJ as U,cK as Xe,cL as Ge,cM as fe,cN as Z,cO as Je,_ as Ze,ch as ie,cP as ye,cQ as _e,cR as le,cS as et}from"./tool-windows-DV-j2p51.js";import{U as tt}from"./shared-runtime-DBavnB0U.js";const me=5;function ve(e,i,s){const c=Math.max(0,window.innerWidth-i),f=Math.max(0,window.innerHeight-s);return{x:Math.max(0,Math.min(e.x,c)),y:Math.max(0,Math.min(e.y,f))}}function at(e){try{const i=localStorage.getItem(e);if(!i)return null;const s=JSON.parse(i);if(typeof s.x=="number"&&typeof s.y=="number")return s}catch{}return null}function nt(e,i){try{localStorage.setItem(e,JSON.stringify(i))}catch{}}function st(e){const{storageKey:i,enabled:s=!0}=e,[c,f]=n.useState(()=>s?at(i):null),[v,h]=n.useState(!1),w=n.useRef(!1),b=n.useRef(null),j=n.useRef(null),_=n.useCallback(y=>{if(!s||y.button!==0)return;const m=j.current;if(!m)return;const p=m.getBoundingClientRect();b.current={startPointerX:y.clientX,startPointerY:y.clientY,startElX:p.left,startElY:p.top,activated:!1,frameId:0}},[s]);n.useEffect(()=>{if(!s)return;const y=p=>{const u=b.current;if(!u)return;const g=p.clientX-u.startPointerX,M=p.clientY-u.startPointerY;if(!u.activated){if(Math.abs(g)<me&&Math.abs(M)<me)return;u.activated=!0,h(!0)}cancelAnimationFrame(u.frameId),u.frameId=requestAnimationFrame(()=>{const S=j.current;if(!S)return;const d=ve({x:u.startElX+g,y:u.startElY+M},S.offsetWidth,S.offsetHeight);f(d)})},m=()=>{const p=b.current;if(!p)return;cancelAnimationFrame(p.frameId);const u=p.activated;b.current=null,h(!1),u&&(w.current=!0,requestAnimationFrame(()=>{w.current=!1}),f(g=>(g&&nt(i,g),g)))};return window.addEventListener("pointermove",y),window.addEventListener("pointerup",m),()=>{window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",m)}},[s,i]),n.useEffect(()=>{if(!s||!c)return;const y=()=>{const m=j.current;m&&f(p=>p&&ve(p,m.offsetWidth,m.offsetHeight))};return window.addEventListener("resize",y),()=>window.removeEventListener("resize",y)},[s,!!c]);const P=n.useCallback(()=>{f(null);try{localStorage.removeItem(i)}catch{}},[i]);return{position:c,isDragging:v,wasDraggedRef:w,elementRef:j,handlePointerDown:_,resetPosition:P}}const ot=({volume:e,onVolumeChange:i})=>{const s=n.useRef(null),c=n.useRef(null),f=n.useRef(!1),v=n.useRef(!1),h=n.useRef(!1),[w,b]=n.useState(!1),[j,_]=n.useState(!1),[P,y]=n.useState(!1),m=Math.round(e*100),p={"--canvas-audio-progress":`${e*100}%`},u=()=>{c.current!==null&&(window.clearTimeout(c.current),c.current=null)},g=()=>{u(),b(!0)},M=()=>{u(),b(d=>!d)},S=()=>{u(),!(v.current||h.current)&&(c.current=window.setTimeout(()=>{b(!1)},180))};return n.useEffect(()=>{v.current=j},[j]),n.useEffect(()=>{h.current=P},[P]),n.useEffect(()=>()=>u(),[]),n.useEffect(()=>{if(!w)return;const d=x=>{var k;(k=s.current)!=null&&k.contains(x.target)||(u(),b(!1),y(!1),_(!1),f.current=!1)};return document.addEventListener("pointerdown",d,!0),()=>document.removeEventListener("pointerdown",d,!0)},[w]),n.useEffect(()=>{if(!P)return;const d=()=>{h.current=!1,y(!1),v.current||(u(),c.current=window.setTimeout(()=>{b(!1)},180))};return window.addEventListener("pointerup",d),()=>window.removeEventListener("pointerup",d)},[P]),t.jsx("div",{ref:s,className:be("canvas-audio-player__volume",{"canvas-audio-player__volume--expanded":w}),onPointerDown:d=>d.stopPropagation(),onMouseEnter:()=>{v.current=!0,_(!0),u()},onMouseLeave:()=>{v.current=!1,_(!1),S()},onBlur:d=>{var k;const x=d.relatedTarget;x&&((k=s.current)!=null&&k.contains(x))||S()},children:t.jsxs("div",{className:"canvas-audio-player__volume-shell",children:[t.jsx("div",{className:"canvas-audio-player__volume-slider-wrap",children:t.jsx("input",{type:"range",min:0,max:1,step:.01,value:e,onFocus:g,onPointerDown:d=>{d.stopPropagation(),h.current=!0,y(!0),g()},onChange:d=>i(Number(d.target.value)),className:"canvas-audio-player__slider canvas-audio-player__slider--volume",style:p,"aria-label":"Playback volume","aria-valuetext":`${m}%`})}),t.jsxs("span",{className:"canvas-audio-player__volume-value",children:[m,"%"]}),t.jsx(N,{content:"音量",children:t.jsx("button",{type:"button",className:"canvas-audio-player__volume-toggle",onPointerDown:d=>{d.stopPropagation(),f.current=!0},onClick:()=>{f.current=!1,M()},onFocus:()=>{f.current||g()},onBlur:()=>{f.current=!1},"aria-label":"Volume controls","aria-expanded":w,children:e<=.01?t.jsx(Ae,{size:16}):t.jsx(Se,{size:16})})})]})})},ge="asset:";function it(e){var i;return(i=e==null?void 0:e.elementId)!=null&&i.startsWith(ge)?e.elementId.slice(ge.length):null}function xe(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const i=Math.floor(e),s=Math.floor(i/60),c=i%60;return`${s}:${String(c).padStart(2,"0")}`}function lt(e){var s;const i=((s=e.segments[e.segments.length-1])==null?void 0:s.endMs)||0;return xe(i/1e3)}const rt=({queue:e,activeQueueIndex:i,queueSource:s,activePlaylistId:c,playing:f=!1,activeReadingSourceId:v,onSelect:h,onPlayAllTracksItem:w})=>{const{assets:b}=Qe(),{playlists:j,playlistItems:_,favoriteAssetIds:P,createPlaylist:y,addAssetToPlaylist:m,removeAssetFromPlaylist:p,toggleFavorite:u}=We(),{contextMenu:g,openAt:M,close:S}=Le(),[d,x]=n.useState(!1),[k,E]=n.useState(""),[F,L]=n.useState(null),{noteMetas:z,loadReadingSource:W,buildReadingQueue:K}=Ke(),[q,Y]=n.useState(s==="reading"?pe:J),V=q===pe,R=s==="playlist"&&c?c:J,T=e.filter(a=>!U(a)),ee=Xe(T),X=a=>{const o=it(a);if(o)return o;if(!(a!=null&&a.audioUrl))return null;const r=b.find(I=>I.type===tt.AUDIO&&I.url===a.audioUrl);return(r==null?void 0:r.id)||null},H=n.useMemo(()=>new Set(R!==J?(_[R]||[]).map(a=>a.assetId?Ge({kind:"asset",assetId:a.assetId}):null).filter(a=>!!a):[]),[_,R]),D=n.useCallback(async a=>{if(w){w(a);return}const o=await W(a);o&&(await K(a),h(o))},[w,W,K,h]),$=n.useMemo(()=>z.map(a=>({id:a.id,title:a.title||"未命名笔记",subtitle:new Date(a.updatedAt).toLocaleDateString("zh-CN"),canFavorite:!1,isActive:(v==null?void 0:v.includes(a.id))===!0,isPlaying:f&&(v==null?void 0:v.includes(a.id))===!0})),[z,v,f]);return s==="reading"?t.jsxs("div",{className:"canvas-audio-player__playlist",children:[t.jsx(fe,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:q,allCount:T.length,allTracksCount:z.length,playlists:j,playlistItems:_,onSelect:Y,onCreate:()=>{E(""),x(!0)}}),V?$.length===0?t.jsxs("div",{className:"canvas-audio-player__playlist-empty",children:[t.jsx(ue,{size:16}),t.jsx("span",{children:"知识库还没有笔记"})]}):t.jsx(Z,{className:"canvas-audio-player__playlist-list",items:$,onSelect:a=>void D(a.id),onTogglePlayback:a=>void D(a.id),showPlaybackIndicator:!0}):t.jsx(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:e.map((a,o)=>{const r=a;return{id:r.readingSourceId,title:r.title||"朗读轨道",subtitle:lt(r),previewImageUrl:r.previewImageUrl,isActive:o===i,isPlaying:o===i,canFavorite:!1}}),onSelect:a=>{const o=e.find(r=>U(r)&&r.readingSourceId===a.id);o&&h(o)},onTogglePlayback:a=>{const o=e.find(r=>U(r)&&r.readingSourceId===a.id);o&&h(o)},showPlaybackIndicator:!0})]}):t.jsxs("div",{className:"canvas-audio-player__playlist",children:[t.jsx(fe,{className:"canvas-audio-player__playlist-tabs",selectedPlaylistId:q,allCount:T.length,allTracksCount:z.length,playlists:j,playlistItems:_,onSelect:Y,onCreate:()=>{E(""),x(!0)}}),V?$.length===0?t.jsxs("div",{className:"canvas-audio-player__playlist-empty",children:[t.jsx(ue,{size:16}),t.jsx("span",{children:"知识库还没有笔记"})]}):t.jsx(Z,{className:"canvas-audio-player__playlist-list",items:$,onSelect:a=>void D(a.id),onTogglePlayback:a=>void D(a.id),showPlaybackIndicator:!0}):t.jsx(Z,{className:"canvas-audio-player__playlist-list audio-track-list--queue",items:T.map((a,o)=>{const r=X(a);return{id:`${a.audioUrl}-${o}`,title:a.title||"未命名音频",subtitle:xe(ee.get(a.audioUrl)??a.duration),previewImageUrl:a.previewImageUrl,isActive:o===i,isPlaying:o===i,isFavorite:r?P.has(r):!1,canFavorite:!!r}}),onSelect:a=>{const o=T.find((r,I)=>`${r.audioUrl}-${I}`===a.id);o&&h(o)},onContextMenu:(a,o)=>{const r=T.find((B,te)=>`${B.audioUrl}-${te}`===a.id),I=X(r);I&&(o.preventDefault(),o.stopPropagation(),M(o.clientX,o.clientY,{kind:"asset",assetId:I}))},onToggleFavorite:a=>{const o=T.find((I,B)=>`${I.audioUrl}-${B}`===a.id),r=X(o);r&&u(r)},onTogglePlayback:a=>{const o=T.find((r,I)=>`${r.audioUrl}-${I}`===a.id);o&&h(o)},showFavoriteButton:!0,showPlaybackIndicator:!0}),t.jsx(Je,{contextMenu:g?{x:g.x,y:g.y,item:g.payload}:null,playlists:j,playlistItems:_,favoriteAssetIds:P,selectedPlaylistId:R===J?null:R,currentPlaylistItemKeys:H,onClose:S,onToggleFavorite:a=>void u(a),onAddToPlaylist:(a,o)=>{a.kind==="asset"&&m(a.assetId,o)},onRemoveFromPlaylist:(a,o)=>{a.kind==="asset"&&p(a.assetId,o)},onCreatePlaylistAndAdd:a=>{a.kind==="asset"&&(L(a.assetId),E(""),x(!0))}}),t.jsx(Te,{visible:d,header:"新建播放列表",onClose:()=>x(!1),onConfirm:async()=>{const a=await y(k);F&&await m(F,a.id),x(!1),E(""),L(null)},onCancel:()=>{x(!1),L(null)},confirmBtn:"确定",cancelBtn:"取消",children:t.jsx(Ee,{value:k,onChange:a=>E(String(a)),placeholder:"请输入播放列表名称"})})]})},we={sequential:t.jsx(Be,{size:14}),"list-loop":t.jsx(He,{size:14}),"single-loop":t.jsx(Ve,{size:14}),shuffle:t.jsx(Ye,{size:14})},ct=Object.keys(le).map(e=>({value:e,content:le[e],prefixIcon:we[e]}));function ut(e,i){return et(i).map(s=>{const c=_e(s),f=Math.abs(s-e)<.001;return{value:s,content:f?`✓ ${c}`:c}})}function he(e){if(typeof e!="number"||!Number.isFinite(e)||e<=0)return"--:--";const i=Math.floor(e),s=Math.floor(i/60),c=i%60;return`${s}:${String(c).padStart(2,"0")}`}const vt=()=>{const e=Ze(),i=n.useRef(null),[s,c]=n.useState(!1),[f,v]=n.useState(()=>{const l=ie.getToolState(ye);return(l==null?void 0:l.status)==="open"}),[h,w]=n.useState(()=>{try{return localStorage.getItem(oe.AUDIO_PLAYER_LAYOUT)==="vertical"?"vertical":"horizontal"}catch{return"horizontal"}}),[b,j]=n.useState(()=>typeof window<"u"?window.innerWidth:1024);n.useEffect(()=>{const l=()=>j(window.innerWidth);return window.addEventListener("resize",l),window.addEventListener("orientationchange",l),()=>{window.removeEventListener("resize",l),window.removeEventListener("orientationchange",l)}},[]);const _=b<=768?"vertical":h,[P,y]=n.useState(null),m=b<=768,{position:p,isDragging:u,wasDraggedRef:g,elementRef:M,handlePointerDown:S}=st({storageKey:oe.AUDIO_PLAYER_POSITION,enabled:!m}),d=n.useMemo(()=>!e.duration||e.duration<=0?0:Math.max(0,Math.min(100,e.currentTime/e.duration*100)),[e.currentTime,e.duration]),x=Number.isFinite(e.currentTime)?e.currentTime:0,k=Number.isFinite(e.duration)?e.duration:0,E=he(x),F=he(k),L=e.activeQueueIndex>=0?e.queue[e.activeQueueIndex]:null,z=e.activeTitle||(U(L)?L.title:void 0),W=e.activePreviewImageUrl||(U(L)?L.previewImageUrl:void 0),K=e.activeQueueIndex>0,q=e.activeQueueIndex>=0&&e.activeQueueIndex<e.queue.length-1,Y=e.queue.length>1&&e.activeQueueIndex>=0,V=Y?`${e.activeQueueIndex+1}/${e.queue.length}`:null,R=e.queueSource==="playlist"?e.activePlaylistName||"播放列表":e.activePlaylistName||(e.queueSource==="reading"?"朗读轨道":"画布音频"),T=Y?`${R} ${e.activeQueueIndex+1} / ${e.queue.length}`:R,ee=V?`${V} · ${E} / ${F}`:`${E} / ${F}`,H=e.queueSource==="reading"&&(!!e.activeReadingSourceId||L!==null&&U(L))||!!e.activeAudioUrl,D=e.mediaType==="audio",$=e.mediaType==="reading"?"reading":"audio",a=le[e.playbackMode],o=we[e.playbackMode],r=n.useMemo(()=>ut(e.effectivePlaybackRate,$),[e.effectivePlaybackRate,$]),I=_e(e.effectivePlaybackRate),B=`${e.mediaType==="reading"?"语音速度":"播放速度"} ${I}`,te={"--canvas-audio-progress":`${d}%`},Pe=n.useCallback(()=>{w(l=>{const A=l==="horizontal"?"vertical":"horizontal";try{localStorage.setItem(oe.AUDIO_PLAYER_LAYOUT,A)}catch{}return A})},[]),Ie=n.useCallback(async()=>{try{e.playing?e.pausePlayback():await e.resumePlayback()}catch{}},[e]);if(n.useEffect(()=>{if(!H){c(!1),y(null);return}let l=0;const A=()=>{const ce=document.querySelector(".ai-input-bar__container");if(!(ce instanceof HTMLElement)){y(null);return}const se=ce.getBoundingClientRect(),G={left:Math.round(se.left),width:Math.round(se.width),bottom:Math.max(0,Math.round(window.innerHeight-se.top))};y(Q=>Q&&Q.left===G.left&&Q.width===G.width&&Q.bottom===G.bottom?Q:G)},C=()=>{window.cancelAnimationFrame(l),l=window.requestAnimationFrame(A)},ae=document.querySelector(".ai-input-bar__container"),ne=document.querySelector(".ai-input-bar"),O=typeof ResizeObserver<"u"?new ResizeObserver(()=>C()):null;return O&&ae instanceof HTMLElement&&O.observe(ae),O&&ne instanceof HTMLElement&&ne!==ae&&O.observe(ne),C(),window.addEventListener("resize",C),window.addEventListener("orientationchange",C),()=>{window.cancelAnimationFrame(l),window.removeEventListener("resize",C),window.removeEventListener("orientationchange",C),O==null||O.disconnect()}},[H]),n.useEffect(()=>{if(!s)return;const l=A=>{var C;(C=i.current)!=null&&C.contains(A.target)||c(!1)};return document.addEventListener("pointerdown",l,!0),()=>document.removeEventListener("pointerdown",l,!0)},[s]),n.useEffect(()=>{M.current=i.current}),n.useEffect(()=>{const l=ie.observeToolStates().subscribe(()=>{const A=ie.getToolState(ye);v((A==null?void 0:A.status)==="open")});return()=>l.unsubscribe()},[]),!H||f)return null;const je=p&&!m?{left:p.x,top:p.y}:{},re={...P?{"--canvas-audio-mobile-left":`${P.left}px`,"--canvas-audio-mobile-width":`${P.width}px`,"--canvas-audio-mobile-offset":`${P.bottom}px`}:{},...je};return t.jsxs("div",{ref:i,className:be("canvas-audio-player",{"canvas-audio-player--playlist-open":s,"canvas-audio-player--positioned":!!p,"canvas-audio-player--dragging":u,"canvas-audio-player--vertical":_==="vertical"}),style:Object.keys(re).length>0?re:void 0,children:[t.jsxs("button",{type:"button",className:"canvas-audio-player__queue-trigger",onPointerDown:S,onClick:()=>{g.current||c(l=>!l)},"aria-expanded":s,"aria-label":"切换播放列表",children:[t.jsx("div",{className:"canvas-audio-player__cover",children:t.jsx(Ce,{src:W,alt:z||"Audio cover",fallbackClassName:"canvas-audio-player__cover-fallback",iconSize:16})}),t.jsxs("div",{className:"canvas-audio-player__meta",children:[t.jsx("div",{className:"canvas-audio-player__title",children:z||"未命名音频"}),t.jsxs("div",{className:"canvas-audio-player__subtitle",children:[t.jsx("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--desktop",children:T}),t.jsx("span",{className:"canvas-audio-player__subtitle-text canvas-audio-player__subtitle-text--mobile",children:ee})]})]}),t.jsx("span",{className:"canvas-audio-player__queue-indicator","aria-hidden":"true",children:t.jsx(Ne,{size:14})})]}),t.jsxs("div",{className:"canvas-audio-player__controls",children:[t.jsx(N,{content:"上一首",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--previous",onClick:()=>void e.playPrevious(),disabled:!K,children:t.jsx(Me,{size:14})})}),t.jsx(N,{content:e.playing?"暂停":"播放",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--primary",onClick:()=>void Ie(),children:e.playing?t.jsx(Re,{size:14}):t.jsx(De,{size:14})})}),t.jsx(N,{content:"下一首",children:t.jsx("button",{type:"button",className:"canvas-audio-player__action canvas-audio-player__action--next",onClick:()=>void e.playNext(),disabled:!q,children:t.jsx(ze,{size:14})})})]}),t.jsxs("div",{className:"canvas-audio-player__progress",children:[t.jsx("span",{className:"canvas-audio-player__time",children:E}),t.jsx("input",{type:"range",min:0,max:k||0,step:.1,value:Math.min(x,k||x),onChange:l=>{D&&e.seekTo(Number(l.target.value))},className:"canvas-audio-player__slider canvas-audio-player__slider--progress",style:te,"aria-label":D?"Audio progress":"Reading progress",disabled:!D}),t.jsx("span",{className:"canvas-audio-player__time",children:F})]}),t.jsx(ot,{volume:e.volume,onVolumeChange:e.setVolume}),t.jsx(de,{options:r,trigger:"click",placement:"bottom",minColumnWidth:112,onClick:l=>e.setPlaybackRate(Number(l.value)),children:t.jsx(N,{content:B,children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__speed-toggle","aria-label":`切换播放速度,当前${I}`,children:t.jsx($e,{size:14})})})}),t.jsx(de,{options:ct,trigger:"click",placement:"bottom",minColumnWidth:132,onClick:l=>e.setPlaybackMode(l.value),children:t.jsx(N,{content:a,children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__mode-toggle","aria-label":`切换播放模式,当前${a}`,children:o})})}),t.jsx(N,{content:"打开播放器工具",children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__player-switch canvas-audio-player__switch-toggle",onClick:()=>{ke(async()=>{const{openMusicPlayerTool:l}=await import("./tool-windows-DV-j2p51.js").then(A=>A.dL);return{openMusicPlayerTool:l}},__vite__mapDeps([0,1]),import.meta.url).then(({openMusicPlayerTool:l})=>{l()})},"aria-label":"打开播放器工具",children:t.jsx(Oe,{size:14})})}),t.jsx(N,{content:_==="horizontal"?"切换为垂直布局":"切换为水平布局",children:t.jsx("button",{type:"button",className:"canvas-audio-player__toggle canvas-audio-player__layout-toggle",onClick:Pe,style:{display:b<=768?"none":""},children:_==="horizontal"?t.jsx(Ue,{size:14}):t.jsx(Fe,{size:14})})}),t.jsx(N,{content:"关闭播放器",children:t.jsx("button",{type:"button",className:"canvas-audio-player__close",onClick:e.stopPlayback,children:t.jsx(qe,{size:14})})}),s?t.jsx(rt,{queue:e.queue,activeQueueIndex:e.activeQueueIndex,queueSource:e.queueSource,activePlaylistId:e.activePlaylistId,playing:e.playing,activeReadingSourceId:e.activeReadingSourceId,onSelect:l=>{U(l)?e.toggleReadingPlayback(l):e.togglePlayback(l),c(!1)}}):null]})};export{vt as CanvasAudioPlayer};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./diagram-engines-CGOhfK6V.css","./editor-engines-B8u8agiX.css","./tool-windows-CqSDeXz5.css","./main-CRPCRx46.css","./index-DmlAaIoR.css","./MediaLibrarySidebar-CNCXXhfY.css","./ChatMessagesArea-PlF5AwzD.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as rt}from"./startup-runtime-BbuNXj6O.js";import{R as oe,r as s,j as r,dR as vt,dU as Et,dn as ot,H as ke,gU as Tt,dA as Ct,e5 as Dt,dF as Oe,dH as At,ht as Rt,iP as Je,eA as Nt,bm as jt,c3 as Lt,d_ as Wt,iQ as $t,iR as Pt,iS as Ut,b6 as zt,hJ as Ht,hI as Ft,dz as Gt,iT as Kt,ae as it,cR as Ye,cN as Q,iU as Vt,iV as Bt,iW as Xt,iX as qt,cS as Ot,cT as Jt,bU as Yt,f6 as Qt,d0 as Zt,iY as es}from"./diagram-engines-DmAewdsu.js";import{bN as ts,cn as ss,dp as ns,dq as as,cv as rs}from"./tool-windows-DV-j2p51.js";import{b9 as os,F as Ie,aa as ct,H as is,c as cs,as as ls,at as ds,g as $e,av as us,aw as ms,N as fs,r as Qe}from"./shared-runtime-DBavnB0U.js";import{S as ps,i as gs,u as hs}from"./index-DDzCo7oj.js";import{c as ws}from"./main-B2ZrUywM.js";const lt=oe.memo(({session:t,isActive:e,onSelect:o,onDelete:d,onRename:w})=>{const[i,c]=s.useState(!1),[l,I]=s.useState(t.title),M=s.useRef(null),S=s.useCallback(()=>{i||o()},[o,i]),b=s.useCallback(_=>{_.stopPropagation(),d()},[d]),A=s.useCallback(_=>{_.stopPropagation(),I(t.title),c(!0)},[t.title]),y=s.useCallback(()=>{const _=l.trim();_&&_!==t.title&&w(_),c(!1)},[l,t.title,w]),z=s.useCallback(()=>{I(t.title),c(!1)},[t.title]),k=s.useCallback(_=>{_.key==="Enter"?(_.preventDefault(),y()):_.key==="Escape"&&(_.preventDefault(),z())},[y,z]),v=s.useCallback(_=>{I(_.target.value)},[]);s.useEffect(()=>{i&&M.current&&(M.current.focus(),M.current.select())},[i]);const H=s.useMemo(()=>{const _=new Date(t.updatedAt),O=new Date;return _.toDateString()===O.toDateString()?_.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):_.toLocaleDateString("zh-CN",{month:"short",day:"numeric"})},[t.updatedAt]);return r.jsxs("div",{className:`session-item ${e?"session-item--active":""} ${i?"session-item--editing":""}`,"data-track":"chat_click_session_select",onClick:S,role:"button",tabIndex:0,onKeyDown:_=>!i&&_.key==="Enter"&&S(),children:[r.jsxs("div",{className:"session-item__content",children:[i?r.jsx("input",{ref:M,className:"session-item__title-input",value:l,onChange:v,onKeyDown:k,onBlur:y,onClick:_=>_.stopPropagation(),maxLength:50}):r.jsx("div",{className:"session-item__title",children:t.title}),r.jsx("div",{className:"session-item__time",children:H})]}),!i&&r.jsxs("div",{className:"session-item__actions",children:[r.jsx("button",{className:"session-item__edit","data-track":"chat_click_session_edit",onClick:A,"aria-label":`编辑会话标题: ${t.title}`,children:r.jsx(vt,{size:14})}),r.jsx("button",{className:"session-item__delete","data-track":"chat_click_session_delete",onClick:b,"aria-label":`删除会话: ${t.title}`,children:r.jsx(Et,{size:14})})]})]})});lt.displayName="SessionItem";const dt=oe.memo(({sessions:t,activeSessionId:e,onSelectSession:o,onNewSession:d,onDeleteSession:w,onRenameSession:i})=>{const[c,l]=oe.useState(null),I=s.useCallback(y=>{o(y)},[o]),M=s.useCallback(y=>{l(y)},[]),S=s.useCallback(()=>{c&&(w(c),l(null))},[c,w]),b=s.useCallback(()=>{l(null)},[]),A=s.useCallback((y,z)=>{i(y,z)},[i]);return r.jsxs("div",{className:"session-list",children:[r.jsxs("div",{className:"session-list__header",children:[r.jsx("span",{className:"session-list__title",children:"会话列表"}),r.jsxs("button",{className:"session-list__new-btn","data-track":"chat_click_session_new",onClick:d,"aria-label":"新建会话",children:[r.jsx(ot,{size:14}),r.jsx("span",{children:"新建"})]})]}),r.jsx("div",{className:"session-list__items",children:t.length===0?r.jsx("div",{className:"session-list__empty",children:"暂无会话"}):t.map(y=>r.jsx(lt,{session:y,isActive:y.id===e,onSelect:()=>I(y.id),onDelete:()=>M(y.id),onRename:z=>A(y.id,z)},y.id))}),r.jsx(ts,{open:c!==null,title:"删除会话",description:"确定删除此会话吗?删除后无法恢复。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:y=>{y||b()},onConfirm:S})]})});dt.displayName="SessionList";const ut=oe.memo(({isOpen:t,onClick:e,drawerWidth:o})=>{const d={right:t&&o?`calc(var(--aitu-toolbar-right-dock-width, 0px) + ${o-18}px)`:"var(--aitu-toolbar-right-dock-width, 0px)"};return r.jsx(ke,{content:t?"收起对话":"展开对话",children:r.jsx("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.jsx(Tt,{size:16,className:"chat-drawer-trigger__icon"})})})});ut.displayName="ChatDrawerTrigger";function be(t){return t.sourceProfileName||ct[t.vendor]||t.id}const _s=oe.memo(({model:t})=>{const e=Ht(t.sourceProfileId,t.id);return e?r.jsx("span",{className:"model-selector__item-price",children:e}):null}),Ss=oe.memo(({model:t})=>{const e=Ft(t.sourceProfileId,t.id);return e!=null&&e.description?r.jsx("div",{className:"model-selector__item-desc",children:e.description}):null});function xs(t,e){var i;const o=be(t),d=(i=t.description)==null?void 0:i.trim(),w=(e==null?void 0:e.includeProvider)??!0;return d?!w||d.includes(o)?d:`${o} · ${d}`:w?o:""}function Is(t){return be(t).trim().slice(0,1).toUpperCase()||"M"}const mt=oe.memo(({className:t,value:e,valueRef:o,onChange:d,variant:w="capsule"})=>{var $;const i=Ct("text"),c=(($=i[0])==null?void 0:$.id)||os,[l,I]=s.useState(c),[M,S]=s.useState(()=>Ie(null,c)),b=e??l,A=o===void 0?M:o,[y,z]=s.useState(!1),[k,v]=s.useState(""),[H,_]=s.useState(null),O=s.useRef(null),X=s.useRef(null);s.useEffect(()=>{!e&&c&&l!==c&&(I(c),S(Ie(null,c)))},[c,l,e]),s.useEffect(()=>{if(!y)return;const g=p=>{const U=p.target;O.current&&!O.current.contains(U)&&X.current&&!X.current.contains(U)&&(z(!1),v(""))},u=setTimeout(()=>{document.addEventListener("mousedown",g)},100);return()=>{clearTimeout(u),document.removeEventListener("mousedown",g)}},[y]);const V=s.useMemo(()=>b?Dt(b,A):null,[b,A]),j=s.useMemo(()=>{if(Oe(i,b,A)||!b)return i;const u=At("text",b,A);return u?[u,...i]:i},[i,b,A]),x=s.useMemo(()=>Oe(j,b,A)||j.find(g=>g.id===b),[j,b,A]),C=s.useCallback(g=>{const u=Ie(g.sourceProfileId||null,g.id);e===void 0&&I(g.id),o===void 0&&S(u),d==null||d(g.id,u),z(!1),v("")},[e,o,d]),P=s.useCallback(()=>{const g=!y;z(g),g?_((x==null?void 0:x.vendor)||null):v("")},[x==null?void 0:x.vendor,y]),W=s.useMemo(()=>{const g=new Map,u=[];return j.forEach(p=>{g.has(p.vendor)||(u.push(p.vendor),g.set(p.vendor,0)),g.set(p.vendor,(g.get(p.vendor)??0)+1)}),u.map(p=>({id:p,label:ct[p],count:g.get(p)??0,icon:r.jsx(Rt,{vendor:p,size:14})}))},[j]),ae=s.useCallback(g=>{_(g)},[]),ie=s.useMemo(()=>{const g=k.toLowerCase().trim();return g?j.filter(u=>{var U,J;const p=be(u).toLowerCase();return u.id.toLowerCase().includes(g)||u.label.toLowerCase().includes(g)||((U=u.shortLabel)==null?void 0:U.toLowerCase().includes(g))||((J=u.description)==null?void 0:J.toLowerCase().includes(g))||p.includes(g)}):H?j.filter(u=>u.vendor===H):j},[k,H,j]),[q,ee]=s.useState({top:0,left:0,width:0,bottom:0,placement:"bottom",maxHeight:480});s.useLayoutEffect(()=>{if(!y)return;const g=()=>{if(!X.current)return;const u=X.current.getBoundingClientRect(),p=window.innerHeight,U=p-u.bottom,J=u.top,de=U<400&&J>U?"top":"bottom",te=de==="top"?J-16:p-u.bottom-16;ee({top:u.top,left:u.left,width:u.width,bottom:u.bottom,placement:de,maxHeight:Math.min(Math.max(te,200),600)})};return g(),window.addEventListener("resize",g),window.addEventListener("scroll",g,!0),()=>{window.removeEventListener("resize",g),window.removeEventListener("scroll",g,!0)}},[y]);const le=()=>{if(!y)return null;const g=r.jsxs("div",{ref:O,className:"model-selector__dropdown",style:{position:"fixed",zIndex:jt.DROPDOWN_PORTAL,left:q.left,top:q.placement==="bottom"?q.bottom+8:"auto",bottom:q.placement==="top"?window.innerHeight-q.top+8:"auto",minWidth:360,width:w==="form"?q.width:"auto",maxHeight:q.maxHeight,visibility:q.width===0?"hidden":"visible",transformOrigin:q.placement==="bottom"?"top left":"bottom left",display:"flex",flexDirection:"column"},onClick:u=>u.stopPropagation(),children:[r.jsx("div",{className:"model-selector__search",children:r.jsx(Lt,{value:k,onChange:v,placeholder:"搜索模型...",prefixIcon:r.jsx(Wt,{}),clearable:!0,autofocus:!0})}),r.jsx($t,{tabs:W,activeTab:H,onTabChange:ae,searchQuery:k,compact:!0,children:r.jsx("div",{className:"model-selector__list",children:ie.length===0?r.jsx("div",{className:"model-selector__empty",children:"未找到匹配的模型"}):ie.map(u=>{const p=Pt(u),U=p===V,J=!!k.trim(),de=xs(u,{includeProvider:!J});return r.jsxs("button",{className:`model-selector__item ${U?"model-selector__item--active":""}`,"data-track":"chat_click_model_select",onClick:()=>C(u),children:[r.jsx("span",{className:"model-selector__item-icon model-selector__item-icon--text","aria-hidden":"true",children:Is(u)}),r.jsxs("div",{className:"model-selector__item-content",children:[r.jsxs("div",{className:"model-selector__item-header",children:[r.jsx("span",{className:"model-selector__item-name",children:u.shortLabel||u.label}),J?r.jsx("span",{className:"model-selector__item-provider",children:be(u)}):null,r.jsx(Je,{modelId:u.id,profileId:u.sourceProfileId||null}),r.jsx(Ut,{modelId:u.id}),r.jsx(_s,{model:u})]}),de?r.jsx("div",{className:"model-selector__item-desc",children:de}):r.jsx(Ss,{model:u})]}),U&&r.jsx("svg",{className:"model-selector__check",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:r.jsx("path",{d:"M13.3334 4L6.00002 11.3333L2.66669 8",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})]},p)})})})]});return zt.createPortal(g,document.body)};return r.jsxs("div",{className:`model-selector ${t||""} model-selector--variant-${w}`,children:[r.jsxs("button",{ref:X,className:`model-selector__trigger ${y?"model-selector__trigger--active":""}`,"data-track":"chat_click_model_selector",onClick:P,"aria-label":"选择模型","aria-expanded":y,children:[r.jsxs("div",{className:"model-selector__trigger-content",children:[r.jsx(Je,{modelId:(x==null?void 0:x.id)||b,profileId:(x==null?void 0:x.sourceProfileId)||null,className:"model-selector__trigger-health"}),r.jsx("span",{className:"model-selector__trigger-text",children:(x==null?void 0:x.shortLabel)||(x==null?void 0:x.label)||"选择模型"})]}),r.jsx(Nt,{size:16,className:`model-selector__trigger-icon ${y?"model-selector__trigger-icon--open":""}`})]}),le()]})});mt.displayName="ModelSelector";const ft=s.forwardRef(({selectedContent:t,onSend:e,disabled:o=!1,placeholder:d="输入消息..."},w)=>{const i=s.useRef(null),c=s.useRef(null),[l,I]=s.useState(""),M=t.length>0,{addHistory:S}=Gt();s.useImperativeHandle(w,()=>({setContent:k=>{var v;I(k),(v=i.current)==null||v.focus()},getContent:()=>l,focus:()=>{var k;return(k=i.current)==null?void 0:k.focus()}}),[l]);const b=s.useCallback(()=>{const k=l.trim();if(!k&&t.length===0)return;const v=[];k&&v.push({type:"text",text:k}),t.forEach((_,O)=>{_.type==="image"||_.type==="graphics"?v.push({type:"data-file",data:{filename:`${_.type}-${O+1}.png`,mediaType:"image/png",url:_.url||""}}):_.type==="video"&&v.push({type:"data-file",data:{filename:`video-${O+1}.mp4`,mediaType:"video/mp4",url:_.url||""}})});const H={id:`msg_${Date.now()}`,role:"user",parts:v};k&&S(k,M,"agent"),Promise.resolve(e(H)).catch(_=>{console.error("[EnhancedChatInput] send failed:",_)}),I("")},[l,t,e,S,M]),A=s.useCallback(k=>{k.nativeEvent.isComposing||k.key==="Enter"&&!k.shiftKey&&(k.preventDefault(),b())},[b]);s.useEffect(()=>{i.current&&(i.current.style.height="auto",i.current.style.height=`${Math.min(i.current.scrollHeight,120)}px`)},[l]);const y=()=>t.length===0?null:r.jsx("div",{className:"enhanced-chat-input__selection",children:r.jsx(ps,{items:t,language:"zh",enableHoverPreview:!0})}),z=(l.trim()||t.length>0)&&!o;return r.jsxs("div",{className:"enhanced-chat-input",ref:c,children:[y(),r.jsxs("div",{className:"enhanced-chat-input__form",children:[r.jsx("div",{className:"enhanced-chat-input__input-wrapper",children:r.jsx("textarea",{ref:i,className:"enhanced-chat-input__textarea",value:l,onChange:k=>I(k.target.value),onKeyDown:A,placeholder:M?"描述你想要的效果...":d,disabled:o,rows:4})}),r.jsx("button",{className:`enhanced-chat-input__send ${z?"enhanced-chat-input__send--active":""}`,onClick:b,disabled:!z,"aria-label":"发送",children:r.jsx(Kt,{size:20})})]})]})});ft.displayName="EnhancedChatInput";const Me={MAX_TITLE_LENGTH:30,DRAWER_MIN_WIDTH:320,DRAWER_MAX_WIDTH:500,DRAWER_DEFAULT_WIDTH_RATIO:.3},he={DRAWER_STATE:"aitu:chat:drawer-state",ACTIVE_SESSION:"aitu:chat:active-session",DATABASE_NAME:"aitu-chat",SESSIONS_STORE:"sessions",MESSAGES_STORE:"messages"},_e=it.createInstance({name:he.DATABASE_NAME,storeName:he.SESSIONS_STORE}),pe=it.createInstance({name:he.DATABASE_NAME,storeName:he.MESSAGES_STORE});function pt(){return is()}function Ms(t){const e=t.trim().replace(/\n/g," ");return e.length<=Me.MAX_TITLE_LENGTH?e:e.slice(0,Me.MAX_TITLE_LENGTH-3)+"..."}async function ys(){const t=Date.now(),e={id:pt(),title:"新对话",createdAt:t,updatedAt:t,messageCount:0};return await _e.setItem(e.id,e),e}async function ve(t){return _e.getItem(t)}async function ks(){const t=[];return await _e.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,o)=>o.updatedAt-e.updatedAt)}async function Ue(t,e){const o=await ve(t);if(o){const d={...o,...e,updatedAt:Date.now()};await _e.setItem(t,d)}}async function bs(t){const e=await gt(t);for(const o of e)await pe.removeItem(o.id);await _e.removeItem(t)}async function vs(t){await pe.setItem(t.id,t);const e=await ve(t.sessionId);if(e){const o={messageCount:e.messageCount+1,updatedAt:Date.now()};await Ue(t.sessionId,o)}}async function gt(t){const e=[];return await pe.iterate(o=>{o.sessionId===t&&e.push(o)}),e.sort((o,d)=>o.timestamp-d.timestamp)}async function Es(t,e){const o=await pe.getItem(t);if(o){const d={...o,...e};await pe.setItem(t,d)}}async function Ts(t){const e=await pe.getItem(t);if(e){await pe.removeItem(t);const o=await ve(e.sessionId);o&&await Ue(e.sessionId,{messageCount:Math.max(0,o.messageCount-1)})}}const Ze={isOpen:!1,width:Math.min(Me.DRAWER_MAX_WIDTH,Math.max(Me.DRAWER_MIN_WIDTH,window.innerWidth*Me.DRAWER_DEFAULT_WIDTH_RATIO)),activeSessionId:null};function ht(){try{const t=localStorage.getItem(he.DRAWER_STATE);if(t)return{...Ze,...JSON.parse(t)}}catch(t){console.error("[ChatStorage] Failed to get drawer state:",t)}return Ze}function Cs(t){try{const o={...ht(),...t};localStorage.setItem(he.DRAWER_STATE,JSON.stringify(o))}catch(e){console.error("[ChatStorage] Failed to set drawer state:",e)}}async function Ds(){await _e.clear(),await pe.clear(),localStorage.removeItem(he.DRAWER_STATE)}const T={createSession:ys,getSession:ve,getAllSessions:ks,updateSession:Ue,deleteSession:bs,addMessage:vs,getMessages:gt,updateMessage:Es,deleteMessage:Ts,getDrawerState:ht,setDrawerState:Cs,clearAllData:Ds,generateId:pt,generateTitle:Ms};var Z=(t=>(t.SENDING="sending",t.STREAMING="streaming",t.SUCCESS="success",t.FAILED="failed",t))(Z||{}),ne=(t=>(t.USER="user",t.ASSISTANT="assistant",t))(ne||{});let ce=null;function wt(t){const e={};let o=1,d=1,w=1,i=t;return i=i.replace(/data:image\/[^;]+;base64,[A-Za-z0-9+/=]+/g,c=>{const l=`[图片${o}]`;return e[l]=c,o++,l}),i=i.replace(/data:video\/[^;]+;base64,[A-Za-z0-9+/=]+/g,c=>{const l=`[视频${d}]`;return e[l]=c,d++,l}),i=i.replace(/blob:[^\s"'<>]+/g,c=>{const l=`[媒体${w}]`;return e[l]=c,w++,l}),i=i.replace(/https?:\/\/[^\s"'<>]+\.(png|jpg|jpeg|gif|webp|svg|bmp)(\?[^\s"'<>]*)?/gi,c=>{const l=`[图片${o}]`;return e[l]=c,o++,l}),i=i.replace(/https?:\/\/[^\s"'<>]+\.(mp4|webm|mov|avi|mkv)(\?[^\s"'<>]*)?/gi,c=>{const l=`[视频${d}]`;return e[l]=c,d++,l}),{sanitized:i,urlMap:e}}function As(t,e){let o=t;for(const[d,w]of Object.entries(e))o=o.split(d).join(w);return o}async function Rs(t,e={}){const o={};let d=e.maxImageCount??Number.POSITIVE_INFINITY;return{geminiMessages:await Promise.all(t.filter(i=>i.status==="success"||i.status==="streaming").map(async i=>{const{sanitized:c,urlMap:l}=wt(i.content);Object.assign(o,l);const I=[{type:"text",text:c}];if(e.includeImageAttachments&&i.role===ne.USER&&i.attachments&&i.attachments.length>0&&d>0){const M=await qt(i.attachments,d);d-=M.length,I.push(...M)}return{role:i.role===ne.USER?"user":"assistant",content:I}})),urlMap:o}}async function Ns(t,e,o=[],d,w,i){return js(t,e,o,d,w,i)}async function js(t,e,o=[],d,w,i){ce&&ce.abort(),ce=new AbortController;const c=ce.signal,l=Date.now().toString(),I=Date.now(),M=(typeof w=="string"?w:w==null?void 0:w.modelId)||Ye.getConfig().modelName||"unknown";try{Q.trackModelCall({taskId:l,taskType:"chat",model:M,promptLength:e.length,hasUploadedImage:o.length>0,startTime:I});const S=cs("text",w),b=ls(S==null?void 0:S.binding),A=ds(S==null?void 0:S.binding),y=Vt(o),z=Math.max(A-y,0),{geminiMessages:k,urlMap:v}=await Rs(t,{includeImageAttachments:b,maxImageCount:z}),{sanitized:H,urlMap:_}=wt(e),O={...v,..._},X=Bt(k),V=Math.max(A-X,0),j=[{type:"text",text:H}];if(b&&o.length>0&&V>0){const W=await Xt(o,V);j.push(...W)}const x=[];i&&x.push({role:"system",content:[{type:"text",text:i}]}),x.push(...k,{role:"user",content:j});let C="";if(await Ye.sendChat(x,W=>{if(c.aborted)return;const ae=As(W,O);C=ae,d({type:"content",content:ae})},c,w||void 0),c.aborted)throw new Error("Request cancelled");const P=Date.now()-I;return Q.trackModelSuccess({taskId:l,taskType:"chat",model:M,duration:P,resultSize:C.length}),d({type:"done"}),ce=null,C}catch(S){ce=null;const b=Date.now()-I;if(c.aborted||S.message==="Request cancelled"||S.name==="AbortError")throw Q.trackTaskCancellation({taskId:l,taskType:"chat",duration:b}),d({type:"done"}),new Error("Request cancelled");const A=S instanceof Error?S.message:"Unknown error occurred";throw Q.trackModelFailure({taskId:l,taskType:"chat",model:M,duration:b,error:A}),d({type:"error",error:A}),S}}function Ls(){ce&&(ce.abort(),ce=null)}function Ws(){return ce!==null}const et={sendChatMessage:Ns,stopGeneration:Ls,isGenerating:Ws},Pe="[[WORKFLOW_MESSAGE]]",$s=["generate_image","generate_video","generate_long_video","generate_audio","generate_grid_image","generate_photo_wall","generate_inspiration_board","generate_ppt"];function Ps(t){if(!$s.includes(t.name)||!ss(t.name))return t;const e=$e.get(),o=ns(t.name,{...t.arguments},{fallbackModels:{image:e.imageModelName||fs(),video:e.videoModelName||ms(),audio:e.audioModelName||us()}});return{...t,arguments:o}}function Us(t){const e=[];t.aiAnalysis&&e.push(t.aiAnalysis);const o=t.steps.filter(c=>c.status==="completed"),d=t.steps.filter(c=>c.status==="failed");if(o.length>0||d.length>0){const c=[];o.length>0&&c.push(`成功执行 ${o.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[I,M]of Object.entries(c.args||{}))I!=="context"&&(typeof M=="string"&&M.length>200?l[I]=M.substring(0,200)+"...":l[I]=M);return{mcp:c.mcp,args:l}}),i={content:e.join(`
|
|
3
|
+
`)||`已完成任务: ${t.name}`,next:w};return JSON.stringify(i)}function zs(t){const e=[{type:"text",text:t.content}];if(t.attachments&&t.attachments.length>0)for(const o of t.attachments)e.push({type:"data-file",data:{filename:o.name,mediaType:o.type,url:o.data}});return{id:t.id,role:t.role===ne.USER?"user":"assistant",parts:e}}function Hs(t,e){const d=t.parts.filter(c=>c.type==="text").map(c=>c.text).join(""),i=t.parts.filter(c=>c.type==="data-file").map((c,l)=>{const I=c.data;return{id:`${t.id}-att-${l}`,name:I.filename,type:I.mediaType,size:0,data:I.url,isBlob:!1}});return{id:t.id,sessionId:e,role:t.role==="user"?ne.USER:ne.ASSISTANT,content:d,timestamp:Date.now(),status:Z.SUCCESS,attachments:i.length>0?i:void 0}}function Fs(t){return t.workflow&&t.content.startsWith(Pe)?{...t,content:Us(t.workflow)}:t}function tt(t){return t.parts.filter(e=>e.type==="text").map(e=>e.text).join("")}gs();function Gs(t){const{sessionId:e,temporaryModel:o,onToolCalls:d,onWorkflowUpdate:w}=t,i=s.useRef(as()),c=s.useRef(d);c.current=d;const l=s.useRef(w);l.current=w;const I=s.useRef(o);I.current=o;const[M,S]=s.useState([]),[b,A]=s.useState("ready"),[y,z]=s.useState(!1),k=s.useRef(null),v=s.useRef([]),H=s.useRef(!1);s.useEffect(()=>{if(!e){S([]),v.current=[];return}(async()=>{z(!0);try{const C=await T.getMessages(e);v.current=C,S(C.map(zs))}catch(C){console.error("[useChatHandler] Failed to load messages:",C),S([]),v.current=[]}finally{z(!1)}})()},[e]);const _=s.useCallback(async x=>{if(!e)return;if(H.current){console.warn("[useChatHandler] Message already being sent, ignoring duplicate call");return}H.current=!0,A("submitted");const C=Hs(x,e);await T.addMessage(C),S($=>[...$,x]);const P=await T.getSession(e);await T.updateSession(e,{updatedAt:Date.now(),messageCount:((P==null?void 0:P.messageCount)||0)+1});const W=T.generateId();k.current=W;const ae={id:W,role:"assistant",parts:[{type:"text",text:""}]};S($=>[...$,ae]),A("streaming");const ie=v.current.map(Fs);ie.push(C),v.current=[...v.current,C];const q=tt(x);let ee="",le=!1;try{await et.sendChatMessage(ie.slice(0,-1),q,C.attachments||[],$=>{if($.type==="content"&&$.content)ee=$.content,S(g=>g.map(u=>u.id===W?{...u,parts:[{type:"text",text:ee}]}:u));else if($.type==="done"){const g=Ot(ee),u=Jt(ee)||ee;if(g.length>0&&c.current){const U=g.map(te=>Ps(te)),J=async()=>{const te=[];for(const ue of U)try{const me=await rs.executeTool(ue);te.push({toolCall:ue,success:me.success,data:me.data,error:me.error,taskId:me.taskId})}catch(me){te.push({toolCall:ue,success:!1,error:me.message||"工具执行失败"})}return te},de=`${Pe}${W}`;S(te=>te.map(ue=>ue.id===W?{...ue,parts:[{type:"text",text:de}]}:ue)),c.current(U,W,J,u)}A("ready");const p={id:W,sessionId:e,role:ne.ASSISTANT,content:g.length>0?`${Pe}${W}`:ee,timestamp:Date.now(),status:g.length>0?Z.STREAMING:Z.SUCCESS};T.addMessage(p),v.current=[...v.current,p],T.updateSession(e,{updatedAt:Date.now(),messageCount:((P==null?void 0:P.messageCount)||0)+2}),k.current=null,H.current=!1}else if($.type==="error"&&$.error){le=!0,A("error");const g=`❌ 错误: ${$.error}`;S(p=>p.map(U=>U.id===W?{...U,parts:[{type:"text",text:g}]}:U));const u={id:W,sessionId:e,role:ne.ASSISTANT,content:g,timestamp:Date.now(),status:Z.FAILED,error:$.error};T.addMessage(u),v.current=[...v.current,u],k.current=null,H.current=!1}},I.current,i.current)}catch($){if($.message!=="Request cancelled"&&!le){A("error"),console.error("[useChatHandler] Stream error:",$);const g=`❌ 错误: ${$.message||"未知错误"}`;if(S(u=>u.map(p=>p.id===W?{...p,parts:[{type:"text",text:g}]}:p)),e&&W){const u={id:W,sessionId:e,role:ne.ASSISTANT,content:g,timestamp:Date.now(),status:Z.FAILED,error:$.message||"未知错误"};T.addMessage(u),v.current=[...v.current,u]}}k.current=null,H.current=!1}},[e]),O=s.useCallback(async()=>{if(et.stopGeneration(),A("ready"),k.current&&e){const x=M.find(C=>C.id===k.current);if(x){const C=tt(x),P={id:x.id,sessionId:e,role:ne.ASSISTANT,content:C,timestamp:Date.now(),status:Z.SUCCESS};await T.addMessage(P)}k.current=null}},[e,M]),X=s.useCallback(x=>{if(M.length<2)return;const C=[...M].reverse().findIndex(ie=>ie.role==="user");if(C===-1)return;const P=M.length-1-C,W=M[P],ae=M.slice(0,P+1);S(ae),_(W)},[M,_]),V=s.useCallback((x,C)=>{S(x),C&&(v.current=C)},[]),j=s.useCallback((x,C)=>{v.current=v.current.map(P=>P.id===x?{...P,workflow:C}:P)},[]);return{messages:M,status:b,sendMessage:_,stop:O,regenerate:X,setMessages:S,setMessagesWithRaw:V,updateRawMessageWorkflow:j,isLoading:y}}const Ks=oe.lazy(()=>rt(()=>import("./ChatMessagesArea-DatNDD1n.js"),__vite__mapDeps([0,1,2,3,4,5,6]),import.meta.url)),st="[[WORKFLOW_MESSAGE]]";function Vs(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 nt="chat-drawer-width",Bs=Math.max(375,window.innerWidth*.5),at=375,Xs=s.forwardRef(({defaultOpen:t=!1,onOpenChange:e},o)=>{const[d,w]=s.useState(()=>T.getDrawerState().isOpen??t),[i,c]=s.useState([]),[l,I]=s.useState(null),[M,S]=s.useState(!1),[b,A]=s.useState(()=>{const a=localStorage.getItem(nt);if(a){const n=parseInt(a,10);if(!isNaN(n)&&n>=at)return Math.min(n,window.innerWidth-60)}return Bs}),[y,z]=s.useState(!1),k=s.useRef(null),[v,H]=s.useState(()=>Qe("text").modelId),[_,O]=s.useState(()=>{const a=Qe("text");return Ie(a.profileId,a.modelId)}),[X,V]=s.useState(new Map),j=s.useRef(null),[x,C]=s.useState(null),{executeRetry:P,selectedContent:W,setIsDrawerOpen:ae,setDrawerWidth:ie}=ws();s.useEffect(()=>{ae(d)},[d,ae]),s.useEffect(()=>{ie(b)},[b,ie]);const q=oe.useRef(null),ee=oe.useRef(null),{appState:le,setAppState:$}=Yt();s.useEffect(()=>{if(!y)return;const a=f=>{const m=window.innerWidth-f.clientX,h=Math.max(at,Math.min(m,window.innerWidth-60));A(h)},n=()=>{z(!1),localStorage.setItem(nt,String(b))};return document.addEventListener("mousemove",a),document.addEventListener("mouseup",n),document.body.style.userSelect="none",document.body.style.cursor="ew-resize",()=>{document.removeEventListener("mousemove",a),document.removeEventListener("mouseup",n),document.body.style.userSelect="",document.body.style.cursor=""}},[y,b]),s.useEffect(()=>{const a=()=>{const n=window.innerWidth-60;b>n&&A(n)};return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[b]);const g=s.useCallback(a=>{a.preventDefault(),z(!0)},[]),u=s.useCallback(async(a,n,f,m)=>{var L,E;const R={id:`workflow-${Date.now()}`,name:"AI 智能生成",generationType:(L=a[0])!=null&&L.name.includes("video")?"video":(E=a[0])!=null&&E.name.includes("audio")?"audio":"image",prompt:m||"",aiAnalysis:m,count:a.length,steps:a.map((D,K)=>({id:`step-${K}`,mcp:D.name,status:"pending",description:Vs(D.name,D.arguments),args:D.arguments}))};V(D=>{const K=new Map(D);return K.set(n,R),K}),j.current=n,T.updateMessage(n,{workflow:R});try{const D=await f();Q.track("chat_tool_execution_complete",{success:!0,resultCount:D.length}),Q.track("ai_modality_used",{modality:"agent",action:"tool_execution_completed",source:"chat_drawer",success:!0,toolCount:a.length,resultCount:D.length}),V(K=>{const N=new Map(K),F=N.get(n);if(F){const B={...F,steps:F.steps.map((fe,xe)=>{const Y=D[xe];return{...fe,status:Y!=null&&Y.success?"completed":"failed",error:Y==null?void 0:Y.error,result:Y==null?void 0:Y.data}})};N.set(n,B),T.updateMessage(n,{workflow:B,status:Z.SUCCESS})}return N})}catch(D){console.error("[ChatDrawer] Tool execution failed:",D),V(K=>{const N=new Map(K),F=N.get(n);if(F){const B={...F,steps:F.steps.map(fe=>({...fe,status:"failed",error:D.message||"执行失败"}))};N.set(n,B),T.updateMessage(n,{workflow:B,status:Z.FAILED})}return N})}},[]),p=Gs({sessionId:l,temporaryModel:_||v,onToolCalls:u}),U=s.useRef(p.sendMessage);U.current=p.sendMessage,s.useEffect(()=>{(async()=>{const n=T.getDrawerState(),f=await T.getAllSessions();c(f);let m=null;if(n.activeSessionId?(m=n.activeSessionId,I(n.activeSessionId)):f.length>0&&(m=f[0].id,I(f[0].id)),m)try{const h=await T.getMessages(m),R=new Map;for(const E of h)E.workflow&&R.set(E.id,E.workflow);V(R);const L=h.find(E=>E.workflow&&E.status===Z.STREAMING);j.current=(L==null?void 0:L.id)||null}catch(h){console.error("[ChatDrawer] Failed to load workflow messages:",h)}})()},[]),s.useEffect(()=>{T.setDrawerState({isOpen:d,activeSessionId:l})},[d,l]),s.useEffect(()=>{if(l&&re.current){const a=re.current;re.current=null,setTimeout(()=>{U.current(a)},100)}},[l]),s.useEffect(()=>{if(!le.openSettings&&re.current){const a=$e.get();if(a!=null&&a.apiKey){const n=re.current;re.current=null,l?setTimeout(()=>{U.current(n)},100):(async()=>{const f=await T.createSession();c(m=>[f,...m]),I(f.id),re.current=n})()}}},[le.openSettings,l]),s.useEffect(()=>{const a=n=>{n.key==="Escape"&&d&&(w(!1),e==null||e(!1))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[d,e]),s.useEffect(()=>{let a=null;return(async()=>{const{workflowSubmissionService:f}=await rt(async()=>{const{workflowSubmissionService:m}=await import("./workflow-submission-service-BRb6CPDr.js").then(h=>h.a);return{workflowSubmissionService:m}},__vite__mapDeps([0,2]),import.meta.url);a=f.subscribeToAllEvents(m=>{const h=m;V(R=>{let L=null;for(const[N,F]of R.entries())if(F.id===h.workflowId){L=N;break}if(!L)return R;const E=R.get(L);if(!E)return R;const D=new Map(R);let K;switch(h.type){case"step":{K={...E,steps:E.steps.map(N=>N.id===h.stepId?{...N,status:h.status||N.status,result:h.result??N.result,error:h.error??N.error}:N)};break}case"steps_added":{const F=(h.steps||[]).map(B=>({id:B.id,mcp:B.mcp,args:B.args,description:B.description,status:B.status}));K={...E,steps:[...E.steps,...F]};break}case"completed":case"failed":{const N=h.type==="completed"?"completed":"failed";K={...E,status:N,steps:E.steps.map(F=>{if(F.status==="running"||F.status==="pending"){const B=F.result;return B!=null&&B.taskId?F:{...F,status:N,error:h.type==="failed"?h.error:void 0}}return F})};break}default:return R}return D.set(L,K),T.updateMessage(L,{workflow:K}),D})})})().catch(f=>{console.error("[ChatDrawer] Failed to setup workflow sync:",f)}),()=>{a==null||a.unsubscribe()}},[]),s.useEffect(()=>{if(!M)return;const a=f=>{const m=f.target;m.closest(".t-dialog")===null&&q.current&&!q.current.contains(m)&&ee.current&&!ee.current.contains(m)&&S(!1)},n=setTimeout(()=>{document.addEventListener("mousedown",a)},100);return()=>{clearTimeout(n),document.removeEventListener("mousedown",a)}},[M]);const J=s.useCallback(()=>{w(a=>{const n=!a;return e==null||e(n),n})},[e]),de=s.useCallback(()=>{w(!1),e==null||e(!1)},[e]),te=s.useCallback(async()=>{Q.track("chat_session_create");const a=await T.createSession();c(n=>[a,...n]),I(a.id),S(!1),V(new Map),j.current=null,H(void 0)},[]),ue=s.useCallback(()=>{S(a=>!a)},[]),me=s.useCallback(async a=>{Q.track("chat_session_select"),I(a),S(!1),H(void 0);try{const n=await T.getMessages(a),f=new Map;for(const h of n)h.workflow&&f.set(h.id,h.workflow);V(f);const m=n.find(h=>h.workflow&&h.status===Z.STREAMING);j.current=(m==null?void 0:m.id)||null}catch(n){console.error("[ChatDrawer] Failed to load workflow messages:",n),V(new Map),j.current=null}},[]),_t=s.useCallback(async a=>{Q.track("chat_session_delete"),await T.deleteSession(a),c(n=>{const f=n.filter(m=>m.id!==a);if(l===a){const m=f[0]||null;I((m==null?void 0:m.id)||null)}return f})},[l]),Ee=s.useCallback(async(a,n)=>{Q.track("chat_session_rename"),await T.updateSession(a,{title:n}),c(f=>f.map(m=>m.id===a?{...m,title:n}:m))},[]),re=oe.useRef(null),Se=s.useCallback(async a=>{try{Q.track("chat_message_send",{hasImages:a.parts.some(f=>f.type==="image_url")}),Q.track("ai_modality_used",{modality:"agent",action:"message_send",source:"chat_drawer",hasImages:a.parts.some(f=>f.type==="image_url"),partCount:a.parts.length,textLength:a.parts.filter(f=>f.type==="text").reduce((f,m)=>f+String(m.text||"").length,0)});const n=$e.get();if(!(n!=null&&n.apiKey)){re.current=a,$({...le,openSettings:!0});return}if(re.current=null,!l){const f=await T.createSession();c(m=>[f,...m]),I(f.id),re.current=a;return}await p.sendMessage(a)}catch(n){console.error("[ChatDrawer] send message failed:",n),re.current=a}},[l,p,le,$]),ze=s.useCallback(async a=>{var qe;const{context:n,workflow:f,textModel:m,autoOpen:h=!0}=a;h&&(w(!0),e==null||e(!0)),m&&H(m);const R=await T.createSession(),L=[];n.userInstruction&&L.push(n.userInstruction),n.selection.texts.length>0&&L.push(`
|
|
4
|
+
📝 选中的文本:
|
|
5
|
+
${n.selection.texts.join(`
|
|
6
|
+
`)}`),n.selection.texts.length===0&&!n.userInstruction&&n.finalPrompt&&L.push(`
|
|
7
|
+
提示词:
|
|
8
|
+
${n.finalPrompt}`);const E=[],D=n.model.isExplicit?`模型: ${n.model.id}`:`模型: ${n.model.id} (默认)`;E.push(D),n.params.count>1&&E.push(`数量: ${n.params.count}`),E.length>0&&L.push(`
|
|
9
|
+
---
|
|
10
|
+
${E.join(" • ")}`);const K=L.join(`
|
|
11
|
+
`);let N="新任务";if(n.finalPrompt)N=n.finalPrompt;else if(n.selection.texts.length>0)N=n.selection.texts[0];else if(n.userInstruction){const G=n.userInstruction.indexOf(":"),se=n.userInstruction.indexOf(":"),We=G>=0&&se>=0?Math.min(G,se):Math.max(G,se);We>=0&&We<n.userInstruction.length-1?N=n.userInstruction.substring(We+1).trim():N=n.userInstruction}else n.model.id&&(N=`模型: ${n.model.id}`);const F=N;await T.updateSession(R.id,{title:F}),R.title=F,c(G=>[R,...G]),I(R.id);const B=Date.now(),fe=`msg_${B}_user`,xe=[{type:"text",text:K}],Y=[...n.selection.images,...n.selection.graphics];for(let G=0;G<Y.length;G++)xe.push({type:"data-file",data:{filename:`image-${G+1}.png`,mediaType:"image/png",url:Y[G]}});for(let G=0;G<n.selection.videos.length;G++)xe.push({type:"data-file",data:{filename:`video-${G+1}.mp4`,mediaType:"video/mp4",url:n.selection.videos[G]}});const kt={id:fe,role:"user",parts:xe},we=`msg_${B}_workflow`,bt={id:we,role:"assistant",parts:[{type:"text",text:`${st}${we}`}]};V(G=>{const se=new Map(G);return se.set(we,f),se}),j.current=we;const Be={id:fe,sessionId:R.id,role:ne.USER,content:K,timestamp:Date.now(),status:Z.SUCCESS,aiContext:n,attachments:Y.length>0||n.selection.videos.length>0?[...Y.map((G,se)=>({id:`${fe}-img-${se}`,name:`image-${se+1}.png`,type:"image/png",size:0,data:G,isBlob:!1})),...n.selection.videos.map((G,se)=>({id:`${fe}-vid-${se}`,name:`video-${se+1}.mp4`,type:"video/mp4",size:0,data:G,isBlob:!1}))]:void 0};await T.addMessage(Be);const Xe={id:we,sessionId:R.id,role:ne.ASSISTANT,content:`${st}${we}`,timestamp:Date.now(),status:Z.STREAMING,workflow:f};await T.addMessage(Xe),(qe=p.setMessagesWithRaw)==null||qe.call(p,[kt,bt],[Be,Xe])},[p,e]),He=s.useCallback(async a=>{var f;let n=j.current;if(!n){for(const[m,h]of X.entries())if(h.id===a.id){n=m,j.current=m;break}}n&&(V(m=>{const h=new Map(m);return h.set(n,a),h}),T.updateMessage(n,{workflow:a}),(f=p.updateRawMessageWorkflow)==null||f.call(p,n,a))},[l,i,p,X]),Fe=s.useCallback(a=>{const n=j.current;n&&V(f=>{var R;const m=new Map(f),h=m.get(n);if(h){const L=h.logs||[],E={...h,logs:[...L,a]};m.set(n,E),T.updateMessage(n,{workflow:E}),(R=p.updateRawMessageWorkflow)==null||R.call(p,n,E)}return m})},[p]),Te=s.useRef(null),Ge=s.useCallback(a=>{const n=j.current;n&&V(f=>{const m=new Map(f),h=m.get(n);if(h){const R=h.logs||[];let L=-1;for(let D=R.length-1;D>=0;D--)if(R[D].type==="thinking"){L=D;break}let E;if(L>=0){const D=[...R],K=D[L];D[L]={...K,content:K.content+a},E={...h,logs:D}}else E={...h,logs:[...R,{type:"thinking",timestamp:Date.now(),content:a}]};m.set(n,E),Te.current&&clearTimeout(Te.current),Te.current=setTimeout(()=>{var D;T.updateMessage(n,{workflow:E}),(D=p.updateRawMessageWorkflow)==null||D.call(p,n,E)},500)}return m})},[p]),Ce=s.useCallback(async(a,n,f)=>{if(!x){Q.track("chat_workflow_retry",{stepIndex:f});try{C(a),j.current=a,await P(n,f)}finally{C(null)}}},[P,x]);s.useImperativeHandle(o,()=>({open:()=>{w(!0),e==null||e(!0)},close:()=>{w(!1),e==null||e(!1)},toggle:J,sendMessage:async a=>{w(!0),e==null||e(!0);const n={id:`msg_${Date.now()}`,role:"user",parts:[{type:"text",text:a}]};await Se(n)},sendWorkflowMessage:ze,updateWorkflowMessage:He,appendAgentLog:Fe,updateThinkingContent:Ge,isOpen:()=>d,retryWorkflowFromStep:async(a,n)=>{let f=null;for(const[m,h]of X.entries())if(h.id===a.id){f=m;break}f?await Ce(f,a,n):console.warn("[ChatDrawer] Could not find message ID for workflow retry",a.id)}}),[d,J,Se,ze,He,Fe,Ge,e,X,Ce]);const St=s.useMemo(()=>({...p,sendMessage:Se}),[p,Se]),De=i.find(a=>a.id===l),ge=(De==null?void 0:De.title)||"新对话",[Ae,Re]=s.useState(!1),[Ne,je]=s.useState(""),ye=s.useRef(null),xt=s.useCallback(()=>{je(ge),Re(!0)},[ge]),Le=s.useCallback(async()=>{const a=Ne.trim();a&&a!==ge&&l&&await Ee(l,a),Re(!1)},[Ne,ge,l,Ee]),Ke=s.useCallback(()=>{je(ge),Re(!1)},[ge]),It=s.useCallback(a=>{a.key==="Enter"?(a.preventDefault(),Le()):a.key==="Escape"&&(a.preventDefault(),Ke())},[Le,Ke]);s.useEffect(()=>{Ae&&ye.current&&(ye.current.focus(),ye.current.select())},[Ae]);const Ve=s.useRef(null);hs(Ve,{enableCopy:!0,stopPropagation:!0});const[Mt,yt]=s.useState(!1);return s.useEffect(()=>{d&&yt(!0)},[d]),r.jsxs(r.Fragment,{children:[r.jsx(ut,{isOpen:d,onClick:J,drawerWidth:b}),r.jsxs("div",{className:`chat-drawer ${Qt} ${d?"chat-drawer--open":""} ${y?"chat-drawer--dragging":""}`,style:{width:b},"data-testid":"chat-drawer",children:[r.jsx("div",{ref:k,className:"chat-drawer__resize-handle",onMouseDown:g}),r.jsxs("div",{ref:Ve,className:"chat-drawer__body",children:[r.jsxs("div",{className:"chat-drawer__header",children:[r.jsxs("div",{className:"chat-drawer__header-top",children:[r.jsx(ke,{content:"关闭",children:r.jsx("button",{className:"chat-drawer__close-btn","data-track":"chat_click_drawer_close",onClick:de,"aria-label":"关闭对话",children:r.jsx(Zt,{size:16})})}),Ae?r.jsx("input",{ref:ye,className:"chat-drawer__title-input",value:Ne,onChange:a=>je(a.target.value),onKeyDown:It,onBlur:Le,maxLength:50}):r.jsx("h2",{className:"chat-drawer__title chat-drawer__title--editable",onClick:xt,title:"点击编辑标题",children:ge})]}),r.jsxs("div",{className:"chat-drawer__header-bottom",children:[r.jsx(mt,{value:v,valueRef:_,onChange:(a,n)=>{H(a),O(n||Ie(null,a))}}),r.jsxs("div",{className:"chat-drawer__session-actions",children:[r.jsx(ke,{content:"会话列表",children:r.jsx("button",{ref:ee,className:`chat-drawer__close-btn ${M?"chat-drawer__close-btn--active":""}`,"data-track":"chat_click_sessions_toggle",onClick:ue,"aria-label":"会话列表",children:r.jsx(es,{size:16})})}),r.jsx(ke,{content:"新对话",children:r.jsx("button",{className:"chat-drawer__close-btn","data-track":"chat_click_new_session",onClick:te,"aria-label":"新对话",children:r.jsx(ot,{size:16})})})]})]})]}),M&&r.jsx("div",{ref:q,children:r.jsx(dt,{sessions:i,activeSessionId:l,onSelectSession:me,onNewSession:te,onDeleteSession:_t,onRenameSession:Ee})}),r.jsxs("div",{className:"chat-drawer__content",children:[Mt&&r.jsx(s.Suspense,{fallback:r.jsx("div",{className:"chat-loading chat-loading--full",children:r.jsx("div",{className:"chat-loading__spinner"})}),children:r.jsx(Ks,{handler:St,workflowMessages:X,retryingWorkflowId:x,handleWorkflowRetry:Ce})}),r.jsx(ft,{selectedContent:W,onSend:Se,placeholder:"支持连续对话"})]})]})]})]})});Xs.displayName="ChatDrawer";export{Xs as C,mt as M,dt as S,ut as a,lt as b};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{r as d,j as e,h7 as P,je as I,dT as L,ek as A,jf as W}from"./diagram-engines-DmAewdsu.js";import{M as $}from"./index-BbDNsPPx.js";import{a3 as z}from"./shared-runtime-DBavnB0U.js";import"./startup-runtime-BbuNXj6O.js";import"./editor-engines-DGOT7Xqo.js";import"./tool-windows-DV-j2p51.js";/* empty css */import"./main-B2ZrUywM.js";const R={pending:"○",running:"◉",completed:"✓",failed:"✗",skipped:"⊘"},F={pending:"待执行",running:"执行中",completed:"已完成",failed:"失败",skipped:"已跳过"};function B(s){const c=[],f=/```mermaid\s*([\s\S]*?)```/gi;let m=0,l;for(;(l=f.exec(s))!==null;){const o=s.slice(m,l.index);o.trim()&&c.push(e.jsx($,{markdown:o,readOnly:!0,showModeSwitch:!1,initialMode:"wysiwyg",className:"chat-markdown"},`md-${c.length}`)),c.push(e.jsx(P,{code:l[1].trim(),className:"chat-markdown__mermaid"},`mermaid-${c.length}`)),m=f.lastIndex}const b=s.slice(m);return(b.trim()||c.length===0)&&c.push(e.jsx($,{markdown:b,readOnly:!0,showModeSwitch:!1,initialMode:"wysiwyg",className:"chat-markdown"},`md-${c.length}`)),c}const D=({step:s,index:c,isCurrentStep:f})=>{const[m,l]=d.useState(!1),b=R[s.status],o=F[s.status],v=Object.keys(s.args).length>0,k=s.result!==void 0&&s.result!==null,n=v||k||!!s.error||s.duration!==void 0,r=i=>{if(!i)return null;const x={};for(const[u,_]of Object.entries(i))u==="context"?x[u]="[AgentExecutionContext]":typeof _=="string"&&_.length>200?x[u]=_.substring(0,200)+"...":x[u]=_;return x},p=d.useMemo(()=>v&&JSON.stringify(r(s.args),null,2)||"",[v,s.args]);return e.jsxs("div",{className:`workflow-bubble-step workflow-bubble-step--${s.status} ${f?"workflow-bubble-step--current":""}`,children:[e.jsxs("div",{className:"workflow-bubble-step__main",onClick:()=>n&&l(!m),style:{cursor:n?"pointer":"default"},children:[e.jsx("div",{className:"workflow-bubble-step__index",children:c+1}),e.jsx("div",{className:`workflow-bubble-step__status workflow-bubble-step__status--${s.status}`,children:s.status==="running"?e.jsx("span",{className:"workflow-bubble-step__spinner"}):b}),e.jsxs("div",{className:"workflow-bubble-step__content",children:[e.jsx("div",{className:"workflow-bubble-step__title",children:s.description}),e.jsx("div",{className:"workflow-bubble-step__status-text",children:o})]}),n&&e.jsx("div",{className:`workflow-bubble-step__expand ${m?"workflow-bubble-step__expand--open":""}`,children:"▼"})]}),m&&n&&e.jsxs("div",{className:"workflow-bubble-step__details",children:[e.jsxs("div",{className:"workflow-bubble-step__detail-row",children:[e.jsx("span",{className:"workflow-bubble-step__label",children:"工具:"}),e.jsx("code",{className:"workflow-bubble-step__tool",children:s.mcp})]}),v?e.jsxs("div",{className:"workflow-bubble-step__detail-row workflow-bubble-step__detail-row--block",children:[e.jsx("span",{className:"workflow-bubble-step__label",children:"输入参数:"}),e.jsx("pre",{className:"workflow-bubble-step__args",children:p})]}):null,s.duration!==void 0&&e.jsxs("div",{className:"workflow-bubble-step__detail-row",children:[e.jsx("span",{className:"workflow-bubble-step__label",children:"耗时:"}),e.jsxs("span",{children:[s.duration,"ms"]})]}),k?e.jsxs("div",{className:"workflow-bubble-step__detail-row workflow-bubble-step__detail-row--block",children:[e.jsx("span",{className:"workflow-bubble-step__label",children:"执行结果:"}),e.jsx("div",{className:"workflow-bubble-step__result",children:typeof s.result=="string"?s.result:String(JSON.stringify(s.result,null,2))})]}):null,s.error&&e.jsxs("div",{className:"workflow-bubble-step__detail-row workflow-bubble-step__detail-row--block",children:[e.jsx("span",{className:"workflow-bubble-step__label",children:"错误信息:"}),e.jsx("div",{className:"workflow-bubble-step__error",children:s.error})]})]})]})},K=({log:s})=>{const[c,f]=d.useState(!1);if(s.type==="thinking"){const m=s.content,l=m.length>200,b=c?m:m.substring(0,200);return e.jsxs("div",{className:"agent-log agent-log--thinking",children:[e.jsxs("div",{className:"agent-log__header",children:[e.jsx("span",{className:"agent-log__icon",children:"💭"}),e.jsx("span",{className:"agent-log__title",children:"AI 分析"})]}),e.jsxs("div",{className:"agent-log__content",children:[e.jsxs("pre",{className:"agent-log__thinking-text",children:[b,l&&!c&&"..."]}),l&&e.jsx("button",{className:"agent-log__toggle",onClick:()=>f(!c),children:c?"收起":"展开全部"})]})]})}if(s.type==="tool_call")return e.jsxs("div",{className:"agent-log agent-log--tool-call",children:[e.jsxs("div",{className:"agent-log__header agent-log__header--clickable",onClick:()=>f(!c),children:[e.jsx("span",{className:"agent-log__icon",children:"🔧"}),e.jsxs("span",{className:"agent-log__title",children:["调用工具: ",s.toolName]}),e.jsx("span",{className:`agent-log__expand ${c?"agent-log__expand--open":""}`,children:"▼"})]}),c&&e.jsx("div",{className:"agent-log__content",children:e.jsx("pre",{className:"agent-log__args",children:JSON.stringify(s.args,null,2)})})]});if(s.type==="tool_result"){const m=s.success?"success":"error",l=s.success?"✅":"❌",b=s.data!==void 0&&s.data!==null;return e.jsxs("div",{className:`agent-log agent-log--tool-result agent-log--${m}`,children:[e.jsxs("div",{className:"agent-log__header agent-log__header--clickable",onClick:()=>f(!c),children:[e.jsx("span",{className:"agent-log__icon",children:l}),e.jsxs("span",{className:"agent-log__title",children:[s.toolName," ",s.success?"执行成功":"执行失败"]}),e.jsx("span",{className:`agent-log__expand ${c?"agent-log__expand--open":""}`,children:"▼"})]}),c&&e.jsxs("div",{className:"agent-log__content",children:[s.error&&e.jsx("div",{className:"agent-log__error",children:s.error}),b&&e.jsx("pre",{className:"agent-log__data",children:typeof s.data=="string"?s.data:String(JSON.stringify(s.data,null,2))})]})]})}return s.type==="retry"?e.jsx("div",{className:"agent-log agent-log--retry",children:e.jsxs("div",{className:"agent-log__header",children:[e.jsx("span",{className:"agent-log__icon",children:"🔄"}),e.jsxs("span",{className:"agent-log__title",children:["重试 #",s.attempt,": ",s.reason]})]})}):null},G=({workflow:s,className:c="",onRetry:f,isRetrying:m=!1})=>{const l=d.useMemo(()=>s.steps.map(t=>{const a=t.result,w=!!(a!=null&&a.taskId),g=t.result!==void 0&&t.result!==null,j=t.duration!==void 0;if((t.status==="running"||t.status==="pending")&&!w){if(t.error)return{...t,status:"failed"};if(g||j)return{...t,status:"completed"}}return t}),[s.steps]),b=d.useMemo(()=>s.generationType==="image"&&l.some(t=>t.mcp==="generate_image"||t.mcp==="generate_grid_image"||t.mcp==="generate_inspiration_board"),[s.generationType,l]),o=d.useMemo(()=>{const t=l,a=t.length,w=t.filter(N=>N.status==="completed").length,g=t.filter(N=>N.status==="failed").length,j=t.filter(N=>N.status==="running").length;let h="pending";if(g>0)h="failed";else if(w===a&&a>0)if(b){const N=s.postProcessingStatus;N==="completed"?h="completed":N==="failed"?h="failed":h="running"}else h="completed";else(j>0||w>0)&&(h="running");return{status:h,totalSteps:a,completedSteps:w}},[l,s.postProcessingStatus,b]),v=o.totalSteps>0?o.completedSteps/o.totalSteps*100:0,k=d.useMemo(()=>{const t={pending:"待开始",running:"执行中",completed:"已完成",failed:"执行失败"},a=l.every(w=>w.status==="completed");return a&&b&&s.postProcessingStatus==="processing"?"正在插入画布":a&&b&&!s.postProcessingStatus?"正在处理":t[o.status]},[o.status,l,s.postProcessingStatus,b]),n=o.status==="completed",r=o.status==="failed",p=o.status==="running",i=d.useMemo(()=>{var t,a,w;if(!n)return"";for(let g=l.length-1;g>=0;g-=1){const j=(t=l[g])==null?void 0:t.result;if(j){if(typeof j=="string"){const h=j.trim();if(h)return h;continue}if(typeof j=="object"&&j!==null){const h=j,N=((a=h.data)==null?void 0:a.content)||((w=h.data)==null?void 0:w.response)||h.content||h.response;if(typeof N=="string"){const T=N.trim();if(T)return T}}}}return s.aiAnalysis||""},[n,l,s.aiAnalysis]),x=d.useMemo(()=>{const t=["generate_image","generate_video","generate_grid_image","generate_inspiration_board","generate_long_video"];return l.some(a=>t.includes(a.mcp||""))},[l]),u=d.useMemo(()=>!n&&!r?null:r?{variant:"info",icon:"❌",text:"生成失败"}:i?{variant:"markdown",icon:"✨",markdown:i}:x?{variant:"info",icon:"✅",text:"已生成"}:{variant:"info",icon:"ℹ️",text:"未生成任何内容"},[n,r,i,x]),_=d.useMemo(()=>!u||u.variant!=="markdown"?null:u.markdown,[u]),y=d.useMemo(()=>l.findIndex(t=>t.status==="running"),[l]),S=d.useMemo(()=>l.findIndex(t=>t.status==="failed"),[l]);d.useRef(null);const M=d.useRef(null);d.useEffect(()=>{p&&requestAnimationFrame(()=>{M.current&&M.current.scrollIntoView({behavior:"smooth",block:"end"})})},[y,p,l.length]);const C=r&&s.retryContext&&S>=0,E=()=>{f&&S>=0&&f(S)};return e.jsxs("div",{ref:M,className:`workflow-bubble chat-message chat-message--assistant ${c}`,children:[e.jsx("div",{className:"chat-message-avatar",children:e.jsx("span",{children:s.generationType==="image"?"🖼️":s.generationType==="video"?"🎬":s.generationType==="audio"?"🎵":"📝"})}),e.jsxs("div",{className:"workflow-bubble__content chat-message-content",children:[e.jsxs("div",{className:"workflow-bubble__header",children:[e.jsx("span",{className:"workflow-bubble__title",children:s.name}),e.jsxs("div",{className:"workflow-bubble__status-info",children:[e.jsx("span",{className:`workflow-bubble__status workflow-bubble__status--${o.status}`,children:k}),e.jsxs("span",{className:"workflow-bubble__progress-text",children:[o.completedSteps,"/",o.totalSteps]})]})]}),e.jsx("div",{className:"workflow-bubble__progress",children:e.jsx("div",{className:`workflow-bubble__progress-bar workflow-bubble__progress-bar--${o.status}`,style:{width:`${v}%`}})}),s.prompt&&e.jsxs("div",{className:"workflow-bubble__prompt",children:[e.jsx("span",{className:"workflow-bubble__label",children:"请求:"}),e.jsx("span",{className:"workflow-bubble__prompt-text",children:s.prompt.length>100?`${s.prompt.substring(0,100)}...`:s.prompt})]}),e.jsx("div",{className:"workflow-bubble__steps",children:l.map((t,a)=>e.jsx(D,{step:t,index:a,isCurrentStep:a===y&&p},t.id))}),s.logs&&s.logs.length>0&&e.jsxs("div",{className:"workflow-bubble__logs",children:[e.jsx("div",{className:"workflow-bubble__logs-header",children:e.jsx("span",{className:"workflow-bubble__logs-title",children:"执行详情"})}),e.jsx("div",{className:"workflow-bubble__logs-list",children:s.logs.map((t,a)=>e.jsx(K,{log:t},`log-${a}-${t.timestamp}`))})]}),u&&u.variant!=="markdown"&&e.jsxs("div",{className:`workflow-bubble__summary workflow-bubble__summary--${u.variant}`,children:[e.jsx("span",{className:"workflow-bubble__summary-icon",children:u.icon}),e.jsx("span",{children:u.text})]}),u&&u.variant==="markdown"&&_&&e.jsxs("div",{className:"workflow-bubble__summary workflow-bubble__summary--success workflow-bubble__summary--markdown",children:[e.jsx("span",{className:"workflow-bubble__summary-icon",children:u.icon}),e.jsx("div",{className:"workflow-bubble__summary-markdown",children:e.jsx("div",{className:"workflow-bubble__markdown-message",children:e.jsx("div",{className:"workflow-bubble__markdown-content",children:B(_)})})})]}),r&&e.jsxs("div",{className:"workflow-bubble__summary workflow-bubble__summary--error",children:[e.jsx("span",{className:"workflow-bubble__summary-icon",children:"❌"}),e.jsx("span",{children:"执行失败,请重试"}),C&&f&&e.jsx("button",{className:"workflow-bubble__retry-btn",onClick:E,disabled:m,children:m?"重试中...":"🔄 从失败步骤重试"})]})]})]})},J=({message:s,className:c=""})=>{const f=d.useRef(null),{text:m,meta:l,images:b}=d.useMemo(()=>{var u,_,y,S,M,C,E;let n="";const r=[];for(const t of s.parts)if(t.type==="text")n+=t.text;else if(t.type==="data-file"){const a=t.data;((u=a==null?void 0:a.mediaType)!=null&&u.startsWith("image/")||(_=a==null?void 0:a.url)!=null&&_.startsWith("data:image/"))&&r.push({url:a.url,filename:a.filename||"image"})}const p=s;if(p.aiContext){const t=p.aiContext,a=[];return(y=t.model)!=null&&y.id&&a.push({label:t.model.id,icon:e.jsx(I,{size:"12px"})}),((S=t.params)==null?void 0:S.count)>1&&a.push({label:`${t.params.count} 张`,icon:e.jsx(L,{size:"12px"})}),(M=t.params)!=null&&M.size&&a.push({label:t.params.size,icon:e.jsx(A,{size:"12px"})}),((E=(C=t.selection)==null?void 0:C.texts)==null?void 0:E.length)>0&&a.push({label:`${t.selection.texts.length} 段文本`,icon:e.jsx(W,{size:"12px"})}),{text:t.userInstruction||t.finalPrompt||n,meta:a,images:r}}let i=n;const x=[];if(i.includes(`
|
|
2
|
+
---
|
|
3
|
+
`)){const t=i.split(`
|
|
4
|
+
---
|
|
5
|
+
`);i=t[0],t[1].split(" • ").forEach(w=>{const g=w.replace(/模型:\s*/,"").replace(/数量:\s*/,"").replace(/尺寸:\s*/,"").trim();if(g){let j=e.jsx(I,{size:"12px"});w.includes("数量")&&(j=e.jsx(L,{size:"12px"})),w.includes("尺寸")&&(j=e.jsx(A,{size:"12px"})),x.push({label:g,icon:j})}})}else{const t=i.split(`
|
|
6
|
+
`),a=[];for(const w of t){const g=w.trim();if(g.startsWith("模型:")||g.startsWith("数量:")||g.startsWith("提示词:")){const j=g.replace(/.*:\s*/,"").trim();let h=e.jsx(I,{size:"12px"});g.includes("数量")&&(h=e.jsx(L,{size:"12px"})),x.push({label:j,icon:h})}else g.startsWith("📝 选中的文本:")?x.push({label:g.replace("📝 ","").trim(),icon:e.jsx(W,{size:"12px"})}):g&&!g.startsWith("💬 用户指令:")&&a.push(w)}i=a.join(`
|
|
7
|
+
`).trim()}if(!i&&x.length>0){const t=n.match(/💬 用户指令:\s*([\s\S]*?)(?=\n模型:|\n数量:|$)/);t&&t[1].trim()&&(i=t[1].trim())}return{text:i||n,meta:x,images:r}},[s.parts,s.aiContext]),o=d.useCallback(n=>{n.stopPropagation()},[]),v=d.useCallback(n=>{if((n.ctrlKey||n.metaKey)&&n.key==="c"){const p=window.getSelection(),i=p==null?void 0:p.toString();i&&(z(i).catch(x=>{console.error("Failed to copy text:",x)}),n.stopPropagation())}},[]);d.useEffect(()=>{const n=f.current;if(n)return n.addEventListener("pointerdown",o),n.addEventListener("pointerup",o),n.addEventListener("mousedown",o),n.addEventListener("mouseup",o),n.addEventListener("click",o),n.addEventListener("keydown",v),()=>{n.removeEventListener("pointerdown",o),n.removeEventListener("pointerup",o),n.removeEventListener("mousedown",o),n.removeEventListener("mouseup",o),n.removeEventListener("click",o),n.removeEventListener("keydown",v)}},[o,v]);const k=b.length===0&&(!l||l.length===0);return e.jsxs("div",{className:`user-bubble chat-message chat-message--user ${k?"user-bubble--text-only":""} ${c}`,children:[e.jsx("div",{className:"chat-message-avatar",children:e.jsx("span",{children:"👤"})}),e.jsxs("div",{className:"user-bubble__content chat-message-content",children:[b.length>0&&e.jsx("div",{className:`user-bubble__images user-bubble__images--${Math.min(b.length,4)}`,children:b.map((n,r)=>e.jsx("div",{className:"user-bubble__image-wrapper",children:e.jsx("img",{src:n.url,alt:n.filename,className:"user-bubble__image",loading:"lazy"})},r))}),m&&e.jsx("div",{ref:f,className:"user-bubble__text user-bubble__text--selectable",children:m}),l&&l.length>0&&e.jsx("div",{className:"user-bubble__meta-tags",children:l.map((n,r)=>e.jsxs("div",{className:"user-bubble__meta-tag",children:[e.jsx("span",{className:"user-bubble__meta-icon",children:n.icon}),e.jsx("span",{className:"user-bubble__meta-label",children:n.label})]},r))})]})]})},O="[[WORKFLOW_MESSAGE]]",ee=({handler:s,workflowMessages:c,retryingWorkflowId:f,handleWorkflowRetry:m,className:l="chat-section"})=>{const b=d.useCallback(r=>{const p=r.parts.find(i=>i.type==="text");if(p&&"text"in p){const i=p.text;if(i.startsWith(O))return i.replace(O,"")}return null},[]),o=d.useCallback(r=>r.parts.some(p=>p.type==="data-file"),[]),v=d.useCallback(r=>r.parts.filter(i=>i.type==="text"&&"text"in i).map(i=>typeof i.text=="string"?i.text:String(i.text??"")).join(""),[]),k=s.status==="submitted"||s.status==="streaming",n=s.messages.length===0&&!k;return e.jsx("div",{className:l,children:e.jsx("div",{className:"chat-messages",children:e.jsxs("div",{className:"chat-messages-list",children:[s.messages.map((r,p)=>{const i=b(r);if(i){const _=c.get(i);if(_)return e.jsx(G,{workflow:_,onRetry:y=>m(i,_,y),isRetrying:f===i},r.id)}const x=r.parts.some(_=>_.type==="text"&&"text"in _&&typeof _.text=="string"&&_.text.startsWith("❌ 错误")),u=`chat-message chat-message--${r.role} ${x?"chat-message--error":""}`;return r.role==="user"&&o(r)?e.jsx(J,{message:r},r.id):e.jsxs("div",{className:u,"data-message-id":r.id,"data-message-last":p===s.messages.length-1,children:[e.jsx("div",{className:"chat-message-avatar",children:e.jsx("span",{children:r.role==="user"?"👤":"🤖"})}),e.jsx("div",{className:"chat-message-content",children:e.jsx($,{markdown:v(r),readOnly:!0,showModeSwitch:!1,initialMode:"wysiwyg",className:"chat-markdown"})}),r.role==="assistant"&&!x&&e.jsx("div",{className:"chat-message-actions"})]},r.id)}),k&&e.jsxs("div",{className:"chat-loading",children:[e.jsx("div",{className:"chat-loading__spinner"}),e.jsx("span",{children:"思考中..."})]}),n&&e.jsxs("div",{className:"chat-empty",children:[e.jsx("h3",{children:"开始对话"}),e.jsx("p",{children:"输入消息与AI助手交流"})]})]})})})};export{ee as ChatMessagesArea,ee as default};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./diagram-engines-CGOhfK6V.css","./tool-windows-CqSDeXz5.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{k as Se,dz as yo,r as c,gO as Xt,cN as We,j as m,gP as ua,e2 as ma,al as Io,cR as pa,ad as Fs,da as fa,aO as ha,gQ as Un,ct as Sn,gR as ns,b6 as ss,gS as Bs,eR as os,bm as as,f6 as Pn,bc as xo,bd as bo,d$ as ga,ba as wa,dK as rs,bg as ya,gT as Ia,eS as xa,fj as ba,gU as _a,eo as ka,cL as is,ca as va,aq as Sa,gV as Ma,gW as Ca,gX as Ta,l as Mn,R as _o,dA as gn,dH as mt,gY as Pa,aV as Ea,a9 as tt,gZ as Aa,g_ as Da,C as ko,a3 as Vn,I as Hs,a0 as vo,aP as $s,g$ as Us,h0 as Vs,i as wn,e4 as yn,h1 as Ra,h2 as Na,fn as ja,h3 as za,h4 as Gs,h5 as Ks,h6 as Oa}from"./diagram-engines-DmAewdsu.js";import{p as Wa,a as La,b as Fa,u as Ba,c as Ha,d as In,e as St,W as $a}from"./useWorkflowSubmission-BIFN-qvq.js";import{_ as Cn}from"./startup-runtime-BbuNXj6O.js";import{u as Ua,cg as qn,ch as en,ci as Va,cj as Ga,ck as xn,cl as bn,cm as Ka,cn as Ya,co as Za,cp as pt,cq as Gn,cr as ze,cs as Kn,ct as Ys,cu as Zs,cv as Xs,I as Xa,M as qa,cw as Ja}from"./tool-windows-DV-j2p51.js";import{u as Qa,S as er,i as tr}from"./index-DDzCo7oj.js";import{w as Tt,y as nr,aQ as sr,n as or,f as Ye,g as En,ax as Jn,aw as Pt,av as Et,N as ht,aR as Qn,F as gt,r as Mt,h as qs,aS as Js,U as Qs,W as ar,J as rr,ar as ir}from"./shared-runtime-DBavnB0U.js";import{m as cr,u as lr,a as dr,i as ur}from"./main-B2ZrUywM.js";import{u as mr,r as pr,g as fr,a as hr,b as gr,l as wr,c as Yn,s as yr,d as Ir,P as xr}from"./ai-generation-preferences-service-BZMqxTjU.js";import{setCanvasBoard as eo}from"./canvas-insertion-C-BRaM5S.js";import{s as to}from"./workflow-submission-service-BRb6CPDr.js";import{r as So,S as br,a as es,b as st,f as Zn,c as no}from"./skill-dsl-parser-BAv2yCP9.js";import"./video-generation-C2GITib6.js";import"./ppt-generation-BLs-dVnA.js";import"./video-analyze-BeuyAh9W.js";const Me="external-skill-packages";let cs=[],Tn=[],ts=!1;async function Ze(){var t,n;if(!ts){try{let e=await Se.get(Me),o=null;try{o=await _r()}catch(r){console.warn("[ExternalSkillService] 预构建 bundle 加载失败(非致命):",r)}if(!(e&&Array.isArray(e)&&e.length>0))o&&o.skills&&o.skills.length>0&&(e=[{name:o.name||"baoyu-skills",skills:o.skills,metadata:o.metadata}],await Se.set(Me,e));else if(o&&o.skills&&o.skills.length>0){const r=(t=o.metadata)==null?void 0:t.bundleVersion,a=e.find(u=>u.name===(o.name||"baoyu-skills")),f=(n=a==null?void 0:a.metadata)==null?void 0:n.bundleVersion;if(r&&r!==f){const u={name:o.name||"baoyu-skills",skills:o.skills,metadata:o.metadata},d=e.filter(x=>x.name!==u.name);e=[u,...d],await Se.set(Me,e)}else if(!r&&!f){const u={name:o.name||"baoyu-skills",skills:o.skills,metadata:o.metadata},d=e.filter(x=>x.name!==u.name);e=[u,...d],await Se.set(Me,e)}}e&&Array.isArray(e)&&await An(e)}catch(e){console.error("[ExternalSkillService] 初始化失败:",e)}ts=!0}}async function _r(){try{const t=await Cn(()=>import("./external-skills-BcV6ATYi.js"),[],import.meta.url);return t.default||t}catch{return null}}async function kr(){return await Ze(),[...cs]}async function ls(t){await Ze();const n=await Se.get(Me),e=n&&Array.isArray(n)?[...n]:[],o=e.findIndex(i=>i.name===t.name);o>=0?e[o]=t:e.push(t),await Se.set(Me,e),await An(e)}async function vr(t){await Ze();const n=await Se.get(Me);if(!n||!Array.isArray(n))return;const e=n.filter(o=>o.name!==t);await Se.set(Me,e),await An(e)}async function Sr(t){await Ze();const n=await Se.get(Me);if(!n)return[];const e=n.find(o=>o.name===t);return(e==null?void 0:e.skills)??[]}async function Mr(){return await Ze(),[...Tn]}async function Cr(){await Ze();const t=await Se.get(Me);return t?t.flatMap(n=>n.skills):[]}async function Mo(t){await Ze();const n=await Se.get(Me);if(!n)return null;for(const e of n){const o=e.skills.find(i=>i.id===t);if(o)return o}return null}async function Tr(t){const n=await Mo(t);return(n==null?void 0:n.content)??null}async function Pr(t,n){var S;const o=await(await Cn(async()=>{const{default:y}=await import("./office-data-2Ik8Wb2D.js").then(w=>w.j);return{default:y}},__vite__mapDeps([0]),import.meta.url)).default.loadAsync(t);let i=null;const r=((S=o.file(/\.claude-plugin\/marketplace\.json$/))==null?void 0:S[0])||o.file("marketplace.json");if(r){const y=await r.async("text");i=La(y)}const a=n||(i==null?void 0:i.name)||t.name.replace(/\.zip$/i,""),f=[],u=/(?:^|\/)(skills\/([^/]+)\/SKILL\.md)$/;for(const[y,w]of Object.entries(o.files)){if(w.dir)continue;const h=y.match(u);if(h){const D=h[2],b=await w.async("text"),C=new Map,P=y.substring(0,y.lastIndexOf("SKILL.md"));for(const[T,g]of Object.entries(o.files))if(!g.dir&&T.startsWith(P)&&T!==y){const R=T.substring(P.length);if(R.startsWith("references/")||R.startsWith("prompts/")){const W=await g.async("text");C.set(R,W)}}f.push({dirName:D,skillMdContent:b,references:C.size>0?C:void 0})}}if(f.length===0)throw new Error("ZIP 文件中未找到有效的 Skill(预期路径: skills/*/SKILL.md)");const d=Fa(f,a,i),x={name:a,url:void 0,skills:d,metadata:i==null?void 0:i.metadata};return await ls(x),x}async function Er(t,n="custom"){const e=Wa(t);if(!e)throw new Error("无法解析 SKILL.md 内容,请检查格式是否正确(需包含 YAML front matter)");const o={id:`${n}:${e.name}`,name:e.name,description:e.description,type:br,content:e.body,source:n};await Ze();const i=await Se.get(Me),r=i&&Array.isArray(i)?[...i]:[];let a=r.find(u=>u.name===n);a||(a={name:n,skills:[],metadata:{description:"手动导入的 Skill"}},r.push(a));const f=a.skills.findIndex(u=>u.id===o.id);return f>=0?a.skills[f]=o:a.skills.push(o),await Se.set(Me,r),await An(r),o}async function Ar(t){await ls(t)}async function An(t){cs=t.map(e=>({name:e.name,url:e.url,skillCount:e.skills.length,metadata:e.metadata})),Tn=[];for(const e of t)for(const o of e.skills)Tn.push({id:o.id,name:o.name,description:o.description,source:o.source,sourceUrl:o.sourceUrl,category:o.category,outputType:o.outputType});const n=t.flatMap(e=>e.skills);So(n)}async function Dr(){await Se.remove(Me),cs=[],Tn=[],So([]),ts=!1}const ds={initialize:Ze,getPackages:kr,addPackage:ls,removePackage:vr,getSkillsByPackage:Sr,getAllExternalSkillsMeta:Mr,getAllExternalSkills:Cr,getSkillById:Mo,getSkillContentById:Tr,importFromZip:Pr,importFromPastedContent:Er,importFromBundle:Ar,clearAll:Dr},Rr=({generationType:t,onSelectPrompt:n,language:e,extraActions:o,onBeforeOpenMyPrompts:i})=>{const{history:r,removeHistory:a,refreshHistory:f}=yo({deduplicateWithPresets:!1,modelTypeFilter:t==="image"||t==="video"?void 0:t}),{imageHistory:u,videoHistory:d}=mr(),{confirm:x,confirmDialog:S}=Ua(),[y,w]=c.useState(!1),[,h]=c.useState(0),D=c.useRef(null),b=c.useRef(null),C=c.useRef(null),P=e==="zh"?"我的提示词":"My Prompts",T=t==="image"||t==="video"?pr({generationType:t,language:e,promptContents:fr(t,e,t==="image"?u:d),imageHistory:u,videoHistory:d}):hr({generationType:t,language:e,aiInputHistory:r,imageHistory:u,videoHistory:d});c.useEffect(()=>Xt.subscribeChanges(()=>{f(),h(B=>B+1)}),[f]),c.useEffect(()=>()=>{b.current&&clearTimeout(b.current),C.current&&clearTimeout(C.current)},[]);const g=c.useCallback(()=>{C.current&&(clearTimeout(C.current),C.current=null),b.current=setTimeout(()=>{f(),h(B=>B+1),y||We.trackPromptAction({action:"open_panel",surface:"ai_input_prompt_popover",promptType:t,itemCount:T.length}),w(!0)},150)},[t,y,T.length,f]),R=c.useCallback(()=>{b.current&&(clearTimeout(b.current),b.current=null),C.current=setTimeout(()=>{w(!1)},200)},[]),W=c.useCallback(B=>{n({content:B.content,modelType:B.modelType,scene:B.scene}),w(!1)},[n]),Q=c.useCallback(async B=>{const _=T.find(H=>H.id===B);!_||!await x({title:e==="zh"?"确认删除提示词":"Delete Prompt",description:e==="zh"?"确定要删除这条提示词吗?此操作不可撤销。":"Are you sure you want to delete this prompt? This action cannot be undone.",confirmText:e==="zh"?"删除":"Delete",cancelText:e==="zh"?"取消":"Cancel",danger:!0})||(Xt.deletePrompt(t,_.content),_.historyId&&t!=="image"&&t!=="video"?a(_.historyId):h(H=>H+1))},[x,t,e,T,a]),ee=c.useCallback(B=>{const _=T.find(N=>N.id===B);_&&(Xt.isPinned(t,_.content)?Xt.unpinPrompt(t,_.content):Xt.pinPrompt(t,_.content),h(N=>N+1))},[t,T]),se=c.useCallback(()=>{const B=qn.find(H=>H.id==="prompt-history");if(!B){We.trackPromptAction({action:"open_tool",surface:"ai_input_prompt_popover",promptType:t,status:"failed",metadata:{tool_id:"prompt-history",reason:"tool_not_found"}});return}i==null||i();const _=en.getToolState("prompt-history");console.info("[PromptHistoryPopover] open my prompts",{generationType:t,beforeStatus:_==null?void 0:_.status,beforeInstanceId:_==null?void 0:_.instanceId,beforeIsLauncher:_==null?void 0:_.isLauncher,beforeIsPinned:_==null?void 0:_.isPinned}),We.trackPromptAction({action:"open_tool",surface:"ai_input_prompt_popover",promptType:t,status:"success",metadata:{tool_id:B.id}}),w(!1),en.openTool(B,{componentProps:{initialCategory:t}});const N=en.getToolState("prompt-history");console.info("[PromptHistoryPopover] requested my prompts open",{generationType:t,afterStatus:N==null?void 0:N.status,afterInstanceId:N==null?void 0:N.instanceId,afterIsLauncher:N==null?void 0:N.isLauncher,afterIsPinned:N==null?void 0:N.isPinned})},[t,i]);return m.jsxs("div",{ref:D,className:"prompt-history-popover",children:[m.jsxs("div",{className:"prompt-history-popover__actions",children:[m.jsx("button",{className:"prompt-history-popover__trigger",title:P,"data-track":"ai_input_click_history",onMouseEnter:g,onMouseLeave:R,children:m.jsx(ua,{size:18})}),o]}),y&&m.jsx("div",{className:"prompt-history-popover__panel-wrapper",onMouseEnter:g,onMouseLeave:R,children:m.jsx(ma,{title:P,items:T,onSelect:W,onTogglePin:ee,onDelete:Q,onTitleClick:se,language:e,showCount:!0,analyticsSurface:"ai_input_prompt_popover",analyticsPromptType:t})}),S]})};function Nr(t){var n;return!!((n=t.params)!=null&&n.longVideoMeta)}function jr(t){var n;return((n=t.params)==null?void 0:n.longVideoMeta)||null}class At{constructor(){this.isInitialized=!1,this.batches=new Map,this.initTimestamp=0}static getInstance(){return At.instance||(At.instance=new At),At.instance}initialize(){this.isInitialized||(this.isInitialized=!0,this.initTimestamp=Date.now(),Io.observeTaskUpdates().subscribe(n=>{if(n.type==="taskUpdated"&&n.task.status===Tt.COMPLETED&&n.task.type===nr.VIDEO&&Nr(n.task)){if((n.task.completedAt||0)<this.initTimestamp)return;this.handleSegmentCompleted(n.task).catch(o=>{console.error("[LongVideoChain] Error handling completed segment:",o)})}}))}async handleSegmentCompleted(n){var d;const e=jr(n);if(!e)return;const{segmentIndex:o,totalSegments:i,scripts:r,batchId:a}=e,f=(d=n.result)==null?void 0:d.url;let u=this.batches.get(a);if(u||(u={batchId:a,totalSegments:i,completedSegments:new Map,processedSegments:new Set,creatingNextFor:null,isMerging:!1,mergeCompleted:!1,scripts:r||[],characterReferenceUrls:e.characterReferenceUrls,characterDescription:e.characterDescription},this.batches.set(a,u)),!u.processedSegments.has(o)){if(u.processedSegments.add(o),f&&u.completedSegments.set(o,f),u.completedSegments.size===i){await this.mergeAndInsert(u);return}if(u.creatingNextFor!==o&&o<i){u.creatingNextFor=o;try{await this.createNextSegment(n,e,r,f,u.characterReferenceUrls,u.characterDescription)}finally{u.creatingNextFor=null}}}}async createNextSegment(n,e,o,i,r,a){const f=e.segmentIndex+1,u=o.find(S=>S.index===f);if(!u){console.error(`[LongVideoChain] Script not found for segment ${f}`);return}let d;if(i)try{d=(await sr(i)).dataUrl}catch(S){console.error("[LongVideoChain] Failed to extract last frame:",S)}const x={...e,segmentIndex:f,needsLastFrame:f<e.totalSegments,characterReferenceUrls:r??e.characterReferenceUrls,characterDescription:a??e.characterDescription};Va(u,x,d)}async mergeAndInsert(n){if(!(n.isMerging||n.mergeCompleted)){n.isMerging=!0;try{const e=[];for(let a=1;a<=n.totalSegments;a++){const f=n.completedSegments.get(a);f&&e.push(f)}if(e.length===0){console.error("[LongVideoChain] No video URLs to merge");return}const o=this.extractTransitions(n),r=await cr(e,(a,f,u)=>{const d=u||`${f} ${a.toFixed(1)}%`},{transitions:o,transitionDuration:.5});await this.insertMergedVideo(r.url),n.mergeCompleted=!0,this.cleanupBatch(n.batchId)}catch(e){console.error("[LongVideoChain] Merge failed:",e),this.cleanupBatch(n.batchId)}finally{n.isMerging=!1}}}async insertMergedVideo(n){try{await Ga("video",n)}catch(e){console.error("[LongVideoChain] Failed to insert video to canvas:",e)}}extractTransitions(n){return!n.scripts||n.scripts.length===0?[]:n.scripts.sort((e,o)=>e.index-o.index).slice(0,-1).map(e=>e.transition_hint||"cut")}cleanupBatch(n){const e=this.batches.get(n);e&&(e.completedSegments.clear(),e.processedSegments.clear(),this.batches.delete(n))}getBatchStatus(n){const e=this.batches.get(n);return e?{completed:e.completedSegments.size,total:e.totalSegments,isMerging:e.isMerging,mergeCompleted:e.mergeCompleted}:null}}const zr=At.getInstance();function Or(){zr.initialize()}function so(){return`img-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}async function oo(t){return new Promise((n,e)=>{const o=new Image,i=t.startsWith("http")&&!t.startsWith(location.origin);o.crossOrigin="anonymous",o.onload=()=>n(o),o.onerror=()=>{e(i?new Error("无法加载外部图片,可能是跨域 (CORS) 限制。请先下载图片到本地后再操作。"):new Error("图片加载失败,请检查图片是否有效"))},o.src=t})}function Wr(t,n=.92){return t.toDataURL("image/jpeg",n)}class Lr{async split(n,e){const{rows:o,cols:i}=e;if(o<1||i<1)throw new Error("Grid rows and cols must be at least 1");const r=await oo(n),a=r.naturalWidth,f=r.naturalHeight,u=Math.floor(a/i),d=Math.floor(f/o),x=[];for(let S=0;S<o;S++)for(let y=0;y<i;y++){const w=S*i+y,h=y*u,D=S*d,b=document.createElement("canvas");b.width=u,b.height=d;const C=b.getContext("2d");if(!C)throw new Error("Failed to get canvas 2d context");C.drawImage(r,h,D,u,d,0,0,u,d);const P=Wr(b);x.push({id:so(),imageData:P,originalIndex:w,width:u,height:d})}return x}async splitToBlob(n,e){const{rows:o,cols:i}=e;if(o<1||i<1)throw new Error("Grid rows and cols must be at least 1");const r=await oo(n),a=r.naturalWidth,f=r.naturalHeight,u=Math.floor(a/i),d=Math.floor(f/o),x=[];for(let S=0;S<o;S++)for(let y=0;y<i;y++){const w=S*i+y,h=y*u,D=S*d,b=document.createElement("canvas");b.width=u,b.height=d;const C=b.getContext("2d");if(!C)throw new Error("Failed to get canvas 2d context");C.drawImage(r,h,D,u,d,0,0,u,d);const P=await new Promise((g,R)=>{b.toBlob(W=>{W?g(W):R(new Error("Failed to create blob"))},"image/png",.92)}),T=URL.createObjectURL(P);x.push({id:so(),imageData:T,originalIndex:w,width:u,height:d})}return x}revokeBlobUrls(n){for(const e of n)e.imageData.startsWith("blob:")&&URL.revokeObjectURL(e.imageData)}}const ao=new Lr;function De(t,n){return Math.random()*(n-t)+t}function _n(t){const n=[...t];for(let e=n.length-1;e>0;e--){const o=Math.floor(Math.random()*(e+1));[n[e],n[o]]=[n[o],n[e]]}return n}class Fr{calculate(n,e,o,i){switch(e){case"scattered":return this.scatteredLayout(n,o,i);case"grid":return this.gridLayout(n,o);case"circular":return this.circularLayout(n,o,i);case"inspiration-board":return this.inspirationBoardLayout(n,o,i);default:return console.warn(`[LayoutEngine] Unknown layout style: ${e}, falling back to grid`),this.gridLayout(n,o)}}scatteredLayout(n,e,o){const{maxRotation:i=15,minScale:r=.85,maxScale:a=1.15,positionJitter:f=40}=o||{},{canvasWidth:u,canvasHeight:d,startX:x,startY:S,gap:y=20}=e,w=n.length,h=Math.ceil(Math.sqrt(w)),D=Math.ceil(w/h),b=Math.max(...n.map(ee=>ee.width)),C=Math.max(...n.map(ee=>ee.height)),P=u-y*2,T=d-y*2,g=P/h,R=T/D,W=Math.min((g-y)/b,(R-y)/C,1),Q=_n(n.map((ee,se)=>se));return n.map((ee,se)=>{const B=Math.floor(se/h),_=se%h,N=x+y+_*g+g/2,H=S+y+B*R+R/2,X=De(-f,f),$=De(-f,f),ie=De(-i,i),Ce=De(r,a),Te=W*Ce,Dt=ee.width*Te,tn=ee.height*Te;return{...ee,x:N+X-Dt/2,y:H+$-tn/2,rotation:ie,scale:Te,zIndex:Q[se]}})}gridLayout(n,e){const{canvasWidth:o,canvasHeight:i,startX:r,startY:a,gap:f=20}=e,u=n.length,d=Math.ceil(Math.sqrt(u)),x=Math.ceil(u/d),S=Math.max(...n.map(P=>P.width)),y=Math.max(...n.map(P=>P.height)),w=o-f*(d+1),h=i-f*(x+1),D=w/d,b=h/x,C=Math.min(D/S,b/y,1);return n.map((P,T)=>{const g=Math.floor(T/d),R=T%d,W=P.width*C,Q=P.height*C,ee=r+f+R*(D+f),se=a+f+g*(b+f),B=ee+(D-W)/2,_=se+(b-Q)/2;return{...P,x:B,y:_,rotation:0,scale:C,zIndex:T}})}circularLayout(n,e,o){const{centerIndex:i=-1,radius:r,startAngle:a=-90}=o||{},{canvasWidth:f,canvasHeight:u,startX:d,startY:x}=e,S=d+f/2,y=x+u/2,w=i>=0&&i<n.length?n.filter((_,N)=>N!==i):n,h=i>=0&&i<n.length?n[i]:null,D=Math.max(...n.map(_=>_.width)),b=Math.max(...n.map(_=>_.height)),C=Math.max(D,b),P=w.length,T=C*.8,g=P*C*1.2,R=Math.max(T,g/(2*Math.PI)),W=r||Math.min(R,Math.min(f,u)/2-C/2),Q=Math.min(f,u),ee=Math.min(Q*.25/C,1),se=[];if(h){const _=h.width*ee*1.2,N=h.height*ee*1.2;se.push({...h,x:S-_/2,y:y-N/2,rotation:0,scale:ee*1.2,zIndex:P})}const B=360/P;return w.forEach((_,N)=>{const X=(a+N*B)*Math.PI/180,$=_.width*ee,ie=_.height*ee,Ce=S+W*Math.cos(X)-$/2,Te=y+W*Math.sin(X)-ie/2;se.push({..._,x:Ce,y:Te,rotation:0,scale:ee,zIndex:N})}),se}inspirationBoardLayout(n,e,o){const{minWidthRatio:i=xn.minWidthRatio,maxWidthRatio:r=xn.maxWidthRatio,maxRotation:a=xn.maxRotation,gap:f=xn.gap}=o||{},{canvasWidth:u,canvasHeight:d,startX:x,startY:S}=e,y=n.length,w=this.assignSizeCategories(y),h=n.reduce((R,W)=>R+W.width,0)/y,D=n.reduce((R,W)=>R+W.height,0)/y,b=u||1200,C=d||600,P=Math.min(b*.25/h,C*.4/D,1),T=this.calculateInspirationBoardPositions(y,b,C,f),g=_n(n.map((R,W)=>W));return n.map((R,W)=>{const Q=T[W],ee=w[W];let se;switch(ee){case"large":se=De(1.2,r);break;case"medium":se=De(.9,1.1);break;case"small":se=De(i,.85);break;default:se=1}const B=P*se,_=De(-a,a),N=De(-20,20),H=De(-15,15),X=R.width*B,$=R.height*B;return{...R,x:x+Q.x+N-X/2,y:S+Q.y+H-$/2,rotation:_,scale:B,zIndex:g[W]}})}assignSizeCategories(n){const e=[],o=Math.max(2,Math.floor(n*.25)),i=Math.max(2,Math.floor(n*.25)),r=n-o-i;for(let a=0;a<o;a++)e.push("large");for(let a=0;a<r;a++)e.push("medium");for(let a=0;a<i;a++)e.push("small");return _n(e)}calculateInspirationBoardPositions(n,e,o,i){const r=[],a=Math.ceil(n/4),f=Math.ceil(n/a),u=(e-i*2)/f,d=(o-i*2)/a;for(let x=0;x<n;x++){const S=Math.floor(x/f),y=x%f,w=i+y*u+u/2,h=i+S*d+d/2,D=De(-u*.3,u*.3),b=De(-d*.2,d*.2);r.push({x:w+D,y:h+b})}return _n(r)}calculateRequiredSize(n,e,o=.5){const i=n.length,r=Math.ceil(Math.sqrt(i)),a=Math.ceil(i/r),f=Math.max(...n.map(w=>w.width)),u=Math.max(...n.map(w=>w.height)),d=20,x=e==="scattered"?60:40,S=r*f*o+(r+1)*d+x*2,y=a*u*o+(a+1)*d+x*2;return{width:S,height:y}}}const ro=new Fr;class Br{constructor(){this.board=null}setBoard(n){this.board=n}getBoard(){return this.board}async generate(n){const{theme:e,gridConfig:o=bn.gridConfig,layoutStyle:i=bn.layoutStyle,imageSize:r=bn.imageSize,imageQuality:a=bn.imageQuality}=n;try{const f=this.buildPrompt(e,o),u=await pa.generateImage(f,{size:r,quality:a,response_format:"url"});if(!u.data||u.data.length===0)throw new Error("AI 生成图片失败:未返回图片数据");const d=u.data[0].url||u.data[0].b64_json,x=d&&or(String(d));if(!x)throw new Error("AI 生成图片失败:未返回图片 URL");const S=await Fs.getImageForAI(x),y=S.type==="base64"?S.value:x,w=await ao.split(y,o),h=this.calculateLayoutParams(w),D=ro.calculate(w,i,h);return{success:!0,originalImageUrl:x,elements:D}}catch(f){return console.error("[GridImageService] Generation failed:",f),{success:!1,error:f.message||"宫格图生成失败"}}}async processExistingImage(n,e,o="scattered"){try{const i=await Fs.getImageForAI(n),r=i.type==="base64"?i.value:n,a=await ao.split(r,e),f=this.calculateLayoutParams(a),u=ro.calculate(a,o,f);return{success:!0,originalImageUrl:n,elements:u}}catch(i){return console.error("[GridImageService] Processing failed:",i),{success:!1,error:i.message||"宫格图处理失败"}}}async insertToBoard(n,e){if(!this.board)throw new Error("画板未初始化,请先调用 setBoard");let o=(e==null?void 0:e[0])??100,i=e==null?void 0:e[1];if(i===void 0){const a=fa(this.board);i=(a==null?void 0:a[1])??100,o=(a==null?void 0:a[0])??o}const r=[...n].sort((a,f)=>a.zIndex-f.zIndex);for(const a of r){const f=o+a.x,u=i+a.y,d={url:a.imageData,width:a.width*a.scale,height:a.height*a.scale};ha.insertImage(this.board,d,[f,u])}}async generateAndInsert(n,e){const o=await this.generate(n);return o.success&&o.elements&&await this.insertToBoard(o.elements,e),o}buildPrompt(n,e){const o=Ka.zh;return o(n,e.rows,e.cols)}calculateLayoutParams(n){const e=n.reduce((w,h)=>w+h.width,0),o=n.reduce((w,h)=>w+h.height,0),i=n.length,r=Math.ceil(Math.sqrt(i)),a=Math.ceil(i/r),f=e/i,u=o/i,d=30,x=50,S=r*f+(r+1)*d+x*2,y=a*u+(a+1)*d+x*2;return{canvasWidth:S,canvasHeight:y,startX:0,startY:0,gap:d}}}const io=new Br;function Hr(t){return{cleanText:t,selectedAudioModel:null,selectedImageModel:null,selectedVideoModel:null,selectedParams:[],selectedCount:null}}function $r(){const t=En.get();return(t==null?void 0:t.imageModelName)||ht()}function Ur(){const t=En.get();return(t==null?void 0:t.videoModelName)||Pt()}function Vr(){const t=En.get();return(t==null?void 0:t.audioModelName)||Et()}function co(){const t=En.get();return(t==null?void 0:t.textModelName)||Jn()}function Gr(t,n,e){if(n.length>0)return n.join(`
|
|
3
|
+
`);if(t){if(e===1)return"请仔细分析这张图片的内容、风格、构图、色调和艺术特点,推测生成这张图片可能使用的原始提示词,然后基于你推测的提示词重新生成一张全新的、风格相似但内容不完全相同的图片。不要直接复制原图。";if(e>1)return"请分析这些图片的主题、风格和视觉元素,找出它们之间的共同点或关联性,然后创造性地将它们融合成一张全新的、和谐统一的图片。融合时请保持各图片的精华元素,确保最终作品在构图、色调和风格上协调一致。"}return""}function qt(t){return t.replace(":","x").toLowerCase()}function Kr(t,n,e){const o=n.texts.length>0||n.images.length>0||n.videos.length>0||n.graphics.length>0,i=n.texts,r=n.images.length+n.graphics.length,a=Hr(t),f=a.cleanText.trim().length>0;let u=(e==null?void 0:e.generationType)||"image",d,x=!1;if(e!=null&&e.modelId){const g=Ye(e.modelId);e.generationType||((g==null?void 0:g.type)==="video"?u="video":(g==null?void 0:g.type)==="audio"?u="audio":(g==null?void 0:g.type)==="text"?u="text":u="image"),d=e.modelId,x=!0}else a.selectedAudioModel?(u="audio",d=a.selectedAudioModel,x=!0):a.selectedVideoModel?(u="video",d=a.selectedVideoModel,x=!0):a.selectedImageModel?(u="image",d=a.selectedImageModel,x=!0):!o&&f&&!(e!=null&&e.generationType)?(u="agent",d=co()):u==="video"?d=Ur():u==="audio"?d=Vr():u==="text"||u==="agent"?d=co():d=$r();let S;(e==null?void 0:e.generationType)==="image"||(e==null?void 0:e.generationType)==="video"||(e==null?void 0:e.generationType)==="audio"||(e==null?void 0:e.generationType)==="text"?S="direct_generation":(e==null?void 0:e.generationType)==="agent"?S="agent_flow":S=f?"agent_flow":"direct_generation";const y=a.cleanText.trim(),w=i.join(`
|
|
4
|
+
`).trim();let h;if(w&&y?h=`${w}
|
|
5
|
+
|
|
6
|
+
${y}`:y?h=y:w?h=w:o&&r>0?h=u==="text"?"":Gr(o,[],r):h="",d.startsWith("mj")&&(e!=null&&e.params)){const g=gr(e.params);g&&(h=[h,g].filter(Boolean).join(" "))}const D=(e==null?void 0:e.count)||a.selectedCount||1;let b,C,P;if(e!=null&&e.params){u!=="audio"&&u!=="text"&&u!=="agent"&&!d.startsWith("mj")&&e.params.size&&(b=qt(e.params.size)),e.params.duration&&(C=e.params.duration);const g={};for(const[R,W]of Object.entries(e.params))R!=="size"&&R!=="duration"&&W&&(g[R]=W);Object.keys(g).length>0&&(P=g)}if(!b&&(e!=null&&e.size)&&e.size!=="auto"&&(b=qt(e.size)),!b&&(e==null?void 0:e.size)!=="auto"){for(const g of a.selectedParams)if(g.id==="size"){b=qt(g.value);break}}if(!C){for(const g of a.selectedParams)if(g.id==="duration"){C=g.value;break}}if(!b&&(e==null?void 0:e.size)!=="auto"&&u!=="text"&&u!=="agent"&&u!=="audio"){const g=Ye(d);if((g==null?void 0:g.type)==="image"&&g.imageDefaults)b="1x1";else if((g==null?void 0:g.type)==="video"&&g.videoDefaults){const R=Un(d,(e==null?void 0:e.modelRef)||d,e==null?void 0:e.params);b=qt(R.size||g.videoDefaults.size),C||(C=R.duration||g.videoDefaults.duration)}else if(u==="image")b="1x1";else if(u==="video"){const R=Un(d,(e==null?void 0:e.modelRef)||d,e==null?void 0:e.params);b=qt(R.size),C||(C=R.duration)}}!C&&u==="video"&&(C=Un(d,(e==null?void 0:e.modelRef)||d,e==null?void 0:e.params).duration);const T=a.cleanText.trim();return{scenario:S,generationType:u,modelId:d,modelRef:(e==null?void 0:e.modelRef)||null,defaultModels:e==null?void 0:e.defaultModels,defaultModelRefs:e==null?void 0:e.defaultModelRefs,isModelExplicit:x,prompt:h,userInstruction:T,rawInput:t,count:D,size:b,duration:C,extraParams:P,parseResult:a,hasExtraContent:f,selection:n}}const Xn={id:st,name:"自动"},lo=es.map(t=>({id:t.id,name:t.name,isSystem:!0,mcpTool:t.mcpTool,outputType:t.outputType})),Yr=({value:t,onSelect:n,onSelectSkill:e,onAddSkill:o,disabled:i=!1})=>{const[r,a]=c.useState(!1),[f,u]=c.useState([]),[d,x]=c.useState([]),[S,y]=c.useState(""),[w,h]=c.useState(0),D=c.useRef(null),b=c.useRef(null),C=c.useCallback(async()=>{try{const N=(await Sn.getAllDirectories()).find(ie=>ie.name==="Skill");if(!N)return;const H=await Sn.getNoteMetasByDirectory(N.id),X=new Set(es.map(ie=>ie.id)),$=H.filter(ie=>!X.has(ie.id)).map(ie=>{var Ce;return{id:ie.id,name:ie.title,outputType:((Ce=ie.metadata)==null?void 0:Ce.outputType)||void 0}});u($)}catch{}},[]),P=c.useCallback(async()=>{try{const _=await ds.getAllExternalSkillsMeta(),N=new Set(es.map(X=>X.id)),H=_.filter(X=>!N.has(X.id)).map(X=>({id:X.id,name:X.name,isExternal:!0,source:X.source,outputType:X.outputType}));x(H)}catch{}},[]);c.useEffect(()=>{if(r){C(),P(),y("");const N=[Xn,...lo,...d,...f].findIndex(H=>H.id===t);h(N>=0?N:0),setTimeout(()=>{var H;return(H=b.current)==null?void 0:H.focus()},50)}},[r,t]),c.useEffect(()=>{if(r&&D.current){const _=D.current.children[w];_&&_.scrollIntoView({block:"nearest"})}},[w,r]);const T=c.useCallback(_=>{_.preventDefault(),!i&&a(N=>!N)},[i]),g=c.useCallback(_=>{n(_.id),e==null||e(_),a(!1)},[n,e]),R=c.useCallback(_=>{_.stopPropagation(),a(!1),o()},[o]),W=[Xn,...lo,...d,...f],Q=S.trim()?W.filter(_=>_.name.toLowerCase().includes(S.toLowerCase())||_.id.toLowerCase().includes(S.toLowerCase())):W,ee=W.length>15,se=c.useCallback(_=>_==="Escape"?(a(!1),!0):_==="ArrowDown"?(h(N=>N<Q.length-1?N+1:0),!0):_==="ArrowUp"?(h(N=>N>0?N-1:Q.length-1),!0):_==="Enter"||_===" "||_==="Tab"?(w<Q.length&&g(Q[w]),!0):!1,[w,Q,g]),B=Q.find(_=>_.id===t)||Xn;return m.jsx(ns,{isOpen:r,setIsOpen:a,disabled:i,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:se,children:({containerRef:_,menuRef:N,portalPosition:H,handleTriggerKeyDown:X})=>m.jsxs("div",{className:"skill-dropdown",ref:_,children:[m.jsxs("button",{className:`skill-dropdown__trigger ${r?"skill-dropdown__trigger--open":""}`,onMouseDown:T,onKeyDown:X,disabled:i,type:"button",title:`Skill: ${B.name}`,children:[m.jsx("span",{className:"skill-dropdown__icon-prefix",children:m.jsx(Bs,{size:14})}),m.jsx("span",{className:"skill-dropdown__label",children:B.name}),m.jsx(os,{size:14,className:`skill-dropdown__chevron ${r?"skill-dropdown__chevron--open":""}`})]}),r&&ss.createPortal(m.jsxs("div",{ref:N,className:`skill-dropdown__menu ${Pn}`,style:{position:"fixed",zIndex:as.DROPDOWN_PORTAL,left:H.left,bottom:window.innerHeight-H.top+8},onMouseDown:$=>$.stopPropagation(),onClick:$=>$.stopPropagation(),children:[m.jsxs("div",{className:"skill-dropdown__header",children:[m.jsx(Bs,{size:14}),m.jsx("span",{children:"Skill"})]}),ee&&m.jsx("div",{className:"skill-dropdown__search",children:m.jsx("input",{ref:b,type:"text",className:"skill-dropdown__search-input",placeholder:"搜索 Skill...",value:S,onChange:$=>{y($.target.value),h(0)},onMouseDown:$=>$.stopPropagation(),onKeyDown:$=>$.stopPropagation()})}),m.jsx("div",{ref:D,className:"skill-dropdown__list",children:Q.map(($,ie)=>{const Ce=$.id===t,Te=ie===w;return m.jsxs("div",{className:`skill-dropdown__item ${Ce?"skill-dropdown__item--selected":""} ${Te?"skill-dropdown__item--highlighted":""}`,onClick:()=>g($),onMouseEnter:()=>h(ie),children:[m.jsx("span",{className:"skill-dropdown__item-label",children:$.name}),$.outputType==="image"&&m.jsx(xo,{size:12,className:"skill-dropdown__item-image-icon"}),$.outputType==="video"&&m.jsx(bo,{size:12,className:"skill-dropdown__item-image-icon"}),$.outputType==="ppt"&&m.jsx(ga,{size:12,className:"skill-dropdown__item-image-icon"}),$.outputType==="audio"&&m.jsx(wa,{size:12,className:"skill-dropdown__item-image-icon"}),$.isSystem&&m.jsx("span",{className:"skill-dropdown__item-badge",children:"系统"}),$.isExternal&&m.jsx("span",{className:"skill-dropdown__item-badge",children:"系统"}),Ce&&m.jsx(rs,{size:14,className:"skill-dropdown__item-check"})]},$.id)})}),m.jsx("div",{className:"skill-dropdown__divider"}),m.jsxs("div",{className:"skill-dropdown__add-btn",onClick:R,onMouseDown:$=>$.preventDefault(),children:[m.jsx(ya,{size:14}),m.jsx("span",{children:"添加 Skill"})]})]}),document.body)]})})},uo=["image","video","audio"];function Zr(t){if(t==="image"||t==="video"||t==="audio")return t}function Ct(t){if(!t)return[];const n=Zr(t.outputType);if(n)return[n];if(t.outputType==="text")return[];const e=new Set,o=Ya(t.mcpTool);o&&e.add(o);const i=[t.id,t.name,t.description,t.content].filter(Boolean).join(`
|
|
7
|
+
`);if(i)for(const r of uo)Xr(r).some(f=>i.includes(f))&&e.add(r);return uo.filter(r=>e.has(r))}function Xr(t){switch(t){case"image":return["generate_image","generate_grid_image","generate_photo_wall","generate_inspiration_board"];case"video":return["generate_video","generate_long_video"];case"audio":return["generate_audio"]}}var Be=(t=>(t.VIDEO="视频创作",t.IMAGE="图片生成",t.MINDMAP="思维导图",t.FLOWCHART="流程图",t.GRID="宫格图",t.SVG="SVG矢量图",t))(Be||{});const Jt=3,mo=[{id:"grid-emoji",title:"智能拆分宫格图",description:"宫格图,风格统一",prompt:"生成16宫格猫咪表情包",category:Be.GRID,imageUrl:"https://tuziphoto.codernote.club/aitu/gonggetu.jpg",badgeColor:"badge--grid"},{id:"flowchart-process",title:"业务流程图",description:"使用 Mermaid 语法生成清晰的流程图",prompt:"绘制一个用户注册登录的流程图,包含邮箱验证、密码校验、短信验证码、登录成功/失败等节点",category:Be.FLOWCHART,imageUrl:"https://tuziphoto.codernote.club/aitu/liuchengtu.png",badgeColor:"badge--flowchart"},{id:"mindmap-project",title:"项目规划脑图",description:"快速生成结构化的思维导图,梳理项目计划",prompt:"创建一个关于「移动应用开发」的思维导图,包含需求分析、UI设计、前端开发、后端开发、测试上线等主要分支",category:Be.MINDMAP,imageUrl:"https://tuziphoto.codernote.club/aitu/siweidaotu.png",badgeColor:"badge--mindmap"}],qr={[Be.VIDEO]:{bg:"#fce7f3",text:"#be185d"},[Be.IMAGE]:{bg:"#dbeafe",text:"#1d4ed8"},[Be.MINDMAP]:{bg:"#dcfce7",text:"#15803d"},[Be.FLOWCHART]:{bg:"#fef3c7",text:"#b45309"},[Be.GRID]:{bg:"#f3e8ff",text:"#7c3aed"},[Be.SVG]:{bg:"#e0e7ff",text:"#4338ca"}},Jr=({template:t,onClick:n})=>{const e=qr[t.category],o=i=>{i.preventDefault()};return m.jsxs("div",{className:"inspiration-card",onMouseDown:o,onClick:n,"data-track":`inspiration_click_${t.id}`,children:[m.jsxs("div",{className:"inspiration-card__image-wrapper",children:[m.jsx("img",{src:t.imageUrl,alt:t.title,className:"inspiration-card__image",loading:"lazy"}),m.jsx("span",{className:"inspiration-card__badge",style:{backgroundColor:e.bg,color:e.text},children:t.category}),m.jsx("div",{className:"inspiration-card__hover-overlay",children:m.jsx("div",{className:"inspiration-card__arrow",children:m.jsx(Ia,{size:16})})})]}),m.jsxs("div",{className:"inspiration-card__content",children:[m.jsx("h3",{className:"inspiration-card__title",children:t.title}),m.jsx("p",{className:"inspiration-card__description",children:t.description})]})]})},po="aitu_hide_inspiration_board",Qr=({isCanvasEmpty:t,onSelectPrompt:n,onOpenPromptTool:e,visible:o=!0,className:i=""})=>{const[r,a]=c.useState(0),[f,u]=c.useState(!1);c.useEffect(()=>{localStorage.getItem(po)==="true"&&u(!0)},[]);const d=Math.ceil(mo.length/Jt),x=d>1,S=mo.slice(r*Jt,(r+1)*Jt),y=c.useCallback(b=>{b.preventDefault(),b.stopPropagation(),a(C=>(C-1+d)%d)},[d]),w=c.useCallback(b=>{b.preventDefault(),b.stopPropagation(),a(C=>(C+1)%d)},[d]),h=c.useCallback(b=>{n({prompt:b,modelType:"agent"})},[n]),D=c.useCallback(b=>{b.preventDefault(),b.stopPropagation(),u(!0),localStorage.setItem(po,"true")},[]);return!t||!o||f?null:m.jsxs("div",{className:`inspiration-board ${i}`,children:[m.jsxs("div",{className:"inspiration-board__header",children:[m.jsx("h3",{className:"inspiration-board__title",children:"灵感创意"}),m.jsxs("button",{className:"inspiration-board__hide-btn",onClick:D,onMouseDown:b=>b.preventDefault(),title:"不再提示","data-track":"inspiration_click_hide",children:[m.jsx(xa,{size:14}),m.jsx("span",{children:"不再提示"})]}),e&&m.jsxs("button",{className:"inspiration-board__prompt-btn",onClick:e,onMouseDown:b=>b.preventDefault(),title:"提示词工具","data-track":"inspiration_click_prompt_tool",children:[m.jsx(ba,{size:14}),m.jsx("span",{children:"提示词"})]}),x&&m.jsxs("div",{className:"inspiration-board__pagination",children:[m.jsxs("span",{className:"inspiration-board__page-indicator",children:[r+1," / ",d]}),m.jsxs("div",{className:"inspiration-board__nav-buttons",children:[m.jsx("button",{className:"inspiration-board__nav-btn",onMouseDown:b=>b.preventDefault(),onClick:y,"aria-label":"上一页","data-track":"inspiration_click_prev",children:m.jsx(_a,{size:16})}),m.jsx("button",{className:"inspiration-board__nav-btn",onMouseDown:b=>b.preventDefault(),onClick:w,"aria-label":"下一页","data-track":"inspiration_click_next",children:m.jsx(ka,{size:16})})]})]})]}),m.jsxs("div",{className:"inspiration-board__grid",children:[S.map(b=>m.jsx(Jr,{template:b,onClick:()=>h(b.prompt)},b.id)),S.length<Jt&&Array.from({length:Jt-S.length}).map((b,C)=>m.jsx("div",{className:"inspiration-card inspiration-card--placeholder"},`placeholder-${C}`))]})]})},ft=[{value:"image",label:"图片",icon:m.jsx(xo,{size:14}),zh:"图片",en:"Image"},{value:"video",label:"视频",icon:m.jsx(bo,{size:14}),zh:"视频",en:"Video"},{value:"audio",label:"音频",icon:m.jsx(Sa,{size:14}),zh:"音频",en:"Audio"},{value:"text",label:"文本",icon:m.jsx(Ma,{size:14}),zh:"文本",en:"Text"},{value:"agent",label:"Agent",icon:m.jsx(Ca,{size:14}),zh:"Agent",en:"Agent"}],ei=({value:t,onSelect:n,disabled:e=!1})=>{const[o,i]=c.useState(!1),{language:r}=is(),[a,f]=c.useState(0),u=c.useRef(null);c.useEffect(()=>{if(o){const w=ft.findIndex(h=>h.value===t);f(w>=0?w:0)}},[o,t]),c.useEffect(()=>{if(o&&u.current){const w=u.current.children[a];w&&w.scrollIntoView({block:"nearest"})}},[a,o]);const d=c.useCallback(w=>{w.preventDefault(),!e&&i(h=>!h)},[e]),x=c.useCallback(w=>{n(w),i(!1)},[n]),S=c.useCallback(w=>w==="Escape"?(i(!1),!0):w==="ArrowDown"?(f(h=>h<ft.length-1?h+1:0),!0):w==="ArrowUp"?(f(h=>h>0?h-1:ft.length-1),!0):w==="Enter"||w===" "||w==="Tab"?(x(ft[a].value),!0):!1,[a,x]),y=ft.find(w=>w.value===t)||ft[0];return m.jsx(ns,{isOpen:o,setIsOpen:i,disabled:e,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:S,children:({containerRef:w,menuRef:h,portalPosition:D,handleTriggerKeyDown:b})=>m.jsxs("div",{className:"generation-type-dropdown",ref:w,children:[m.jsxs("button",{className:`generation-type-dropdown__trigger ${o?"generation-type-dropdown__trigger--open":""}`,onMouseDown:d,onKeyDown:b,disabled:e,type:"button",title:`${r==="zh"?"生成类型":"Type"}: ${r==="zh"?y.zh:y.en} (↑↓ Tab)`,children:[m.jsx("span",{className:"generation-type-dropdown__icon-prefix",children:y.icon}),m.jsx("span",{className:"generation-type-dropdown__label",children:r==="zh"?y.zh:y.en}),m.jsx(os,{size:14,className:`generation-type-dropdown__chevron ${o?"generation-type-dropdown__chevron--open":""}`})]}),o&&ss.createPortal(m.jsxs("div",{ref:h,className:`generation-type-dropdown__menu ${Pn}`,style:{position:"fixed",zIndex:as.DROPDOWN_PORTAL,left:D.left,bottom:window.innerHeight-D.top+8},onMouseDown:C=>C.stopPropagation(),onClick:C=>C.stopPropagation(),children:[m.jsxs("div",{className:"generation-type-dropdown__header",children:[m.jsx(va,{size:14}),m.jsx("span",{children:r==="zh"?"生成类型 (↑↓ Tab)":"Generation type (↑↓ Tab)"})]}),m.jsx("div",{ref:u,className:"generation-type-dropdown__list",children:ft.map((C,P)=>{const T=C.value===t,g=P===a;return m.jsxs("div",{className:`generation-type-dropdown__item ${T?"generation-type-dropdown__item--selected":""} ${g?"generation-type-dropdown__item--highlighted":""}`,onClick:()=>x(C.value),onMouseEnter:()=>f(P),children:[m.jsx("span",{className:"generation-type-dropdown__item-icon",children:C.icon}),m.jsx("span",{className:"generation-type-dropdown__item-label",children:r==="zh"?C.zh:C.en}),T&&m.jsx(rs,{size:14,className:"generation-type-dropdown__item-check"})]},C.value)})})]}),document.body)]})})},Qt=[1,2,3,4,5,10,20],ti=({value:t,onSelect:n,disabled:e=!1,isOpen:o,onOpenChange:i})=>{const{value:r,setValue:a}=Ta({controlledValue:o,defaultValue:!1,onChange:i}),{language:f}=is(),[u,d]=c.useState(0),x=c.useRef(null);c.useEffect(()=>{if(r){const h=Qt.indexOf(t);d(h>=0?h:0)}},[r,t]),c.useEffect(()=>{if(r&&x.current){const h=x.current.children[u];h&&h.scrollIntoView({block:"nearest"})}},[u,r]);const S=c.useCallback(h=>{h.preventDefault(),!e&&a(!r)},[e,r,a]),y=c.useCallback(h=>{n(h),a(!1)},[n]),w=c.useCallback(h=>h==="Escape"?(a(!1),!0):h==="ArrowDown"?(d(D=>D<Qt.length-1?D+1:0),!0):h==="ArrowUp"?(d(D=>D>0?D-1:Qt.length-1),!0):h==="Enter"||h===" "||h==="Tab"?(y(Qt[u]),!0):!1,[u,y]);return m.jsx(ns,{isOpen:r,setIsOpen:a,disabled:e,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:w,children:({containerRef:h,menuRef:D,portalPosition:b,handleTriggerKeyDown:C})=>m.jsxs("div",{className:"count-dropdown",ref:h,children:[m.jsxs("button",{className:`count-dropdown__trigger ${r?"count-dropdown__trigger--open":""}`,onMouseDown:S,onKeyDown:C,disabled:e,type:"button",title:`${f==="zh"?"生成数量":"Count"}: ${t} (↑↓ Tab)`,children:[m.jsxs("span",{className:"count-dropdown__label",children:[t,f==="zh"?"个":""]}),m.jsx(os,{size:14,className:`count-dropdown__chevron ${r?"count-dropdown__chevron--open":""}`})]}),r&&ss.createPortal(m.jsxs("div",{ref:D,className:`count-dropdown__menu ${Pn}`,style:{position:"fixed",zIndex:as.DROPDOWN_PORTAL,left:b.left,bottom:window.innerHeight-b.top+8},onMouseDown:P=>P.stopPropagation(),onClick:P=>P.stopPropagation(),children:[m.jsx("div",{className:"count-dropdown__header",children:m.jsx("span",{children:f==="zh"?"生成数量 (↑↓ Tab)":"Count (↑↓ Tab)"})}),m.jsx("div",{ref:x,className:"count-dropdown__list",children:Qt.map((P,T)=>{const g=P===t,R=T===u;return m.jsxs("div",{className:`count-dropdown__item ${g?"count-dropdown__item--selected":""} ${R?"count-dropdown__item--highlighted":""}`,onClick:()=>y(P),onMouseEnter:()=>d(T),children:[m.jsxs("span",{className:"count-dropdown__item-label",children:[P,f==="zh"?"个":P>1?" items":" item"]}),g&&m.jsx(rs,{size:14,className:"count-dropdown__item-check"})]},P)})})]}),document.body)]})})},Co=["right","bottom","left","top"],kn=4;function ni(t,n,e,o,i=32){const r=o<=2?o:o<=4?2:3,a=Math.floor(e/r),f=e%r;return[t[0]+f*(n.width+i),t[1]+a*(n.height+i)]}function To(t,n){const{ignoreElementIds:e=[],ignoreTypes:o=["workzone"],extraOccupiedRects:i=[]}=n;return[...t.children.filter(si).filter(r=>!o.includes(r.type??"")&&!e.includes(r.id??"")).map(r=>({...Mn.getRectangleByPoints(r.points),id:r.id,type:r.type})),...i]}function si(t){return typeof t=="object"&&t!==null&&Array.isArray(t.points)&&t.points.length===2}function Po(t,n,e){return t.x<n.x+n.width+e&&t.x+t.width+e>n.x&&t.y<n.y+n.height+e&&t.y+t.height+e>n.y}function oi(t,n,e,o){const i=[t];for(let r=1;r<=o;r+=1)i.push([t[0]+n*r,t[1]],[t[0],t[1]+e*r],[t[0]+n*r,t[1]+e*r],[t[0]-n*r,t[1]],[t[0]-n*r,t[1]+e*r],[t[0],t[1]-e*r],[t[0]+n*r,t[1]-e*r],[t[0]-n*r,t[1]-e*r]);return i}function ai(t,n,e,o,i){const r=Math.max(i,32),a=Math.max(Math.round(Math.min(n.width,n.height)*.16),28),f=Math.max(Math.round(Math.min(n.width,n.height)*.12),18),u=n.width+a,d=n.height+a,x=[];for(let S=0;S<e;S+=1){const y=Math.floor(S/kn),w=S%kn,h=Math.min(kn,e-y*kn),D=w-(h-1)/2,b=t.x+t.width/2-n.width/2,C=t.y+t.height/2-n.height/2,P=Math.abs(D)*f;let T=b,g=C;switch(o){case"right":T=t.x+t.width+r+y*u+P,g=C+D*(n.height+a);break;case"left":T=t.x-r-n.width-y*u-P,g=C+D*(n.height+a);break;case"top":T=b+D*(n.width+a),g=t.y-r-n.height-y*d-P;break;case"bottom":default:T=b+D*(n.width+a),g=t.y+t.height+r+y*d+P;break}x.push([Math.round(T),Math.round(g)])}return x}function fo(t,n,e,o,i){return t.reduce((a,f)=>{const u={x:f[0],y:f[1],width:n.width,height:n.height};return a+e.filter(d=>Po(u,d,o)).length},0)*1e3+Co.indexOf(i)*10}function ri(t,n,e,o,i){var d;const{gap:r=40,padding:a=16}=i,f=To(t,i),u=Co.map(x=>({side:x,positions:ai(n,e,o,x,r)}));return u.sort((x,S)=>fo(x.positions,e,f,a,x.side)-fo(S.positions,e,f,a,S.side)),((d=u[0])==null?void 0:d.positions)??[]}function ii(t,n,e,o,i={}){const{frameRect:r,extraOccupiedRects:a=[],...f}=i,u={...f,extraOccupiedRects:a},d=r?ri(t,r,e,o,u):Array.from({length:o},(S,y)=>ni(n,e,y,o,u.gap)),x=[...a];return d.map(S=>{const y=ci(t,S,e,{...u,extraOccupiedRects:x});return x.push({x:y[0],y:y[1],width:e.width,height:e.height}),y})}function ci(t,n,e,o={}){const{gap:i=40,padding:r=16,maxSearchRadius:a=6}=o,f=To(t,o),u=e.width+i,d=e.height+i,x=oi(n,u,d,a);for(const S of x){const y={x:S[0],y:S[1],width:e.width,height:e.height};if(!f.some(h=>Po(y,h,r)))return S}return[n[0],n[1]+d*(a+1)]}function wt(t){return typeof t=="string"&&t.trim()?t.trim():null}function li(t){return t==="image"||t==="video"||t==="audio"||t==="text"||t==="agent"}function di(t){if(!t||typeof t!="object")return!1;const n=t;return typeof n.modelId=="string"&&n.modelId.trim().length>0&&(n.profileId===null||typeof n.profileId=="string")&&(n.providerIdHint===null||typeof n.providerIdHint=="string")&&(n.vendorHint===null||typeof n.vendorHint=="string")&&typeof n.updatedAt=="number"&&Number.isFinite(n.updatedAt)}function us(){try{const t=window.localStorage.getItem(Qn);if(!t)return{};const n=JSON.parse(t);if(!n||typeof n!="object")return{};const e={};return Object.entries(n).forEach(([o,i])=>{li(o)&&di(i)&&(e[o]={modelId:i.modelId.trim(),profileId:wt(i.profileId),providerIdHint:wt(i.providerIdHint),vendorHint:wt(i.vendorHint),updatedAt:i.updatedAt})}),e}catch{return{}}}function Eo(t){try{if(!Object.values(t).some(Boolean)){window.localStorage.removeItem(Qn);return}window.localStorage.setItem(Qn,JSON.stringify(t))}catch{}}function ui(t){const n=us();return n[t]?n[t]||null:t==="agent"&&n.text||null}function ho(t,n){var i;const e=wt(n.modelId);if(!e){Ao(t);return}const o=us();o[t]={modelId:e,profileId:wt((i=n.modelRef)==null?void 0:i.profileId),providerIdHint:wt(n.providerIdHint),vendorHint:wt(n.vendorHint),updatedAt:Date.now()},Eo(o)}function Ao(t){const n=us();n[t]&&(delete n[t],Eo(n))}function nt(t,n,e,o){var r;const i=t.metadata||{};return{id:t.id,name:t.name,generationType:t.generationType,prompt:i.prompt||((r=n==null?void 0:n.aiContext)==null?void 0:r.finalPrompt)||"",aiAnalysis:t.aiAnalysis,count:i.count,createdAt:t.createdAt,status:t.status,steps:t.steps.map(a=>({id:a.id,description:a.description,status:a.status,mcp:a.mcp,args:a.args,result:a.result,error:a.error,duration:a.duration,options:a.options})),retryContext:n,postProcessingStatus:e,insertedCount:o}}function mi(t,n){return t==="generate_image"?"image":t==="generate_video"||t==="generate_long_video"?"video":t==="generate_audio"?"audio":t==="generate_text"?"text":n.scenarioType==="skill_flow"||n.generationType==="agent"?"agent":n.generationType==="image"||n.generationType==="video"||n.generationType==="audio"||n.generationType==="text"?n.generationType:"agent"}function pi(t,n){const e=typeof n.args.prompt=="string"?n.args.prompt.trim():t.metadata.prompt.trim(),o=(t.metadata.rawInput||t.metadata.userInstruction||t.metadata.prompt||e).trim().slice(0,2e3),i=t.scenarioType==="skill_flow"?t.name.trim():void 0,r=mi(n.mcp,t);return{initialPrompt:o,sentPrompt:e.slice(0,2e3),category:r,skillId:t.skillId,skillName:i,tags:[r,i].filter(Boolean)}}function vn(t,n){return n.args.promptMeta||!["generate_image","generate_video","generate_long_video","generate_audio","generate_text"].includes(n.mcp)?n:{...n,args:{...n.args,promptMeta:pi(t,n)}}}let go=!1;go||(tr(),Or(),ds.initialize().catch(t=>{console.warn("[AIInputBar] 外部 Skill 服务初始化失败(非致命):",t)}),go=!0);function Do(t){return t.selectionKey||(t.sourceProfileId?`${t.sourceProfileId}::${t.id}`:t.id)}function Oe(t,n){return n!=null&&n.profileId?`${n.profileId}::${t}`:t}function Fe(t){return t?gt(t.sourceProfileId||null,t.id):null}function fi(t){return t<=0?"0":t<=20?"1-20":t<=100?"21-100":t<=300?"101-300":t<=800?"301-800":"800+"}const hi=1,Ro=4,gi=6,wi=1.5;function wo(t,n){const e=window.getComputedStyle(t),o=Number.parseFloat(e.fontSize)||15,i=Number.parseFloat(e.lineHeight)||o*wi,r=Number.parseFloat(e.paddingTop)+Number.parseFloat(e.paddingBottom),a=Number.parseFloat(e.borderTopWidth)+Number.parseFloat(e.borderBottomWidth);return Math.ceil(i*n+r+a)}function yi(t,n){if(!t)return;if(!n){t.style.height="",t.style.overflowY="";return}const e=wo(t,Ro),o=wo(t,gi);t.style.height="auto";const i=t.scrollHeight,r=Math.min(Math.max(i,e),o);t.style.height=`${r}px`,t.style.overflowY=i>o?"auto":"hidden"}function be(t,n,e){if(!n)return;const o=Oe(n,e),i=(e==null?void 0:e.profileId)||null;return t.find(r=>Do(r)===o)||t.find(r=>r.id===n&&(r.sourceProfileId||null)===i)||(i===null?t.find(r=>r.id===n&&!r.sourceProfileId):void 0)||t.find(r=>r.id===n)}function Ii(t,n){return t==="agent"&&n==="text"?"agent":n}function xi(t){if(!t)return!1;const n=t.toLowerCase();return n.includes("#video")?!0:[".mp4",".webm",".mov",".avi",".mkv",".m4v",".flv",".wmv"].some(o=>n.includes(o))}const No=_o.memo(({language:t,onSelectionChange:n,externalBoardRef:e,onCanvasEmptyChange:o,isDataReady:i,onFrameSelected:r})=>{const a=ja(),f=c.useRef(a);f.current=a,c.useEffect(()=>(Gs(a),eo(a),Ks(a),to(a),io.setBoard(a),e&&(e.current=a),()=>{Gs(null),eo(null),Ks(null),to(null),io.setBoard(null),e&&(e.current=null)}),[a,e]);const u=c.useRef(o);u.current=o,c.useEffect(()=>{if(!a||!u.current||!i)return;const y=setInterval(()=>{var h;const w=a.children||[];(h=u.current)==null||h.call(u,w.length===0)},500);return()=>{clearInterval(y)}},[a,i]);const d=c.useRef(n);d.current=n;const x=c.useRef(r);return x.current=r,c.useEffect(()=>{const S=async()=>{var D,b,C,P;const w=f.current;if(!w)return;const h=ko(w);if(h.length===1&&vo(h[0])){const T=h[0],g=Mn.getRectangleByPoints(T.points);(D=x.current)==null||D.call(x,{id:T.id,width:g.width,height:g.height})}else(b=x.current)==null||b.call(x,null);if(h.length===0){d.current([]);return}try{const T=await za(w),g=[];T.graphicsImage&&g.push({url:T.graphicsImage,name:t==="zh"?"图形元素":"Graphics",type:"graphics",width:(C=T.graphicsImageDimensions)==null?void 0:C.width,height:(P=T.graphicsImageDimensions)==null?void 0:P.height});for(const R of T.remainingImages){const W=R.url||"",Q=xi(W);g.push({url:W,name:R.name||(Q?`video-${Date.now()}`:`image-${Date.now()}`),type:Q?"video":"image",width:R.width,height:R.height})}T.remainingText&&T.remainingText.trim()&&g.push({type:"text",text:T.remainingText.trim(),name:t==="zh"?"文字内容":"Text Content"}),d.current(g)}catch(T){console.error("Failed to process selected content:",T),d.current([])}};S();const y=()=>{setTimeout(S,50)};return document.addEventListener("mouseup",y),()=>{document.removeEventListener("mouseup",y)}},[t]),null});No.displayName="SelectionWatcher";const jo=_o.memo(({className:t,isDataReady:n,onEnableToolWindows:e})=>{const{language:o}=is(),i=gn("image"),r=gn("video"),a=gn("audio"),f=gn("text"),u=lr(),d=Ba(),{addHistory:x}=yo(),{addAsset:S}=Za(),y=c.useRef(u.sendWorkflowMessage);y.current=u.sendWorkflowMessage;const w=c.useRef(u.updateWorkflowMessage);w.current=u.updateWorkflowMessage;const h=c.useRef(u.appendAgentLog);h.current=u.appendAgentLog;const D=c.useRef(u.updateThinkingContent);D.current=u.updateThinkingContent;const b=c.useRef(u.setSelectedContent);b.current=u.setSelectedContent;const C=c.useRef(u.registerRetryHandler);C.current=u.registerRetryHandler;const P=c.useRef(null),T=c.useRef([]),g=c.useRef(null),R=wr(),W=c.useCallback((s,l,p)=>{if(!s)return;const I=T.current,v=(p!=null&&p.workflowId&&(p!=null&&p.batchId)&&typeof p.batchIndex=="number"?pt.getAnchorByBatchSlot(s,{workflowId:p.workflowId,batchId:p.batchId,batchIndex:p.batchIndex}):null)||(p!=null&&p.workflowId?pt.getAnchorByWorkflowId(s,p.workflowId):null)||(I[0]?pt.getAnchorById(s,I[0]):null);if(!v)return;const E=v.taskIds.includes(l)?v.taskIds:[...v.taskIds,l];pt.updateAnchor(s,v.id,{taskIds:E,primaryTaskId:v.primaryTaskId||l})},[]),Q=c.useCallback((s,l,p)=>{const I=T.current;I.length===0||!s||I.forEach(v=>{pt.updateAnchor(s,v,Gn(l,p))})},[]),ee=c.useCallback(s=>{const l=T.current;l.length===0||!s||(l.forEach(p=>{pt.removeAnchor(s,p)}),T.current=[])},[]),se=c.useCallback((s,l)=>{const p=ui(s);if(!p)return;const I=be(l,p.modelId,gt(p.profileId,p.modelId));if(I)return I;Ao(s)},[]),B=c.useCallback((s,l)=>{const p=se(s,l);if(p)return p;const v=Mt(s==="video"?"video":s==="audio"?"audio":s==="text"||s==="agent"?"text":"image"),E=be(l,v.modelId,gt(v.profileId,v.modelId));if(E)return E;const L=s==="video"?Pt():s==="audio"?Et():s==="text"||s==="agent"?Jn():ht();return be(l,L,null)||l[0]},[se]),_=R.generationType,H=B(_,_==="video"?r:_==="audio"?a:_==="text"||_==="agent"?f:i)||Ye(R.selectedModel)||Ye(_==="video"?Pt():_==="audio"?Et():_==="text"||_==="agent"?Jn():ht()),X=B("image",i)||Ye(ht()),$=B("video",r)||Ye(Pt()),ie=B("audio",a)||Ye(Et()),Ce=Mt("image"),Te=(X==null?void 0:X.id)||Ce.modelId||ht(),Dt=Fe(X)||gt(Ce.profileId,Ce.modelId),tn=Oe((H==null?void 0:H.id)||Te,Fe(H)||Dt),ms=_==="agent"?{}:Yn(_,(H==null?void 0:H.id)||Te,tn,R.selectedParams),[ge,ot]=c.useState(""),[zo,Oo]=c.useState(!1),[Dn,Rn]=c.useState([]),[Rt,yt]=c.useState([]),[He,at]=c.useState(!1),Ie=c.useRef(null),[Nt,rt]=c.useState(!1),[Wo,Lo]=c.useState(null),[k,$e]=c.useState(_),[xe,Nn]=c.useState(R.selectedSkillId||st),[O,ps]=c.useState((H==null?void 0:H.id)||Te),[U,fs]=c.useState(Fe(H)||Dt),[Ue,hs]=c.useState((X==null?void 0:X.id)||ht()),[Xe,gs]=c.useState(Fe(X)),[Ve,ws]=c.useState(($==null?void 0:$.id)||Pt()),[qe,ys]=c.useState(Fe($)),[Ge,Is]=c.useState((ie==null?void 0:ie.id)||Et()),[Je,xs]=c.useState(Fe(ie)),[jn,Qe]=c.useState([]),nn=c.useMemo(()=>{if(k!=="image"||be(i,O,U))return i;const l=mt("image",O,U);return l?[l,...i]:i},[k,i,O,U]),sn=c.useMemo(()=>{if(k!=="video"||be(r,O,U))return r;const l=mt("video",O,U);return l?[l,...r]:r},[k,O,U,r]),on=c.useMemo(()=>{if(k!=="audio"||be(a,O,U))return a;const l=mt("audio",O,U);return l?[l,...a]:a},[a,k,O,U]),an=c.useMemo(()=>{if(k!=="text"&&k!=="agent"||be(f,O,U))return f;const l=mt("text",O,U);return l?[l,...f]:f},[k,O,U,f]),jt=c.useMemo(()=>{if(be(i,Ue,Xe))return i;const l=mt("image",Ue,Xe);return l?[l,...i]:i},[i,Ue,Xe]),zt=c.useMemo(()=>{if(be(r,Ve,qe))return r;const l=mt("video",Ve,qe);return l?[l,...r]:r},[Ve,qe,r]),Ot=c.useMemo(()=>{if(be(a,Ge,Je))return a;const l=mt("audio",Ge,Je);return l?[l,...a]:a},[a,Ge,Je]),[Pe,rn]=c.useState(()=>{if(_==="agent")return{};const s=(H==null?void 0:H.id)||Te,l=qs(s).find(p=>p.id==="size");return{...ms,...s.startsWith("mj")||!l?{}:{size:ms.size||Js(s)}}}),Wt=c.useRef(Pe),bs=c.useRef(_==="agent"?"agent":`${_}:${tn}`);c.useEffect(()=>{Wt.current=Pe},[Pe]);const[Lt,_s]=c.useState(R.selectedCount),[ks,zn]=c.useState(!1),[vs,On]=c.useState(!1),[Ss,Wn]=c.useState(!1),it=c.useRef(null),Fo=c.useCallback(s=>{zn(s),s||(it.current=null)},[]),Bo=c.useCallback(s=>{On(s),s||(it.current=null)},[]),Ho=c.useCallback(s=>{Wn(s),s||(it.current=null)},[]),[Ms,Ft]=c.useState(!1),we=c.useMemo(()=>[...Rt,...Dn],[Rt,Dn]),ct=c.useMemo(()=>({invalidFile:o==="zh"?"请上传图片文件":"Please upload image files",fileTooLarge:o==="zh"?"图片大小不能超过 25MB":"Image size cannot exceed 25MB",loadFailed:o==="zh"?"加载图片失败":"Failed to load image",compressionFailed:o==="zh"?"图片压缩失败":"Image compression failed",compressing:s=>o==="zh"?`正在压缩图片 (${s.toFixed(1)}MB)...`:`Compressing image (${s.toFixed(1)}MB)...`,compressed:(s,l)=>o==="zh"?`压缩完成: ${s.toFixed(1)}MB → ${l.toFixed(1)}MB`:`Compressed: ${s.toFixed(1)}MB → ${l.toFixed(1)}MB`}),[o]);c.useEffect(()=>{const s=k==="video"?sn:k==="audio"?on:k==="text"||k==="agent"?an:nn,p=be(s,O,U)||B(k,s);if(p){const I=Oe(O,U),v=Do(p);I!==v&&(ps(p.id),fs(Fe(p)))}k!=="agent"&&Nn(st),(k==="agent"||k==="text"||k==="audio")&&_s(1)},[on,k,nn,B,O,U,an,sn]),c.useEffect(()=>{const s=(l,p,I,v,E,L)=>{if(be(p,I,v))return;const j=B(l,p);j&&(E(j.id),L(Fe(j)))};s("image",jt,Ue,Xe,hs,gs),s("video",zt,Ve,qe,ws,ys),s("audio",Ot,Ge,Je,Is,xs)},[B,Ge,Je,Ue,Xe,Ve,qe,Ot,jt,zt]);const cn=c.useMemo(()=>k==="video"?sn:k==="audio"?on:k==="text"||k==="agent"?an:nn,[on,k,nn,an,sn]);c.useEffect(()=>{let s=!1;return(async()=>{var L;if(k!=="agent"||xe===st){Qe([]);return}const p=Zn(xe);if(p){Qe(Ct(p));return}const I=no(xe);if(I){Qe(Ct(I));return}const v=await ds.getSkillById(xe);if(s)return;if(v){Qe(Ct(v));return}const E=await Sn.getNoteById(xe);s||Qe(E?Ct({id:E.id,name:E.title,content:E.content,outputType:(L=E.metadata)==null?void 0:L.outputType}):[])})().catch(()=>{s||Qe([])}),()=>{s=!0}},[k,xe]);const Bt=c.useMemo(()=>{var p;if(k==="agent")return[];if(k==="video")return Pa(O,U||O,Pe);const s=qs(O);return k!=="audio"?s:(Pe.sunoAction||((p=s.find(I=>I.id==="sunoAction"))==null?void 0:p.defaultValue)||"music")==="lyrics"?s.filter(I=>I.id==="sunoAction"||I.id==="mv"||I.id==="title"||I.id==="tags"):s},[k,O,U,Pe]);c.useEffect(()=>{if(!Nt)return;const s=l=>{const p=l.target;dn.current&&!dn.current.contains(p)&&rt(!1)};return document.addEventListener("mousedown",s),()=>document.removeEventListener("mousedown",s)},[Nt]),c.useEffect(()=>()=>{Ie.current&&clearTimeout(Ie.current)},[]),c.useEffect(()=>{const s=l=>{var p;((p=l.detail)==null?void 0:p.type)!=="image"&&(Ie.current&&(clearTimeout(Ie.current),Ie.current=null),at(!1))};return window.addEventListener("ai-generation-complete",s),()=>{window.removeEventListener("ai-generation-complete",s)}},[]),c.useEffect(()=>{const s=Io.observeTaskUpdates().subscribe(l=>{var j,Y;const p=l.task,I=d.getWorkflow();if(!I)return;const v=I.steps.find(F=>{const Z=F.result;return(Z==null?void 0:Z.taskId)===p.id});if(!v)return;let E=v.status,L=v.result,K=v.error;switch(p.status){case Tt.PENDING:case Tt.PROCESSING:E="running";break;case Tt.COMPLETED:E="completed",L={...typeof L=="object"?L:{},taskId:p.id,result:p.result};break;case Tt.FAILED:E="failed",K=((j=p.error)==null?void 0:j.message)||"任务执行失败";break;case Tt.CANCELLED:E="skipped";break}if(E!==v.status){if(d.updateStep(v.id,E,L,K),E==="failed"){const Z=(Y=v.options)==null?void 0:Y.batchId;Z&&I.steps.forEach(te=>{var me;te.id!==v.id&&((me=te.options)==null?void 0:me.batchId)===Z&&te.status==="running"&&d.updateStep(te.id,"skipped",void 0,"前置任务失败")})}const F=d.getWorkflow();if(F){const Z=nt(F,P.current||void 0);w.current(Z);const te=g.current,me=Re.current;te&&me&&ze.updateWorkflow(me,te,Z)}}});return()=>s.unsubscribe()},[d]);const Cs=c.useRef(void 0),ln=c.useRef(void 0);c.useEffect(()=>{const s=Kn.observeCompletionEvents().subscribe(l=>{const p=d.getWorkflow(),I=p==null?void 0:p.steps.find(L=>{const K=L.result;return(K==null?void 0:K.taskId)===l.taskId});let v,E;switch(l.type){case"postProcessingStarted":v="processing";break;case"postProcessingCompleted":v="completed",E=l.result.insertedCount;break;case"postProcessingFailed":v="failed";break}if(Cs.current=v,E!==void 0&&(ln.current=(ln.current||0)+E),p&&I){const L=d.getWorkflow();if(L){const K=nt(L,P.current||void 0,v,ln.current);w.current(K);const j=g.current,Y=Re.current;j&&Y&&ze.updateWorkflow(Y,j,K)}}if(l.type==="postProcessingCompleted"){const L=l.result.firstElementPosition;Ie.current&&(clearTimeout(Ie.current),Ie.current=null),at(!1),setTimeout(async()=>{var Y;u.closeChatDrawer();const K=g.current,j=Re.current;if(K&&j){const F=d.getWorkflow();if(F==null?void 0:F.steps.every(te=>te.status==="completed"||te.status==="failed"||te.status==="skipped")){const{workflowCompletionService:te}=await Cn(async()=>{const{workflowCompletionService:z}=await import("./tool-windows-DV-j2p51.js").then(ae=>ae.dM);return{workflowCompletionService:z}},__vite__mapDeps([0,1]),import.meta.url);(F==null?void 0:F.steps.every(z=>{const ae=z.result;return ae!=null&&ae.taskId?te.isPostProcessingCompleted(ae.taskId):!0}))&&(ze.removeWorkZone(j,K),g.current=null)}}if(L&&j){const F=(Y=j.host)==null?void 0:Y.getBoundingClientRect();if(F){const Z=j.viewport.zoom,te=L[0]-F.width/(2*Z),me=L[1]-F.height/(2*Z);Ea.updateViewport(j,[te,me],Z)}}},500),Cs.current=void 0,ln.current=void 0}});return()=>s.unsubscribe()},[d,u]);const Re=c.useRef(null),{submitWorkflow:Ts}=Ha({boardRef:Re,workZoneIdRef:g}),Ee=c.useRef(null),dn=c.useRef(null),Ps=c.useRef(null);Qa(Ee,{enableCopy:!0,stopPropagation:!0}),c.useEffect(()=>{const s=l=>{const p=l.detail;if(p!=null&&p.generationType&&$e(p.generationType),p!=null&&p.skillId){Nn(p.skillId);const I=Zn(p.skillId);I&&Qe(Ct(I))}rt(!0),requestAnimationFrame(()=>{var I;(I=Ee.current)==null||I.focus()})};return window.addEventListener(Ys,s),()=>{window.removeEventListener(Ys,s)}},[]);const $o=c.useCallback(s=>{var l;ot(s.prompt),$e("agent"),(l=Ee.current)==null||l.focus(),We.track("inspiration_selected",{promptLength:s.prompt.length,modelType:s.modelType})},[]),Uo=c.useCallback(s=>{var l;ot(s.content),s.modelType&&(s.modelType==="image"?$e("image"):s.modelType==="video"?$e("video"):s.modelType==="audio"?$e("audio"):s.modelType==="text"?$e("text"):s.modelType==="agent"&&$e("agent")),(l=Ee.current)==null||l.focus()},[]),Vo=c.useCallback(()=>{const s=qn.find(l=>l.id==="knowledge-base");s&&(window.__kbPendingNavigation={directoryName:"Skill",autoCreateNote:!0},en.openTool(s),setTimeout(()=>{window.dispatchEvent(new CustomEvent("kb:navigate",{detail:{directoryName:"Skill",autoCreateNote:!0}}))},300))},[]),Es=c.useCallback((s="ai_input_bar")=>{const l=qn.find(p=>p.id==="banana-prompt");if(!l){console.warn("[AIInputBar] Banana prompt tool not found"),We.trackPromptAction({action:"open_tool",surface:s,promptType:k,prompt:ge,source:s,status:"failed",metadata:{tool_id:"banana-prompt",reason:"tool_not_found"}});return}We.trackPromptAction({action:"open_tool",surface:s,promptType:k,prompt:ge,source:s,status:"success",metadata:{tool_id:l.id,tool_type:"external_prompt_library"}}),en.openTool(l)},[k,ge]),Go=c.useCallback(()=>{Es("inspiration_board")},[Es]),Ko=c.useCallback(async s=>{try{const l=new Image;l.onload=()=>{const p={type:"image",url:s.url,name:s.name||`素材-${Date.now()}`,width:l.naturalWidth||void 0,height:l.naturalHeight||void 0};yt(I=>[...I,p]),Ft(!1)},l.onerror=()=>{const p={type:"image",url:s.url,name:s.name||`素材-${Date.now()}`};yt(I=>[...I,p]),Ft(!1)},l.src=s.url}catch(l){console.error("Failed to select asset from library:",l),Ft(!1)}},[]),Yo=c.useCallback(()=>{var s;(s=Ps.current)==null||s.click()},[]),As=c.useCallback(s=>new Promise((l,p)=>{const I=new FileReader;I.onload=()=>{const v=I.result,E=new Image;E.onload=()=>{l({url:v,width:E.naturalWidth,height:E.naturalHeight})},E.onerror=()=>{l({url:v,width:0,height:0})},E.src=v},I.onerror=p,I.readAsDataURL(s)}),[]),un=c.useCallback(async s=>{const l=Array.from(s);if(l.length===0)return;const p=[];for(const[I,v]of l.entries()){if(!v.type.startsWith("image/")){tt.error(ct.invalidFile);continue}if(v.size>25*1024*1024){tt.error(ct.fileTooLarge);continue}try{let E=v;if(v.size>10*1024*1024){const{compressImageBlob:F,getCompressionStrategy:Z}=await Cn(async()=>{const{compressImageBlob:z,getCompressionStrategy:ae}=await import("./shared-runtime-DBavnB0U.js").then(re=>re.bf);return{compressImageBlob:z,getCompressionStrategy:ae}},[],import.meta.url),te=Z(v.size/(1024*1024)),me=tt.loading({content:ct.compressing(v.size/(1024*1024)),duration:0,placement:"top"});try{E=await F(v,te.targetSizeMB),tt.close(me),tt.success({content:ct.compressed(v.size/(1024*1024),E.size/(1024*1024)),duration:2})}catch(z){tt.close(me),console.error("[AIInputBar] Failed to compress image:",z),tt.error(ct.compressionFailed);continue}}const L=E instanceof File?E:new File([E],v.name||`pasted-image-${Date.now()}.png`,{type:E.type||v.type||"image/png"});S(L,Qs.IMAGE,ar.LOCAL,L.name).catch(F=>{console.warn("[AIInputBar] Failed to add asset to library:",F)});const{url:K,width:j,height:Y}=await As(L);p.push({type:"image",url:K,name:L.name||`上传图片 ${I+1}`,width:j||void 0,height:Y||void 0})}catch(E){console.error("[AIInputBar] Failed to import local image:",E),tt.error(ct.loadFailed)}}p.length>0&&yt(I=>[...I,...p])},[S,As,ct]),Zo=c.useCallback(async s=>{const l=s.target.files;!l||l.length===0||(await un(l),s.target.value="")},[un]),Xo=c.useCallback(s=>{Rn(s)},[]),Ds=c.useRef(null),qo=c.useCallback(s=>{if(Ds.current=s,!s)return;const l=dr(s.width,s.height,O);l&&rn(p=>({...p,size:l}))},[O]),Jo=c.useCallback(s=>{s<Rt.length&&yt(l=>l.filter((p,I)=>I!==s))},[Rt.length]);c.useEffect(()=>{b.current(we.map(s=>({type:s.type,url:s.url,text:s.text,name:s.name})))},[we]),c.useEffect(()=>{const s=l=>{var j,Y;const p=(j=l.clipboardData)==null?void 0:j.items;if(!p||p.length===0||!Array.from(p).some(F=>F.type.startsWith("image/")))return;const v=document.activeElement,E=dn.current;if(!(!!E&&(E.contains(v)||Nt&&(v===document.body||(v==null?void 0:v.tagName)==="BODY"))))return;const K=[];for(const F of Array.from(p)){if(!F.type.startsWith("image/"))continue;const Z=F.getAsFile();Z&&K.push(Z)}K.length!==0&&(l.preventDefault(),un(K),(Y=Ee.current)==null||Y.focus())};return document.addEventListener("paste",s),()=>{document.removeEventListener("paste",s)}},[un,Nt]);const It=c.useCallback(()=>{if(it.current!==null){const s=it.current;ot(l=>l.substring(0,s)+l.substring(s+1)),it.current=null}},[]),mn=c.useCallback(s=>{const l=Ii(k,s.type);We.track("ai_input_change_model",{model:s.id,type:s.type,profileId:s.sourceProfileId||null}),It(),$e(l),ps(s.id);const p=Fe(s);fs(p),ho(l,{modelId:s.id,modelRef:p,providerIdHint:s.sourceProfileId||(p==null?void 0:p.profileId),vendorHint:s.vendor}),rn(l==="agent"?{}:Yn(l,s.id,Oe(s.id,p))),zn(!1),setTimeout(()=>{var I;return(I=Ee.current)==null?void 0:I.focus()},0)},[It,k]),Qo=c.useCallback(s=>{const l=be(cn,s,U)||be(cn,s,null)||Ye(s);l&&mn(l)},[mn,cn,U]),ea=c.useCallback(s=>{mn(s)},[mn]),pn=c.useCallback((s,l)=>{const p=Fe(l);s==="image"?(hs(l.id),gs(p)):s==="video"?(ws(l.id),ys(p)):(Is(l.id),xs(p)),ho(s,{modelId:l.id,modelRef:p,providerIdHint:l.sourceProfileId||(p==null?void 0:p.profileId),vendorHint:l.vendor}),We.track("ai_input_change_agent_media_model",{model:l.id,type:s,profileId:l.sourceProfileId||null})},[]),Ln=c.useCallback((s,l,p)=>{const I=s==="image"?jt:s==="video"?zt:Ot,v=be(I,l,p||null)||be(I,l,null)||Ye(l);v&&pn(s,v)},[pn,Ot,jt,zt]),Fn=c.useCallback((s,l)=>{pn(s,l)},[pn]),ta=c.useCallback(s=>{Qe(Ct(s))},[]),Rs=c.useMemo(()=>({image:Ue,video:Ve,audio:Ge}),[Ge,Ue,Ve]),Ns=c.useMemo(()=>({image:Xe,video:qe,audio:Je}),[Je,Xe,qe]);c.useEffect(()=>{const s=(j,Y)=>{const F=Object.keys(j),Z=Object.keys(Y);return F.length!==Z.length?!1:F.every(te=>j[te]===Y[te])},l=k==="agent"?"agent":`${k}:${Oe(O,U)}`,p=k==="agent"?{}:bs.current===l?Wt.current||{}:Yn(k,O,Oe(O,U),Wt.current),I={},v=Bt.find(j=>j.id==="size"),E=p.size,L=!E||!(v!=null&&v.options)||v.options.some(j=>j.value===E);!O.startsWith("mj")&&v&&(I.size=E&&L?E:v.defaultValue||Js(O)),Bt.forEach(j=>{if(j.id==="size")return;const Y=p[j.id],F=!Y||j.valueType!=="enum"||!j.options||j.options.some(Z=>Z.value===Y);Y&&F?I[j.id]=Y:j.defaultValue&&(I[j.id]=j.defaultValue)});const K=Aa(O,I);s(Wt.current||{},K)||(rn(K),Wt.current=K),bs.current=l},[k,O,U,Bt]),c.useEffect(()=>{yr({generationType:k,selectedModel:O,selectedParams:Pe,selectedCount:Lt,selectedSkillId:xe}),k!=="agent"&&Ir(k,O,Pe,Oe(O,U))},[k,O,U,Pe,Lt,xe]);const na=c.useCallback((s,l,p)=>{It(),rn(I=>{const v={...I};return l===void 0||l===""?delete v[s]:v[s]=l,v}),p!=null&&p.keepOpen||(On(!1),setTimeout(()=>{var I;return(I=Ee.current)==null?void 0:I.focus()},0))},[It]),sa=c.useCallback(s=>{It(),_s(s),Wn(!1),setTimeout(()=>{var l;return(l=Ee.current)==null?void 0:l.focus()},0)},[It]),Bn=c.useCallback(async()=>{var s,l,p,I,v,E,L,K;if(!(!ge.trim()&&we.length===0)&&!He){at(!0);try{if(!rr(k==="video"?"video":k==="audio"?"audio":k==="text"||k==="agent"?"text":"image",U||O)&&!await Da()){at(!1);return}const F=we.filter(M=>M.type==="image"&&M.url),Z=we.filter(M=>M.type==="graphics"&&M.url),te=[...F,...Z].map(M=>{if(M.width&&M.height)return{width:M.width,height:M.height}}).filter(M=>M!==void 0),me={texts:we.filter(M=>M.type==="text"&&M.text).map(M=>M.text),images:F.map(M=>M.url),videos:we.filter(M=>M.type==="video"&&M.url).map(M=>M.url),graphics:Z.map(M=>M.url),imageDimensions:te},z=Kr(ge,me,{modelId:O,modelRef:U,params:Pe,generationType:k,count:Lt,defaultModels:k==="agent"?Rs:void 0,defaultModelRefs:k==="agent"?Ns:void 0}),ae=[...me.images,...me.graphics];let re;if(k==="agent"&&xe!==st){const M=Zn(xe);if(M)try{re=await In(z,M,ae)}catch(G){console.warn("[AIInputBar] 系统 Skill 工作流转换失败,降级到通用工作流:",G),re=St(z,ae)}else{const G=no(xe);if(G)try{re=await In(z,{id:G.id,name:G.name,type:"external",content:G.content,outputType:G.outputType},ae)}catch(V){console.warn("[AIInputBar] 外部 Skill 工作流转换失败,降级到角色扮演:",V),re=await In(z,{id:G.id,name:G.name,type:"external",content:G.content,outputType:G.outputType},ae).catch(()=>St(z,ae))}else try{const V=await Sn.getNoteById(xe);if(V){const oe=((s=V.metadata)==null?void 0:s.outputType)||void 0;re=await In(z,{id:V.id,name:V.title,type:"user",content:V.content,outputType:oe},ae)}else re=St(z,ae)}catch{re=St(z,ae)}}re||(console.warn("[AIInputBar] Skill 工作流未能生成,降级到通用工作流"),re=St(z,ae))}else re=St(z,ae);const q=Re.current;if(q){const oe=(l=q.host)==null?void 0:l.getBoundingClientRect(),fe=((p=q.viewport)==null?void 0:p.zoom)||1,he=((v=(I=q.viewport)==null?void 0:I.origination)==null?void 0:v[0])||0,Ne=((L=(E=q.viewport)==null?void 0:E.origination)==null?void 0:L[1])||0,Vt=q.children.filter(ye=>ye.type!=="workzone"),hn=he+((oe==null?void 0:oe.width)||0)/2/fe,bt=Ne+((oe==null?void 0:oe.height)||0)/2/fe;let ke=hn-200,ne=bt,_t=ke,et=bt-240/2;if(Vt.length>0){const ye=ko(q);let le=!1;if(ye.length>0)try{const de=Vn(q,ye,!1);ye.every(ve=>Hs.isDrawElement(ve)&&Hs.isImage(ve)||ur(ve))&&de.width>de.height?(ke=de.x+de.width+50,ne=de.y):(ke=de.x,ne=de.y+de.height+50),_t=ke,et=ne,le=!0}catch(de){console.warn("[AIInputBar] Failed to calculate position for selected elements:",de)}if(!le){let de=null,Kt=-1/0;for(const ve of Vt)try{const vt=Vn(q,[ve],!1),Yt=vt.y+vt.height;Yt>Kt&&(Kt=Yt,de=ve)}catch(vt){console.warn("[AIInputBar] Failed to get rectangle for element:",vt)}if(de){const ve=Vn(q,[de],!1);ke=ve.x,ne=ve.y+ve.height+50,_t=ke,et=ne}}}const dt=nt(re),kt=Ds.current;let Gt,ut,Os;if(kt){const ye=q.children.find(le=>le.id===kt.id);if(ye&&vo(ye)){Gt=kt.id,ut={width:kt.width,height:kt.height};const le=Mn.getRectangleByPoints(ye.points);Os=le,ke=le.x,ne=le.y}}if(z.generationType==="image"){const ye=Math.max(z.count??1,1),le=ye>1,de=le?void 0:Gt,Kt=le?void 0:ut,ve=[],vt=`wf_batch_${re.id}`,Yt=de?null:ii(q,[ke,ne],Zs({workflowId:re.id,expectedInsertPosition:[ke,ne],requestedSize:z.size,requestedCount:1,zoom:fe,title:dt.name||"图片生成",...Gn("submitted")}).size??{width:320,height:180},ye,{frameRect:le?Os:void 0});for(let je=0;je<ye;je+=1){let Zt=Zs({workflowId:re.id,expectedInsertPosition:[ke,ne],targetFrameId:de,targetFrameDimensions:Kt,frameAffinityId:le?Gt:void 0,frameAffinityDimensions:le?ut:void 0,requestedSize:z.size,requestedCount:le?1:ye,batchId:le?vt:void 0,batchIndex:le?je+1:void 0,batchTotal:le?ye:void 0,zoom:fe,title:dt.name||"图片生成",...Gn("submitted")});if(!de){const Ls=Yt?Yt[je]??Zt.position:Zt.position;Zt={...Zt,position:Ls,expectedInsertPosition:Ls}}const da=pt.insertAnchor(q,Zt);ve.push(da)}T.current=ve.map(je=>je.id),g.current=null;const[Ws]=ve;Ws&&setTimeout(()=>{const je=Mn.getRectangleByPoints(Ws.points);$s(q,[je.x+je.width/2,je.y+je.height/2],100)},100)}else{const ye=ze.insertWorkZone(q,{workflow:dt,position:[_t,et],size:{width:360,height:240},expectedInsertPosition:[ke,ne],targetFrameId:Gt,targetFrameDimensions:ut,zoom:fe});g.current=ye.id,T.current=[],setTimeout(()=>{const le=_t+180,de=et+240/2;$s(q,[le,de],100)},100)}}const A=Mt("image"),J=Mt("video"),ue=Mt("audio"),_e={rawInput:ge,userInstruction:z.userInstruction,model:{id:z.modelId,type:z.generationType,isExplicit:z.isModelExplicit},modelRef:z.modelRef,defaultModels:z.defaultModels||{audio:ue.modelId||Et(),image:A.modelId||ht(),video:J.modelId||Pt()},defaultModelRefs:z.defaultModelRefs||{audio:gt(ue.profileId,ue.modelId),image:gt(A.profileId,A.modelId),video:gt(J.profileId,J.modelId)},params:{count:z.count,size:z.size,duration:z.duration},selection:me,finalPrompt:z.prompt},pe=Mt("text").modelId,Ae={aiContext:_e,referenceImages:ae,textModel:pe};P.current=Ae;try{const M=Date.now(),{usedSW:G}=await Ts(z,ae,Ae,re);if(G){if(k==="image"&&Q(q,"accepted"),ge.trim()){const V=ge.trim(),oe=we.length>0;x(V,oe,k),k==="image"?Us(V):k==="video"&&Vs(V)}ot(""),Rn([]),yt([]),Ie.current&&clearTimeout(Ie.current),Ie.current=setTimeout(()=>{at(!1),Ie.current=null},1e3);return}}catch(M){console.warn("[AIInputBar] SW execution failed, falling back to main thread:",M)}if(k==="image"&&Q(q,"handoff"),ge.trim()){const M=ge.trim(),G=we.length>0;x(M,G,k),k==="image"?Us(M):k==="video"&&Vs(M)}ot(""),Rn([]),yt([]),Ie.current&&clearTimeout(Ie.current),Ie.current=setTimeout(()=>{at(!1),Ie.current=null},1e3);const Ht=[],Ke=[],fn=(M,G)=>({onChunk:V=>{D.current(V)},onAddSteps:V=>{d.updateStep(M.id,"completed",{analysis:"completed"},void 0,Date.now()-G);const oe=V.map((he,Ne)=>vn(re,{...he,status:he.status==="completed"?"completed":"pending",options:{mode:"queue",batchId:`agent_${Date.now()}`,batchIndex:Ne+1,batchTotal:V.length,globalIndex:Ne+1}}));d.addSteps(oe),Ke.push(...oe),V.forEach(he=>{h.current({type:"tool_call",timestamp:Date.now(),toolName:he.mcp,args:he.args})});const fe=nt(d.getWorkflow(),P.current||void 0);w.current(fe),g.current&&q&&ze.updateWorkflow(q,g.current,fe)},onUpdateStep:(V,oe,fe,he)=>{d.updateStep(V,oe,fe,he),h.current({type:"tool_result",timestamp:Date.now(),toolName:V,success:oe==="completed",data:fe,error:he});const Ne=nt(d.getWorkflow(),P.current||void 0);w.current(Ne),g.current&&q&&ze.updateWorkflow(q,g.current,Ne)}});let Le=!1;const xt=()=>{const M=nt(d.getWorkflow(),P.current||void 0);w.current(M),g.current&&q&&ze.updateWorkflow(q,g.current,M)},$t=async M=>{var oe,fe,he,Ne,Vt,hn;const G=Date.now(),V=Ke.length;d.updateStep(M.id,"running"),xt();try{const bt={...M.options,...fn(M,G)},ke=vn(re,M),ne=await Xs.executeTool({name:ke.mcp,arguments:ke.args},bt),_t=(fe=(oe=d.getWorkflow())==null?void 0:oe.steps.find(et=>et.id===M.id))==null?void 0:fe.status;if(ne.success){if(ne.taskId)Ht.push(ne.taskId),d.updateStep(M.id,"running",{taskId:ne.taskId}),W(q,ne.taskId,{workflowId:re.id,batchId:(he=M.options)==null?void 0:he.batchId,batchIndex:(Ne=M.options)==null?void 0:Ne.batchIndex});else if(_t==="running"){const et=ne.type==="text"&&ne.data&&typeof ne.data=="object"&&"content"in ne.data?{content:ne.data.content}:ne.data;d.updateStep(M.id,"completed",et,void 0,Date.now()-G);const dt=M.mcp==="generate_text"?(Vt=ne.data)==null?void 0:Vt.content:M.mcp==="ai_analyze"?(hn=ne.data)==null?void 0:hn.response:void 0;if((M.mcp==="generate_text"||M.mcp==="ai_analyze")&&dt&&dt.trim()&&Ke.length===V){const ut={id:`${M.id}-insert-text`,mcp:"insert_to_canvas",args:{items:[{type:"text",content:dt}]},description:M.mcp==="generate_text"?"将生成文本插入画布":"将 AI 回复插入画布",status:"pending"};d.addSteps([ut]),Ke.push(ut)}}}else return d.updateStep(M.id,"failed",void 0,ne.error||"执行失败",Date.now()-G),!1;return!0}catch(bt){return d.updateStep(M.id,"failed",void 0,String(bt)),!1}finally{xt()}};for(const M of re.steps){if(Le){d.updateStep(M.id,"skipped"),xt();continue}await $t(M)||(Le=!0)}if(!Le&&Ke.length>0){const M=d.getWorkflow();for(const G of Ke){if(Le){d.updateStep(G.id,"skipped"),xt();continue}const V=(K=d.getWorkflow())==null?void 0:K.steps.find(fe=>fe.id===G.id);if(!V){console.warn(`[AIInputBar] Step ${G.id} not found in workflow!`);continue}if(V.status==="completed")continue;await $t(V)||(Le=!0)}}const ce=d.getWorkflow(),$n=ce==null?void 0:ce.steps.every(M=>M.status==="completed"||M.status==="failed"||M.status==="skipped"),Ut=Ht.length>0;if($n&&!Ut){const M=g.current,G=T.current,V=Re.current;(M||G.length>0)&&V&&(ce!=null&&ce.steps.every(fe=>{const he=fe.result;return he!=null&&he.taskId?Kn.isPostProcessingCompleted(he.taskId):!0}))&&setTimeout(()=>{M&&(ze.removeWorkZone(V,M),g.current=null),G.length>0&&(Q(V,"completed"),ee(V))},1500)}}catch(j){console.error("Failed to create generation task:",j),k==="image"&&Q(Re.current,"failed",{error:j instanceof Error?j.message:"创建图片任务失败"}),d.abortWorkflow(),at(!1)}}},[ge,we,He,O,U,d,Ts,x,Pe,Rs,Ns,k,Lt,W,Q,ee]),Hn=c.useCallback(async(s,l,p)=>{var q;const I=s.retryContext;if(!I){console.error("[AIInputBar] No retry context available for workflow");return}p&&(g.current=p);const v={id:s.id,name:s.name,description:`重试: ${s.name}`,scenarioType:s.steps.some(A=>A.mcp==="ai_analyze")?"agent_flow":"direct_generation",generationType:s.generationType,steps:s.steps.map((A,J)=>({id:A.id,mcp:A.mcp,args:A.args,description:A.description,status:J<l?A.status:"pending",result:J<l?A.result:void 0,error:J<l?A.error:void 0,duration:J<l?A.duration:void 0,options:A.options})),metadata:{prompt:s.prompt,userInstruction:I.aiContext.userInstruction,rawInput:I.aiContext.rawInput,modelId:I.aiContext.model.id,modelRef:I.aiContext.modelRef,defaultModels:I.aiContext.defaultModels,defaultModelRefs:I.aiContext.defaultModelRefs,isModelExplicit:I.aiContext.model.isExplicit,count:s.count,size:I.aiContext.params.size,duration:I.aiContext.params.duration,referenceImages:I.referenceImages,selection:I.aiContext.selection},createdAt:Date.now()};d.startWorkflow(v),h.current({type:"retry",timestamp:Date.now(),reason:`从步骤 ${l+1} 开始重试`,attempt:1});const E=Re.current,L=()=>{const A=nt(d.getWorkflow(),I);w.current(A),g.current&&E&&ze.updateWorkflow(E,g.current,A)},K=nt(v,I);w.current(K),g.current&&E&&ze.updateWorkflow(E,g.current,K);const j=(A,J)=>({onChunk:ue=>{D.current(ue)},onAddSteps:ue=>{d.updateStep(A.id,"completed",{analysis:"completed"},void 0,Date.now()-J);const _e=ue.map((pe,Ae)=>vn(v,{...pe,status:pe.status==="completed"?"completed":"pending",options:{mode:"queue",batchId:`agent_${Date.now()}`,batchIndex:Ae+1,batchTotal:ue.length,globalIndex:Ae+1}}));d.addSteps(_e),Y.push(..._e),ue.forEach(pe=>{h.current({type:"tool_call",timestamp:Date.now(),toolName:pe.mcp,args:pe.args})}),L()},onUpdateStep:(ue,_e,pe,Ae)=>{d.updateStep(ue,_e,pe,Ae),h.current({type:"tool_result",timestamp:Date.now(),toolName:ue,success:_e==="completed",data:pe,error:Ae}),L()}}),Y=[];let F=!1;const Z=new Map;s.steps.forEach(A=>{var ue;const J=(ue=A.result)==null?void 0:ue.taskId;J&&Z.set(A.id,J)});const te=async A=>{var _e,pe,Ae,Ht,Ke,fn;const J=Date.now(),ue=Y.length;d.updateStep(A.id,"running"),L();try{const Le=Z.get(A.id),xt={...A.options,...j(A,J),...Le?{retryTaskId:Le}:{}},$t=vn(v,A),ce=await Xs.executeTool({name:$t.mcp,arguments:$t.args},xt),$n=(pe=(_e=d.getWorkflow())==null?void 0:_e.steps.find(Ut=>Ut.id===A.id))==null?void 0:pe.status;if(ce.success){if(ce.taskId)d.updateStep(A.id,"running",{taskId:ce.taskId}),W(E,ce.taskId,{workflowId:s.id,batchId:(Ae=A.options)==null?void 0:Ae.batchId,batchIndex:(Ht=A.options)==null?void 0:Ht.batchIndex});else if($n==="running"){const Ut=ce.type==="text"&&ce.data&&typeof ce.data=="object"&&"content"in ce.data?{content:ce.data.content}:ce.data;d.updateStep(A.id,"completed",Ut,void 0,Date.now()-J);const M=A.mcp==="generate_text"?(Ke=ce.data)==null?void 0:Ke.content:A.mcp==="ai_analyze"?(fn=ce.data)==null?void 0:fn.response:void 0;if((A.mcp==="generate_text"||A.mcp==="ai_analyze")&&M&&M.trim()&&Y.length===ue){const oe={id:`${A.id}-insert-text`,mcp:"insert_to_canvas",args:{items:[{type:"text",content:M}]},description:A.mcp==="generate_text"?"将生成文本插入画布":"将 AI 回复插入画布",status:"pending"};d.addSteps([oe]),Y.push(oe)}}}else return d.updateStep(A.id,"failed",void 0,ce.error||"执行失败",Date.now()-J),!1;return!0}catch(Le){return d.updateStep(A.id,"failed",void 0,String(Le)),!1}finally{L()}},me=v.steps.slice(l);for(const A of me){if(F){d.updateStep(A.id,"skipped"),L();continue}await te(A)||(F=!0)}if(!F&&Y.length>0)for(const A of Y){if(F){d.updateStep(A.id,"skipped"),L();continue}const J=(q=d.getWorkflow())==null?void 0:q.steps.find(_e=>_e.id===A.id);if(!J||J.status==="completed")continue;await te(J)||(F=!0)}const z=d.getWorkflow(),ae=z==null?void 0:z.steps.every(A=>A.status==="completed"||A.status==="failed"||A.status==="skipped"),re=z==null?void 0:z.steps.some(A=>{var J;return(J=A.result)==null?void 0:J.taskId});if(ae&&!re){const A=g.current,J=Re.current;A&&J&&(z!=null&&z.steps.every(_e=>{const pe=_e.result;return pe!=null&&pe.taskId?Kn.isPostProcessingCompleted(pe.taskId):!0}))&&setTimeout(()=>{ze.removeWorkZone(J,A),g.current=null},1500)}},[d,W]);c.useEffect(()=>{C.current(Hn);const s=Re.current;s&&(s.__executeWorkflowRetry=Hn)},[Hn]);const oa=c.useCallback(s=>{var l;if(!s.nativeEvent.isComposing&&!(s.key==="Enter"&&(s.shiftKey||s.altKey))){if((ks||vs||Ss)&&(s.key==="Enter"||s.key==="Tab")){s.preventDefault();return}if(s.key==="Enter"){s.preventDefault(),We.track("ai_input_submit_keyboard"),Bn();return}if(s.key==="Escape"){rt(!1),(l=Ee.current)==null||l.blur();return}}},[Bn]),aa=c.useCallback(()=>{We.track("ai_input_focus_textarea"),rt(!0)},[]),ra=c.useCallback(()=>{We.track("ai_input_blur_textarea"),rt(!1)},[]),ia=c.useCallback(s=>{const l=s.target.value,p=s.target.selectionStart||l.length;if(ot(l),p>0){const I=l[p-1],v=p>1?l[p-2]:" ";I==="#"&&(v===" "||v===`
|
|
8
|
+
`||p===1)&&(it.current=p-1,zn(!0),On(!1),Wn(!1))}},[]),ca=c.useMemo(()=>JSON.stringify({generationType:k,model:O,profileId:(U==null?void 0:U.profileId)||null,hasAttachedContent:we.length>0,attachedCount:we.length,promptLengthBucket:fi(ge.trim().length)}),[we.length,k,ge,O,U==null?void 0:U.profileId]),js=ge.trim().length>0||we.length>0,zs=Wo===!0,la=Dn.some(s=>{var l;return s.type==="text"&&((l=s.text)==null?void 0:l.trim())}),lt=Nt||we.length>0||zo;return c.useLayoutEffect(()=>{yi(Ee.current,lt)},[lt,ge]),m.jsxs("div",{ref:dn,className:wn("ai-input-bar",Pn,t,{"ai-input-bar--with-inspiration":zs}),"data-testid":"ai-input-bar",children:[m.jsx(No,{language:o,onSelectionChange:Xo,externalBoardRef:Re,onCanvasEmptyChange:Lo,isDataReady:n,onFrameSelected:qo}),m.jsx(Qr,{isCanvasEmpty:zs,onSelectPrompt:$o,onOpenPromptTool:Go}),m.jsxs("div",{className:wn("ai-input-bar__container",{"ai-input-bar__container--expanded":lt}),children:[m.jsxs("div",{className:"ai-input-bar__bottom-bar",children:[m.jsx("input",{ref:Ps,type:"file",accept:"image/*",multiple:!0,onChange:Zo,style:{display:"none"}}),m.jsx("button",{className:"ai-input-bar__upload-btn",onMouseDown:s=>{s.preventDefault(),s.stopPropagation()},onClick:Yo,title:o==="zh"?"上传图片":"Upload images","data-track":"ai_input_click_upload",children:m.jsx(Xa,{size:18})}),m.jsx("button",{className:"ai-input-bar__library-btn",onMouseDown:s=>{s.preventDefault(),s.stopPropagation()},onClick:()=>Ft(!0),title:o==="zh"?"从素材库选择":"Select from library","data-track":"ai_input_click_library",children:m.jsx(qa,{size:18})}),m.jsx(ei,{value:k,onSelect:$e,disabled:He}),k==="agent"&&m.jsx(Yr,{value:xe,onSelect:Nn,onSelectSkill:ta,onAddSkill:Vo,disabled:He}),m.jsx(yn,{selectedModel:O,selectedSelectionKey:Oe(O,U),onSelect:Qo,onSelectModel:ea,language:o,models:cn,header:o==="zh"?k==="agent"?"选择文本模型 (↑↓ Tab)":"选择模型 (↑↓ Tab)":k==="agent"?"Select text model (↑↓ Tab)":"Select model (↑↓ Tab)",isOpen:ks,onOpenChange:Fo}),k==="agent"&&xe!==st&&jn.includes("image")&&m.jsx(yn,{selectedModel:Ue,selectedSelectionKey:Oe(Ue,Xe),onSelect:(s,l)=>Ln("image",s,l),onSelectModel:s=>Fn("image",s),language:o,models:jt,header:o==="zh"?"选择图片模型 (↑↓ Tab)":"Select image model (↑↓ Tab)"}),k==="agent"&&xe!==st&&jn.includes("video")&&m.jsx(yn,{selectedModel:Ve,selectedSelectionKey:Oe(Ve,qe),onSelect:(s,l)=>Ln("video",s,l),onSelectModel:s=>Fn("video",s),language:o,models:zt,header:o==="zh"?"选择视频模型 (↑↓ Tab)":"Select video model (↑↓ Tab)"}),k==="agent"&&xe!==st&&jn.includes("audio")&&m.jsx(yn,{selectedModel:Ge,selectedSelectionKey:Oe(Ge,Je),onSelect:(s,l)=>Ln("audio",s,l),onSelectModel:s=>Fn("audio",s),language:o,models:Ot,header:o==="zh"?"选择音频模型 (↑↓ Tab)":"Select audio model (↑↓ Tab)"}),k!=="agent"&&Bt.length>0&&m.jsx(xr,{selectedParams:Pe,onParamChange:na,compatibleParams:Bt,modelId:O,language:o,isOpen:vs,onOpenChange:Bo},O),k!=="agent"&&k!=="text"&&k!=="audio"&&m.jsx(ti,{value:Lt,onSelect:sa,disabled:He,isOpen:Ss,onOpenChange:Ho}),m.jsx("div",{className:"ai-input-bar__bottom-spacer"}),m.jsx("button",{className:`ai-input-bar__send-btn ${js?"active":""} ${He?"loading":""}`,onMouseDown:s=>{s.preventDefault(),s.stopPropagation()},onClick:()=>Bn(),disabled:!js||He,"data-track":"ai_input_click_send","data-track-params":ca,"data-testid":"ai-send-btn",children:m.jsx(Ra,{size:18})})]}),m.jsxs("div",{className:wn("ai-input-bar__input-area",{"ai-input-bar__input-area--expanded":lt}),children:[we.length>0&&m.jsx("div",{className:"ai-input-bar__content-preview",children:m.jsx(er,{items:we,language:o,enableHoverPreview:!0,onRemove:Jo,removableStartIndex:Rt.length})}),m.jsxs("div",{className:"ai-input-bar__prompt-row",children:[m.jsx("div",{className:"ai-input-bar__rich-input",children:m.jsx("textarea",{ref:Ee,className:wn("ai-input-bar__input",{"ai-input-bar__input--focused":lt}),value:ge,onChange:ia,onKeyDown:oa,onFocus:aa,onBlur:ra,placeholder:k==="agent"?o==="zh"?"输入指令,让 Agent 为你工作...":"Type instructions for Agent...":k==="text"?o==="zh"?"输入你想生成的文本内容、文章、摘要或 Markdown":"Describe the text, article, summary, or markdown you want":k==="audio"?la?o==="zh"?"已有文本,无需额外提示词,直接发送":"Text already selected. No extra prompt needed, just send":o==="zh"?"描述你想要生成的音乐、风格、歌词或情绪":"Describe the music, style, lyrics, or mood you want":o==="zh"?`描述你想要创建的${k==="image"?"图片":"视频"}`:`Describe the ${k==="image"?"image":"video"} you want to create`,rows:lt?Ro:hi,disabled:He,"data-testid":"ai-input-textarea"})}),m.jsx(Rr,{generationType:k,onSelectPrompt:Uo,language:o,onBeforeOpenMyPrompts:e,extraActions:lt?m.jsx(Na,{className:"prompt-history-popover__action-btn",originalPrompt:ge,language:o,scenarioId:`ai-input.${k}`,disabled:He,allowStructuredMode:!0,onOpenChange:Oo,onMouseDown:s=>{s.preventDefault(),s.stopPropagation(),rt(!0)},onApply:s=>{ot(s),rt(!0),requestAnimationFrame(()=>{var l;(l=Ee.current)==null||l.focus()})}}):null})]})]})]}),Ms&&m.jsx(Ja,{isOpen:Ms,onClose:()=>Ft(!1),mode:ir.SELECT,filterType:Qs.IMAGE,onSelect:Ko})]})});jo.displayName="AIInputBar";function zi({isDataReady:t,activationKey:n,onEnableToolWindows:e}){const o=c.useRef(null);return c.useEffect(()=>{if(n<=0)return;const i=window.setTimeout(()=>{var a;const r=(a=o.current)==null?void 0:a.querySelector('[data-testid="ai-input-textarea"]');r==null||r.focus()},0);return()=>{window.clearTimeout(i)}},[n]),m.jsx($a,{children:m.jsx(Oa,{children:m.jsx("div",{ref:o,children:m.jsx(jo,{isDataReady:t,onEnableToolWindows:e})})})})}export{zi as DeferredAIInputBar,zi as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./diagram-engines-CGOhfK6V.css","./tool-windows-CqSDeXz5.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{_ as s}from"./startup-runtime-BbuNXj6O.js";import{bU as M,j as t,r as n}from"./diagram-engines-DmAewdsu.js";import"./shared-runtime-DBavnB0U.js";const U=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.dX),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.ProjectDrawer}))),F=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.dY),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.ToolboxDrawer}))),W=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.dZ),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.DeferredMediaLibraryModal}))),N=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.d_),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.BackupRestoreDialog}))),X=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.d$),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.VersionUpdatePrompt}))),Y=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.e0),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.PerformancePanel}))),Z=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.e1),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.DeferredSyncSettings}))),$=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.e2),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.CommandPalette}))),q=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.e3),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.CanvasSearch}))),G=n.lazy(()=>s(()=>import("./tool-windows-DV-j2p51.js").then(e=>e.e4),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.ToolWinBoxManager})));function Q({board:e,value:S,containerRef:a,versionUpdateEnabled:v,performancePanelEnabled:D,toolWindowManagerEnabled:f,projectDrawerOpen:u,toolboxDrawerOpen:p,mediaLibraryOpen:_,mediaLibraryConfig:l,backupRestoreOpen:h,cloudSyncOpen:m,onBoardSwitch:r,setProjectDrawerOpen:T,setToolboxDrawerOpen:O,setMediaLibraryOpen:k,setBackupRestoreOpen:V,setCloudSyncOpen:A,handleOpenMediaLibrary:I,handleBeforeSwitch:x,onCreateProjectForMemory:R}){const{appState:d,setAppState:P}=M(),j=d.openCommandPalette||!1,i=d.openCanvasSearch||!1;return t.jsxs(t.Fragment,{children:[_&&t.jsx(n.Suspense,{fallback:null,children:t.jsx(W,{isOpen:_,onClose:()=>k(!1),mode:l==null?void 0:l.mode,filterType:l==null?void 0:l.filterType,onSelect:l==null?void 0:l.onSelect,selectButtonText:l==null?void 0:l.selectButtonText})}),h&&t.jsx(n.Suspense,{fallback:null,children:t.jsx(N,{open:h,onOpenChange:V,container:a.current,onBeforeImport:async()=>{await x()},onSwitchBoard:async(o,E)=>{const{workspaceService:w}=await s(async()=>{const{workspaceService:z}=await import("./tool-windows-DV-j2p51.js").then(B=>B.dN);return{workspaceService:z}},__vite__mapDeps([0,1]),import.meta.url),c=await w.switchBoard(o);c&&r&&(E&&(c.viewport=E),r(c))}})}),m&&t.jsx(n.Suspense,{fallback:null,children:t.jsx(Z,{visible:m,onClose:()=>A(!1)})}),v&&t.jsx(n.Suspense,{fallback:null,children:t.jsx(X,{})}),f&&t.jsx(n.Suspense,{fallback:null,children:t.jsx(G,{})}),j&&t.jsx(n.Suspense,{fallback:null,children:t.jsx($,{open:j,onClose:()=>{P(o=>({...o,openCommandPalette:!1}))},board:e,container:a.current})}),i&&t.jsx(n.Suspense,{fallback:null,children:t.jsx(q,{open:i,onClose:()=>{P(o=>({...o,openCanvasSearch:!1}))},board:e})}),D&&t.jsx(n.Suspense,{fallback:null,children:t.jsx(Y,{container:a.current,onCreateProject:R,elements:(e==null?void 0:e.children)||S})}),u&&t.jsx(n.Suspense,{fallback:null,children:t.jsx(U,{isOpen:u,onOpenChange:T,onBeforeSwitch:x,onBoardSwitch:r,onOpenMediaLibrary:I})}),p&&t.jsx(n.Suspense,{fallback:null,children:t.jsx(F,{isOpen:p,onOpenChange:O})})]})}export{Q as DrawnixDeferredFeatures,Q as default};
|