aitu-app 0.6.48 → 0.6.49
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-DITqjh6L.js +2 -0
- package/assets/CanvasAudioPlayer-mm7y75Ol.css +1 -0
- package/assets/ChatMessagesArea-D9jmGx5a.js +250 -0
- package/assets/ChatMessagesArea-DyR_wHFQ.css +1 -0
- package/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/assets/KnowledgeBaseContent-C_BAVG2b.css +1 -0
- package/assets/KnowledgeBaseContent-za__rOJH.js +53 -0
- package/assets/MVCreator-CTG316DL.js +152 -0
- package/assets/MVCreator-D2l2Gm4W.css +1 -0
- package/assets/MediaLibrarySidebar-CNCXXhfY.css +1 -0
- package/assets/ModelBenchmarkWorkbench-CAF7qCOz.css +1 -0
- package/assets/ModelBenchmarkWorkbench-JCQglDx0.js +2 -0
- package/assets/MusicAnalyzer-DE_rzhdo.js +1 -0
- package/assets/MusicAnalyzer-DhtRGpAp.css +1 -0
- package/assets/MusicAnalyzer-QQf3iMVf.js +6 -0
- package/assets/ResizableDivider-CNJfwuMZ.js +1 -0
- package/assets/ResizableDivider-ClzYJk-6.css +1 -0
- package/assets/Tableau10-B-NsZVaP.js +1 -0
- package/assets/Tableau10-Dnlau_Wv.js +1 -0
- package/assets/TaskQueuePanel-CcKV6Mtu.js +1 -0
- package/assets/VideoAnalyzer-4jAswALN.js +2 -0
- package/assets/VideoAnalyzer-BNHBu5xL.css +1 -0
- package/assets/__vite-browser-external-UePf-KSV.js +1 -0
- package/assets/apl-B4CMkyY2.js +1 -0
- package/assets/arc-CUJYo2bm.js +1 -0
- package/assets/arc-Do7iheP0.js +1 -0
- package/assets/array-B5oSNiGi.js +1 -0
- package/assets/array-BKyUJesY.js +1 -0
- package/assets/asciiarmor-Df11BRmG.js +1 -0
- package/assets/asn1-EdZsLKOL.js +1 -0
- package/assets/asterisk-B-8jnY81.js +1 -0
- package/assets/batch-image-generation-BcGzhZc6.js +6 -0
- package/assets/batch-image-generation-BePygpHd.css +1 -0
- package/assets/blockDiagram-38ab4fdb-7dWD8NFK.js +118 -0
- package/assets/blockDiagram-38ab4fdb-CQhYv8hA.js +118 -0
- package/assets/brainfuck-C4LP7Hcl.js +1 -0
- package/assets/browser-Dlc7rtso.js +1 -0
- package/assets/c4Diagram-3d4e48cf-DcDSmMC1.js +10 -0
- package/assets/c4Diagram-3d4e48cf-YiNiIQMx.js +10 -0
- package/assets/channel-CbiJkWzq.js +1 -0
- package/assets/channel-CmPwOS9o.js +1 -0
- package/assets/character-Bo9jcTNu.css +1 -0
- package/assets/classDiagram-70f12bd4--vcKyE3X.js +2 -0
- package/assets/classDiagram-70f12bd4-uRbi4Ob8.js +2 -0
- package/assets/classDiagram-v2-f2320105-CJVRZ6AN.js +2 -0
- package/assets/classDiagram-v2-f2320105-vzjVMHkr.js +2 -0
- package/assets/clike-B9uivgTg.js +1 -0
- package/assets/clipper-DOGfacWv.js +1 -0
- package/assets/clojure-BMjYHr_A.js +1 -0
- package/assets/clone-D79TnM4U.js +1 -0
- package/assets/cmake-BQqOBYOt.js +1 -0
- package/assets/cobol-CWcv1MsR.js +1 -0
- package/assets/coffeescript-S37ZYGWr.js +1 -0
- package/assets/commonlisp-DBKNyK5s.js +1 -0
- package/assets/createText-2e5e7dd3-BwZkEiuo.js +8 -0
- package/assets/createText-2e5e7dd3-Caeqt6QH.js +5 -0
- package/assets/crystal-SjHAIU92.js +1 -0
- package/assets/css-BnMrqG3P.js +1 -0
- package/assets/cypher-C_CwsFkJ.js +1 -0
- package/assets/d-pRatUO7H.js +1 -0
- package/assets/diff-DbItnlRl.js +1 -0
- package/assets/dockerfile-BKs6k2Af.js +1 -0
- package/assets/dtd-DF_7sFjM.js +1 -0
- package/assets/dylan-DwRh75JA.js +1 -0
- package/assets/ebnf-CDyGwa7X.js +1 -0
- package/assets/ecl-Cabwm37j.js +1 -0
- package/assets/edges-e0da2a9e-C0phcDTf.js +4 -0
- package/assets/edges-e0da2a9e-izyAbn2P.js +4 -0
- package/assets/eiffel-CnydiIhH.js +1 -0
- package/assets/elm-vLlmbW-K.js +1 -0
- package/assets/erDiagram-9861fffd-2xZLFO3_.js +51 -0
- package/assets/erDiagram-9861fffd-CbdcBVpG.js +51 -0
- package/assets/erlang-BNw1qcRV.js +1 -0
- package/assets/external-skills-BcV6ATYi.js +1 -0
- package/assets/factor-kuTfRLto.js +1 -0
- package/assets/fcl-Kvtd6kyn.js +1 -0
- package/assets/flowDb-956e92f1-CKDRVial.js +10 -0
- package/assets/flowDb-956e92f1-X_4p-qaU.js +10 -0
- package/assets/flowDiagram-66a62f08-CujQt6CJ.js +4 -0
- package/assets/flowDiagram-66a62f08-DBi4rRPf.js +4 -0
- package/assets/flowDiagram-v2-96b9c2cf-BLkw2ciq.js +1 -0
- package/assets/flowDiagram-v2-96b9c2cf-DVKQK2hY.js +1 -0
- package/assets/flowchart-elk-definition-4a651766-Uf06y1Ck.js +139 -0
- package/assets/flowchart-elk-definition-4a651766-wpAztAJn.js +139 -0
- package/assets/forth-Ffai-XNe.js +1 -0
- package/assets/fortran-DYz_wnZ1.js +1 -0
- package/assets/ganttDiagram-c361ad54-B3JxRUoo.js +257 -0
- package/assets/ganttDiagram-c361ad54-CIb_MFVi.js +257 -0
- package/assets/gas-Bneqetm1.js +1 -0
- package/assets/gherkin-heZmZLOM.js +1 -0
- package/assets/gitGraphDiagram-72cf32ee-PuJBoZww.js +70 -0
- package/assets/gitGraphDiagram-72cf32ee-i6oLazGK.js +70 -0
- package/assets/graph-CbDG5PTO.js +1 -0
- package/assets/graph-DUQ4GGpV.js +1 -0
- package/assets/groovy-D9Dt4D0W.js +1 -0
- package/assets/haskell-Cw1EW3IL.js +1 -0
- package/assets/haxe-H-WmDvRZ.js +1 -0
- package/assets/http-DBlCnlav.js +1 -0
- package/assets/idl-BEugSyMb.js +1 -0
- package/assets/index-04BPVAKr.js +1 -0
- package/assets/index-3862675e-CLvnWYyN.js +1 -0
- package/assets/index-3862675e-CxQdmW6r.js +1 -0
- package/assets/index-3K3oLjal.js +1 -0
- package/assets/index-Ayt_kr_j.js +1 -0
- package/assets/index-B0aeak-l.js +1 -0
- package/assets/index-BAeTUD9a.js +1 -0
- package/assets/index-BECtRsXJ.js +6 -0
- package/assets/index-BScFd-2h.js +4 -0
- package/assets/index-BUB5I7zd.js +1 -0
- package/assets/index-BWokxWXg.js +1 -0
- package/assets/index-BYAyLEaG.js +1 -0
- package/assets/index-BZS4gNhO.js +7 -0
- package/assets/index-Bc75bQXQ.js +2 -0
- package/assets/index-BjxNPKa3.js +1 -0
- package/assets/index-BkvYpt-1.js +1 -0
- package/assets/index-Bnb0fjWR.js +1 -0
- package/assets/index-CGq-gcht.js +12 -0
- package/assets/index-CJ7peDFP.css +1 -0
- package/assets/index-CJCAjGj3.js +2 -0
- package/assets/index-CdYUDSvm.js +1 -0
- package/assets/index-CxEkGLrr.js +686 -0
- package/assets/index-DHQdBbnC.js +3 -0
- package/assets/index-DYdelMnT.js +1 -0
- package/assets/index-Dk5t_-56.js +99 -0
- package/assets/index-DlZybecc.js +1 -0
- package/assets/index-DmWG413C.js +1 -0
- package/assets/index-DzlsyVkU.js +1 -0
- package/assets/index-EYhL1Kgt.js +1 -0
- package/assets/index-c441JIOr.js +13 -0
- package/assets/index-fqJaUvT1.js +1 -0
- package/assets/index-hGrN05cs.js +1 -0
- package/assets/index-zV_AIntM.js +2 -0
- package/assets/infoDiagram-f8f76790-BYO9kBqO.js +7 -0
- package/assets/infoDiagram-f8f76790-D_TYtc3S.js +7 -0
- package/assets/init-A0kIFD9x.js +1 -0
- package/assets/init-Gi6I4Gst.js +1 -0
- package/assets/javascript-iXu5QeM3.js +1 -0
- package/assets/journeyDiagram-49397b02-DWfiJTLK.js +139 -0
- package/assets/journeyDiagram-49397b02-Dv5EEshV.js +139 -0
- package/assets/julia-DuME0IfC.js +1 -0
- package/assets/katex-Cu_Erd72.js +261 -0
- package/assets/layout-Bc2296BZ.js +1 -0
- package/assets/layout-Dm28IvOg.js +1 -0
- package/assets/line-C3mpslQb.js +1 -0
- package/assets/line-DTTPRZLU.js +1 -0
- package/assets/linear-YwuGF1HZ.js +1 -0
- package/assets/linear-g8AgbOem.js +1 -0
- package/assets/livescript-BwQOo05w.js +1 -0
- package/assets/lua-BgMRiT3U.js +1 -0
- package/assets/main-DlDiDA_U.css +9 -0
- package/assets/main-sSl0uAQQ.js +564 -0
- package/assets/mathematica-DTrFuWx2.js +1 -0
- package/assets/mbox-CNhZ1qSd.js +1 -0
- package/assets/mermaid.core-GIkiJOrg.js +91 -0
- package/assets/mindmap-definition-fc14e90a-Chuh4Ixc.js +425 -0
- package/assets/mindmap-definition-fc14e90a-D_ZKvIES.js +425 -0
- package/assets/mirc-CjQqDB4T.js +1 -0
- package/assets/mllike-CXdrOF99.js +1 -0
- package/assets/modelica-Dc1JOy9r.js +1 -0
- package/assets/mscgen-BA5vi2Kp.js +1 -0
- package/assets/mumps-BT43cFF4.js +1 -0
- package/assets/nginx-DdIZxoE0.js +1 -0
- package/assets/nsis-LdVXkNf5.js +1 -0
- package/assets/ntriples-BfvgReVJ.js +1 -0
- package/assets/octave-Ck1zUtKM.js +1 -0
- package/assets/ordinal-BRr1uYdk.js +1 -0
- package/assets/ordinal-Cboi1Yqb.js +1 -0
- package/assets/oz-BzwKVEFT.js +1 -0
- package/assets/pascal--L3eBynH.js +1 -0
- package/assets/path-CY0bYimO.js +1 -0
- package/assets/path-CbwjOpE9.js +1 -0
- package/assets/perl-CdXCOZ3F.js +1 -0
- package/assets/photo-wall-splitter-CY0T_wNE.js +1 -0
- package/assets/pieDiagram-8a3498a8-DRsICc_f.js +35 -0
- package/assets/pieDiagram-8a3498a8-Dah8ahbr.js +35 -0
- package/assets/pig-CevX1Tat.js +1 -0
- package/assets/powershell-CFHJl5sT.js +1 -0
- package/assets/properties-C78fOPTZ.js +1 -0
- package/assets/protobuf-ChK-085T.js +1 -0
- package/assets/pug-DeIclll2.js +1 -0
- package/assets/puppet-DMA9R1ak.js +1 -0
- package/assets/python-BuPzkPfP.js +1 -0
- package/assets/q-pXgVlZs6.js +1 -0
- package/assets/quadrantDiagram-120e2f19-Fh6InPVY.js +7 -0
- package/assets/quadrantDiagram-120e2f19-gL-_zV58.js +7 -0
- package/assets/r-B6wPVr8A.js +1 -0
- package/assets/requirementDiagram-deff3bca-CNSkJJCh.js +52 -0
- package/assets/requirementDiagram-deff3bca-CfDffyTL.js +52 -0
- package/assets/rpm-CTu-6PCP.js +1 -0
- package/assets/ruby-B2Rjki9n.js +1 -0
- package/assets/sankeyDiagram-04a897e0-Bk-KjkRU.js +8 -0
- package/assets/sankeyDiagram-04a897e0-JvhHugQc.js +8 -0
- package/assets/sas-B4kiWyti.js +1 -0
- package/assets/scheme-C41bIUwD.js +1 -0
- package/assets/sequenceDiagram-704730f1-DtYYZkJD.js +122 -0
- package/assets/sequenceDiagram-704730f1-Hcr6n9p8.js +122 -0
- package/assets/shell-CjFT_Tl9.js +1 -0
- package/assets/sieve-C3Gn_uJK.js +1 -0
- package/assets/simple-mode-GW_nhZxv.js +1 -0
- package/assets/smalltalk-CnHTOXQT.js +1 -0
- package/assets/solr-DehyRSwq.js +1 -0
- package/assets/sparql-DkYu6x3z.js +1 -0
- package/assets/spreadsheet-BCZA_wO0.js +1 -0
- package/assets/sql-D0XecflT.js +1 -0
- package/assets/stateDiagram-587899a1-BBe_EhAD.js +1 -0
- package/assets/stateDiagram-587899a1-DqdI8yJY.js +1 -0
- package/assets/stateDiagram-v2-d93cdb3a-BFy9jG1p.js +1 -0
- package/assets/stateDiagram-v2-d93cdb3a-CR8nQq3k.js +1 -0
- package/assets/stex-C3f8Ysf7.js +1 -0
- package/assets/styles-6aaf32cf-B3jetBAL.js +207 -0
- package/assets/styles-6aaf32cf-CtTk65AO.js +207 -0
- package/assets/styles-9a916d00-BzAmphe7.js +160 -0
- package/assets/styles-9a916d00-CC9GaYxg.js +160 -0
- package/assets/styles-c10674c1-CNAwL7Ic.js +116 -0
- package/assets/styles-c10674c1-Db2Kd6RJ.js +116 -0
- package/assets/stylus-B533Al4x.js +1 -0
- package/assets/svgDrawCommon-08f97a94-C5qlB1eZ.js +1 -0
- package/assets/svgDrawCommon-08f97a94-JdKl-BWQ.js +1 -0
- package/assets/swift-BzpIVaGY.js +1 -0
- package/assets/tcl-DVfN8rqt.js +1 -0
- package/assets/textile-CnDTJFAw.js +1 -0
- package/assets/tiddlywiki-DO-Gjzrf.js +1 -0
- package/assets/tiki-DGYXhP31.js +1 -0
- package/assets/timeline-definition-85554ec2-DOdYNzv7.js +61 -0
- package/assets/timeline-definition-85554ec2-o-R8VXA5.js +61 -0
- package/assets/toml-Bm5Em-hy.js +1 -0
- package/assets/tool-windows-Cuh0TRgJ.css +1 -0
- package/assets/tool-windows-DWUG3k_L.js +2846 -0
- package/assets/troff-wAsdV37c.js +1 -0
- package/assets/ttcn-CfJYG6tj.js +1 -0
- package/assets/ttcn-cfg-B9xdYoR4.js +1 -0
- package/assets/ttd-dialog-BQiy0hwR.js +99 -0
- package/assets/ttd-dialog-BlUvpMr5.css +1 -0
- package/assets/turtle-B1tBg_DP.js +1 -0
- package/assets/useCharacters-BJLEgDAP.css +1 -0
- package/assets/useCharacters-BxKzeyv4.js +6 -0
- package/assets/vb-CmGdzxic.js +1 -0
- package/assets/vbscript-BuJXcnF6.js +1 -0
- package/assets/velocity-D8B20fx6.js +1 -0
- package/assets/verilog-C6RDOZhf.js +1 -0
- package/assets/version-update-prompt-HA-CqLZW.js +1 -0
- package/assets/version-update-prompt-P9Rd5ve2.css +1 -0
- package/assets/vhdl-lSbBsy5d.js +1 -0
- package/assets/video-recovery-service-C0PZsfFC.js +1 -0
- package/assets/web-vitals-DcvjKPr-.js +1 -0
- package/assets/webidl-ZXfAyPTL.js +1 -0
- package/assets/winbox.bundle.min-CoRPjCs5.js +1 -0
- package/assets/workflow-generation-utils-DspPdLxa.js +3 -0
- package/assets/xlsx-CkFp8p6R.js +105 -0
- package/assets/xquery-DzFWVndE.js +1 -0
- package/assets/xychartDiagram-e933f94c-D13oeSTj.js +7 -0
- package/assets/xychartDiagram-e933f94c-DwikDAhJ.js +7 -0
- package/assets/yacas-BJ4BC0dw.js +1 -0
- package/assets/z80-Hz9HOZM7.js +1 -0
- package/idle-prefetch-manifest.json +18 -4
- package/package.json +1 -1
- package/precache-manifest.json +1015 -3
- package/sw.js +1 -1
- package/version.json +2 -2
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./tool-windows-Cuh0TRgJ.css","./MediaLibrarySidebar-CNCXXhfY.css","./useCharacters-BJLEgDAP.css","./character-Bo9jcTNu.css","./index-CJ7peDFP.css","./ChatMessagesArea-DyR_wHFQ.css","./ResizableDivider-ClzYJk-6.css","./ttd-dialog-BlUvpMr5.css","./CanvasAudioPlayer-mm7y75Ol.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as p,B as Mp,P as J,a as mv,h as pv,s as Vp,W as Ko,t as Un,b as Rn,g as fv,d as Zu,i as $b,c as va,u as Wl,e as hv,f as gv,k as bv,l as Ue,Z as xv,m as Up,n as Rp,I as qp,o as Lp,p as wv,q as Op,K as zp,v as yv,w as Ju,x as Qu,y as c,z as ne,H as Nv,A as vv,C as kv,D as Ev,E as Dc,T as Bp,R as Ui,F as Fp,G as wr,J as $l,M as Sv,L as Tv,N as jo,O as Dv,Q as _v,S as Xb,U as ut,V as Yo,X as Gp,Y as Iv,$ as Cv,a0 as jv,a1 as Pv,a2 as Av,a3 as Mv,a4 as Vv,a5 as Uv,a6 as Rv,a7 as qv,a8 as Lv,a9 as Ov,aa as zv,ab as Bv,ac as Fv,ad as Gv,ae as uu,af as ol,ag as Hv,ah as Wv,ai as Ae,aj as $v,ak as Xv,al as pe,am as Kv,an as Hp,ao as Wp,ap as Yv,aq as $p,ar as Kb,as as Ei,at as Ki,au as Zv,av as Jv,aw as rr,ax as Qv,ay as ek,az as Yb,aA as ka,aB as Ea,aC as ed,aD as li,aE as tk,aF as Zb,aG as td,aH as Qn,aI as an,aJ as as,aK as ls,aL as bi,aM as Jb,aN as ar,aO as rm,aP as Se,aQ as am,aR as yr,aS as Nr,aT as Sn,aU as nk,aV as po,aW as Qb,aX as e0,aY as Ds,aZ as xn,a_ as Dn,a$ as Ke,b0 as Zo,b1 as Zi,b2 as Ft,b3 as Gt,b4 as Ne,b5 as Ht,b6 as fo,b7 as Yt,b8 as We,b9 as Fi,ba as _c,bb as _s,bc as t0,bd as n0,be as i0,bf as ik,bg as sk,bh as s0,bi as o0,bj as Jo,bk as Ic,bl as Xp,bm as Ba,bn as Xt,bo as En,_ as Ce,bp as r0,bq as ok,br as rk,bs as ak,bt as Fa,bu as Ga,bv as a0,bw as ko,bx as ns,by as Cc,bz as Sa,bA as lk,bB as ck,bC as Rt,bD as cs,bE as It,bF as uk,bG as dk,bH as mk,bI as Ri,bJ as ee,bK as _t,bL as On,bM as pk,bN as Qo,bO as fk,bP as Po,bQ as hk,bR as gk,bS as lm,bT as nd,bU as bk,bV as nn,bW as jc,bX as Pc,bY as xk,bZ as wk,b_ as yk,b$ as Nk,c0 as vk,c1 as kk,c2 as mi,c3 as Ek,c4 as Sk,c5 as Tk,c6 as Dk,c7 as _k,c8 as Ik,c9 as Ck,ca as er,cb as jk,cc as Pk,cd as Ak,ce as Mk,cf as Vi,cg as Vk,ch as Uk,ci as Rk,cj as qk,ck as Lk,cl as Ok,cm as zk,cn as Kp,co as Yp,cp as rl,cq as Bk,cr as Fk,cs as al,ct as l0,cu as Gk,cv as Hk,cw as Wk,cx as c0,cy as $k,cz as cm,cA as um,cB as u0,cC as dm,cD as Ci,cE as mm,cF as ks,cG as Zp,cH as ll,cI as oa,cJ as Ta,cK as Xk,cL as Kk,cM as Jp,cN as Yk,cO as Zk,cP as Jk,cQ as Qk,cR as e1,cS as d0,cT as Qp,cU as m0,cV as t1,cW as ef,cX as fi,cY as Ac,cZ as Mc,c_ as n1,c$ as p0,d0 as i1,d1 as s1,d2 as o1,d3 as r1,d4 as a1,d5 as l1,d6 as c1,d7 as Is,d8 as ho,d9 as u1,da as id,db as sd,dc as f0,dd as h0,de as d1,df as m1,dg as p1,dh as f1,di as Xl,dj as lr,dk as g0,dl as h1,dm as g1,dn as b0,dp as x0,dq as w0,dr as b1,ds as Vc,dt as y0,du as x1,dv as w1,dw as pm,dx as y1,dy as N1,dz as N0,dA as Il,dB as v1,dC as k1,dD as E1,dE as S1,dF as T1,dG as D1,dH as _1,dI as I1,dJ as Zs,dK as v0,dL as Uc,dM as Tn,dN as k0,dO as E0,dP as C1,dQ as S0,dR as fm,dS as T0,dT as D0,dU as j1,dV as P1,dW as A1,dX as M1,dY as V1,dZ as od,d_ as U1,d$ as R1,e0 as hm,e1 as is,e2 as Ot,e3 as Bt,e4 as vr,e5 as q1,e6 as L1,e7 as O1,e8 as _0,e9 as Wt,ea as bn,eb as st,ec as gm,ed as I0,ee as C0,ef as j0,eg as P0,eh as A0,ei as M0,ej as V0,ek as qi,el as z1,em as B1,en as F1,eo as dn,ep as Da,eq as go,er as G1,es as bm,et as Rc,eu as U0,ev as xm,ew as R0,ex as q0,ey as L0,ez as O0,eA as wm,eB as ym,eC as Nm,eD as Kl,eE as z0,eF as B0,eG as F0,eH as H1,eI as cr,eJ as Ns,eK as ft,eL as ni,eM as Ao,eN as W1,eO as mn,eP as tf,eQ as $1,eR as X1,eS as K1,eT as Y1,eU as Z1,eV as J1,eW as Q1,eX as qc,eY as nf,eZ as eE,e_ as tE,e$ as nE,f0 as G0,f1 as Ii,f2 as vm,f3 as iE,f4 as Cn,f5 as km,f6 as H0,f7 as W0,f8 as $0,f9 as Lc,fa as Em,fb as Sm,fc as rd,fd as Cs,fe as sf,ff as X0,fg as K0,fh as Y0,fi as Z0,fj as Eo,fk as kr,fl as So,fm as Oc,fn as Ha,fo as Rs,fp as of,fq as ad,fr as sE,fs as oE,ft as J0,fu as rE,fv as aE,fw as lE,fx as Q0,fy as ex,fz as cE,fA as zc,fB as rf,fC as uE,fD as dE,fE as af,fF as lf,fG as mE,fH as pE,fI as fE,fJ as hE,fK as cf,fL as gE,fM as Yl,fN as tx,fO as nx,fP as bE,fQ as xE,fR as wE,fS as yE,fT as NE,fU as vE,fV as kE,fW as ix,fX as du,fY as Tt,fZ as EE,f_ as SE,f$ as TE,g0 as cl,g1 as Mo,g2 as Vo,g3 as sx,g4 as DE,g5 as Tm,g6 as ox,g7 as rx,g8 as _E,g9 as IE,ga as CE,gb as jE,gc as PE,gd as Dm,ge as _a,gf as Ia,gg as ax,gh as AE,gi as $t,gj as Zl,gk as lx,gl as hi,gm as cx,gn as ME,go as ld,gp as js,gq as cd,gr as ux,gs as dx,gt as uf,gu as VE,gv as UE,gw as df,gx as mx,gy as Jl,gz as Bc,gA as RE,gB as Fc,gC as qE,gD as LE,gE as bo,gF as $n,gG as xo,gH as OE,gI as _m,gJ as zE,gK as jn,gL as Im,gM as BE,gN as FE,gO as GE,gP as HE,gQ as WE,gR as tr,gS as ss,gT as ud,gU as $E,gV as XE,gW as KE,gX as YE,gY as px,gZ as fx,g_ as ZE,g$ as JE,h0 as Xi,h1 as hx,h2 as gx,h3 as ra,h4 as QE,h5 as Ca,h6 as Ql,h7 as eS,h8 as tS,h9 as nS,ha as dd,hb as iS,hc as sS,hd as oS,he as rS,hf as mf,hg as ec,hh as md,hi as aS,hj as lS,hk as cS,hl as uS,hm as dS,hn as mS,ho as pS,hp as fS,hq as hS,hr as gS,hs as Qt,ht as bS,hu as xS,hv as wS,hw as yS,hx as NS,hy as so,hz as mu,hA as zo,hB as pd,hC as pf,hD as vS,hE as kS,hF as bx,hG as Cm,hH as ES,hI as SS,hJ as TS,hK as ei,hL as Bo,hM as ji,hN as oo,hO as DS,hP as _S,hQ as IS,hR as CS,hS as xx,hT as ff,hU as jS,hV as wx,hW as yx,hX as Nx,hY as tc,hZ as vx,h_ as kx,h$ as Ex,i0 as Sx,i1 as Tx,i2 as gs,i3 as hf,i4 as Dx,i5 as Cl,i6 as Ln,i7 as fd,i8 as _x,i9 as PS,ia as AS,ib as MS,ic as gf,id as VS,ie as hd,ig as US,ih as Ws,ii as pu,ij as RS,ik as fu,il as bf,im as xf,io as qS,ip as wf,iq as LS,ir as OS,is as zS,it as yf,iu as BS,iv as FS,iw as GS,ix as HS,iy as Ix,iz as WS,iA as Nf,iB as $S,iC as XS,iD as KS,iE as YS,iF as ZS,iG as JS,iH as QS,iI as eT,iJ as tT,iK as nT,iL as iT,iM as sT,iN as oT,iO as rT,iP as aT,iQ as lT,iR as cT,iS as uT,iT as dT,iU as vf,iV as mT,iW as ur,iX as pT,iY as fT,iZ as hT,i_ as gT,i$ as bT,j0 as xT,j1 as wT,j2 as yT,j3 as NT,j4 as vT,j5 as kT,j6 as ET,j7 as ST,j8 as TT,j9 as DT,ja as _T,jb as IT,jc as CT,jd as jT,je as PT,jf as kf,jg as hu,jh as gu,ji as AT,jj as Cx,jk as MT,jl as gd,jm as _i,jn as jx,jo as Px,jp as tn,jq as bd,jr as VT,js as Uo,jt as UT,ju as RT,jv as Ef}from"./tool-windows-DWUG3k_L.js";const Ze=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,Ct=globalThis,co="10.33.0";function Gc(){return Hc(Ct),Ct}function Hc(e){const t=e.__SENTRY__=e.__SENTRY__||{};return t.version=t.version||co,t[co]=t[co]||{}}function Er(e,t,n=Ct){const i=n.__SENTRY__=n.__SENTRY__||{},s=i[co]=i[co]||{};return s[e]||(s[e]=t())}const qT=["debug","info","warn","error","log","assert","trace"],LT="Sentry Logger ",nc={};function Sr(e){if(!("console"in Ct))return e();const t=Ct.console,n={},i=Object.keys(nc);i.forEach(s=>{const o=nc[s];n[s]=t[s],t[s]=o});try{return e()}finally{i.forEach(s=>{t[s]=n[s]})}}function OT(){Pm().enabled=!0}function zT(){Pm().enabled=!1}function Ax(){return Pm().enabled}function BT(...e){jm("log",...e)}function FT(...e){jm("warn",...e)}function GT(...e){jm("error",...e)}function jm(e,...t){Ze&&Ax()&&Sr(()=>{Ct.console[e](`${LT}[${e}]:`,...t)})}function Pm(){return Ze?Er("loggerSettings",()=>({enabled:!1})):{enabled:!1}}const qe={enable:OT,disable:zT,isEnabled:Ax,log:BT,warn:FT,error:GT},Mx=50,wo="?",Sf=/\(error: (.*)\)/,Tf=/captureMessage|captureException/;function Vx(...e){const t=e.sort((n,i)=>n[0]-i[0]).map(n=>n[1]);return(n,i=0,s=0)=>{const o=[],r=n.split(`
|
|
3
|
+
`);for(let a=i;a<r.length;a++){let l=r[a];l.length>1024&&(l=l.slice(0,1024));const u=Sf.test(l)?l.replace(Sf,"$1"):l;if(!u.match(/\S*Error: /)){for(const d of t){const m=d(u);if(m){o.push(m);break}}if(o.length>=Mx+s)break}}return WT(o.slice(s))}}function HT(e){return Array.isArray(e)?Vx(...e):e}function WT(e){if(!e.length)return[];const t=Array.from(e);return/sentryWrapped/.test(ul(t).function||"")&&t.pop(),t.reverse(),Tf.test(ul(t).function||"")&&(t.pop(),Tf.test(ul(t).function||"")&&t.pop()),t.slice(0,Mx).map(n=>({...n,filename:n.filename||ul(t).filename,function:n.function||wo}))}function ul(e){return e[e.length-1]||{}}const bu="<anonymous>";function Ps(e){try{return!e||typeof e!="function"?bu:e.name||bu}catch{return bu}}function Df(e){const t=e.exception;if(t){const n=[];try{return t.values.forEach(i=>{i.stacktrace.frames&&n.push(...i.stacktrace.frames)}),n}catch{return}}}function Ux(e){return"__v_isVNode"in e&&e.__v_isVNode?"[VueVNode]":"[VueViewModel]"}const jl={},_f={};function To(e,t){jl[e]=jl[e]||[],jl[e].push(t)}function Do(e,t){if(!_f[e]){_f[e]=!0;try{t()}catch(n){Ze&&qe.error(`Error while instrumenting ${e}`,n)}}}function Si(e,t){const n=e&&jl[e];if(n)for(const i of n)try{i(t)}catch(s){Ze&&qe.error(`Error while triggering instrumentation handler.
|
|
4
|
+
Type: ${e}
|
|
5
|
+
Name: ${Ps(i)}
|
|
6
|
+
Error:`,s)}}let xu=null;function $T(e){const t="error";To(t,e),Do(t,XT)}function XT(){xu=Ct.onerror,Ct.onerror=function(e,t,n,i,s){return Si("error",{column:i,error:s,line:n,msg:e,url:t}),xu?xu.apply(this,arguments):!1},Ct.onerror.__SENTRY_INSTRUMENTED__=!0}let wu=null;function KT(e){const t="unhandledrejection";To(t,e),Do(t,YT)}function YT(){wu=Ct.onunhandledrejection,Ct.onunhandledrejection=function(e){return Si("unhandledrejection",e),wu?wu.apply(this,arguments):!0},Ct.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}const Rx=Object.prototype.toString;function Am(e){switch(Rx.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object WebAssembly.Exception]":return!0;default:return As(e,Error)}}function Tr(e,t){return Rx.call(e)===`[object ${t}]`}function qx(e){return Tr(e,"ErrorEvent")}function If(e){return Tr(e,"DOMError")}function ZT(e){return Tr(e,"DOMException")}function Ji(e){return Tr(e,"String")}function Mm(e){return typeof e=="object"&&e!==null&&"__sentry_template_string__"in e&&"__sentry_template_values__"in e}function Wc(e){return e===null||Mm(e)||typeof e!="object"&&typeof e!="function"}function ja(e){return Tr(e,"Object")}function $c(e){return typeof Event<"u"&&As(e,Event)}function JT(e){return typeof Element<"u"&&As(e,Element)}function QT(e){return Tr(e,"RegExp")}function Wa(e){return!!(e!=null&&e.then&&typeof e.then=="function")}function eD(e){return ja(e)&&"nativeEvent"in e&&"preventDefault"in e&&"stopPropagation"in e}function As(e,t){try{return e instanceof t}catch{return!1}}function Lx(e){return!!(typeof e=="object"&&e!==null&&(e.__isVue||e._isVue||e.__v_isVNode))}function Ox(e){return typeof Request<"u"&&As(e,Request)}const Vm=Ct,tD=80;function zx(e,t={}){if(!e)return"<unknown>";try{let n=e;const i=5,s=[];let o=0,r=0;const a=" > ",l=a.length;let u;const d=Array.isArray(t)?t:t.keyAttrs,m=!Array.isArray(t)&&t.maxStringLength||tD;for(;n&&o++<i&&(u=nD(n,d),!(u==="html"||o>1&&r+s.length*l+u.length>=m));)s.push(u),r+=u.length,n=n.parentNode;return s.reverse().join(a)}catch{return"<unknown>"}}function nD(e,t){const n=e,i=[];if(!(n!=null&&n.tagName))return"";if(Vm.HTMLElement&&n instanceof HTMLElement&&n.dataset){if(n.dataset.sentryComponent)return n.dataset.sentryComponent;if(n.dataset.sentryElement)return n.dataset.sentryElement}i.push(n.tagName.toLowerCase());const s=t!=null&&t.length?t.filter(r=>n.getAttribute(r)).map(r=>[r,n.getAttribute(r)]):null;if(s!=null&&s.length)s.forEach(r=>{i.push(`[${r[0]}="${r[1]}"]`)});else{n.id&&i.push(`#${n.id}`);const r=n.className;if(r&&Ji(r)){const a=r.split(/\s+/);for(const l of a)i.push(`.${l}`)}}const o=["aria-label","type","name","title","alt"];for(const r of o){const a=n.getAttribute(r);a&&i.push(`[${r}="${a}"]`)}return i.join("")}function Um(){try{return Vm.document.location.href}catch{return""}}function iD(e){if(!Vm.HTMLElement)return null;let t=e;const n=5;for(let i=0;i<n;i++){if(!t)return null;if(t instanceof HTMLElement){if(t.dataset.sentryComponent)return t.dataset.sentryComponent;if(t.dataset.sentryElement)return t.dataset.sentryElement}t=t.parentNode}return null}function ri(e,t,n){if(!(t in e))return;const i=e[t];if(typeof i!="function")return;const s=n(i);typeof s=="function"&&Bx(s,i);try{e[t]=s}catch{Ze&&qe.log(`Failed to replace method "${t}" in object`,e)}}function yo(e,t,n){try{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0})}catch{Ze&&qe.log(`Failed to add non-enumerable property "${t}" to object`,e)}}function Bx(e,t){try{const n=t.prototype||{};e.prototype=t.prototype=n,yo(e,"__sentry_original__",t)}catch{}}function Rm(e){return e.__sentry_original__}function Fx(e){if(Am(e))return{message:e.message,name:e.name,stack:e.stack,...jf(e)};if($c(e)){const t={type:e.type,target:Cf(e.target),currentTarget:Cf(e.currentTarget),...jf(e)};return typeof CustomEvent<"u"&&As(e,CustomEvent)&&(t.detail=e.detail),t}else return e}function Cf(e){try{return JT(e)?zx(e):Object.prototype.toString.call(e)}catch{return"<unknown>"}}function jf(e){if(typeof e=="object"&&e!==null){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}else return{}}function sD(e){const t=Object.keys(Fx(e));return t.sort(),t[0]?t.join(", "):"[object has no keys]"}let Ro;function Xc(e){if(Ro!==void 0)return Ro?Ro(e):e();const t=Symbol.for("__SENTRY_SAFE_RANDOM_ID_WRAPPER__"),n=Ct;return t in n&&typeof n[t]=="function"?(Ro=n[t],Ro(e)):(Ro=null,e())}function ic(){return Xc(()=>Math.random())}function Kc(){return Xc(()=>Date.now())}function xd(e,t=0){return typeof e!="string"||t===0||e.length<=t?e:`${e.slice(0,t)}...`}function Pf(e,t){if(!Array.isArray(e))return"";const n=[];for(let i=0;i<e.length;i++){const s=e[i];try{Lx(s)?n.push(Ux(s)):n.push(String(s))}catch{n.push("[value cannot be serialized]")}}return n.join(t)}function Pl(e,t,n=!1){return Ji(e)?QT(t)?t.test(e):Ji(t)?n?e===t:e.includes(t):!1:!1}function Yc(e,t=[],n=!1){return t.some(i=>Pl(e,i,n))}function oD(){const e=Ct;return e.crypto||e.msCrypto}let yu;function rD(){return ic()*16}function xi(e=oD()){try{if(e!=null&&e.randomUUID)return Xc(()=>e.randomUUID()).replace(/-/g,"")}catch{}return yu||(yu="10000000100040008000"+1e11),yu.replace(/[018]/g,t=>(t^(rD()&15)>>t/4).toString(16))}function Gx(e){var t,n;return(n=(t=e.exception)==null?void 0:t.values)==null?void 0:n[0]}function no(e){const{message:t,event_id:n}=e;if(t)return t;const i=Gx(e);return i?i.type&&i.value?`${i.type}: ${i.value}`:i.type||i.value||n||"<unknown>":n||"<unknown>"}function wd(e,t,n){const i=e.exception=e.exception||{},s=i.values=i.values||[],o=s[0]=s[0]||{};o.value||(o.value=t||""),o.type||(o.type="Error")}function dr(e,t){const n=Gx(e);if(!n)return;const i={type:"generic",handled:!0},s=n.mechanism;if(n.mechanism={...i,...s,...t},t&&"data"in t){const o={...s==null?void 0:s.data,...t.data};n.mechanism.data=o}}function Af(e){if(aD(e))return!0;try{yo(e,"__sentry_captured__",!0)}catch{}return!1}function aD(e){try{return e.__sentry_captured__}catch{}}const Hx=1e3;function $a(){return Kc()/Hx}function lD(){const{performance:e}=Ct;if(!(e!=null&&e.now)||!e.timeOrigin)return $a;const t=e.timeOrigin;return()=>(t+Xc(()=>e.now()))/Hx}let Mf;function Qi(){return(Mf??(Mf=lD()))()}function cD(e){const t=Qi(),n={sid:xi(),init:!0,timestamp:t,started:t,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>dD(n)};return e&&mr(n,e),n}function mr(e,t={}){if(t.user&&(!e.ipAddress&&t.user.ip_address&&(e.ipAddress=t.user.ip_address),!e.did&&!t.did&&(e.did=t.user.id||t.user.email||t.user.username)),e.timestamp=t.timestamp||Qi(),t.abnormal_mechanism&&(e.abnormal_mechanism=t.abnormal_mechanism),t.ignoreDuration&&(e.ignoreDuration=t.ignoreDuration),t.sid&&(e.sid=t.sid.length===32?t.sid:xi()),t.init!==void 0&&(e.init=t.init),!e.did&&t.did&&(e.did=`${t.did}`),typeof t.started=="number"&&(e.started=t.started),e.ignoreDuration)e.duration=void 0;else if(typeof t.duration=="number")e.duration=t.duration;else{const n=e.timestamp-e.started;e.duration=n>=0?n:0}t.release&&(e.release=t.release),t.environment&&(e.environment=t.environment),!e.ipAddress&&t.ipAddress&&(e.ipAddress=t.ipAddress),!e.userAgent&&t.userAgent&&(e.userAgent=t.userAgent),typeof t.errors=="number"&&(e.errors=t.errors),t.status&&(e.status=t.status)}function uD(e,t){let n={};e.status==="ok"&&(n={status:"exited"}),mr(e,n)}function dD(e){return{sid:`${e.sid}`,init:e.init,started:new Date(e.started*1e3).toISOString(),timestamp:new Date(e.timestamp*1e3).toISOString(),status:e.status,errors:e.errors,did:typeof e.did=="number"||typeof e.did=="string"?`${e.did}`:void 0,duration:e.duration,abnormal_mechanism:e.abnormal_mechanism,attrs:{release:e.release,environment:e.environment,ip_address:e.ipAddress,user_agent:e.userAgent}}}function Xa(e,t,n=2){if(!t||typeof t!="object"||n<=0)return t;if(e&&Object.keys(t).length===0)return e;const i={...e};for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&(i[s]=Xa(i[s],t[s],n-1));return i}function Vf(){return xi()}function Wx(){return xi().substring(16)}const yd="_sentrySpan";function Uf(e,t){t?yo(e,yd,t):delete e[yd]}function Rf(e){return e[yd]}const mD=100;class os{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._attributes={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},this._propagationContext={traceId:Vf(),sampleRand:ic()}}clone(){const t=new os;return t._breadcrumbs=[...this._breadcrumbs],t._tags={...this._tags},t._attributes={...this._attributes},t._extra={...this._extra},t._contexts={...this._contexts},this._contexts.flags&&(t._contexts.flags={values:[...this._contexts.flags.values]}),t._user=this._user,t._level=this._level,t._session=this._session,t._transactionName=this._transactionName,t._fingerprint=this._fingerprint,t._eventProcessors=[...this._eventProcessors],t._attachments=[...this._attachments],t._sdkProcessingMetadata={...this._sdkProcessingMetadata},t._propagationContext={...this._propagationContext},t._client=this._client,t._lastEventId=this._lastEventId,Uf(t,Rf(this)),t}setClient(t){this._client=t}setLastEventId(t){this._lastEventId=t}getClient(){return this._client}lastEventId(){return this._lastEventId}addScopeListener(t){this._scopeListeners.push(t)}addEventProcessor(t){return this._eventProcessors.push(t),this}setUser(t){return this._user=t||{email:void 0,id:void 0,ip_address:void 0,username:void 0},this._session&&mr(this._session,{user:t}),this._notifyScopeListeners(),this}getUser(){return this._user}setTags(t){return this._tags={...this._tags,...t},this._notifyScopeListeners(),this}setTag(t,n){return this.setTags({[t]:n})}setAttributes(t){return this._attributes={...this._attributes,...t},this._notifyScopeListeners(),this}setAttribute(t,n){return this.setAttributes({[t]:n})}removeAttribute(t){return t in this._attributes&&(delete this._attributes[t],this._notifyScopeListeners()),this}setExtras(t){return this._extra={...this._extra,...t},this._notifyScopeListeners(),this}setExtra(t,n){return this._extra={...this._extra,[t]:n},this._notifyScopeListeners(),this}setFingerprint(t){return this._fingerprint=t,this._notifyScopeListeners(),this}setLevel(t){return this._level=t,this._notifyScopeListeners(),this}setTransactionName(t){return this._transactionName=t,this._notifyScopeListeners(),this}setContext(t,n){return n===null?delete this._contexts[t]:this._contexts[t]=n,this._notifyScopeListeners(),this}setSession(t){return t?this._session=t:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(t){if(!t)return this;const n=typeof t=="function"?t(this):t,i=n instanceof os?n.getScopeData():ja(n)?t:void 0,{tags:s,attributes:o,extra:r,user:a,contexts:l,level:u,fingerprint:d=[],propagationContext:m}=i||{};return this._tags={...this._tags,...s},this._attributes={...this._attributes,...o},this._extra={...this._extra,...r},this._contexts={...this._contexts,...l},a&&Object.keys(a).length&&(this._user=a),u&&(this._level=u),d.length&&(this._fingerprint=d),m&&(this._propagationContext=m),this}clear(){return this._breadcrumbs=[],this._tags={},this._attributes={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._session=void 0,Uf(this,void 0),this._attachments=[],this.setPropagationContext({traceId:Vf(),sampleRand:ic()}),this._notifyScopeListeners(),this}addBreadcrumb(t,n){var o;const i=typeof n=="number"?n:mD;if(i<=0)return this;const s={timestamp:$a(),...t,message:t.message?xd(t.message,2048):t.message};return this._breadcrumbs.push(s),this._breadcrumbs.length>i&&(this._breadcrumbs=this._breadcrumbs.slice(-i),(o=this._client)==null||o.recordDroppedEvent("buffer_overflow","log_item")),this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(t){return this._attachments.push(t),this}clearAttachments(){return this._attachments=[],this}getScopeData(){return{breadcrumbs:this._breadcrumbs,attachments:this._attachments,contexts:this._contexts,tags:this._tags,attributes:this._attributes,extra:this._extra,user:this._user,level:this._level,fingerprint:this._fingerprint||[],eventProcessors:this._eventProcessors,propagationContext:this._propagationContext,sdkProcessingMetadata:this._sdkProcessingMetadata,transactionName:this._transactionName,span:Rf(this)}}setSDKProcessingMetadata(t){return this._sdkProcessingMetadata=Xa(this._sdkProcessingMetadata,t,2),this}setPropagationContext(t){return this._propagationContext=t,this}getPropagationContext(){return this._propagationContext}captureException(t,n){const i=(n==null?void 0:n.event_id)||xi();if(!this._client)return Ze&&qe.warn("No client configured on scope - will not capture exception!"),i;const s=new Error("Sentry syntheticException");return this._client.captureException(t,{originalException:t,syntheticException:s,...n,event_id:i},this),i}captureMessage(t,n,i){const s=(i==null?void 0:i.event_id)||xi();if(!this._client)return Ze&&qe.warn("No client configured on scope - will not capture message!"),s;const o=(i==null?void 0:i.syntheticException)??new Error(t);return this._client.captureMessage(t,n,{originalException:t,syntheticException:o,...i,event_id:s},this),s}captureEvent(t,n){const i=(n==null?void 0:n.event_id)||xi();return this._client?(this._client.captureEvent(t,{...n,event_id:i},this),i):(Ze&&qe.warn("No client configured on scope - will not capture event!"),i)}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(t=>{t(this)}),this._notifyingListeners=!1)}}function pD(){return Er("defaultCurrentScope",()=>new os)}function fD(){return Er("defaultIsolationScope",()=>new os)}class hD{constructor(t,n){let i;t?i=t:i=new os;let s;n?s=n:s=new os,this._stack=[{scope:i}],this._isolationScope=s}withScope(t){const n=this._pushScope();let i;try{i=t(n)}catch(s){throw this._popScope(),s}return Wa(i)?i.then(s=>(this._popScope(),s),s=>{throw this._popScope(),s}):(this._popScope(),i)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStackTop(){return this._stack[this._stack.length-1]}_pushScope(){const t=this.getScope().clone();return this._stack.push({client:this.getClient(),scope:t}),t}_popScope(){return this._stack.length<=1?!1:!!this._stack.pop()}}function pr(){const e=Gc(),t=Hc(e);return t.stack=t.stack||new hD(pD(),fD())}function gD(e){return pr().withScope(e)}function bD(e,t){const n=pr();return n.withScope(()=>(n.getStackTop().scope=e,t(e)))}function qf(e){return pr().withScope(()=>e(pr().getIsolationScope()))}function xD(){return{withIsolationScope:qf,withScope:gD,withSetScope:bD,withSetIsolationScope:(e,t)=>qf(t),getCurrentScope:()=>pr().getScope(),getIsolationScope:()=>pr().getIsolationScope()}}function qm(e){const t=Hc(e);return t.acs?t.acs:xD()}function qs(){const e=Gc();return qm(e).getCurrentScope()}function Dr(){const e=Gc();return qm(e).getIsolationScope()}function wD(){return Er("globalScope",()=>new os)}function yD(...e){const t=Gc(),n=qm(t);if(e.length===2){const[i,s]=e;return i?n.withSetScope(i,s):n.withScope(s)}return n.withScope(e[0])}function Xn(){return qs().getClient()}function ND(e){const t=e.getPropagationContext(),{traceId:n,parentSpanId:i,propagationSpanId:s}=t,o={trace_id:n,span_id:s||Wx()};return i&&(o.parent_span_id=i),o}const vD="sentry.source",kD="sentry.sample_rate",ED="sentry.previous_trace_sample_rate",SD="sentry.op",TD="sentry.origin",$x="sentry.profile_id",Xx="sentry.exclusive_time",DD=0,_D=1,ID="_sentryScope",CD="_sentryIsolationScope";function jD(e){if(e){if(typeof e=="object"&&"deref"in e&&typeof e.deref=="function")try{return e.deref()}catch{return}return e}}function Kx(e){const t=e;return{scope:t[ID],isolationScope:jD(t[CD])}}const PD="sentry-",AD=/^sentry-/;function MD(e){const t=VD(e);if(!t)return;const n=Object.entries(t).reduce((i,[s,o])=>{if(s.match(AD)){const r=s.slice(PD.length);i[r]=o}return i},{});if(Object.keys(n).length>0)return n}function VD(e){if(!(!e||!Ji(e)&&!Array.isArray(e)))return Array.isArray(e)?e.reduce((t,n)=>{const i=Lf(n);return Object.entries(i).forEach(([s,o])=>{t[s]=o}),t},{}):Lf(e)}function Lf(e){return e.split(",").map(t=>{const n=t.indexOf("=");if(n===-1)return[];const i=t.slice(0,n),s=t.slice(n+1);return[i,s].map(o=>{try{return decodeURIComponent(o.trim())}catch{return}})}).reduce((t,[n,i])=>(n&&i&&(t[n]=i),t),{})}const UD=/^o(\d+)\./,RD=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)((?:\[[:.%\w]+\]|[\w.-]+))(?::(\d+))?\/(.+)/;function qD(e){return e==="http"||e==="https"}function Ka(e,t=!1){const{host:n,path:i,pass:s,port:o,projectId:r,protocol:a,publicKey:l}=e;return`${a}://${l}${t&&s?`:${s}`:""}@${n}${o?`:${o}`:""}/${i&&`${i}/`}${r}`}function LD(e){const t=RD.exec(e);if(!t){Sr(()=>{console.error(`Invalid Sentry Dsn: ${e}`)});return}const[n,i,s="",o="",r="",a=""]=t.slice(1);let l="",u=a;const d=u.split("/");if(d.length>1&&(l=d.slice(0,-1).join("/"),u=d.pop()),u){const m=u.match(/^\d+/);m&&(u=m[0])}return Yx({host:o,pass:s,path:l,projectId:u,port:r,protocol:n,publicKey:i})}function Yx(e){return{protocol:e.protocol,publicKey:e.publicKey||"",pass:e.pass||"",host:e.host,port:e.port||"",path:e.path||"",projectId:e.projectId}}function OD(e){if(!Ze)return!0;const{port:t,projectId:n,protocol:i}=e;return["protocol","publicKey","host","projectId"].find(r=>e[r]?!1:(qe.error(`Invalid Sentry Dsn: ${r} missing`),!0))?!1:n.match(/^\d+$/)?qD(i)?t&&isNaN(parseInt(t,10))?(qe.error(`Invalid Sentry Dsn: Invalid port ${t}`),!1):!0:(qe.error(`Invalid Sentry Dsn: Invalid protocol ${i}`),!1):(qe.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1)}function zD(e){const t=e.match(UD);return t==null?void 0:t[1]}function BD(e){const t=e.getOptions(),{host:n}=e.getDsn()||{};let i;return t.orgId?i=String(t.orgId):n&&(i=zD(n)),i}function FD(e){const t=typeof e=="string"?LD(e):Yx(e);if(!(!t||!OD(t)))return t}function GD(e){if(typeof e=="boolean")return Number(e);const t=typeof e=="string"?parseFloat(e):e;if(!(typeof t!="number"||isNaN(t)||t<0||t>1))return t}const Zx=1;let Of=!1;function HD(e){const{spanId:t,traceId:n,isRemote:i}=e.spanContext(),s=i?t:Lm(e).parent_span_id,o=Kx(e).scope,r=i?(o==null?void 0:o.getPropagationContext().propagationSpanId)||Wx():t;return{parent_span_id:s,span_id:r,trace_id:n}}function WD(e){if(e&&e.length>0)return e.map(({context:{spanId:t,traceId:n,traceFlags:i,...s},attributes:o})=>({span_id:t,trace_id:n,sampled:i===Zx,attributes:o,...s}))}function zf(e){return typeof e=="number"?Bf(e):Array.isArray(e)?e[0]+e[1]/1e9:e instanceof Date?Bf(e.getTime()):Qi()}function Bf(e){return e>9999999999?e/1e3:e}function Lm(e){var i;if(XD(e))return e.getSpanJSON();const{spanId:t,traceId:n}=e.spanContext();if($D(e)){const{attributes:s,startTime:o,name:r,endTime:a,status:l,links:u}=e,d="parentSpanId"in e?e.parentSpanId:"parentSpanContext"in e?(i=e.parentSpanContext)==null?void 0:i.spanId:void 0;return{span_id:t,trace_id:n,data:s,description:r,parent_span_id:d,start_timestamp:zf(o),timestamp:zf(a)||void 0,status:YD(l),op:s[SD],origin:s[TD],links:WD(u)}}return{span_id:t,trace_id:n,start_timestamp:0,data:{}}}function $D(e){const t=e;return!!t.attributes&&!!t.startTime&&!!t.name&&!!t.endTime&&!!t.status}function XD(e){return typeof e.getSpanJSON=="function"}function KD(e){const{traceFlags:t}=e.spanContext();return t===Zx}function YD(e){if(!(!e||e.code===DD))return e.code===_D?"ok":e.message||"internal_error"}const ZD="_sentryRootSpan";function Jx(e){return e[ZD]||e}function Ff(){Of||(Sr(()=>{console.warn("[Sentry] Returning null from `beforeSendSpan` is disallowed. To drop certain spans, configure the respective integrations directly or use `ignoreSpans`.")}),Of=!0)}function JD(e){var n;if(typeof __SENTRY_TRACING__=="boolean"&&!__SENTRY_TRACING__)return!1;const t=(n=Xn())==null?void 0:n.getOptions();return!!t&&(t.tracesSampleRate!=null||!!t.tracesSampler)}function Gf(e){qe.log(`Ignoring span ${e.op} - ${e.description} because it matches \`ignoreSpans\`.`)}function Hf(e,t){if(!(t!=null&&t.length)||!e.description)return!1;for(const n of t){if(e_(n)){if(Pl(e.description,n))return Ze&&Gf(e),!0;continue}if(!n.name&&!n.op)continue;const i=n.name?Pl(e.description,n.name):!0,s=n.op?e.op&&Pl(e.op,n.op):!0;if(i&&s)return Ze&&Gf(e),!0}return!1}function QD(e,t){const n=t.parent_span_id,i=t.span_id;if(n)for(const s of e)s.parent_span_id===i&&(s.parent_span_id=n)}function e_(e){return typeof e=="string"||e instanceof RegExp}const Om="production",t_="_frozenDsc";function Qx(e,t){const n=t.getOptions(),{publicKey:i}=t.getDsn()||{},s={environment:n.environment||Om,release:n.release,public_key:i,trace_id:e,org_id:BD(t)};return t.emit("createDsc",s),s}function n_(e,t){const n=t.getPropagationContext();return n.dsc||Qx(n.traceId,e)}function i_(e){var g;const t=Xn();if(!t)return{};const n=Jx(e),i=Lm(n),s=i.data,o=n.spanContext().traceState,r=(o==null?void 0:o.get("sentry.sample_rate"))??s[kD]??s[ED];function a(b){return(typeof r=="number"||typeof r=="string")&&(b.sample_rate=`${r}`),b}const l=n[t_];if(l)return a(l);const u=o==null?void 0:o.get("sentry.dsc"),d=u&&MD(u);if(d)return a(d);const m=Qx(e.spanContext().traceId,t),f=s[vD],h=i.description;return f!=="url"&&h&&(m.transaction=h),JD()&&(m.sampled=String(KD(n)),m.sample_rand=(o==null?void 0:o.get("sentry.sample_rand"))??((g=Kx(n).scope)==null?void 0:g.getPropagationContext().sampleRand.toString())),a(m),t.emit("createDsc",m,n),m}function Wi(e,t=100,n=1/0){try{return Nd("",e,t,n)}catch(i){return{ERROR:`**non-serializable** (${i})`}}}function ew(e,t=3,n=100*1024){const i=Wi(e,t);return a_(i)>n?ew(e,t-1,n):i}function Nd(e,t,n=1/0,i=1/0,s=l_()){const[o,r]=s;if(t==null||["boolean","string"].includes(typeof t)||typeof t=="number"&&Number.isFinite(t))return t;const a=s_(e,t);if(!a.startsWith("[object "))return a;if(t.__sentry_skip_normalization__)return t;const l=typeof t.__sentry_override_normalization_depth__=="number"?t.__sentry_override_normalization_depth__:n;if(l===0)return a.replace("object ","");if(o(t))return"[Circular ~]";const u=t;if(u&&typeof u.toJSON=="function")try{const h=u.toJSON();return Nd("",h,l-1,i,s)}catch{}const d=Array.isArray(t)?[]:{};let m=0;const f=Fx(t);for(const h in f){if(!Object.prototype.hasOwnProperty.call(f,h))continue;if(m>=i){d[h]="[MaxProperties ~]";break}const g=f[h];d[h]=Nd(h,g,l-1,i,s),m++}return r(t),d}function s_(e,t){try{if(e==="domain"&&t&&typeof t=="object"&&t._events)return"[Domain]";if(e==="domainEmitter")return"[DomainEmitter]";if(typeof global<"u"&&t===global)return"[Global]";if(typeof window<"u"&&t===window)return"[Window]";if(typeof document<"u"&&t===document)return"[Document]";if(Lx(t))return Ux(t);if(eD(t))return"[SyntheticEvent]";if(typeof t=="number"&&!Number.isFinite(t))return`[${t}]`;if(typeof t=="function")return`[Function: ${Ps(t)}]`;if(typeof t=="symbol")return`[${String(t)}]`;if(typeof t=="bigint")return`[BigInt: ${String(t)}]`;const n=o_(t);return/^HTML(\w*)Element$/.test(n)?`[HTMLElement: ${n}]`:`[object ${n}]`}catch(n){return`**non-serializable** (${n})`}}function o_(e){const t=Object.getPrototypeOf(e);return t!=null&&t.constructor?t.constructor.name:"null prototype"}function r_(e){return~-encodeURI(e).split(/%..|./).length}function a_(e){return r_(JSON.stringify(e))}function l_(){const e=new WeakSet;function t(i){return e.has(i)?!0:(e.add(i),!1)}function n(i){e.delete(i)}return[t,n]}function _r(e,t=[]){return[e,t]}function c_(e,t){const[n,i]=e;return[n,[...i,t]]}function Wf(e,t){const n=e[1];for(const i of n){const s=i[0].type;if(t(i,s))return!0}return!1}function vd(e){const t=Hc(Ct);return t.encodePolyfill?t.encodePolyfill(e):new TextEncoder().encode(e)}function tw(e){const[t,n]=e;let i=JSON.stringify(t);function s(o){typeof i=="string"?i=typeof o=="string"?i+o:[vd(i),o]:i.push(typeof o=="string"?vd(o):o)}for(const o of n){const[r,a]=o;if(s(`
|
|
7
|
+
${JSON.stringify(r)}
|
|
8
|
+
`),typeof a=="string"||a instanceof Uint8Array)s(a);else{let l;try{l=JSON.stringify(a)}catch{l=JSON.stringify(Wi(a))}s(l)}}return typeof i=="string"?i:u_(i)}function u_(e){const t=e.reduce((s,o)=>s+o.length,0),n=new Uint8Array(t);let i=0;for(const s of e)n.set(s,i),i+=s.length;return n}function d_(e){const t=typeof e.data=="string"?vd(e.data):e.data;return[{type:"attachment",length:t.length,filename:e.filename,content_type:e.contentType,attachment_type:e.attachmentType},t]}const m_={session:"session",sessions:"session",attachment:"attachment",transaction:"transaction",event:"error",client_report:"internal",user_report:"default",profile:"profile",profile_chunk:"profile",replay_event:"replay",replay_recording:"replay",check_in:"monitor",feedback:"feedback",span:"span",raw_security:"security",log:"log_item",metric:"metric",trace_metric:"metric"};function $f(e){return m_[e]}function nw(e){if(!(e!=null&&e.sdk))return;const{name:t,version:n}=e.sdk;return{name:t,version:n}}function p_(e,t,n,i){var o;const s=(o=e.sdkProcessingMetadata)==null?void 0:o.dynamicSamplingContext;return{event_id:e.event_id,sent_at:new Date().toISOString(),...t&&{sdk:t},...!!n&&i&&{dsn:Ka(i)},...s&&{trace:s}}}function f_(e,t){var i,s,o,r;if(!t)return e;const n=e.sdk||{};return e.sdk={...n,name:n.name||t.name,version:n.version||t.version,integrations:[...((i=e.sdk)==null?void 0:i.integrations)||[],...t.integrations||[]],packages:[...((s=e.sdk)==null?void 0:s.packages)||[],...t.packages||[]],settings:(o=e.sdk)!=null&&o.settings||t.settings?{...(r=e.sdk)==null?void 0:r.settings,...t.settings}:void 0},e}function h_(e,t,n,i){const s=nw(n),o={sent_at:new Date().toISOString(),...s&&{sdk:s},...!!i&&t&&{dsn:Ka(t)}},r="aggregates"in e?[{type:"sessions"},e]:[{type:"session"},e.toJSON()];return _r(o,[r])}function g_(e,t,n,i){const s=nw(n),o=e.type&&e.type!=="replay_event"?e.type:"event";f_(e,n==null?void 0:n.sdk);const r=p_(e,s,i,t);return delete e.sdkProcessingMetadata,_r(r,[[{type:o},e]])}const Nu=0,Xf=1,Kf=2;function Zc(e){return new Pa(t=>{t(e)})}function zm(e){return new Pa((t,n)=>{n(e)})}class Pa{constructor(t){this._state=Nu,this._handlers=[],this._runExecutor(t)}then(t,n){return new Pa((i,s)=>{this._handlers.push([!1,o=>{if(!t)i(o);else try{i(t(o))}catch(r){s(r)}},o=>{if(!n)s(o);else try{i(n(o))}catch(r){s(r)}}]),this._executeHandlers()})}catch(t){return this.then(n=>n,t)}finally(t){return new Pa((n,i)=>{let s,o;return this.then(r=>{o=!1,s=r,t&&t()},r=>{o=!0,s=r,t&&t()}).then(()=>{if(o){i(s);return}n(s)})})}_executeHandlers(){if(this._state===Nu)return;const t=this._handlers.slice();this._handlers=[],t.forEach(n=>{n[0]||(this._state===Xf&&n[1](this._value),this._state===Kf&&n[2](this._value),n[0]=!0)})}_runExecutor(t){const n=(o,r)=>{if(this._state===Nu){if(Wa(r)){r.then(i,s);return}this._state=o,this._value=r,this._executeHandlers()}},i=o=>{n(Xf,o)},s=o=>{n(Kf,o)};try{t(i,s)}catch(o){s(o)}}}function b_(e,t,n,i=0){try{const s=kd(t,n,e,i);return Wa(s)?s:Zc(s)}catch(s){return zm(s)}}function kd(e,t,n,i){const s=n[i];if(!e||!s)return e;const o=s({...e},t);return Ze&&o===null&&qe.log(`Event processor "${s.id||"?"}" dropped event`),Wa(o)?o.then(r=>kd(r,t,n,i+1)):kd(o,t,n,i+1)}let Gi,Yf,Zf,bs;function x_(e){const t=Ct._sentryDebugIds,n=Ct._debugIds;if(!t&&!n)return{};const i=t?Object.keys(t):[],s=n?Object.keys(n):[];if(bs&&i.length===Yf&&s.length===Zf)return bs;Yf=i.length,Zf=s.length,bs={},Gi||(Gi={});const o=(r,a)=>{for(const l of r){const u=a[l],d=Gi==null?void 0:Gi[l];if(d&&bs&&u)bs[d[0]]=u,Gi&&(Gi[l]=[d[0],u]);else if(u){const m=e(l);for(let f=m.length-1;f>=0;f--){const h=m[f],g=h==null?void 0:h.filename;if(g&&bs&&Gi){bs[g]=u,Gi[l]=[g,u];break}}}}};return t&&o(i,t),n&&o(s,n),bs}function w_(e,t){const{fingerprint:n,span:i,breadcrumbs:s,sdkProcessingMetadata:o}=t;N_(e,t),i&&E_(e,i),S_(e,n),v_(e,s),k_(e,o)}function Jf(e,t){const{extra:n,tags:i,attributes:s,user:o,contexts:r,level:a,sdkProcessingMetadata:l,breadcrumbs:u,fingerprint:d,eventProcessors:m,attachments:f,propagationContext:h,transactionName:g,span:b}=t;zr(e,"extra",n),zr(e,"tags",i),zr(e,"attributes",s),zr(e,"user",o),zr(e,"contexts",r),e.sdkProcessingMetadata=Xa(e.sdkProcessingMetadata,l,2),a&&(e.level=a),g&&(e.transactionName=g),b&&(e.span=b),u.length&&(e.breadcrumbs=[...e.breadcrumbs,...u]),d.length&&(e.fingerprint=[...e.fingerprint,...d]),m.length&&(e.eventProcessors=[...e.eventProcessors,...m]),f.length&&(e.attachments=[...e.attachments,...f]),e.propagationContext={...e.propagationContext,...h}}function zr(e,t,n){e[t]=Xa(e[t],n,1)}function y_(e,t){const n=wD().getScopeData();return e&&Jf(n,e.getScopeData()),t&&Jf(n,t.getScopeData()),n}function N_(e,t){const{extra:n,tags:i,user:s,contexts:o,level:r,transactionName:a}=t;Object.keys(n).length&&(e.extra={...n,...e.extra}),Object.keys(i).length&&(e.tags={...i,...e.tags}),Object.keys(s).length&&(e.user={...s,...e.user}),Object.keys(o).length&&(e.contexts={...o,...e.contexts}),r&&(e.level=r),a&&e.type!=="transaction"&&(e.transaction=a)}function v_(e,t){const n=[...e.breadcrumbs||[],...t];e.breadcrumbs=n.length?n:void 0}function k_(e,t){e.sdkProcessingMetadata={...e.sdkProcessingMetadata,...t}}function E_(e,t){e.contexts={trace:HD(t),...e.contexts},e.sdkProcessingMetadata={dynamicSamplingContext:i_(t),...e.sdkProcessingMetadata};const n=Jx(t),i=Lm(n).description;i&&!e.transaction&&e.type==="transaction"&&(e.transaction=i)}function S_(e,t){e.fingerprint=e.fingerprint?Array.isArray(e.fingerprint)?e.fingerprint:[e.fingerprint]:[],t&&(e.fingerprint=e.fingerprint.concat(t)),e.fingerprint.length||delete e.fingerprint}function T_(e,t,n,i,s,o){const{normalizeDepth:r=3,normalizeMaxBreadth:a=1e3}=e,l={...t,event_id:t.event_id||n.event_id||xi(),timestamp:t.timestamp||$a()},u=n.integrations||e.integrations.map(x=>x.name);D_(l,e),C_(l,u),s&&s.emit("applyFrameMetadata",t),t.type===void 0&&__(l,e.stackParser);const d=P_(i,n.captureContext);n.mechanism&&dr(l,n.mechanism);const m=s?s.getEventProcessors():[],f=y_(o,d),h=[...n.attachments||[],...f.attachments];h.length&&(n.attachments=h),w_(l,f);const g=[...m,...f.eventProcessors];return b_(g,l,n).then(x=>(x&&I_(x),typeof r=="number"&&r>0?j_(x,r,a):x))}function D_(e,t){var a,l;const{environment:n,release:i,dist:s,maxValueLength:o}=t;e.environment=e.environment||n||Om,!e.release&&i&&(e.release=i),!e.dist&&s&&(e.dist=s);const r=e.request;r!=null&&r.url&&o&&(r.url=xd(r.url,o)),o&&((l=(a=e.exception)==null?void 0:a.values)==null||l.forEach(u=>{u.value&&(u.value=xd(u.value,o))}))}function __(e,t){var i,s;const n=x_(t);(s=(i=e.exception)==null?void 0:i.values)==null||s.forEach(o=>{var r,a;(a=(r=o.stacktrace)==null?void 0:r.frames)==null||a.forEach(l=>{l.filename&&(l.debug_id=n[l.filename])})})}function I_(e){var i,s;const t={};if((s=(i=e.exception)==null?void 0:i.values)==null||s.forEach(o=>{var r,a;(a=(r=o.stacktrace)==null?void 0:r.frames)==null||a.forEach(l=>{l.debug_id&&(l.abs_path?t[l.abs_path]=l.debug_id:l.filename&&(t[l.filename]=l.debug_id),delete l.debug_id)})}),Object.keys(t).length===0)return;e.debug_meta=e.debug_meta||{},e.debug_meta.images=e.debug_meta.images||[];const n=e.debug_meta.images;Object.entries(t).forEach(([o,r])=>{n.push({type:"sourcemap",code_file:o,debug_id:r})})}function C_(e,t){t.length>0&&(e.sdk=e.sdk||{},e.sdk.integrations=[...e.sdk.integrations||[],...t])}function j_(e,t,n){var s,o;if(!e)return null;const i={...e,...e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map(r=>({...r,...r.data&&{data:Wi(r.data,t,n)}}))},...e.user&&{user:Wi(e.user,t,n)},...e.contexts&&{contexts:Wi(e.contexts,t,n)},...e.extra&&{extra:Wi(e.extra,t,n)}};return(s=e.contexts)!=null&&s.trace&&i.contexts&&(i.contexts.trace=e.contexts.trace,e.contexts.trace.data&&(i.contexts.trace.data=Wi(e.contexts.trace.data,t,n))),e.spans&&(i.spans=e.spans.map(r=>({...r,...r.data&&{data:Wi(r.data,t,n)}}))),(o=e.contexts)!=null&&o.flags&&i.contexts&&(i.contexts.flags=Wi(e.contexts.flags,3,n)),i}function P_(e,t){if(!t)return e;const n=e?e.clone():new os;return n.update(t),n}function A_(e,t){return qs().captureException(e,void 0)}function iw(e,t){return qs().captureEvent(e,t)}function M_(e,t){Dr().setContext(e,t)}function Qf(e){const t=Dr(),n=qs(),{userAgent:i}=Ct.navigator||{},s=cD({user:n.getUser()||t.getUser(),...i&&{userAgent:i},...e}),o=t.getSession();return(o==null?void 0:o.status)==="ok"&&mr(o,{status:"exited"}),sw(),t.setSession(s),s}function sw(){const e=Dr(),n=qs().getSession()||e.getSession();n&&uD(n),ow(),e.setSession()}function ow(){const e=Dr(),t=Xn(),n=e.getSession();n&&t&&t.captureSession(n)}function eh(e=!1){if(e){sw();return}ow()}const V_="7";function U_(e){const t=e.protocol?`${e.protocol}:`:"",n=e.port?`:${e.port}`:"";return`${t}//${e.host}${n}${e.path?`/${e.path}`:""}/api/`}function R_(e){return`${U_(e)}${e.projectId}/envelope/`}function q_(e,t){const n={sentry_version:V_};return e.publicKey&&(n.sentry_key=e.publicKey),t&&(n.sentry_client=`${t.name}/${t.version}`),new URLSearchParams(n).toString()}function L_(e,t,n){return t||`${R_(e)}?${q_(e,n)}`}const th=[];function O_(e){const t={};return e.forEach(n=>{const{name:i}=n,s=t[i];s&&!s.isDefaultInstance&&n.isDefaultInstance||(t[i]=n)}),Object.values(t)}function z_(e){const t=e.defaultIntegrations||[],n=e.integrations;t.forEach(s=>{s.isDefaultInstance=!0});let i;if(Array.isArray(n))i=[...t,...n];else if(typeof n=="function"){const s=n(t);i=Array.isArray(s)?s:[s]}else i=t;return O_(i)}function B_(e,t){const n={};return t.forEach(i=>{i&&rw(e,i,n)}),n}function nh(e,t){for(const n of t)n!=null&&n.afterAllSetup&&n.afterAllSetup(e)}function rw(e,t,n){if(n[t.name]){Ze&&qe.log(`Integration skipped because it was already installed: ${t.name}`);return}if(n[t.name]=t,!th.includes(t.name)&&typeof t.setupOnce=="function"&&(t.setupOnce(),th.push(t.name)),t.setup&&typeof t.setup=="function"&&t.setup(e),typeof t.preprocessEvent=="function"){const i=t.preprocessEvent.bind(t);e.on("preprocessEvent",(s,o)=>i(s,o,e))}if(typeof t.processEvent=="function"){const i=t.processEvent.bind(t),s=Object.assign((o,r)=>i(o,r,e),{id:t.name});e.addEventProcessor(s)}Ze&&qe.log(`Integration installed: ${t.name}`)}function F_(e){return[{type:"log",item_count:e.length,content_type:"application/vnd.sentry.items.log+json"},{items:e}]}function G_(e,t,n,i){const s={};return t!=null&&t.sdk&&(s.sdk={name:t.sdk.name,version:t.sdk.version}),n&&i&&(s.dsn=Ka(i)),_r(s,[F_(e)])}function aw(e,t){const n=t??H_(e)??[];if(n.length===0)return;const i=e.getOptions(),s=G_(n,i._metadata,i.tunnel,e.getDsn());lw().set(e,[]),e.emit("flushLogs"),e.sendEnvelope(s)}function H_(e){return lw().get(e)}function lw(){return Er("clientToLogBufferMap",()=>new WeakMap)}function W_(e){return[{type:"trace_metric",item_count:e.length,content_type:"application/vnd.sentry.items.trace-metric+json"},{items:e}]}function $_(e,t,n,i){const s={};return t!=null&&t.sdk&&(s.sdk={name:t.sdk.name,version:t.sdk.version}),n&&i&&(s.dsn=Ka(i)),_r(s,[W_(e)])}function cw(e,t){const n=t??X_(e)??[];if(n.length===0)return;const i=e.getOptions(),s=$_(n,i._metadata,i.tunnel,e.getDsn());uw().set(e,[]),e.emit("flushMetrics"),e.sendEnvelope(s)}function X_(e){return uw().get(e)}function uw(){return Er("clientToMetricBufferMap",()=>new WeakMap)}const Bm=Symbol.for("SentryBufferFullError");function Fm(e=100){const t=new Set;function n(){return t.size<e}function i(r){t.delete(r)}function s(r){if(!n())return zm(Bm);const a=r();return t.add(a),a.then(()=>i(a),()=>i(a)),a}function o(r){if(!t.size)return Zc(!0);const a=Promise.allSettled(Array.from(t)).then(()=>!0);if(!r)return a;const l=[a,new Promise(u=>setTimeout(()=>u(!1),r))];return Promise.race(l)}return{get $(){return Array.from(t)},add:s,drain:o}}const K_=60*1e3;function Y_(e,t=Kc()){const n=parseInt(`${e}`,10);if(!isNaN(n))return n*1e3;const i=Date.parse(`${e}`);return isNaN(i)?K_:i-t}function Z_(e,t){return e[t]||e.all||0}function J_(e,t,n=Kc()){return Z_(e,t)>n}function Q_(e,{statusCode:t,headers:n},i=Kc()){const s={...e},o=n==null?void 0:n["x-sentry-rate-limits"],r=n==null?void 0:n["retry-after"];if(o)for(const a of o.trim().split(",")){const[l,u,,,d]=a.split(":",5),m=parseInt(l,10),f=(isNaN(m)?60:m)*1e3;if(!u)s.all=i+f;else for(const h of u.split(";"))h==="metric_bucket"?(!d||d.split(";").includes("custom"))&&(s[h]=i+f):s[h]=i+f}else r?s.all=i+Y_(r,i):t===429&&(s.all=i+60*1e3);return s}const dw=64;function eI(e,t,n=Fm(e.bufferSize||dw)){let i={};const s=r=>n.drain(r);function o(r){const a=[];if(Wf(r,(m,f)=>{const h=$f(f);J_(i,h)?e.recordDroppedEvent("ratelimit_backoff",h):a.push(m)}),a.length===0)return Promise.resolve({});const l=_r(r[0],a),u=m=>{Wf(l,(f,h)=>{e.recordDroppedEvent(m,$f(h))})},d=()=>t({body:tw(l)}).then(m=>(m.statusCode!==void 0&&(m.statusCode<200||m.statusCode>=300)&&Ze&&qe.warn(`Sentry responded with status code ${m.statusCode} to sent event.`),i=Q_(i,m),m),m=>{throw u("network_error"),Ze&&qe.error("Encountered error running transport request:",m),m});return n.add(d).then(m=>m,m=>{if(m===Bm)return Ze&&qe.error("Skipped sending event because buffer is full."),u("queue_overflow"),Promise.resolve({});throw m})}return{send:o,flush:s}}function tI(e,t,n){const i=[{type:"client_report"},{timestamp:$a(),discarded_events:e}];return _r(t?{dsn:t}:{},[i])}function mw(e){const t=[];e.message&&t.push(e.message);try{const n=e.exception.values[e.exception.values.length-1];n!=null&&n.value&&(t.push(n.value),n.type&&t.push(`${n.type}: ${n.value}`))}catch{}return t}function nI(e){var l;const{trace_id:t,parent_span_id:n,span_id:i,status:s,origin:o,data:r,op:a}=((l=e.contexts)==null?void 0:l.trace)??{};return{data:r??{},description:e.transaction,op:a,parent_span_id:n,span_id:i??"",start_timestamp:e.start_timestamp??0,status:s,timestamp:e.timestamp,trace_id:t??"",origin:o,profile_id:r==null?void 0:r[$x],exclusive_time:r==null?void 0:r[Xx],measurements:e.measurements,is_segment:!0}}function iI(e){return{type:"transaction",timestamp:e.timestamp,start_timestamp:e.start_timestamp,transaction:e.description,contexts:{trace:{trace_id:e.trace_id,span_id:e.span_id,parent_span_id:e.parent_span_id,op:e.op,status:e.status,origin:e.origin,data:{...e.data,...e.profile_id&&{[$x]:e.profile_id},...e.exclusive_time&&{[Xx]:e.exclusive_time}}}},measurements:e.measurements}}const ih="Not capturing exception because it's already been captured.",sh="Discarded session because of missing or non-string release",pw=Symbol.for("SentryInternalError"),fw=Symbol.for("SentryDoNotSendEventError"),sI=5e3;function Al(e){return{message:e,[pw]:!0}}function vu(e){return{message:e,[fw]:!0}}function oh(e){return!!e&&typeof e=="object"&&pw in e}function rh(e){return!!e&&typeof e=="object"&&fw in e}function ah(e,t,n,i,s){let o=0,r,a=!1;e.on(n,()=>{o=0,clearTimeout(r),a=!1}),e.on(t,l=>{o+=i(l),o>=8e5?s(e):a||(a=!0,r=setTimeout(()=>{s(e)},sI))}),e.on("flush",()=>{s(e)})}class oI{constructor(t){var i,s,o;if(this._options=t,this._integrations={},this._numProcessing=0,this._outcomes={},this._hooks={},this._eventProcessors=[],this._promiseBuffer=Fm(((i=t.transportOptions)==null?void 0:i.bufferSize)??dw),t.dsn?this._dsn=FD(t.dsn):Ze&&qe.warn("No DSN provided, client will not send events."),this._dsn){const r=L_(this._dsn,t.tunnel,t._metadata?t._metadata.sdk:void 0);this._transport=t.transport({tunnel:this._options.tunnel,recordDroppedEvent:this.recordDroppedEvent.bind(this),...t.transportOptions,url:r})}this._options.enableLogs=this._options.enableLogs??((s=this._options._experiments)==null?void 0:s.enableLogs),this._options.enableLogs&&ah(this,"afterCaptureLog","flushLogs",cI,aw),(this._options.enableMetrics??((o=this._options._experiments)==null?void 0:o.enableMetrics)??!0)&&ah(this,"afterCaptureMetric","flushMetrics",lI,cw)}captureException(t,n,i){const s=xi();if(Af(t))return Ze&&qe.log(ih),s;const o={event_id:s,...n};return this._process(()=>this.eventFromException(t,o).then(r=>this._captureEvent(r,o,i)).then(r=>r),"error"),o.event_id}captureMessage(t,n,i,s){const o={event_id:xi(),...i},r=Mm(t)?t:String(t),a=Wc(t),l=a?this.eventFromMessage(r,n,o):this.eventFromException(t,o);return this._process(()=>l.then(u=>this._captureEvent(u,o,s)),a?"unknown":"error"),o.event_id}captureEvent(t,n,i){const s=xi();if(n!=null&&n.originalException&&Af(n.originalException))return Ze&&qe.log(ih),s;const o={event_id:s,...n},r=t.sdkProcessingMetadata||{},a=r.capturedSpanScope,l=r.capturedSpanIsolationScope,u=lh(t.type);return this._process(()=>this._captureEvent(t,o,a||i,l),u),o.event_id}captureSession(t){this.sendSession(t),mr(t,{init:!1})}getDsn(){return this._dsn}getOptions(){return this._options}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}async flush(t){const n=this._transport;if(!n)return!0;this.emit("flush");const i=await this._isClientDoneProcessing(t),s=await n.flush(t);return i&&s}async close(t){const n=await this.flush(t);return this.getOptions().enabled=!1,this.emit("close"),n}getEventProcessors(){return this._eventProcessors}addEventProcessor(t){this._eventProcessors.push(t)}init(){(this._isEnabled()||this._options.integrations.some(({name:t})=>t.startsWith("Spotlight")))&&this._setupIntegrations()}getIntegrationByName(t){return this._integrations[t]}addIntegration(t){const n=this._integrations[t.name];rw(this,t,this._integrations),n||nh(this,[t])}sendEvent(t,n={}){this.emit("beforeSendEvent",t,n);let i=g_(t,this._dsn,this._options._metadata,this._options.tunnel);for(const s of n.attachments||[])i=c_(i,d_(s));this.sendEnvelope(i).then(s=>this.emit("afterSendEvent",t,s))}sendSession(t){const{release:n,environment:i=Om}=this._options;if("aggregates"in t){const o=t.attrs||{};if(!o.release&&!n){Ze&&qe.warn(sh);return}o.release=o.release||n,o.environment=o.environment||i,t.attrs=o}else{if(!t.release&&!n){Ze&&qe.warn(sh);return}t.release=t.release||n,t.environment=t.environment||i}this.emit("beforeSendSession",t);const s=h_(t,this._dsn,this._options._metadata,this._options.tunnel);this.sendEnvelope(s)}recordDroppedEvent(t,n,i=1){if(this._options.sendClientReports){const s=`${t}:${n}`;Ze&&qe.log(`Recording outcome: "${s}"${i>1?` (${i} times)`:""}`),this._outcomes[s]=(this._outcomes[s]||0)+i}}on(t,n){const i=this._hooks[t]=this._hooks[t]||new Set,s=(...o)=>n(...o);return i.add(s),()=>{i.delete(s)}}emit(t,...n){const i=this._hooks[t];i&&i.forEach(s=>s(...n))}async sendEnvelope(t){if(this.emit("beforeEnvelope",t),this._isEnabled()&&this._transport)try{return await this._transport.send(t)}catch(n){return Ze&&qe.error("Error while sending envelope:",n),{}}return Ze&&qe.error("Transport disabled"),{}}_setupIntegrations(){const{integrations:t}=this._options;this._integrations=B_(this,t),nh(this,t)}_updateSessionFromEvent(t,n){var l,u;let i=n.level==="fatal",s=!1;const o=(l=n.exception)==null?void 0:l.values;if(o){s=!0,i=!1;for(const d of o)if(((u=d.mechanism)==null?void 0:u.handled)===!1){i=!0;break}}const r=t.status==="ok";(r&&t.errors===0||r&&i)&&(mr(t,{...i&&{status:"crashed"},errors:t.errors||Number(s||i)}),this.captureSession(t))}async _isClientDoneProcessing(t){let n=0;for(;!t||n<t;){if(await new Promise(i=>setTimeout(i,1)),!this._numProcessing)return!0;n++}return!1}_isEnabled(){return this.getOptions().enabled!==!1&&this._transport!==void 0}_prepareEvent(t,n,i,s){const o=this.getOptions(),r=Object.keys(this._integrations);return!n.integrations&&(r!=null&&r.length)&&(n.integrations=r),this.emit("preprocessEvent",t,n),t.type||s.setLastEventId(t.event_id||n.event_id),T_(o,t,n,i,this,s).then(a=>{if(a===null)return a;this.emit("postprocessEvent",a,n),a.contexts={trace:ND(i),...a.contexts};const l=n_(this,i);return a.sdkProcessingMetadata={dynamicSamplingContext:l,...a.sdkProcessingMetadata},a})}_captureEvent(t,n={},i=qs(),s=Dr()){return Ze&&Ed(t)&&qe.log(`Captured error event \`${mw(t)[0]||"<unknown>"}\``),this._processEvent(t,n,i,s).then(o=>o.event_id,o=>{Ze&&(rh(o)?qe.log(o.message):oh(o)?qe.warn(o.message):qe.warn(o))})}_processEvent(t,n,i,s){const o=this.getOptions(),{sampleRate:r}=o,a=hw(t),l=Ed(t),d=`before send for type \`${t.type||"error"}\``,m=typeof r>"u"?void 0:GD(r);if(l&&typeof m=="number"&&ic()>m)return this.recordDroppedEvent("sample_rate","error"),zm(vu(`Discarding event because it's not included in the random sample (sampling rate = ${r})`));const f=lh(t.type);return this._prepareEvent(t,n,i,s).then(h=>{if(h===null)throw this.recordDroppedEvent("event_processor",f),vu("An event processor returned `null`, will not send event.");if(n.data&&n.data.__sentry__===!0)return h;const b=aI(this,o,h,n);return rI(b,d)}).then(h=>{var x;if(h===null){if(this.recordDroppedEvent("before_send",f),a){const w=1+(t.spans||[]).length;this.recordDroppedEvent("before_send","span",w)}throw vu(`${d} returned \`null\`, will not send event.`)}const g=i.getSession()||s.getSession();if(l&&g&&this._updateSessionFromEvent(g,h),a){const y=((x=h.sdkProcessingMetadata)==null?void 0:x.spanCountBeforeProcessing)||0,w=h.spans?h.spans.length:0,v=y-w;v>0&&this.recordDroppedEvent("before_send","span",v)}const b=h.transaction_info;if(a&&b&&h.transaction!==t.transaction){const y="custom";h.transaction_info={...b,source:y}}return this.sendEvent(h,n),h}).then(null,h=>{throw rh(h)||oh(h)?h:(this.captureException(h,{mechanism:{handled:!1,type:"internal"},data:{__sentry__:!0},originalException:h}),Al(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.
|
|
9
|
+
Reason: ${h}`))})}_process(t,n){this._numProcessing++,this._promiseBuffer.add(t).then(i=>(this._numProcessing--,i),i=>(this._numProcessing--,i===Bm&&this.recordDroppedEvent("queue_overflow",n),i))}_clearOutcomes(){const t=this._outcomes;return this._outcomes={},Object.entries(t).map(([n,i])=>{const[s,o]=n.split(":");return{reason:s,category:o,quantity:i}})}_flushOutcomes(){Ze&&qe.log("Flushing outcomes...");const t=this._clearOutcomes();if(t.length===0){Ze&&qe.log("No outcomes to send");return}if(!this._dsn){Ze&&qe.log("No dsn provided, will not send outcomes");return}Ze&&qe.log("Sending outcomes:",t);const n=tI(t,this._options.tunnel&&Ka(this._dsn));this.sendEnvelope(n)}}function lh(e){return e==="replay_event"?"replay":e||"error"}function rI(e,t){const n=`${t} must return \`null\` or a valid event.`;if(Wa(e))return e.then(i=>{if(!ja(i)&&i!==null)throw Al(n);return i},i=>{throw Al(`${t} rejected with ${i}`)});if(!ja(e)&&e!==null)throw Al(n);return e}function aI(e,t,n,i){const{beforeSend:s,beforeSendTransaction:o,beforeSendSpan:r,ignoreSpans:a}=t;let l=n;if(Ed(l)&&s)return s(l,i);if(hw(l)){if(r||a){const u=nI(l);if(a!=null&&a.length&&Hf(u,a))return null;if(r){const d=r(u);d?l=Xa(n,iI(d)):Ff()}if(l.spans){const d=[],m=l.spans;for(const h of m){if(a!=null&&a.length&&Hf(h,a)){QD(m,h);continue}if(r){const g=r(h);g?d.push(g):(Ff(),d.push(h))}else d.push(h)}const f=l.spans.length-d.length;f&&e.recordDroppedEvent("before_send","span",f),l.spans=d}}if(o){if(l.spans){const u=l.spans.length;l.sdkProcessingMetadata={...n.sdkProcessingMetadata,spanCountBeforeProcessing:u}}return o(l,i)}}return l}function Ed(e){return e.type===void 0}function hw(e){return e.type==="transaction"}function lI(e){let t=0;return e.name&&(t+=e.name.length*2),t+=8,t+gw(e.attributes)}function cI(e){let t=0;return e.message&&(t+=e.message.length*2),t+gw(e.attributes)}function gw(e){if(!e)return 0;let t=0;return Object.values(e).forEach(n=>{Array.isArray(n)?t+=n.length*ch(n[0]):Wc(n)?t+=ch(n):t+=100}),t}function ch(e){return typeof e=="string"?e.length*2:typeof e=="number"?8:typeof e=="boolean"?4:0}function uI(e,t){t.debug===!0&&(Ze?qe.enable():Sr(()=>{console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.")})),qs().update(t.initialScope);const i=new e(t);return dI(i),i.init(),i}function dI(e){qs().setClient(e)}function ku(e){if(!e)return{};const t=e.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!t)return{};const n=t[6]||"",i=t[8]||"";return{host:t[4],path:t[5],protocol:t[2],search:n,hash:i,relative:t[5]+n+i}}function mI(e){var t;"aggregates"in e?((t=e.attrs)==null?void 0:t.ip_address)===void 0&&(e.attrs={...e.attrs,ip_address:"{{auto}}"}):e.ipAddress===void 0&&(e.ipAddress="{{auto}}")}function bw(e,t,n=[t],i="npm"){const s=e._metadata||{};s.sdk||(s.sdk={name:`sentry.javascript.${t}`,packages:n.map(o=>({name:`${i}:@sentry/${o}`,version:co})),version:co}),e._metadata=s}const pI=100;function No(e,t){const n=Xn(),i=Dr();if(!n)return;const{beforeBreadcrumb:s=null,maxBreadcrumbs:o=pI}=n.getOptions();if(o<=0)return;const a={timestamp:$a(),...e},l=s?Sr(()=>s(a,t)):a;l!==null&&(n.emit&&n.emit("beforeAddBreadcrumb",l,t),i.addBreadcrumb(l,o))}let uh;const fI="FunctionToString",dh=new WeakMap,hI=(()=>({name:fI,setupOnce(){uh=Function.prototype.toString;try{Function.prototype.toString=function(...e){const t=Rm(this),n=dh.has(Xn())&&t!==void 0?t:this;return uh.apply(n,e)}}catch{}},setup(e){dh.set(e,!0)}})),gI=hI,bI=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/,/^ResizeObserver loop completed with undelivered notifications.$/,/^Cannot redefine property: googletag$/,/^Can't find variable: gmo$/,/^undefined is not an object \(evaluating 'a\.[A-Z]'\)$/,`can't redefine non-configurable property "solana"`,"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)","Can't find variable: _AutofillCallbackHandler",/^Non-Error promise rejection captured with value: Object Not Found Matching Id:\d+, MethodName:simulateEvent, ParamCount:\d+$/,/^Java exception was raised during method invocation$/],xI="EventFilters",wI=(e={})=>{let t;return{name:xI,setup(n){const i=n.getOptions();t=mh(e,i)},processEvent(n,i,s){if(!t){const o=s.getOptions();t=mh(e,o)}return NI(n,t)?null:n}}},yI=((e={})=>({...wI(e),name:"InboundFilters"}));function mh(e={},t={}){return{allowUrls:[...e.allowUrls||[],...t.allowUrls||[]],denyUrls:[...e.denyUrls||[],...t.denyUrls||[]],ignoreErrors:[...e.ignoreErrors||[],...t.ignoreErrors||[],...e.disableErrorDefaults?[]:bI],ignoreTransactions:[...e.ignoreTransactions||[],...t.ignoreTransactions||[]]}}function NI(e,t){if(e.type){if(e.type==="transaction"&&kI(e,t.ignoreTransactions))return Ze&&qe.warn(`Event dropped due to being matched by \`ignoreTransactions\` option.
|
|
10
|
+
Event: ${no(e)}`),!0}else{if(vI(e,t.ignoreErrors))return Ze&&qe.warn(`Event dropped due to being matched by \`ignoreErrors\` option.
|
|
11
|
+
Event: ${no(e)}`),!0;if(DI(e))return Ze&&qe.warn(`Event dropped due to not having an error message, error type or stacktrace.
|
|
12
|
+
Event: ${no(e)}`),!0;if(EI(e,t.denyUrls))return Ze&&qe.warn(`Event dropped due to being matched by \`denyUrls\` option.
|
|
13
|
+
Event: ${no(e)}.
|
|
14
|
+
Url: ${sc(e)}`),!0;if(!SI(e,t.allowUrls))return Ze&&qe.warn(`Event dropped due to not being matched by \`allowUrls\` option.
|
|
15
|
+
Event: ${no(e)}.
|
|
16
|
+
Url: ${sc(e)}`),!0}return!1}function vI(e,t){return t!=null&&t.length?mw(e).some(n=>Yc(n,t)):!1}function kI(e,t){if(!(t!=null&&t.length))return!1;const n=e.transaction;return n?Yc(n,t):!1}function EI(e,t){if(!(t!=null&&t.length))return!1;const n=sc(e);return n?Yc(n,t):!1}function SI(e,t){if(!(t!=null&&t.length))return!0;const n=sc(e);return n?Yc(n,t):!0}function TI(e=[]){for(let t=e.length-1;t>=0;t--){const n=e[t];if(n&&n.filename!=="<anonymous>"&&n.filename!=="[native code]")return n.filename||null}return null}function sc(e){var t,n;try{const i=[...((t=e.exception)==null?void 0:t.values)??[]].reverse().find(o=>{var r,a,l;return((r=o.mechanism)==null?void 0:r.parent_id)===void 0&&((l=(a=o.stacktrace)==null?void 0:a.frames)==null?void 0:l.length)}),s=(n=i==null?void 0:i.stacktrace)==null?void 0:n.frames;return s?TI(s):null}catch{return Ze&&qe.error(`Cannot extract url for event ${no(e)}`),null}}function DI(e){var t,n;return(n=(t=e.exception)==null?void 0:t.values)!=null&&n.length?!e.message&&!e.exception.values.some(i=>i.stacktrace||i.type&&i.type!=="Error"||i.value):!1}function _I(e,t,n,i,s,o){var a;if(!((a=s.exception)!=null&&a.values)||!o||!As(o.originalException,Error))return;const r=s.exception.values.length>0?s.exception.values[s.exception.values.length-1]:void 0;r&&(s.exception.values=Sd(e,t,i,o.originalException,n,s.exception.values,r,0))}function Sd(e,t,n,i,s,o,r,a){if(o.length>=n+1)return o;let l=[...o];if(As(i[s],Error)){ph(r,a);const u=e(t,i[s]),d=l.length;fh(u,s,d,a),l=Sd(e,t,n,i[s],s,[u,...l],u,d)}return Array.isArray(i.errors)&&i.errors.forEach((u,d)=>{if(As(u,Error)){ph(r,a);const m=e(t,u),f=l.length;fh(m,`errors[${d}]`,f,a),l=Sd(e,t,n,u,s,[m,...l],m,f)}}),l}function ph(e,t){e.mechanism={handled:!0,type:"auto.core.linked_errors",...e.mechanism,...e.type==="AggregateError"&&{is_exception_group:!0},exception_id:t}}function fh(e,t,n,i){e.mechanism={handled:!0,...e.mechanism,type:"chained",source:t,exception_id:n,parent_id:i}}function II(e){const t="console";To(t,e),Do(t,CI)}function CI(){"console"in Ct&&qT.forEach(function(e){e in Ct.console&&ri(Ct.console,e,function(t){return nc[e]=t,function(...n){Si("console",{args:n,level:e});const s=nc[e];s==null||s.apply(Ct.console,n)}})})}function jI(e){return e==="warn"?"warning":["fatal","error","warning","log","info","debug"].includes(e)?e:"log"}const PI="Dedupe",AI=(()=>{let e;return{name:PI,processEvent(t){if(t.type)return t;try{if(VI(t,e))return Ze&&qe.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{}return e=t}}}),MI=AI;function VI(e,t){return t?!!(UI(e,t)||RI(e,t)):!1}function UI(e,t){const n=e.message,i=t.message;return!(!n&&!i||n&&!i||!n&&i||n!==i||!ww(e,t)||!xw(e,t))}function RI(e,t){const n=hh(t),i=hh(e);return!(!n||!i||n.type!==i.type||n.value!==i.value||!ww(e,t)||!xw(e,t))}function xw(e,t){let n=Df(e),i=Df(t);if(!n&&!i)return!0;if(n&&!i||!n&&i||(n=n,i=i,i.length!==n.length))return!1;for(let s=0;s<i.length;s++){const o=i[s],r=n[s];if(o.filename!==r.filename||o.lineno!==r.lineno||o.colno!==r.colno||o.function!==r.function)return!1}return!0}function ww(e,t){let n=e.fingerprint,i=t.fingerprint;if(!n&&!i)return!0;if(n&&!i||!n&&i)return!1;n=n,i=i;try{return n.join("")===i.join("")}catch{return!1}}function hh(e){var t,n;return(n=(t=e.exception)==null?void 0:t.values)==null?void 0:n[0]}function yw(e){if(e!==void 0)return e>=400&&e<500?"warning":e>=500?"error":void 0}const Aa=Ct;function qI(){return"history"in Aa&&!!Aa.history}function LI(){if(!("fetch"in Aa))return!1;try{return new Headers,new Request("data:,"),new Response,!0}catch{return!1}}function Td(e){return e&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(e.toString())}function OI(){var n;if(typeof EdgeRuntime=="string")return!0;if(!LI())return!1;if(Td(Aa.fetch))return!0;let e=!1;const t=Aa.document;if(t&&typeof t.createElement=="function")try{const i=t.createElement("iframe");i.hidden=!0,t.head.appendChild(i),(n=i.contentWindow)!=null&&n.fetch&&(e=Td(i.contentWindow.fetch)),t.head.removeChild(i)}catch(i){Ze&&qe.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",i)}return e}function zI(e,t){const n="fetch";To(n,e),Do(n,()=>BI(void 0,t))}function BI(e,t=!1){t&&!OI()||ri(Ct,"fetch",function(n){return function(...i){const s=new Error,{method:o,url:r}=FI(i),a={args:i,fetchData:{method:o,url:r},startTimestamp:Qi()*1e3,virtualError:s,headers:GI(i)};return Si("fetch",{...a}),n.apply(Ct,i).then(async l=>(Si("fetch",{...a,endTimestamp:Qi()*1e3,response:l}),l),l=>{if(Si("fetch",{...a,endTimestamp:Qi()*1e3,error:l}),Am(l)&&l.stack===void 0&&(l.stack=s.stack,yo(l,"framesToPop",1)),l instanceof TypeError&&(l.message==="Failed to fetch"||l.message==="Load failed"||l.message==="NetworkError when attempting to fetch resource."))try{const u=new URL(a.fetchData.url);l.message=`${l.message} (${u.host})`}catch{}throw l})}})}function Ml(e,t){return!!e&&typeof e=="object"&&!!e[t]}function gh(e){return typeof e=="string"?e:e?Ml(e,"url")?e.url:e.toString?e.toString():"":""}function FI(e){if(e.length===0)return{method:"GET",url:""};if(e.length===2){const[n,i]=e;return{url:gh(n),method:Ml(i,"method")?String(i.method).toUpperCase():Ox(n)&&Ml(n,"method")?String(n.method).toUpperCase():"GET"}}const t=e[0];return{url:gh(t),method:Ml(t,"method")?String(t.method).toUpperCase():"GET"}}function GI(e){const[t,n]=e;try{if(typeof n=="object"&&n!==null&&"headers"in n&&n.headers)return new Headers(n.headers);if(Ox(t))return new Headers(t.headers)}catch{}}function HI(){return"npm"}const pn=Ct;let Dd=0;function Nw(){return Dd>0}function WI(){Dd++,setTimeout(()=>{Dd--})}function fr(e,t={}){function n(s){return typeof s=="function"}if(!n(e))return e;try{const s=e.__sentry_wrapped__;if(s)return typeof s=="function"?s:e;if(Rm(e))return e}catch{return e}const i=function(...s){try{const o=s.map(r=>fr(r,t));return e.apply(this,o)}catch(o){throw WI(),yD(r=>{r.addEventProcessor(a=>(t.mechanism&&(wd(a,void 0),dr(a,t.mechanism)),a.extra={...a.extra,arguments:s},a)),A_(o)}),o}};try{for(const s in e)Object.prototype.hasOwnProperty.call(e,s)&&(i[s]=e[s])}catch{}Bx(i,e),yo(e,"__sentry_wrapped__",i);try{Object.getOwnPropertyDescriptor(i,"name").configurable&&Object.defineProperty(i,"name",{get(){return e.name}})}catch{}return i}function $I(){const e=Um(),{referrer:t}=pn.document||{},{userAgent:n}=pn.navigator||{},i={...t&&{Referer:t},...n&&{"User-Agent":n}};return{url:e,headers:i}}function Gm(e,t){const n=Hm(e,t),i={type:JI(t),value:QI(t)};return n.length&&(i.stacktrace={frames:n}),i.type===void 0&&i.value===""&&(i.value="Unrecoverable error caught"),i}function XI(e,t,n,i){const s=Xn(),o=s==null?void 0:s.getOptions().normalizeDepth,r=sC(t),a={__serialized__:ew(t,o)};if(r)return{exception:{values:[Gm(e,r)]},extra:a};const l={exception:{values:[{type:$c(t)?t.constructor.name:i?"UnhandledRejection":"Error",value:nC(t,{isUnhandledRejection:i})}]},extra:a};if(n){const u=Hm(e,n);u.length&&(l.exception.values[0].stacktrace={frames:u})}return l}function Eu(e,t){return{exception:{values:[Gm(e,t)]}}}function Hm(e,t){const n=t.stacktrace||t.stack||"",i=YI(t),s=ZI(t);try{return e(n,i,s)}catch{}return[]}const KI=/Minified React error #\d+;/i;function YI(e){return e&&KI.test(e.message)?1:0}function ZI(e){return typeof e.framesToPop=="number"?e.framesToPop:0}function vw(e){return typeof WebAssembly<"u"&&typeof WebAssembly.Exception<"u"?e instanceof WebAssembly.Exception:!1}function JI(e){const t=e==null?void 0:e.name;return!t&&vw(e)?e.message&&Array.isArray(e.message)&&e.message.length==2?e.message[0]:"WebAssembly.Exception":t}function QI(e){const t=e==null?void 0:e.message;return vw(e)?Array.isArray(e.message)&&e.message.length==2?e.message[1]:"wasm exception":t?t.error&&typeof t.error.message=="string"?t.error.message:t:"No error message"}function eC(e,t,n,i){const s=(n==null?void 0:n.syntheticException)||void 0,o=Wm(e,t,s,i);return dr(o),o.level="error",n!=null&&n.event_id&&(o.event_id=n.event_id),Zc(o)}function tC(e,t,n="info",i,s){const o=(i==null?void 0:i.syntheticException)||void 0,r=_d(e,t,o,s);return r.level=n,i!=null&&i.event_id&&(r.event_id=i.event_id),Zc(r)}function Wm(e,t,n,i,s){let o;if(qx(t)&&t.error)return Eu(e,t.error);if(If(t)||ZT(t)){const r=t;if("stack"in t)o=Eu(e,t);else{const a=r.name||(If(r)?"DOMError":"DOMException"),l=r.message?`${a}: ${r.message}`:a;o=_d(e,l,n,i),wd(o,l)}return"code"in r&&(o.tags={...o.tags,"DOMException.code":`${r.code}`}),o}return Am(t)?Eu(e,t):ja(t)||$c(t)?(o=XI(e,t,n,s),dr(o,{synthetic:!0}),o):(o=_d(e,t,n,i),wd(o,`${t}`),dr(o,{synthetic:!0}),o)}function _d(e,t,n,i){const s={};if(i&&n){const o=Hm(e,n);o.length&&(s.exception={values:[{value:t,stacktrace:{frames:o}}]}),dr(s,{synthetic:!0})}if(Mm(t)){const{__sentry_template_string__:o,__sentry_template_values__:r}=t;return s.logentry={message:o,params:r},s}return s.message=t,s}function nC(e,{isUnhandledRejection:t}){const n=sD(e),i=t?"promise rejection":"exception";return qx(e)?`Event \`ErrorEvent\` captured as ${i} with message \`${e.message}\``:$c(e)?`Event \`${iC(e)}\` (type=${e.type}) captured as ${i}`:`Object captured as ${i} with keys: ${n}`}function iC(e){try{const t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch{}}function sC(e){for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){const n=e[t];if(n instanceof Error)return n}}class oC extends oI{constructor(t){var d;const n=rC(t),i=pn.SENTRY_SDK_SOURCE||HI();bw(n,"browser",["browser"],i),(d=n._metadata)!=null&&d.sdk&&(n._metadata.sdk.settings={infer_ip:n.sendDefaultPii?"auto":"never",...n._metadata.sdk.settings}),super(n);const{sendDefaultPii:s,sendClientReports:o,enableLogs:r,_experiments:a,enableMetrics:l}=this._options,u=l??(a==null?void 0:a.enableMetrics)??!0;pn.document&&(o||r||u)&&pn.document.addEventListener("visibilitychange",()=>{pn.document.visibilityState==="hidden"&&(o&&this._flushOutcomes(),r&&aw(this),u&&cw(this))}),s&&this.on("beforeSendSession",mI)}eventFromException(t,n){return eC(this._options.stackParser,t,n,this._options.attachStacktrace)}eventFromMessage(t,n="info",i){return tC(this._options.stackParser,t,n,i,this._options.attachStacktrace)}_prepareEvent(t,n,i,s){return t.platform=t.platform||"javascript",super._prepareEvent(t,n,i,s)}}function rC(e){var t;return{release:typeof __SENTRY_RELEASE__=="string"?__SENTRY_RELEASE__:(t=pn.SENTRY_RELEASE)==null?void 0:t.id,sendClientReports:!0,parentSpanIsAlwaysRootSpan:!0,...e}}const aC=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,Wn=Ct,lC=1e3;let bh,Id,Cd;function cC(e){To("dom",e),Do("dom",uC)}function uC(){if(!Wn.document)return;const e=Si.bind(null,"dom"),t=xh(e,!0);Wn.document.addEventListener("click",t,!1),Wn.document.addEventListener("keypress",t,!1),["EventTarget","Node"].forEach(n=>{var o,r;const s=(o=Wn[n])==null?void 0:o.prototype;(r=s==null?void 0:s.hasOwnProperty)!=null&&r.call(s,"addEventListener")&&(ri(s,"addEventListener",function(a){return function(l,u,d){if(l==="click"||l=="keypress")try{const m=this.__sentry_instrumentation_handlers__=this.__sentry_instrumentation_handlers__||{},f=m[l]=m[l]||{refCount:0};if(!f.handler){const h=xh(e);f.handler=h,a.call(this,l,h,d)}f.refCount++}catch{}return a.call(this,l,u,d)}}),ri(s,"removeEventListener",function(a){return function(l,u,d){if(l==="click"||l=="keypress")try{const m=this.__sentry_instrumentation_handlers__||{},f=m[l];f&&(f.refCount--,f.refCount<=0&&(a.call(this,l,f.handler,d),f.handler=void 0,delete m[l]),Object.keys(m).length===0&&delete this.__sentry_instrumentation_handlers__)}catch{}return a.call(this,l,u,d)}}))})}function dC(e){if(e.type!==Id)return!1;try{if(!e.target||e.target._sentryId!==Cd)return!1}catch{}return!0}function mC(e,t){return e!=="keypress"?!1:t!=null&&t.tagName?!(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable):!0}function xh(e,t=!1){return n=>{if(!n||n._sentryCaptured)return;const i=pC(n);if(mC(n.type,i))return;yo(n,"_sentryCaptured",!0),i&&!i._sentryId&&yo(i,"_sentryId",xi());const s=n.type==="keypress"?"input":n.type;dC(n)||(e({event:n,name:s,global:t}),Id=n.type,Cd=i?i._sentryId:void 0),clearTimeout(bh),bh=Wn.setTimeout(()=>{Cd=void 0,Id=void 0},lC)}}function pC(e){try{return e.target}catch{return null}}let dl;function kw(e){const t="history";To(t,e),Do(t,fC)}function fC(){if(Wn.addEventListener("popstate",()=>{const t=Wn.location.href,n=dl;if(dl=t,n===t)return;Si("history",{from:n,to:t})}),!qI())return;function e(t){return function(...n){const i=n.length>2?n[2]:void 0;if(i){const s=dl,o=hC(String(i));if(dl=o,s===o)return t.apply(this,n);Si("history",{from:s,to:o})}return t.apply(this,n)}}ri(Wn.history,"pushState",e),ri(Wn.history,"replaceState",e)}function hC(e){try{return new URL(e,Wn.location.origin).toString()}catch{return e}}const Vl={};function Ew(e){const t=Vl[e];if(t)return t;let n=Wn[e];if(Td(n))return Vl[e]=n.bind(Wn);const i=Wn.document;if(i&&typeof i.createElement=="function")try{const s=i.createElement("iframe");s.hidden=!0,i.head.appendChild(s);const o=s.contentWindow;o!=null&&o[e]&&(n=o[e]),i.head.removeChild(s)}catch(s){aC&&qe.warn(`Could not create sandbox iframe for ${e} check, bailing to window.${e}: `,s)}return n&&(Vl[e]=n.bind(Wn))}function gC(e){Vl[e]=void 0}const aa="__sentry_xhr_v3__";function bC(e){To("xhr",e),Do("xhr",xC)}function xC(){if(!Wn.XMLHttpRequest)return;const e=XMLHttpRequest.prototype;e.open=new Proxy(e.open,{apply(t,n,i){const s=new Error,o=Qi()*1e3,r=Ji(i[0])?i[0].toUpperCase():void 0,a=wC(i[1]);if(!r||!a)return t.apply(n,i);n[aa]={method:r,url:a,request_headers:{}},r==="POST"&&a.match(/sentry_key/)&&(n.__sentry_own_request__=!0);const l=()=>{const u=n[aa];if(u&&n.readyState===4){try{u.status_code=n.status}catch{}const d={endTimestamp:Qi()*1e3,startTimestamp:o,xhr:n,virtualError:s};Si("xhr",d)}};return"onreadystatechange"in n&&typeof n.onreadystatechange=="function"?n.onreadystatechange=new Proxy(n.onreadystatechange,{apply(u,d,m){return l(),u.apply(d,m)}}):n.addEventListener("readystatechange",l),n.setRequestHeader=new Proxy(n.setRequestHeader,{apply(u,d,m){const[f,h]=m,g=d[aa];return g&&Ji(f)&&Ji(h)&&(g.request_headers[f.toLowerCase()]=h),u.apply(d,m)}}),t.apply(n,i)}}),e.send=new Proxy(e.send,{apply(t,n,i){const s=n[aa];if(!s)return t.apply(n,i);i[0]!==void 0&&(s.body=i[0]);const o={startTimestamp:Qi()*1e3,xhr:n};return Si("xhr",o),t.apply(n,i)}})}function wC(e){if(Ji(e))return e;try{return e.toString()}catch{}}const yC=40;function NC(e,t=Ew("fetch")){let n=0,i=0;async function s(o){const r=o.body.length;n+=r,i++;const a={body:o.body,method:"POST",referrerPolicy:"strict-origin",headers:e.headers,keepalive:n<=6e4&&i<15,...e.fetchOptions};try{const l=await t(e.url,a);return{statusCode:l.status,headers:{"x-sentry-rate-limits":l.headers.get("X-Sentry-Rate-Limits"),"retry-after":l.headers.get("Retry-After")}}}catch(l){throw gC("fetch"),l}finally{n-=r,i--}}return eI(e,s,Fm(e.bufferSize||yC))}const Ya=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,vC=30,kC=50;function jd(e,t,n,i){const s={filename:e,function:t==="<anonymous>"?wo:t,in_app:!0};return n!==void 0&&(s.lineno=n),i!==void 0&&(s.colno=i),s}const EC=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,SC=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,TC=/\((\S*)(?::(\d+))(?::(\d+))\)/,DC=/at (.+?) ?\(data:(.+?),/,_C=e=>{const t=e.match(DC);if(t)return{filename:`<data:${t[2]}>`,function:t[1]};const n=EC.exec(e);if(n){const[,s,o,r]=n;return jd(s,wo,+o,+r)}const i=SC.exec(e);if(i){if(i[2]&&i[2].indexOf("eval")===0){const a=TC.exec(i[2]);a&&(i[2]=a[1],i[3]=a[2],i[4]=a[3])}const[o,r]=Sw(i[1]||wo,i[2]);return jd(r,o,i[3]?+i[3]:void 0,i[4]?+i[4]:void 0)}},IC=[vC,_C],CC=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,jC=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,PC=e=>{const t=CC.exec(e);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){const o=jC.exec(t[3]);o&&(t[1]=t[1]||"eval",t[3]=o[1],t[4]=o[2],t[5]="")}let i=t[3],s=t[1]||wo;return[s,i]=Sw(s,i),jd(i,s,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}},AC=[kC,PC],MC=[IC,AC],VC=Vx(...MC),Sw=(e,t)=>{const n=e.indexOf("safari-extension")!==-1,i=e.indexOf("safari-web-extension")!==-1;return n||i?[e.indexOf("@")!==-1?e.split("@")[0]:wo,n?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]},ml=1024,UC="Breadcrumbs",RC=((e={})=>{const t={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...e};return{name:UC,setup(n){t.console&&II(zC(n)),t.dom&&cC(OC(n,t.dom)),t.xhr&&bC(BC(n)),t.fetch&&zI(FC(n)),t.history&&kw(GC(n)),t.sentry&&n.on("beforeSendEvent",LC(n))}}}),qC=RC;function LC(e){return function(n){Xn()===e&&No({category:`sentry.${n.type==="transaction"?"transaction":"event"}`,event_id:n.event_id,level:n.level,message:no(n)},{event:n})}}function OC(e,t){return function(i){if(Xn()!==e)return;let s,o,r=typeof t=="object"?t.serializeAttribute:void 0,a=typeof t=="object"&&typeof t.maxStringLength=="number"?t.maxStringLength:void 0;a&&a>ml&&(Ya&&qe.warn(`\`dom.maxStringLength\` cannot exceed ${ml}, but a value of ${a} was configured. Sentry will use ${ml} instead.`),a=ml),typeof r=="string"&&(r=[r]);try{const u=i.event,d=HC(u)?u.target:u;s=zx(d,{keyAttrs:r,maxStringLength:a}),o=iD(d)}catch{s="<unknown>"}if(s.length===0)return;const l={category:`ui.${i.name}`,message:s};o&&(l.data={"ui.component_name":o}),No(l,{event:i.event,name:i.name,global:i.global})}}function zC(e){return function(n){if(Xn()!==e)return;const i={category:"console",data:{arguments:n.args,logger:"console"},level:jI(n.level),message:Pf(n.args," ")};if(n.level==="assert")if(n.args[0]===!1)i.message=`Assertion failed: ${Pf(n.args.slice(1)," ")||"console.assert"}`,i.data.arguments=n.args.slice(1);else return;No(i,{input:n.args,level:n.level})}}function BC(e){return function(n){if(Xn()!==e)return;const{startTimestamp:i,endTimestamp:s}=n,o=n.xhr[aa];if(!i||!s||!o)return;const{method:r,url:a,status_code:l,body:u}=o,d={method:r,url:a,status_code:l},m={xhr:n.xhr,input:u,startTimestamp:i,endTimestamp:s},f={category:"xhr",data:d,type:"http",level:yw(l)};e.emit("beforeOutgoingRequestBreadcrumb",f,m),No(f,m)}}function FC(e){return function(n){if(Xn()!==e)return;const{startTimestamp:i,endTimestamp:s}=n;if(s&&!(n.fetchData.url.match(/sentry_key/)&&n.fetchData.method==="POST"))if(n.fetchData.method,n.fetchData.url,n.error){const o=n.fetchData,r={data:n.error,input:n.args,startTimestamp:i,endTimestamp:s},a={category:"fetch",data:o,level:"error",type:"http"};e.emit("beforeOutgoingRequestBreadcrumb",a,r),No(a,r)}else{const o=n.response,r={...n.fetchData,status_code:o==null?void 0:o.status};n.fetchData.request_body_size,n.fetchData.response_body_size,o==null||o.status;const a={input:n.args,response:o,startTimestamp:i,endTimestamp:s},l={category:"fetch",data:r,type:"http",level:yw(r.status_code)};e.emit("beforeOutgoingRequestBreadcrumb",l,a),No(l,a)}}}function GC(e){return function(n){if(Xn()!==e)return;let i=n.from,s=n.to;const o=ku(pn.location.href);let r=i?ku(i):void 0;const a=ku(s);r!=null&&r.path||(r=o),o.protocol===a.protocol&&o.host===a.host&&(s=a.relative),o.protocol===r.protocol&&o.host===r.host&&(i=r.relative),No({category:"navigation",data:{from:i,to:s}})}}function HC(e){return!!e&&!!e.target}const WC=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","BroadcastChannel","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","SharedWorker","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"],$C="BrowserApiErrors",XC=((e={})=>{const t={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,unregisterOriginalCallbacks:!1,...e};return{name:$C,setupOnce(){t.setTimeout&&ri(pn,"setTimeout",wh),t.setInterval&&ri(pn,"setInterval",wh),t.requestAnimationFrame&&ri(pn,"requestAnimationFrame",YC),t.XMLHttpRequest&&"XMLHttpRequest"in pn&&ri(XMLHttpRequest.prototype,"send",ZC);const n=t.eventTarget;n&&(Array.isArray(n)?n:WC).forEach(s=>JC(s,t))}}}),KC=XC;function wh(e){return function(...t){const n=t[0];return t[0]=fr(n,{mechanism:{handled:!1,type:`auto.browser.browserapierrors.${Ps(e)}`}}),e.apply(this,t)}}function YC(e){return function(t){return e.apply(this,[fr(t,{mechanism:{data:{handler:Ps(e)},handled:!1,type:"auto.browser.browserapierrors.requestAnimationFrame"}})])}}function ZC(e){return function(...t){const n=this;return["onload","onerror","onprogress","onreadystatechange"].forEach(s=>{s in n&&typeof n[s]=="function"&&ri(n,s,function(o){const r={mechanism:{data:{handler:Ps(o)},handled:!1,type:`auto.browser.browserapierrors.xhr.${s}`}},a=Rm(o);return a&&(r.mechanism.data.handler=Ps(a)),fr(o,r)})}),e.apply(this,t)}}function JC(e,t){var s,o;const i=(s=pn[e])==null?void 0:s.prototype;(o=i==null?void 0:i.hasOwnProperty)!=null&&o.call(i,"addEventListener")&&(ri(i,"addEventListener",function(r){return function(a,l,u){try{QC(l)&&(l.handleEvent=fr(l.handleEvent,{mechanism:{data:{handler:Ps(l),target:e},handled:!1,type:"auto.browser.browserapierrors.handleEvent"}}))}catch{}return t.unregisterOriginalCallbacks&&ej(this,a,l),r.apply(this,[a,fr(l,{mechanism:{data:{handler:Ps(l),target:e},handled:!1,type:"auto.browser.browserapierrors.addEventListener"}}),u])}}),ri(i,"removeEventListener",function(r){return function(a,l,u){try{const d=l.__sentry_wrapped__;d&&r.call(this,a,d,u)}catch{}return r.call(this,a,l,u)}}))}function QC(e){return typeof e.handleEvent=="function"}function ej(e,t,n){e&&typeof e=="object"&&"removeEventListener"in e&&typeof e.removeEventListener=="function"&&e.removeEventListener(t,n)}const tj=()=>({name:"BrowserSession",setupOnce(){if(typeof pn.document>"u"){Ya&&qe.warn("Using the `browserSessionIntegration` in non-browser environments is not supported.");return}Qf({ignoreDuration:!0}),eh(),kw(({from:e,to:t})=>{e!==void 0&&e!==t&&(Qf({ignoreDuration:!0}),eh())})}}),nj="GlobalHandlers",ij=((e={})=>{const t={onerror:!0,onunhandledrejection:!0,...e};return{name:nj,setupOnce(){Error.stackTraceLimit=50},setup(n){t.onerror&&(oj(n),yh("onerror")),t.onunhandledrejection&&(rj(n),yh("onunhandledrejection"))}}}),sj=ij;function oj(e){$T(t=>{const{stackParser:n,attachStacktrace:i}=Tw();if(Xn()!==e||Nw())return;const{msg:s,url:o,line:r,column:a,error:l}=t,u=cj(Wm(n,l||s,void 0,i,!1),o,r,a);u.level="error",iw(u,{originalException:l,mechanism:{handled:!1,type:"auto.browser.global_handlers.onerror"}})})}function rj(e){KT(t=>{const{stackParser:n,attachStacktrace:i}=Tw();if(Xn()!==e||Nw())return;const s=aj(t),o=Wc(s)?lj(s):Wm(n,s,void 0,i,!0);o.level="error",iw(o,{originalException:s,mechanism:{handled:!1,type:"auto.browser.global_handlers.onunhandledrejection"}})})}function aj(e){if(Wc(e))return e;try{if("reason"in e)return e.reason;if("detail"in e&&"reason"in e.detail)return e.detail.reason}catch{}return e}function lj(e){return{exception:{values:[{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(e)}`}]}}}function cj(e,t,n,i){const s=e.exception=e.exception||{},o=s.values=s.values||[],r=o[0]=o[0]||{},a=r.stacktrace=r.stacktrace||{},l=a.frames=a.frames||[],u=i,d=n,m=uj(t)??Um();return l.length===0&&l.push({colno:u,filename:m,function:wo,in_app:!0,lineno:d}),e}function yh(e){Ya&&qe.log(`Global Handler attached: ${e}`)}function Tw(){const e=Xn();return(e==null?void 0:e.getOptions())||{stackParser:()=>[],attachStacktrace:!1}}function uj(e){if(!(!Ji(e)||e.length===0)){if(e.startsWith("data:")){const t=e.match(/^data:([^;]+)/),n=t?t[1]:"text/javascript",i=e.includes("base64,");return`<data:${n}${i?",base64":""}>`}return e}}const dj=()=>({name:"HttpContext",preprocessEvent(e){var i;if(!pn.navigator&&!pn.location&&!pn.document)return;const t=$I(),n={...t.headers,...(i=e.request)==null?void 0:i.headers};e.request={...t,...e.request,headers:n}}}),mj="cause",pj=5,fj="LinkedErrors",hj=((e={})=>{const t=e.limit||pj,n=e.key||mj;return{name:fj,preprocessEvent(i,s,o){const r=o.getOptions();_I(Gm,r.stackParser,n,t,i,s)}}}),gj=hj,bj="SpotlightBrowser",xj=((e={})=>{const t=e.sidecarUrl||"http://localhost:8969/stream";return{name:bj,setup:()=>{Ya&&qe.log("Using Sidecar URL",t)},processEvent:n=>Nj(n)?null:n,afterAllSetup:n=>{wj(n,t)}}});function wj(e,t){const n=Ew("fetch");let i=0;e.on("beforeEnvelope",s=>{if(i>3){qe.warn("[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests:",i);return}n(t,{method:"POST",body:tw(s),headers:{"Content-Type":"application/x-sentry-envelope"},mode:"cors"}).then(o=>{o.status>=200&&o.status<400&&(i=0)},o=>{i++,qe.error("Sentry SDK can't connect to Sidecar is it running? See: https://spotlightjs.com/sidecar/npx/",o)})})}const yj=xj;function Nj(e){var t;return!!(e.type==="transaction"&&e.spans&&((t=e.contexts)!=null&&t.trace)&&e.contexts.trace.op==="ui.action.click"&&e.spans.some(({description:n})=>n==null?void 0:n.includes("#sentry-spotlight")))}function vj(){return kj()?(Ya&&Sr(()=>{console.error("[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/")}),!0):!1}function kj(){var o;if(typeof pn.window>"u")return!1;const e=pn;if(e.nw)return!1;const t=e.chrome||e.browser;if(!((o=t==null?void 0:t.runtime)!=null&&o.id))return!1;const n=Um(),i=["chrome-extension","moz-extension","ms-browser-extension","safari-web-extension"];return!(pn===pn.top&&i.some(r=>n.startsWith(`${r}://`)))}function Ej(e){return[yI(),gI(),KC(),qC(),sj(),gj(),MI(),dj(),tj()]}function Sj(e={}){const t=!e.skipBrowserExtensionCheck&&vj();let n=e.defaultIntegrations==null?Ej():e.defaultIntegrations;if(e.spotlight){n||(n=[]);const s=typeof e.spotlight=="string"?{sidecarUrl:e.spotlight}:void 0;n.push(yj(s))}const i={...e,enabled:t?!1:e.enabled,stackParser:HT(e.stackParser||VC),integrations:z_({integrations:e.integrations,defaultIntegrations:n}),transport:e.transport||NC};return uI(oC,i)}function Tj(e){const t={...e};return bw(t,"react"),M_("react",{version:p.version}),Sj(t)}function Pd(e,t,n){if(e&&e.length){const[i,s]=t,o=Math.PI/180*n,r=Math.cos(o),a=Math.sin(o);for(const l of e){const[u,d]=l;l[0]=(u-i)*r-(d-s)*a+i,l[1]=(u-i)*a+(d-s)*r+s}}}function Dj(e,t,n){const i=[];e.forEach(s=>i.push(...s)),Pd(i,t,n)}function _j(e,t){return e[0]===t[0]&&e[1]===t[1]}function Ij(e,t,n,i=1){const s=n,o=Math.max(t,.1),r=e[0]&&e[0][0]&&typeof e[0][0]=="number"?[e]:e,a=[0,0];if(s)for(const u of r)Pd(u,a,s);const l=Cj(r,o,i);if(s){for(const u of r)Pd(u,a,-s);Dj(l,a,-s)}return l}function Cj(e,t,n){const i=[];for(const u of e){const d=[...u];_j(d[0],d[d.length-1])||d.push([d[0][0],d[0][1]]),d.length>2&&i.push(d)}const s=[];t=Math.max(t,.1);const o=[];for(const u of i)for(let d=0;d<u.length-1;d++){const m=u[d],f=u[d+1];if(m[1]!==f[1]){const h=Math.min(m[1],f[1]);o.push({ymin:h,ymax:Math.max(m[1],f[1]),x:h===m[1]?m[0]:f[0],islope:(f[0]-m[0])/(f[1]-m[1])})}}if(o.sort((u,d)=>u.ymin<d.ymin?-1:u.ymin>d.ymin?1:u.x<d.x?-1:u.x>d.x?1:u.ymax===d.ymax?0:(u.ymax-d.ymax)/Math.abs(u.ymax-d.ymax)),!o.length)return s;let r=[],a=o[0].ymin,l=0;for(;r.length||o.length;){if(o.length){let u=-1;for(let m=0;m<o.length&&!(o[m].ymin>a);m++)u=m;o.splice(0,u+1).forEach(m=>{r.push({s:a,edge:m})})}if(r=r.filter(u=>!(u.edge.ymax<=a)),r.sort((u,d)=>u.edge.x===d.edge.x?0:(u.edge.x-d.edge.x)/Math.abs(u.edge.x-d.edge.x)),(n!==1||l%t===0)&&r.length>1)for(let u=0;u<r.length;u=u+2){const d=u+1;if(d>=r.length)break;const m=r[u].edge,f=r[d].edge;s.push([[Math.round(m.x),a],[Math.round(f.x),a]])}a+=n,r.forEach(u=>{u.edge.x=u.edge.x+n*u.edge.islope}),l++}return s}function Za(e,t){var n;const i=t.hachureAngle+90;let s=t.hachureGap;s<0&&(s=t.strokeWidth*4),s=Math.round(Math.max(s,.1));let o=1;return t.roughness>=1&&(((n=t.randomizer)===null||n===void 0?void 0:n.next())||Math.random())>.7&&(o=s),Ij(e,s,i,o||1)}class $m{constructor(t){this.helper=t}fillPolygons(t,n){return this._fillPolygons(t,n)}_fillPolygons(t,n){const i=Za(t,n);return{type:"fillSketch",ops:this.renderLines(i,n)}}renderLines(t,n){const i=[];for(const s of t)i.push(...this.helper.doubleLineOps(s[0][0],s[0][1],s[1][0],s[1][1],n));return i}}function Jc(e){const t=e[0],n=e[1];return Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2))}class jj extends $m{fillPolygons(t,n){let i=n.hachureGap;i<0&&(i=n.strokeWidth*4),i=Math.max(i,.1);const s=Object.assign({},n,{hachureGap:i}),o=Za(t,s),r=Math.PI/180*n.hachureAngle,a=[],l=i*.5*Math.cos(r),u=i*.5*Math.sin(r);for(const[m,f]of o)Jc([m,f])&&a.push([[m[0]-l,m[1]+u],[...f]],[[m[0]+l,m[1]-u],[...f]]);return{type:"fillSketch",ops:this.renderLines(a,n)}}}class Pj extends $m{fillPolygons(t,n){const i=this._fillPolygons(t,n),s=Object.assign({},n,{hachureAngle:n.hachureAngle+90}),o=this._fillPolygons(t,s);return i.ops=i.ops.concat(o.ops),i}}class Aj{constructor(t){this.helper=t}fillPolygons(t,n){n=Object.assign({},n,{hachureAngle:0});const i=Za(t,n);return this.dotsOnLines(i,n)}dotsOnLines(t,n){const i=[];let s=n.hachureGap;s<0&&(s=n.strokeWidth*4),s=Math.max(s,.1);let o=n.fillWeight;o<0&&(o=n.strokeWidth/2);const r=s/4;for(const a of t){const l=Jc(a),u=l/s,d=Math.ceil(u)-1,m=l-d*s,f=(a[0][0]+a[1][0])/2-s/4,h=Math.min(a[0][1],a[1][1]);for(let g=0;g<d;g++){const b=h+m+g*s,x=f-r+Math.random()*2*r,y=b-r+Math.random()*2*r,w=this.helper.ellipse(x,y,o,o,n);i.push(...w.ops)}}return{type:"fillSketch",ops:i}}}class Mj{constructor(t){this.helper=t}fillPolygons(t,n){const i=Za(t,n);return{type:"fillSketch",ops:this.dashedLine(i,n)}}dashedLine(t,n){const i=n.dashOffset<0?n.hachureGap<0?n.strokeWidth*4:n.hachureGap:n.dashOffset,s=n.dashGap<0?n.hachureGap<0?n.strokeWidth*4:n.hachureGap:n.dashGap,o=[];return t.forEach(r=>{const a=Jc(r),l=Math.floor(a/(i+s)),u=(a+s-l*(i+s))/2;let d=r[0],m=r[1];d[0]>m[0]&&(d=r[1],m=r[0]);const f=Math.atan((m[1]-d[1])/(m[0]-d[0]));for(let h=0;h<l;h++){const g=h*(i+s),b=g+i,x=[d[0]+g*Math.cos(f)+u*Math.cos(f),d[1]+g*Math.sin(f)+u*Math.sin(f)],y=[d[0]+b*Math.cos(f)+u*Math.cos(f),d[1]+b*Math.sin(f)+u*Math.sin(f)];o.push(...this.helper.doubleLineOps(x[0],x[1],y[0],y[1],n))}}),o}}class Vj{constructor(t){this.helper=t}fillPolygons(t,n){const i=n.hachureGap<0?n.strokeWidth*4:n.hachureGap,s=n.zigzagOffset<0?i:n.zigzagOffset;n=Object.assign({},n,{hachureGap:i+s});const o=Za(t,n);return{type:"fillSketch",ops:this.zigzagLines(o,s,n)}}zigzagLines(t,n,i){const s=[];return t.forEach(o=>{const r=Jc(o),a=Math.round(r/(2*n));let l=o[0],u=o[1];l[0]>u[0]&&(l=o[1],u=o[0]);const d=Math.atan((u[1]-l[1])/(u[0]-l[0]));for(let m=0;m<a;m++){const f=m*2*n,h=(m+1)*2*n,g=Math.sqrt(2*Math.pow(n,2)),b=[l[0]+f*Math.cos(d),l[1]+f*Math.sin(d)],x=[l[0]+h*Math.cos(d),l[1]+h*Math.sin(d)],y=[b[0]+g*Math.cos(d+Math.PI/4),b[1]+g*Math.sin(d+Math.PI/4)];s.push(...this.helper.doubleLineOps(b[0],b[1],y[0],y[1],i),...this.helper.doubleLineOps(y[0],y[1],x[0],x[1],i))}}),s}}const Kn={};function Uj(e,t){let n=e.fillStyle||"hachure";if(!Kn[n])switch(n){case"zigzag":Kn[n]||(Kn[n]=new jj(t));break;case"cross-hatch":Kn[n]||(Kn[n]=new Pj(t));break;case"dots":Kn[n]||(Kn[n]=new Aj(t));break;case"dashed":Kn[n]||(Kn[n]=new Mj(t));break;case"zigzag-line":Kn[n]||(Kn[n]=new Vj(t));break;case"hachure":default:n="hachure",Kn[n]||(Kn[n]=new $m(t));break}return Kn[n]}function Rj(){return Math.floor(Math.random()*2**31)}class qj{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}}const Lj=0,Ad=1,Dw=2,pl={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};function Oj(e){const t=new Array;for(;e!=="";)if(e.match(/^([ \t\r\n,]+)/))e=e.substr(RegExp.$1.length);else if(e.match(/^([aAcChHlLmMqQsStTvVzZ])/))t[t.length]={type:Lj,text:RegExp.$1},e=e.substr(RegExp.$1.length);else if(e.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))t[t.length]={type:Ad,text:`${parseFloat(RegExp.$1)}`},e=e.substr(RegExp.$1.length);else return[];return t[t.length]={type:Dw,text:""},t}function Su(e,t){return e.type===t}function Xm(e){const t=[],n=Oj(e);let i="BOD",s=0,o=n[s];for(;!Su(o,Dw);){let r=0;const a=[];if(i==="BOD")if(o.text==="M"||o.text==="m")s++,r=pl[o.text],i=o.text;else return Xm("M0,0"+e);else Su(o,Ad)?r=pl[i]:(s++,r=pl[o.text],i=o.text);if(s+r<n.length){for(let l=s;l<s+r;l++){const u=n[l];if(Su(u,Ad))a[a.length]=+u.text;else throw new Error("Param not a number: "+i+","+u.text)}if(typeof pl[i]=="number"){const l={key:i,data:a};t.push(l),s+=r,o=n[s],i==="M"&&(i="L"),i==="m"&&(i="l")}else throw new Error("Bad segment: "+i)}else throw new Error("Path data ended short")}return t}function _w(e){let t=0,n=0,i=0,s=0;const o=[];for(const{key:r,data:a}of e)switch(r){case"M":o.push({key:"M",data:[...a]}),[t,n]=a,[i,s]=a;break;case"m":t+=a[0],n+=a[1],o.push({key:"M",data:[t,n]}),i=t,s=n;break;case"L":o.push({key:"L",data:[...a]}),[t,n]=a;break;case"l":t+=a[0],n+=a[1],o.push({key:"L",data:[t,n]});break;case"C":o.push({key:"C",data:[...a]}),t=a[4],n=a[5];break;case"c":{const l=a.map((u,d)=>d%2?u+n:u+t);o.push({key:"C",data:l}),t=l[4],n=l[5];break}case"Q":o.push({key:"Q",data:[...a]}),t=a[2],n=a[3];break;case"q":{const l=a.map((u,d)=>d%2?u+n:u+t);o.push({key:"Q",data:l}),t=l[2],n=l[3];break}case"A":o.push({key:"A",data:[...a]}),t=a[5],n=a[6];break;case"a":t+=a[5],n+=a[6],o.push({key:"A",data:[a[0],a[1],a[2],a[3],a[4],t,n]});break;case"H":o.push({key:"H",data:[...a]}),t=a[0];break;case"h":t+=a[0],o.push({key:"H",data:[t]});break;case"V":o.push({key:"V",data:[...a]}),n=a[0];break;case"v":n+=a[0],o.push({key:"V",data:[n]});break;case"S":o.push({key:"S",data:[...a]}),t=a[2],n=a[3];break;case"s":{const l=a.map((u,d)=>d%2?u+n:u+t);o.push({key:"S",data:l}),t=l[2],n=l[3];break}case"T":o.push({key:"T",data:[...a]}),t=a[0],n=a[1];break;case"t":t+=a[0],n+=a[1],o.push({key:"T",data:[t,n]});break;case"Z":case"z":o.push({key:"Z",data:[]}),t=i,n=s;break}return o}function Iw(e){const t=[];let n="",i=0,s=0,o=0,r=0,a=0,l=0;for(const{key:u,data:d}of e){switch(u){case"M":t.push({key:"M",data:[...d]}),[i,s]=d,[o,r]=d;break;case"C":t.push({key:"C",data:[...d]}),i=d[4],s=d[5],a=d[2],l=d[3];break;case"L":t.push({key:"L",data:[...d]}),[i,s]=d;break;case"H":i=d[0],t.push({key:"L",data:[i,s]});break;case"V":s=d[0],t.push({key:"L",data:[i,s]});break;case"S":{let m=0,f=0;n==="C"||n==="S"?(m=i+(i-a),f=s+(s-l)):(m=i,f=s),t.push({key:"C",data:[m,f,...d]}),a=d[0],l=d[1],i=d[2],s=d[3];break}case"T":{const[m,f]=d;let h=0,g=0;n==="Q"||n==="T"?(h=i+(i-a),g=s+(s-l)):(h=i,g=s);const b=i+2*(h-i)/3,x=s+2*(g-s)/3,y=m+2*(h-m)/3,w=f+2*(g-f)/3;t.push({key:"C",data:[b,x,y,w,m,f]}),a=h,l=g,i=m,s=f;break}case"Q":{const[m,f,h,g]=d,b=i+2*(m-i)/3,x=s+2*(f-s)/3,y=h+2*(m-h)/3,w=g+2*(f-g)/3;t.push({key:"C",data:[b,x,y,w,h,g]}),a=m,l=f,i=h,s=g;break}case"A":{const m=Math.abs(d[0]),f=Math.abs(d[1]),h=d[2],g=d[3],b=d[4],x=d[5],y=d[6];m===0||f===0?(t.push({key:"C",data:[i,s,x,y,x,y]}),i=x,s=y):(i!==x||s!==y)&&(Cw(i,s,x,y,m,f,h,g,b).forEach(function(v){t.push({key:"C",data:v})}),i=x,s=y);break}case"Z":t.push({key:"Z",data:[]}),i=o,s=r;break}n=u}return t}function zj(e){return Math.PI*e/180}function Br(e,t,n){const i=e*Math.cos(n)-t*Math.sin(n),s=e*Math.sin(n)+t*Math.cos(n);return[i,s]}function Cw(e,t,n,i,s,o,r,a,l,u){const d=zj(r);let m=[],f=0,h=0,g=0,b=0;if(u)[f,h,g,b]=u;else{[e,t]=Br(e,t,-d),[n,i]=Br(n,i,-d);const _=(e-n)/2,D=(t-i)/2;let C=_*_/(s*s)+D*D/(o*o);C>1&&(C=Math.sqrt(C),s=C*s,o=C*o);const M=a===l?-1:1,U=s*s,F=o*o,$=U*F-U*D*D-F*_*_,A=U*D*D+F*_*_,H=M*Math.sqrt(Math.abs($/A));g=H*s*D/o+(e+n)/2,b=H*-o*_/s+(t+i)/2,f=Math.asin(parseFloat(((t-b)/o).toFixed(9))),h=Math.asin(parseFloat(((i-b)/o).toFixed(9))),e<g&&(f=Math.PI-f),n<g&&(h=Math.PI-h),f<0&&(f=Math.PI*2+f),h<0&&(h=Math.PI*2+h),l&&f>h&&(f=f-Math.PI*2),!l&&h>f&&(h=h-Math.PI*2)}let x=h-f;if(Math.abs(x)>Math.PI*120/180){const _=h,D=n,C=i;l&&h>f?h=f+Math.PI*120/180*1:h=f+Math.PI*120/180*-1,n=g+s*Math.cos(h),i=b+o*Math.sin(h),m=Cw(n,i,D,C,s,o,r,0,l,[h,_,g,b])}x=h-f;const y=Math.cos(f),w=Math.sin(f),v=Math.cos(h),S=Math.sin(h),k=Math.tan(x/4),N=4/3*s*k,E=4/3*o*k,I=[e,t],T=[e+N*w,t-E*y],j=[n+N*S,i-E*v],V=[n,i];if(T[0]=2*I[0]-T[0],T[1]=2*I[1]-T[1],u)return[T,j,V].concat(m);{m=[T,j,V].concat(m);const _=[];for(let D=0;D<m.length;D+=3){const C=Br(m[D][0],m[D][1],d),M=Br(m[D+1][0],m[D+1][1],d),U=Br(m[D+2][0],m[D+2][1],d);_.push([C[0],C[1],M[0],M[1],U[0],U[1]])}return _}}const Bj={randOffset:$j,randOffsetWithRange:Xj,ellipse:Hj,doubleLineOps:Kj};function jw(e,t,n,i,s){return{type:"path",ops:Ms(e,t,n,i,s)}}function Ul(e,t,n){const i=(e||[]).length;if(i>2){const s=[];for(let o=0;o<i-1;o++)s.push(...Ms(e[o][0],e[o][1],e[o+1][0],e[o+1][1],n));return t&&s.push(...Ms(e[i-1][0],e[i-1][1],e[0][0],e[0][1],n)),{type:"path",ops:s}}else if(i===2)return jw(e[0][0],e[0][1],e[1][0],e[1][1],n);return{type:"path",ops:[]}}function Fj(e,t){return Ul(e,!0,t)}function Gj(e,t,n,i,s){const o=[[e,t],[e+n,t],[e+n,t+i],[e,t+i]];return Fj(o,s)}function Nh(e,t){if(e.length){const i=typeof e[0][0]=="number"?[e]:e,s=fl(i[0],1*(1+t.roughness*.2),t),o=t.disableMultiStroke?[]:fl(i[0],1.5*(1+t.roughness*.22),Eh(t));for(let r=1;r<i.length;r++){const a=i[r];if(a.length){const l=fl(a,1*(1+t.roughness*.2),t),u=t.disableMultiStroke?[]:fl(a,1.5*(1+t.roughness*.22),Eh(t));for(const d of l)d.op!=="move"&&s.push(d);for(const d of u)d.op!=="move"&&o.push(d)}}return{type:"path",ops:s.concat(o)}}return{type:"path",ops:[]}}function Hj(e,t,n,i,s){const o=Pw(n,i,s);return Md(e,t,s,o).opset}function Pw(e,t,n){const i=Math.sqrt(Math.PI*2*Math.sqrt((Math.pow(e/2,2)+Math.pow(t/2,2))/2)),s=Math.ceil(Math.max(n.curveStepCount,n.curveStepCount/Math.sqrt(200)*i)),o=Math.PI*2/s;let r=Math.abs(e/2),a=Math.abs(t/2);const l=1-n.curveFitting;return r+=Oe(r*l,n),a+=Oe(a*l,n),{increment:o,rx:r,ry:a}}function Md(e,t,n,i){const[s,o]=Sh(i.increment,e,t,i.rx,i.ry,1,i.increment*oc(.1,oc(.4,1,n),n),n);let r=rc(s,null,n);if(!n.disableMultiStroke&&n.roughness!==0){const[a]=Sh(i.increment,e,t,i.rx,i.ry,1.5,0,n),l=rc(a,null,n);r=r.concat(l)}return{estimatedPoints:o,opset:{type:"path",ops:r}}}function vh(e,t,n,i,s,o,r,a,l){const u=e,d=t;let m=Math.abs(n/2),f=Math.abs(i/2);m+=Oe(m*.01,l),f+=Oe(f*.01,l);let h=s,g=o;for(;h<0;)h+=Math.PI*2,g+=Math.PI*2;g-h>Math.PI*2&&(h=0,g=Math.PI*2);const b=Math.PI*2/l.curveStepCount,x=Math.min(b/2,(g-h)/2),y=Th(x,u,d,m,f,h,g,1,l);if(!l.disableMultiStroke){const w=Th(x,u,d,m,f,h,g,1.5,l);y.push(...w)}return r&&(a?y.push(...Ms(u,d,u+m*Math.cos(h),d+f*Math.sin(h),l),...Ms(u,d,u+m*Math.cos(g),d+f*Math.sin(g),l)):y.push({op:"lineTo",data:[u,d]},{op:"lineTo",data:[u+m*Math.cos(h),d+f*Math.sin(h)]})),{type:"path",ops:y}}function kh(e,t){const n=Iw(_w(Xm(e))),i=[];let s=[0,0],o=[0,0];for(const{key:r,data:a}of n)switch(r){case"M":{o=[a[0],a[1]],s=[a[0],a[1]];break}case"L":i.push(...Ms(o[0],o[1],a[0],a[1],t)),o=[a[0],a[1]];break;case"C":{const[l,u,d,m,f,h]=a;i.push(...Yj(l,u,d,m,f,h,o,t)),o=[f,h];break}case"Z":i.push(...Ms(o[0],o[1],s[0],s[1],t)),o=[s[0],s[1]];break}return{type:"path",ops:i}}function Tu(e,t){const n=[];for(const i of e)if(i.length){const s=t.maxRandomnessOffset||0,o=i.length;if(o>2){n.push({op:"move",data:[i[0][0]+Oe(s,t),i[0][1]+Oe(s,t)]});for(let r=1;r<o;r++)n.push({op:"lineTo",data:[i[r][0]+Oe(s,t),i[r][1]+Oe(s,t)]})}}return{type:"fillPath",ops:n}}function Lo(e,t){return Uj(t,Bj).fillPolygons(e,t)}function Wj(e,t,n,i,s,o,r){const a=e,l=t;let u=Math.abs(n/2),d=Math.abs(i/2);u+=Oe(u*.01,r),d+=Oe(d*.01,r);let m=s,f=o;for(;m<0;)m+=Math.PI*2,f+=Math.PI*2;f-m>Math.PI*2&&(m=0,f=Math.PI*2);const h=(f-m)/r.curveStepCount,g=[];for(let b=m;b<=f;b=b+h)g.push([a+u*Math.cos(b),l+d*Math.sin(b)]);return g.push([a+u*Math.cos(f),l+d*Math.sin(f)]),g.push([a,l]),Lo([g],r)}function $j(e,t){return Oe(e,t)}function Xj(e,t,n){return oc(e,t,n)}function Kj(e,t,n,i,s){return Ms(e,t,n,i,s,!0)}function Eh(e){const t=Object.assign({},e);return t.randomizer=void 0,e.seed&&(t.seed=e.seed+1),t}function Aw(e){return e.randomizer||(e.randomizer=new qj(e.seed||0)),e.randomizer.next()}function oc(e,t,n,i=1){return n.roughness*i*(Aw(n)*(t-e)+e)}function Oe(e,t,n=1){return oc(-e,e,t,n)}function Ms(e,t,n,i,s,o=!1){const r=o?s.disableMultiStrokeFill:s.disableMultiStroke,a=Vd(e,t,n,i,s,!0,!1);if(r)return a;const l=Vd(e,t,n,i,s,!0,!0);return a.concat(l)}function Vd(e,t,n,i,s,o,r){const a=Math.pow(e-n,2)+Math.pow(t-i,2),l=Math.sqrt(a);let u=1;l<200?u=1:l>500?u=.4:u=-.0016668*l+1.233334;let d=s.maxRandomnessOffset||0;d*d*100>a&&(d=l/10);const m=d/2,f=.2+Aw(s)*.2;let h=s.bowing*s.maxRandomnessOffset*(i-t)/200,g=s.bowing*s.maxRandomnessOffset*(e-n)/200;h=Oe(h,s,u),g=Oe(g,s,u);const b=[],x=()=>Oe(m,s,u),y=()=>Oe(d,s,u),w=s.preserveVertices;return r?b.push({op:"move",data:[e+(w?0:x()),t+(w?0:x())]}):b.push({op:"move",data:[e+(w?0:Oe(d,s,u)),t+(w?0:Oe(d,s,u))]}),r?b.push({op:"bcurveTo",data:[h+e+(n-e)*f+x(),g+t+(i-t)*f+x(),h+e+2*(n-e)*f+x(),g+t+2*(i-t)*f+x(),n+(w?0:x()),i+(w?0:x())]}):b.push({op:"bcurveTo",data:[h+e+(n-e)*f+y(),g+t+(i-t)*f+y(),h+e+2*(n-e)*f+y(),g+t+2*(i-t)*f+y(),n+(w?0:y()),i+(w?0:y())]}),b}function fl(e,t,n){if(!e.length)return[];const i=[];i.push([e[0][0]+Oe(t,n),e[0][1]+Oe(t,n)]),i.push([e[0][0]+Oe(t,n),e[0][1]+Oe(t,n)]);for(let s=1;s<e.length;s++)i.push([e[s][0]+Oe(t,n),e[s][1]+Oe(t,n)]),s===e.length-1&&i.push([e[s][0]+Oe(t,n),e[s][1]+Oe(t,n)]);return rc(i,null,n)}function rc(e,t,n){const i=e.length,s=[];if(i>3){const o=[],r=1-n.curveTightness;s.push({op:"move",data:[e[1][0],e[1][1]]});for(let a=1;a+2<i;a++){const l=e[a];o[0]=[l[0],l[1]],o[1]=[l[0]+(r*e[a+1][0]-r*e[a-1][0])/6,l[1]+(r*e[a+1][1]-r*e[a-1][1])/6],o[2]=[e[a+1][0]+(r*e[a][0]-r*e[a+2][0])/6,e[a+1][1]+(r*e[a][1]-r*e[a+2][1])/6],o[3]=[e[a+1][0],e[a+1][1]],s.push({op:"bcurveTo",data:[o[1][0],o[1][1],o[2][0],o[2][1],o[3][0],o[3][1]]})}}else i===3?(s.push({op:"move",data:[e[1][0],e[1][1]]}),s.push({op:"bcurveTo",data:[e[1][0],e[1][1],e[2][0],e[2][1],e[2][0],e[2][1]]})):i===2&&s.push(...Vd(e[0][0],e[0][1],e[1][0],e[1][1],n,!0,!0));return s}function Sh(e,t,n,i,s,o,r,a){const l=a.roughness===0,u=[],d=[];if(l){e=e/4,d.push([t+i*Math.cos(-e),n+s*Math.sin(-e)]);for(let m=0;m<=Math.PI*2;m=m+e){const f=[t+i*Math.cos(m),n+s*Math.sin(m)];u.push(f),d.push(f)}d.push([t+i*Math.cos(0),n+s*Math.sin(0)]),d.push([t+i*Math.cos(e),n+s*Math.sin(e)])}else{const m=Oe(.5,a)-Math.PI/2;d.push([Oe(o,a)+t+.9*i*Math.cos(m-e),Oe(o,a)+n+.9*s*Math.sin(m-e)]);const f=Math.PI*2+m-.01;for(let h=m;h<f;h=h+e){const g=[Oe(o,a)+t+i*Math.cos(h),Oe(o,a)+n+s*Math.sin(h)];u.push(g),d.push(g)}d.push([Oe(o,a)+t+i*Math.cos(m+Math.PI*2+r*.5),Oe(o,a)+n+s*Math.sin(m+Math.PI*2+r*.5)]),d.push([Oe(o,a)+t+.98*i*Math.cos(m+r),Oe(o,a)+n+.98*s*Math.sin(m+r)]),d.push([Oe(o,a)+t+.9*i*Math.cos(m+r*.5),Oe(o,a)+n+.9*s*Math.sin(m+r*.5)])}return[d,u]}function Th(e,t,n,i,s,o,r,a,l){const u=o+Oe(.1,l),d=[];d.push([Oe(a,l)+t+.9*i*Math.cos(u-e),Oe(a,l)+n+.9*s*Math.sin(u-e)]);for(let m=u;m<=r;m=m+e)d.push([Oe(a,l)+t+i*Math.cos(m),Oe(a,l)+n+s*Math.sin(m)]);return d.push([t+i*Math.cos(r),n+s*Math.sin(r)]),d.push([t+i*Math.cos(r),n+s*Math.sin(r)]),rc(d,null,l)}function Yj(e,t,n,i,s,o,r,a){const l=[],u=[a.maxRandomnessOffset||1,(a.maxRandomnessOffset||1)+.3];let d=[0,0];const m=a.disableMultiStroke?1:2,f=a.preserveVertices;for(let h=0;h<m;h++)h===0?l.push({op:"move",data:[r[0],r[1]]}):l.push({op:"move",data:[r[0]+(f?0:Oe(u[0],a)),r[1]+(f?0:Oe(u[0],a))]}),d=f?[s,o]:[s+Oe(u[h],a),o+Oe(u[h],a)],l.push({op:"bcurveTo",data:[e+Oe(u[h],a),t+Oe(u[h],a),n+Oe(u[h],a),i+Oe(u[h],a),d[0],d[1]]});return l}function Fr(e){return[...e]}function Dh(e,t=0){const n=e.length;if(n<3)throw new Error("A curve must have at least three points.");const i=[];if(n===3)i.push(Fr(e[0]),Fr(e[1]),Fr(e[2]),Fr(e[2]));else{const s=[];s.push(e[0],e[0]);for(let a=1;a<e.length;a++)s.push(e[a]),a===e.length-1&&s.push(e[a]);const o=[],r=1-t;i.push(Fr(s[0]));for(let a=1;a+2<s.length;a++){const l=s[a];o[0]=[l[0],l[1]],o[1]=[l[0]+(r*s[a+1][0]-r*s[a-1][0])/6,l[1]+(r*s[a+1][1]-r*s[a-1][1])/6],o[2]=[s[a+1][0]+(r*s[a][0]-r*s[a+2][0])/6,s[a+1][1]+(r*s[a][1]-r*s[a+2][1])/6],o[3]=[s[a+1][0],s[a+1][1]],i.push(o[1],o[2],o[3])}}return i}function Zj(e,t){return Math.sqrt(Rl(e,t))}function Rl(e,t){return Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)}function Jj(e,t,n){const i=Rl(t,n);if(i===0)return Rl(e,t);let s=((e[0]-t[0])*(n[0]-t[0])+(e[1]-t[1])*(n[1]-t[1]))/i;return s=Math.max(0,Math.min(1,s)),Rl(e,Js(t,n,s))}function Js(e,t,n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n]}function Qj(e,t){const n=e[t+0],i=e[t+1],s=e[t+2],o=e[t+3];let r=3*i[0]-2*n[0]-o[0];r*=r;let a=3*i[1]-2*n[1]-o[1];a*=a;let l=3*s[0]-2*o[0]-n[0];l*=l;let u=3*s[1]-2*o[1]-n[1];return u*=u,r<l&&(r=l),a<u&&(a=u),r+a}function Ud(e,t,n,i){const s=i||[];if(Qj(e,t)<n){const o=e[t+0];s.length?Zj(s[s.length-1],o)>1&&s.push(o):s.push(o),s.push(e[t+3])}else{const r=e[t+0],a=e[t+1],l=e[t+2],u=e[t+3],d=Js(r,a,.5),m=Js(a,l,.5),f=Js(l,u,.5),h=Js(d,m,.5),g=Js(m,f,.5),b=Js(h,g,.5);Ud([r,d,h,b],0,n,s),Ud([b,g,f,u],0,n,s)}return s}function eP(e,t){return ac(e,0,e.length,t)}function ac(e,t,n,i,s){const o=s||[],r=e[t],a=e[n-1];let l=0,u=1;for(let d=t+1;d<n-1;++d){const m=Jj(e[d],r,a);m>l&&(l=m,u=d)}return Math.sqrt(l)>i?(ac(e,t,u+1,i,o),ac(e,u,n,i,o)):(o.length||o.push(r),o.push(a)),o}function Rd(e,t=.15,n){const i=[],s=(e.length-1)/3;for(let o=0;o<s;o++){const r=o*3;Ud(e,r,t,i)}return n&&n>0?ac(i,0,i.length,n):i}function tP(e,t,n){const i=Xm(e),s=Iw(_w(i)),o=[];let r=[],a=[0,0],l=[];const u=()=>{l.length>=4&&r.push(...Rd(l,t)),l=[]},d=()=>{u(),r.length&&(o.push(r),r=[])};for(const{key:f,data:h}of s)switch(f){case"M":d(),a=[h[0],h[1]],r.push(a);break;case"L":u(),r.push([h[0],h[1]]);break;case"C":if(!l.length){const g=r.length?r[r.length-1]:a;l.push([g[0],g[1]])}l.push([h[0],h[1]]),l.push([h[2],h[3]]),l.push([h[4],h[5]]);break;case"Z":u(),r.push([a[0],a[1]]);break}if(d(),!n)return o;const m=[];for(const f of o){const h=eP(f,n);h.length&&m.push(h)}return m}const si="none";class lc{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return Rj()}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,n,i){return{shape:t,sets:n||[],options:i||this.defaultOptions}}line(t,n,i,s,o){const r=this._o(o);return this._d("line",[jw(t,n,i,s,r)],r)}rectangle(t,n,i,s,o){const r=this._o(o),a=[],l=Gj(t,n,i,s,r);if(r.fill){const u=[[t,n],[t+i,n],[t+i,n+s],[t,n+s]];r.fillStyle==="solid"?a.push(Tu([u],r)):a.push(Lo([u],r))}return r.stroke!==si&&a.push(l),this._d("rectangle",a,r)}ellipse(t,n,i,s,o){const r=this._o(o),a=[],l=Pw(i,s,r),u=Md(t,n,r,l);if(r.fill)if(r.fillStyle==="solid"){const d=Md(t,n,r,l).opset;d.type="fillPath",a.push(d)}else a.push(Lo([u.estimatedPoints],r));return r.stroke!==si&&a.push(u.opset),this._d("ellipse",a,r)}circle(t,n,i,s){const o=this.ellipse(t,n,i,i,s);return o.shape="circle",o}linearPath(t,n){const i=this._o(n);return this._d("linearPath",[Ul(t,!1,i)],i)}arc(t,n,i,s,o,r,a=!1,l){const u=this._o(l),d=[],m=vh(t,n,i,s,o,r,a,!0,u);if(a&&u.fill)if(u.fillStyle==="solid"){const f=Object.assign({},u);f.disableMultiStroke=!0;const h=vh(t,n,i,s,o,r,!0,!1,f);h.type="fillPath",d.push(h)}else d.push(Wj(t,n,i,s,o,r,u));return u.stroke!==si&&d.push(m),this._d("arc",d,u)}curve(t,n){const i=this._o(n),s=[],o=Nh(t,i);if(i.fill&&i.fill!==si)if(i.fillStyle==="solid"){const r=Nh(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));s.push({type:"fillPath",ops:this._mergedShape(r.ops)})}else{const r=[],a=t;if(a.length){const u=typeof a[0][0]=="number"?[a]:a;for(const d of u)d.length<3?r.push(...d):d.length===3?r.push(...Rd(Dh([d[0],d[0],d[1],d[2]]),10,(1+i.roughness)/2)):r.push(...Rd(Dh(d),10,(1+i.roughness)/2))}r.length&&s.push(Lo([r],i))}return i.stroke!==si&&s.push(o),this._d("curve",s,i)}polygon(t,n){const i=this._o(n),s=[],o=Ul(t,!0,i);return i.fill&&(i.fillStyle==="solid"?s.push(Tu([t],i)):s.push(Lo([t],i))),i.stroke!==si&&s.push(o),this._d("polygon",s,i)}path(t,n){const i=this._o(n),s=[];if(!t)return this._d("path",s,i);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");const o=i.fill&&i.fill!=="transparent"&&i.fill!==si,r=i.stroke!==si,a=!!(i.simplification&&i.simplification<1),l=a?4-4*(i.simplification||1):(1+i.roughness)/2,u=tP(t,1,l),d=kh(t,i);if(o)if(i.fillStyle==="solid")if(u.length===1){const m=kh(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));s.push({type:"fillPath",ops:this._mergedShape(m.ops)})}else s.push(Tu(u,i));else s.push(Lo(u,i));return r&&(a?u.forEach(m=>{s.push(Ul(m,!1,i))}):s.push(d)),this._d("path",s,i)}opsToPath(t,n){let i="";for(const s of t.ops){const o=typeof n=="number"&&n>=0?s.data.map(r=>+r.toFixed(n)):s.data;switch(s.op){case"move":i+=`M${o[0]} ${o[1]} `;break;case"bcurveTo":i+=`C${o[0]} ${o[1]}, ${o[2]} ${o[3]}, ${o[4]} ${o[5]} `;break;case"lineTo":i+=`L${o[0]} ${o[1]} `;break}}return i.trim()}toPaths(t){const n=t.sets||[],i=t.options||this.defaultOptions,s=[];for(const o of n){let r=null;switch(o.type){case"path":r={d:this.opsToPath(o),stroke:i.stroke,strokeWidth:i.strokeWidth,fill:si};break;case"fillPath":r={d:this.opsToPath(o),stroke:si,strokeWidth:0,fill:i.fill||si};break;case"fillSketch":r=this.fillSketch(o,i);break}r&&s.push(r)}return s}fillSketch(t,n){let i=n.fillWeight;return i<0&&(i=n.strokeWidth/2),{d:this.opsToPath(t),stroke:n.fill||si,strokeWidth:i,fill:si}}_mergedShape(t){return t.filter((n,i)=>i===0?!0:n.op!=="move")}}class nP{constructor(t,n){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new lc(n)}draw(t){const n=t.sets||[],i=t.options||this.getDefaultOptions(),s=this.ctx,o=t.options.fixedDecimalPlaceDigits;for(const r of n)switch(r.type){case"path":s.save(),s.strokeStyle=i.stroke==="none"?"transparent":i.stroke,s.lineWidth=i.strokeWidth,i.strokeLineDash&&s.setLineDash(i.strokeLineDash),i.strokeLineDashOffset&&(s.lineDashOffset=i.strokeLineDashOffset),this._drawToContext(s,r,o),s.restore();break;case"fillPath":{s.save(),s.fillStyle=i.fill||"";const a=t.shape==="curve"||t.shape==="polygon"||t.shape==="path"?"evenodd":"nonzero";this._drawToContext(s,r,o,a),s.restore();break}case"fillSketch":this.fillSketch(s,r,i);break}}fillSketch(t,n,i){let s=i.fillWeight;s<0&&(s=i.strokeWidth/2),t.save(),i.fillLineDash&&t.setLineDash(i.fillLineDash),i.fillLineDashOffset&&(t.lineDashOffset=i.fillLineDashOffset),t.strokeStyle=i.fill||"",t.lineWidth=s,this._drawToContext(t,n,i.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,n,i,s="nonzero"){t.beginPath();for(const o of n.ops){const r=typeof i=="number"&&i>=0?o.data.map(a=>+a.toFixed(i)):o.data;switch(o.op){case"move":t.moveTo(r[0],r[1]);break;case"bcurveTo":t.bezierCurveTo(r[0],r[1],r[2],r[3],r[4],r[5]);break;case"lineTo":t.lineTo(r[0],r[1]);break}}n.type==="fillPath"?t.fill(s):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,n,i,s,o){const r=this.gen.line(t,n,i,s,o);return this.draw(r),r}rectangle(t,n,i,s,o){const r=this.gen.rectangle(t,n,i,s,o);return this.draw(r),r}ellipse(t,n,i,s,o){const r=this.gen.ellipse(t,n,i,s,o);return this.draw(r),r}circle(t,n,i,s){const o=this.gen.circle(t,n,i,s);return this.draw(o),o}linearPath(t,n){const i=this.gen.linearPath(t,n);return this.draw(i),i}polygon(t,n){const i=this.gen.polygon(t,n);return this.draw(i),i}arc(t,n,i,s,o,r,a=!1,l){const u=this.gen.arc(t,n,i,s,o,r,a,l);return this.draw(u),u}curve(t,n){const i=this.gen.curve(t,n);return this.draw(i),i}path(t,n){const i=this.gen.path(t,n);return this.draw(i),i}}const hl="http://www.w3.org/2000/svg";class iP{constructor(t,n){this.svg=t,this.gen=new lc(n)}draw(t){const n=t.sets||[],i=t.options||this.getDefaultOptions(),s=this.svg.ownerDocument||window.document,o=s.createElementNS(hl,"g"),r=t.options.fixedDecimalPlaceDigits;for(const a of n){let l=null;switch(a.type){case"path":{l=s.createElementNS(hl,"path"),l.setAttribute("d",this.opsToPath(a,r)),l.setAttribute("stroke",i.stroke),l.setAttribute("stroke-width",i.strokeWidth+""),l.setAttribute("fill","none"),i.strokeLineDash&&l.setAttribute("stroke-dasharray",i.strokeLineDash.join(" ").trim()),i.strokeLineDashOffset&&l.setAttribute("stroke-dashoffset",`${i.strokeLineDashOffset}`);break}case"fillPath":{l=s.createElementNS(hl,"path"),l.setAttribute("d",this.opsToPath(a,r)),l.setAttribute("stroke","none"),l.setAttribute("stroke-width","0"),l.setAttribute("fill",i.fill||""),(t.shape==="curve"||t.shape==="polygon")&&l.setAttribute("fill-rule","evenodd");break}case"fillSketch":{l=this.fillSketch(s,a,i);break}}l&&o.appendChild(l)}return o}fillSketch(t,n,i){let s=i.fillWeight;s<0&&(s=i.strokeWidth/2);const o=t.createElementNS(hl,"path");return o.setAttribute("d",this.opsToPath(n,i.fixedDecimalPlaceDigits)),o.setAttribute("stroke",i.fill||""),o.setAttribute("stroke-width",s+""),o.setAttribute("fill","none"),i.fillLineDash&&o.setAttribute("stroke-dasharray",i.fillLineDash.join(" ").trim()),i.fillLineDashOffset&&o.setAttribute("stroke-dashoffset",`${i.fillLineDashOffset}`),o}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,n){return this.gen.opsToPath(t,n)}line(t,n,i,s,o){const r=this.gen.line(t,n,i,s,o);return this.draw(r)}rectangle(t,n,i,s,o){const r=this.gen.rectangle(t,n,i,s,o);return this.draw(r)}ellipse(t,n,i,s,o){const r=this.gen.ellipse(t,n,i,s,o);return this.draw(r)}circle(t,n,i,s){const o=this.gen.circle(t,n,i,s);return this.draw(o)}linearPath(t,n){const i=this.gen.linearPath(t,n);return this.draw(i)}polygon(t,n){const i=this.gen.polygon(t,n);return this.draw(i)}arc(t,n,i,s,o,r,a=!1,l){const u=this.gen.arc(t,n,i,s,o,r,a,l);return this.draw(u)}curve(t,n){const i=this.gen.curve(t,n);return this.draw(i)}path(t,n){const i=this.gen.path(t,n);return this.draw(i)}}const sP={canvas(e,t){return new nP(e,t)},svg(e,t){return new iP(e,t)},generator(e){return new lc(e)},newSeed(){return lc.newSeed()}};var Mw=function(e){return typeof e=="function"};function _h(e,t){if(e===t)return!0;for(var n=0;n<e.length;n++)if(!Object.is(e[n],t[n]))return!1;return!0}function Vw(e){var t=p.useRef(e);return t.current=e,t}var oP=function(e){Mw(e)||console.error("useUnmount expected parameter is a function, got ".concat(typeof e));var t=Vw(e);p.useEffect(function(){return function(){t.current()}},[])},rP=!!(typeof window<"u"&&window.document&&window.document.createElement);function Uw(e,t){if(rP){if(!e)return t;var n;return Mw(e)?n=e():"current"in e?n=e.current:n=e,n}}var aP=function(e){var t=function(n,i,s){var o=p.useRef(!1),r=p.useRef([]),a=p.useRef([]),l=p.useRef(void 0);e(function(){var u,d=Array.isArray(s)?s:[s],m=d.map(function(f){return Uw(f)});if(!o.current){o.current=!0,r.current=m,a.current=i,l.current=n();return}(m.length!==r.current.length||!_h(r.current,m)||!_h(a.current,i))&&((u=l.current)===null||u===void 0||u.call(l),r.current=m,a.current=i,l.current=n())}),oP(function(){var u;(u=l.current)===null||u===void 0||u.call(l),o.current=!1})};return t},lP=aP(p.useEffect);function In(e,t,n){n===void 0&&(n={});var i=n.enable,s=i===void 0?!0:i,o=Vw(t);lP(function(){if(s){var r=Uw(n.target,window);if(r!=null&&r.addEventListener){var a=function(u){return o.current(u)},l=Array.isArray(e)?e:[e];return l.forEach(function(u){r.addEventListener(u,a,{capture:n.capture,once:n.once,passive:n.passive})}),function(){l.forEach(function(u){r.removeEventListener(u,a,{capture:n.capture})})}}}},[e,n.capture,n.once,n.passive,s],n.target)}const cP=(e,t,n)=>{In("pointerdown",i=>{e.pointerDown(i)},{target:n}),In("pointermove",i=>{Mp.set(e,[i.x,i.y]),e.pointerMove(i)},{target:t}),In("pointerleave",i=>{Mp.delete(e),e.pointerLeave(i)},{target:t}),In("pointerup",i=>{e.pointerUp(i)},{target:t}),In("dblclick",i=>{J.isFocus(e)&&!J.hasBeenTextEditing(e)&&e.dblClick(i)},{target:n}),In("pointermove",i=>{mv.set(e,[i.x,i.y]),e.globalPointerMove(i)}),In("pointerup",i=>{e.globalPointerUp(i)}),In("keydown",i=>{e.globalKeyDown(i),J.isFocus(e)&&!J.hasBeenTextEditing(e)&&!pv(i.target)&&e.keyDown(i)}),In("keyup",i=>{J.isFocus(e)&&!J.hasBeenTextEditing(e)&&(e==null||e.keyUp(i))}),In("copy",i=>{J.isFocus(e)&&!J.hasBeenTextEditing(e)&&(i.preventDefault(),Vp(e,Ko.copy,i.clipboardData))}),In("paste",async i=>{if(J.isFocus(e)&&!J.isReadonly(e)&&!J.hasBeenTextEditing(e)){const s=J.getMovingPointInBoard(e);if(s){const o=Un(e,Rn(e,s[0],s[1])),r=await fv(i.clipboardData);e.insertFragment(r,o,Ko.paste)}}}),In("cut",i=>{J.isFocus(e)&&!J.isReadonly(e)&&!J.hasBeenTextEditing(e)&&(i.preventDefault(),Vp(e,Ko.cut,i.clipboardData),Zu(e))}),In("drop",i=>{J.isReadonly(e)||(i.preventDefault(),e.drop(i))},{target:t}),In("dragover",i=>{i.preventDefault()},{target:t})},uP=(e,t)=>{In("scroll",i=>{if(hv(e))gv(e,!1);else{const s=i.target;if(!s)return;const{scrollLeft:o,scrollTop:r}=s;bv(e,o,r)}},{target:t}),In("touchstart",i=>{i.preventDefault()},{target:t,passive:!1}),In("wheel",i=>{if(i.metaKey||i.ctrlKey){i.preventDefault();const{deltaX:s,deltaY:o}=i,r=e.viewport.zoom,a=Math.sign(o),l=xv*100,u=Math.abs(o);let d=o;u>l&&(d=l*a);let m=r-d/100;m+=Math.log10(Math.max(1,r))*-a*Math.min(1,u/20),Ue.updateZoom(e,m,J.getMovingPointInBoard(e))}},{target:t,passive:!1});const n=p.useRef(!1);p.useEffect(()=>{const i=new ResizeObserver(()=>{if(!n.current){n.current=!0;return}$b(e),va(e),Wl(e)});return i.observe(J.getBoardContainer(e)),()=>{i&&i.disconnect()}},[])},Km=p.createContext(null),Zt=()=>{const e=p.useContext(Km);if(!e)throw new Error("The `useBoard` hook must be used inside the <Plait> component's context.");const{board:t}=e;return t},Rw=()=>{const e=p.useContext(Km);if(!e)throw new Error("The `useBoard` hook must be used inside the <Plait> component's context.");const{listRender:t}=e;return t},dP=({style:e,className:t,children:n,afterInit:i})=>{var g,b;const s=p.useRef(null),o=p.useRef(null),r=p.useRef(null),a=p.useRef(null),l=p.useRef(null),u=p.useRef(null),d=p.useRef(null),m=p.useRef(null),f=Zt(),h=Rw();return p.useEffect(()=>{const x=sP.svg(s.current,{options:{roughness:0,strokeWidth:1}});Up.set(f,x),Rp.set(f,s.current),qp.set(f,!0),Lp.set(f,{lowerHost:o.current,host:r.current,upperHost:a.current,topHost:l.current,activeHost:u.current,container:m.current,viewportContainer:d.current});const y=new wv;return Op.set(f,y),zp.set(f,new Map),h.initialized||(h.initialize(f.children,{board:f,parent:f,parentG:J.getElementHost(f)}),i&&i(f)),$b(f),va(f),yv(f),()=>{Op.delete(f),Ju.delete(f),Qu.delete(f),Lp.delete(f),qp.delete(f),Rp.delete(f),Up.delete(f),zp.delete(f)}},[]),cP(f,d,s),uP(f,d),c.jsxDEV("div",{className:ne(t,Nv,`${mP()}`,`theme-${(g=f.theme)==null?void 0:g.themeColorMode}`,`pointer-${f.pointer}`,{focused:J.isFocus(f),readonly:J.isReadonly(f),"disabled-scroll":((b=f.options)==null?void 0:b.disabledScrollOnNonFocus)&&!J.isFocus(f)}),ref:m,style:e,children:c.jsxDEV("div",{className:"viewport-container",ref:d,style:{width:"100%",height:"100%",overflow:"auto"},children:[c.jsxDEV("svg",{ref:s,width:"100%",height:"100%",style:{position:"relative"},className:"board-host-svg",children:[c.jsxDEV("g",{className:"element-lower-host",ref:o},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:136,columnNumber:11},void 0),c.jsxDEV("g",{className:"element-host",ref:r},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:137,columnNumber:11},void 0),c.jsxDEV("g",{className:"element-upper-host",ref:a},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:138,columnNumber:11},void 0),c.jsxDEV("g",{className:"element-top-host",ref:l},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:139,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:129,columnNumber:9},void 0),c.jsxDEV("svg",{width:"100%",height:"100%",className:"board-active-svg",children:c.jsxDEV("g",{className:"active-host-g",ref:u},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:142,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:141,columnNumber:9},void 0),n]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:124,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:106,columnNumber:5},void 0)},mP=()=>vv?"safari":kv?"chrome":Ev?"firefox":"",pP=e=>{const t=e;return t.renderText=(n,i)=>{const s=Dc.createRoot(n);let o;const r=c.jsxDEV(Bp,{...i,afterInit:u=>{o=u,i.afterInit&&i.afterInit(u)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/plugins/with-react.tsx",lineNumber:22,columnNumber:7},void 0);s.render(r);let a={...i};return{destroy:()=>{setTimeout(()=>{s.unmount()},0)},update:u=>{if(!(u&&a&&!Object.keys(u).every(f=>u[f]===a[f])))return;const m=Ui.isReadOnly(o);a={...a,...u},s.render(c.jsxDEV(Bp,{...a},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/plugins/with-react.tsx",lineNumber:52,columnNumber:21},void 0)),m===!0&&a.readonly===!1?setTimeout(()=>{Ui.focus(o)},0):m===!1&&a.readonly===!0&&(Ui.blur(o),Ui.deselect(o))}}},t},fP=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:s}=e,o=[];let r=!1;return e.pointerDown=a=>{const l=[a.clientX,a.clientY];o.length<2&&(e.viewport.zoom,o.push({pointerId:a.pointerId,lastPoint:l,currentPoint:l,hasMoved:!1})),t(a)},e.pointerMove=a=>{const l=[a.clientX,a.clientY];if(o.length>=2){const u=o.find(d=>d.pointerId===a.pointerId);if(u&&(u.currentPoint=l,u.hasMoved=!0,o.length===2&&o.every(d=>d.hasMoved))){const d=o[0],m=o[1],f=Fp(...d.lastPoint,...m.lastPoint),h=Fp(...d.currentPoint,...m.currentPoint),g=h[0]-f[0],b=h[1]-f[1],x=J.getBoardContainer(e).getBoundingClientRect(),y=x.width/2,w=x.height/2,v=e.viewport.zoom,S=wr(e);let k=S[0]+y/v-g/v,N=S[1]+w/v-b/v,E=[k-x.width/2/v,N-x.height/2/v],I=v;const T=$l(...d.lastPoint,...m.lastPoint),V=$l(...d.currentPoint,...m.currentPoint)/T,_=[d.currentPoint[0]-d.lastPoint[0],d.currentPoint[1]-d.lastPoint[1]],D=[m.currentPoint[0]-m.lastPoint[0],m.currentPoint[1]-m.lastPoint[1]],C=_[0]*D[0]+_[1]*D[1],M=Math.sqrt(_[0]*_[0]+_[1]*_[1]),U=Math.sqrt(D[0]*D[0]+D[1]*D[1]),F=C/(M*U||1);if(F<-.7||F<=.8&&r&&V>=.01?r=!0:r=!1,r){I=Math.min(Math.max(e.viewport.zoom*V,Sv),Tv);const A=J.getBoardContainer(e).getBoundingClientRect(),H=h[0]-A.x,ue=h[1]-A.y;k=E[0]+H/v,N=E[1]+ue/v,E=[k-H/I,N-ue/I]}Ue.updateViewport(e,E,I),o.forEach($=>{$.lastPoint=$.currentPoint,$.hasMoved=!1})}return}n(a)},e.pointerUp=a=>{const l=o.findIndex(u=>u.pointerId===a.pointerId);l!==-1&&o.splice(l,1),i(a)},e.globalPointerUp=a=>{const l=o.findIndex(u=>u.pointerId===a.pointerId);l!==-1&&o.splice(l,1),s(a)},e},hP=({value:e,children:t,options:n,plugins:i,viewport:s,theme:o,onChange:r,onSelectionChange:a,onValueChange:l,onViewportChange:u,onThemeChange:d})=>{const[m,f]=p.useState(()=>{const w=gP(e,n,i,s,o),v=bP(w);return{v:0,board:w,listRender:v}}),{board:h,listRender:g}=m,b=p.useCallback(()=>{if(r){const N={children:h.children,operations:h.operations,viewport:h.viewport,selection:h.selection,theme:h.theme};r(N)}const w=h.operations.some(N=>jo.isSetSelectionOperation(N)),v=h.operations.some(N=>jo.isSetViewportOperation(N)),S=h.operations.some(N=>jo.isSetThemeOperation(N)),k=h.operations.length>0&&!h.operations.every(N=>jo.isSetSelectionOperation(N)||jo.isSetViewportOperation(N)||jo.isSetThemeOperation(N));l&&k&&l(h.children),a&&w&&a(h.selection),u&&v&&u(h.viewport),d&&S&&d(h.theme.themeColorMode),f(N=>({v:N.v+1,board:h,listRender:g}))},[h,r,a,l,u,d]);p.useEffect(()=>(Qu.set(h,()=>{if(h.operations.length&&h.operations.every(k=>k.type==="set_selection")){g.update(h.children,{board:h,parent:h,parentG:J.getElementHost(h)});return}const v=h.operations.length&&h.operations.some(k=>k.type==="set_viewport");if(v&&Dv(h)){_v(h,!1),g.update(h.children,{board:h,parent:h,parentG:J.getElementHost(h)});return}g.update(h.children,{board:h,parent:h,parentG:J.getElementHost(h)}),v?va(h):Xb(h),Wl(h),ut(h).forEach(k=>{const N=Yo.getElementRef(k);N==null||N.updateActiveSection()})}),Ju.set(h,()=>{b()}),()=>{Qu.delete(h),Ju.delete(h)}),[h]);const x=p.useRef(!0),y=p.useRef(s);return p.useEffect(()=>{const w=y.current;if(y.current=s,s&&!Gp.get(h)){const v=!w,S=w&&(w.zoom!==s.zoom||w.offsetX!==s.offsetX||w.offsetY!==s.offsetY);(v||S)&&(h.viewport=s,va(h),Wl(h))}},[s,h]),p.useEffect(()=>{if(x.current){x.current=!1;return}e!==m.board.children&&!Gp.get(h)&&(h.children=e,g.update(h.children,{board:h,parent:h,parentG:J.getElementHost(h)}),s||Ue.fitViewport(h))},[e,s]),c.jsxDEV(Km.Provider,{value:m,children:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/wrapper.tsx",lineNumber:235,columnNumber:5},void 0)},gP=(e,t,n,i,s)=>{let o=Iv(Cv(jv(Pv(Av(Mv(Vv(Uv(Rv(pP(qv(Lv(Ov(e,t)))))))))))));return n.forEach(r=>{o=r(o)}),fP(o),i&&(o.viewport=i),s&&(o.theme=s),o},bP=e=>new zv(e);var Du={exports:{}},Ih;function xP(){return Ih||(Ih=1,(function(e){/*!mobile-detect v1.4.5 2021-03-13*//*!@license Copyright 2013, Heinrich Goebl, License: MIT, see https://github.com/hgoebl/mobile-detect.js*/(function(t,n){t(function(){var i={};i.mobileDetectRules={phones:{iPhone:"\\biPhone\\b|\\biPod\\b",BlackBerry:"BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",Pixel:"; \\bPixel\\b",HTC:"HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",Nexus:"Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 5X|Nexus 6",Dell:"Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",Motorola:"Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",Samsung:"\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F|SM-G610F|SM-G981B|SM-G892A|SM-A530F",LG:"\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",Sony:"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533|SOV34|601SO|F8332",Asus:"Asus.*Galaxy|PadFone.*Mobile",Xiaomi:"^(?!.*\\bx11\\b).*xiaomi.*$|POCOPHONE F1|MI 8|Redmi Note 9S|Redmi Note 5A Prime|N2G47H|M2001J2G|M2001J2I|M1805E10A|M2004J11G|M1902F1G|M2002J9G|M2004J19G|M2003J6A1G",NokiaLumia:"Lumia [0-9]{3,4}",Micromax:"Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",Palm:"PalmSource|Palm",Vertu:"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",Pantech:"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",Fly:"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",Wiko:"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",iMobile:"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",SimValley:"\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",Wolfgang:"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",Alcatel:"Alcatel",Nintendo:"Nintendo (3DS|Switch)",Amoi:"Amoi",INQ:"INQ",OnePlus:"ONEPLUS",GenericPhone:"Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"},tablets:{iPad:"iPad|iPad.*Mobile",NexusTablet:"Android.*Nexus[\\s]+(7|9|10)",GoogleTablet:"Android.*Pixel C",SamsungTablet:"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V|SM-P610|SM-T290|SM-T515|SM-T590|SM-T595|SM-T725|SM-T817P|SM-P585N0|SM-T395|SM-T295|SM-T865|SM-P610N|SM-P615|SM-T970|SM-T380|SM-T5950|SM-T905|SM-T231|SM-T500|SM-T860",Kindle:"Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)",SurfaceTablet:"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",HPTablet:"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",AsusTablet:"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",BlackBerryTablet:"PlayBook|RIM Tablet",HTCtablet:"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",MotorolaTablet:"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",NookTablet:"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",AcerTablet:"Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30|A3-A40",ToshibaTablet:"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",LGTablet:"\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",FujitsuTablet:"Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",PrestigioTablet:"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",LenovoTablet:"Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X|TB-X704F|TB-X104F|TB3-X70F|TB-X705F|TB-8504F|TB3-X70L|TB3-710F|TB-X704L",DellTablet:"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",YarvikTablet:"Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",MedionTablet:"Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",ArnovaTablet:"97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",IntensoTablet:"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",IRUTablet:"M702pro",MegafonTablet:"MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",EbodaTablet:"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",AllViewTablet:"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",ArchosTablet:"\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",AinolTablet:"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",NokiaLumiaTablet:"Lumia 2520",SonyTablet:"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",PhilipsTablet:"\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",CubeTablet:"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",CobyTablet:"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",MIDTablet:"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",MSITablet:"MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",SMiTTablet:"Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",RockChipTablet:"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",FlyTablet:"IQ310|Fly Vision",bqTablet:"Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",HuaweiTablet:"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",NecTablet:"\\bN-06D|\\bN-08D",PantechTablet:"Pantech.*P4100",BronchoTablet:"Broncho.*(N701|N708|N802|a710)",VersusTablet:"TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",ZyncTablet:"z1000|Z99 2G|z930|z990|z909|Z919|z900",PositivoTablet:"TB07STA|TB10STA|TB07FTA|TB10FTA",NabiTablet:"Android.*\\bNabi",KoboTablet:"Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",DanewTablet:"DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",TexetTablet:"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",PlaystationTablet:"Playstation.*(Portable|Vita)",TrekstorTablet:"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",PyleAudioTablet:"\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",AdvanTablet:"Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",DanyTechTablet:"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",GalapadTablet:"Android [0-9.]+; [a-z-]+; \\bG1\\b",MicromaxTablet:"Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",KarbonnTablet:"Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",AllFineTablet:"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",PROSCANTablet:"\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",YONESTablet:"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",ChangJiaTablet:"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",GUTablet:"TX-A1301|TX-M9002|Q702|kf026",PointOfViewTablet:"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",OvermaxTablet:"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",HCLTablet:"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",DPSTablet:"DPS Dream 9|DPS Dual 7",VistureTablet:"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",CrestaTablet:"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",MediatekTablet:"\\bMT8125|MT8389|MT8135|MT8377\\b",ConcordeTablet:"Concorde([ ]+)?Tab|ConCorde ReadMan",GoCleverTablet:"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",ModecomTablet:"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",VoninoTablet:"\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",ECSTablet:"V07OT2|TM105A|S10OT1|TR10CS1",StorexTablet:"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",VodafoneTablet:"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",EssentielBTablet:"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",RossMoorTablet:"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",iMobileTablet:"i-mobile i-note",TolinoTablet:"tolino tab [0-9.]+|tolino shine",AudioSonicTablet:"\\bC-22Q|T7-QC|T-17B|T-17P\\b",AMPETablet:"Android.* A78 ",SkkTablet:"Android.* (SKYPAD|PHOENIX|CYCLOPS)",TecnoTablet:"TECNO P9|TECNO DP8D",JXDTablet:"Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",iJoyTablet:"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",FX2Tablet:"FX2 PAD7|FX2 PAD10",XoroTablet:"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",ViewsonicTablet:"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",VerizonTablet:"QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",OdysTablet:"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",CaptivaTablet:"CAPTIVA PAD",IconbitTablet:"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",TeclastTablet:"T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",OndaTablet:"\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",JaytechTablet:"TPC-PA762",BlaupunktTablet:"Endeavour 800NG|Endeavour 1010",DigmaTablet:"\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",EvolioTablet:"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",LavaTablet:"QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",AocTablet:"MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",MpmanTablet:"MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",CelkonTablet:"CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",WolderTablet:"miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",MediacomTablet:"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",MiTablet:"\\bMI PAD\\b|\\bHM NOTE 1W\\b",NibiruTablet:"Nibiru M1|Nibiru Jupiter One",NexoTablet:"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",LeaderTablet:"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",UbislateTablet:"UbiSlate[\\s]?7C",PocketBookTablet:"Pocketbook",KocasoTablet:"\\b(TB-1207)\\b",HisenseTablet:"\\b(F5281|E2371)\\b",Hudl:"Hudl HT7S3|Hudl 2",TelstraTablet:"T-Hub2",GenericTablet:"Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"},oss:{AndroidOS:"Android",BlackBerryOS:"blackberry|\\bBB10\\b|rim tablet os",PalmOS:"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",SymbianOS:"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",WindowsMobileOS:"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",WindowsPhoneOS:"Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",iOS:"\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",iPadOS:"CPU OS 13",SailfishOS:"Sailfish",MeeGoOS:"MeeGo",MaemoOS:"Maemo",JavaOS:"J2ME/|\\bMIDP\\b|\\bCLDC\\b",webOS:"webOS|hpwOS",badaOS:"\\bBada\\b",BREWOS:"BREW"},uas:{Chrome:"\\bCrMo\\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?",Dolfin:"\\bDolfin\\b",Opera:"Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+",Skyfire:"Skyfire",Edge:"\\bEdgiOS\\b|Mobile Safari/[.0-9]* Edge",IE:"IEMobile|MSIEMobile",Firefox:"fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",Bolt:"bolt",TeaShark:"teashark",Blazer:"Blazer",Safari:"Version((?!\\bEdgiOS\\b).)*Mobile.*Safari|Safari.*Mobile|MobileSafari",WeChat:"\\bMicroMessenger\\b",UCBrowser:"UC.*Browser|UCWEB",baiduboxapp:"baiduboxapp",baidubrowser:"baidubrowser",DiigoBrowser:"DiigoBrowser",Mercury:"\\bMercury\\b",ObigoBrowser:"Obigo",NetFront:"NF-Browser",GenericBrowser:"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",PaleMoon:"Android.*PaleMoon|Mobile.*PaleMoon"},props:{Mobile:"Mobile/[VER]",Build:"Build/[VER]",Version:"Version/[VER]",VendorID:"VendorID/[VER]",iPad:"iPad.*CPU[a-z ]+[VER]",iPhone:"iPhone.*CPU[a-z ]+[VER]",iPod:"iPod.*CPU[a-z ]+[VER]",Kindle:"Kindle/[VER]",Chrome:["Chrome/[VER]","CriOS/[VER]","CrMo/[VER]"],Coast:["Coast/[VER]"],Dolfin:"Dolfin/[VER]",Firefox:["Firefox/[VER]","FxiOS/[VER]"],Fennec:"Fennec/[VER]",Edge:"Edge/[VER]",IE:["IEMobile/[VER];","IEMobile [VER]","MSIE [VER];","Trident/[0-9.]+;.*rv:[VER]"],NetFront:"NetFront/[VER]",NokiaBrowser:"NokiaBrowser/[VER]",Opera:[" OPR/[VER]","Opera Mini/[VER]","Version/[VER]"],"Opera Mini":"Opera Mini/[VER]","Opera Mobi":"Version/[VER]",UCBrowser:["UCWEB[VER]","UC.*Browser/[VER]"],MQQBrowser:"MQQBrowser/[VER]",MicroMessenger:"MicroMessenger/[VER]",baiduboxapp:"baiduboxapp/[VER]",baidubrowser:"baidubrowser/[VER]",SamsungBrowser:"SamsungBrowser/[VER]",Iron:"Iron/[VER]",Safari:["Version/[VER]","Safari/[VER]"],Skyfire:"Skyfire/[VER]",Tizen:"Tizen/[VER]",Webkit:"webkit[ /][VER]",PaleMoon:"PaleMoon/[VER]",SailfishBrowser:"SailfishBrowser/[VER]",Gecko:"Gecko/[VER]",Trident:"Trident/[VER]",Presto:"Presto/[VER]",Goanna:"Goanna/[VER]",iOS:" \\bi?OS\\b [VER][ ;]{1}",Android:"Android [VER]",Sailfish:"Sailfish [VER]",BlackBerry:["BlackBerry[\\w]+/[VER]","BlackBerry.*Version/[VER]","Version/[VER]"],BREW:"BREW [VER]",Java:"Java/[VER]","Windows Phone OS":["Windows Phone OS [VER]","Windows Phone [VER]"],"Windows Phone":"Windows Phone [VER]","Windows CE":"Windows CE/[VER]","Windows NT":"Windows NT [VER]",Symbian:["SymbianOS/[VER]","Symbian/[VER]"],webOS:["webOS/[VER]","hpwOS/[VER];"]},utils:{Bot:"Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp|AspiegelBot",MobileBot:"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2",DesktopMode:"WPDesktop",TV:"SonyDTV|HbbTV",WebKit:"(webkit)[ /]([\\w.]+)",Console:"\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",Watch:"SM-V700"}},i.detectMobileBrowsers={fullPattern:/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,shortPattern:/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,tabletPattern:/android|ipad|playbook|silk/i};var s=Object.prototype.hasOwnProperty,o;i.FALLBACK_PHONE="UnknownPhone",i.FALLBACK_TABLET="UnknownTablet",i.FALLBACK_MOBILE="UnknownMobile",o="isArray"in Array?Array.isArray:function(m){return Object.prototype.toString.call(m)==="[object Array]"};function r(m,f){return m!=null&&f!=null&&m.toLowerCase()===f.toLowerCase()}function a(m,f){var h,g,b=m.length;if(!b||!f)return!1;for(h=f.toLowerCase(),g=0;g<b;++g)if(h===m[g].toLowerCase())return!0;return!1}function l(m){for(var f in m)s.call(m,f)&&(m[f]=new RegExp(m[f],"i"))}function u(m){return(m||"").substr(0,500)}(function(){var f,h,g,b,x,y,w=i.mobileDetectRules;for(f in w.props)if(s.call(w.props,f)){for(h=w.props[f],o(h)||(h=[h]),x=h.length,b=0;b<x;++b)g=h[b],y=g.indexOf("[VER]"),y>=0&&(g=g.substring(0,y)+"([\\w._\\+]+)"+g.substring(y+5)),h[b]=new RegExp(g,"i");w.props[f]=h}l(w.oss),l(w.phones),l(w.tablets),l(w.uas),l(w.utils),w.oss0={WindowsPhoneOS:w.oss.WindowsPhoneOS,WindowsMobileOS:w.oss.WindowsMobileOS}})(),i.findMatch=function(m,f){for(var h in m)if(s.call(m,h)&&m[h].test(f))return h;return null},i.findMatches=function(m,f){var h=[];for(var g in m)s.call(m,g)&&m[g].test(f)&&h.push(g);return h},i.getVersionStr=function(m,f){var h=i.mobileDetectRules.props,g,b,x,y;if(s.call(h,m)){for(g=h[m],x=g.length,b=0;b<x;++b)if(y=g[b].exec(f),y!==null)return y[1]}return null},i.getVersion=function(m,f){var h=i.getVersionStr(m,f);return h?i.prepareVersionNo(h):NaN},i.prepareVersionNo=function(m){var f;return f=m.split(/[a-z._ \/\-]/i),f.length===1&&(m=f[0]),f.length>1&&(m=f[0]+".",f.shift(),m+=f.join("")),Number(m)},i.isMobileFallback=function(m){return i.detectMobileBrowsers.fullPattern.test(m)||i.detectMobileBrowsers.shortPattern.test(m.substr(0,4))},i.isTabletFallback=function(m){return i.detectMobileBrowsers.tabletPattern.test(m)},i.prepareDetectionCache=function(m,f,h){if(m.mobile===n){var g,b,x;if(b=i.findMatch(i.mobileDetectRules.tablets,f),b){m.mobile=m.tablet=b,m.phone=null;return}if(g=i.findMatch(i.mobileDetectRules.phones,f),g){m.mobile=m.phone=g,m.tablet=null;return}i.isMobileFallback(f)?(x=d.isPhoneSized(h),x===n?(m.mobile=i.FALLBACK_MOBILE,m.tablet=m.phone=null):x?(m.mobile=m.phone=i.FALLBACK_PHONE,m.tablet=null):(m.mobile=m.tablet=i.FALLBACK_TABLET,m.phone=null)):i.isTabletFallback(f)?(m.mobile=m.tablet=i.FALLBACK_TABLET,m.phone=null):m.mobile=m.tablet=m.phone=null}},i.mobileGrade=function(m){var f=m.mobile()!==null;return m.os("iOS")&&m.version("iPad")>=4.3||m.os("iOS")&&m.version("iPhone")>=3.1||m.os("iOS")&&m.version("iPod")>=3.1||m.version("Android")>2.1&&m.is("Webkit")||m.version("Windows Phone OS")>=7||m.is("BlackBerry")&&m.version("BlackBerry")>=6||m.match("Playbook.*Tablet")||m.version("webOS")>=1.4&&m.match("Palm|Pre|Pixi")||m.match("hp.*TouchPad")||m.is("Firefox")&&m.version("Firefox")>=12||m.is("Chrome")&&m.is("AndroidOS")&&m.version("Android")>=4||m.is("Skyfire")&&m.version("Skyfire")>=4.1&&m.is("AndroidOS")&&m.version("Android")>=2.3||m.is("Opera")&&m.version("Opera Mobi")>11&&m.is("AndroidOS")||m.is("MeeGoOS")||m.is("Tizen")||m.is("Dolfin")&&m.version("Bada")>=2||(m.is("UC Browser")||m.is("Dolfin"))&&m.version("Android")>=2.3||m.match("Kindle Fire")||m.is("Kindle")&&m.version("Kindle")>=3||m.is("AndroidOS")&&m.is("NookTablet")||m.version("Chrome")>=11&&!f||m.version("Safari")>=5&&!f||m.version("Firefox")>=4&&!f||m.version("MSIE")>=7&&!f||m.version("Opera")>=10&&!f?"A":m.os("iOS")&&m.version("iPad")<4.3||m.os("iOS")&&m.version("iPhone")<3.1||m.os("iOS")&&m.version("iPod")<3.1||m.is("Blackberry")&&m.version("BlackBerry")>=5&&m.version("BlackBerry")<6||m.version("Opera Mini")>=5&&m.version("Opera Mini")<=6.5&&(m.version("Android")>=2.3||m.is("iOS"))||m.match("NokiaN8|NokiaC7|N97.*Series60|Symbian/3")||m.version("Opera Mobi")>=11&&m.is("SymbianOS")?"B":(m.version("BlackBerry")<5||m.match("MSIEMobile|Windows CE.*Mobile")||m.version("Windows Mobile")<=5.2,"C")},i.detectOS=function(m){return i.findMatch(i.mobileDetectRules.oss0,m)||i.findMatch(i.mobileDetectRules.oss,m)},i.getDeviceSmallerSide=function(){return window.screen.width<window.screen.height?window.screen.width:window.screen.height};function d(m,f){this.ua=u(m),this._cache={},this.maxPhoneWidth=f||600}return d.prototype={constructor:d,mobile:function(){return i.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.mobile},phone:function(){return i.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.phone},tablet:function(){return i.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.tablet},userAgent:function(){return this._cache.userAgent===n&&(this._cache.userAgent=i.findMatch(i.mobileDetectRules.uas,this.ua)),this._cache.userAgent},userAgents:function(){return this._cache.userAgents===n&&(this._cache.userAgents=i.findMatches(i.mobileDetectRules.uas,this.ua)),this._cache.userAgents},os:function(){return this._cache.os===n&&(this._cache.os=i.detectOS(this.ua)),this._cache.os},version:function(m){return i.getVersion(m,this.ua)},versionStr:function(m){return i.getVersionStr(m,this.ua)},is:function(m){return a(this.userAgents(),m)||r(m,this.os())||r(m,this.phone())||r(m,this.tablet())||a(i.findMatches(i.mobileDetectRules.utils,this.ua),m)},match:function(m){return m instanceof RegExp||(m=new RegExp(m,"i")),m.test(this.ua)},isPhoneSized:function(m){return d.isPhoneSized(m||this.maxPhoneWidth)},mobileGrade:function(){return this._cache.grade===n&&(this._cache.grade=i.mobileGrade(this)),this._cache.grade}},typeof window<"u"&&window.screen?d.isPhoneSized=function(m){return m<0?n:i.getDeviceSmallerSide()<=m}:d.isPhoneSized=function(){},d._impl=i,d.version="1.4.5 2021-03-13",d})})((function(t){if(e.exports)return function(n){e.exports=n()};if(typeof window<"u")return function(n){window.MobileDetect=n()};throw new Error("unknown environment")})())})(Du)),Du.exports}var wP=xP();const yP=Bv(wP),Ch=e=>c.jsxDEV("span",{className:"mind-node-emoji",style:{fontSize:`${e.fontSize}px`},children:e.emojiItem.name},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/emoji.tsx",lineNumber:5,columnNumber:5},void 0),NP=e=>{const t=e;return e.setPluginOptions(Fv,{emojiPadding:0,spaceBetweenEmojis:4}),t.renderEmoji=(n,i)=>{const s=document.createElement("span");n.appendChild(s);const o=Dc.createRoot(s);o.render(c.jsxDEV(Ch,{...i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/with-mind-extend.tsx",lineNumber:31,columnNumber:17},void 0));let r={...i};return{destroy:()=>{setTimeout(()=>{o.unmount()},0)},update:l=>{r={...r,...l},o.render(c.jsxDEV(Ch,{...r},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/with-mind-extend.tsx",lineNumber:41,columnNumber:21},void 0))}}},t},vP=e=>{const t=p.useRef(null),[n,i]=p.useState(!1),[s,o]=p.useState(!0),{videoItem:r,isFocus:a=!1,isSelected:l=!1,readonly:u=!1}=e,{url:d,poster:m,videoType:f}=r,h=(d==null?void 0:d.replace("#video",""))||"";p.useEffect(()=>{const x=t.current;if(x){const y=()=>{o(!1),i(!1)},w=()=>{o(!1),i(!0)};return x.addEventListener("loadeddata",y),x.addEventListener("error",w),()=>{x.removeEventListener("loadeddata",y),x.removeEventListener("error",w)}}},[h]);const g=x=>{u&&(x.preventDefault(),x.stopPropagation(),window.open(h,"_blank"))},b={position:"relative",width:"100%",height:"100%",backgroundColor:"#000",borderRadius:"4px",overflow:"hidden"};return n?c.jsxDEV("div",{style:b,onClick:g,children:c.jsxDEV("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",color:"#666",backgroundColor:"#f5f5f5",cursor:u?"pointer":"default"},children:[c.jsxDEV("div",{style:{fontSize:"48px",marginBottom:"8px"},children:"🎬"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:85,columnNumber:11},void 0),c.jsxDEV("div",{style:{fontSize:"14px",textAlign:"center",padding:"0 16px"},children:"Video failed to load"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:86,columnNumber:11},void 0),u&&c.jsxDEV("div",{style:{fontSize:"12px",color:"#999",marginTop:"4px"},children:"Click to open in new window"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:90,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:75,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:74,columnNumber:7},void 0):c.jsxDEV("div",{style:b,onClick:g,children:[s&&c.jsxDEV("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",color:"white",zIndex:1},children:c.jsxDEV("div",{style:{textAlign:"center"},children:[c.jsxDEV("div",{style:{fontSize:"24px",marginBottom:"8px"},children:"⏳"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:116,columnNumber:13},void 0),c.jsxDEV("div",{style:{fontSize:"14px"},children:"Loading video..."},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:117,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:115,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:102,columnNumber:9},void 0),c.jsxDEV("video",{ref:t,src:h,poster:m,width:"100%",height:"100%",controls:!u,muted:!0,playsInline:!0,draggable:!1,className:ne("video-origin",{"video-origin--focus":a,"video-origin--selected":l}),style:{width:"100%",height:"100%",objectFit:"contain"},onError:()=>i(!0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:121,columnNumber:7},void 0),u&&c.jsxDEV("div",{style:{position:"absolute",top:"8px",right:"8px",backgroundColor:"rgba(0, 0, 0, 0.6)",color:"white",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",pointerEvents:"none"},children:"🎬 Video"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:143,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:100,columnNumber:5},void 0)},kP=e=>{if(e.isVideo===!0||e.videoType)return!0;const t=e.url||"";return t.includes("#video")||t.includes("#merged-video-")?!0:[".mp4",".avi",".mov",".wmv",".flv",".webm",".mkv"].some(i=>t.toLowerCase().includes(i))},jh=e=>{const t=p.useCallback(()=>{Gv(e.board,e.element,e.imageItem.url)},[e.board,e.element,e.imageItem.url]),n=e.element,i=n==null?void 0:n.pptImageStatus,s=n==null?void 0:n.pptImagePrompt,o=n==null?void 0:n.frameId,r=p.useCallback(async()=>{var l;if(!(!e.board||!o||!s||i==="loading")){uu(e.board,o,"loading"),ol(e.board,o,"loading");try{const u=await Hv({prompt:s,size:"16x9"});if(u.success&&((l=u.data)!=null&&l.url)){Wv(e.board,o);const d=e.board.children.find(m=>m.id===o);if(d){const m=Ae.getRectangleByPoints(d.points),f=$v({x:m.x,y:m.y,width:m.width,height:m.height});await Xv(e.board,u.data.url,"image",o,{width:m.width,height:m.height},{width:800,height:450},f)}ol(e.board,o,"generated")}else uu(e.board,o,"placeholder"),ol(e.board,o,"placeholder"),pe.error(u.error||"图片生成失败")}catch(u){uu(e.board,o,"placeholder"),ol(e.board,o,"placeholder"),pe.error((u==null?void 0:u.message)||"图片生成失败")}}},[e.board,o,s,i]);if(n!=null&&n.pptImagePlaceholder){const l=i==="loading";return c.jsxDEV("div",{className:"ppt-image-placeholder",onClick:l?void 0:r,style:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"column",gap:"8px",borderRadius:"8px",border:"1px dashed #d9d9d9",backgroundColor:"rgba(245,245,245,0.85)",color:"#999",fontSize:"13px",cursor:l?"default":"pointer",userSelect:"none"},children:[l?c.jsxDEV(Kv,{size:"small"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:123,columnNumber:22},void 0):null,c.jsxDEV("span",{children:l?"生成配图中…":"点击生成配图"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:124,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:103,columnNumber:7},void 0)}if(kP(e.imageItem))return c.jsxDEV(vP,{videoItem:{url:e.imageItem.url,width:e.imageItem.width,height:e.imageItem.height,videoType:e.imageItem.videoType,poster:e.imageItem.poster},isFocus:e.isFocus,isSelected:e.isSelected,readonly:e.readonly},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:132,columnNumber:7},void 0);const a={src:e.imageItem.url,draggable:!1,width:"100%"};return c.jsxDEV("div",{children:c.jsxDEV("img",{...a,className:ne("image-origin",{"image-origin--focus":e.isFocus}),onError:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:155,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:154,columnNumber:5},void 0)};/*!
|
|
17
|
+
* Viewer.js v1.11.7
|
|
18
|
+
* https://fengyuanchen.github.io/viewerjs
|
|
19
|
+
*
|
|
20
|
+
* Copyright 2015-present Chen Fengyuan
|
|
21
|
+
* Released under the MIT license
|
|
22
|
+
*
|
|
23
|
+
* Date: 2024-11-24T04:32:19.116Z
|
|
24
|
+
*/function EP(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ph(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,qw(i.key),i)}}function SP(e,t,n){return t&&Ph(e.prototype,t),n&&Ph(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function TP(e,t,n){return(t=qw(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ah(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable})),n.push.apply(n,i)}return n}function Ym(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Ah(Object(n),!0).forEach(function(i){TP(e,i,n[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ah(Object(n)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})}return e}function DP(e,t){if(typeof e!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var i=n.call(e,t);if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function qw(e){var t=DP(e,"string");return typeof t=="symbol"?t:t+""}function qd(e){"@babel/helpers - typeof";return qd=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qd(e)}var Mh={backdrop:!0,button:!0,navbar:!0,title:!0,toolbar:!0,className:"",container:"body",filter:null,fullscreen:!0,inheritedAttributes:["crossOrigin","decoding","isMap","loading","referrerPolicy","sizes","srcset","useMap"],initialCoverage:.9,initialViewIndex:0,inline:!1,interval:5e3,keyboard:!0,focus:!0,loading:!0,loop:!0,minWidth:200,minHeight:100,movable:!0,rotatable:!0,scalable:!0,zoomable:!0,zoomOnTouch:!0,zoomOnWheel:!0,slideOnTouch:!0,toggleOnDblclick:!0,tooltip:!0,transition:!0,zIndex:2015,zIndexInline:0,zoomRatio:.1,minZoomRatio:.01,maxZoomRatio:100,url:"src",ready:null,show:null,shown:null,hide:null,hidden:null,view:null,viewed:null,move:null,moved:null,rotate:null,rotated:null,scale:null,scaled:null,zoom:null,zoomed:null,play:null,stop:null},_P='<div class="viewer-container" tabindex="-1" touch-action="none"><div class="viewer-canvas"></div><div class="viewer-footer"><div class="viewer-title"></div><div class="viewer-toolbar"></div><div class="viewer-navbar"><ul class="viewer-list" role="navigation"></ul></div></div><div class="viewer-tooltip" role="alert" aria-hidden="true"></div><div class="viewer-button" data-viewer-action="mix" role="button"></div><div class="viewer-player"></div></div>',Qc=typeof window<"u"&&typeof window.document<"u",rs=Qc?window:{},nr=Qc&&rs.document.documentElement?"ontouchstart"in rs.document.documentElement:!1,Zm=Qc?"PointerEvent"in rs:!1,it="viewer",ql="move",Lw="switch",la="zoom",gl="".concat(it,"-active"),IP="".concat(it,"-close"),Ll="".concat(it,"-fade"),Ld="".concat(it,"-fixed"),CP="".concat(it,"-fullscreen"),Vh="".concat(it,"-fullscreen-exit"),io="".concat(it,"-hide"),jP="".concat(it,"-hide-md-down"),PP="".concat(it,"-hide-sm-down"),AP="".concat(it,"-hide-xs-down"),ui="".concat(it,"-in"),ha="".concat(it,"-invisible"),ir="".concat(it,"-loading"),MP="".concat(it,"-move"),Uh="".concat(it,"-open"),qo="".concat(it,"-show"),rn="".concat(it,"-transition"),hr="click",Od="dblclick",Rh="dragstart",qh="focusin",Lh="keydown",pi="load",uo="error",VP=nr?"touchend touchcancel":"mouseup",UP=nr?"touchmove":"mousemove",RP=nr?"touchstart":"mousedown",Oh=Zm?"pointerdown":RP,zh=Zm?"pointermove":UP,Bh=Zm?"pointerup pointercancel":VP,Fh="resize",vi="transitionend",Gh="wheel",Hh="ready",Wh="show",$h="shown",Xh="hide",Kh="hidden",Yh="view",Ma="viewed",Zh="move",Jh="moved",Qh="rotate",eg="rotated",tg="scale",ng="scaled",ig="zoom",sg="zoomed",og="play",rg="stop",cc="".concat(it,"Action"),Jm=/\s\s*/,bl=["zoom-in","zoom-out","one-to-one","reset","prev","play","next","rotate-left","rotate-right","flip-horizontal","flip-vertical"];function Va(e){return typeof e=="string"}var qP=Number.isNaN||rs.isNaN;function en(e){return typeof e=="number"&&!qP(e)}function Fo(e){return typeof e>"u"}function gr(e){return qd(e)==="object"&&e!==null}var LP=Object.prototype.hasOwnProperty;function Go(e){if(!gr(e))return!1;try{var t=e.constructor,n=t.prototype;return t&&n&&LP.call(n,"isPrototypeOf")}catch{return!1}}function Vt(e){return typeof e=="function"}function zt(e,t){if(e&&Vt(t))if(Array.isArray(e)||en(e.length)){var n=e.length,i;for(i=0;i<n&&t.call(e,e[i],i,e)!==!1;i+=1);}else gr(e)&&Object.keys(e).forEach(function(s){t.call(e,e[s],s,e)});return e}var ai=Object.assign||function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),s=1;s<n;s++)i[s-1]=arguments[s];return gr(t)&&i.length>0&&i.forEach(function(o){gr(o)&&Object.keys(o).forEach(function(r){t[r]=o[r]})}),t},OP=/^(?:width|height|left|top|marginLeft|marginTop)$/;function ki(e,t){var n=e.style;zt(t,function(i,s){OP.test(s)&&en(i)&&(i+="px"),n[s]=i})}function zP(e){return Va(e)?e.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">"):e}function Oo(e,t){return!e||!t?!1:e.classList?e.classList.contains(t):e.className.indexOf(t)>-1}function Ge(e,t){if(!(!e||!t)){if(en(e.length)){zt(e,function(i){Ge(i,t)});return}if(e.classList){e.classList.add(t);return}var n=e.className.trim();n?n.indexOf(t)<0&&(e.className="".concat(n," ").concat(t)):e.className=t}}function Et(e,t){if(!(!e||!t)){if(en(e.length)){zt(e,function(n){Et(n,t)});return}if(e.classList){e.classList.remove(t);return}e.className.indexOf(t)>=0&&(e.className=e.className.replace(t,""))}}function Ua(e,t,n){if(t){if(en(e.length)){zt(e,function(i){Ua(i,t,n)});return}n?Ge(e,t):Et(e,t)}}var BP=/([a-z\d])([A-Z])/g;function Qm(e){return e.replace(BP,"$1-$2").toLowerCase()}function Ho(e,t){return gr(e[t])?e[t]:e.dataset?e.dataset[t]:e.getAttribute("data-".concat(Qm(t)))}function zd(e,t,n){gr(n)?e[t]=n:e.dataset?e.dataset[t]=n:e.setAttribute("data-".concat(Qm(t)),n)}var Ow=(function(){var e=!1;if(Qc){var t=!1,n=function(){},i=Object.defineProperty({},"once",{get:function(){return e=!0,t},set:function(o){t=o}});rs.addEventListener("test",n,i),rs.removeEventListener("test",n,i)}return e})();function Ut(e,t,n){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},s=n;t.trim().split(Jm).forEach(function(o){if(!Ow){var r=e.listeners;r&&r[o]&&r[o][n]&&(s=r[o][n],delete r[o][n],Object.keys(r[o]).length===0&&delete r[o],Object.keys(r).length===0&&delete e.listeners)}e.removeEventListener(o,s,i)})}function $e(e,t,n){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},s=n;t.trim().split(Jm).forEach(function(o){if(i.once&&!Ow){var r=e.listeners,a=r===void 0?{}:r;s=function(){delete a[o][n],e.removeEventListener(o,s,i);for(var u=arguments.length,d=new Array(u),m=0;m<u;m++)d[m]=arguments[m];n.apply(e,d)},a[o]||(a[o]={}),a[o][n]&&e.removeEventListener(o,a[o][n],i),a[o][n]=s,e.listeners=a}e.addEventListener(o,s,i)})}function un(e,t,n,i){var s;return Vt(Event)&&Vt(CustomEvent)?s=new CustomEvent(t,Ym({bubbles:!0,cancelable:!0,detail:n},i)):(s=document.createEvent("CustomEvent"),s.initCustomEvent(t,!0,!0,n)),e.dispatchEvent(s)}function FP(e){var t=e.getBoundingClientRect();return{left:t.left+(window.pageXOffset-document.documentElement.clientLeft),top:t.top+(window.pageYOffset-document.documentElement.clientTop)}}function Ol(e){var t=e.rotate,n=e.scaleX,i=e.scaleY,s=e.translateX,o=e.translateY,r=[];en(s)&&s!==0&&r.push("translateX(".concat(s,"px)")),en(o)&&o!==0&&r.push("translateY(".concat(o,"px)")),en(t)&&t!==0&&r.push("rotate(".concat(t,"deg)")),en(n)&&n!==1&&r.push("scaleX(".concat(n,")")),en(i)&&i!==1&&r.push("scaleY(".concat(i,")"));var a=r.length?r.join(" "):"none";return{WebkitTransform:a,msTransform:a,transform:a}}function GP(e){return Va(e)?decodeURIComponent(e.replace(/^.*\//,"").replace(/[?&#].*$/,"")):""}var _u=rs.navigator&&/Version\/\d+(\.\d+)+?\s+Safari/i.test(rs.navigator.userAgent);function zw(e,t,n){var i=document.createElement("img");if(e.naturalWidth&&!_u)return n(e.naturalWidth,e.naturalHeight),i;var s=document.body||document.documentElement;return i.onload=function(){n(i.width,i.height),_u||s.removeChild(i)},zt(t.inheritedAttributes,function(o){var r=e.getAttribute(o);r!==null&&i.setAttribute(o,r)}),i.src=e.src,_u||(i.style.cssText="left:0;max-height:none!important;max-width:none!important;min-height:0!important;min-width:0!important;opacity:0;position:absolute;top:0;z-index:-1;",s.appendChild(i)),i}function xl(e){switch(e){case 2:return AP;case 3:return PP;case 4:return jP;default:return""}}function HP(e){var t=Ym({},e),n=[];return zt(e,function(i,s){delete t[s],zt(t,function(o){var r=Math.abs(i.startX-o.startX),a=Math.abs(i.startY-o.startY),l=Math.abs(i.endX-o.endX),u=Math.abs(i.endY-o.endY),d=Math.sqrt(r*r+a*a),m=Math.sqrt(l*l+u*u),f=(m-d)/d;n.push(f)})}),n.sort(function(i,s){return Math.abs(i)<Math.abs(s)}),n[0]}function wl(e,t){var n=e.pageX,i=e.pageY,s={endX:n,endY:i};return t?s:Ym({timeStamp:Date.now(),startX:n,startY:i},s)}function WP(e){var t=0,n=0,i=0;return zt(e,function(s){var o=s.startX,r=s.startY;t+=o,n+=r,i+=1}),t/=i,n/=i,{pageX:t,pageY:n}}var $P={render:function(){this.initContainer(),this.initViewer(),this.initList(),this.renderViewer()},initBody:function(){var t=this.element.ownerDocument,n=t.body||t.documentElement;this.body=n,this.scrollbarWidth=window.innerWidth-t.documentElement.clientWidth,this.initialBodyPaddingRight=n.style.paddingRight,this.initialBodyComputedPaddingRight=window.getComputedStyle(n).paddingRight},initContainer:function(){this.containerData={width:window.innerWidth,height:window.innerHeight}},initViewer:function(){var t=this.options,n=this.parent,i;t.inline&&(i={width:Math.max(n.offsetWidth,t.minWidth),height:Math.max(n.offsetHeight,t.minHeight)},this.parentData=i),(this.fulled||!i)&&(i=this.containerData),this.viewerData=ai({},i)},renderViewer:function(){this.options.inline&&!this.fulled&&ki(this.viewer,this.viewerData)},initList:function(){var t=this,n=this.element,i=this.options,s=this.list,o=[];s.innerHTML="",zt(this.images,function(r,a){var l=r.src,u=r.alt||GP(l),d=t.getImageURL(r);if(l||d){var m=document.createElement("li"),f=document.createElement("img");zt(i.inheritedAttributes,function(h){var g=r.getAttribute(h);g!==null&&f.setAttribute(h,g)}),i.navbar&&(f.src=l||d),f.alt=u,f.setAttribute("data-original-url",d||l),m.setAttribute("data-index",a),m.setAttribute("data-viewer-action","view"),m.setAttribute("role","button"),i.keyboard&&m.setAttribute("tabindex",0),m.appendChild(f),s.appendChild(m),o.push(m)}}),this.items=o,zt(o,function(r){var a=r.firstElementChild,l,u;zd(a,"filled",!0),i.loading&&Ge(r,ir),$e(a,pi,l=function(m){Ut(a,uo,u),i.loading&&Et(r,ir),t.loadImage(m)},{once:!0}),$e(a,uo,u=function(){Ut(a,pi,l),i.loading&&Et(r,ir)},{once:!0})}),i.transition&&$e(n,Ma,function(){Ge(s,rn)},{once:!0})},renderList:function(){var t=this.index,n=this.items[t];if(n){var i=n.nextElementSibling,s=parseInt(window.getComputedStyle(i||n).marginLeft,10),o=n.offsetWidth,r=o+s;ki(this.list,ai({width:r*this.length-s},Ol({translateX:(this.viewerData.width-o)/2-r*t})))}},resetList:function(){var t=this.list;t.innerHTML="",Et(t,rn),ki(t,Ol({translateX:0}))},initImage:function(t){var n=this,i=this.options,s=this.image,o=this.viewerData,r=this.footer.offsetHeight,a=o.width,l=Math.max(o.height-r,r),u=this.imageData||{},d;this.imageInitializing={abort:function(){d.onload=null}},d=zw(s,i,function(m,f){var h=m/f,g=Math.max(0,Math.min(1,i.initialCoverage)),b=a,x=l;n.imageInitializing=!1,l*h>a?x=a/h:b=l*h,g=en(g)?g:.9,b=Math.min(b*g,m),x=Math.min(x*g,f);var y=(a-b)/2,w=(l-x)/2,v={left:y,top:w,x:y,y:w,width:b,height:x,oldRatio:1,ratio:b/m,aspectRatio:h,naturalWidth:m,naturalHeight:f},S=ai({},v);i.rotatable&&(v.rotate=u.rotate||0,S.rotate=0),i.scalable&&(v.scaleX=u.scaleX||1,v.scaleY=u.scaleY||1,S.scaleX=1,S.scaleY=1),n.imageData=v,n.initialImageData=S,t&&t()})},renderImage:function(t){var n=this,i=this.image,s=this.imageData;if(ki(i,ai({width:s.width,height:s.height,marginLeft:s.x,marginTop:s.y},Ol(s))),t)if((this.viewing||this.moving||this.rotating||this.scaling||this.zooming)&&this.options.transition&&Oo(i,rn)){var o=function(){n.imageRendering=!1,t()};this.imageRendering={abort:function(){Ut(i,vi,o)}},$e(i,vi,o,{once:!0})}else t()},resetImage:function(){var t=this.image;t&&(this.viewing&&this.viewing.abort(),t.parentNode.removeChild(t),this.image=null,this.title.innerHTML="")}},XP={bind:function(){var t=this.options,n=this.viewer,i=this.canvas,s=this.element.ownerDocument;$e(n,hr,this.onClick=this.click.bind(this)),$e(n,Rh,this.onDragStart=this.dragstart.bind(this)),$e(i,Oh,this.onPointerDown=this.pointerdown.bind(this)),$e(s,zh,this.onPointerMove=this.pointermove.bind(this)),$e(s,Bh,this.onPointerUp=this.pointerup.bind(this)),$e(s,Lh,this.onKeyDown=this.keydown.bind(this)),$e(window,Fh,this.onResize=this.resize.bind(this)),t.zoomable&&t.zoomOnWheel&&$e(n,Gh,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),t.toggleOnDblclick&&$e(i,Od,this.onDblclick=this.dblclick.bind(this))},unbind:function(){var t=this.options,n=this.viewer,i=this.canvas,s=this.element.ownerDocument;Ut(n,hr,this.onClick),Ut(n,Rh,this.onDragStart),Ut(i,Oh,this.onPointerDown),Ut(s,zh,this.onPointerMove),Ut(s,Bh,this.onPointerUp),Ut(s,Lh,this.onKeyDown),Ut(window,Fh,this.onResize),t.zoomable&&t.zoomOnWheel&&Ut(n,Gh,this.onWheel,{passive:!1,capture:!0}),t.toggleOnDblclick&&Ut(i,Od,this.onDblclick)}},KP={click:function(t){var n=this.options,i=this.imageData,s=t.target,o=Ho(s,cc);switch(!o&&s.localName==="img"&&s.parentElement.localName==="li"&&(s=s.parentElement,o=Ho(s,cc)),nr&&t.isTrusted&&s===this.canvas&&clearTimeout(this.clickCanvasTimeout),o){case"mix":this.played?this.stop():n.inline?this.fulled?this.exit():this.full():this.hide();break;case"hide":this.pointerMoved||this.hide();break;case"view":this.view(Ho(s,"index"));break;case"zoom-in":this.zoom(.1,!0);break;case"zoom-out":this.zoom(-.1,!0);break;case"one-to-one":this.toggle();break;case"reset":this.reset();break;case"prev":this.prev(n.loop);break;case"play":this.play(n.fullscreen);break;case"next":this.next(n.loop);break;case"rotate-left":this.rotate(-90);break;case"rotate-right":this.rotate(90);break;case"flip-horizontal":this.scaleX(-i.scaleX||-1);break;case"flip-vertical":this.scaleY(-i.scaleY||-1);break;default:this.played&&this.stop()}},dblclick:function(t){t.preventDefault(),this.viewed&&t.target===this.image&&(nr&&t.isTrusted&&clearTimeout(this.doubleClickImageTimeout),this.toggle(t.isTrusted?t:t.detail&&t.detail.originalEvent))},load:function(){var t=this;this.timeout&&(clearTimeout(this.timeout),this.timeout=!1);var n=this.element,i=this.options,s=this.image,o=this.index,r=this.viewerData;Et(s,ha),i.loading&&Et(this.canvas,ir),s.style.cssText="height:0;"+"margin-left:".concat(r.width/2,"px;")+"margin-top:".concat(r.height/2,"px;")+"max-width:none!important;position:relative;width:0;",this.initImage(function(){Ua(s,MP,i.movable),Ua(s,rn,i.transition),t.renderImage(function(){t.viewed=!0,t.viewing=!1,Vt(i.viewed)&&$e(n,Ma,i.viewed,{once:!0}),un(n,Ma,{originalImage:t.images[o],index:o,image:s},{cancelable:!1})})})},loadImage:function(t){var n=t.target,i=n.parentNode,s=i.offsetWidth||30,o=i.offsetHeight||50,r=!!Ho(n,"filled");zw(n,this.options,function(a,l){var u=a/l,d=s,m=o;o*u>s?r?d=o*u:m=s/u:r?m=s/u:d=o*u,ki(n,ai({width:d,height:m},Ol({translateX:(s-d)/2,translateY:(o-m)/2})))})},keydown:function(t){var n=this.options;if(n.keyboard){var i=t.keyCode||t.which||t.charCode;switch(i){case 13:this.viewer.contains(t.target)&&this.click(t);break}if(this.fulled)switch(i){case 27:this.played?this.stop():n.inline?this.fulled&&this.exit():this.hide();break;case 32:this.played&&this.stop();break;case 37:this.played&&this.playing?this.playing.prev():this.prev(n.loop);break;case 38:t.preventDefault(),this.zoom(n.zoomRatio,!0);break;case 39:this.played&&this.playing?this.playing.next():this.next(n.loop);break;case 40:t.preventDefault(),this.zoom(-n.zoomRatio,!0);break;case 48:case 49:t.ctrlKey&&(t.preventDefault(),this.toggle());break}}},dragstart:function(t){t.target.localName==="img"&&t.preventDefault()},pointerdown:function(t){var n=this.options,i=this.pointers,s=t.buttons,o=t.button;if(this.pointerMoved=!1,!(!this.viewed||this.showing||this.viewing||this.hiding||(t.type==="mousedown"||t.type==="pointerdown"&&t.pointerType==="mouse")&&(en(s)&&s!==1||en(o)&&o!==0||t.ctrlKey))){t.preventDefault(),t.changedTouches?zt(t.changedTouches,function(a){i[a.identifier]=wl(a)}):i[t.pointerId||0]=wl(t);var r=n.movable?ql:!1;n.zoomOnTouch&&n.zoomable&&Object.keys(i).length>1?r=la:n.slideOnTouch&&(t.pointerType==="touch"||t.type==="touchstart")&&this.isSwitchable()&&(r=Lw),n.transition&&(r===ql||r===la)&&Et(this.image,rn),this.action=r}},pointermove:function(t){var n=this.pointers,i=this.action;!this.viewed||!i||(t.preventDefault(),t.changedTouches?zt(t.changedTouches,function(s){ai(n[s.identifier]||{},wl(s,!0))}):ai(n[t.pointerId||0]||{},wl(t,!0)),this.change(t))},pointerup:function(t){var n=this,i=this.options,s=this.action,o=this.pointers,r;t.changedTouches?zt(t.changedTouches,function(a){r=o[a.identifier],delete o[a.identifier]}):(r=o[t.pointerId||0],delete o[t.pointerId||0]),s&&(t.preventDefault(),i.transition&&(s===ql||s===la)&&Ge(this.image,rn),this.action=!1,nr&&s!==la&&r&&Date.now()-r.timeStamp<500&&(clearTimeout(this.clickCanvasTimeout),clearTimeout(this.doubleClickImageTimeout),i.toggleOnDblclick&&this.viewed&&t.target===this.image?this.imageClicked?(this.imageClicked=!1,this.doubleClickImageTimeout=setTimeout(function(){un(n.image,Od,{originalEvent:t})},50)):(this.imageClicked=!0,this.doubleClickImageTimeout=setTimeout(function(){n.imageClicked=!1},500)):(this.imageClicked=!1,i.backdrop&&i.backdrop!=="static"&&t.target===this.canvas&&(this.clickCanvasTimeout=setTimeout(function(){un(n.canvas,hr,{originalEvent:t})},50)))))},resize:function(){var t=this;if(!(!this.isShown||this.hiding)&&(this.fulled&&(this.close(),this.initBody(),this.open()),this.initContainer(),this.initViewer(),this.renderViewer(),this.renderList(),this.viewed&&this.initImage(function(){t.renderImage()}),this.played)){if(this.options.fullscreen&&this.fulled&&!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)){this.stop();return}zt(this.player.getElementsByTagName("img"),function(n){$e(n,pi,t.loadImage.bind(t),{once:!0}),un(n,pi)})}},wheel:function(t){var n=this;if(this.viewed&&(t.preventDefault(),!this.wheeling)){this.wheeling=!0,setTimeout(function(){n.wheeling=!1},50);var i=Number(this.options.zoomRatio)||.1,s=1;t.deltaY?s=t.deltaY>0?1:-1:t.wheelDelta?s=-t.wheelDelta/120:t.detail&&(s=t.detail>0?1:-1),this.zoom(-s*i,!0,null,t)}}},YP={show:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,n=this.element,i=this.options;if(i.inline||this.showing||this.isShown||this.showing)return this;if(!this.ready)return this.build(),this.ready&&this.show(t),this;if(Vt(i.show)&&$e(n,Wh,i.show,{once:!0}),un(n,Wh)===!1||!this.ready)return this;this.hiding&&this.transitioning.abort(),this.showing=!0,this.open();var s=this.viewer;if(Et(s,io),s.setAttribute("role","dialog"),s.setAttribute("aria-labelledby",this.title.id),s.setAttribute("aria-modal",!0),s.removeAttribute("aria-hidden"),i.transition&&!t){var o=this.shown.bind(this);this.transitioning={abort:function(){Ut(s,vi,o),Et(s,ui)}},Ge(s,rn),s.initialOffsetWidth=s.offsetWidth,$e(s,vi,o,{once:!0}),Ge(s,ui)}else Ge(s,ui),this.shown();return this},hide:function(){var t=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,i=this.element,s=this.options;if(s.inline||this.hiding||!(this.isShown||this.showing))return this;if(Vt(s.hide)&&$e(i,Xh,s.hide,{once:!0}),un(i,Xh)===!1)return this;this.showing&&this.transitioning.abort(),this.hiding=!0,this.played?this.stop():this.viewing&&this.viewing.abort();var o=this.viewer,r=this.image,a=function(){Et(o,ui),t.hidden()};if(s.transition&&!n){var l=function(m){m&&m.target===o&&(Ut(o,vi,l),t.hidden())},u=function(){Oo(o,rn)?($e(o,vi,l),Et(o,ui)):a()};this.transitioning={abort:function(){t.viewed&&Oo(r,rn)?Ut(r,vi,u):Oo(o,rn)&&Ut(o,vi,l)}},this.viewed&&Oo(r,rn)?($e(r,vi,u,{once:!0}),this.zoomTo(0,!1,null,null,!0)):u()}else a();return this},view:function(){var t=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.initialViewIndex;if(n=Number(n)||0,this.hiding||this.played||n<0||n>=this.length||this.viewed&&n===this.index)return this;if(!this.isShown)return this.index=n,this.show();this.viewing&&this.viewing.abort();var i=this.element,s=this.options,o=this.title,r=this.canvas,a=this.items[n],l=a.querySelector("img"),u=Ho(l,"originalUrl"),d=l.getAttribute("alt"),m=document.createElement("img");if(zt(s.inheritedAttributes,function(x){var y=l.getAttribute(x);y!==null&&m.setAttribute(x,y)}),m.src=u,m.alt=d,Vt(s.view)&&$e(i,Yh,s.view,{once:!0}),un(i,Yh,{originalImage:this.images[n],index:n,image:m})===!1||!this.isShown||this.hiding||this.played)return this;var f=this.items[this.index];f&&(Et(f,gl),f.removeAttribute("aria-selected")),Ge(a,gl),a.setAttribute("aria-selected",!0),s.focus&&a.focus(),this.image=m,this.viewed=!1,this.index=n,this.imageData={},Ge(m,ha),s.loading&&Ge(r,ir),r.innerHTML="",r.appendChild(m),this.renderList(),o.innerHTML="";var h=function(){var y=t.imageData,w=Array.isArray(s.title)?s.title[1]:s.title;o.innerHTML=zP(Vt(w)?w.call(t,m,y):"".concat(d," (").concat(y.naturalWidth," × ").concat(y.naturalHeight,")"))},g,b;return $e(i,Ma,h,{once:!0}),this.viewing={abort:function(){Ut(i,Ma,h),m.complete?t.imageRendering?t.imageRendering.abort():t.imageInitializing&&t.imageInitializing.abort():(m.src="",Ut(m,pi,g),t.timeout&&clearTimeout(t.timeout))}},m.complete?this.load():($e(m,pi,g=function(){Ut(m,uo,b),t.load()},{once:!0}),$e(m,uo,b=function(){Ut(m,pi,g),t.timeout&&(clearTimeout(t.timeout),t.timeout=!1),Et(m,ha),s.loading&&Et(t.canvas,ir)},{once:!0}),this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(function(){Et(m,ha),t.timeout=!1},1e3)),this},prev:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,n=this.index-1;return n<0&&(n=t?this.length-1:0),this.view(n),this},next:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,n=this.length-1,i=this.index+1;return i>n&&(i=t?0:n),this.view(i),this},move:function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,i=this.imageData;return this.moveTo(Fo(t)?t:i.x+Number(t),Fo(n)?n:i.y+Number(n)),this},moveTo:function(t){var n=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,o=this.element,r=this.options,a=this.imageData;if(t=Number(t),i=Number(i),this.viewed&&!this.played&&r.movable){var l=a.x,u=a.y,d=!1;if(en(t)?d=!0:t=l,en(i)?d=!0:i=u,d){if(Vt(r.move)&&$e(o,Zh,r.move,{once:!0}),un(o,Zh,{x:t,y:i,oldX:l,oldY:u,originalEvent:s})===!1)return this;a.x=t,a.y=i,a.left=t,a.top=i,this.moving=!0,this.renderImage(function(){n.moving=!1,Vt(r.moved)&&$e(o,Jh,r.moved,{once:!0}),un(o,Jh,{x:t,y:i,oldX:l,oldY:u,originalEvent:s},{cancelable:!1})})}}return this},rotate:function(t){return this.rotateTo((this.imageData.rotate||0)+Number(t)),this},rotateTo:function(t){var n=this,i=this.element,s=this.options,o=this.imageData;if(t=Number(t),en(t)&&this.viewed&&!this.played&&s.rotatable){var r=o.rotate;if(Vt(s.rotate)&&$e(i,Qh,s.rotate,{once:!0}),un(i,Qh,{degree:t,oldDegree:r})===!1)return this;o.rotate=t,this.rotating=!0,this.renderImage(function(){n.rotating=!1,Vt(s.rotated)&&$e(i,eg,s.rotated,{once:!0}),un(i,eg,{degree:t,oldDegree:r},{cancelable:!1})})}return this},scaleX:function(t){return this.scale(t,this.imageData.scaleY),this},scaleY:function(t){return this.scale(this.imageData.scaleX,t),this},scale:function(t){var n=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,s=this.element,o=this.options,r=this.imageData;if(t=Number(t),i=Number(i),this.viewed&&!this.played&&o.scalable){var a=r.scaleX,l=r.scaleY,u=!1;if(en(t)?u=!0:t=a,en(i)?u=!0:i=l,u){if(Vt(o.scale)&&$e(s,tg,o.scale,{once:!0}),un(s,tg,{scaleX:t,scaleY:i,oldScaleX:a,oldScaleY:l})===!1)return this;r.scaleX=t,r.scaleY=i,this.scaling=!0,this.renderImage(function(){n.scaling=!1,Vt(o.scaled)&&$e(s,ng,o.scaled,{once:!0}),un(s,ng,{scaleX:t,scaleY:i,oldScaleX:a,oldScaleY:l},{cancelable:!1})})}}return this},zoom:function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,o=this.imageData;return t=Number(t),t<0?t=1/(1-t):t=1+t,this.zoomTo(o.width*t/o.naturalWidth,n,i,s),this},zoomTo:function(t){var n=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1,a=this.element,l=this.options,u=this.pointers,d=this.imageData,m=d.x,f=d.y,h=d.width,g=d.height,b=d.naturalWidth,x=d.naturalHeight;if(t=Math.max(0,t),en(t)&&this.viewed&&!this.played&&(r||l.zoomable)){if(!r){var y=Math.max(.01,l.minZoomRatio),w=Math.min(100,l.maxZoomRatio);t=Math.min(Math.max(t,y),w)}if(o)switch(o.type){case"wheel":l.zoomRatio>=.055&&t>.95&&t<1.05&&(t=1);break;case"pointermove":case"touchmove":case"mousemove":t>.99&&t<1.01&&(t=1);break}var v=b*t,S=x*t,k=v-h,N=S-g,E=d.ratio;if(Vt(l.zoom)&&$e(a,ig,l.zoom,{once:!0}),un(a,ig,{ratio:t,oldRatio:E,originalEvent:o})===!1)return this;if(this.zooming=!0,o){var I=FP(this.viewer),T=u&&Object.keys(u).length>0?WP(u):{pageX:o.pageX,pageY:o.pageY};d.x-=k*((T.pageX-I.left-m)/h),d.y-=N*((T.pageY-I.top-f)/g)}else Go(s)&&en(s.x)&&en(s.y)?(d.x-=k*((s.x-m)/h),d.y-=N*((s.y-f)/g)):(d.x-=k/2,d.y-=N/2);d.left=d.x,d.top=d.y,d.width=v,d.height=S,d.oldRatio=E,d.ratio=t,this.renderImage(function(){n.zooming=!1,Vt(l.zoomed)&&$e(a,sg,l.zoomed,{once:!0}),un(a,sg,{ratio:t,oldRatio:E,originalEvent:o},{cancelable:!1})}),i&&this.tooltip()}return this},play:function(){var t=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(!this.isShown||this.played)return this;var i=this.element,s=this.options;if(Vt(s.play)&&$e(i,og,s.play,{once:!0}),un(i,og)===!1)return this;var o=this.player,r=this.loadImage.bind(this),a=[],l=0,u=0;if(this.played=!0,this.onLoadWhenPlay=r,n&&this.requestFullscreen(n),Ge(o,qo),zt(this.items,function(f,h){var g=f.querySelector("img"),b=document.createElement("img");b.src=Ho(g,"originalUrl"),b.alt=g.getAttribute("alt"),b.referrerPolicy=g.referrerPolicy,l+=1,Ge(b,Ll),Ua(b,rn,s.transition),Oo(f,gl)&&(Ge(b,ui),u=h),a.push(b),$e(b,pi,r,{once:!0}),o.appendChild(b)}),en(s.interval)&&s.interval>0){var d=function(){clearTimeout(t.playing.timeout),Et(a[u],ui),u-=1,u=u>=0?u:l-1,Ge(a[u],ui),t.playing.timeout=setTimeout(d,s.interval)},m=function(){clearTimeout(t.playing.timeout),Et(a[u],ui),u+=1,u=u<l?u:0,Ge(a[u],ui),t.playing.timeout=setTimeout(m,s.interval)};l>1&&(this.playing={prev:d,next:m,timeout:setTimeout(m,s.interval)})}return this},stop:function(){var t=this;if(!this.played)return this;var n=this.element,i=this.options;if(Vt(i.stop)&&$e(n,rg,i.stop,{once:!0}),un(n,rg)===!1)return this;var s=this.player;return clearTimeout(this.playing.timeout),this.playing=!1,this.played=!1,zt(s.getElementsByTagName("img"),function(o){Ut(o,pi,t.onLoadWhenPlay)}),Et(s,qo),s.innerHTML="",this.exitFullscreen(),this},full:function(){var t=this,n=this.options,i=this.viewer,s=this.image,o=this.list;return!this.isShown||this.played||this.fulled||!n.inline?this:(this.fulled=!0,this.open(),Ge(this.button,Vh),n.transition&&(Et(o,rn),this.viewed&&Et(s,rn)),Ge(i,Ld),i.setAttribute("role","dialog"),i.setAttribute("aria-labelledby",this.title.id),i.setAttribute("aria-modal",!0),i.removeAttribute("style"),ki(i,{zIndex:n.zIndex}),n.focus&&this.enforceFocus(),this.initContainer(),this.viewerData=ai({},this.containerData),this.renderList(),this.viewed&&this.initImage(function(){t.renderImage(function(){n.transition&&setTimeout(function(){Ge(s,rn),Ge(o,rn)},0)})}),this)},exit:function(){var t=this,n=this.options,i=this.viewer,s=this.image,o=this.list;return!this.isShown||this.played||!this.fulled||!n.inline?this:(this.fulled=!1,this.close(),Et(this.button,Vh),n.transition&&(Et(o,rn),this.viewed&&Et(s,rn)),n.focus&&this.clearEnforceFocus(),i.removeAttribute("role"),i.removeAttribute("aria-labelledby"),i.removeAttribute("aria-modal"),Et(i,Ld),ki(i,{zIndex:n.zIndexInline}),this.viewerData=ai({},this.parentData),this.renderViewer(),this.renderList(),this.viewed&&this.initImage(function(){t.renderImage(function(){n.transition&&setTimeout(function(){Ge(s,rn),Ge(o,rn)},0)})}),this)},tooltip:function(){var t=this,n=this.options,i=this.tooltipBox,s=this.imageData;return!this.viewed||this.played||!n.tooltip?this:(i.textContent="".concat(Math.round(s.ratio*100),"%"),this.tooltipping?clearTimeout(this.tooltipping):n.transition?(this.fading&&un(i,vi),Ge(i,qo),Ge(i,Ll),Ge(i,rn),i.removeAttribute("aria-hidden"),i.initialOffsetWidth=i.offsetWidth,Ge(i,ui)):(Ge(i,qo),i.removeAttribute("aria-hidden")),this.tooltipping=setTimeout(function(){n.transition?($e(i,vi,function(){Et(i,qo),Et(i,Ll),Et(i,rn),i.setAttribute("aria-hidden",!0),t.fading=!1},{once:!0}),Et(i,ui),t.fading=!0):(Et(i,qo),i.setAttribute("aria-hidden",!0)),t.tooltipping=!1},1e3),this)},toggle:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null;return this.imageData.ratio===1?this.zoomTo(this.imageData.oldRatio,!0,null,t):this.zoomTo(1,!0,null,t),this},reset:function(){return this.viewed&&!this.played&&(this.imageData=ai({},this.initialImageData),this.renderImage()),this},update:function(){var t=this,n=this.element,i=this.options,s=this.isImg;if(s&&!n.parentNode)return this.destroy();var o=[];if(zt(s?[n]:n.querySelectorAll("img"),function(u){Vt(i.filter)?i.filter.call(t,u)&&o.push(u):t.getImageURL(u)&&o.push(u)}),!o.length)return this;if(this.images=o,this.length=o.length,this.ready){var r=[];if(zt(this.items,function(u,d){var m=u.querySelector("img"),f=o[d];f&&m?(f.src!==m.src||f.alt!==m.alt)&&r.push(d):r.push(d)}),ki(this.list,{width:"auto"}),this.initList(),this.isShown)if(this.length){if(this.viewed){var a=r.indexOf(this.index);if(a>=0)this.viewed=!1,this.view(Math.max(Math.min(this.index-a,this.length-1),0));else{var l=this.items[this.index];Ge(l,gl),l.setAttribute("aria-selected",!0)}}}else this.image=null,this.viewed=!1,this.index=0,this.imageData={},this.canvas.innerHTML="",this.title.innerHTML=""}else this.build();return this},destroy:function(){var t=this.element,n=this.options;return t[it]?(this.destroyed=!0,this.ready?(this.played&&this.stop(),n.inline?(this.fulled&&this.exit(),this.unbind()):this.isShown?(this.viewing&&(this.imageRendering?this.imageRendering.abort():this.imageInitializing&&this.imageInitializing.abort()),this.hiding&&this.transitioning.abort(),this.hidden()):this.showing&&(this.transitioning.abort(),this.hidden()),this.ready=!1,this.viewer.parentNode.removeChild(this.viewer)):n.inline&&(this.delaying?this.delaying.abort():this.initializing&&this.initializing.abort()),n.inline||Ut(t,hr,this.onStart),t[it]=void 0,this):this}},ZP={getImageURL:function(t){var n=this.options.url;return Va(n)?n=t.getAttribute(n):Vt(n)?n=n.call(this,t):n="",n},enforceFocus:function(){var t=this;this.clearEnforceFocus(),$e(document,qh,this.onFocusin=function(n){var i=t.viewer,s=n.target;if(!(s===document||s===i||i.contains(s))){for(;s;){if(s.getAttribute("tabindex")!==null||s.getAttribute("aria-modal")==="true")return;s=s.parentElement}i.focus()}})},clearEnforceFocus:function(){this.onFocusin&&(Ut(document,qh,this.onFocusin),this.onFocusin=null)},open:function(){var t=this.body;Ge(t,Uh),this.scrollbarWidth>0&&(t.style.paddingRight="".concat(this.scrollbarWidth+(parseFloat(this.initialBodyComputedPaddingRight)||0),"px"))},close:function(){var t=this.body;Et(t,Uh),this.scrollbarWidth>0&&(t.style.paddingRight=this.initialBodyPaddingRight)},shown:function(){var t=this.element,n=this.options,i=this.viewer;this.fulled=!0,this.isShown=!0,this.render(),this.bind(),this.showing=!1,n.focus&&(i.focus(),this.enforceFocus()),Vt(n.shown)&&$e(t,$h,n.shown,{once:!0}),un(t,$h)!==!1&&this.ready&&this.isShown&&!this.hiding&&this.view(this.index)},hidden:function(){var t=this.element,n=this.options,i=this.viewer;n.fucus&&this.clearEnforceFocus(),this.close(),this.unbind(),Ge(i,io),i.removeAttribute("role"),i.removeAttribute("aria-labelledby"),i.removeAttribute("aria-modal"),i.setAttribute("aria-hidden",!0),this.resetList(),this.resetImage(),this.fulled=!1,this.viewed=!1,this.isShown=!1,this.hiding=!1,this.destroyed||(Vt(n.hidden)&&$e(t,Kh,n.hidden,{once:!0}),un(t,Kh,null,{cancelable:!1}))},requestFullscreen:function(t){var n=this.element.ownerDocument;if(this.fulled&&!(n.fullscreenElement||n.webkitFullscreenElement||n.mozFullScreenElement||n.msFullscreenElement)){var i=n.documentElement;i.requestFullscreen?Go(t)?i.requestFullscreen(t):i.requestFullscreen():i.webkitRequestFullscreen?i.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):i.mozRequestFullScreen?i.mozRequestFullScreen():i.msRequestFullscreen&&i.msRequestFullscreen()}},exitFullscreen:function(){var t=this.element.ownerDocument;this.fulled&&(t.fullscreenElement||t.webkitFullscreenElement||t.mozFullScreenElement||t.msFullscreenElement)&&(t.exitFullscreen?t.exitFullscreen():t.webkitExitFullscreen?t.webkitExitFullscreen():t.mozCancelFullScreen?t.mozCancelFullScreen():t.msExitFullscreen&&t.msExitFullscreen())},change:function(t){var n=this.options,i=this.pointers,s=i[Object.keys(i)[0]];if(s){var o=s.endX-s.startX,r=s.endY-s.startY;switch(this.action){case ql:(o!==0||r!==0)&&(this.pointerMoved=!0,this.move(o,r,t));break;case la:this.zoom(HP(i),!1,null,t);break;case Lw:{this.action="switched";var a=Math.abs(o);a>1&&a>Math.abs(r)&&(this.pointers={},o>1?this.prev(n.loop):o<-1&&this.next(n.loop));break}}zt(i,function(l){l.startX=l.endX,l.startY=l.endY})}},isSwitchable:function(){var t=this.imageData,n=this.viewerData;return this.length>1&&t.x>=0&&t.y>=0&&t.width<=n.width&&t.height<=n.height}},JP=rs.Viewer,QP=(function(e){return function(){return e+=1,e}})(-1),Bw=(function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(EP(this,e),!t||t.nodeType!==1)throw new Error("The first argument is required and must be an element.");this.element=t,this.options=ai({},Mh,Go(n)&&n),this.action=!1,this.fading=!1,this.fulled=!1,this.hiding=!1,this.imageClicked=!1,this.imageData={},this.index=this.options.initialViewIndex,this.isImg=!1,this.isShown=!1,this.length=0,this.moving=!1,this.played=!1,this.playing=!1,this.pointers={},this.ready=!1,this.rotating=!1,this.scaling=!1,this.showing=!1,this.timeout=!1,this.tooltipping=!1,this.viewed=!1,this.viewing=!1,this.wheeling=!1,this.zooming=!1,this.pointerMoved=!1,this.id=QP(),this.init()}return SP(e,[{key:"init",value:function(){var n=this,i=this.element,s=this.options;if(!i[it]){i[it]=this,s.focus&&!s.keyboard&&(s.focus=!1);var o=i.localName==="img",r=[];if(zt(o?[i]:i.querySelectorAll("img"),function(u){Vt(s.filter)?s.filter.call(n,u)&&r.push(u):n.getImageURL(u)&&r.push(u)}),this.isImg=o,this.length=r.length,this.images=r,this.initBody(),Fo(document.createElement(it).style.transition)&&(s.transition=!1),s.inline){var a=0,l=function(){if(a+=1,a===n.length){var d;n.initializing=!1,n.delaying={abort:function(){clearTimeout(d)}},d=setTimeout(function(){n.delaying=!1,n.build()},0)}};this.initializing={abort:function(){zt(r,function(d){d.complete||(Ut(d,pi,l),Ut(d,uo,l))})}},zt(r,function(u){if(u.complete)l();else{var d,m;$e(u,pi,d=function(){Ut(u,uo,m),l()},{once:!0}),$e(u,uo,m=function(){Ut(u,pi,d),l()},{once:!0})}})}else $e(i,hr,this.onStart=function(u){var d=u.target;d.localName==="img"&&(!Vt(s.filter)||s.filter.call(n,d))&&n.view(n.images.indexOf(d))})}}},{key:"build",value:function(){if(!this.ready){var n=this.element,i=this.options,s=n.parentNode,o=document.createElement("div");o.innerHTML=_P;var r=o.querySelector(".".concat(it,"-container")),a=r.querySelector(".".concat(it,"-title")),l=r.querySelector(".".concat(it,"-toolbar")),u=r.querySelector(".".concat(it,"-navbar")),d=r.querySelector(".".concat(it,"-button")),m=r.querySelector(".".concat(it,"-canvas"));if(this.parent=s,this.viewer=r,this.title=a,this.toolbar=l,this.navbar=u,this.button=d,this.canvas=m,this.footer=r.querySelector(".".concat(it,"-footer")),this.tooltipBox=r.querySelector(".".concat(it,"-tooltip")),this.player=r.querySelector(".".concat(it,"-player")),this.list=r.querySelector(".".concat(it,"-list")),r.id="".concat(it).concat(this.id),a.id="".concat(it,"Title").concat(this.id),Ge(a,i.title?xl(Array.isArray(i.title)?i.title[0]:i.title):io),Ge(u,i.navbar?xl(i.navbar):io),Ua(d,io,!i.button),i.keyboard&&d.setAttribute("tabindex",0),i.backdrop&&(Ge(r,"".concat(it,"-backdrop")),!i.inline&&i.backdrop!=="static"&&zd(m,cc,"hide")),Va(i.className)&&i.className&&i.className.split(Jm).forEach(function(v){Ge(r,v)}),i.toolbar){var f=document.createElement("ul"),h=Go(i.toolbar),g=bl.slice(0,3),b=bl.slice(7,9),x=bl.slice(9);h||Ge(l,xl(i.toolbar)),zt(h?i.toolbar:bl,function(v,S){var k=h&&Go(v),N=h?Qm(S):v,E=k&&!Fo(v.show)?v.show:v;if(!(!E||!i.zoomable&&g.indexOf(N)!==-1||!i.rotatable&&b.indexOf(N)!==-1||!i.scalable&&x.indexOf(N)!==-1)){var I=k&&!Fo(v.size)?v.size:v,T=k&&!Fo(v.click)?v.click:v,j=document.createElement("li");i.keyboard&&j.setAttribute("tabindex",0),j.setAttribute("role","button"),Ge(j,"".concat(it,"-").concat(N)),Vt(T)||zd(j,cc,N),en(E)&&Ge(j,xl(E)),["small","large"].indexOf(I)!==-1?Ge(j,"".concat(it,"-").concat(I)):N==="play"&&Ge(j,"".concat(it,"-large")),Vt(T)&&$e(j,hr,T),f.appendChild(j)}}),l.appendChild(f)}else Ge(l,io);if(!i.rotatable){var y=l.querySelectorAll('li[class*="rotate"]');Ge(y,ha),zt(y,function(v){l.appendChild(v)})}if(i.inline)Ge(d,CP),ki(r,{zIndex:i.zIndexInline}),window.getComputedStyle(s).position==="static"&&ki(s,{position:"relative"}),s.insertBefore(r,n.nextSibling);else{Ge(d,IP),Ge(r,Ld),Ge(r,Ll),Ge(r,io),ki(r,{zIndex:i.zIndex});var w=i.container;Va(w)&&(w=n.ownerDocument.querySelector(w)),w||(w=this.body),w.appendChild(r)}if(i.inline&&(this.render(),this.bind(),this.isShown=!0),this.ready=!0,Vt(i.ready)&&$e(n,Hh,i.ready,{once:!0}),un(n,Hh)===!1){this.ready=!1;return}this.ready&&i.inline&&this.view(this.index)}}}],[{key:"noConflict",value:function(){return window.Viewer=JP,e}},{key:"setDefaults",value:function(n){ai(Mh,Go(n)&&n)}}])})();ai(Bw.prototype,$P,XP,KP,YP,ZP);const eA=()=>window.innerWidth<=768||/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);class tA{constructor(t={}){this.viewer=null,this.container=null,this.options={zoomStep:t.zoomStep||.2,minZoom:t.minZoom||.1,maxZoom:t.maxZoom||5,enableKeyboard:t.enableKeyboard!==!1}}open(t,n=""){this.close(),this.container=document.createElement("div"),this.container.style.display="none";const i=document.createElement("img");i.src=t,i.alt=n,this.container.appendChild(i),document.body.appendChild(this.container);const s=eA(),o=s?{zoomIn:1,zoomOut:1,oneToOne:0,reset:1,prev:0,play:0,next:0,rotateLeft:1,rotateRight:1,flipHorizontal:0,flipVertical:0}:{zoomIn:1,zoomOut:1,oneToOne:1,reset:1,prev:0,play:0,next:0,rotateLeft:1,rotateRight:1,flipHorizontal:1,flipVertical:1};this.viewer=new Bw(this.container,{inline:!1,button:!0,navbar:!1,title:!!n,toolbar:o,fullscreen:!s,keyboard:this.options.enableKeyboard,backdrop:!0,loading:!0,loop:!1,minZoomRatio:this.options.minZoom,maxZoomRatio:this.options.maxZoom,zoomRatio:this.options.zoomStep,hidden:()=>{this.cleanup()}}),this.viewer.show()}close(){this.viewer&&this.viewer.hide()}cleanup(){this.viewer&&(this.viewer.destroy(),this.viewer=null),this.container&&this.container.parentNode&&(this.container.parentNode.removeChild(this.container),this.container=null)}destroy(){this.close(),this.cleanup()}}function nA(e){const t=e.getData("text/uri-list");if(t){const s=t.split(`
|
|
25
|
+
`).filter(o=>o&&!o.startsWith("#"));if(s.length>0&&ag(s[0]))return s[0].trim()}const n=e.getData("text/plain");if(n&&ag(n.trim()))return n.trim();const i=e.getData("text/html");if(i){const s=i.match(/<img[^>]+src=["']([^"']+)["']/i);if(s&&s[1])return s[1]}return null}function ag(e){if(!e)return!1;try{new URL(e)}catch{return!1}const t=[".jpg",".jpeg",".png",".gif",".webp",".svg",".bmp",".ico"],n=e.toLowerCase();return t.some(s=>n.includes(s))?!0:[/\.(jpg|jpeg|png|gif|webp|svg|bmp)(\?|$)/i,/\/image\//i,/\/images\//i,/\/img\//i,/\/photo\//i,/data:image\//i,/blob:/i].some(s=>s.test(e))}const iA=e=>{const t=e,{insertFragment:n,drop:i,pointerUp:s}=t,o=new tA({zoomStep:.3,minZoom:.1,maxZoom:5,enableKeyboard:!0});return t.insertFragment=(r,a,l)=>{var u;if((u=r==null?void 0:r.files)!=null&&u.length&&Hp(r.files[0].type)){const d=r.files[0];Wp(e,d,a,!1);return}n(r,a,l)},t.drop=r=>{var a,l;if((l=(a=r.dataTransfer)==null?void 0:a.files)!=null&&l.length){const u=r.dataTransfer.files[0];if(Hp(u.type)){const d=Un(e,Rn(e,r.x,r.y));return Wp(e,u,d,!0),!0}if(Yv(u.type)){const d=Un(e,Rn(e,r.x,r.y));return(async()=>{try{const m=u.name.replace(/\.[^.]+$/,"");await $p.initialize();const f=await $p.addAsset({type:Ei.AUDIO,source:Kb.LOCAL,name:u.name,blob:u,mimeType:u.type});await Ki.updateCachedMedia(f.url,{metadata:{name:m}});const[h,g]=await Promise.all([Zv(u),Jv(u)]);let b;if(g){const x=`/__aitu_cache__/image/${f.id}-cover.png`;await Ki.cacheMediaFromBlob(x,g,"image",{taskId:`${f.id}-cover`,name:`${m}-cover`}),b=x}await rr(e,f.url,{title:m,duration:h,previewImageUrl:b},d,!0)}catch(m){console.error("[withImagePlugin] Failed to insert audio from drop:",m)}})(),!0}}if(r.dataTransfer){const u=nA(r.dataTransfer);if(u){const d=Un(e,Rn(e,r.x,r.y));return Qv(e,u,d).catch(m=>{console.error("[withImagePlugin] Failed to insert image from URL:",m)}),!0}}return i(r)},t.pointerUp=r=>{const a=ek(e);if(a&&!Yb(e)&&!ka(e)&&!Ea(e)){const l=Un(e,Rn(e,r.x,r.y)),u=ed(e,l);u&&li.isMindElement(e,u)&&li.hasImage(u)&&tk(e,u,l)&&a===u&&o.open(u.data.image.url)}s(r)},t},Gr={MAX_CHARS_PER_LINE:50};function sA(e){const t=e.split(`
|
|
26
|
+
`),n=[];for(const i of t)if(i.length<=Gr.MAX_CHARS_PER_LINE)n.push(i);else{let s=i;for(;s.length>0;){let o=Gr.MAX_CHARS_PER_LINE;if(s.length>Gr.MAX_CHARS_PER_LINE){const r=s.lastIndexOf(" ",Gr.MAX_CHARS_PER_LINE);r>Gr.MAX_CHARS_PER_LINE*.7&&(o=r)}n.push(s.substring(0,o).trim()),s=s.substring(o).trim()}}return n.join(`
|
|
27
|
+
`)}function oA(e){var i,s;if(!e)return!1;const t=!!e.text||!!((i=e.data)!=null&&i.text),n=!!e.elements||!!((s=e.data)!=null&&s.elements);return t&&!n}function rA(e){var n;const t=e;if(t.text)return t.text;if((n=t.data)!=null&&n.text)return t.data.text;if(typeof t.getData=="function"){const i=t.getData("text/plain");if(i)return i}return null}const aA=e=>{const{insertFragment:t}=e;return e.insertFragment=(n,i,s)=>{if(oA(n)){const o=rA(n);if(o&&o.trim()){const r=o.trim(),a=Zb(r);if(a&&a.length>0){const u=Math.round(window.innerWidth*.5);td(e,a,i,u);return}const l=sA(r);Qn.insertText(e,i,l);return}}t(n,i,s)},e},lA=e=>{const t=e;return t.renderImage=(n,i)=>{const s=Dc.createRoot(n);s.render(c.jsxDEV(jh,{...i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/with-common.tsx",lineNumber:20,columnNumber:17},void 0));let o={...i};return{destroy:()=>{setTimeout(()=>{s.unmount()},0)},update:a=>{o={...o,...a},s.render(c.jsxDEV(jh,{...o},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/with-common.tsx",lineNumber:30,columnNumber:21},void 0))}}},aA(iA(t))},cA=p.forwardRef(({children:e,gap:t,align:n,justifyContent:i,className:s,style:o},r)=>c.jsxDEV("div",{className:ne("stack stack_horizontal",s),style:{"--gap":t,alignItems:n,justifyContent:i,...o},ref:r,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/stack.tsx",lineNumber:23,columnNumber:7},void 0)),uA=p.forwardRef(({children:e,gap:t,align:n,justifyContent:i,className:s,style:o},r)=>c.jsxDEV("div",{className:ne("stack stack_vertical",s),style:{"--gap":t,justifyItems:n,justifyContent:i,...o},ref:r,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/stack.tsx",lineNumber:45,columnNumber:7},void 0)),Kt={Row:cA,Col:uA},Mt=an.forwardRef(({children:e,padding:t,className:n,style:i,...s},o)=>c.jsxDEV("div",{className:ne("island",n),style:{"--padding":t,...i},ref:o,...s,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/island.tsx",lineNumber:16,columnNumber:5},void 0)),Fw=e=>e?typeof e=="string"?e:Zi(e)&&e.type==="solid"&&e.solid?e.solid.color:null:null,dA=(e,t)=>{as.setFillColor(e,null,{getMemorizeKey:ls,callback:(n,i)=>{if(!bi(e,n))return;const s=n.fill,o=Fw(s)||Jb(e,n);if(!nk(o))return;const r=po(o),a=yr(t)?r:Nr(r,t);Se.setNode(e,{fill:a},i)}})},mA=(e,t)=>{as.setFillColor(e,null,{getMemorizeKey:ls,callback:(n,i)=>{if(!bi(e,n))return;const s=n.fill,o=Fw(s)||Jb(e,n),r=typeof o=="string"?ar(o):void 0;rm(t)?Se.setNode(e,{fill:"none"},i):am(r)||yr(r)?Se.setNode(e,{fill:t},i):Se.setNode(e,{fill:Nr(t,r)},i)}})},pA=(e,t)=>{as.setStrokeColor(e,null,{getMemorizeKey:ls,callback:(n,i)=>{const s=e0(e,n),o=po(s),r=yr(t)?o:Nr(o,t);Se.setNode(e,{strokeColor:r},i)}})},fA=(e,t)=>{as.setStrokeColor(e,null,{getMemorizeKey:ls,callback:(n,i)=>{const s=e0(e,n),o=ar(s);rm(t)?Se.setNode(e,{strokeColor:"none"},i):am(o)||yr(o)?Se.setNode(e,{strokeColor:t},i):Se.setNode(e,{strokeColor:Nr(t,o)},i)}})},hA=(e,t)=>{as.setStrokeStyle(e,t,{getMemorizeKey:ls,callback:(n,i)=>{Se.setNode(e,{strokeStyle:t},i)}})},lg=(e,t)=>{as.setStrokeWidth(e,t,{getMemorizeKey:ls,callback:(n,i)=>{Se.setNode(e,{strokeWidth:t},i)}})},gA=(e,t,n)=>{const i=ar(t);rm(n)?Ds.setTextColor(e,null):am(i)||yr(i)?Ds.setTextColor(e,n):Ds.setTextColor(e,Nr(n,i))},bA=(e,t,n)=>{const i=po(t),s=yr(n)?i:Nr(i,n);Ds.setTextColor(e,s)},Gw=(e,t)=>{try{Ds.setFontSize(e,t,16)}catch{const i=xn(e);i&&i.length>0&&i.forEach(s=>{try{s.addMark("font-size",t)}catch(o){console.error("Failed to set font size mark:",o)}})}},xA=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i),Ke.addMark(i,"font-family",t)}catch(s){console.error("Failed to set font family:",s)}})},Iu=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i),t?Ke.addMark(i,"text-shadow",t):Ke.removeMark(i,"text-shadow")}catch(s){console.error("Failed to set text shadow:",s)}})},cg=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i),t?Ke.addMark(i,"text-gradient",t):Ke.removeMark(i,"text-gradient")}catch(s){console.error("Failed to set text gradient:",s)}})},Hw=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i),Ke.addMark(i,"font-weight",String(t))}catch(s){console.error("Failed to set font weight:",s)}})},wA=(e,t)=>{try{let n;t==="left"?n=Zo.left:t==="center"?n=Zo.center:n=Zo.right,Ds.setTextAlign(e,n)}catch(n){console.error("Failed to set text align:",n)}},yA=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i),Ke.addMark(i,"line-height",String(t))}catch(s){console.error("Failed to set line height:",s)}})},NA=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i);const s=typeof t=="number"?`${t}px`:t;Ke.addMark(i,"letter-spacing",s)}catch(s){console.error("Failed to set letter spacing:",s)}})},vA=e=>{const t=xn(e);t&&t.length>0&&t.forEach(n=>{try{Dn(n);const i=Ke.marks(n);(i?!!i.bold:!1)?Ke.removeMark(n,"bold"):Ke.addMark(n,"bold",!0)}catch(i){console.error("Failed to toggle bold:",i)}})},kA=e=>{const t=xn(e);t&&t.length>0&&t.forEach(n=>{try{Dn(n);const i=Ke.marks(n);(i?!!i.italic:!1)?Ke.removeMark(n,"italic"):Ke.addMark(n,"italic",!0)}catch(i){console.error("Failed to toggle italic:",i)}})},EA=e=>{const t=xn(e);t&&t.length>0&&t.forEach(n=>{try{Dn(n);const i=Ke.marks(n);(i?!!i.underlined:!1)?Ke.removeMark(n,"underlined"):Ke.addMark(n,"underlined",!0)}catch(i){console.error("Failed to toggle underline:",i)}})},SA=e=>{const t=xn(e);t&&t.length>0&&t.forEach(n=>{try{Dn(n);const i=Ke.marks(n);(i?!!i.strikethrough:!1)?Ke.removeMark(n,"strikethrough"):Ke.addMark(n,"strikethrough",!0)}catch(i){console.error("Failed to toggle strikethrough:",i)}})},TA=e=>{const t=xn(e);t&&t.length>0&&t.forEach(n=>{try{Dn(n);const i=Ke.marks(n);(i?!!i.superscript:!1)?Ke.removeMark(n,"superscript"):(Ke.removeMark(n,"subscript"),Ke.addMark(n,"superscript",!0))}catch(i){console.error("Failed to toggle superscript:",i)}})},DA=e=>{const t=xn(e);t&&t.length>0&&t.forEach(n=>{try{Dn(n);const i=Ke.marks(n);(i?!!i.subscript:!1)?Ke.removeMark(n,"subscript"):(Ke.removeMark(n,"superscript"),Ke.addMark(n,"subscript",!0))}catch(i){console.error("Failed to toggle subscript:",i)}})},_A=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i),t?Ke.addMark(i,"background-color",t):Ke.removeMark(i,"background-color")}catch(s){console.error("Failed to set background color:",s)}})},IA=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i),t&&t!=="none"?Ke.addMark(i,"text-transform",t):Ke.removeMark(i,"text-transform")}catch(s){console.error("Failed to set text transform:",s)}})},CA=(e,t,n)=>{const i=xn(e);i&&i.length>0&&i.forEach(s=>{try{Dn(s),t&&t>0?(Ke.addMark(s,"text-stroke",t),n&&Ke.addMark(s,"text-stroke-color",n)):(Ke.removeMark(s,"text-stroke"),Ke.removeMark(s,"text-stroke-color"))}catch(o){console.error("Failed to set text stroke:",o)}})},jA=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i),t?Ke.addMark(i,"text-decoration-style",t):Ke.removeMark(i,"text-decoration-style")}catch(s){console.error("Failed to set text decoration style:",s)}})},PA=(e,t)=>{const n=xn(e);n&&n.length>0&&n.forEach(i=>{try{Dn(i),t?Ke.addMark(i,"text-decoration-color",t):Ke.removeMark(i,"text-decoration-color")}catch(s){console.error("Failed to set text decoration color:",s)}})},AA=e=>{const t=xn(e);if(t&&t.length>0){const n=t[0];try{return Dn(n),Ke.marks(n)||{}}catch(i){return console.error("Failed to get text marks:",i),{}}}return{}},MA=e=>{const t=xn(e);if(t&&t.length>0){const n=t[0];try{const{selection:i}=n;if(i){const s=Array.from(Ke.nodes(n,{at:i,match:o=>{const r=o.type==="paragraph",a="align"in o;return Ke.isBlock(n,o)&&(r||a)}}));if(s.length>0){const[o]=s[0],r=o.align;if(r===Zo.right||r==="right")return"right";if(r===Zo.center||r==="center")return"center";if(r===Zo.left||r==="left")return"left"}}}catch(i){console.error("Failed to get text align:",i)}}return"left"},VA=(e,t)=>{as.setFillColor(e,null,{getMemorizeKey:ls,callback:(n,i)=>{if(!bi(e,n))return;const s=Qb(t),o={type:"gradient",gradient:t,fallbackColor:s};Se.setNode(e,{fill:s,fillConfig:o},i)}})},ug=(e,t)=>{as.setFillColor(e,null,{getMemorizeKey:ls,callback:(n,i)=>{if(!bi(e,n))return;const s="#FFFFFF",o={type:"image",image:t,fallbackColor:s};Se.setNode(e,{fill:s,fillConfig:o},i)}})},UA=(e,t)=>{as.setFillColor(e,null,{getMemorizeKey:ls,callback:(n,i)=>{if(!bi(e,n))return;const s=n.fillConfig,o=n.fill;if((s==null?void 0:s.type)!==t)switch(t){case"solid":{let r="#FFFFFF";typeof o=="string"&&o!=="none"?r=o:s!=null&&s.solid&&(r=s.solid.color),Se.setNode(e,{fill:r,fillConfig:void 0},i);break}case"gradient":{const r={type:"linear",angle:90,stops:[{offset:0,color:"#FFFFFF"},{offset:1,color:"#000000"}]},a=(s==null?void 0:s.gradient)||r,l=Qb(a),u={type:"gradient",gradient:a,fallbackColor:l};Se.setNode(e,{fill:l,fillConfig:u},i);break}case"image":{const r={imageUrl:"",mode:"stretch",scale:1,offsetX:0,offsetY:0,rotation:0},a="#FFFFFF",l={type:"image",image:(s==null?void 0:s.image)||r,fallbackColor:a};Se.setNode(e,{fill:a,fillConfig:l},i);break}default:return}}})},RA=(e,t)=>{const n=ut(e);for(const i of n)if(Sn(i)){const s=e.children.findIndex(o=>o.id===i.id);s!==-1&&Se.setNode(e,{fillColor:t},[s])}},qA=({board:e,currentColor:t,fontColorIcon:n,title:i})=>{const[s,o]=p.useState(!1),r=J.getBoardContainer(e),a=p.useCallback(u=>{gA(e,t||u,u)},[e,t]),l=p.useCallback(u=>{t&&bA(e,t,u)},[e,t]);return c.jsxDEV(Ft,{sideOffset:12,open:s,onOpenChange:u=>{o(u)},placement:"top",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:ne("property-button"),selected:s,visible:!0,icon:n,type:"button",tooltip:i,"aria-label":i,onPointerUp:()=>{o(!s)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-color-button.tsx",lineNumber:54,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-color-button.tsx",lineNumber:53,columnNumber:7},void 0),c.jsxDEV(Ht,{container:r,children:c.jsxDEV(Mt,{padding:4,className:ne(`${Yt}`),children:c.jsxDEV(fo,{value:t,onChange:a,onOpacityChange:l},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-color-button.tsx",lineNumber:72,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-color-button.tsx",lineNumber:68,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-color-button.tsx",lineNumber:67,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-color-button.tsx",lineNumber:45,columnNumber:5},void 0)},Bd=[{key:"title",labelZh:"标题",labelEn:"Title",previewSize:26,...Fi.title},{key:"subtitle",labelZh:"副标题",labelEn:"Subtitle",previewSize:22,...Fi.subtitle},{key:"h1",labelZh:"标题 1",labelEn:"Heading 1",previewSize:20,...Fi.h1,divider:!0},{key:"h2",labelZh:"标题 2",labelEn:"Heading 2",previewSize:18,...Fi.h2},{key:"h3",labelZh:"标题 3",labelEn:"Heading 3",previewSize:16,...Fi.h3},{key:"h4",labelZh:"标题 4",labelEn:"Heading 4",previewSize:15,...Fi.h4},{key:"body",labelZh:"正文",labelEn:"Body",previewSize:14,...Fi.body,divider:!0},{key:"caption",labelZh:"注释",labelEn:"Caption",previewSize:13,...Fi.caption},{key:"footnote",labelZh:"脚注",labelEn:"Footnote",previewSize:12,...Fi.footnote}],LA=e=>{if(!e)return null;const t=parseInt(e,10);if(isNaN(t))return null;for(const n of Bd)if(n.fontSize===t)return n.key;return null},OA=({board:e,currentFontSize:t,title:n})=>{const[i,s]=p.useState(!1),{language:o}=We(),r=J.getBoardContainer(e),a=LA(t),l=p.useCallback(d=>{Gw(e,String(d.fontSize)),Hw(e,d.fontWeight),Ds.setTextColor(e,d.color),s(!1)},[e]),u=(()=>{if(a){const d=Bd.find(m=>m.key===a);if(d)return o==="zh"?d.labelZh:d.labelEn}return t||"16"})();return c.jsxDEV(Ft,{sideOffset:12,open:i,onOpenChange:s,placement:"bottom",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:ne("property-button"),selected:i,visible:!0,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>s(!i),children:c.jsxDEV("div",{style:{fontSize:"12px",fontWeight:"bold",minWidth:"20px"},children:u},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:97,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:88,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:87,columnNumber:7},void 0),c.jsxDEV(Ht,{container:r,children:c.jsxDEV(Mt,{padding:4,className:ne(`${Yt}`),children:c.jsxDEV(Kt.Col,{gap:0,style:{minWidth:"200px"},children:[c.jsxDEV("div",{style:{fontSize:"12px",color:"#666",marginBottom:"2px",padding:"4px 10px 0"},children:o==="zh"?"字体样式":"Font Style"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:108,columnNumber:13},void 0),c.jsxDEV("div",{style:{maxHeight:"320px",overflowY:"auto"},children:Bd.map(d=>{const m=a===d.key;return c.jsxDEV(an.Fragment,{children:[d.divider&&c.jsxDEV("div",{style:{height:"1px",backgroundColor:"#e8e8e8",margin:"4px 10px"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:118,columnNumber:23},void 0),c.jsxDEV("div",{onClick:()=>l(d),style:{padding:"6px 10px",cursor:"pointer",backgroundColor:m?"#f0f7ff":"transparent",borderLeft:m?"3px solid #0052d9":"3px solid transparent",borderRadius:"2px",transition:"background-color 0.15s",display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"8px"},onMouseEnter:f=>{m||(f.currentTarget.style.backgroundColor="#f5f5f5")},onMouseLeave:f=>{m||(f.currentTarget.style.backgroundColor="transparent")},children:[c.jsxDEV("span",{style:{fontSize:`${d.previewSize}px`,fontWeight:d.fontWeight,color:d.color,lineHeight:1.4},children:o==="zh"?d.labelZh:d.labelEn},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:145,columnNumber:23},void 0),c.jsxDEV("span",{style:{fontSize:"11px",color:"#bbb",flexShrink:0},children:[d.fontSize,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:155,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:120,columnNumber:21},void 0)]},d.key,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:116,columnNumber:19},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:112,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:107,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:103,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:102,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:81,columnNumber:5},void 0)},zA=({board:e,currentColor:t,title:n,hasStrokeStyle:i,hasStrokeWidth:s,currentStrokeWidth:o,children:r})=>{const[a,l]=p.useState(!1),[u,d]=p.useState(String(o||2)),m=t&&po(t),f=t?ar(t):100,h=J.getBoardContainer(e);an.useEffect(()=>{d(String(o||2))},[o]);const g=s0(f)?ik:o0(m)?sk:void 0,b=g?c.jsxDEV(g,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:67,columnNumber:32},void 0):void 0,x=E=>{hA(e,E)},y=p.useCallback(E=>{fA(e,E)},[e]),w=p.useCallback(E=>{pA(e,E)},[e]),v=p.useCallback(E=>{lg(e,E),d(String(E))},[e]),S=p.useCallback(E=>{d(E.target.value)},[]),k=p.useCallback(()=>{const E=parseInt(u,10);!isNaN(E)&&E>=1&&E<=100?lg(e,E):d(String(o||2))},[e,u,o]),N=p.useCallback(E=>{E.key==="Enter"?(k(),E.target.blur()):E.key==="Escape"&&(d(String(o||2)),E.target.blur())},[k,o]);return c.jsxDEV(Ft,{sideOffset:12,crossAxisOffset:40,open:a,onOpenChange:E=>{l(E)},placement:"left",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:ne("property-button"),visible:!0,icon:b,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>{l(!a)},children:!b&&r},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:124,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:123,columnNumber:7},void 0),c.jsxDEV(Ht,{container:h,children:c.jsxDEV(Mt,{padding:4,className:ne(`${Yt}`,"stroke-setting",{"has-stroke-style":i}),children:c.jsxDEV(Kt.Col,{children:[s&&c.jsxDEV("div",{className:"stroke-width-section",style:{marginBottom:"8px"},children:c.jsxDEV(Kt.Row,{gap:2,align:"center",children:[c.jsxDEV("span",{style:{fontSize:"12px",color:"var(--color-on-surface)",whiteSpace:"nowrap"},children:"线宽:"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:151,columnNumber:19},void 0),c.jsxDEV("div",{style:{flex:1,minWidth:"100px"},children:c.jsxDEV(_c,{value:o||2,min:1,max:100,step:1,onChange:E=>v(E),label:!1},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:153,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:152,columnNumber:19},void 0),c.jsxDEV("div",{className:"stroke-width-input-wrapper",children:[c.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:u,onChange:S,onBlur:k,onKeyDown:N,className:"stroke-width-input"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:163,columnNumber:21},void 0),c.jsxDEV("span",{className:"stroke-width-input-unit",children:"px"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:173,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:162,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:150,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:149,columnNumber:15},void 0),i&&c.jsxDEV("div",{className:"stroke-style-section",children:[c.jsxDEV("span",{className:"stroke-style-label",children:"样式:"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:180,columnNumber:17},void 0),c.jsxDEV(Kt.Row,{className:ne("stroke-style-picker"),children:[c.jsxDEV(Ne,{visible:!0,icon:c.jsxDEV(t0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:184,columnNumber:27},void 0),type:"button",tooltip:"实线","aria-label":"实线",onPointerUp:()=>x(_s.solid)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:182,columnNumber:19},void 0),c.jsxDEV(Ne,{visible:!0,icon:c.jsxDEV(n0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:192,columnNumber:27},void 0),type:"button",tooltip:"虚线","aria-label":"虚线",onPointerUp:()=>x(_s.dashed)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:190,columnNumber:19},void 0),c.jsxDEV(Ne,{visible:!0,icon:c.jsxDEV(i0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:200,columnNumber:27},void 0),type:"button",tooltip:"点线","aria-label":"点线",onPointerUp:()=>x(_s.dotted)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:198,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:181,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:179,columnNumber:15},void 0),c.jsxDEV(fo,{value:t,onChange:y,onOpacityChange:w},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:209,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:147,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:139,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:138,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:114,columnNumber:5},void 0)},BA="drawnix-color-history",dg=24,mg=12,pg=Jo.createInstance({name:"drawnix",storeName:BA});let lt=null;function Fd(e){const t=e.stops.map(n=>`${n.color}@${n.offset}`).join("|");return e.type==="linear"?`linear-${e.angle}-${t}`:`radial-${e.centerX}-${e.centerY}-${t}`}function FA(e,t){return Fd(e)===Fd(t)}class GA{constructor(){this.initialized=!1}async initialize(){if(!this.initialized)try{lt=await pg.getItem("history")||{colors:[],gradients:[]},this.initialized=!0}catch(t){console.error("[ColorHistoryService] Failed to initialize:",t),lt={colors:[],gradients:[]},this.initialized=!0}}async saveData(){if(lt)try{await pg.setItem("history",lt)}catch(t){console.error("[ColorHistoryService] Failed to save data:",t)}}async addColor(t){if(await this.initialize(),!lt)return;const n=t.toUpperCase(),i=lt.colors.findIndex(s=>s.color.toUpperCase()===n);if(i>=0){lt.colors[i].lastUsedAt=Date.now(),lt.colors[i].useCount+=1;const[s]=lt.colors.splice(i,1);lt.colors.unshift(s)}else lt.colors.unshift({color:n,lastUsedAt:Date.now(),useCount:1}),lt.colors.length>dg&&(lt.colors=lt.colors.slice(0,dg));await this.saveData()}async addGradient(t){if(await this.initialize(),!lt)return;const n=Fd(t),i=lt.gradients.findIndex(s=>FA(s.config,t));if(i>=0){lt.gradients[i].lastUsedAt=Date.now(),lt.gradients[i].useCount+=1;const[s]=lt.gradients.splice(i,1);lt.gradients.unshift(s)}else lt.gradients.unshift({id:n,config:{...t},lastUsedAt:Date.now(),useCount:1}),lt.gradients.length>mg&&(lt.gradients=lt.gradients.slice(0,mg));await this.saveData()}async getColors(){return await this.initialize(),(lt==null?void 0:lt.colors)||[]}async getGradients(){return await this.initialize(),(lt==null?void 0:lt.gradients)||[]}async removeColor(t){if(await this.initialize(),!lt)return;const n=t.toUpperCase();lt.colors=lt.colors.filter(i=>i.color.toUpperCase()!==n),await this.saveData()}async removeGradient(t){await this.initialize(),lt&&(lt.gradients=lt.gradients.filter(n=>n.id!==t),await this.saveData())}async clearAll(){lt={colors:[],gradients:[]},await this.saveData()}resetCache(){lt=null,this.initialized=!1}}const Ti=new GA;function HA(){const[e,t]=p.useState([]),[n,i]=p.useState([]),[s,o]=p.useState(!0),r=p.useCallback(async()=>{try{const[m,f]=await Promise.all([Ti.getColors(),Ti.getGradients()]);t(m),i(f)}catch(m){console.error("[useColorHistory] Failed to load data:",m)}finally{o(!1)}},[]);p.useEffect(()=>{r()},[r]);const a=p.useCallback(async m=>{await Ti.addColor(m);const f=await Ti.getColors();t(f)},[]),l=p.useCallback(async m=>{await Ti.addGradient(m);const f=await Ti.getGradients();i(f)},[]),u=p.useCallback(async m=>{await Ti.removeColor(m);const f=await Ti.getColors();t(f)},[]),d=p.useCallback(async m=>{await Ti.removeGradient(m);const f=await Ti.getGradients();i(f)},[]);return{colors:e,gradients:n,isLoading:s,addColor:a,addGradient:l,removeColor:u,removeGradient:d,refresh:r}}function ro(e){const t=e.stops.map(n=>`${n.color} ${Math.round(n.offset*100)}%`).join(", ");if(e.type==="linear")return`linear-gradient(${e.angle}deg, ${t})`;{const n=Math.round(e.centerX*100),i=Math.round(e.centerY*100);return`radial-gradient(circle at ${n}% ${i}%, ${t})`}}function WA(e){const t=e.match(/linear-gradient\((\d+)deg,\s*(.+)\)/);if(t){const i=parseInt(t[1],10),s=t[2],o=fg(s);return{type:"linear",angle:i,stops:o.length>=2?o:[{color:"#FF6B6B",offset:0},{color:"#4ECDC4",offset:1}]}}const n=e.match(/radial-gradient\(circle(?:\s+at\s+(\d+)%\s+(\d+)%)?,\s*(.+)\)/);if(n){const i=n[1]?parseInt(n[1],10)/100:.5,s=n[2]?parseInt(n[2],10)/100:.5,o=n[3],r=fg(o);return{type:"radial",centerX:i,centerY:s,stops:r.length>=2?r:[{color:"#FF6B6B",offset:0},{color:"#4ECDC4",offset:1}]}}return Ic}function fg(e){const t=[],n=/(#[0-9a-fA-F]{3,8}|rgba?\([^)]+\))\s+(\d+)%/g;let i;for(;(i=n.exec(e))!==null;)t.push({color:i[1],offset:parseInt(i[2],10)/100});return t}const hg=[{key:"left",labelZh:"左",labelEn:"Left",x:0,y:.5},{key:"center",labelZh:"中心",labelEn:"Center",x:.5,y:.5},{key:"top-left",labelZh:"左上",labelEn:"Top left",x:0,y:0},{key:"top",labelZh:"上",labelEn:"Top",x:.5,y:0},{key:"right",labelZh:"右",labelEn:"Right",x:1,y:.5},{key:"bottom",labelZh:"下",labelEn:"Bottom",x:.5,y:1}],Ww=({value:e,onChange:t,showPresets:n=!0,showHistory:i=!0,presetCategories:s,customPresets:o,compact:r=!1,inline:a=!1,onSavePreset:l,onDeletePreset:u})=>{const{language:d}=We(),{addGradient:m}=HA(),[f,h]=p.useState(e||Ic),[g,b]=p.useState(0),[x,y]=p.useState(null),[w,v]=p.useState(!1),S=p.useRef(null);p.useEffect(()=>{e&&h(e)},[e]);const k=p.useCallback(te=>{h(te),t==null||t(te),m(te)},[t,m]),N=p.useCallback(te=>{k(te.config)},[k]),E=p.useCallback(te=>{const oe={...f,...te};k(oe)},[f,k]),I=p.useCallback(te=>{if(f.type!==te)if(te==="linear"){const oe={type:"linear",angle:90,stops:f.stops};k(oe)}else{const oe={type:"radial",centerX:.5,centerY:.5,stops:f.stops};k(oe)}},[f,k]),T=p.useCallback((te,oe)=>{const me=[...f.stops];me[te]={...me[te],...oe},me.sort((Pe,He)=>Pe.offset-He.offset);const _e=me.findIndex(Pe=>Pe.color===(oe.color??f.stops[te].color));_e!==-1&&_e!==g&&b(_e),E({stops:me})},[f.stops,g,E]),j=p.useCallback(()=>{if(f.stops.length>=8)return;const te=.5,me=[...f.stops,{color:"#888888",offset:te}].sort((_e,Pe)=>_e.offset-Pe.offset);E({stops:me}),b(me.findIndex(_e=>_e.offset===te))},[f.stops,E]),V=p.useCallback(te=>{if(f.stops.length<=2)return;const oe=f.stops.filter((me,_e)=>_e!==te);E({stops:oe}),b(Math.min(g,oe.length-1))},[f.stops,g,E]),_=p.useCallback((te,oe)=>{if(!S.current)return;const me=S.current.getBoundingClientRect(),Pe=Math.max(0,Math.min(te.clientX-me.left,me.width))/me.width;T(oe,{offset:Pe})},[T]),D=p.useCallback((te,oe)=>{te.preventDefault(),te.stopPropagation(),b(oe);const me=te.clientX,_e=te.clientY;let Pe=!1;const He=3,Z=Qe=>{const dt=Math.abs(Qe.clientX-me),bt=Math.abs(Qe.clientY-_e);(dt>He||bt>He)&&(Pe=!0,v(!0),_(Qe,oe))},Ie=()=>{document.removeEventListener("mousemove",Z),document.removeEventListener("mouseup",Ie),Pe||y(oe),setTimeout(()=>{v(!1)},0)};document.addEventListener("mousemove",Z),document.addEventListener("mouseup",Ie)},[_]),C=p.useCallback(te=>{if(w||f.stops.length>=8||te.target!==S.current||!S.current)return;const me=S.current.getBoundingClientRect(),_e=te.clientX-me.left,Pe=Math.max(0,Math.min(_e/me.width,1)),He=[...f.stops].sort((bt,L)=>bt.offset-L.offset);let Z=He[0];for(let bt=0;bt<He.length-1;bt++)if(He[bt].offset<=Pe&&He[bt+1].offset>=Pe){Z=He[bt];break}const Ie=Z.color,Qe=[...f.stops,{color:Ie,offset:Pe}].sort((bt,L)=>bt.offset-L.offset);E({stops:Qe});const dt=Qe.findIndex(bt=>bt.offset===Pe);b(dt)},[w,f.stops,E]);p.useMemo(()=>ro(f),[f]),p.useMemo(()=>{const te=[{key:"basic",label:d==="zh"?"基础":"Basic"},{key:"colorful",label:d==="zh"?"多彩":"Colorful"},{key:"sunset",label:d==="zh"?"日落":"Sunset"},{key:"nature",label:d==="zh"?"自然":"Nature"},{key:"metal",label:d==="zh"?"金属":"Metal"}];return s?te.filter(oe=>s.includes(oe.key)):te},[d,s]);const M=p.useMemo(()=>o?o.length>0&&typeof o[0]=="string"?o.map((te,oe)=>({id:`custom-${oe}`,name:`Custom ${oe+1}`,nameZh:`自定义 ${oe+1}`,category:"custom",config:WA(te),css:te})):o:Xp,[o]),U=p.useCallback(()=>{var me;if(f.type!=="radial")return null;const{centerX:te,centerY:oe}=f;return(me=hg.find(_e=>Math.abs(_e.x-te)<.01&&Math.abs(_e.y-oe)<.01))==null?void 0:me.key},[f]),F=p.useMemo(()=>o&&o.length>0&&typeof o[0]=="string",[o]),$=p.useMemo(()=>ro(f),[f]),A=p.useCallback(te=>$===te,[$]),H=()=>{const te=Xp.slice(0,10),oe=F?M:[];return c.jsxDEV("div",{className:"ge-quick-presets",children:[c.jsxDEV("div",{className:"ge-quick-presets-header",children:c.jsxDEV("span",{className:"ge-quick-presets-title",children:d==="zh"?"预设":"Presets"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:436,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:435,columnNumber:9},void 0),c.jsxDEV("div",{className:"ge-quick-presets-grid",children:[oe.map((me,_e)=>{const Pe=me.css||ro(me.config);return c.jsxDEV("button",{className:ne("ge-quick-preset-item ge-quick-preset-item--custom",{"ge-quick-preset-item--selected":A(Pe)}),onClick:()=>N(me),title:d==="zh"?me.nameZh:me.name,children:[c.jsxDEV("div",{className:"ge-quick-preset-preview",style:{background:Pe}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:453,columnNumber:17},void 0),u&&c.jsxDEV("button",{className:"ge-quick-preset-delete",onClick:He=>{He.stopPropagation(),u(_e)},children:"×"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:458,columnNumber:19},void 0)]},me.id,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:445,columnNumber:15},void 0)}),te.map(me=>{const _e=ro(me.config);return c.jsxDEV("button",{className:ne("ge-quick-preset-item",{"ge-quick-preset-item--selected":A(_e)}),onClick:()=>N(me),title:d==="zh"?me.nameZh:me.name,children:c.jsxDEV("div",{className:"ge-quick-preset-preview",style:{background:_e}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:483,columnNumber:17},void 0)},me.id,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:475,columnNumber:15},void 0)})]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:440,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:434,columnNumber:7},void 0)},ue=()=>c.jsxDEV("div",{className:ne("ge-custom-editor",{"ge-custom-editor--inline":a}),children:[c.jsxDEV("div",{className:"ge-type-section",children:c.jsxDEV("div",{className:"ge-type-buttons",children:[c.jsxDEV("button",{className:ne("ge-type-btn",{active:f.type==="linear"}),onClick:()=>I("linear"),children:d==="zh"?"线性":"Linear"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:501,columnNumber:11},void 0),c.jsxDEV("button",{className:ne("ge-type-btn",{active:f.type==="radial"}),onClick:()=>I("radial"),children:d==="zh"?"径向":"Radial"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:507,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:500,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:499,columnNumber:7},void 0),c.jsxDEV("div",{className:"ge-color-section",children:[c.jsxDEV("div",{className:"ge-section-header",children:[c.jsxDEV("span",{className:"ge-section-title",children:d==="zh"?"颜色":"Colors"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:519,columnNumber:11},void 0),c.jsxDEV("div",{className:"ge-stop-actions",children:[c.jsxDEV("button",{className:"ge-action-btn",onClick:j,disabled:f.stops.length>=8,title:d==="zh"?"添加色标":"Add stop",children:"+"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:523,columnNumber:13},void 0),c.jsxDEV("button",{className:"ge-action-btn",onClick:()=>V(g),disabled:f.stops.length<=2,title:d==="zh"?"删除色标":"Remove stop",children:"−"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:531,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:522,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:518,columnNumber:9},void 0),c.jsxDEV("div",{className:"ge-gradient-bar-wrapper",children:c.jsxDEV("div",{ref:S,className:"ge-gradient-bar",style:{background:`linear-gradient(90deg, ${f.stops.map(te=>`${te.color} ${Math.round(te.offset*100)}%`).join(", ")})`},onClick:C,children:f.stops.map((te,oe)=>c.jsxDEV(Ft,{open:x===oe,onOpenChange:me=>y(me?oe:null),children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("button",{className:ne("ge-stop-handle",{selected:g===oe}),style:{left:`${te.offset*100}%`,backgroundColor:te.color},onMouseDown:me=>{D(me,oe)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:559,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:558,columnNumber:17},void 0),c.jsxDEV(Ht,{children:c.jsxDEV(Mt,{padding:4,className:"ge-color-picker-popover "+Yt,children:c.jsxDEV(fo,{value:te.color,onChange:me=>T(oe,{color:me}),showAlpha:!1,showEyeDropper:!0,showPresets:!0,showRecentColors:!0,showHexInput:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:577,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:573,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:572,columnNumber:17},void 0)]},oe,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:553,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:545,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:543,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:517,columnNumber:7},void 0),f.type==="radial"&&c.jsxDEV("div",{className:"ge-origin-section",children:[c.jsxDEV("span",{className:"ge-section-title",children:d==="zh"?"原点":"Origin"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:597,columnNumber:11},void 0),c.jsxDEV("div",{className:"ge-origin-buttons",children:hg.map(te=>c.jsxDEV("button",{className:ne("ge-origin-btn",{active:U()===te.key}),onClick:()=>E({centerX:te.x,centerY:te.y}),children:d==="zh"?te.labelZh:te.labelEn},te.key,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:602,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:600,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:596,columnNumber:9},void 0),f.type==="linear"&&c.jsxDEV("div",{className:"ge-angle-section",children:[c.jsxDEV("div",{className:"ge-section-header",children:[c.jsxDEV("span",{className:"ge-section-title",children:d==="zh"?"角度":"Angle"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:622,columnNumber:13},void 0),c.jsxDEV("span",{className:"ge-angle-value",children:[f.angle,"°"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:625,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:621,columnNumber:11},void 0),c.jsxDEV("input",{type:"range",min:0,max:360,value:f.angle,onChange:te=>E({angle:Number(te.target.value)}),className:"ge-angle-slider"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:629,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:620,columnNumber:9},void 0),l&&c.jsxDEV("div",{className:"ge-save-section",children:c.jsxDEV("button",{className:"ge-save-btn",onClick:l,children:d==="zh"?"保存":"Save"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:643,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:642,columnNumber:9},void 0),H()]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:497,columnNumber:5},void 0);return r||a?c.jsxDEV("div",{className:ne("gradient-editor",{"gradient-editor--compact":r,"gradient-editor--inline":a}),children:ue()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:657,columnNumber:7},void 0):c.jsxDEV("div",{className:"gradient-editor",children:ue()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:669,columnNumber:5},void 0)},Cu=En.CUSTOM_GRADIENTS,$A=({value:e,onChange:t,inline:n=!1})=>{const{language:i}=We(),{confirm:s,confirmDialog:o}=Ba(),[r,a]=p.useState([]),[l,u]=p.useState(e||Ic);p.useEffect(()=>{let h=!0;return Xt.get(Cu).then(g=>{h&&g&&a(g)}).catch(g=>{console.warn("Failed to load gradient data:",g)}),()=>{h=!1}},[]),p.useEffect(()=>{e&&u(e)},[e]);const d=p.useCallback(h=>{u(h),t==null||t(h)},[t]),m=p.useCallback(()=>{const h=ro(l),b=[{id:`custom-${Date.now()}`,css:h},...r].slice(0,8);a(b),Xt.set(Cu,b).catch(x=>{console.warn("Failed to save custom gradients:",x)})},[l,r]),f=p.useCallback(async h=>{const g=r[h];if(!g||!await s({title:i==="zh"?"确认删除渐变预设":"Delete Gradient Preset",description:i==="zh"?"确定要删除这个自定义渐变预设吗?":"Are you sure you want to delete this custom gradient preset?",confirmText:i==="zh"?"删除":"Delete",cancelText:i==="zh"?"取消":"Cancel",danger:!0}))return;const x=r.filter(y=>y.id!==g.id);a(x),Xt.set(Cu,x).catch(y=>{console.warn("Failed to save custom gradients:",y)})},[s,r,i]);return c.jsxDEV(c.Fragment,{children:[c.jsxDEV(Ww,{value:l,onChange:d,showPresets:!0,showHistory:!0,inline:n,customPresets:r.map(h=>h.css),onSavePreset:m,onDeletePreset:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/GradientFillPanel.tsx",lineNumber:110,columnNumber:7},void 0),o]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/GradientFillPanel.tsx",lineNumber:109,columnNumber:5},void 0)},XA=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oJ),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),KA=[{value:"stretch",labelZh:"拉伸",labelEn:"Stretch",icon:"⬌"},{value:"tile",labelZh:"平铺",labelEn:"Tile",icon:"⊞"},{value:"fit",labelZh:"适应",labelEn:"Fit",icon:"⊡"}],YA=({value:e,onChange:t,onOpenMediaLibrary:n,externalMediaLibraryControl:i=!1})=>{const{language:s}=We(),[o,r]=p.useState(e||r0),[a,l]=p.useState(!1),[u,d]=p.useState(!1),m=p.useRef(null);p.useEffect(()=>{e&&r(e)},[e]);const f=p.useCallback(k=>{const N={...o,...k};r(N),t==null||t(N)},[o,t]),h=p.useMemo(()=>ok(k=>{t==null||t(k)},300),[t]),g=p.useCallback(k=>{const N={...o,...k};r(N),h(N)},[o,h]),b=p.useCallback((k,N,E,I,T=1)=>{const j=parseFloat(N);if(isNaN(j))return;const V=Math.max(E,Math.min(I,j)),_=T===1?V:V/T;f({[k]:_})},[f]),x=p.useCallback(k=>{f({imageUrl:k.url}),l(!1)},[f]),y=p.useCallback(async k=>{var T;const N=(T=k.target.files)==null?void 0:T[0];if(!N)return;if(!N.type.startsWith("image/")){pe.warning(s==="zh"?"请选择图片文件":"Please select an image file");return}if(N.size>25*1024*1024){pe.warning(s==="zh"?"图片大小不能超过 25MB":"Image size cannot exceed 25MB");return}let E=N;if(N.size>10*1024*1024){const j=rk(N.size/1048576),V=pe.loading({content:s==="zh"?`正在压缩图片 (${(N.size/1024/1024).toFixed(1)}MB)...`:`Compressing image (${(N.size/1024/1024).toFixed(1)}MB)...`,duration:0,placement:"top"});try{E=await ak(N,j.targetSizeMB),pe.close(V),pe.success({content:s==="zh"?`压缩完成: ${(N.size/1024/1024).toFixed(1)}MB → ${(E.size/1024/1024).toFixed(1)}MB`:`Compressed: ${(N.size/1024/1024).toFixed(1)}MB → ${(E.size/1024/1024).toFixed(1)}MB`,duration:2})}catch(_){pe.close(V),console.error("[ImageFillPanel] Compression failed:",_),pe.warning(s==="zh"?"图片压缩失败":"Image compression failed");return}}const I=new FileReader;I.onload=j=>{var _;const V=(_=j.target)==null?void 0:_.result;f({imageUrl:V})},I.readAsDataURL(E),k.target.value=""},[s,f]),w=p.useCallback(()=>{var k;(k=m.current)==null||k.click()},[]),v=p.useCallback(()=>{i&&n?n():l(!0)},[i,n]),S=()=>o.imageUrl?c.jsxDEV("div",{className:"ifp-image-preview",children:[c.jsxDEV("img",{src:o.imageUrl,alt:"Fill preview"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:215,columnNumber:11},void 0),c.jsxDEV("button",{className:"ifp-image-remove",onClick:()=>f({imageUrl:""}),title:s==="zh"?"移除图片":"Remove image",children:"×"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:216,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:214,columnNumber:9},void 0):c.jsxDEV("div",{className:"ifp-image-placeholder",children:[c.jsxDEV(Cc,{size:32,className:"ifp-placeholder-icon"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:229,columnNumber:9},void 0),c.jsxDEV("span",{className:"ifp-placeholder-text",children:s==="zh"?"选择图片":"Select Image"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:230,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:228,columnNumber:7},void 0);return c.jsxDEV("div",{className:"image-fill-panel",children:[c.jsxDEV("input",{ref:m,type:"file",accept:"image/*",style:{display:"none"},onChange:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:240,columnNumber:7},void 0),c.jsxDEV("div",{className:"ifp-image-section",children:[c.jsxDEV("div",{className:"ifp-image-container",onClick:()=>!o.imageUrl&&v(),children:S()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:250,columnNumber:9},void 0),c.jsxDEV("div",{className:"ifp-image-actions",children:[c.jsxDEV("button",{className:"ifp-action-btn ifp-action-btn--primary",onClick:v,children:[c.jsxDEV(Fa,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:256,columnNumber:13},void 0),c.jsxDEV("span",{children:s==="zh"?"素材库":"Library"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:257,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:255,columnNumber:11},void 0),c.jsxDEV("button",{className:"ifp-action-btn",onClick:w,children:[c.jsxDEV(Ga,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:260,columnNumber:13},void 0),c.jsxDEV("span",{children:s==="zh"?"上传":"Upload"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:261,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:259,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:254,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:249,columnNumber:7},void 0),o.imageUrl&&c.jsxDEV(c.Fragment,{children:[c.jsxDEV("div",{className:"ifp-control-section",children:[c.jsxDEV("div",{className:"ifp-section-title",children:s==="zh"?"平铺模式":"Fill Mode"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:271,columnNumber:13},void 0),c.jsxDEV("div",{className:"ifp-mode-buttons",children:KA.map(k=>c.jsxDEV("button",{className:ne("ifp-mode-btn",{active:o.mode===k.value}),onClick:()=>f({mode:k.value}),title:s==="zh"?k.labelZh:k.labelEn,children:[c.jsxDEV("span",{className:"ifp-mode-icon",children:k.icon},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:282,columnNumber:19},void 0),c.jsxDEV("span",{className:"ifp-mode-label",children:s==="zh"?k.labelZh:k.labelEn},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:283,columnNumber:19},void 0)]},k.value,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:276,columnNumber:17},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:274,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:270,columnNumber:11},void 0),c.jsxDEV("div",{className:"ifp-advanced-section",children:[c.jsxDEV("button",{className:"ifp-advanced-toggle",onClick:()=>d(!u),children:[c.jsxDEV("span",{children:s==="zh"?"高级设置":"Advanced"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:297,columnNumber:15},void 0),u?c.jsxDEV(a0,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:298,columnNumber:31},void 0):c.jsxDEV(ko,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:298,columnNumber:57},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:293,columnNumber:13},void 0),u&&c.jsxDEV("div",{className:"ifp-advanced-content",children:[c.jsxDEV("div",{className:"ifp-control-row",children:[c.jsxDEV("label",{className:"ifp-control-label",children:s==="zh"?"缩放":"Scale"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:305,columnNumber:19},void 0),c.jsxDEV("div",{className:"ifp-control-input",children:[c.jsxDEV("input",{type:"range",min:50,max:200,value:(o.scale??1)*100,onChange:k=>g({scale:Number(k.target.value)/100}),className:"ifp-slider"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:309,columnNumber:21},void 0),c.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[c.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((o.scale??1)*100),min:50,max:200,onChange:k=>b("scale",k.target.value,50,200,100)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:318,columnNumber:23},void 0),c.jsxDEV("span",{className:"ifp-control-unit",children:"%"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:326,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:317,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:308,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:304,columnNumber:17},void 0),c.jsxDEV("div",{className:"ifp-control-row",children:[c.jsxDEV("label",{className:"ifp-control-label",children:s==="zh"?"X 偏移":"Offset X"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:333,columnNumber:19},void 0),c.jsxDEV("div",{className:"ifp-control-input",children:[c.jsxDEV("input",{type:"range",min:-100,max:100,value:(o.offsetX??0)*100,onChange:k=>g({offsetX:Number(k.target.value)/100}),className:"ifp-slider"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:337,columnNumber:21},void 0),c.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[c.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((o.offsetX??0)*100),min:-100,max:100,onChange:k=>b("offsetX",k.target.value,-100,100,100)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:346,columnNumber:23},void 0),c.jsxDEV("span",{className:"ifp-control-unit",children:"%"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:354,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:345,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:336,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:332,columnNumber:17},void 0),c.jsxDEV("div",{className:"ifp-control-row",children:[c.jsxDEV("label",{className:"ifp-control-label",children:s==="zh"?"Y 偏移":"Offset Y"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:361,columnNumber:19},void 0),c.jsxDEV("div",{className:"ifp-control-input",children:[c.jsxDEV("input",{type:"range",min:-100,max:100,value:(o.offsetY??0)*100,onChange:k=>g({offsetY:Number(k.target.value)/100}),className:"ifp-slider"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:365,columnNumber:21},void 0),c.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[c.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((o.offsetY??0)*100),min:-100,max:100,onChange:k=>b("offsetY",k.target.value,-100,100,100)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:374,columnNumber:23},void 0),c.jsxDEV("span",{className:"ifp-control-unit",children:"%"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:382,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:373,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:364,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:360,columnNumber:17},void 0),c.jsxDEV("div",{className:"ifp-control-row",children:[c.jsxDEV("label",{className:"ifp-control-label",children:s==="zh"?"旋转":"Rotation"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:389,columnNumber:19},void 0),c.jsxDEV("div",{className:"ifp-control-input",children:[c.jsxDEV("input",{type:"range",min:0,max:360,value:o.rotation??0,onChange:k=>g({rotation:Number(k.target.value)}),className:"ifp-slider"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:393,columnNumber:21},void 0),c.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[c.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:o.rotation??0,min:0,max:360,onChange:k=>b("rotation",k.target.value,0,360,1)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:402,columnNumber:23},void 0),c.jsxDEV("span",{className:"ifp-control-unit",children:"°"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:410,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:401,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:392,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:388,columnNumber:17},void 0),c.jsxDEV("button",{className:"ifp-reset-btn",onClick:()=>f({scale:1,offsetX:0,offsetY:0,rotation:0}),children:s==="zh"?"重置":"Reset"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:416,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:302,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:292,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:268,columnNumber:9},void 0),!i&&a&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(XA,{isOpen:a,onClose:()=>l(!1),mode:ns.SELECT,filterType:Ei.IMAGE,onSelect:x,selectButtonText:s==="zh"?"使用此图片":"Use this image"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:438,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:437,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:238,columnNumber:5},void 0)},ZA=[{value:"solid",labelZh:"纯色",labelEn:"Solid"},{value:"gradient",labelZh:"渐变",labelEn:"Gradient"},{value:"image",labelZh:"图片",labelEn:"Image"}],JA=({value:e,onSolidChange:t,onOpacityChange:n,onGradientChange:i,onImageChange:s,onFillTypeChange:o,showClose:r=!1,onClose:a,onOpenMediaLibrary:l})=>{const{language:u}=We(),d=p.useMemo(()=>e?Sa(e)?lk(e):Zi(e)?e:{type:"solid",solid:{color:"#FFFFFF"}}:{type:"solid",solid:{color:"#FFFFFF"}},[e]),[m,f]=p.useState(d.type);p.useEffect(()=>{f(d.type)},[d.type]);const[h,g]=p.useState(d.gradient||Ic),[b,x]=p.useState(d.image||r0);p.useEffect(()=>{d.gradient&&g(d.gradient)},[d.gradient]),p.useEffect(()=>{d.image&&x(d.image)},[d.image]);const y=p.useCallback(N=>{f(N)},[]),w=p.useCallback(N=>{o==null||o("solid"),t==null||t(N)},[t,o]),v=p.useCallback(N=>{g(N),o==null||o("gradient"),i==null||i(N)},[i,o]),S=p.useCallback(N=>{x(N),o==null||o("image"),s==null||s(N)},[s,o]),k=p.useMemo(()=>Sa(e)?e:Zi(e)&&e.solid?e.solid.color:"#FFFFFF",[e]);return c.jsxDEV("div",{className:"fill-panel",children:[c.jsxDEV("div",{className:"fill-panel__header",children:[c.jsxDEV("span",{className:"fill-panel__title",children:u==="zh"?"填充":"Fill"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:160,columnNumber:9},void 0),r&&c.jsxDEV("button",{className:"fill-panel__close",onClick:a,children:"×"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:164,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:159,columnNumber:7},void 0),c.jsxDEV("div",{className:"fill-panel__tabs",children:ZA.map(N=>c.jsxDEV("button",{className:ne("fill-panel__tab",{active:m===N.value}),onClick:()=>y(N.value),children:u==="zh"?N.labelZh:N.labelEn},N.value,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:173,columnNumber:11},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:171,columnNumber:7},void 0),c.jsxDEV("div",{className:"fill-panel__content",children:[m==="solid"&&c.jsxDEV("div",{className:"fill-panel__solid",children:c.jsxDEV(fo,{value:k,onChange:w,onOpacityChange:n},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:187,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:186,columnNumber:11},void 0),m==="gradient"&&c.jsxDEV($A,{value:h,onChange:v},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:196,columnNumber:11},void 0),m==="image"&&c.jsxDEV(YA,{value:b,onChange:S,onOpenMediaLibrary:l,externalMediaLibraryControl:!!l},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:200,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:184,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:157,columnNumber:5},void 0)},QA=p.lazy(()=>Ce(()=>import("./index-EYhL1Kgt.js"),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),eM=({board:e,currentColor:t,title:n,children:i})=>{const{language:s}=We(),[o,r]=p.useState(!1),[a,l]=p.useState(!1),{hexColor:u,opacity:d}=p.useMemo(()=>{var S;if(!t)return{hexColor:void 0,opacity:100};if(Sa(t)){const k=po(t),N=ar(t);return{hexColor:k,opacity:N}}if(Zi(t))switch(t.type){case"solid":if(t.solid){const k=po(t.solid.color),N=ar(t.solid.color);return{hexColor:k,opacity:N}}break;case"gradient":if((S=t.gradient)!=null&&S.stops[0])return{hexColor:t.gradient.stops[0].color,opacity:100};break;case"image":return{hexColor:"#888888",opacity:100}}return{hexColor:void 0,opacity:100}},[t]),m=!u||s0(d)?c.jsxDEV(ck,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:96,columnNumber:48},void 0):void 0,f=p.useCallback(S=>{mA(e,S),RA(e,S)},[e]),h=p.useCallback(S=>{dA(e,S)},[e]),g=p.useCallback(S=>{VA(e,S)},[e]),b=p.useCallback(S=>{ug(e,S)},[e]),x=p.useCallback(S=>{UA(e,S)},[e]),y=p.useCallback(()=>{r(!1)},[]),w=p.useCallback(()=>{l(!0)},[]),v=p.useCallback(S=>{ug(e,{imageUrl:S.url,mode:"stretch",scale:1,offsetX:0,offsetY:0,rotation:0}),l(!1)},[e]);return c.jsxDEV(Ft,{sideOffset:12,crossAxisOffset:40,open:o,onOpenChange:S=>{!S&&a||r(S)},placement:"left",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:ne("property-button"),visible:!0,icon:m,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>{r(!o)},children:!m&&i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:182,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:181,columnNumber:7},void 0),c.jsxDEV(Ht,{children:c.jsxDEV(Mt,{padding:0,className:ne(`${Yt}`,"fill-setting"),children:c.jsxDEV(JA,{value:t,onSolidChange:f,onOpacityChange:h,onGradientChange:g,onImageChange:b,onFillTypeChange:x,showClose:!0,onClose:y,onOpenMediaLibrary:w},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:202,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:198,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:197,columnNumber:7},void 0),a&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(QA,{isOpen:a,onClose:()=>l(!1),mode:ns.SELECT,filterType:Ei.IMAGE,onSelect:v,selectButtonText:s==="zh"?"使用此图片":"Use this image"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:219,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:218,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:168,columnNumber:5},void 0)},tM=({board:e,currentRadius:t,title:n,selectionRect:i})=>{const[s,o]=p.useState(!1),[r,a]=p.useState({top:0,left:0}),[l,u]=p.useState(""),d=p.useRef(null),m=p.useRef(null),f=J.getBoardContainer(e),{t:h}=We(),g=n||h("toolbar.cornerRadius")||"圆角",b=t??0;p.useEffect(()=>{u(String(b))},[b]),p.useEffect(()=>{if(s&&d.current){const N=d.current.getBoundingClientRect(),E=220,I=8;let T=N.left+N.width/2-E/2,j=N.bottom+I;const V=window.innerWidth,_=window.innerHeight;T+E>V-16&&(T=V-E-16),T<16&&(T=16),j+40>_-16&&(j=N.top-40-I),a({left:T,top:j})}},[s]),p.useEffect(()=>{if(!s)return;const N=I=>{const T=I.target;m.current&&m.current.contains(T)||d.current&&d.current.contains(T)||T.closest(".popup-toolbar")!==null||o(!1)},E=setTimeout(()=>{document.addEventListener("mousedown",N)},100);return()=>{clearTimeout(E),document.removeEventListener("mousedown",N)}},[s]);const x=p.useCallback(N=>{const E=Math.max(0,Math.min(100,N));ut(e).filter(T=>Rt.isPenPath(T)).forEach(T=>{const j=e.children.findIndex(V=>V.id===T.id);j>=0&&Se.setNode(e,{cornerRadius:E},[j])})},[e]),y=p.useCallback(N=>{u(String(N)),x(N)},[x]),w=p.useCallback(N=>{u(N.target.value)},[]),v=p.useCallback(()=>{const N=parseInt(l,10);if(isNaN(N))u(String(b));else{const E=Math.max(0,Math.min(100,N));u(String(E)),x(E)}},[l,b,x]),S=p.useCallback(N=>{N.key==="Enter"&&N.target.blur()},[]),k=p.useCallback(()=>{o(!s)},[s]);return c.jsxDEV(c.Fragment,{children:[c.jsxDEV(Ne,{ref:d,className:ne("property-button","corner-radius-button",{"is-active":s}),visible:!0,type:"button",tooltip:g,"aria-label":g,onPointerUp:k,children:c.jsxDEV("svg",{viewBox:"0 0 24 24",width:"18",height:"18",children:c.jsxDEV("path",{d:"M4 4 L4 14 Q4 20 10 20 L20 20",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:178,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:177,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:168,columnNumber:7},void 0),s&&f&&cs.createPortal(c.jsxDEV("div",{ref:m,className:ne(Yt,"corner-radius-panel"),style:{position:"fixed",top:r.top,left:r.left,zIndex:5e3},onPointerDown:N=>N.stopPropagation(),onMouseDown:N=>N.stopPropagation(),children:c.jsxDEV(Mt,{padding:2,className:"corner-radius-setting-compact",children:c.jsxDEV("div",{className:"corner-radius-row",children:[c.jsxDEV("span",{className:"corner-radius-label",children:g},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:204,columnNumber:15},void 0),c.jsxDEV("div",{className:"corner-radius-slider",children:c.jsxDEV(_c,{value:b,min:0,max:100,step:1,onChange:N=>y(N),label:!1},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:206,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:205,columnNumber:15},void 0),c.jsxDEV("input",{type:"text",className:"corner-radius-input",value:l,onChange:w,onBlur:v,onKeyDown:S},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:215,columnNumber:15},void 0),c.jsxDEV("span",{className:"corner-radius-unit",children:"%"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:223,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:203,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:202,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:190,columnNumber:9},void 0),f)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:167,columnNumber:5},void 0)},nM=(e,t)=>{try{return It(e,[t],!1)}catch{return null}},gg=(e,t,n,i,s,o)=>{const r=e.children.findIndex(g=>g.id===t.id);if(r<0)return;const a=nM(e,t);if(!a)return;const l=(a.x-n.x)/n.width,u=(a.y-n.y)/n.height,d=i.x+l*i.width,m=i.y+u*i.height,f=a.width*s,h=a.height*o;if(Ri(t)){const g=[[d,m],[d+f,m+h]];Se.setNode(e,{points:g},[r])}else if(ee.isDrawElement(t)){const g=[[d,m],[d+f,m+h]];Se.setNode(e,{points:g},[r])}else if(li.isMindElement(e,t)){const g=[[d,m],[d+f,m+h]];Se.setNode(e,{points:g},[r])}else if(_t.isFreehand(t)){const b=t.points.map(x=>{const y=(x[0]-n.x)/n.width,w=(x[1]-n.y)/n.height;return[i.x+y*i.width,i.y+w*i.height]});Se.setNode(e,{points:b},[r])}else if(Rt.isPenPath(t)){const b=t.anchors.map(y=>{const w=[y.point[0]*s,y.point[1]*o],v=y.handleIn?[y.handleIn[0]*s,y.handleIn[1]*o]:void 0,S=y.handleOut?[y.handleOut[0]*s,y.handleOut[1]*o]:void 0;return{...y,point:w,handleIn:v,handleOut:S}}),x=[d,m];Se.setNode(e,{points:[x,x],anchors:b},[r])}},iM=({board:e})=>{const{language:t}=We(),n=t==="zh",i=ut(e),[s,o]=p.useState(!0),[r,a]=p.useState(""),[l,u]=p.useState(""),[d,m]=p.useState(1),[f,h]=p.useState(!1),g=p.useRef(null),b=J.getBoardContainer(e),x=i.length>0?It(e,i,!1):null;p.useEffect(()=>{x&&(g.current?(a(Math.round(g.current.width).toString()),u(Math.round(g.current.height).toString()),g.current=null):(a(Math.round(x.width).toString()),u(Math.round(x.height).toString())),m(x.width/x.height))},[x==null?void 0:x.width,x==null?void 0:x.height]);const y=p.useCallback(N=>{const E=N.target.value;if(a(E),s&&x){const I=parseFloat(E);if(!isNaN(I)&&I>0){const T=Math.round(I/d);u(T.toString())}}},[s,d,x]),w=p.useCallback(N=>{const E=N.target.value;if(u(E),s&&x){const I=parseFloat(E);if(!isNaN(I)&&I>0){const T=Math.round(I*d);a(T.toString())}}},[s,d,x]),v=p.useCallback(()=>{if(!x||i.length===0)return;const N=parseFloat(r),E=parseFloat(l);if(isNaN(N)||isNaN(E)||N<=0||E<=0){a(Math.round(x.width).toString()),u(Math.round(x.height).toString());return}if(Math.abs(N-x.width)<.5&&Math.abs(E-x.height)<.5)return;g.current={width:N,height:E};const I=N/x.width,T=E/x.height,j={x:x.x,y:x.y,width:N,height:E};i.forEach(V=>{gg(e,V,x,j,I,T)})},[e,i,x,r,l]),S=p.useCallback(N=>{if(!x||i.length===0)return;const E=N.width,I=N.height;a(E.toString()),u(I.toString()),g.current={width:E,height:I};const T=E/x.width,j=I/x.height,V={x:x.x,y:x.y,width:E,height:I};i.forEach(_=>{gg(e,_,x,V,T,j)}),m(E/I),h(!1)},[e,i,x]),k=p.useCallback(N=>{N.key==="Enter"?(v(),N.target.blur()):N.key==="Escape"&&(x&&(a(Math.round(x.width).toString()),u(Math.round(x.height).toString())),N.target.blur())},[v,x]);return x?c.jsxDEV("div",{className:"size-input-container",children:[c.jsxDEV("div",{className:"size-input-group",children:[c.jsxDEV("span",{className:"size-input-label",children:"W"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:303,columnNumber:9},void 0),c.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"size-input",value:r,onChange:y,onBlur:v,onKeyDown:k},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:304,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:302,columnNumber:7},void 0),c.jsxDEV("button",{className:`size-lock-button ${s?"locked":""}`,onClick:()=>o(!s),title:s?"解锁比例":"锁定比例",children:s?c.jsxDEV(uk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:320,columnNumber:19},void 0):c.jsxDEV(dk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:320,columnNumber:34},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:315,columnNumber:7},void 0),c.jsxDEV("div",{className:"size-input-group",children:[c.jsxDEV("span",{className:"size-input-label",children:"H"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:323,columnNumber:9},void 0),c.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"size-input",value:l,onChange:w,onBlur:v,onKeyDown:k},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:324,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:322,columnNumber:7},void 0),c.jsxDEV(Ft,{open:f,onOpenChange:h,placement:"bottom-end",sideOffset:8,children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("button",{className:`size-preset-button ${f?"active":""}`,title:n?"常用尺寸":"Preset Sizes",onClick:()=>h(!f),children:c.jsxDEV(ko,{size:12},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:347,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:342,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:341,columnNumber:9},void 0),c.jsxDEV(Ht,{container:b,children:c.jsxDEV("div",{className:"size-preset-panel",children:mk.map(N=>c.jsxDEV("div",{className:"size-preset-category",children:[c.jsxDEV("div",{className:"size-preset-category-label",children:n?N.category:N.categoryEn},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:354,columnNumber:17},void 0),N.items.map(E=>c.jsxDEV("button",{className:"size-preset-item",onClick:()=>S(E),children:[c.jsxDEV("span",{className:"size-preset-item-label",children:n?E.label:E.labelEn},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:363,columnNumber:21},void 0),c.jsxDEV("span",{className:"size-preset-item-size",children:[E.width," x ",E.height]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:366,columnNumber:21},void 0)]},`${E.width}x${E.height}-${E.label}`,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:358,columnNumber:19},void 0))]},N.category,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:353,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:351,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:350,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:335,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/size-input.tsx",lineNumber:301,columnNumber:5},void 0):null},sM=({board:e,title:t})=>{const{appState:n,setAppState:i}=On();return c.jsxDEV(Ne,{className:ne("property-button"),visible:!0,icon:c.jsxDEV(fk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/link-button.tsx",lineNumber:25,columnNumber:13},void 0),type:"button",tooltip:t,"aria-label":t,onPointerUp:()=>{const s=ut(e)[0],o=pk(s);Qo.getLinkElement(o)||Qo.wrapLink(o,"链接",""),setTimeout(()=>{const l=Qo.getLinkElement(o)[0],u=Ui.toDOMNode(o,l);i({...n,linkState:{editor:o,targetDom:u,targetElement:l,isEditing:!0,isHovering:!1,isHoveringOrigin:!1}})},0)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/link-button.tsx",lineNumber:22,columnNumber:5},void 0)},$w={zh:[`一张写实的半身人像,一位身穿水蓝色连身裙的年轻韩国亚洲女人走进旅馆大厅,女人脸上带着温暖的微笑,左手拿着白色棒球帽,右手拉着黄色行李箱。
|
|
28
|
+
场景在济州岛度假感的旅馆大厅里,柔和的光线从窗外洒入室内柔和的打在女人的身上,凸显了女人的脸部表情。
|
|
29
|
+
使用 50mm 人像镜头拍摄,女人在画面中央,背景呈现柔和的模糊(散景)。
|
|
30
|
+
氛围是日系杂志的色调并充满放松度假感。直式人像构图,比例1:1。`,"一只可爱的小猫坐在窗台上,阳光透过窗户洒在它的毛发上","美丽的山水风景,青山绿水,云雾缭绕","现代简约风格的室内设计,明亮宽敞","夜晚的城市天际线,霓虹灯闪烁","春天的樱花盛开,粉色花瓣飘落","科幻风格的太空站,星空背景","温馨的咖啡厅,暖色调灯光","抽象艺术风格,色彩丰富的几何图形"],en:[`young Korean woman in a light blue dress holding a white baseball cap and pulling a yellow suitcase, photography,
|
|
31
|
+
stylish modern hotel lobby, soft sunlight streaming through the window, pastel tones, relaxed vacation mood,
|
|
32
|
+
centered vertical portrait with bokeh background, medium shot.`,"A cute kitten sitting on a windowsill with sunlight streaming through","Beautiful mountain landscape with green hills and misty clouds","Modern minimalist interior design, bright and spacious","City skyline at night with neon lights glowing","Cherry blossoms in spring with pink petals falling","Sci-fi space station with starry background","Cozy coffee shop with warm ambient lighting","Abstract art with colorful geometric shapes"]},oM={zh:[`场景:日落时分,一座宏伟的城堡庭院,金色的光线透过彩色玻璃窗,营造出温暖而充满希望的氛围。
|
|
33
|
+
相机:对两位公主进行中特写跟踪拍摄,然后进行广角拉出,露出整个庭院,最后缓慢向上倾斜到天空。
|
|
34
|
+
动作:公主们互相微笑,然后开始和谐地唱歌,然后在灯光亮起时向天空举手。
|
|
35
|
+
音频:柔和的管弦乐,伴随着令人振奋的弦乐和合唱,沙沙作响的树叶和远处鸟儿的环绕声,对话:"我们相信明天会更加光明。"
|
|
36
|
+
风格:迪士尼风格的动画,鲜艳的色彩,梦幻般的灯光。`,"一个美丽的日出场景,阳光从山峰后缓缓升起,云朵轻柔地飘动","一个森林中的场景,树叶在微风中轻轻摇摆,阳光斑驳","一个海边场景,海浪轻拍岸边,海鸟在空中盘旋","一个花园场景,花朵在微风中轻摆,蝴蝶翩翩起舞","一个雨后场景,水滴从树叶上缓缓滴落,彩虹出现在天空","一个雪花飘落的冬日场景,雪花轻柔地降落","一个星空场景,星星闪烁,云朵缓缓飘过月亮","一个溪流场景,清水在石头间潺潺流淌,鱼儿游过"],en:[`Scene: A grand castle courtyard at sunset, golden light filtering through stained glass windows, creating a warm and hopeful atmosphere.
|
|
37
|
+
Camera: Medium close-up tracking shot of the two princesses, then a wide-angle pull-out to reveal the entire courtyard, ending with a slow upward tilt to the sky.
|
|
38
|
+
Action: The princesses smile at each other, then begin singing in harmony, then raise their hands toward the sky as the light brightens.
|
|
39
|
+
Audio: Soft orchestral music with uplifting strings and choir, ambient sounds of rustling leaves and distant birds, dialogue: "Together, we believe tomorrow will be brighter."
|
|
40
|
+
Style: Disney-style animation, vibrant colors, dreamy lighting.`,"a beautiful sunrise scene where the sun slowly rises from behind mountains with clouds gently floating","a forest scene with leaves gently swaying in the breeze and dappled sunlight","a seaside scene with waves gently lapping the shore and seagulls circling overhead","a garden scene with flowers swaying in the breeze and butterflies dancing","a post-rain scene with water drops slowly dripping from leaves and a rainbow appearing in the sky","a winter scene with snowflakes gently falling","a starry night scene with twinkling stars and clouds slowly drifting across the moon","a stream scene with clear water flowing gently between stones and fish swimming by"]},Xw={zh:[{content:"灵感图:咖啡文化,16图",scene:"灵感图",tips:"调用1次文本模型 + 1次生图模型,一张图排布n张子图(最多16张)",modelType:"agent"},{content:"宫格图:可爱猫咪表情包,16宫格",scene:"宫格图",tips:"调用1次文本模型 + 1次生图模型,一张图排布n张正方形子图(最多16张)",modelType:"agent"},{content:"创作一个视频:樱花树下的少女,微风吹过,花瓣飘落",scene:"视频创作",tips:"调用1次文本模型 + 1次生视频模型",modelType:"video"},{content:"画一个AI工作流的流程图",scene:"mermaid图",tips:"调用1次文本模型,支持流程图、泳道图、",modelType:"agent"},{content:"大模型发展趋势的思维导图",scene:"知识梳理",tips:"调用1次文本模型",modelType:"agent"},{content:"矢量图:一个简约风格的火箭作为公司logo",scene:"SVG矢量图",tips:"调用1次文本模型生成SVG图标,可无损缩放",modelType:"agent"},{content:"生成一份关于人工智能发展的PPT",scene:"PPT演示",tips:"调用1次文本模型生成大纲 + 自动布局为多页PPT幻灯片",modelType:"agent"}],en:[{content:"inspiration board: Coffee culture mood board, beans, latte art, cafe scenes",scene:"Inspiration board",tips:"1 text model + 1 image model",modelType:"agent"},{content:"grid image: Cute cat emoji pack, 4x4 scattered layout",scene:"Grid image",tips:"1 text model + 1 image model",modelType:"agent"},{content:"a video: A girl under cherry blossom tree, petals falling in the breeze",scene:"Video creation",tips:"1 text model + 1 video model",modelType:"video"},{content:"Draw a flowchart of AI workflow",scene:"Tech docs",tips:"1 text model",modelType:"agent"},{content:"Draw a mind map of LLM development trends",scene:"Knowledge organization",tips:"1 text model",modelType:"agent"},{content:"SVG: A minimalist rocket icon",scene:"SVG vector",tips:"1 text model to generate SVG code, scalable and lossless",modelType:"agent"},{content:"Generate a PPT about artificial intelligence development",scene:"PPT slides",tips:"1 text model for outline + auto layout into multi-page PPT slides",modelType:"agent"}]},Uz=e=>$w[e],Rz=e=>oM[e];function eu(e={}){const{language:t="zh",deduplicateWithPresets:n=!0,customPresetContents:i}=e,[s,o]=p.useState([]),r=p.useMemo(()=>{if(!n)return new Set;if(i&&i.length>0)return new Set(i.map(g=>g.trim().toLowerCase()));const h=Xw[t]||[];return new Set(h.map(g=>g.content.trim().toLowerCase()))},[t,n,i]),a=p.useMemo(()=>!n||r.size===0?s:s.filter(h=>!r.has(h.content.trim().toLowerCase())),[s,r,n]),l=p.useCallback(()=>{const h=Po.getHistory();o(h)},[]);p.useEffect(()=>{let h=!0;return(async()=>{await Po.waitForInit(),h&&l()})(),()=>{h=!1}},[l]);const u=p.useCallback((h,g,b)=>{Po.addHistory(h,g,b),l()},[l]),d=p.useCallback(h=>{Po.removeHistory(h),l()},[l]),m=p.useCallback(()=>{Po.clearHistory(),l()},[l]),f=p.useCallback(h=>{Po.togglePin(h),l()},[l]);return{history:a,addHistory:u,removeHistory:d,clearHistory:m,refreshHistory:l,togglePinHistory:f}}const Hr=8,rM=60,aM=600,bg=24,lM='16px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';let ju=null,yl=null;function cM(){if(ju||(ju=document.createElement("canvas"),yl=ju.getContext("2d")),!yl)throw new Error("Failed to get canvas context");return yl.font=lM,yl}function Pu(e){return cM().measureText(e).width}function uM(e){const t=e.split(`
|
|
41
|
+
`);let n=0;for(const a of t){const l=Pu(a);n=Math.max(n,l)}const i=Math.min(aM-Hr*2,Math.max(rM-Hr*2,n)),s=i+Hr*2;let o=0;for(const a of t){if(a.length===0){o+=1;continue}if(Pu(a)<=i)o+=1;else{let u=0,d=1;for(const m of a){const f=Pu(m);u+f>i?(d++,u=f):u+=f}o+=d}}const r=Math.max(bg+Hr*2,o*bg+Hr*2);return{width:s,height:r}}function dM(e){switch(e){case"ai-input":return c.jsxDEV(xk,{size:12},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:156,columnNumber:14},this);case"image":return c.jsxDEV(Cc,{size:12},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:158,columnNumber:14},this);case"video":return c.jsxDEV(Pc,{size:12},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:160,columnNumber:14},this);default:return null}}function mM(e,t){return{"ai-input":{zh:"AI输入",en:"AI Input"},image:{zh:"图片",en:"Image"},video:{zh:"视频",en:"Video"},preset:{zh:"预设",en:"Preset"}}[e][t]}const pM=({board:e,language:t,title:n})=>{const[i,s]=p.useState(!1),[o,r]=p.useState(0),{history:a,addHistory:l,removeHistory:u}=eu({deduplicateWithPresets:!1}),{confirm:d,confirmDialog:m}=Ba({container:e?J.getBoardContainer(e):null}),f=p.useRef(null),[h,g]=p.useState([]),[b,x]=p.useState([]);p.useEffect(()=>{i&&(g(hk()),x(gk()))},[i]);const y=p.useMemo(()=>{const E=$w[t].map((M,U)=>({id:`preset_${U}`,content:M,source:"preset"})),I=a.map(M=>({id:M.id,content:M.content,source:"ai-input",timestamp:M.timestamp})),T=h.map(M=>({id:M.id,content:M.content,source:"image",timestamp:M.timestamp})),j=b.map(M=>({id:M.id,content:M.content,source:"video",timestamp:M.timestamp})),V=[...I,...T,...j];V.sort((M,U)=>(U.timestamp||0)-(M.timestamp||0));const _=new Set,D=[];for(const M of V){const U=M.content.trim();_.has(U)||(_.add(U),D.push(M))}const C=E.filter(M=>!_.has(M.content.trim()));return[...D,...C]},[t,a,h,b]),{historyPrompts:w,presetPrompts:v}=p.useMemo(()=>{const E=y.filter(T=>T.source!=="preset"),I=y.filter(T=>T.source==="preset");return{historyPrompts:E,presetPrompts:I}},[y]),S=p.useCallback((E,I)=>E==="history"?I:w.length+I,[w.length]);p.useEffect(()=>{i&&r(0)},[i]);const k=p.useCallback(E=>{l(E.content),s(!1);const I=ut(e);if(I.length===0)return;const T=_=>({type:"paragraph",children:[{text:_}]}),{width:j,height:V}=uM(E.content);for(const _ of I){const D=e.children.findIndex(M=>M.id===_.id);if(D<0)continue;const C={};if(li.isMindElement(e,_)){const M=[T(E.content)];Se.setNode(e,{data:M},[D]);continue}if(ee.isText&&ee.isText(_)){if(C.text=T(E.content),"points"in _&&Array.isArray(_.points)&&_.points.length>=2){const M=_.points,[U]=M,F=[U,[U[0]+j,U[1]+V]];C.points=F}Se.setNode(e,C,[D]);continue}if(ee.isDrawElement(_)&&lm([_])){if("text"in _&&_.text){if(C.text=T(E.content),"points"in _&&Array.isArray(_.points)&&_.points.length>=2){const M=_.points,[U]=M,F=[U,[U[0]+j,U[1]+V]];C.points=F}Se.setNode(e,C,[D]);continue}if("data"in _&&Array.isArray(_.data)){if(C.data=[T(E.content)],"points"in _&&Array.isArray(_.points)&&_.points.length>=2){const M=_.points,[U]=M,F=[U,[U[0]+j,U[1]+V]];C.points=F}Se.setNode(e,C,[D]);continue}}if("text"in _&&_.text){if(C.text=T(E.content),"points"in _&&Array.isArray(_.points)&&_.points.length>=2){const M=_.points,[U]=M,F=[U,[U[0]+j,U[1]+V]];C.points=F}Se.setNode(e,C,[D]);continue}"textContent"in _&&Se.setNode(e,{textContent:E.content},[D])}},[e,l]),N=p.useCallback(async(E,I)=>{E.stopPropagation(),await d({title:t==="zh"?"确认删除提示词":"Delete Prompt",description:t==="zh"?"确定要删除这条历史提示词吗?此操作不可撤销。":"Are you sure you want to delete this prompt history item? This action cannot be undone.",confirmText:t==="zh"?"删除":"Delete",cancelText:t==="zh"?"取消":"Cancel",danger:!0})&&u(I)},[d,t,u]);return p.useEffect(()=>{if(!i)return;const E=I=>{if(y.length===0){I.key==="Escape"&&(I.preventDefault(),s(!1));return}switch(I.key){case"ArrowUp":I.preventDefault(),r(T=>T<=0?y.length-1:T-1);break;case"ArrowDown":I.preventDefault(),r(T=>T>=y.length-1?0:T+1);break;case"Enter":I.preventDefault(),y[o]&&k(y[o]);break;case"Escape":I.preventDefault(),s(!1);break}};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[i,y,o,k]),p.useEffect(()=>{var I;if(!i||y.length===0)return;const E=(I=f.current)==null?void 0:I.querySelector(".popup-prompt-panel__item--highlighted");E&&E.scrollIntoView({block:"nearest",behavior:"smooth"})},[o,i,y.length]),c.jsxDEV(Ft,{open:i,onOpenChange:s,placement:"top",sideOffset:8,children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:"prompt-button",type:"icon",icon:c.jsxDEV(nd,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:489,columnNumber:17},void 0),visible:!0,tooltip:n||(t==="zh"?"提示词":"Prompts"),"aria-label":n||(t==="zh"?"提示词":"Prompts"),onPointerUp:()=>s(!i)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:486,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:485,columnNumber:7},void 0),c.jsxDEV(Ht,{className:`popup-prompt-panel ${Yt}`,onMouseDown:E=>E.preventDefault(),children:c.jsxDEV("div",{ref:f,className:"popup-prompt-panel__content",children:[w.length>0&&c.jsxDEV("div",{className:"popup-prompt-panel__section",children:[c.jsxDEV("div",{className:"popup-prompt-panel__section-header",children:[c.jsxDEV(bk,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:505,columnNumber:17},void 0),c.jsxDEV("span",{children:t==="zh"?"历史记录":"History"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:506,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:504,columnNumber:15},void 0),c.jsxDEV("div",{className:"popup-prompt-panel__list",children:w.map((E,I)=>c.jsxDEV("div",{className:`popup-prompt-panel__item popup-prompt-panel__item--history ${S("history",I)===o?"popup-prompt-panel__item--highlighted":""}`,onClick:()=>k(E),onMouseEnter:()=>r(S("history",I)),children:[c.jsxDEV("div",{className:"popup-prompt-panel__item-content",children:[c.jsxDEV("span",{className:"popup-prompt-panel__item-text",children:E.content},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:521,columnNumber:23},void 0),c.jsxDEV("span",{className:`popup-prompt-panel__item-source popup-prompt-panel__item-source--${E.source}`,children:[dM(E.source),c.jsxDEV("span",{children:mM(E.source,t)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:527,columnNumber:25},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:525,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:520,columnNumber:21},void 0),E.source==="ai-input"&&c.jsxDEV(nn,{content:t==="zh"?"删除":"Delete",showArrow:!1,children:c.jsxDEV("button",{className:"popup-prompt-panel__item-delete",onClick:T=>N(T,E.id),children:c.jsxDEV(jc,{size:12},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:540,columnNumber:27},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:536,columnNumber:25},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:532,columnNumber:23},void 0)]},E.id,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:510,columnNumber:19},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:508,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:503,columnNumber:13},void 0),v.length>0&&c.jsxDEV("div",{className:"popup-prompt-panel__section",children:[c.jsxDEV("div",{className:"popup-prompt-panel__section-header",children:[c.jsxDEV(nd,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:554,columnNumber:17},void 0),c.jsxDEV("span",{children:t==="zh"?"推荐提示词":"Suggestions"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:555,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:553,columnNumber:15},void 0),c.jsxDEV("div",{className:"popup-prompt-panel__list",children:v.map((E,I)=>c.jsxDEV("div",{className:`popup-prompt-panel__item ${S("preset",I)===o?"popup-prompt-panel__item--highlighted":""}`,onClick:()=>k(E),onMouseEnter:()=>r(S("preset",I)),children:c.jsxDEV("span",{className:"popup-prompt-panel__item-text",children:E.content},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:569,columnNumber:21},void 0)},E.id,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:559,columnNumber:19},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:557,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:552,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:500,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:496,columnNumber:7},void 0),m]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:484,columnNumber:5},void 0)},Wr={bringToFront(e){const t=ut(e);if(t.length===0)return;const n=e.children.length-1,i=t.map(s=>({element:s,index:e.children.findIndex(o=>o.id===s.id)})).sort((s,o)=>o.index-s.index);for(const{element:s,index:o}of i)o>=0&&o<n&&Se.moveNode(e,[o],[n])},bringForward(e){const t=ut(e);if(t.length===0)return;const n=e.children.length-1,i=t.map(s=>({element:s,index:e.children.findIndex(o=>o.id===s.id)})).sort((s,o)=>o.index-s.index);for(const{element:s,index:o}of i)o>=0&&o<n&&Se.moveNode(e,[o],[o+2])},sendBackward(e){const t=ut(e);if(t.length===0)return;const n=t.map(i=>({element:i,index:e.children.findIndex(s=>s.id===i.id)})).sort((i,s)=>i.index-s.index);for(const{element:i,index:s}of n)s>0&&Se.moveNode(e,[s],[s-1])},sendToBack(e){const t=ut(e);if(t.length===0)return;const n=t.map(i=>({element:i,index:e.children.findIndex(s=>s.id===i.id)})).sort((i,s)=>i.index-s.index);for(const{element:i,index:s}of n)s>0&&Se.moveNode(e,[s],[0])},getLayerInfo(e,t){const n=e.children.findIndex(s=>s.id===t);if(n<0)return null;const i=e.children.length;return{index:n,total:i,canMoveUp:n<i-1,canMoveDown:n>0}}},fM=({board:e,title:t})=>{const{language:n}=We(),[i,s]=p.useState(!1),[o,r]=p.useState(0),a=J.getBoardContainer(e),l=p.useMemo(()=>{const b=ut(e);if(b.length===0)return null;const x=b[0];return Wr.getLayerInfo(e,x.id)},[e,o]),u=p.useCallback(()=>{Wr.bringToFront(e),r(b=>b+1)},[e]),d=p.useCallback(()=>{Wr.bringForward(e),r(b=>b+1)},[e]),m=p.useCallback(()=>{Wr.sendBackward(e),r(b=>b+1)},[e]),f=p.useCallback(()=>{Wr.sendToBack(e),r(b=>b+1)},[e]),h=(l==null?void 0:l.canMoveUp)??!1,g=(l==null?void 0:l.canMoveDown)??!1;return c.jsxDEV(Ft,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:s,placement:"top-start",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:ne("property-button","layer-control-button"),selected:i,visible:!0,icon:c.jsxDEV(wk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:80,columnNumber:17},void 0),type:"button",tooltip:t,"aria-label":t,onPointerUp:()=>s(!i)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:76,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:75,columnNumber:7},void 0),c.jsxDEV(Ht,{container:a,children:c.jsxDEV(Mt,{padding:1,className:ne(Yt,"layer-control-panel"),children:c.jsxDEV("div",{className:"layer-actions",children:[c.jsxDEV(nn,{content:n==="zh"?"置顶":"Bring to Front",showArrow:!1,children:c.jsxDEV("button",{className:ne("layer-action-btn",{disabled:!h}),onClick:u,disabled:!h,children:[c.jsxDEV(yk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:101,columnNumber:17},void 0),c.jsxDEV("span",{children:n==="zh"?"置顶":"Front"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:102,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:94,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:90,columnNumber:13},void 0),c.jsxDEV(nn,{content:n==="zh"?"上移一层":"Bring Forward",showArrow:!1,children:c.jsxDEV("button",{className:ne("layer-action-btn",{disabled:!h}),onClick:d,disabled:!h,children:[c.jsxDEV(Nk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:117,columnNumber:17},void 0),c.jsxDEV("span",{children:n==="zh"?"上移":"Forward"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:118,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:110,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:106,columnNumber:13},void 0),c.jsxDEV(nn,{content:n==="zh"?"下移一层":"Send Backward",showArrow:!1,children:c.jsxDEV("button",{className:ne("layer-action-btn",{disabled:!g}),onClick:m,disabled:!g,children:[c.jsxDEV(vk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:133,columnNumber:17},void 0),c.jsxDEV("span",{children:n==="zh"?"下移":"Backward"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:134,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:126,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:122,columnNumber:13},void 0),c.jsxDEV(nn,{content:n==="zh"?"置底":"Send to Back",showArrow:!1,children:c.jsxDEV("button",{className:ne("layer-action-btn",{disabled:!g}),onClick:f,disabled:!g,children:[c.jsxDEV(kk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:149,columnNumber:17},void 0),c.jsxDEV("span",{children:n==="zh"?"置底":"Back"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:150,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:142,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:138,columnNumber:13},void 0),l&&c.jsxDEV("span",{className:"layer-info",children:[l.index+1,"/",l.total]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:155,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:89,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:88,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:87,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/layer-control-button.tsx",lineNumber:68,columnNumber:5},void 0)},hM=({board:e,title:t})=>{const{language:n}=We(),[i,s]=p.useState(!1),o=J.getBoardContainer(e),r=p.useCallback(()=>{mi.alignLeft(e)},[e]),a=p.useCallback(()=>{mi.alignCenter(e)},[e]),l=p.useCallback(()=>{mi.alignRight(e)},[e]),u=p.useCallback(()=>{mi.alignTop(e)},[e]),d=p.useCallback(()=>{mi.alignMiddle(e)},[e]),m=p.useCallback(()=>{mi.alignBottom(e)},[e]),f=[{key:"left",icon:c.jsxDEV(Sk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:67,columnNumber:13},void 0),label:n==="zh"?"左对齐":"Align Left",shortcut:"⌥ A",handler:r},{key:"center",icon:c.jsxDEV(Tk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:74,columnNumber:13},void 0),label:n==="zh"?"水平居中":"Align Center",shortcut:"⌥ H",handler:a},{key:"right",icon:c.jsxDEV(Dk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:81,columnNumber:13},void 0),label:n==="zh"?"右对齐":"Align Right",shortcut:"⌥ D",handler:l},{key:"top",icon:c.jsxDEV(_k,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:88,columnNumber:13},void 0),label:n==="zh"?"顶部对齐":"Align Top",shortcut:"⌥ W",handler:u},{key:"middle",icon:c.jsxDEV(Ik,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:95,columnNumber:13},void 0),label:n==="zh"?"垂直居中":"Align Middle",shortcut:"⌥ V",handler:d},{key:"bottom",icon:c.jsxDEV(Ck,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:102,columnNumber:13},void 0),label:n==="zh"?"底部对齐":"Align Bottom",shortcut:"⌥ S",handler:m}];return c.jsxDEV(Ft,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:s,placement:"top-start",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:ne("property-button","alignment-button"),selected:i,visible:!0,icon:c.jsxDEV(Ek,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:122,columnNumber:17},void 0),type:"button",tooltip:t,"aria-label":t,onPointerUp:()=>s(!i)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:118,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:117,columnNumber:7},void 0),c.jsxDEV(Ht,{container:o,children:c.jsxDEV(Mt,{padding:1,className:ne(Yt,"alignment-panel"),children:c.jsxDEV("div",{className:"alignment-actions",children:f.map(h=>c.jsxDEV(nn,{content:h.label,showArrow:!1,children:c.jsxDEV("button",{className:"alignment-action-btn",onClick:h.handler,children:[h.icon,c.jsxDEV("span",{className:"alignment-label",children:h.label},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:149,columnNumber:19},void 0),c.jsxDEV("span",{className:"alignment-shortcut",children:h.shortcut},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:150,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:144,columnNumber:17},void 0)},h.key,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:139,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:137,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:130,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:129,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:110,columnNumber:5},void 0)},gM=({board:e,title:t})=>{const{language:n}=We(),[i,s]=p.useState(!1),o=J.getBoardContainer(e),r=p.useCallback(()=>{er.distributeHorizontal(e)},[e]),a=p.useCallback(()=>{er.distributeVertical(e)},[e]),l=p.useCallback(()=>{er.autoArrange(e)},[e]),u=[{key:"horizontal",icon:c.jsxDEV(Pk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:52,columnNumber:13},void 0),label:n==="zh"?"水平间距":"Horizontal Spacing",shortcut:"⇧ H",handler:r},{key:"vertical",icon:c.jsxDEV(Ak,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:59,columnNumber:13},void 0),label:n==="zh"?"垂直间距":"Vertical Spacing",shortcut:"⇧ V",handler:a},{key:"auto",icon:c.jsxDEV(Mk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:66,columnNumber:13},void 0),label:n==="zh"?"自动排列":"Auto Arrange",shortcut:"⇧ A",handler:l}];return c.jsxDEV(Ft,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:s,placement:"top-start",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:ne("property-button","distribute-button"),selected:i,visible:!0,icon:c.jsxDEV(jk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:86,columnNumber:17},void 0),type:"button",tooltip:t,"aria-label":t,onPointerUp:()=>s(!i)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:82,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:81,columnNumber:7},void 0),c.jsxDEV(Ht,{container:o,children:c.jsxDEV(Mt,{padding:1,className:ne(Yt,"distribute-panel"),children:c.jsxDEV("div",{className:"distribute-actions",children:u.map(d=>c.jsxDEV(nn,{content:d.label,showArrow:!1,children:c.jsxDEV("button",{className:"distribute-action-btn",onClick:d.handler,children:[d.icon,c.jsxDEV("span",{className:"distribute-label",children:d.label},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:113,columnNumber:19},void 0),c.jsxDEV("span",{className:"distribute-shortcut",children:d.shortcut},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:114,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:108,columnNumber:17},void 0)},d.key,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:103,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:101,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:94,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:93,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:74,columnNumber:5},void 0)},bM=({board:e,title:t})=>{const{language:n}=We(),[i,s]=p.useState(!1),o=J.getBoardContainer(e),r=p.useCallback(()=>{Vi.union(e,n),s(!1)},[e,n]),a=p.useCallback(()=>{Vi.subtract(e,n)},[e,n]),l=p.useCallback(()=>{Vi.intersect(e,n)},[e,n]),u=p.useCallback(()=>{Vi.exclude(e,n)},[e,n]),d=p.useCallback(()=>{Vi.flatten(e,n)},[e,n]),m=[{key:"union",icon:c.jsxDEV(Uk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:63,columnNumber:13},void 0),label:n==="zh"?"合并":"Union",shortcut:"⌥⇧U",handler:r},{key:"subtract",icon:c.jsxDEV(Rk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:70,columnNumber:13},void 0),label:n==="zh"?"减去":"Subtract",shortcut:"⌥⇧S",handler:a},{key:"intersect",icon:c.jsxDEV(qk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:77,columnNumber:13},void 0),label:n==="zh"?"相交":"Intersect",shortcut:"⌥⇧I",handler:l},{key:"exclude",icon:c.jsxDEV(Lk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:84,columnNumber:13},void 0),label:n==="zh"?"排除":"Exclude",shortcut:"⌥⇧E",handler:u},{key:"flatten",icon:c.jsxDEV(Ok,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:91,columnNumber:13},void 0),label:n==="zh"?"扁平化":"Flatten",shortcut:"⇧⌥F",handler:d}];return c.jsxDEV(Ft,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:s,placement:"top-start",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:ne("property-button","boolean-button"),selected:i,visible:!0,icon:c.jsxDEV(Vk,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:111,columnNumber:17},void 0),type:"button",tooltip:t,"aria-label":t,onPointerUp:()=>s(!i)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:107,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:106,columnNumber:7},void 0),c.jsxDEV(Ht,{container:o,children:c.jsxDEV(Mt,{padding:1,className:ne(Yt,"boolean-panel"),children:c.jsxDEV("div",{className:"boolean-actions",children:m.map(f=>c.jsxDEV(nn,{content:f.label,showArrow:!1,children:c.jsxDEV("button",{className:"boolean-action-btn",onClick:f.handler,children:[f.icon,c.jsxDEV("span",{className:"boolean-label",children:f.label},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:138,columnNumber:19},void 0),c.jsxDEV("span",{className:"boolean-shortcut",children:f.shortcut},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:139,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:133,columnNumber:17},void 0)},f.key,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:128,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:126,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:119,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:118,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:99,columnNumber:5},void 0)};function xM(e){return e.sort((t,n)=>t.position-n.position).map(t=>`${t.color} ${t.position}%`).join(", ")}function wM(e){const t=xM(e.stops);return e.type==="linear"?`linear-gradient(${e.angle}deg, ${t})`:`radial-gradient(circle, ${t})`}function Au(e){return e.enabled?`${e.offsetX}px ${e.offsetY}px ${e.blur}px ${e.color}`:""}const Mu=En.CUSTOM_GRADIENTS,yM=({board:e,isOpen:t,onClose:n,currentFontSize:i,currentFontFamily:s,currentColor:o,toolbarRect:r,selectionRect:a})=>{var Bi,zs;const{t:l,language:u}=We(),{confirm:d,confirmDialog:m}=Ba({container:J.getBoardContainer(e)}),f=p.useRef(null),[h,g]=p.useState({top:0,left:0}),[b,x]=p.useState(i||"16"),[y,w]=p.useState(!1),[v,S]=p.useState(s||"PingFang SC"),[k,N]=p.useState(new Set),[E,I]=p.useState(400),[T,j]=p.useState("left"),[V,_]=p.useState(1.5),[D,C]=p.useState(0),[M,U]=p.useState(!1),[F,$]=p.useState(!1),[A,H]=p.useState(!1),[ue,te]=p.useState(!1),[oe,me]=p.useState(!1),[_e,Pe]=p.useState(!1),[He,Z]=p.useState(null),[Ie,Qe]=p.useState(null),[dt,bt]=p.useState(0),[L,P]=p.useState("#000000"),[Q,se]=p.useState(null),[z,O]=p.useState(null),[K,G]=p.useState(!1),[fe,ae]=p.useState(null),[Y,le]=p.useState({color:"rgba(0, 0, 0, 0.5)",offsetX:2,offsetY:2,blur:4}),[ge,Ve]=p.useState(!1),[Nt,Xe]=p.useState(null),[be,ze]=p.useState({type:"linear",angle:135,stops:[{color:"#FF6B6B",offset:0},{color:"#4ECDC4",offset:1}]}),[W,B]=p.useState([]),[re,xe]=p.useState(o||"#000000"),[ve,Be]=p.useState(!1);p.useEffect(()=>{let R=!0;return Xt.get(Mu).then(De=>{R&&De&&B(De)}).catch(De=>{console.warn("Failed to load gradient data:",De)}),()=>{R=!1}},[]),p.useEffect(()=>{if(t){const R=AA(e);if(R["text-gradient"]){Ve(!0);const Je=zk.find(jt=>wM(jt.config)===R["text-gradient"]);Xe(Je?Je.id:null)}else Ve(!1),Xe(null);if(R["text-shadow"]){G(!0);const Je=R["text-shadow"];let jt=null;for(const[An,ci]of Object.entries(Kp.textShadow))if(Au(ci)===Je){jt=An;break}ae(jt||null)}else G(!1),ae(null);if(R["font-family"]&&S(R["font-family"]),R["font-weight"]&&I(Number(R["font-weight"])),R["line-height"]&&_(Number(R["line-height"])),R["letter-spacing"]){const Je=String(R["letter-spacing"]).replace("px","");C(Number(Je))}const De=MA(e);j(De),U(!!R.bold),$(!!R.italic),H(!!R.underlined),te(!!R.strikethrough),me(!!R.superscript),Pe(!!R.subscript),Z(R["background-color"]||null),Qe(R["text-transform"]||null),bt(R["text-stroke"]||0),P(R["text-stroke-color"]||"#000000"),se(R["text-decoration-style"]||null),O(R["text-decoration-color"]||null)}},[t,e]),p.useEffect(()=>{if(t&&!y){const R=setTimeout(()=>{Yp.forEach(De=>{rl.isFontLoaded(De.family)||rl.loadGoogleFont(De.family).catch(Je=>{console.warn(`Failed to preload font ${De.family}:`,Je)})})},500);return()=>clearTimeout(R)}},[t,y]),p.useEffect(()=>{if(t&&r&&a){let jt=a.right+12,An=r.top+r.height+8;const ci=window.innerWidth,Mr=window.innerHeight;jt+320>ci-16&&(jt=a.left-320-12,jt<16&&(jt=ci-320-16)),An+520>Mr-16&&(An=Math.max(16,Mr-520-16)),g({left:Math.max(16,jt),top:Math.max(16,An)})}},[t,r,a]);const Fe=p.useCallback(R=>{const De=parseInt(R,10);!isNaN(De)&&De>=8&&De<=100&&(x(R),Gw(e,R))},[e]),Me=p.useCallback(async R=>{if(S(R.family),w(!1),R.source==="google"&&!rl.isFontLoaded(R.family)){N(De=>new Set(De).add(R.family));try{await rl.loadGoogleFont(R.family)}catch(De){console.error("Failed to load Google font:",De)}finally{N(De=>{const Je=new Set(De);return Je.delete(R.family),Je})}}xA(e,R.family)},[e]);p.useEffect(()=>{o&&xe(o)},[o]);const et=p.useCallback(R=>{xe(R),Ds.setTextColor(e,R)},[e]),vt=p.useCallback((R,De)=>{ae(R),G(!0),le({color:De.color,offsetX:De.offsetX,offsetY:De.offsetY,blur:De.blur});const Je=Au(De);Iu(e,Je)},[e]),he=p.useCallback((R,De)=>{const Je={...Y,[R]:De};le(Je),ae(null);const jt=`${Je.offsetX}px ${Je.offsetY}px ${Je.blur}px ${Je.color}`;Iu(e,jt)},[e,Y]),je=p.useCallback(R=>{ze(R),Xe(null);const De=ro(R);cg(e,De)},[e]),we=p.useCallback(()=>{const R=ro(be),Je=[{id:`custom-${Date.now()}`,css:R},...W].slice(0,8);B(Je),Xt.set(Mu,Je).catch(jt=>{console.warn("Failed to save custom gradients:",jt)})},[be,W]),Te=p.useCallback(async R=>{if(!await d({title:u==="zh"?"确认删除渐变预设":"Delete Gradient Preset",description:u==="zh"?"确定要删除这个自定义渐变预设吗?":"Are you sure you want to delete this custom gradient preset?",confirmText:u==="zh"?"删除":"Delete",cancelText:u==="zh"?"取消":"Cancel",danger:!0}))return;const Je=W.filter(jt=>jt.id!==R);B(Je),Xt.set(Mu,Je).catch(jt=>{console.warn("Failed to save custom gradients:",jt)})},[d,W,u]),tt=p.useCallback(()=>{const R=!K;G(R),R||(Iu(e,null),ae(null))},[e,K]),Re=p.useCallback(()=>{const R=!ge;Ve(R),R||(cg(e,null),Xe(null))},[e,ge]),Ye=p.useCallback(R=>{I(R),Hw(e,R)},[e]),mt=p.useCallback(R=>{j(R),wA(e,R)},[e]),St=p.useCallback(R=>{_(R),yA(e,R)},[e]),xt=p.useCallback(R=>{C(R),NA(e,R)},[e]),Jt=p.useCallback(()=>{U(!M),vA(e)},[e,M]),ot=p.useCallback(()=>{$(!F),kA(e)},[e,F]),rt=p.useCallback(()=>{H(!A),EA(e)},[e,A]),wn=p.useCallback(()=>{te(!ue),SA(e)},[e,ue]),zi=p.useCallback(()=>{const R=!oe;me(R),R&&Pe(!1),TA(e)},[e,oe]),jr=p.useCallback(()=>{const R=!_e;Pe(R),R&&me(!1),DA(e)},[e,_e]),Ee=p.useCallback(R=>{Z(R),_A(e,R)},[e]),Os=p.useCallback(R=>{const De=R===Ie?null:R;Qe(De),IA(e,De)},[e,Ie]),ds=p.useCallback((R,De)=>{bt(R),De&&P(De),CA(e,R>0?R:null,De||L)},[e,L]),au=p.useCallback(R=>{se(R),jA(e,R)},[e]),Ja=p.useCallback(R=>{O(R),PA(e,R)},[e]);p.useEffect(()=>{if(!t)return;const R=Je=>{const jt=Je.target;f.current&&f.current.contains(jt)||jt.closest(".popup-toolbar")!==null||n()},De=setTimeout(()=>{document.addEventListener("mousedown",R)},100);return()=>{clearTimeout(De),document.removeEventListener("mousedown",R)}},[t,n]);const Qa=p.useCallback(R=>{R.target===R.currentTarget&&n()},[n]),[ms,Pr]=p.useState(!1),el=[{value:100,label:"Thin",labelZh:"极细"},{value:200,label:"Extra Light",labelZh:"特细"},{value:300,label:"Light",labelZh:"细体"},{value:400,label:"Regular",labelZh:"常规"},{value:500,label:"Medium",labelZh:"中等"},{value:600,label:"Semi Bold",labelZh:"半粗"},{value:700,label:"Bold",labelZh:"粗体"},{value:800,label:"Extra Bold",labelZh:"特粗"},{value:900,label:"Black",labelZh:"黑体"}],tl=p.useCallback(R=>{const De=el.find(Je=>Je.value===R);return De?u==="zh"?De.labelZh:De.label:String(R)},[u]),Ar=[...Bk,...Yp],lu=p.useCallback(R=>{const De=Ar.find(Je=>Je.family===R);return(De==null?void 0:De.displayName)||R},[Ar]);return t?c.jsxDEV(c.Fragment,{children:[c.jsxDEV("div",{className:"text-property-panel-overlay",onClick:Qa,onPointerDown:R=>R.stopPropagation(),onMouseDown:R=>R.stopPropagation()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:612,columnNumber:7},void 0),c.jsxDEV("div",{ref:f,className:ne("text-property-panel",{"is-open":t}),style:{top:h.top,left:h.left},onPointerDown:R=>R.stopPropagation(),onMouseDown:R=>R.stopPropagation(),onClick:R=>R.stopPropagation(),onPointerUp:R=>R.stopPropagation(),children:[c.jsxDEV("div",{className:"text-property-panel__header",children:[c.jsxDEV("span",{className:"text-property-panel__header-title",children:l("propertyPanel.title")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:631,columnNumber:11},void 0),c.jsxDEV("button",{className:"text-property-panel__header-close",onClick:n,children:c.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:c.jsxDEV("path",{d:"M1 1L13 13M1 13L13 1",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:636,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:635,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:634,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:630,columnNumber:9},void 0),c.jsxDEV("div",{className:"text-property-panel__content",children:[c.jsxDEV("div",{className:"text-property-panel__section",children:c.jsxDEV("div",{className:"text-property-panel__section-content",children:[c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"字号":"Size"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:648,columnNumber:17},void 0),c.jsxDEV("div",{className:"inline-control__slider-group",children:[c.jsxDEV("input",{type:"range",className:"inline-control__slider",value:b,min:8,max:100,step:1,onChange:R=>{x(R.target.value),Fe(R.target.value)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:650,columnNumber:19},void 0),c.jsxDEV("span",{className:"inline-control__value",children:b},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:662,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:649,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:647,columnNumber:15},void 0),c.jsxDEV("div",{className:"inline-control inline-control--dropdown",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"字体":"Font"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:668,columnNumber:17},void 0),c.jsxDEV("div",{className:"custom-dropdown",children:[c.jsxDEV("div",{className:ne("custom-dropdown__trigger",{"is-expanded":y}),onClick:()=>{w(!y),Pr(!1)},children:[c.jsxDEV("span",{className:"custom-dropdown__value",style:{fontFamily:`'${v}', sans-serif`},children:lu(v)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:677,columnNumber:21},void 0),c.jsxDEV("svg",{className:"custom-dropdown__arrow",width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:c.jsxDEV("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:684,columnNumber:23},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:683,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:670,columnNumber:19},void 0),c.jsxDEV("div",{className:ne("custom-dropdown__menu custom-dropdown__menu--font",{"is-open":y}),children:Ar.map(R=>c.jsxDEV("div",{className:ne("custom-dropdown__item custom-dropdown__item--font",{"is-active":v===R.family}),onClick:()=>{Me(R),w(!1)},children:[c.jsxDEV("span",{className:"custom-dropdown__item-label",children:R.displayName},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:699,columnNumber:25},void 0),c.jsxDEV("span",{className:"custom-dropdown__item-preview",style:{fontFamily:`'${R.family}', sans-serif`},children:R.previewText},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:700,columnNumber:25},void 0)]},R.family,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:689,columnNumber:23},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:687,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:669,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:667,columnNumber:15},void 0),c.jsxDEV("div",{className:"inline-control inline-control--dropdown",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"字重":"Weight"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:714,columnNumber:17},void 0),c.jsxDEV("div",{className:"custom-dropdown",children:[c.jsxDEV("div",{className:ne("custom-dropdown__trigger",{"is-expanded":ms}),onClick:()=>{Pr(!ms),w(!1)},children:[c.jsxDEV("span",{className:"custom-dropdown__value",style:{fontWeight:E},children:tl(E)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:723,columnNumber:21},void 0),c.jsxDEV("svg",{className:"custom-dropdown__arrow",width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:c.jsxDEV("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:727,columnNumber:23},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:726,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:716,columnNumber:19},void 0),c.jsxDEV("div",{className:ne("custom-dropdown__menu",{"is-open":ms}),children:el.map(R=>c.jsxDEV("div",{className:ne("custom-dropdown__item",{"is-active":E===R.value}),onClick:()=>{Ye(R.value),Pr(!1)},children:c.jsxDEV("span",{className:"custom-dropdown__item-label",style:{fontWeight:R.value},children:u==="zh"?R.labelZh:R.label},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:742,columnNumber:25},void 0)},R.value,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:732,columnNumber:23},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:730,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:715,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:713,columnNumber:15},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"对齐":"Align"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:756,columnNumber:17},void 0),c.jsxDEV("div",{className:"align-buttons align-buttons--compact",children:[c.jsxDEV("button",{className:ne("align-buttons__btn",{"is-active":T==="left"}),onClick:()=>mt("left"),title:u==="zh"?"左对齐":"Align Left",children:c.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"currentColor",children:c.jsxDEV("path",{d:"M2 3h12v2H2V3zm0 4h8v2H2V7zm0 4h12v2H2v-2z"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:764,columnNumber:23},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:763,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:758,columnNumber:19},void 0),c.jsxDEV("button",{className:ne("align-buttons__btn",{"is-active":T==="center"}),onClick:()=>mt("center"),title:u==="zh"?"居中对齐":"Align Center",children:c.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"currentColor",children:c.jsxDEV("path",{d:"M2 3h12v2H2V3zm2 4h8v2H4V7zm-2 4h12v2H2v-2z"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:773,columnNumber:23},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:772,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:767,columnNumber:19},void 0),c.jsxDEV("button",{className:ne("align-buttons__btn",{"is-active":T==="right"}),onClick:()=>mt("right"),title:u==="zh"?"右对齐":"Align Right",children:c.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"currentColor",children:c.jsxDEV("path",{d:"M2 3h12v2H2V3zm4 4h8v2H6V7zm-4 4h12v2H2v-2z"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:782,columnNumber:23},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:781,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:776,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:757,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:755,columnNumber:15},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"样式":"Style"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:790,columnNumber:17},void 0),c.jsxDEV("div",{className:"style-buttons",children:[c.jsxDEV("button",{className:ne("style-buttons__btn",{"is-active":M}),onClick:Jt,title:u==="zh"?"加粗":"Bold",children:c.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--bold",children:"B"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:797,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:792,columnNumber:19},void 0),c.jsxDEV("button",{className:ne("style-buttons__btn",{"is-active":F}),onClick:ot,title:u==="zh"?"斜体":"Italic",children:c.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--italic",children:"I"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:804,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:799,columnNumber:19},void 0),c.jsxDEV("button",{className:ne("style-buttons__btn",{"is-active":A}),onClick:rt,title:u==="zh"?"下划线":"Underline",children:c.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--underline",children:"U"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:811,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:806,columnNumber:19},void 0),c.jsxDEV("button",{className:ne("style-buttons__btn",{"is-active":ue}),onClick:wn,title:u==="zh"?"删除线":"Strikethrough",children:c.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--strikethrough",children:"S"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:818,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:813,columnNumber:19},void 0),c.jsxDEV("button",{className:ne("style-buttons__btn",{"is-active":oe}),onClick:zi,title:u==="zh"?"上标":"Superscript",children:c.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--superscript",children:["X",c.jsxDEV("sup",{children:"2"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:825,columnNumber:93},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:825,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:820,columnNumber:19},void 0),c.jsxDEV("button",{className:ne("style-buttons__btn",{"is-active":_e}),onClick:jr,title:u==="zh"?"下标":"Subscript",children:c.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--subscript",children:["X",c.jsxDEV("sub",{children:"2"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:832,columnNumber:91},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:832,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:827,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:791,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:789,columnNumber:15},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"大小写":"Case"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:839,columnNumber:17},void 0),c.jsxDEV("div",{className:"case-buttons",children:[c.jsxDEV("button",{className:ne("case-buttons__btn",{"is-active":Ie==="uppercase"}),onClick:()=>Os("uppercase"),title:u==="zh"?"全大写":"Uppercase",children:"AA"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:841,columnNumber:19},void 0),c.jsxDEV("button",{className:ne("case-buttons__btn",{"is-active":Ie==="lowercase"}),onClick:()=>Os("lowercase"),title:u==="zh"?"全小写":"Lowercase",children:"aa"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:848,columnNumber:19},void 0),c.jsxDEV("button",{className:ne("case-buttons__btn",{"is-active":Ie==="capitalize"}),onClick:()=>Os("capitalize"),title:u==="zh"?"首字母大写":"Capitalize",children:"Aa"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:855,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:840,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:838,columnNumber:15},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"行高":"Line"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:867,columnNumber:17},void 0),c.jsxDEV("div",{className:"inline-control__slider-group",children:[c.jsxDEV("input",{type:"range",className:"inline-control__slider",value:V,min:.8,max:3,step:.1,onChange:R=>St(Number(R.target.value))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:869,columnNumber:19},void 0),c.jsxDEV("span",{className:"inline-control__value",children:V.toFixed(1)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:878,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:868,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:866,columnNumber:15},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"字距":"Spacing"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:884,columnNumber:17},void 0),c.jsxDEV("div",{className:"inline-control__slider-group",children:[c.jsxDEV("input",{type:"range",className:"inline-control__slider",value:D,min:-2,max:10,step:.5,onChange:R=>xt(Number(R.target.value))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:886,columnNumber:19},void 0),c.jsxDEV("span",{className:"inline-control__value",children:[D,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:895,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:885,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:883,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:645,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:644,columnNumber:11},void 0),c.jsxDEV("div",{className:"text-property-panel__section",children:[c.jsxDEV("div",{className:"text-property-panel__section-title",children:l("propertyPanel.textColor")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:903,columnNumber:13},void 0),c.jsxDEV("div",{className:"text-property-panel__section-content text-color-picker",children:c.jsxDEV(fo,{value:re,onChange:et,showAlpha:!0,showEyeDropper:!0,showPresets:!0,showRecentColors:!0,showHexInput:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:907,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:906,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:902,columnNumber:11},void 0),c.jsxDEV("div",{className:"text-property-panel__section",children:c.jsxDEV("div",{className:"text-property-panel__section-content",children:[c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"高亮":"Highlight"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:924,columnNumber:17},void 0),c.jsxDEV("div",{className:"highlight-colors",children:[c.jsxDEV("button",{className:ne("highlight-colors__btn highlight-colors__btn--none",{"is-active":!He}),onClick:()=>Ee(null),title:u==="zh"?"无":"None",children:c.jsxDEV("svg",{width:"12",height:"12",viewBox:"0 0 16 16",children:c.jsxDEV("line",{x1:"2",y1:"2",x2:"14",y2:"14",stroke:"currentColor",strokeWidth:"2"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:932,columnNumber:23},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:931,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:926,columnNumber:19},void 0),["#FFEB3B","#4CAF50","#2196F3","#E91E63","#FF9800","#9C27B0"].map(R=>c.jsxDEV("button",{className:ne("highlight-colors__btn",{"is-active":He===R}),style:{backgroundColor:R},onClick:()=>Ee(R),title:R},R,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:936,columnNumber:21},void 0))]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:925,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:923,columnNumber:15},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"描边":"Stroke"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:949,columnNumber:17},void 0),c.jsxDEV("div",{className:"inline-control__slider-group",children:[c.jsxDEV("input",{type:"range",className:"inline-control__slider",value:dt,min:0,max:3,step:.5,onChange:R=>ds(Number(R.target.value))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:951,columnNumber:19},void 0),c.jsxDEV("span",{className:"inline-control__value",children:[dt,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:960,columnNumber:19},void 0),dt>0&&c.jsxDEV("input",{type:"color",className:"inline-control__color-input",value:L,onChange:R=>ds(dt,R.target.value)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:962,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:950,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:948,columnNumber:15},void 0),(A||ue)&&c.jsxDEV(c.Fragment,{children:[c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"线型":"Line Style"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:976,columnNumber:21},void 0),c.jsxDEV("div",{className:"decoration-style-buttons",children:["solid","double","dotted","dashed","wavy"].map(R=>c.jsxDEV("button",{className:ne("decoration-style-buttons__btn",{"is-active":Q===R}),onClick:()=>au(Q===R?null:R),title:R,children:c.jsxDEV("span",{className:`decoration-preview decoration-preview--${R}`,children:"Ab"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:985,columnNumber:27},void 0)},R,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:979,columnNumber:25},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:977,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:975,columnNumber:19},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"线色":"Line Color"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:991,columnNumber:21},void 0),c.jsxDEV("div",{className:"highlight-colors",children:[c.jsxDEV("button",{className:ne("highlight-colors__btn highlight-colors__btn--none",{"is-active":!z}),onClick:()=>Ja(null),title:u==="zh"?"默认":"Default",children:c.jsxDEV("svg",{width:"12",height:"12",viewBox:"0 0 16 16",children:c.jsxDEV("line",{x1:"2",y1:"2",x2:"14",y2:"14",stroke:"currentColor",strokeWidth:"2"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:999,columnNumber:27},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:998,columnNumber:25},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:993,columnNumber:23},void 0),["#E91E63","#FF5722","#4CAF50","#2196F3","#9C27B0","#000000"].map(R=>c.jsxDEV("button",{className:ne("highlight-colors__btn",{"is-active":z===R}),style:{backgroundColor:R},onClick:()=>Ja(R),title:R},R,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1003,columnNumber:25},void 0))]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:992,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:990,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:974,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:921,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:920,columnNumber:11},void 0),c.jsxDEV("div",{className:"text-property-panel__section",children:c.jsxDEV("div",{className:"text-property-panel__section-content",children:[c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"阴影":"Shadow"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1023,columnNumber:17},void 0),c.jsxDEV("div",{className:ne("toggle-switch__control toggle-switch__control--inline",{"is-active":K}),onClick:tt},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1024,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1022,columnNumber:15},void 0),K&&c.jsxDEV(c.Fragment,{children:[c.jsxDEV("div",{className:"effect-presets",children:Object.entries(Kp.textShadow).map(([R,De])=>c.jsxDEV("div",{className:ne("effect-presets__item",{"is-active":fe===R}),onClick:()=>vt(R,De),title:R,children:c.jsxDEV("span",{style:{textShadow:Au(De)},children:"Aa"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1043,columnNumber:25},void 0)},R,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1035,columnNumber:23},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1033,columnNumber:19},void 0),c.jsxDEV("div",{className:"effect-config",children:[c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"颜色":"Color"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1052,columnNumber:23},void 0),c.jsxDEV("div",{className:"inline-control__color-group",children:[c.jsxDEV(Ft,{open:ve,onOpenChange:Be,placement:"bottom",sideOffset:8,children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("button",{className:"inline-control__color-trigger",style:{backgroundColor:Y.color.startsWith("rgba")?`#${((Bi=Y.color.match(/\d+/g))==null?void 0:Bi.slice(0,3).map(R=>parseInt(R).toString(16).padStart(2,"0")).join(""))||"000000"}`:Y.color},onClick:()=>Be(!ve)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1061,columnNumber:29},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1060,columnNumber:27},void 0),c.jsxDEV(Ht,{children:c.jsxDEV(Mt,{padding:4,className:"color-picker-popover",children:c.jsxDEV(fo,{value:Y.color.startsWith("rgba")?`#${((zs=Y.color.match(/\d+/g))==null?void 0:zs.slice(0,3).map(R=>parseInt(R).toString(16).padStart(2,"0")).join(""))||"000000"}`:Y.color,onChange:R=>{const De=parseInt(R.slice(1,3),16),Je=parseInt(R.slice(3,5),16),jt=parseInt(R.slice(5,7),16),An=Y.color.match(/[\d.]+\)$/),ci=An?parseFloat(An[0]):.5;he("color",`rgba(${De}, ${Je}, ${jt}, ${ci})`)},showAlpha:!1,showEyeDropper:!0,showPresets:!0,showRecentColors:!0,showHexInput:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1073,columnNumber:31},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1072,columnNumber:29},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1071,columnNumber:27},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1054,columnNumber:25},void 0),c.jsxDEV("input",{type:"range",className:"inline-control__slider inline-control__slider--short",value:(()=>{const R=Y.color.match(/[\d.]+\)$/);return R?parseFloat(R[0])*100:50})(),min:0,max:100,step:5,title:u==="zh"?"透明度":"Opacity",onChange:R=>{const De=Number(R.target.value)/100,Je=Y.color.match(/\d+/g);if(Je&&Je.length>=3){const[jt,An,ci]=Je.slice(0,3);he("color",`rgba(${jt}, ${An}, ${ci}, ${De})`)}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1094,columnNumber:25},void 0),c.jsxDEV("span",{className:"inline-control__value inline-control__value--narrow",children:[(()=>{const R=Y.color.match(/[\d.]+\)$/);return R?Math.round(parseFloat(R[0])*100):50})(),"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1114,columnNumber:25},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1053,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1051,columnNumber:21},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"X偏移":"X"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1123,columnNumber:23},void 0),c.jsxDEV("div",{className:"inline-control__slider-group",children:[c.jsxDEV("input",{type:"range",className:"inline-control__slider",value:Y.offsetX,min:-20,max:20,step:1,onChange:R=>he("offsetX",Number(R.target.value))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1125,columnNumber:25},void 0),c.jsxDEV("span",{className:"inline-control__value",children:[Y.offsetX,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1134,columnNumber:25},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1124,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1122,columnNumber:21},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"Y偏移":"Y"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1138,columnNumber:23},void 0),c.jsxDEV("div",{className:"inline-control__slider-group",children:[c.jsxDEV("input",{type:"range",className:"inline-control__slider",value:Y.offsetY,min:-20,max:20,step:1,onChange:R=>he("offsetY",Number(R.target.value))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1140,columnNumber:25},void 0),c.jsxDEV("span",{className:"inline-control__value",children:[Y.offsetY,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1149,columnNumber:25},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1139,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1137,columnNumber:21},void 0),c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"模糊":"Blur"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1153,columnNumber:23},void 0),c.jsxDEV("div",{className:"inline-control__slider-group",children:[c.jsxDEV("input",{type:"range",className:"inline-control__slider",value:Y.blur,min:0,max:30,step:1,onChange:R=>he("blur",Number(R.target.value))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1155,columnNumber:25},void 0),c.jsxDEV("span",{className:"inline-control__value",children:[Y.blur,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1164,columnNumber:25},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1154,columnNumber:23},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1152,columnNumber:21},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1049,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1031,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1020,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1019,columnNumber:11},void 0),c.jsxDEV("div",{className:"text-property-panel__section",children:c.jsxDEV("div",{className:"text-property-panel__section-content",children:[c.jsxDEV("div",{className:"inline-control",children:[c.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"渐变":"Gradient"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1178,columnNumber:17},void 0),c.jsxDEV("div",{className:ne("toggle-switch__control toggle-switch__control--inline",{"is-active":ge}),onClick:Re},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1179,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1177,columnNumber:15},void 0),ge&&c.jsxDEV("div",{className:"gradient-editor-wrapper",children:c.jsxDEV(Ww,{value:be,onChange:je,showPresets:!0,showHistory:!1,inline:!0,customPresets:W.map(R=>R.css),onSavePreset:we,onDeletePreset:R=>{const De=W[R];De&&Te(De.id)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1187,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1186,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1175,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1174,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:642,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:620,columnNumber:7},void 0),m]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:610,columnNumber:5},void 0):null};let Vs={x:0,y:0},br=new Set,uc=!1;const Kw=e=>{Vs={x:e.clientX,y:e.clientY},br.forEach(t=>t(Vs))},Yw=e=>{Vs={x:e.clientX,y:e.clientY},br.forEach(t=>t(Vs))},Zw=e=>{Vs={x:e.clientX,y:e.clientY},br.forEach(t=>t(Vs))},NM=()=>{uc||(document.addEventListener("mousemove",Kw,!0),document.addEventListener("mousedown",Yw,!0),document.addEventListener("mouseup",Zw,!0),uc=!0)},vM=()=>{uc&&br.size===0&&(document.removeEventListener("mousemove",Kw,!0),document.removeEventListener("mousedown",Yw,!0),document.removeEventListener("mouseup",Zw,!0),uc=!1)},kM=()=>{const[e,t]=p.useState(()=>Vs),n=p.useRef();return p.useEffect(()=>(n.current=i=>{t(i)},br.add(n.current),NM(),t(Vs),()=>{n.current&&br.delete(n.current),vM()}),[]),e},EM=({visible:e,videoUrl:t,onClose:n,onConfirm:i})=>{const{language:s}=We(),o=p.useRef(null),r=p.useRef(null),a=p.useRef(null),[l,u]=p.useState(!0),[d,m]=p.useState(0),[f,h]=p.useState(0),[g,b]=p.useState(""),[x,y]=p.useState(!1),[w,v]=p.useState(!1);p.useEffect(()=>(e&&t&&(u(!0),b(""),y(!1),v(!1)),()=>{a.current!==null&&window.clearTimeout(a.current)}),[e,t]);const S=()=>{const C=o.current;C&&(m(C.duration),y(!0))},k=p.useCallback((C,M=!1)=>{const U=o.current;if(!U)return;a.current!==null&&(window.clearTimeout(a.current),a.current=null);const F=()=>{if(U.readyState<2){console.warn("Video not ready for seeking, readyState:",U.readyState);const $=()=>{U.currentTime=C,U.removeEventListener("canplay",$)};U.addEventListener("canplay",$);return}U.currentTime=C};M?F():a.current=window.setTimeout(F,150)},[]);p.useEffect(()=>{const C=o.current;if(x&&C&&d>0){const M=Math.max(0,d-.1);h(M),k(M,!0)}},[x,d,k]);const N=p.useCallback(()=>{const C=o.current,M=r.current;if(!C||!M)return;const U=M.getContext("2d");if(U)try{M.width=C.videoWidth,M.height=C.videoHeight,U.drawImage(C,0,0,M.width,M.height);const F=M.toDataURL("image/png");b(F)}catch(F){console.warn("Failed to generate frame image (likely due to CORS):",F);try{U.fillStyle="#000",U.fillRect(0,0,M.width,M.height),U.fillStyle="#fff",U.font="16px Arial",U.textAlign="center",U.fillText("视频帧预览不可用",M.width/2,M.height/2);const $=M.toDataURL("image/png");b($)}catch($){console.error("Failed to create placeholder image:",$),b("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==")}}},[]),E=p.useCallback(()=>{w||(N(),u(!1))},[w,N]),I=()=>{v(!0)},T=C=>{if(o.current&&d>0&&x){const U=C/100*d;h(U),k(U,!1)}},j=()=>{v(!1),u(!0),o.current&&x&&k(f,!0)},V=C=>{if(!o.current||d===0||!x)return;const U=parseFloat(C.target.value);if(isNaN(U))return;const F=Math.max(0,Math.min(d,U));h(F),k(F,!0),u(!0)},_=()=>{g&&(i(g,f),n())},D=C=>{const M=Math.floor(C/60),U=(C%60).toFixed(1);return`${M}:${U.padStart(4,"0")}`};return c.jsxDEV(Fk,{visible:e,onClose:n,header:s==="zh"?"选择视频帧":"Select Video Frame",width:600,destroyOnClose:!0,footer:!1,children:c.jsxDEV("div",{className:"video-frame-selector",children:[c.jsxDEV("video",{ref:o,src:t,style:{display:"none"},muted:!0,playsInline:!0,preload:"auto",crossOrigin:"anonymous",onLoadedMetadata:S,onSeeked:E},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:223,columnNumber:9},void 0),c.jsxDEV("canvas",{ref:r,style:{display:"none"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:236,columnNumber:9},void 0),c.jsxDEV("div",{className:"frame-preview",children:l?c.jsxDEV("div",{className:"loading-placeholder",children:[c.jsxDEV("div",{className:"loading-spinner"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:245,columnNumber:15},void 0),c.jsxDEV("div",{className:"loading-text",children:s==="zh"?"加载视频中...":"Loading video..."},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:246,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:244,columnNumber:13},void 0):c.jsxDEV("div",{className:"frame-image-container",children:c.jsxDEV("img",{src:g,alt:"Video frame",className:"frame-image"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:252,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:251,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:242,columnNumber:9},void 0),c.jsxDEV("div",{className:"time-controls",children:[c.jsxDEV("div",{className:"time-display",children:[c.jsxDEV("span",{className:"current-time",children:D(f)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:264,columnNumber:13},void 0),c.jsxDEV("span",{className:"separator",children:"/"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:265,columnNumber:13},void 0),c.jsxDEV("span",{className:"total-time",children:D(d)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:266,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:263,columnNumber:11},void 0),c.jsxDEV("div",{className:"progress-container",children:c.jsxDEV("input",{type:"range",min:0,max:100,value:d>0?f/d*100:0,onChange:C=>T(Number(C.target.value)),onMouseDown:I,onMouseUp:j,onTouchStart:I,onTouchEnd:j,className:"progress-slider",disabled:l&&!w},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:271,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:270,columnNumber:11},void 0),c.jsxDEV("div",{className:"time-input-container",children:[c.jsxDEV("label",{className:"time-input-label",children:s==="zh"?"精确时间 (秒):":"Precise time (seconds):"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:288,columnNumber:13},void 0),c.jsxDEV("input",{type:"number",min:0,max:d,step:.1,value:f.toFixed(1),onChange:V,className:"time-input",disabled:l},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:291,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:287,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:262,columnNumber:9},void 0),c.jsxDEV("div",{className:"actions",children:[c.jsxDEV("button",{className:"action-button secondary",onClick:n,children:s==="zh"?"取消":"Cancel"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:306,columnNumber:11},void 0),c.jsxDEV("button",{className:"action-button primary",onClick:_,disabled:l||!g,children:s==="zh"?"确认插入":"Confirm Insert"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:312,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:305,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:221,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:213,columnNumber:5},void 0)},SM=async(e,t,n,i)=>{if(!e||!t)throw new Error("Board and video element are required");try{const s=It(e,[t],!1),o=[s.x,s.y+s.height+20],r=new Image,a=await new Promise(u=>{r.onload=()=>{u({width:r.naturalWidth,height:r.naturalHeight})},r.onerror=()=>{u({width:s.width,height:s.height})},r.src=n}),l={url:n,width:a.width,height:a.height,isVideoFrame:!0,videoTimestamp:i,sourceVideoId:t.id||"unknown"};Qn.insertImage(e,l,o)}catch(s){throw console.error("Failed to insert video frame:",s),new Error(`Video frame insertion failed: ${s instanceof Error?s.message:"Unknown error"}`)}};function TM(){if(typeof VideoDecoder>"u"||typeof VideoEncoder>"u")throw new Error(`当前浏览器不支持 WebCodecs API。
|
|
42
|
+
请使用 Chrome 94+ 或 Edge 94+ 浏览器。`)}function DM(){const e=[{mimeType:"video/mp4;codecs=avc1",extension:"mp4"},{mimeType:"video/webm;codecs=vp9",extension:"webm"},{mimeType:"video/webm;codecs=vp8",extension:"webm"}];for(const t of e)if(MediaRecorder.isTypeSupported(t.mimeType))return t;return console.warn("[WebCodecs] No preferred format supported, using default"),{mimeType:"video/webm",extension:"webm"}}async function _M(e,t,n){const i=document.createElement("canvas"),s=i.getContext("2d",{willReadFrequently:!1});if(!s)throw new Error("无法创建 Canvas 2D 上下文");const o=document.createElement("video");o.crossOrigin="anonymous",o.src=e[0],await new Promise((w,v)=>{o.onloadedmetadata=()=>w(),o.onerror=()=>v(new Error("无法加载第一个视频"))}),i.width=o.videoWidth,i.height=o.videoHeight;const r=DM(),a=new AudioContext,l=a.createMediaStreamDestination(),u=i.captureStream(30),d=new MediaStream([...u.getVideoTracks(),...l.stream.getAudioTracks()]),m=new MediaRecorder(d,{mimeType:r.mimeType,videoBitsPerSecond:8e6,audioBitsPerSecond:128e3}),f=[];m.ondataavailable=w=>{w.data.size>0&&f.push(w.data)},m.start(),t==null||t(0,"encoding","开始录制视频...");const h=(n==null?void 0:n.transitions)||[],g=(n==null?void 0:n.transitionDuration)??.5;for(let w=0;w<e.length;w++){t==null||t(w/e.length*100,"encoding",`正在处理视频 ${w+1}/${e.length}...`);const v=document.createElement("video");v.crossOrigin="anonymous",v.src=e[w],v.volume=1,await new Promise((E,I)=>{v.onloadedmetadata=()=>E(),v.onerror=()=>I(new Error(`无法加载视频 ${w+1}`))});let S=null;try{S=a.createMediaElementSource(v),S.connect(l)}catch(E){console.warn(`[WebCodecs] Failed to connect audio from video ${w+1}:`,E)}const k=w<h.length?h[w]:"cut",N=k==="dissolve"||k==="fade_to_black";await new Promise(E=>{v.play().catch(T=>{console.warn(`[WebCodecs] Failed to play video ${w+1}:`,T)});const I=()=>{if(v.ended){E();return}let T=1;if(N&&v.duration>0){const j=v.duration-v.currentTime;j<g&&(T=Math.max(0,j/g))}k==="fade_to_black"&&T<1&&(s.fillStyle="#000",s.fillRect(0,0,i.width,i.height)),s.globalAlpha=T,s.drawImage(v,0,0,i.width,i.height),s.globalAlpha=1,requestAnimationFrame(I)};v.onended=()=>E(),I()}),S&&S.disconnect(),v.pause(),v.src="",v.load()}t==null||t(100,"finalizing","正在生成最终视频..."),await new Promise(w=>{m.onstop=()=>w(),m.stop()}),await a.close();const b=r.mimeType.split(";")[0],x=new Blob(f,{type:b}),y=e.length*8;try{const{unifiedCacheService:w}=await Ce(async()=>{const{unifiedCacheService:N}=await import("./tool-windows-DWUG3k_L.js").then(E=>E.oo);return{unifiedCacheService:N}},__vite__mapDeps([0]),import.meta.url),v=`merged-video-${Date.now()}`,S=`/__aitu_cache__/video/${v}.mp4`,k=S;return await w.cacheMediaFromBlob(k,x,"video",{taskId:v}),{blob:x,url:S,duration:y,taskId:v}}catch(w){console.warn("[WebCodecs] Failed to cache video, using blob URL:",w);const v=URL.createObjectURL(x);return{blob:x,url:v,duration:y}}}class Wo{constructor(){TM()}static getInstance(){return Wo.instance||(Wo.instance=new Wo),Wo.instance}async mergeVideos(t,n,i){if(t.length===0)throw new Error("没有视频可合并");if(t.length===1){n==null||n(0,"downloading","下载视频...");const o=await(await fetch(t[0])).blob();return{blob:o,url:URL.createObjectURL(o),duration:0}}try{n==null||n(0,"downloading",`下载 ${t.length} 个视频...`);const s=[];for(let o=0;o<t.length;o++){n==null||n(o/t.length*100,"downloading",`下载视频 ${o+1}/${t.length}...`);const a=await(await fetch(t[o])).blob();s.push(a)}return await _M(t,n,i)}catch(s){throw console.error("[WebCodecs] Merge failed:",s),new Error(`视频合并失败: ${s instanceof Error?s.message:String(s)}`)}}static isSupported(){return typeof VideoDecoder<"u"&&typeof VideoEncoder<"u"}}const IM=Wo.getInstance();async function Jw(e,t,n){return IM.mergeVideos(e,t,n)}const xg="笔记",CM="新笔记",jM=24;function PM(e){var t;return((t=e.title)==null?void 0:t.trim())||CM}function AM(e){return(e.body||"").trim()}async function MM(){const{knowledgeBaseService:e}=await Ce(async()=>{const{knowledgeBaseService:s}=await import("./tool-windows-DWUG3k_L.js").then(o=>o.oI);return{knowledgeBaseService:s}},__vite__mapDeps([0]),import.meta.url);await e.initialize();const n=(await e.getAllDirectories()).find(s=>s.name===xg);if(n)return{knowledgeBaseService:e,directory:n};const i=await e.createDirectory(xg);return{knowledgeBaseService:e,directory:i}}function VM(e,t,n){const i=e.children.findIndex(s=>s.id===t);i<0||Se.setNode(e,{noteId:n},[i])}function UM(e){var n,i;if(Sn(e)){const s=(n=e.title)!=null&&n.trim()?`# ${e.title.trim()}`:"",o=((i=e.body)==null?void 0:i.trim())||"";return[s,o].filter(Boolean).join(`
|
|
43
|
+
|
|
44
|
+
`).trim()}const t=[];if("data"in e&&Array.isArray(e.data)){for(const s of e.data)if(al.isNode(s)){const o=al.string(s).trim();o&&t.push(o)}}if("text"in e){if(typeof e.text=="string"){const s=e.text.trim();s&&t.push(s)}else if(e.text&&typeof e.text=="object"&&al.isNode(e.text)){const s=al.string(e.text).trim();s&&t.push(s)}}if("textContent"in e&&typeof e.textContent=="string"){const s=e.textContent.trim();s&&t.push(s)}return t.join(`
|
|
45
|
+
`).trim()}function RM(e){return ee.isDrawElement(e)&&ee.isText(e)}function qM(e,t){return[...t].sort((n,i)=>{const s=It(e,[n],!1),o=It(e,[i],!1);return Math.abs(s.x-o.x)<=jM&&Math.abs(s.y-o.y)>.5?s.y-o.y:s.x-o.x})}async function Qw(e,t,n="zh"){if(!t)return null;if(t.noteId)return t.noteId;try{const{knowledgeBaseService:i,directory:s}=await MM(),o=await i.createNote(PM(t),s.id),r=AM(t);return r&&await i.updateNote(o.id,{content:r}),VM(e,t.id,o.id),o.id}catch(i){return console.error("Failed to create note for card:",i),pe.error(n==="zh"?"保存到知识库失败":"Failed to save to knowledge base"),null}}async function LM(e,t){const n=[...new Set(e.filter(Boolean))];if(n.length===0)return;const{knowledgeBaseService:i}=await Ce(async()=>{const{knowledgeBaseService:o}=await import("./tool-windows-DWUG3k_L.js").then(r=>r.oI);return{knowledgeBaseService:o}},__vite__mapDeps([0]),import.meta.url);await i.initialize();const s=n[0];await i.updateNote(s,{content:t});for(const o of n.slice(1))await i.deleteNote(o);return s}const ey=async(e,t,n="zh")=>{if(t){if(t.noteId){window.dispatchEvent(new CustomEvent("kb:open",{detail:{noteId:t.noteId}}));return}try{const i=await Qw(e,t,n);if(!i)return;window.dispatchEvent(new CustomEvent("kb:open",{detail:{noteId:i}}))}catch(i){console.error("Failed to create note for card:",i),pe.error(n==="zh"?"无法打开知识库笔记":"Failed to open knowledge base note")}}};function wg(e){return Wk(e).replace(/\u00a0/g," ").replace(/[ \t]+\n/g,`
|
|
46
|
+
`).replace(/\n{3,}/g,`
|
|
47
|
+
|
|
48
|
+
`).trim()}function Es(e){if(!e)return"";if(typeof e=="string")return e;if(Array.isArray(e))return e.map(i=>Es(i)).filter(Boolean).join(`
|
|
49
|
+
`);if(typeof e!="object")return"";const t=e,n=[];return typeof t.text=="string"&&n.push(t.text),Array.isArray(t.children)&&n.push(Es(t.children)),Array.isArray(t.data)&&n.push(Es(t.data)),n.filter(Boolean).join(`
|
|
50
|
+
`)}function OM(e){if(!e||typeof window>"u")return"";const t=window.getSelection();if(!t||t.rangeCount===0||t.isCollapsed)return"";const n=t.getRangeAt(0);return e.contains(n.commonAncestorContainer)?t.toString().trim():""}function zM(e,t){if(Sn(t))return[t.title,t.body].filter(Boolean).join(`
|
|
51
|
+
|
|
52
|
+
`);if(li.isMindElement(e,t))return Es(t.data);if(ee.isDrawElement(t)){const i=t,s=Es(i.text);if(s)return s;const o=Es(i.data);if(o)return o;if(typeof i.textContent=="string")return i.textContent}const n=t;return Es(n.text)||Es(n.data)}function BM(e,t){if(t.length===0)return{text:"",source:null,title:""};if(t.length===1&&Sn(t[0])){const o=t[0],r=wg(OM(Hk(o.id)));if(r)return{text:r,source:"selection",title:o.title||"卡片朗读",sourceId:`card:${o.id}:selection`,origin:{kind:"card",id:o.id}}}const n=t[0],i=t.length===1&&Sn(n)?n:null,s=wg(t.map(o=>zM(e,o)).filter(Boolean).join(`
|
|
53
|
+
|
|
54
|
+
`));return{text:s,source:s?"element":null,title:(i==null?void 0:i.title)||(t.length===1?"画布朗读":`已选 ${t.length} 个元素`),sourceId:t.length===1?`${t[0].type}:${t[0].id}`:`selection:${t.map(o=>o.id).sort().join("|")}`,origin:i?{kind:"card",id:i.id}:void 0}}function ty(e){return!e.text||!e.sourceId?null:l0({elementId:e.sourceId,title:e.title,content:e.text,origin:e.origin||{kind:"card",id:e.sourceId}})}function FM(e,t){const n=ty(t);if(!n)return[];if(!e.children||!t.origin||t.origin.kind!=="card")return[n];const i=Gk(e,e.children.filter(Sn));return i.length<=1?[n]:i.map(s=>{var o;return s.id===((o=t.origin)==null?void 0:o.id)?n:l0({elementId:`card:${s.id}`,title:s.title||"卡片朗读",content:[s.title,s.body].filter(Boolean).join(`
|
|
55
|
+
|
|
56
|
+
`),origin:{kind:"card",id:s.id}})}).filter(s=>!!s)}const GM=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oH),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.ImageEditor}))),HM=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oK),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.FrameSlideshow}))),WM=()=>{var dt,bt,L,P,Q,se;const e=Zt(),n=ut(e).filter(z=>!c0(z)),{openDialog:i}=On(),{language:s,t:o}=We(),[r,a]=p.useState(!1),l=p.useRef(r),[u,d]=p.useState(!1),[m,f]=p.useState(null),[h,g]=p.useState(!1),[b,x]=p.useState(""),[y,w]=p.useState(null),[v,S]=p.useState(!1),k=p.useRef(!1),[N,E]=p.useState(!1),[I,T]=p.useState(),[j,V]=p.useState({text:"",title:"",source:null}),[_,D]=p.useState(),[C,M]=p.useState(),U=p.useRef(null);kM();const F=$k(),$=F.mediaType==="reading"?F.activeReadingSourceId:void 0,A=!!j.sourceId&&!!$&&$.startsWith(j.sourceId),H=p.useMemo(()=>n.map(z=>z.id).sort().join("|"),[n]),ue=A?F.playing?s==="zh"?"暂停朗读":"Pause reading":s==="zh"?"继续朗读":"Resume reading":s==="zh"?"语音朗读":"Read aloud";p.useEffect(()=>{if(n.length===0||r){V(O=>O.text||O.source?{text:"",title:"",source:null}:O);return}const z=()=>{const O=BM(e,n);V(K=>K.text===O.text&&K.source===O.source&&K.title===O.title&&K.sourceId===O.sourceId?K:O)};return z(),document.addEventListener("selectionchange",z),()=>{document.removeEventListener("selectionchange",z)}},[e,H,r]);const te=n.length>0&&!ka(e),{viewport:oe,selection:me,children:_e}=e,{refs:Pe,floatingStyles:He}=cm({placement:"top",middleware:[um(12),u0({padding:16}),dm({fallbackPlacements:["bottom","right","left"]})]});let Z={fill:"red"};if(te&&!r){const z=n.some(Ee=>KM(e,Ee))&&!J.hasBeenTextEditing(e),O=n.some(Ee=>ZM(e,Ee)),K=n.length>0&&n.every(Ee=>ee.isDrawElement(Ee)&&ee.isText(Ee)),G=n.some(Ee=>ry(e,Ee))&&!J.hasBeenTextEditing(e),fe=n.some(Ee=>YM(e,Ee))&&!J.hasBeenTextEditing(e),ae=n.some(Ee=>Ci(Ee)),Y=n.some(Ee=>mm(Ee)),le=n.some(Ee=>Sn(Ee)),ge=n.length>1&&n.every(Ee=>Sn(Ee)||RM(Ee)),Ve=n.length>0&&!ae&&!Y&&!le&&n.some(Ee=>ee.isDrawElement(Ee)&&ee.isImage(Ee))&&!J.hasBeenTextEditing(e),Nt=n.length===1&&Ci(n[0])&&!J.hasBeenTextEditing(e),Xe=!ae&&!Y&&!le&&!J.hasBeenTextEditing(e),be=n[0],ze=ee.isDrawElement(be)&&ee.isImage(be)&&((dt=be.url)==null?void 0:dt.startsWith("data:image/svg+xml")),W=n.length===1&&!ae&&!Y&&ee.isDrawElement(n[0])&&ee.isImage(n[0])&&!ze&&!J.hasBeenTextEditing(e),B=W,re=W,xe=n.length>0&&!Y&&n.some(Ee=>ee.isDrawElement(Ee)&&ee.isImage(Ee)||Ci(Ee)||ks(Ee))&&!J.hasBeenTextEditing(e),ve=n.length>1&&!ge&&!ae&&!Y&&n.every(Ee=>ee.isDrawElement(Ee)&&ee.isImage(Ee)||ee.isDrawElement(Ee)&&lm([Ee])||ee.isDrawElement(Ee)&&ee.isShapeElement(Ee)&&!ee.isImage(Ee)||ee.isDrawElement(Ee)&&ee.isArrowLine(Ee)||ee.isDrawElement(Ee)&&ee.isVectorLine(Ee)||ee.isDrawElement(Ee)&&ee.isTable(Ee)||_t.isFreehand(Ee)||Rt.isPenPath(Ee)||li.isMindElement(e,Ee))&&!J.hasBeenTextEditing(e),Fe=n.filter(Ee=>Ci(Ee)).length>1&&!J.hasBeenTextEditing(e),Me=n.filter(Ee=>Rt.isPenPath(Ee)),et=Me.length>0&&!J.hasBeenTextEditing(e);let vt;if(Me.length>0){const Ee=Me[0].cornerRadius??0;vt=Me.every(ds=>(ds.cornerRadius??0)===Ee)?Ee:void 0}const he=n.filter(Ee=>_t.isFreehand(Ee)),je=(Me.length>0||he.length>0)&&!J.hasBeenTextEditing(e);let we;const Te=[...Me.map(Ee=>Ee.strokeWidth??2),...he.map(Ee=>Ee.strokeWidth??2)];if(Te.length>0){const Ee=Te[0];we=Te.every(ds=>ds===Ee)?Ee:void 0}const tt=n.length>0&&!Y&&!J.hasBeenTextEditing(e),Re=n.length>0&&n.every(Ee=>li.isMindElement(e,Ee)),Ye=n.length>1&&!Re&&!J.hasBeenTextEditing(e),mt=n.length>1&&!Re&&!J.hasBeenTextEditing(e),St=n.length>1&&!J.hasBeenTextEditing(e)&&n.every(Ee=>JM(e,Ee)),xt=n.length>0&&!J.hasBeenTextEditing(e)&&!!Zp(e,n),Jt=n.length===1&&Sn(n[0])&&!!n[0].noteId&&!J.hasBeenTextEditing(e),ot=n.length===1&&Sn(n[0])&&!n[0].noteId&&!J.hasBeenTextEditing(e),rt=ge&&!J.hasBeenTextEditing(e),wn=n.length===1&&Ri(n[0])&&!J.hasBeenTextEditing(e),zi=n.length===1&&ks(n[0])&&!J.hasBeenTextEditing(e),jr=typeof window<"u"&&"speechSynthesis"in window&&!J.hasBeenTextEditing(e)&&j.text.length>0;Z={...$M(e),hasFill:z,hasFontColor:O,hasFontSize:O,hasStroke:G,hasStrokeStyle:fe,hasStrokeWidth:je,strokeWidth:we,hasText:O,isTextOnly:K,hasAIImage:Xe,hasAIVideo:Ve,hasVideoFrame:Nt,hasSplitImage:B,hasImageEdit:re,hasDownloadable:xe,hasMergeable:ve,hasVideoMergeable:Fe,hasCornerRadius:et,cornerRadius:vt,hasSizeInput:tt,hasAlignment:Ye,hasDistribute:mt,hasBoolean:St,hasMindmapToPPT:xt,hasCardEdit:Jt,hasCardSave:ot,hasContentMerge:rt,hasFramePlay:wn,hasAudioPlayer:zi,hasTextToSpeech:jr}}const Ie=async(z,O)=>{if(!z)return;const K=z.title?`# ${z.title}
|
|
57
|
+
|
|
58
|
+
`:"",G=z.body||"",fe=`${K}${G}`.trim();try{console.info("[CardCopy] Copy text from card",{source:O,id:z.id}),await x0(fe),pe.success(s==="zh"?"已复制到剪贴板":"Copied to clipboard",2e3)}catch{pe.error(s==="zh"?"复制失败":"Copy failed",2e3)}},Qe=async()=>{const z=qM(e,n);if(z.length<2)return;const O=z[0],K=z.map((fe,ae)=>ae===0&&Sn(O)&&Sn(fe)?(fe.body||"").trim():UM(fe)).filter(Boolean).join(`
|
|
59
|
+
|
|
60
|
+
`).trim();if(!K){pe.warning(s==="zh"?"没有可合并的内容":"No content to merge");return}const G=z.flatMap(fe=>Sn(fe)&&fe.noteId?[fe.noteId]:[]);try{const fe=await LM(G,K),ae=z.slice(1).map(le=>e.children.findIndex(ge=>ge.id===le.id)).filter(le=>le>=0).sort((le,ge)=>ge-le);for(const le of ae)Se.removeNode(e,[le]);let Y;if(Sn(O)){const le=e.children.findIndex(Ve=>Ve.id===O.id);if(le<0)throw new Error(s==="zh"?"合并目标不存在":"Merge target missing");const ge={body:K};fe&&(ge.noteId=fe),Se.setNode(e,ge,[le]),Y=e.children[le]}else{const le=It(e,[O],!1),ge=e.children.findIndex(be=>be.id===O.id);if(ge<0)throw new Error(s==="zh"?"合并目标不存在":"Merge target missing");const Ve=Math.max(le.width,320),Nt=Math.max(le.height,180),Xe={type:"card",id:`card-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`,body:K,fillColor:"#FA8C16",points:[[le.x,le.y],[le.x+Ve,le.y+Nt]],children:[],...fe?{noteId:fe}:{}};Se.insertNode(e,Xe,[ge]),Se.removeNode(e,[ge+1]),Y=e.children[ge]}Is(e),Y&&ho(e,Y),pe.success(s==="zh"?`已合并 ${z.length} 个元素`:`Merged ${z.length} elements`)}catch(fe){console.error("[PopupToolbar] Failed to merge content:",fe),pe.error((fe==null?void 0:fe.message)||(s==="zh"?"合并内容失败":"Failed to merge content"))}};return p.useEffect(()=>{if(te){const z=n.length>0;if(!r&&z){let O,K;const G=ut(e),fe=It(e,G,!1),[ae,Y]=Ae.getPoints(fe),le=ll(e,oa(e,ae)),ge=ll(e,oa(e,Y));O=le[0]+(ge[0]-le[0])/2,K=le[1],Pe.setPositionReference({getBoundingClientRect(){return{width:1,height:1,x:O,y:K,top:K,left:O,right:O+1,bottom:K+1}}})}}},[oe,me,_e,r]),p.useEffect(()=>{if(te&&!r&&U.current){const z=U.current.getBoundingClientRect();D({top:z.top,left:z.left,width:z.width,height:z.height});const O=ut(e);if(O.length>0){const K=It(e,O,!1),[G,fe]=Ae.getPoints(K),ae=ll(e,oa(e,G)),Y=ll(e,oa(e,fe));M({top:ae[1],left:ae[0],right:Y[0],bottom:Y[1],width:Y[0]-ae[0],height:Y[1]-ae[1]})}}},[te,r,He,e]),p.useEffect(()=>{k.current=v},[v]),p.useEffect(()=>{if(n.length===0&&!r){const z=setTimeout(()=>{S(!1)},50);return()=>clearTimeout(z)}},[n.length,r]),p.useEffect(()=>{l.current=r},[r]),p.useEffect(()=>{const{pointerUp:z,pointerMove:O}=e;return e.pointerMove=K=>{(Ta(e)||Ea(e))&&!l.current&&a(!0),O(K)},e.pointerUp=K=>{l.current&&(Ta(e)||Ea(e))&&a(!1),z(K)},()=>{e.pointerUp=z,e.pointerMove=O}},[e]),c.jsxDEV(c.Fragment,{children:[te&&!r&&c.jsxDEV(Mt,{padding:1,className:ne("popup-toolbar",Yt),ref:z=>{Pe.setFloating(z),U.current=z},style:He,"data-testid":"popup-toolbar",children:c.jsxDEV(Kt.Row,{gap:1,children:[Z.hasFill&&c.jsxDEV(eM,{board:e,currentColor:Z.fill,title:o("toolbar.fillColor"),children:c.jsxDEV("label",{className:ne("fill-label","color-label",{"color-white":Z.fill&&Sa(Z.fill)&&o0(po(Z.fill)),"color-mixed":Z.fill===void 0,"color-gradient":Z.fill&&Zi(Z.fill)&&Z.fill.type==="gradient","color-image":Z.fill&&Zi(Z.fill)&&Z.fill.type==="image"}),style:Z.fill===void 0?void 0:{background:Sa(Z.fill)?Z.fill:Zi(Z.fill)?Z.fill.type==="gradient"&&Z.fill.gradient?Xk(Z.fill.gradient):Z.fill.type==="solid"&&Z.fill.solid?Z.fill.solid.color:Z.fill.type==="image"&&((bt=Z.fill.image)!=null&&bt.imageUrl)?`url(${Z.fill.image.imageUrl}) center/cover no-repeat`:void 0:void 0}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:782,columnNumber:17},void 0)},3,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:776,columnNumber:15},void 0),Z.hasStroke&&c.jsxDEV(zA,{board:e,currentColor:Z.strokeColor,title:o("toolbar.stroke"),hasStrokeStyle:Z.hasStrokeStyle||!1,hasStrokeWidth:Z.hasStrokeWidth||!1,currentStrokeWidth:Z.strokeWidth,children:c.jsxDEV("label",{className:ne("stroke-label","color-label",{"color-mixed":Z.strokeColor===void 0}),style:{borderColor:Z.strokeColor}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:822,columnNumber:17},void 0)},2,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:813,columnNumber:15},void 0),Z.hasFontColor&&c.jsxDEV(qA,{board:e,currentColor:(L=Z.marks)==null?void 0:L.color,title:o("toolbar.fontColor"),fontColorIcon:c.jsxDEV(Kk,{currentColor:(P=Z.marks)==null?void 0:P.color},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:837,columnNumber:19},void 0)},0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:831,columnNumber:15},void 0),Z.hasFontSize&&c.jsxDEV(OA,{board:e,currentFontSize:Z.fontSize,title:o("toolbar.fontSize")},1,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:842,columnNumber:15},void 0),Z.hasCornerRadius&&c.jsxDEV(tM,{board:e,currentRadius:Z.cornerRadius,title:o("toolbar.cornerRadius"),selectionRect:C},"corner-radius",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:852,columnNumber:15},void 0),Z.hasText&&c.jsxDEV(sM,{board:e,title:"Link"},4,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:861,columnNumber:15},void 0),Z.isTextOnly&&c.jsxDEV(pM,{board:e,language:s,title:s==="zh"?"提示词":"Prompts"},"prompt",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:868,columnNumber:15},void 0),Z.hasTextToSpeech&&c.jsxDEV(Ne,{className:"text-to-speech",type:"icon",icon:A&&F.playing?c.jsxDEV(Jk,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:882,columnNumber:21},void 0):c.jsxDEV(Qk,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:884,columnNumber:21},void 0),visible:!0,selected:A&&F.playing,title:ue,"aria-label":ue,"data-track":"toolbar_click_text_to_speech",onPointerUp:()=>{if(!j.text)return;const z=ty(j);if(!z)return;const O=FM(e,j);if(A){F.playing?F.pausePlayback():F.resumePlayback();return}Jp({source:z,queue:O.length>0?O:[z],queueTab:{queueId:Zk,queueName:Yk}})}},"text-to-speech",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:876,columnNumber:15},void 0),Z.hasText&&c.jsxDEV(Ne,{className:"property-settings",type:"icon",icon:c.jsxDEV(e1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:924,columnNumber:23},void 0),visible:!0,selected:v,title:o("propertyPanel.title"),"aria-label":o("propertyPanel.title"),"data-track":"toolbar_click_property_settings",onPointerUp:()=>{S(!v)}},"property-settings",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:920,columnNumber:15},void 0),Z.hasAlignment&&c.jsxDEV(hM,{board:e,title:o("toolbar.alignment")},"alignment",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:937,columnNumber:15},void 0),Z.hasDistribute&&c.jsxDEV(gM,{board:e,title:o("toolbar.distribute")},"distribute",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:945,columnNumber:15},void 0),Z.hasBoolean&&c.jsxDEV(bM,{board:e,title:o("toolbar.boolean")},"boolean",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:953,columnNumber:15},void 0),Z.hasMindmapToPPT&&c.jsxDEV(Ne,{className:"mindmap-to-ppt",type:"icon",icon:c.jsxDEV(d0,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:965,columnNumber:23},void 0),visible:!0,title:s==="zh"?"转换为PPT":"Convert to PPT","aria-label":s==="zh"?"转换为PPT":"Convert to PPT","data-track":"toolbar_click_mindmap_to_ppt",onPointerUp:async()=>{const z=Zp(e,n);if(!z)return;const O=pe.loading(s==="zh"?"正在转换为PPT...":"Converting to PPT...",0);try{const{generatePPTFromMindmap:K}=await Ce(async()=>{const{generatePPTFromMindmap:fe}=await import("./tool-windows-DWUG3k_L.js").then(ae=>ae.oq);return{generatePPTFromMindmap:fe}},__vite__mapDeps([0]),import.meta.url),G=await K(e,z);pe.close(O),G.success?pe.success(s==="zh"?`已生成 ${G.pageCount} 页PPT`:`Generated ${G.pageCount} PPT slides`):pe.error(G.error||(s==="zh"?"转换失败":"Conversion failed"))}catch(K){pe.close(O),pe.error(K.message||(s==="zh"?"转换失败":"Conversion failed"))}}},"mindmap-to-ppt",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:961,columnNumber:15},void 0),Z.hasCardEdit&&c.jsxDEV(Ne,{className:"card-edit",type:"icon",icon:c.jsxDEV(Qp,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1007,columnNumber:23},void 0),visible:!0,title:s==="zh"?"在知识库中编辑":"Edit in Knowledge Base","aria-label":s==="zh"?"在知识库中编辑":"Edit in Knowledge Base","data-track":"toolbar_click_card_edit",onPointerUp:async()=>{const z=n[0];z&&await ey(e,z,s)}},"card-edit",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1003,columnNumber:15},void 0),Z.hasCardSave&&c.jsxDEV(Ne,{className:"card-save",type:"icon",icon:c.jsxDEV(m0,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1024,columnNumber:23},void 0),visible:!0,title:s==="zh"?"保存到知识库":"Save to Knowledge Base","aria-label":s==="zh"?"保存到知识库":"Save to Knowledge Base","data-track":"toolbar_click_card_save",onPointerUp:async()=>{const z=n[0];if(!z)return;await Qw(e,z,s)&&pe.success(s==="zh"?"已保存到知识库":"Saved to knowledge base")}},"card-save",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1020,columnNumber:15},void 0),(Z.hasCardEdit||Z.hasCardSave)&&c.jsxDEV(Ne,{className:"card-copy",type:"icon",icon:c.jsxDEV(t1,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1045,columnNumber:23},void 0),visible:!0,title:s==="zh"?"复制文本内容":"Copy text content","aria-label":s==="zh"?"复制文本内容":"Copy text content","data-track":"toolbar_click_card_copy",onPointerDown:({event:z})=>{z.stopPropagation()},onPointerUp:async()=>{await Ie(n[0],"card-copy")}},"card-copy",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1041,columnNumber:15},void 0),Z.hasContentMerge&&c.jsxDEV(Ne,{className:"content-merge",type:"icon",icon:c.jsxDEV(ef,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1063,columnNumber:23},void 0),visible:!0,title:s==="zh"?"合并内容":"Merge Content","aria-label":s==="zh"?"合并内容":"Merge Content","data-track":"toolbar_click_content_merge",onPointerUp:()=>{Qe()}},"content-merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1059,columnNumber:15},void 0),Z.hasAIImage&&c.jsxDEV(Ne,{className:"ai-image",type:"icon",icon:c.jsxDEV(Ac,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1078,columnNumber:23},void 0),visible:!0,title:s==="zh"?"AI图片生成":"AI Image Generation","aria-label":s==="zh"?"AI图片生成":"AI Image Generation","data-track":"toolbar_click_ai_image",onPointerUp:()=>{i(fi.aiImageGeneration)}},5,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1074,columnNumber:15},void 0),Z.hasAIVideo&&c.jsxDEV(Ne,{className:"ai-video",type:"icon",icon:c.jsxDEV(Mc,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1093,columnNumber:23},void 0),visible:!0,title:s==="zh"?"AI视频生成":"AI Video Generation","aria-label":s==="zh"?"AI视频生成":"AI Video Generation","data-track":"toolbar_click_ai_video",onPointerUp:()=>{i(fi.aiVideoGeneration)}},6,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1089,columnNumber:15},void 0),Z.hasVideoFrame&&c.jsxDEV(Ne,{className:"video-frame",type:"icon",icon:c.jsxDEV(n1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1108,columnNumber:23},void 0),visible:!0,title:s==="zh"?"视频帧选择":"Video Frame Selection","aria-label":s==="zh"?"视频帧选择":"Video Frame Selection","data-track":"toolbar_click_video_frame",onPointerUp:()=>{const z=n.find(O=>Ci(O));z&&(f(z),d(!0))}},7,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1104,columnNumber:15},void 0),Z.hasSplitImage&&c.jsxDEV(Ne,{className:"split-image",type:"icon",icon:c.jsxDEV(i1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1128,columnNumber:23},void 0),visible:!0,title:s==="zh"?"智能拆图":"Smart Split","aria-label":s==="zh"?"智能拆图":"Smart Split","data-track":"toolbar_click_split_image",onPointerUp:async()=>{const z=n[0];if(ee.isImage(z)&&z.url){const O=pe.loading(s==="zh"?"正在分析图片...":"Analyzing image...",0);try{const K=It(e,[z],!1),G=await p0(e,z.url,{sourceRect:{x:K.x,y:K.y,width:K.width,height:K.height},scrollToResult:!0});pe.close(O),G.success?pe.success(s==="zh"?`成功拆分为 ${G.count} 张图片`:`Split into ${G.count} images`):pe.warning(G.error||(s==="zh"?"拆图失败":"Split failed"))}catch(K){pe.close(O),pe.error(K.message||(s==="zh"?"拆图失败":"Split failed"))}}}},"split-image",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1124,columnNumber:15},void 0),Z.hasImageEdit&&c.jsxDEV(Ne,{className:"image-edit",type:"icon",icon:c.jsxDEV(Qp,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1173,columnNumber:23},void 0),visible:!0,title:s==="zh"?"编辑图片":"Edit Image","aria-label":s==="zh"?"编辑图片":"Edit Image","data-track":"toolbar_click_image_edit",onPointerUp:()=>{const z=n[0];ee.isImage(z)&&z.url&&(x(z.url),w(z),g(!0))}},"image-edit",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1169,columnNumber:15},void 0),Z.hasDownloadable&&c.jsxDEV(Ne,{className:"download",type:"icon",icon:c.jsxDEV(r1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1193,columnNumber:23},void 0),visible:!0,title:s==="zh"?"下载":"Download","aria-label":s==="zh"?"下载":"Download","data-track":"toolbar_click_download",onPointerUp:async()=>{const z=[];for(const G of n)ee.isDrawElement(G)&&ee.isImage(G)&&G.url?z.push({url:G.url,type:"image"}):Ci(G)&&G.url?z.push({url:G.url,type:"video"}):ks(G)&&G.audioUrl&&z.push({url:G.audioUrl,type:"audio",filename:s1(G.title,"audio","mp3"),audioMetadata:{title:G.title,prompt:G.prompt,tags:G.tags,coverUrl:G.previewImageUrl,artist:G.modelVersion||"Aitu",album:"Aitu Generated"}});if(z.length===0){pe.warning(s==="zh"?"没有可下载的内容":"No downloadable content");return}const O=z.length>1?s==="zh"?"正在打包下载...":"Packaging download...":s==="zh"?"正在下载...":"Downloading...",K=pe.loading(O,0);try{const{unifiedCacheService:G}=await Ce(async()=>{const{unifiedCacheService:le}=await import("./tool-windows-DWUG3k_L.js").then(ge=>ge.oo);return{unifiedCacheService:le}},__vite__mapDeps([0]),import.meta.url),{downloadFromBlob:fe}=await Ce(async()=>{const{downloadFromBlob:le}=await import("./tool-windows-DWUG3k_L.js").then(ge=>ge.on);return{downloadFromBlob:le}},__vite__mapDeps([0]),import.meta.url),ae=[];for(const le of z)if(le.url.startsWith("blob:")){const ge=le.url.indexOf("#"),Ve=ge>0?le.url.substring(ge+1):null;if(Ve&&Ve.startsWith("merged-video-")){const Nt=await G.getCachedBlob(Ve);if(Nt){const Xe=Nt.type||"video/webm",be=Xe.startsWith("video/mp4")?"mp4":Xe.startsWith("video/webm")?"webm":"bin",ze=`merged-video-${Date.now()}.${be}`;fe(Nt,ze);continue}else console.warn("[Download] Cache not found for taskId:",Ve)}try{const Xe=await(await fetch(le.url)).blob(),be=Xe.type.startsWith("video/mp4")?"mp4":Xe.type.startsWith("video/webm")?"webm":Xe.type.startsWith("image/")?"png":"bin",ze=`${le.type}_${Date.now()}.${be}`;fe(Xe,ze)}catch(Nt){throw console.error("[Download] Failed to fetch blob URL:",Nt),new Error(`Failed to download ${le.type}: Blob URL inaccessible`)}}else ae.push(le);let Y;ae.length>0&&(Y=await o1(ae)),pe.close(K),Y!=null&&Y.openedCount&&Y.downloadedCount===0?pe.success(s==="zh"?Y.openedCount>1?`已打开 ${Y.openedCount} 个链接,请在新标签页下载`:"资源不支持直接下载,已打开链接":Y.openedCount>1?`Opened ${Y.openedCount} links for download`:"Opened link for download"):pe.success(z.length>1?s==="zh"?`已下载 ${z.length} 个文件`:`Downloaded ${z.length} files`:s==="zh"?"下载成功":"Download complete")}catch(G){pe.close(K),pe.error(G.message||(s==="zh"?"下载失败":"Download failed"))}}},"download",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1189,columnNumber:15},void 0),Z.hasMergeable&&c.jsxDEV(Ne,{className:"merge",type:"icon",icon:c.jsxDEV(ef,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1324,columnNumber:23},void 0),visible:!0,title:s==="zh"?"合并为图片":"Merge to Image","aria-label":s==="zh"?"合并为图片":"Merge to Image","data-track":"toolbar_click_merge",onPointerUp:async()=>{const z=a1("图片合并"),O=pe.loading(s==="zh"?"正在合并...":"Merging...",0);try{const K=n.filter(tt=>{const Re=tt.url||tt.imageUrl;if(!Re||Re.startsWith("/")||Re.startsWith("data:")||Re.startsWith("blob:"))return!1;try{return new URL(Re).origin!==location.origin}catch{return!1}});if(K.length>0){const tt=K.map(async mt=>{const St=mt.url||mt.imageUrl;try{const xt=new AbortController,Jt=setTimeout(()=>xt.abort(),3e3),ot=await fetch(St,{method:"HEAD",mode:"cors",signal:xt.signal});return clearTimeout(Jt),ot.ok}catch{return!1}});if((await Promise.all(tt)).some(mt=>!mt)){pe.close(O),pe.warning(s==="zh"?"部分外部图片无法访问,请先下载到本地后再合并":"Some external images are inaccessible. Please download them locally first."),z();return}}const G=It(e,n,!1),fe=[...n].sort((tt,Re)=>{const Ye=e.children.findIndex(St=>St.id===tt.id),mt=e.children.findIndex(St=>St.id===Re.id);return Ye-mt}),ae=await l1(e,{elements:fe,fillStyle:"transparent",inlineStyleClassNames:".extend,.emojis,.text",ratio:2});if(!ae)throw new Error(s==="zh"?"合并失败:无法生成图片":"Merge failed: Unable to generate image");const Y=new Image;await new Promise((tt,Re)=>{Y.onload=()=>tt(),Y.onerror=()=>Re(new Error("Failed to load merged image")),Y.src=ae});const le=document.createElement("canvas");le.width=Y.width,le.height=Y.height;const ge=le.getContext("2d");if(!ge)throw new Error("Failed to get canvas context");ge.drawImage(Y,0,0);const Ve=c1(le),{canvas:Nt,left:Xe,top:be,trimmedWidth:ze,trimmedHeight:W}=Ve,B=await new Promise((tt,Re)=>{Nt.toBlob(Ye=>{Ye?tt(Ye):Re(new Error("Failed to convert canvas to blob"))},"image/png")}),{unifiedCacheService:re}=await Ce(async()=>{const{unifiedCacheService:tt}=await import("./tool-windows-DWUG3k_L.js").then(Re=>Re.oo);return{unifiedCacheService:tt}},__vite__mapDeps([0]),import.meta.url),xe=`merged-image-${Date.now()}`,ve=`/__aitu_cache__/image/${xe}.png`,Be=ve;await re.cacheMediaFromBlob(Be,B,"image",{taskId:xe});const Fe=2,Me=G.x+Xe/Fe,et=G.y+be/Fe,vt=ze/Fe,he=W/Fe;Zu(e);const je=e.children.length,we={url:ve,width:vt,height:he};Qn.insertImage(e,we,[Me,et]);const Te=e.children[je];Te&&(Is(e),ho(e,Te)),pe.close(O),z(),pe.success(s==="zh"?`已将 ${n.length} 个元素合并为图片`:`Merged ${n.length} elements into image`)}catch(K){pe.close(O),z(),pe.error(K.message||(s==="zh"?"合并失败":"Merge failed"))}}},"merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1320,columnNumber:15},void 0),Z.hasVideoMergeable&&c.jsxDEV(Ne,{className:"video-merge",type:"icon",icon:c.jsxDEV(u1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1497,columnNumber:23},void 0),visible:!0,title:s==="zh"?"合成视频":"Merge Videos","aria-label":s==="zh"?"合成视频":"Merge Videos","data-track":"toolbar_click_video_merge",onPointerUp:async()=>{const z=[];for(const K of n)Ci(K)&&K.url&&z.push(K.url);if(z.length<2){pe.warning(s==="zh"?"请选择至少2个视频":"Please select at least 2 videos");return}const O=pe.loading(s==="zh"?"正在合成视频...":"Merging videos...",0);try{const K=await Jw(z,(G,fe)=>{const ae={downloading:s==="zh"?"下载视频...":"Downloading videos...",decoding:s==="zh"?"解码视频...":"Decoding videos...",encoding:s==="zh"?"编码视频...":"Encoding videos...",finalizing:s==="zh"?"生成文件中...":"Finalizing..."}});pe.close(O);try{const{quickInsert:G}=await Ce(async()=>{const{quickInsert:fe}=await Promise.resolve().then(()=>z3);return{quickInsert:fe}},void 0,import.meta.url);await G("video",K.url),pe.success(s==="zh"?`已合成并插入 ${z.length} 个视频`:`Merged and inserted ${z.length} videos`)}catch(G){console.error("[VideoMerge] Failed to insert video:",G);const fe=K.blob.type||"video/webm",ae=fe.startsWith("video/mp4")?"mp4":"webm",Y=new Blob([K.blob],{type:fe}),le=URL.createObjectURL(Y),ge=document.createElement("a");ge.href=le,ge.download=`merged-video-${Date.now()}.${ae}`,document.body.appendChild(ge),ge.click(),document.body.removeChild(ge),setTimeout(()=>URL.revokeObjectURL(le),1e3),pe.warning(s==="zh"?`视频已合成,但插入失败,已自动下载 (${ae.toUpperCase()})`:`Video merged but failed to insert, downloaded as ${ae.toUpperCase()}`)}}catch(K){pe.close(O),pe.error(K.message||(s==="zh"?"视频合成失败":"Video merge failed"))}}},"video-merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1493,columnNumber:15},void 0),c.jsxDEV(fM,{board:e,title:o("textEffect.layer")},"layer-control",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1597,columnNumber:13},void 0),Z.hasSizeInput&&c.jsxDEV(iM,{board:e},"size-input",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1603,columnNumber:15},void 0),Z.hasFramePlay&&c.jsxDEV(Ne,{className:"frame-play",type:"icon",icon:c.jsxDEV(id,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1614,columnNumber:23},void 0),visible:!0,title:s==="zh"?"播放幻灯片":"Play Slideshow","aria-label":s==="zh"?"播放幻灯片":"Play Slideshow","data-track":"toolbar_click_frame_play",onPointerUp:()=>{const z=n.find(O=>Ri(O));z&&(T(z.id),E(!0))}},"frame-play",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1610,columnNumber:15},void 0),Z.hasAudioPlayer&&c.jsxDEV(Ne,{className:"audio-player-play",type:"icon",icon:c.jsxDEV(id,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1633,columnNumber:23},void 0),visible:!0,title:s==="zh"?"在音乐播放器中播放":"Play in Music Player","aria-label":s==="zh"?"在音乐播放器中播放":"Play in Music Player","data-track":"toolbar_click_audio_player_play",onPointerUp:()=>{const z=n.find(O=>ks(O));!z||!ks(z)||Jp({source:{elementId:z.id,audioUrl:z.audioUrl,title:z.title,duration:z.duration,previewImageUrl:z.previewImageUrl,providerTaskId:z.providerTaskId,clipId:z.clipId,clipIds:z.clipIds},queue:sd(e.children),queueTab:{queueId:h0,queueName:f0}})}},"audio-player-play",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1629,columnNumber:15},void 0),c.jsxDEV(Ne,{className:"duplicate",type:"icon",icon:c.jsxDEV(f1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1668,columnNumber:21},void 0),visible:!0,title:o("general.duplicate"),"aria-label":o("general.duplicate"),"data-track":"toolbar_click_duplicate",onPointerUp:()=>{if(n.length===1&&Ri(n[0])){const O=d1(e,n[0],s);O&&m1(e,O)}else p1(e)}},8,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1664,columnNumber:13},void 0),c.jsxDEV(Ne,{className:"trash",type:"icon",icon:c.jsxDEV(Xl,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1697,columnNumber:21},void 0),visible:!0,title:o("general.delete"),"aria-label":o("general.delete"),"data-track":"toolbar_click_delete",onPointerUp:()=>{Zu(e)}},9,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1693,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:773,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:763,columnNumber:9},void 0),u&&m&&c.jsxDEV(EM,{visible:u,videoUrl:m.url||"",onClose:()=>{d(!1),f(null)},onConfirm:async(z,O)=>{try{m&&await SM(e,m,z,O)}catch(K){console.error("Failed to insert video frame:",K)}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1712,columnNumber:9},void 0),h&&b&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(GM,{visible:h,imageUrl:b,showOverwrite:!!y,onClose:()=>{g(!1),x(""),w(null)},onOverwrite:async z=>{if(y)try{const{unifiedCacheService:O}=await Ce(async()=>{const{unifiedCacheService:ge}=await import("./tool-windows-DWUG3k_L.js").then(Ve=>Ve.oo);return{unifiedCacheService:ge}},__vite__mapDeps([0]),import.meta.url),K=`edited-image-${Date.now()}`,G=`/__aitu_cache__/image/${K}.png`,ae=await(await fetch(z)).blob();await O.cacheMediaFromBlob(G,ae,"image",{taskId:K});const Y=new Image;await new Promise((ge,Ve)=>{Y.onload=()=>ge(),Y.onerror=()=>Ve(new Error("Failed to load edited image")),Y.src=z});const le=e.children.findIndex(ge=>ge.id===y.id);if(le>=0){const ge=e.children[le],{newPoints:Ve}=await g0({url:ge.url,width:ge.width,height:ge.height,points:ge.points||[[0,0],[0,0]]},Y.naturalWidth,Y.naturalHeight);Se.setNode(e,{url:G,width:Y.naturalWidth,height:Y.naturalHeight,points:Ve},[le])}}catch(O){console.error("Failed to update image:",O),pe.error(s==="zh"?"更新失败":"Update failed")}},onInsert:async z=>{try{const{unifiedCacheService:O}=await Ce(async()=>{const{unifiedCacheService:be}=await import("./tool-windows-DWUG3k_L.js").then(ze=>ze.oo);return{unifiedCacheService:be}},__vite__mapDeps([0]),import.meta.url),K=`edited-image-${Date.now()}`,G=`/__aitu_cache__/image/${K}.png`,ae=await(await fetch(z)).blob();await O.cacheMediaFromBlob(G,ae,"image",{taskId:K});const Y=new Image;await new Promise((be,ze)=>{Y.onload=()=>be(),Y.onerror=()=>ze(new Error("Failed to load edited image")),Y.src=z});const le=wr(e),ge=y?y.points[1][0]-y.points[0][0]+20:0,Ve=y?y.points[0][0]:le?le[0]+100:100,Nt=y?y.points[0][1]:le?le[1]+100:100,Xe=[Ve+ge,Nt];await lr(e,G,Xe,!1,{width:Y.naturalWidth,height:Y.naturalHeight},!1,!0)}catch(O){console.error("Failed to insert image:",O),pe.error(s==="zh"?"插入失败":"Insert failed")}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1735,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1734,columnNumber:9},void 0),Z.hasText&&c.jsxDEV(yM,{board:e,isOpen:v,onClose:()=>S(!1),currentFontSize:Z.fontSize,currentFontFamily:(Q=Z.marks)==null?void 0:Q["font-family"],currentColor:(se=Z.marks)==null?void 0:se.color,toolbarRect:_,selectionRect:C},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1845,columnNumber:9},void 0),N&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(HM,{visible:N,board:e,onClose:()=>{E(!1),T(void 0)},initialFrameId:I},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1860,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1859,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:761,columnNumber:5},void 0)},ny=(e,t)=>{const n=w0(t);return{fill:Vc(t),strokeColor:b1(e,t),fontSize:n["font-size"],marks:n}},iy=(e,t)=>{const n=w0(t);return{fill:Vc(t),strokeColor:x1(e,t),fontSize:n["font-size"],marks:n}},$M=e=>{const t=ut(e);if(t.length===0)return{fill:void 0,strokeColor:void 0};if(t.length===1){const n=t[0];return Sn(n)?{fill:n.fillColor,strokeColor:void 0}:li.isMindElement(e,n)?ny(e,n):_t.isFreehand(n)?sy(e,n):Rt.isPenPath(n)?oy(e,n):iy(e,n)}return XM(e,t)},XM=(e,t)=>{const n=t.map(a=>Sn(a)?{fill:a.fillColor,strokeColor:void 0}:li.isMindElement(e,a)?ny(e,a):_t.isFreehand(a)?sy(e,a):Rt.isPenPath(a)?oy(e,a):ee.isDrawElement(a)?iy(e,a):{fill:void 0,strokeColor:void 0}),i=n.map(a=>a.fill),s=n.map(a=>a.strokeColor),o=i.every(a=>a===i[0]),r=s.every(a=>a===s[0]);return{fill:o?i[0]:void 0,strokeColor:r?s[0]:void 0}},sy=(e,t)=>({fill:Vc(t),strokeColor:y0(e,t)}),oy=(e,t)=>({fill:Vc(t),strokeColor:t.strokeColor,cornerRadius:t.cornerRadius}),KM=(e,t)=>Sn(t)||li.isMindElement(e,t)||h1(e,t)?!0:_t.isFreehand(t)?g1(t.points):Rt.isPenPath(t)?t.closed:ee.isDrawElement(t)?ee.isShapeElement(t)&&!ee.isImage(t)&&!ee.isText(t)&&b0(t):!1,ry=(e,t)=>li.isMindElement(e,t)||_t.isFreehand(t)||Rt.isPenPath(t)?!0:ee.isDrawElement(t)?ee.isShapeElement(t)&&!ee.isImage(t)&&!ee.isText(t)||ee.isArrowLine(t)||ee.isVectorLine(t)||ee.isTable(t):!1,YM=(e,t)=>ry(e,t),ZM=(e,t)=>li.isMindElement(e,t)?!0:ee.isDrawElement(t)?lm([t]):!1,JM=(e,t)=>{if(Rt.isPenPath(t))return t.closed;if(_t.isFreehand(t)){const n=t.points;if(!n||n.length<3)return!1;const i=n[0],s=n[n.length-1];return Math.hypot(s[0]-i[0],s[1]-i[1])<=10}return ee.isDrawElement(t)?ee.isImage(t)||ee.isText(t)||ee.isArrowLine(t)||ee.isVectorLine(t)?!1:ee.isShapeElement(t)&&b0(t):(li.isMindElement(e,t),!1)},tu=an.createContext({}),yg=(e="",t=!1)=>`menu-item menu-item-base ${e} ${t?"menu-item--active":""}`.trim(),QM=(e,t)=>{const n=p.useContext(tu);return w1(e,i=>{var o;const s=new CustomEvent(pm.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});t==null||t(s),s.defaultPrevented||(o=n.onSelect)==null||o.call(n,s)})},e2=({icon:e,shortcut:t,children:n})=>c.jsxDEV(c.Fragment,{children:[e&&c.jsxDEV("div",{className:"menu-item__icon",children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item-content.tsx",lineNumber:14,columnNumber:16},void 0),c.jsxDEV("div",{className:"menu-item__text",children:n},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item-content.tsx",lineNumber:15,columnNumber:7},void 0),t&&c.jsxDEV("div",{className:"menu-item__shortcut",children:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item-content.tsx",lineNumber:17,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item-content.tsx",lineNumber:13,columnNumber:5},void 0),gt=({icon:e,onSelect:t,children:n,shortcut:i,className:s,selected:o,submenu:r,...a})=>{const[l,u]=p.useState(!1),d=p.useRef(),m=QM(a.onClick,t),f=c.jsxDEV(e2,{icon:e,shortcut:i,children:n},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:32,columnNumber:5},void 0),h=()=>{d.current&&window.clearTimeout(d.current),u(!0)},g=()=>{d.current=window.setTimeout(()=>{u(!1)},100)};return r?c.jsxDEV(Ft,{open:l,onOpenChange:u,placement:"right-start",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("button",{...a,type:"button",className:yg(s,o||l),title:a.title??a["aria-label"],onClick:m,onMouseEnter:h,onMouseLeave:g,role:"menuitem","aria-haspopup":"true","aria-expanded":l,children:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:58,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:57,columnNumber:9},void 0),c.jsxDEV(Ht,{onMouseEnter:h,onMouseLeave:g,children:r},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:73,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:52,columnNumber:7},void 0):c.jsxDEV("button",{...a,onClick:m,type:"button",className:yg(s,o),title:a.title??a["aria-label"],role:"menuitem",children:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:81,columnNumber:5},void 0)};gt.displayName="MenuItem";const ay=({children:e})=>c.jsxDEV("div",{style:{display:"inline-flex",marginLeft:"auto",padding:"2px 4px",background:"var(--color-promo)",color:"var(--color-surface-lowest)",borderRadius:6,fontSize:9,fontFamily:"Cascadia, monospace"},children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:101,columnNumber:5},void 0);ay.displayName="MenuItemBadge";gt.Badge=ay;const Li=({children:e,className:t="",onSelect:n,style:i,onClose:s})=>{const o=ne(`menu ${t}`).trim(),r=p.useRef(null),a=p.useCallback(()=>r.current?Array.from(r.current.querySelectorAll("button.menu-item:not([disabled])")):[],[]),l=p.useCallback(u=>{var f,h,g,b;const d=a();if(d.length===0)return;const m=d.findIndex(x=>x===document.activeElement);switch(u.key){case"ArrowDown":{u.preventDefault();const x=m<d.length-1?m+1:0;(f=d[x])==null||f.focus();break}case"ArrowUp":{u.preventDefault();const x=m>0?m-1:d.length-1;(h=d[x])==null||h.focus();break}case"Home":{u.preventDefault(),(g=d[0])==null||g.focus();break}case"End":{u.preventDefault(),(b=d[d.length-1])==null||b.focus();break}case"Escape":{u.preventDefault(),s==null||s();break}case"Enter":case" ":{m>=0&&d[m]&&(u.preventDefault(),d[m].click());break}}},[a,s]);return p.useEffect(()=>{const u=a();u.length>0&&requestAnimationFrame(()=>{var d;(d=u[0])==null||d.focus()})},[a]),c.jsxDEV(tu.Provider,{value:{onSelect:n},children:c.jsxDEV("div",{className:o,style:i,"data-testid":"menu",onKeyDown:l,ref:r,role:"menu",children:c.jsxDEV(Mt,{className:"menu-container",padding:2,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu.tsx",lineNumber:113,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu.tsx",lineNumber:104,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu.tsx",lineNumber:103,columnNumber:5},void 0)};Li.displayName="Menu";const ly=()=>{const e=Zt(),{t}=We();return c.jsxDEV(gt,{"data-testid":"save-button","data-track":"toolbar_click_menu_save",onSelect:()=>{N0(e)},icon:c.jsxDEV(m0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:48,columnNumber:13},void 0),"aria-label":t("menu.saveFile"),shortcut:"Cmd+S",children:t("menu.saveFile")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:42,columnNumber:5},void 0)};ly.displayName="SaveToFile";const cy=()=>{const e=Zt(),t=Rw(),{t:n}=We(),i=(s,o,r)=>{e.children=s,e.viewport=o||{zoom:1},e.theme={themeColorMode:Zs.default},t.update(e.children,{board:e,parent:e,parentG:J.getElementHost(e)}),Ue.fitViewport(e)};return c.jsxDEV(gt,{"data-testid":"open-button","data-track":"toolbar_click_menu_open",onSelect:()=>{N1(e).then(s=>{s&&i(s.elements,s.viewport)})},icon:c.jsxDEV(y1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:87,columnNumber:13},void 0),"aria-label":n("menu.open"),children:n("menu.open")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:76,columnNumber:5},void 0)};cy.displayName="OpenFile";const uy=()=>{const e=Zt(),t=p.useContext(tu),{t:n}=We();return c.jsxDEV(gt,{icon:c.jsxDEV(v1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:100,columnNumber:13},void 0),"data-testid":"image-export-button","data-track":"toolbar_click_menu_export",onSelect:()=>{Il(e,!0)},submenu:c.jsxDEV(Li,{onSelect:()=>{var s;const i=new CustomEvent(pm.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});(s=t.onSelect)==null||s.call(t,i)},children:[c.jsxDEV(gt,{"data-track":"toolbar_click_menu_export_png",onSelect:()=>{Il(e,!0)},"aria-label":n("menu.exportImage.png"),children:n("menu.exportImage.png")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:114,columnNumber:11},void 0),c.jsxDEV(gt,{"data-track":"toolbar_click_menu_export_jpg",onSelect:()=>{Il(e,!1)},"aria-label":n("menu.exportImage.jpg"),children:n("menu.exportImage.jpg")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:123,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:107,columnNumber:9},void 0),shortcut:"Cmd+Shift+E","aria-label":n("menu.exportImage"),children:n("menu.exportImage")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:99,columnNumber:5},void 0)};uy.displayName="SaveAsImage";const dy=()=>{const{appState:e,setAppState:t}=On(),{t:n}=We();return c.jsxDEV(gt,{icon:c.jsxDEV(Xl,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:148,columnNumber:13},void 0),"data-testid":"reset-button","data-track":"toolbar_click_menu_clean",onSelect:()=>{t({...e,openCleanConfirm:!0})},shortcut:"Cmd+Backspace","aria-label":n("menu.cleanBoard"),children:n("menu.cleanBoard")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:147,columnNumber:5},void 0)};dy.displayName="CleanBoard";const my=({onOpenBackupRestore:e})=>{const{t}=We();return c.jsxDEV(gt,{icon:c.jsxDEV(E1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:174,columnNumber:13},void 0),"data-track":"toolbar_click_menu_backup",onSelect:e,"aria-label":t("menu.backupRestore"),children:t("menu.backupRestore")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:173,columnNumber:5},void 0)};my.displayName="BackupRestore";const py=({onOpenCloudSync:e})=>{const{t}=We();return c.jsxDEV(gt,{icon:c.jsxDEV(T1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:193,columnNumber:13},void 0),"data-track":"toolbar_click_menu_cloud_sync",onSelect:e,"aria-label":t("menu.cloudSync"),children:t("menu.cloudSync")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:192,columnNumber:5},void 0)};py.displayName="CloudSync";const fy=()=>{const{t:e}=We();return c.jsxDEV(gt,{icon:c.jsxDEV(S1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:208,columnNumber:13},void 0),"data-track":"toolbar_click_menu_debug",onSelect:()=>{window.location.href="./sw-debug.html"},"aria-label":e("menu.debugPanel"),children:e("menu.debugPanel")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:207,columnNumber:5},void 0)};fy.displayName="DebugPanel";const hy=()=>{const{appState:e,setAppState:t}=On(),{t:n}=We();return c.jsxDEV(gt,{icon:c.jsxDEV(D1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:226,columnNumber:13},void 0),"data-track":"toolbar_click_menu_settings",onSelect:()=>{t({...e,openSettings:!0})},"aria-label":n("menu.settings"),children:n("menu.settings")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:225,columnNumber:5},void 0)};hy.displayName="Settings";const gy=()=>{const{appState:e,setAppState:t}=On(),{t:n}=We();return c.jsxDEV(gt,{icon:c.jsxDEV(_1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:264,columnNumber:13},void 0),"data-track":"toolbar_click_menu_commands",onSelect:()=>{t({...e,openCommandPalette:!0})},shortcut:"Cmd+K","aria-label":n("menu.commandPalette"),children:n("menu.commandPalette")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:263,columnNumber:5},void 0)};gy.displayName="QuickCommands";const by=()=>{const{t:e}=We();return c.jsxDEV(gt,{icon:c.jsxDEV(I1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:285,columnNumber:13},void 0),"data-track":"toolbar_click_menu_manual",onSelect:()=>{window.open("./user-manual/index.html","_blank")},"aria-label":e("menu.userManual"),children:e("menu.userManual")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:284,columnNumber:5},void 0)};by.displayName="UserManual";const xy=()=>{var n;const{t:e}=We(),t=((n=document.querySelector('meta[name="app-version"]'))==null?void 0:n.getAttribute("content"))||"0.0.0";return c.jsxDEV(gt,{"data-track":"toolbar_click_menu_version",onSelect:()=>{},"aria-label":e("menu.version"),children:c.jsxDEV("span",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[c.jsxDEV("span",{style:{color:"#666"},children:[e("menu.version"),":",t]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:310,columnNumber:9},void 0),c.jsxDEV("span",{style:{display:"flex",alignItems:"center",gap:"12px"},children:[c.jsxDEV("span",{style:{color:"#1890ff",cursor:"pointer"},"data-track":"toolbar_click_menu_changelog",onClick:i=>{i.stopPropagation(),window.open("./versions.html","_blank")},children:e("menu.changelog")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:312,columnNumber:11},void 0),c.jsxDEV("span",{style:{color:"#1890ff",cursor:"pointer"},"data-track":"toolbar_click_menu_more_versions",onClick:i=>{i.stopPropagation(),window.open("https://release.opentu.ai/","_blank")},children:e("menu.more")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:322,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:311,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:309,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:304,columnNumber:5},void 0)};xy.displayName="VersionInfo";async function t2(e){if(!e||typeof e!="string")return!1;if(e.startsWith("blob:")||e.startsWith("data:"))return!0;try{return(await fetch(e,{method:"HEAD",mode:"cors",cache:"no-cache"})).ok}catch{try{const t=await fetch(e,{method:"GET",mode:"no-cors",cache:"no-cache"});return t.type==="opaque"||t.ok}catch{return!1}}}const wy=()=>{const e=Zt(),{t}=We(),[n,i]=p.useState(!1),s=p.useCallback(async()=>{if(n)return;i(!0);const o=pe.loading(t("menu.cleanInvalidLinks.scanning"),0);try{const r=[];for(let u=0;u<e.children.length;u++){const d=e.children[u],m=d.url;if(!m||typeof m!="string")continue;const f=ee.isDrawElement(d)&&ee.isImage(d),h=Ci(d);(f||h)&&r.push({element:d,index:u,url:m})}const a=[];if(await Promise.all(r.map(async({element:u,index:d,url:m})=>{await t2(m)||a.push({element:u,index:d})})),o.then(u=>{var d;return(d=u==null?void 0:u.close)==null?void 0:d.call(u)}),a.length===0){pe.success(t("menu.cleanInvalidLinks.noInvalid")),i(!1);return}a.sort((u,d)=>d.index-u.index);for(const{index:u}of a)Se.removeNode(e,[u]);const l=t("menu.cleanInvalidLinks.success").replace("{count}",String(a.length));pe.success(l)}catch(r){o.then(a=>{var l;return(l=a==null?void 0:a.close)==null?void 0:l.call(a)}),pe.error(t("menu.cleanInvalidLinks.error")),console.error("[CleanInvalidLinks] Error:",r)}finally{i(!1)}},[e,t,n]);return c.jsxDEV(gt,{icon:c.jsxDEV(k1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:461,columnNumber:13},void 0),"data-track":"toolbar_click_menu_clean_invalid_links",onSelect:s,"aria-label":t("menu.cleanInvalidLinks"),disabled:n,children:t("menu.cleanInvalidLinks")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-menu-items.tsx",lineNumber:460,columnNumber:5},void 0)};wy.displayName="CleanInvalidLinks";const yy=()=>{const{language:e,setLanguage:t,t:n}=We(),i=p.useContext(tu);return c.jsxDEV(gt,{icon:c.jsxDEV(v0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/language-switcher-menu.tsx",lineNumber:15,columnNumber:13},void 0),"data-testid":"language-switcher-button",onSelect:()=>{},submenu:c.jsxDEV(Li,{onSelect:()=>{var o;const s=new CustomEvent(pm.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});(o=i.onSelect)==null||o.call(i,s)},children:[c.jsxDEV(gt,{onSelect:()=>{t("zh")},"aria-label":n("language.chinese"),selected:e==="zh",children:n("language.chinese")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/language-switcher-menu.tsx",lineNumber:28,columnNumber:11},void 0),c.jsxDEV(gt,{onSelect:()=>{t("en")},"aria-label":n("language.english"),selected:e==="en",children:n("language.english")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/language-switcher-menu.tsx",lineNumber:37,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/language-switcher-menu.tsx",lineNumber:21,columnNumber:9},void 0),"aria-label":n("language.switcher"),children:n("language.switcher")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/language-switcher-menu.tsx",lineNumber:14,columnNumber:5},void 0)};yy.displayName="LanguageSwitcherMenu";const Ra=()=>c.jsxDEV("div",{style:{height:"1px",backgroundColor:"var(--color-gray-10)",margin:".5rem 0"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-separator.tsx",lineNumber:2,columnNumber:3},void 0);Ra.displayName="MenuSeparator";const Gd=({children:e,buttonId:t,isVisible:n,visibleIndex:i=-1,disabled:s=!1})=>{const{t:o}=We(),{hideButton:r,showButton:a,resetToDefault:l,visibleButtons:u,reorderButton:d}=Uc(),[m,f]=p.useState(!1),[h,g]=p.useState({x:0,y:0}),b=p.useRef(null),x=p.useRef(null);p.useEffect(()=>{const V=x.current;if(!V)return;const _=D=>{D.button===2&&D.stopPropagation()};return V.addEventListener("pointerdown",_,!0),()=>{V.removeEventListener("pointerdown",_,!0)}},[]);const y=p.useCallback(V=>{s||(V.preventDefault(),V.stopPropagation(),g({x:V.clientX,y:V.clientY}),f(!0))},[s]),w=p.useCallback(()=>{f(!1)},[]),v=p.useCallback(()=>{n?r(t):a(t),w()},[n,t,r,a,w]),S=p.useCallback(()=>{i>0&&d(i,i-1,!0),w()},[i,d,w]),k=p.useCallback(()=>{i>=0&&i<u.length-1&&d(i,i+1,!0),w()},[i,u.length,d,w]),N=p.useCallback(()=>{i>0&&d(i,0,!0),w()},[i,d,w]),E=p.useCallback(()=>{i>=0&&i<u.length-1&&d(i,u.length-1,!0),w()},[i,u.length,d,w]),I=p.useCallback(()=>{l(),w()},[l,w]);p.useEffect(()=>{if(!m)return;const V=D=>{b.current&&!b.current.contains(D.target)&&w()},_=D=>{D.key==="Escape"&&w()};return document.addEventListener("mousedown",V),document.addEventListener("keydown",_),()=>{document.removeEventListener("mousedown",V),document.removeEventListener("keydown",_)}},[m,w]),p.useEffect(()=>{if(!m||!b.current)return;const _=b.current.getBoundingClientRect(),D=window.innerWidth,C=window.innerHeight;let M=h.x,U=h.y;h.x+_.width>D&&(M=D-_.width-8),h.y+_.height>C&&(U=C-_.height-8),(M!==h.x||U!==h.y)&&g({x:M,y:U})},[m,h]);const T=n&&i>0,j=n&&i>=0&&i<u.length-1;return c.jsxDEV(c.Fragment,{children:[c.jsxDEV("div",{ref:x,onContextMenu:y,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:192,columnNumber:7},void 0),m&&cs.createPortal(c.jsxDEV("div",{ref:b,className:"toolbar-context-menu",style:{position:"fixed",left:h.x,top:h.y,zIndex:Tn.DROPDOWN_PORTAL},children:c.jsxDEV(Li,{children:[n&&c.jsxDEV(c.Fragment,{children:[c.jsxDEV(gt,{onSelect:S,disabled:!T,children:o("toolbar.moveUp")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:208,columnNumber:19},void 0),c.jsxDEV(gt,{onSelect:k,disabled:!j,children:o("toolbar.moveDown")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:211,columnNumber:19},void 0),c.jsxDEV(gt,{onSelect:N,disabled:!T,children:o("toolbar.moveToTop")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:214,columnNumber:19},void 0),c.jsxDEV(gt,{onSelect:E,disabled:!j,children:o("toolbar.moveToBottom")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:217,columnNumber:19},void 0),c.jsxDEV(Ra,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:220,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:207,columnNumber:17},void 0),c.jsxDEV(gt,{onSelect:v,children:o(n?"toolbar.rightClickToHide":"toolbar.doubleClickToShow")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:223,columnNumber:15},void 0),c.jsxDEV(Ra,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:226,columnNumber:15},void 0),c.jsxDEV(gt,{onSelect:I,children:o("toolbar.resetToDefault")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:227,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:205,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:195,columnNumber:11},void 0),document.body)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:191,columnNumber:5},void 0)},n2=({embedded:e=!1,iconMode:t=!1,onOpenBackupRestore:n,onOpenCloudSync:i})=>{const s=Zt(),{t:o}=We(),{isButtonVisible:r,visibleButtons:a}=Uc(),l=J.getBoardContainer(s),[u,d]=p.useState(!1),m=s.history.undos.length<=0,f=s.history.redos.length<=0,h=r("undo"),g=r("redo"),b=a.findIndex(w=>w.id==="undo"),x=a.findIndex(w=>w.id==="redo"),y=c.jsxDEV(Kt.Row,{gap:1,children:[c.jsxDEV(Ft,{sideOffset:12,open:u,onOpenChange:w=>{d(w)},placement:e?"right-start":"bottom-start",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{type:"icon",visible:!0,selected:u,icon:c.jsxDEV(v0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:71,columnNumber:21},void 0),tooltip:u?void 0:o("general.menu"),tooltipPlacement:e?"right":"bottom","aria-label":o("general.menu"),"data-track":"toolbar_click_menu",onPointerDown:()=>{d(!u)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:67,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:66,columnNumber:11},void 0),c.jsxDEV(Ht,{container:l,style:{zIndex:Tn.POPOVER_APP},children:c.jsxDEV(Li,{onSelect:()=>{d(!1)},onClose:()=>{d(!1)},children:[c.jsxDEV(cy,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:90,columnNumber:15},void 0),c.jsxDEV(ly,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:91,columnNumber:15},void 0),c.jsxDEV(uy,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:92,columnNumber:15},void 0),c.jsxDEV(dy,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:93,columnNumber:15},void 0),c.jsxDEV(wy,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:94,columnNumber:15},void 0),c.jsxDEV(Ra,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:95,columnNumber:15},void 0),c.jsxDEV(yy,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:96,columnNumber:15},void 0),c.jsxDEV(my,{onOpenBackupRestore:()=>{d(!1),n==null||n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:97,columnNumber:15},void 0),c.jsxDEV(fy,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:101,columnNumber:15},void 0),c.jsxDEV(py,{onOpenCloudSync:()=>{d(!1),i==null||i()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:102,columnNumber:15},void 0),c.jsxDEV(hy,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:106,columnNumber:15},void 0),c.jsxDEV(Ra,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:107,columnNumber:15},void 0),c.jsxDEV(gy,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:108,columnNumber:15},void 0),c.jsxDEV(by,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:109,columnNumber:15},void 0),c.jsxDEV(xy,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:110,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:82,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:81,columnNumber:11},void 0)]},0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:57,columnNumber:9},void 0),h&&c.jsxDEV(Gd,{buttonId:"undo",isVisible:!0,visibleIndex:b,children:c.jsxDEV(Ne,{type:"icon",icon:c.jsxDEV(k0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:123,columnNumber:21},void 0),visible:!0,tooltip:o("general.undo"),tooltipPlacement:e?"right":"bottom","aria-label":o("general.undo"),"data-track":"toolbar_click_undo",onPointerUp:()=>{s.undo()},disabled:m},1,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:120,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:115,columnNumber:11},void 0),g&&c.jsxDEV(Gd,{buttonId:"redo",isVisible:!0,visibleIndex:x,children:c.jsxDEV(Ne,{type:"icon",icon:c.jsxDEV(E0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:145,columnNumber:21},void 0),visible:!0,tooltip:o("general.redo"),tooltipPlacement:e?"right":"bottom","aria-label":o("general.redo"),"data-track":"toolbar_click_redo",onPointerUp:()=>{s.redo()},disabled:f},2,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:142,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:137,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:56,columnNumber:7},void 0);return e?c.jsxDEV("div",{className:ne("app-toolbar",{"app-toolbar--embedded":e,"app-toolbar--icon-only":t}),children:[y,c.jsxDEV(Ne,{type:"icon",icon:c.jsxDEV(C1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:169,columnNumber:17},void 0),visible:!0,tooltip:o("menu.github"),tooltipPlacement:"right","aria-label":o("menu.github"),"data-track":"toolbar_click_github",onPointerUp:()=>{window.open("https://github.com/ljquan/aitu","_blank")}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:167,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:162,columnNumber:7},void 0):c.jsxDEV(Mt,{padding:1,className:ne("app-toolbar",Yt,{"app-toolbar--embedded":e,"app-toolbar--icon-only":t}),children:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:184,columnNumber:5},void 0)};function i2(e,t){return!e||e===_s.solid?null:e===_s.dashed?`${t*3},${t*2}`:e===_s.dotted?`${t},${t*2}`:null}function $s(e){return e!==void 0&&!isNaN(e[0])&&!isNaN(e[1])&&isFinite(e[0])&&isFinite(e[1])}class s2 extends S0{constructor(t){super(t)}canDraw(t){return t.anchors&&t.anchors.length>0}draw(t){const n=fm();n.classList.add("pen-path");const i=T0(t),s=t.cornerRadius||0,o=D0(i,t.closed,s),r=t.strokeWidth||2,a=document.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d",o),a.setAttribute("fill",j1(t.fill)),a.setAttribute("stroke",t.strokeColor||"#000000"),a.setAttribute("stroke-width",String(r)),a.setAttribute("stroke-linecap","round"),a.setAttribute("stroke-linejoin","round");const l=i2(t.strokeStyle,r);return l&&a.setAttribute("stroke-dasharray",l),n.appendChild(a),n}}function o2(e,t){const n=e.point,i=A1;if(e.type==="corner"){const s=document.createElementNS("http://www.w3.org/2000/svg","rect");return s.setAttribute("x",String(n[0]-i/2)),s.setAttribute("y",String(n[1]-i/2)),s.setAttribute("width",String(i)),s.setAttribute("height",String(i)),s.setAttribute("fill",t?"#1890ff":"#ffffff"),s.setAttribute("stroke","#1890ff"),s.setAttribute("stroke-width","1.5"),s.classList.add("pen-anchor"),s}else{const s=document.createElementNS("http://www.w3.org/2000/svg","circle");return s.setAttribute("cx",String(n[0])),s.setAttribute("cy",String(n[1])),s.setAttribute("r",String(i/2)),s.setAttribute("fill",t?"#1890ff":"#ffffff"),s.setAttribute("stroke","#1890ff"),s.setAttribute("stroke-width","1.5"),s.classList.add("pen-anchor"),s}}function Ng(e){const t=document.createElementNS("http://www.w3.org/2000/svg","circle");return t.setAttribute("cx",String(e[0])),t.setAttribute("cy",String(e[1])),t.setAttribute("r",String(P1/2)),t.setAttribute("fill","#ffffff"),t.setAttribute("stroke","#1890ff"),t.setAttribute("stroke-width","1"),t.classList.add("pen-handle"),t}function vg(e,t){const n=document.createElementNS("http://www.w3.org/2000/svg","line");return n.setAttribute("x1",String(e[0])),n.setAttribute("y1",String(e[1])),n.setAttribute("x2",String(t[0])),n.setAttribute("y2",String(t[1])),n.setAttribute("stroke","#1890ff"),n.setAttribute("stroke-width","1"),n.setAttribute("stroke-dasharray","3,3"),n.classList.add("pen-handle-line"),n}function r2(e,t,n){const i="#ff4d4f";if(n.vertical&&n.verticalRefPoint){const o=n.verticalRefPoint,r=document.createElementNS("http://www.w3.org/2000/svg","line");r.setAttribute("x1",String(t[0])),r.setAttribute("y1",String(Math.min(t[1],o[1])-50)),r.setAttribute("x2",String(t[0])),r.setAttribute("y2",String(Math.max(t[1],o[1])+50)),r.setAttribute("stroke",i),r.setAttribute("stroke-width",String(1)),r.setAttribute("stroke-dasharray","4,4"),r.classList.add("pen-alignment-guide"),e.appendChild(r);const a=document.createElementNS("http://www.w3.org/2000/svg","circle");a.setAttribute("cx",String(o[0])),a.setAttribute("cy",String(o[1])),a.setAttribute("r","3"),a.setAttribute("fill",i),a.setAttribute("opacity","0.6"),a.classList.add("pen-alignment-marker"),e.appendChild(a)}if(n.horizontal&&n.horizontalRefPoint){const o=n.horizontalRefPoint,r=document.createElementNS("http://www.w3.org/2000/svg","line");if(r.setAttribute("x1",String(Math.min(t[0],o[0])-50)),r.setAttribute("y1",String(t[1])),r.setAttribute("x2",String(Math.max(t[0],o[0])+50)),r.setAttribute("y2",String(t[1])),r.setAttribute("stroke",i),r.setAttribute("stroke-width",String(1)),r.setAttribute("stroke-dasharray","4,4"),r.classList.add("pen-alignment-guide"),e.appendChild(r),!n.verticalRefPoint||n.horizontalRefPoint[0]!==n.verticalRefPoint[0]||n.horizontalRefPoint[1]!==n.verticalRefPoint[1]){const a=document.createElementNS("http://www.w3.org/2000/svg","circle");a.setAttribute("cx",String(o[0])),a.setAttribute("cy",String(o[1])),a.setAttribute("r","3"),a.setAttribute("fill",i),a.setAttribute("opacity","0.6"),a.classList.add("pen-alignment-marker"),e.appendChild(a)}}}function a2(e,t,n="#1890ff",i=2,s){const o=fm();if(o.classList.add("pen-preview"),e.length===0)return o;if(t&&$s(t)&&s&&(s.horizontal||s.vertical)&&r2(o,t,s),e.length>0){const r=D0(e,!1),a=document.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d",r),a.setAttribute("fill","none"),a.setAttribute("stroke",n),a.setAttribute("stroke-width",String(i)),a.setAttribute("stroke-linecap","round"),a.setAttribute("stroke-linejoin","round"),o.appendChild(a)}if(t&&$s(t)&&e.length>0){const r=e[e.length-1];if($s(r.point)){const a=document.createElementNS("http://www.w3.org/2000/svg","line"),l=r.handleOut&&$s(r.handleOut)?r.handleOut:r.point;a.setAttribute("x1",String(l[0])),a.setAttribute("y1",String(l[1])),a.setAttribute("x2",String(t[0])),a.setAttribute("y2",String(t[1])),a.setAttribute("stroke",n),a.setAttribute("stroke-width","1"),a.setAttribute("stroke-dasharray","5,5"),a.setAttribute("opacity","0.6"),o.appendChild(a)}}for(let r=0;r<e.length;r++){const a=e[r];if(!$s(a.point))continue;if(a.handleIn&&$s(a.handleIn)){const u=vg(a.point,a.handleIn);o.appendChild(u);const d=Ng(a.handleIn);o.appendChild(d)}if(a.handleOut&&$s(a.handleOut)){const u=vg(a.point,a.handleOut);o.appendChild(u);const d=Ng(a.handleOut);o.appendChild(d)}const l=o2(a,r===e.length-1);o.appendChild(l)}return o}const l2=3,c2=3,kg=8,Hd=new WeakMap;function Ss(e){let t=Hd.get(e);return t||(t={isCreating:!1,anchors:[],isDraggingHandle:!1,dragStartPoint:null,currentPoint:null,previewG:null,alignment:{horizontal:!1,vertical:!1,horizontalRefPoint:null,verticalRefPoint:null,referencePoint:null}},Hd.set(e,t)),t}function Eg(e,t,n=!1){const i={horizontal:!1,vertical:!1,horizontalRefPoint:null,verticalRefPoint:null,referencePoint:null},s=[...e],o=n&&t.length>1?t.slice(0,-1):t;if(o.length===0)return{snappedPoint:e,alignment:i};let r=kg,a=null,l=null,u=kg,d=null,m=null;for(const f of o){const h=Math.abs(e[0]-f.point[0]),g=Math.abs(e[1]-f.point[1]);h<r&&(r=h,a=f.point[0],l=f.point),g<u&&(u=g,d=f.point[1],m=f.point)}return a!==null&&(s[0]=a,i.vertical=!0,i.verticalRefPoint=l),d!==null&&(s[1]=d,i.horizontal=!0,i.horizontalRefPoint=m),i.referencePoint=i.verticalRefPoint||i.horizontalRefPoint,{snappedPoint:s,alignment:i}}function sr(e){const t=Ss(e);t.previewG&&t.previewG.remove(),Ny(e),t.isCreating=!1,t.anchors=[],t.isDraggingHandle=!1,t.dragStartPoint=null,t.currentPoint=null,t.previewG=null,t.alignment={horizontal:!1,vertical:!1,horizontalRefPoint:null,verticalRefPoint:null,referencePoint:null}}function Ny(e){J.getElementHost(e).querySelectorAll(".pen-preview").forEach(i=>i.remove())}function $r(e){const t=Ss(e),n=J.getElementHost(e);t.previewG&&t.previewG.remove(),t.previewG=a2(t.anchors,t.currentPoint,"#1890ff",2,t.alignment),n.appendChild(t.previewG)}function dc(e,t=!1){const n=Ss(e),i=[...n.anchors];if(n.previewG&&(n.previewG.remove(),n.previewG=null),Ny(e),i.length>=2){const s=M1(e,i,t);n.isCreating=!1,n.anchors=[],n.isDraggingHandle=!1,n.dragStartPoint=null,n.currentPoint=null,Se.insertNode(e,s,[e.children.length]),t?(Is(e),ho(e,s)):Is(e)}else sr(e)}function ca(e){return J.getPointer(e)===is.pen}function u2(e){const t=Ss(e);t.isCreating&&(ca(e)||(t.anchors.length>=2?dc(e,!1):sr(e)))}const d2=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:s,keyDown:o,globalKeyDown:r}=e,a=u=>u instanceof HTMLInputElement||u instanceof HTMLTextAreaElement||u instanceof HTMLElement&&u.isContentEditable,l=u=>{if(u.defaultPrevented||!ca(e)||a(u.target))return!1;const d=Ss(e);return d.isCreating?u.key==="Enter"?(dc(e,!1),u.preventDefault(),!0):u.key==="Escape"?(sr(e),u.preventDefault(),!0):Ot.isHotkey(["mod+z"],{byKey:!0})(u)||u.key==="Backspace"||u.key==="Delete"?(d.anchors.length>0&&(d.anchors.pop(),$r(e)),d.anchors.length===0&&sr(e),u.preventDefault(),!0):!1:!1};return e.pointerDown=u=>{if(u2(e),!ca(e)){t(u);return}const d=Ss(e);let m=Un(e,Rn(e,u.x,u.y));if(d.isCreating&&d.anchors.length>=c2){const b={anchors:d.anchors};if(V1(b,m)){dc(e,!0);return}}if(d.anchors.length>0){const{snappedPoint:b}=Eg(m,d.anchors,!1);m=b}d.isCreating=!0,d.isDraggingHandle=!0,d.dragStartPoint=m;const h=od(e).defaultAnchorType,g={point:m,type:h};d.anchors.push(g),d.alignment={horizontal:!1,vertical:!1,horizontalRefPoint:null,verticalRefPoint:null,referencePoint:null},$r(e)},e.pointerMove=u=>{if(!ca(e)){n(u);return}const d=Ss(e);let m=Un(e,Rn(e,u.x,u.y));const f=d.isDraggingHandle,{snappedPoint:h,alignment:g}=Eg(m,d.anchors,f);if(d.currentPoint=h,d.alignment=g,d.isDraggingHandle&&d.dragStartPoint&&d.anchors.length>0&&U1(d.dragStartPoint,m)>l2){const x=d.anchors.length-1,y=d.anchors[x];if(y.type!=="corner"){if(y.type==="smooth"||y.type==="symmetric"){const w=R1(y.point,m);d.anchors[x]={...y,handleIn:w.handleIn,handleOut:w.handleOut}}}}d.isCreating&&hm(e,"pen-preview",()=>{$r(e)}),n(u)},e.pointerUp=u=>{if(!ca(e)){i(u);return}const d=Ss(e);d.isDraggingHandle=!1,d.dragStartPoint=null,$r(e),i(u)},e.globalPointerUp=u=>{s(u)},e.globalKeyDown=u=>{l(u)||r(u)},e.keyDown=u=>{l(u)||o(u)},e};function Oi(e){const t=Hd.get(e);t!=null&&t.isCreating&&(t.anchors.length>=2?dc(e,!1):sr(e))}const ep=[{icon:c.jsxDEV(vr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/freehand-panel/freehand-panel.tsx",lineNumber:32,columnNumber:13},void 0),pointer:Bt.feltTipPen,titleKey:"toolbar.pen"},{icon:c.jsxDEV(q1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/freehand-panel/freehand-panel.tsx",lineNumber:37,columnNumber:13},void 0),pointer:is.pen,titleKey:"toolbar.vectorPen"},{icon:c.jsxDEV(L1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/freehand-panel/freehand-panel.tsx",lineNumber:42,columnNumber:13},void 0),pointer:Bt.eraser,titleKey:"toolbar.eraser"},{icon:c.jsxDEV(O1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/freehand-panel/freehand-panel.tsx",lineNumber:47,columnNumber:13},void 0),pointer:Bt.laserPointer,titleKey:"toolbar.laserPointer"}],m2=_0(ep,5),tp=({onPointerUp:e})=>{const{t}=We(),n=Zt();return c.jsxDEV(Mt,{padding:1,children:c.jsxDEV(Kt.Row,{gap:1,align:"center",children:c.jsxDEV(Kt.Row,{gap:1,children:m2.map((i,s)=>i.map((o,r)=>c.jsxDEV(Ne,{className:ne({fillable:!1}),selected:n.pointer===o.pointer,type:"icon",size:"small",visible:!0,icon:o.icon,tooltip:t(o.titleKey),"aria-label":t(o.titleKey),onPointerDown:()=>{o.pointer!==is.pen&&Oi(n),Wt(n,bn.dnd),Ue.updatePointerType(n,o.pointer)},onPointerUp:()=>{Wt(n,bn.drawing),e(o.pointer)}},`${s}-${r}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/freehand-panel/freehand-panel.tsx",lineNumber:73,columnNumber:17},void 0)))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/freehand-panel/freehand-panel.tsx",lineNumber:69,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/freehand-panel/freehand-panel.tsx",lineNumber:67,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/freehand-panel/freehand-panel.tsx",lineNumber:66,columnNumber:5},void 0)},p2=[{icon:c.jsxDEV(I0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:30,columnNumber:11},void 0),title:"Rectangle — R",pointer:st.rectangle},{icon:c.jsxDEV(C0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:35,columnNumber:11},void 0),title:"Ellipse — O",pointer:st.ellipse},{icon:c.jsxDEV(j0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:40,columnNumber:11},void 0),title:"Triangle",pointer:st.triangle},{icon:c.jsxDEV(P0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:45,columnNumber:11},void 0),title:"Terminal",pointer:gm.terminal},{icon:c.jsxDEV(A0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:50,columnNumber:11},void 0),title:"Diamond",pointer:st.diamond},{icon:c.jsxDEV(M0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:55,columnNumber:11},void 0),title:"Parallelogram",pointer:st.parallelogram},{icon:c.jsxDEV(V0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:60,columnNumber:11},void 0),title:"RoundRectangle",pointer:st.roundRectangle}],f2=_0(p2,5),np=({onPointerUp:e})=>{const t=Zt();return c.jsxDEV(Mt,{padding:1,children:c.jsxDEV(Kt.Col,{gap:1,children:f2.map((n,i)=>c.jsxDEV(Kt.Row,{gap:1,children:n.map((s,o)=>c.jsxDEV(Ne,{className:ne({fillable:!1}),type:"icon",size:"small",visible:!0,icon:s.icon,tooltip:s.title,"aria-label":s.title,onPointerDown:()=>{Oi(t),Wt(t,bn.dnd),Ue.updatePointerType(t,s.pointer)},onPointerUp:()=>{Wt(t,bn.drawing),e(s.pointer)}},o,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:84,columnNumber:19},void 0))},i,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:81,columnNumber:13},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:78,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shape-picker.tsx",lineNumber:77,columnNumber:5},void 0)},h2=[{icon:c.jsxDEV(z1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/arrow-picker.tsx",lineNumber:21,columnNumber:11},void 0),title:"Straight Arrow Line",pointer:qi.straight},{icon:c.jsxDEV(B1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/arrow-picker.tsx",lineNumber:26,columnNumber:11},void 0),title:"Elbow Arrow Line",pointer:qi.elbow},{icon:c.jsxDEV(F1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/arrow-picker.tsx",lineNumber:31,columnNumber:11},void 0),title:"Curve Arrow Line",pointer:qi.curve}],ip=({onPointerUp:e})=>{const t=Zt();return c.jsxDEV(Mt,{padding:1,children:c.jsxDEV(Kt.Row,{gap:1,children:h2.map((n,i)=>c.jsxDEV(Ne,{className:ne({fillable:!1}),type:"icon",size:"small",visible:!0,icon:n.icon,tooltip:n.title,"aria-label":n.title,onPointerDown:()=>{Oi(t),Wt(t,bn.drawing),Ue.updatePointerType(t,n.pointer)},onPointerUp:()=>{e(n.pointer)}},i,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/arrow-picker.tsx",lineNumber:48,columnNumber:13},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/arrow-picker.tsx",lineNumber:45,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/arrow-picker.tsx",lineNumber:44,columnNumber:5},void 0)},vy=[{value:Zs.default,labelKey:"theme.default"},{value:Zs.colorful,labelKey:"theme.colorful"},{value:Zs.soft,labelKey:"theme.soft"},{value:Zs.retro,labelKey:"theme.retro"},{value:Zs.dark,labelKey:"theme.dark"},{value:Zs.starry,labelKey:"theme.starry"}],ky=c.jsxDEV("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",style:{width:"1rem",height:"1rem"},children:c.jsxDEV("polyline",{points:"20 6 9 17 4 12"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-shared.tsx",lineNumber:37,columnNumber:5},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-shared.tsx",lineNumber:27,columnNumber:3},void 0),zl=e=>e===dn.hand||e===dn.selection||e===Da,Ey=c.jsxDEV("span",{style:{width:"1rem",display:"inline-block"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-shared.tsx",lineNumber:55,columnNumber:26},void 0),Sg={hand:{icon:c.jsxDEV(F0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:84,columnNumber:19},void 0),titleKey:"toolbar.hand",pointer:dn.hand},selection:{icon:c.jsxDEV(B0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:85,columnNumber:24},void 0),titleKey:"toolbar.selection",pointer:dn.selection},lasso:{icon:c.jsxDEV(z0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:86,columnNumber:20},void 0),titleKey:"toolbar.lasso",pointer:Da},mind:{icon:c.jsxDEV(Kl,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:87,columnNumber:19},void 0),titleKey:"toolbar.mind",pointer:go.mind},text:{icon:c.jsxDEV(Nm,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:88,columnNumber:19},void 0),titleKey:"toolbar.text",pointer:st.text},freehand:{icon:c.jsxDEV(vr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:89,columnNumber:23},void 0),titleKey:"toolbar.pen",pointer:Bt.feltTipPen,hasPopup:!0,popupKey:"freehand"},arrow:{icon:c.jsxDEV(ym,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:90,columnNumber:20},void 0),titleKey:"toolbar.arrow",pointer:qi.straight,hasPopup:!0,popupKey:"arrow"},shape:{icon:c.jsxDEV(wm,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:91,columnNumber:20},void 0),titleKey:"toolbar.shape",pointer:st.rectangle,hasPopup:!0,popupKey:"shape"},image:{icon:c.jsxDEV(Ga,{size:24},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:92,columnNumber:20},void 0),titleKey:"toolbar.image"},"media-library":{icon:c.jsxDEV(Fa,{size:24},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:93,columnNumber:28},void 0),titleKey:"toolbar.mediaLibrary"},"ai-image":{icon:c.jsxDEV(Ac,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:94,columnNumber:23},void 0),titleKey:"toolbar.aiImage"},"ai-video":{icon:c.jsxDEV(Mc,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:95,columnNumber:23},void 0),titleKey:"toolbar.aiVideo"},theme:{icon:c.jsxDEV(O0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:96,columnNumber:20},void 0),titleKey:"toolbar.theme",hasPopup:!0,popupKey:"theme"},"mermaid-to-drawnix":{icon:c.jsxDEV(L0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:97,columnNumber:33},void 0),titleKey:"extraTools.mermaidToDrawnix"},"markdown-to-drawnix":{icon:c.jsxDEV(q0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:98,columnNumber:34},void 0),titleKey:"extraTools.markdownToDrawnix"},undo:{icon:c.jsxDEV(k0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:100,columnNumber:19},void 0),titleKey:"general.undo"},redo:{icon:c.jsxDEV(E0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:101,columnNumber:19},void 0),titleKey:"general.redo"}},g2=({embedded:e=!1})=>{const{t}=We(),n=Zt(),i=J.getBoardContainer(n),{hiddenButtons:s,showButton:o}=Uc(),[r,a]=p.useState(!1),[l,u]=p.useState(!1),d=p.useRef(null),m=p.useRef(null),f=p.useCallback(()=>{d.current&&(clearTimeout(d.current),d.current=null),m.current&&(clearTimeout(m.current),m.current=null)},[]),h=p.useCallback(()=>"ontouchstart"in window||navigator.maxTouchPoints>0,[]),g=p.useCallback(()=>{h()||(f(),u(!0),d.current=setTimeout(()=>{a(!0)},200))},[f,h]),b=p.useCallback(()=>{h()||(d.current&&(clearTimeout(d.current),d.current=null),m.current=setTimeout(()=>{u(!1),a(!1)},150))},[h]),x=p.useCallback(()=>{h()&&(a(v=>!v),u(!1))},[h]),y=p.useCallback(()=>{f(),u(!0)},[f]),w=p.useCallback(()=>{m.current=setTimeout(()=>{u(!1),a(!1)},150)},[]);return c.jsxDEV(Ft,{open:r,onOpenChange:v=>{!v&&(h()||!l)&&a(!1)},placement:e?"right-start":"bottom",sideOffset:12,children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("div",{onMouseEnter:g,onMouseLeave:b,onClick:x,children:c.jsxDEV(Ne,{type:"icon",icon:c.jsxDEV(G1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:213,columnNumber:19},void 0),tooltip:r?void 0:t("toolbar.more"),tooltipPlacement:e?"right":"bottom","aria-label":t("toolbar.more"),selected:r,visible:!0,"data-testid":"toolbar-more","data-track":"toolbar_click_more"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:211,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:206,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:205,columnNumber:7},void 0),c.jsxDEV(Ht,{container:i,style:{zIndex:Tn.POPOVER},onMouseEnter:y,onMouseLeave:w,children:c.jsxDEV(b2,{hiddenButtons:s,showButton:o},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:230,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:224,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:193,columnNumber:5},void 0)},b2=({hiddenButtons:e,showButton:t})=>{const{t:n}=We(),i=Zt(),s=J.getBoardContainer(i),{openDialog:o}=On(),r=bm(),[a,l]=p.useState(null),[u,d]=p.useState(null),m=p.useRef({}),[f,h]=p.useState(null),g=p.useRef(null),[b,x]=p.useState(Bt.feltTipPen),y=p.useCallback(()=>{l(null),d(null),Object.values(m.current).forEach(A=>{A&&clearTimeout(A)})},[]),w=p.useCallback(A=>{if(Object.values(m.current).forEach(H=>{H&&clearTimeout(H)}),u===A){d(null);return}a===A&&!u?l(null):(d(null),l(A))},[a,u]),v=p.useCallback(A=>{a&&!u||(m.current[A]&&clearTimeout(m.current[A]),Object.entries(m.current).forEach(([H,ue])=>{H!==A&&ue&&(clearTimeout(ue),m.current[H]=null)}),u&&u!==A?(l(A),d(A)):a||(m.current[A]=setTimeout(()=>{l(A),d(A)},300)))},[u,a]),S=p.useCallback(A=>{m.current[A]&&(clearTimeout(m.current[A]),m.current[A]=null),u===A&&(m.current[A]=setTimeout(()=>{l(null),d(null)},400))},[u]),k=p.useCallback(A=>{m.current[A]&&(clearTimeout(m.current[A]),m.current[A]=null)},[]),N=p.useCallback(A=>{u===A&&(l(null),d(null))},[u]),E=p.useCallback(A=>{Oi(i),A===st.text?Wt(i,null):Wt(i,bn.dnd),Ue.updatePointerType(i,A),r(A)},[i,r]),I=p.useCallback(A=>{A!==st.text&&Wt(i,bn.drawing)},[i]),T=p.useCallback(A=>{const H=Sg[A];if(H){if(H.hasPopup&&H.popupKey){w(H.popupKey);return}switch(y(),Oi(i),H.pointer&&(zl(H.pointer)?(Ue.updatePointerType(i,H.pointer),r(H.pointer)):(E(H.pointer),I(H.pointer))),A){case"image":Rc(i);break;case"ai-image":o(fi.aiImageGeneration);break;case"ai-video":o(fi.aiVideoGeneration);break;case"mermaid-to-drawnix":o(fi.mermaidToDrawnix);break;case"markdown-to-drawnix":o(fi.markdownToDrawnix);break;case"undo":i.undo();break;case"redo":i.redo();break}}},[i,o,E,I,y,r,w]),j=p.useCallback((A,H)=>{A.preventDefault(),A.stopPropagation(),h({buttonId:H,x:A.clientX,y:A.clientY})},[]),V=p.useCallback(()=>{h(null)},[]),_=p.useCallback(()=>{f&&(t(f.buttonId),V())},[f,t,V]);an.useEffect(()=>{if(!f)return;const A=ue=>{g.current&&!g.current.contains(ue.target)&&V()},H=ue=>{ue.key==="Escape"&&V()};return document.addEventListener("mousedown",A),document.addEventListener("keydown",H),()=>{document.removeEventListener("mousedown",A),document.removeEventListener("keydown",H)}},[f,V]);const D=p.useCallback(A=>{switch(A){case"freehand":return c.jsxDEV(tp,{onPointerUp:H=>{y(),r(H),x(H)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:489,columnNumber:11},void 0);case"shape":return c.jsxDEV(np,{onPointerUp:H=>{y(),r(H)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:499,columnNumber:11},void 0);case"arrow":return c.jsxDEV(ip,{onPointerUp:H=>{y(),r(H)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:508,columnNumber:11},void 0);case"theme":return c.jsxDEV(Li,{children:vy.map(H=>{const ue=i.theme.themeColorMode===H.value;return c.jsxDEV(gt,{icon:ue?ky:Ey,"data-track":`toolbar_click_theme_${H.value}`,onSelect:()=>{Ue.updateThemeColor(i,H.value),y()},"aria-label":n(H.labelKey),selected:ue,children:n(H.labelKey)},H.value,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:521,columnNumber:17},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:517,columnNumber:11},void 0);default:return null}},[i,y,r,n]),C=p.useMemo(()=>{const A=ep.find(H=>H.pointer===b);return(A==null?void 0:A.icon)||c.jsxDEV(vr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:547,columnNumber:30},void 0)},[b]),[M,U]=p.useState(!1),F=p.useCallback(()=>{var A;return c.jsxDEV("div",{className:"more-tools-panel__zoom-row",onContextMenu:H=>j(H,"zoom"),children:c.jsxDEV(Kt.Row,{gap:1,children:[c.jsxDEV(Ne,{type:"button",icon:c.jsxDEV(U0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:564,columnNumber:19},void 0),visible:!0,tooltip:n("zoom.out"),tooltipPlacement:"top","aria-label":n("zoom.out"),"data-track":"toolbar_click_zoom_out",onPointerUp:()=>{Ue.updateZoom(i,i.viewport.zoom-.1)},className:"zoom-out-button"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:562,columnNumber:11},void 0),c.jsxDEV(Ft,{sideOffset:12,open:M,onOpenChange:H=>{U(H)},placement:"right-start",children:[c.jsxDEV(nn,{content:n("zoom.fit"),showArrow:!1,children:c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("div",{"aria-label":n("zoom.fit"),"data-track":"toolbar_click_zoom_menu",className:`zoom-menu-trigger ${M?"active":""}`,onPointerUp:()=>{U(!M)},children:[Number(((((A=i==null?void 0:i.viewport)==null?void 0:A.zoom)||1)*100).toFixed(0)),"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:585,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:584,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:583,columnNumber:13},void 0),c.jsxDEV(Ht,{container:s,style:{zIndex:Tn.POPOVER+1},children:c.jsxDEV(Li,{onSelect:()=>{U(!1)},children:[c.jsxDEV(gt,{"data-track":"toolbar_click_zoom_fit",onSelect:()=>{Ue.fitViewport(i)},"aria-label":n("zoom.fit"),shortcut:"Cmd+Shift+=",children:n("zoom.fit")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:603,columnNumber:17},void 0),c.jsxDEV(gt,{"data-track":"toolbar_click_zoom_fit_frame",onSelect:()=>{xm(i)},"aria-label":n("zoom.fitFrame"),children:n("zoom.fitFrame")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:611,columnNumber:17},void 0),c.jsxDEV(gt,{"data-track":"toolbar_click_zoom_100",onSelect:()=>{Ue.updateZoom(i,1)},"aria-label":n("zoom.100"),shortcut:"Cmd+0",children:n("zoom.100")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:618,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:598,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:597,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:575,columnNumber:11},void 0),c.jsxDEV(Ne,{type:"button",icon:c.jsxDEV(R0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:631,columnNumber:19},void 0),visible:!0,tooltip:n("zoom.in"),tooltipPlacement:"top","aria-label":n("zoom.in"),"data-track":"toolbar_click_zoom_in",onPointerUp:()=>{Ue.updateZoom(i,i.viewport.zoom+.1)},className:"zoom-in-button"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:629,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:561,columnNumber:9},void 0)},"zoom",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:556,columnNumber:7},void 0)},[i,s,j,n,M]),$=p.useCallback(A=>{var Pe,He,Z,Ie;if(A==="zoom")return F();const H=Sg[A];if(!H)return null;const ue=n(H.titleKey),te=A==="freehand"?C:H.icon,oe=A==="undo"&&(((He=(Pe=i.history)==null?void 0:Pe.undos)==null?void 0:He.length)??0)<=0,me=A==="redo"&&(((Ie=(Z=i.history)==null?void 0:Z.redos)==null?void 0:Ie.length)??0)<=0,_e=oe||me;if(H.hasPopup&&H.popupKey){const Qe=H.popupKey;return c.jsxDEV("div",{className:"more-tools-panel__item",onContextMenu:dt=>j(dt,A),children:c.jsxDEV(Ft,{open:a===Qe,sideOffset:2,onOpenChange:dt=>{dt||y()},placement:"right-start",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("div",{onMouseEnter:()=>v(Qe),onMouseLeave:()=>S(Qe),children:c.jsxDEV(Ne,{type:"icon",icon:te,tooltip:ue,tooltipPlacement:"left","aria-label":ue,visible:!0,selected:a===Qe,"data-track":`toolbar_click_${A}`,onPointerUp:()=>T(A)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:687,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:683,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:682,columnNumber:13},void 0),c.jsxDEV(Ht,{container:s,style:{zIndex:Tn.POPOVER+1},onMouseEnter:()=>k(Qe),onMouseLeave:()=>N(Qe),children:D(Qe)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:700,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:672,columnNumber:11},void 0)},A,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:667,columnNumber:9},void 0)}return c.jsxDEV("div",{className:"more-tools-panel__item",onContextMenu:Qe=>j(Qe,A),children:c.jsxDEV(Ne,{type:"icon",icon:te,tooltip:ue,tooltipPlacement:"right","aria-label":ue,visible:!0,selected:!1,disabled:_e,"data-track":`toolbar_click_${A}`,onPointerUp:()=>T(A)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:720,columnNumber:9},void 0)},A,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:715,columnNumber:7},void 0)},[n,i,s,a,C,T,j,v,S,k,N,D,y,F]);return e.length===0?c.jsxDEV("div",{className:"more-tools-panel",children:[c.jsxDEV("div",{className:"more-tools-panel__header",children:c.jsxDEV("span",{className:"more-tools-panel__title",children:n("toolbar.moreTools")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:755,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:754,columnNumber:9},void 0),c.jsxDEV("div",{className:"more-tools-panel__empty",children:c.jsxDEV("span",{className:"more-tools-panel__empty-text",children:n("toolbar.allToolsVisible")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:758,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:757,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:753,columnNumber:7},void 0):c.jsxDEV(c.Fragment,{children:[c.jsxDEV("div",{className:"more-tools-panel",children:[c.jsxDEV("div",{className:"more-tools-panel__header",children:c.jsxDEV("span",{className:"more-tools-panel__title",children:n("toolbar.moreTools")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:768,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:767,columnNumber:9},void 0),c.jsxDEV("div",{className:"more-tools-panel__content",children:e.map(A=>$(A.id))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:770,columnNumber:9},void 0),c.jsxDEV("div",{className:"more-tools-panel__footer",children:c.jsxDEV("span",{className:"more-tools-panel__hint",children:n("toolbar.rightClickToAdd")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:774,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:773,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:766,columnNumber:7},void 0),f&&cs.createPortal(c.jsxDEV("div",{ref:g,className:"toolbar-context-menu",style:{position:"fixed",left:f.x,top:f.y,zIndex:Tn.DROPDOWN_PORTAL},children:c.jsxDEV(Li,{children:c.jsxDEV(gt,{onSelect:_,children:n("toolbar.addToToolbar")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:790,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:789,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:779,columnNumber:9},void 0),document.body)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:765,columnNumber:5},void 0)},x2=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oJ),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),w2=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oL),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MinimizedToolsBar})));var Sy=(e=>(e.shape="shape",e.arrow="arrow",e.freehand="freehand",e.theme="theme",e))(Sy||{});const Tg=[{icon:c.jsxDEV(F0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:123,columnNumber:11},void 0),pointer:dn.hand,titleKey:"toolbar.hand",visibilityKey:"hand"},{icon:c.jsxDEV(B0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:129,columnNumber:11},void 0),pointer:dn.selection,titleKey:"toolbar.selection",visibilityKey:"selection"},{icon:c.jsxDEV(z0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:135,columnNumber:11},void 0),pointer:Da,titleKey:"toolbar.lasso",visibilityKey:"lasso"},{icon:c.jsxDEV(Kl,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:141,columnNumber:11},void 0),pointer:go.mind,titleKey:"toolbar.mind",visibilityKey:"mind"},{icon:c.jsxDEV(Nm,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:147,columnNumber:11},void 0),pointer:st.text,titleKey:"toolbar.text",visibilityKey:"text"},{icon:c.jsxDEV(Ga,{size:24},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:153,columnNumber:11},void 0),titleKey:"toolbar.image",key:"image",visibilityKey:"image"},{icon:c.jsxDEV(Fa,{size:24},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:159,columnNumber:11},void 0),titleKey:"toolbar.mediaLibrary",key:"media-library",visibilityKey:"media-library"},{icon:c.jsxDEV(Ac,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:165,columnNumber:11},void 0),titleKey:"toolbar.aiImage",key:"ai-image",visibilityKey:"ai-image"},{icon:c.jsxDEV(Mc,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:171,columnNumber:11},void 0),titleKey:"toolbar.aiVideo",key:"ai-video",visibilityKey:"ai-video"},{icon:c.jsxDEV(Kl,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:177,columnNumber:11},void 0),pointer:go.mind,titleKey:"toolbar.mind",visibilityKey:"mind"},{icon:c.jsxDEV(vr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:183,columnNumber:11},void 0),pointer:Bt.feltTipPen,titleKey:"toolbar.pen",key:"freehand",visibilityKey:"freehand"},{icon:c.jsxDEV(ym,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:190,columnNumber:11},void 0),titleKey:"toolbar.arrow",key:"arrow",pointer:qi.straight,visibilityKey:"arrow"},{icon:c.jsxDEV(wm,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:197,columnNumber:11},void 0),titleKey:"toolbar.shape",key:"shape",pointer:st.rectangle,visibilityKey:"shape"},{icon:c.jsxDEV(O0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:204,columnNumber:11},void 0),titleKey:"toolbar.theme",key:"theme",visibilityKey:"theme"},{icon:c.jsxDEV(L0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:210,columnNumber:11},void 0),titleKey:"extraTools.mermaidToDrawnix",key:"mermaid-to-drawnix",visibilityKey:"mermaid-to-drawnix"},{icon:c.jsxDEV(q0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:216,columnNumber:11},void 0),titleKey:"extraTools.markdownToDrawnix",key:"markdown-to-drawnix",visibilityKey:"markdown-to-drawnix"}],y2=e=>Object.keys(qi).includes(e.pointer),N2=e=>Object.keys(st).includes(e.pointer)||Object.keys(gm).includes(e.pointer),v2=({embedded:e=!1,iconMode:t=!1,onOpenMediaLibrary:n,minimizedToolsBarEnabled:i=!1,onEnableToolWindows:s})=>{const o=Zt(),{appState:r,openDialog:a}=On(),{t:l}=We(),u=bm(),d=J.getBoardContainer(o),{visibleButtons:m,loading:f,reorderButton:h}=Uc(),{getDragProps:g}=H1({items:m,getId:L=>L.id,onReorder:(L,P)=>{h(L,P,!0)},enabled:e}),[b,x]=p.useState({freehand:!1,arrow:!1,shape:!1,theme:!1}),[y,w]=p.useState(null),v=p.useRef({freehand:null,arrow:null,shape:null,theme:null}),[S,k]=p.useState(Tg.find(L=>L.key==="freehand")),[N,E]=p.useState(!1),I=p.useCallback(async L=>{try{L.type===Ei.IMAGE?await lr(o,L.url):L.type===Ei.VIDEO?await cr(o,L.url):L.type===Ei.AUDIO&&await rr(o,L.url,{title:L.name,duration:L.duration,previewImageUrl:L.thumbnail,prompt:L.prompt,mv:L.modelName,clipId:L.clipId,providerTaskId:L.providerTaskId}),pe.success("素材已插入到画板")}catch(P){console.error("Failed to insert asset:",P),pe.error("插入素材失败")}},[o]),T=p.useCallback(()=>{if(n){n({mode:ns.SELECT,onSelect:I,selectButtonText:"插入"});return}E(!0)},[I,n]),j=p.useCallback(()=>{E(!1)},[]),V=()=>{x({freehand:!1,arrow:!1,shape:!1,theme:!1}),w(null),Object.values(v.current).forEach(L=>{L&&clearTimeout(L)})},_=L=>{w(null),Object.values(v.current).forEach(P=>{P&&clearTimeout(P)}),x({freehand:!1,arrow:!1,shape:!1,theme:!1,[L]:!0})},D=L=>{v.current[L]&&clearTimeout(v.current[L]),Object.entries(v.current).forEach(([P,Q])=>{P!==L&&Q&&(clearTimeout(Q),v.current[P]=null)}),y&&y!==L?(x(P=>({...P,[y]:!1,[L]:!0})),w(L)):b[L]||(v.current[L]=setTimeout(()=>{x(P=>({...P,[L]:!0})),w(L)},300))},C=L=>{v.current[L]&&(clearTimeout(v.current[L]),v.current[L]=null),y===L&&(v.current[L]=setTimeout(()=>{x(P=>({...P,[L]:!1})),w(null)},200))},M=L=>{v.current[L]&&(clearTimeout(v.current[L]),v.current[L]=null)},U=L=>{y===L&&(x(P=>({...P,[L]:!1})),w(null))},F=L=>{Oi(o),L===st.text?(Wt(o,null),Ue.updatePointerType(o,L),u(L)):(Wt(o,bn.dnd),Ue.updatePointerType(o,L),u(L))},$=L=>{L!==st.text&&Wt(o,bn.drawing)},A=()=>Object.values(b).some(L=>L),H=L=>J.isPointer(o,L.pointer)&&!A(),ue=L=>J.isInPointer(L,[Bt.feltTipPen,Bt.eraser,Bt.laserPointer,is.pen]),te=L=>{V(),Oi(o),L.pointer&&!zl(L.pointer)?$(L.pointer):L.pointer&&zl(L.pointer)&&(Ue.updatePointerType(o,L.pointer),u(L.pointer)),L.key==="image"?Rc(o):L.key==="media-library"?T():L.key==="ai-image"?a(fi.aiImageGeneration):L.key==="ai-video"?a(fi.aiVideoGeneration):L.key==="mermaid-to-drawnix"?a(fi.mermaidToDrawnix):L.key==="markdown-to-drawnix"&&a(fi.markdownToDrawnix)},oe=(L,P,Q)=>{const se=()=>{switch(Q){case"freehand":return c.jsxDEV(tp,{onPointerUp:G=>{V(),u(G),k(ep.find(fe=>fe.pointer===G))}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:520,columnNumber:13},void 0);case"shape":return c.jsxDEV(np,{onPointerUp:G=>{V(),u(G)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:532,columnNumber:13},void 0);case"arrow":return c.jsxDEV(ip,{onPointerUp:G=>{V(),u(G)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:541,columnNumber:13},void 0);case"theme":return c.jsxDEV(Li,{children:vy.map(G=>{const fe=o.theme.themeColorMode===G.value;return c.jsxDEV(gt,{icon:fe?ky:Ey,"data-track":`toolbar_click_theme_${G.value}`,onSelect:()=>{Ue.updateThemeColor(o,G.value),V()},"aria-label":l(G.labelKey),selected:fe,children:l(G.labelKey)},G.value,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:554,columnNumber:19},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:550,columnNumber:13},void 0)}},z=()=>{const G=b[Q],fe=Object.entries(b).some(([ae,Y])=>ae!==Q&&Y);switch(Q){case"freehand":return G||ue(o)&&!fe;case"shape":return G||N2(o)&&!J.isPointer(o,st.text);case"arrow":return G||y2(o);default:return G}},O=Q==="freehand"?S.icon:L.icon,K=Q==="freehand"?S.titleKey?l(S.titleKey):"Freehand":L.titleKey?l(L.titleKey):"";return c.jsxDEV(Ft,{open:b[Q],sideOffset:12,onOpenChange:G=>{G||V()},placement:e?"right-start":"bottom",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("div",{onMouseEnter:()=>D(Q),onMouseLeave:()=>C(Q),children:c.jsxDEV(Ne,{type:"icon",visible:!0,selected:z(),icon:O,tooltip:K,"aria-label":K,"data-track":`toolbar_click_${Q}`,onPointerDown:()=>{_(Q),Q==="freehand"&&S.pointer&&F(S.pointer)},onPointerUp:()=>{Q==="freehand"&&$()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:627,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:623,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:622,columnNumber:9},void 0),c.jsxDEV(Ht,{container:d,style:{zIndex:Tn.POPOVER},onMouseEnter:()=>M(Q),onMouseLeave:()=>U(Q),children:se()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:652,columnNumber:9},void 0)]},P,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:611,columnNumber:7},void 0)},me=(L,P)=>c.jsxDEV(Ne,{type:"radio",icon:L.icon,checked:H(L),tooltip:L.titleKey?l(L.titleKey):"",tooltipPlacement:e?"right":"bottom","aria-label":L.titleKey?l(L.titleKey):"","data-track":`toolbar_click_${L.pointer||L.key}`,onPointerDown:()=>{L.pointer&&!zl(L.pointer)&&F(L.pointer)},onPointerUp:()=>{te(L)}},P,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:667,columnNumber:7},void 0),_e=p.useMemo(()=>{const L=new Map;return Tg.forEach(P=>{P.visibilityKey&&L.set(P.visibilityKey,P)}),L},[]),[Pe,He]=p.useState(!1),Z=p.useCallback(L=>{var Q;const P=e?Kt.Col:Kt.Row;return c.jsxDEV("div",{className:ne("creation-toolbar__zoom-inline",{"creation-toolbar__zoom-inline--vertical":e}),children:c.jsxDEV(P,{gap:0,children:[c.jsxDEV(Ne,{type:"button",icon:c.jsxDEV(U0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:721,columnNumber:21},void 0),visible:!0,tooltip:l("zoom.out"),tooltipPlacement:e?"right":"bottom","aria-label":l("zoom.out"),"data-track":"toolbar_click_zoom_out",onPointerUp:()=>{Ue.updateZoom(o,o.viewport.zoom-.1)},className:"zoom-out-button"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:719,columnNumber:13},void 0),c.jsxDEV(Ft,{sideOffset:12,open:Pe,onOpenChange:se=>{He(se)},placement:e?"right-start":"bottom",children:[c.jsxDEV(nn,{content:l("zoom.fit"),showArrow:!1,children:c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("div",{"aria-label":l("zoom.fit"),"data-track":"toolbar_click_zoom_menu",className:ne("zoom-menu-trigger",{active:Pe}),onPointerUp:()=>{He(!Pe)},children:[Number(((((Q=o==null?void 0:o.viewport)==null?void 0:Q.zoom)||1)*100).toFixed(0)),"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:742,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:741,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:740,columnNumber:15},void 0),c.jsxDEV(Ht,{container:d,style:{zIndex:Tn.POPOVER},children:c.jsxDEV(Li,{onSelect:()=>{He(!1)},children:[c.jsxDEV(gt,{"data-track":"toolbar_click_zoom_fit",onSelect:()=>{Ue.fitViewport(o)},"aria-label":l("zoom.fit"),shortcut:"Cmd+Shift+=",children:l("zoom.fit")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:765,columnNumber:19},void 0),c.jsxDEV(gt,{"data-track":"toolbar_click_zoom_fit_frame",onSelect:()=>{xm(o)},"aria-label":l("zoom.fitFrame"),children:l("zoom.fitFrame")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:775,columnNumber:19},void 0),c.jsxDEV(gt,{"data-track":"toolbar_click_zoom_100",onSelect:()=>{Ue.updateZoom(o,1)},"aria-label":l("zoom.100"),shortcut:"Cmd+0",children:l("zoom.100")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:784,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:760,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:756,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:732,columnNumber:13},void 0),c.jsxDEV(Ne,{type:"button",icon:c.jsxDEV(R0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:799,columnNumber:21},void 0),visible:!0,tooltip:l("zoom.in"),tooltipPlacement:e?"right":"bottom","aria-label":l("zoom.in"),"data-track":"toolbar_click_zoom_in",onPointerUp:()=>{Ue.updateZoom(o,o.viewport.zoom+.1)},className:"zoom-in-button"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:797,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:718,columnNumber:11},void 0)},`zoom-${L}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:712,columnNumber:9},void 0)},[o,d,e,l,Pe]),Ie=p.useCallback((L,P)=>{if(L==="zoom")return Z(P);const Q=_e.get(L);return!Q||r.isMobile&&Q.pointer===dn.hand?null:Q.key&&Object.values(Sy).includes(Q.key)?oe(Q,P,Q.key):me(Q,P)},[_e,r.isMobile,oe,me,Z]),Qe=p.useCallback((L,P,Q=!0,se=-1)=>{const z=Ie(L,P);if(!z)return null;const O=g(L,P);return c.jsxDEV(Gd,{buttonId:L,isVisible:Q,visibleIndex:se,children:c.jsxDEV("div",{className:ne("toolbar-button-wrapper",{"toolbar-button-wrapper--dragging":O["data-dragging"],"toolbar-button-wrapper--drag-over":O["data-drag-over"],"toolbar-button-wrapper--drag-before":O["data-drag-position"]==="before","toolbar-button-wrapper--drag-after":O["data-drag-position"]==="after"}),"data-button-id":L,...O,children:z},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:873,columnNumber:11},void 0)},`ctx-${L}-${P}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:867,columnNumber:9},void 0)},[Ie,g]),dt=c.jsxDEV(Kt.Row,{gap:1,children:[!f&&m.map((L,P)=>e?Qe(L.id,P,!0,P):Ie(L.id,P)),c.jsxDEV(g2,{embedded:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:902,columnNumber:7},void 0),e&&i&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(w2,{ensureToolWindowsEnabled:s},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:906,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:905,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:894,columnNumber:5},void 0),bt=N?c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(x2,{isOpen:N,onClose:j,mode:ns.SELECT,onSelect:I,selectButtonText:"插入"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:915,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:914,columnNumber:5},void 0):null;return e?c.jsxDEV(c.Fragment,{children:[c.jsxDEV("div",{className:ne("draw-toolbar",{"draw-toolbar--embedded":e,"draw-toolbar--icon-only":t}),children:dt},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:928,columnNumber:9},void 0),bt]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:927,columnNumber:7},void 0):c.jsxDEV(c.Fragment,{children:[c.jsxDEV(Mt,{padding:1,className:ne("draw-toolbar",Yt,{"draw-toolbar--embedded":e,"draw-toolbar--icon-only":t}),children:dt},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:943,columnNumber:7},void 0),bt]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:942,columnNumber:5},void 0)},Pn=ni([]),yi=ni(!0),k2=ni(e=>e(Pn).filter(t=>t.status===mn.PENDING||t.status===mn.PROCESSING)),E2=ni(e=>e(Pn).filter(t=>t.status===mn.COMPLETED)),S2=ni(e=>e(Pn).filter(t=>t.status===mn.FAILED)),T2=ni(e=>e(Pn).filter(t=>t.status===mn.CANCELLED)),D2=ni(e=>e(Pn).length),_2=ni(e=>e(Pn).length),I2=ni(null,(e,t,n)=>{try{const i=ft.createTask(n.params,n.type);return t(Pn,ft.getAllTasks()),t(yi,!1),i}catch{return null}}),C2=ni(null,(e,t,n)=>{ft.cancelTask(n),t(Pn,ft.getAllTasks()),t(yi,!1)}),j2=ni(null,(e,t,n)=>{ft.retryTask(n),t(Pn,ft.getAllTasks()),t(yi,!1)}),P2=ni(null,(e,t,n)=>{ft.deleteTask(n),t(Pn,ft.getAllTasks()),t(yi,!1)}),A2=ni(null,(e,t)=>{ft.clearCompletedTasks(),t(Pn,ft.getAllTasks()),t(yi,!1)}),M2=ni(null,(e,t)=>{ft.clearFailedTasks(),t(Pn,ft.getAllTasks()),t(yi,!1)});let Dg=!1,_g=!1;const es=W1();function V2(e){const t=es.get(Pn);let n;switch(e.type){case"taskCreated":t.some(i=>i.id===e.task.id)?n=t.map(i=>i.id===e.task.id?e.task:i):n=[e.task,...t];break;case"taskDeleted":n=t.filter(i=>i.id!==e.task.id);break;default:t.some(i=>i.id===e.task.id)?n=t.map(i=>i.id===e.task.id?e.task:i):n=[e.task,...t];break}es.set(Pn,n),es.set(yi,!1)}function Ig(){const e=ft.getAllTasks();es.set(Pn,e),es.set(yi,!1)}async function U2(){if(await new Promise(i=>setTimeout(i,500)),ft.getAllTasks().length>0){Ig();return}if(!await tf.isAvailable()){es.set(yi,!1);return}const n=await tf.getAllTasks({limit:$1.MAX_RETAINED_TASKS});n.length>0&&ft.restoreTasks(n),Ig()}function R2(){if(Dg)return;Dg=!0;const e=ft.getAllTasks();es.set(Pn,e),es.set(yi,e.length===0),ft.observeTaskUpdates().subscribe(t=>{V2(t)}),e.length===0&&!_g&&(_g=!0,U2().catch(()=>{es.set(yi,!1)}))}function q2(){p.useEffect(()=>{R2()},[]);const e=Ns(Pn),t=Ns(yi);return{tasks:e,isLoading:t}}function L2(){const e=Ao(I2),t=Ao(C2),n=Ao(j2),i=Ao(P2),s=Ao(A2),o=Ao(M2),r=p.useCallback((f,h)=>e({params:f,type:h}),[e]),a=p.useCallback(f=>t(f),[t]),l=p.useCallback(f=>n(f),[n]),u=p.useCallback(f=>i(f),[i]),d=p.useCallback(()=>s(),[s]),m=p.useCallback(()=>o(),[o]);return{createTask:r,cancelTask:a,retryTask:l,deleteTask:u,clearCompletedTasks:d,clearFailedTasks:m}}function O2(){const{tasks:e,isLoading:t}=q2(),n=Ns(k2),i=Ns(E2),s=Ns(S2),o=Ns(T2),r=Ns(D2),a=Ns(_2),l=!1,u=!1,{createTask:d,cancelTask:m,retryTask:f,deleteTask:h,clearCompletedTasks:g,clearFailedTasks:b}=L2(),x=p.useCallback(async()=>{},[]),y=p.useCallback(k=>ft.getTask(k),[]),w=p.useCallback(k=>{k.forEach(N=>{h(N)})},[h]),v=p.useCallback(k=>{k.forEach(N=>{f(N)})},[f]),S=p.useCallback(k=>{k.forEach(N=>{m(N)})},[m]);return{tasks:e,activeTasks:n,completedTasks:i,failedTasks:s,cancelledTasks:o,isLoading:t,isLoadingMore:l,hasMore:u,totalCount:r,loadedCount:a,loadMore:x,createTask:d,cancelTask:m,retryTask:f,deleteTask:h,clearCompleted:g,clearFailed:b,getTask:y,batchDeleteTasks:w,batchRetryTasks:v,batchCancelTasks:S}}const Cg="https://tuziai.oss-cn-shenzhen.aliyuncs.com/aitu/AiTu.png",z2="https://tuziai.oss-cn-shenzhen.aliyuncs.com/linkme.png",B2=()=>{const e=Zt(),t=J.getBoardContainer(e),[n,i]=p.useState(!1);return p.useEffect(()=>{const s=new Image;s.src=Cg;const o=new Image;o.src=z2},[]),c.jsxDEV(Ft,{placement:"right-end",sideOffset:12,open:n,onOpenChange:i,children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{type:"icon",icon:c.jsxDEV(X1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:38,columnNumber:17},void 0),"aria-label":"用户反馈群",title:"用户反馈群",tooltipPlacement:"right",selected:n,visible:!0,"data-track":"toolbar_click_feedback",onPointerDown:s=>{s.event.stopPropagation()},onClick:()=>i(!n)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:36,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:35,columnNumber:7},void 0),c.jsxDEV(Ht,{container:t,style:{zIndex:Tn.POPOVER_FEEDBACK},children:c.jsxDEV("div",{className:"feedback-qrcode-content",children:c.jsxDEV("div",{className:"feedback-qrcode-grid",children:c.jsxDEV("div",{className:"feedback-qrcode-item",children:[c.jsxDEV("img",{src:Cg,alt:"用户反馈群二维码",className:"feedback-qrcode-image"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:55,columnNumber:15},void 0),c.jsxDEV("div",{className:"feedback-qrcode-text",children:"用户反馈群"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:60,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:54,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:53,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:52,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:51,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/feedback-button/feedback-button.tsx",lineNumber:34,columnNumber:5},void 0)},F2=({projectDrawerOpen:e,onProjectDrawerToggle:t,toolboxDrawerOpen:n=!1,onToolboxDrawerToggle:i,taskPanelExpanded:s,onTaskPanelToggle:o})=>{const{activeTasks:r,completedTasks:a,failedTasks:l}=O2(),d=r.length+a.length+l.length>0?`任务队列 (生成中: ${r.length}, 已完成: ${a.length}, 失败: ${l.length})`:"任务队列 (暂无任务)";return c.jsxDEV("div",{className:"bottom-actions-section",children:[c.jsxDEV(B2,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:50,columnNumber:7},void 0),c.jsxDEV(Ne,{type:"icon",icon:c.jsxDEV(K1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:55,columnNumber:15},void 0),"aria-label":e?"关闭项目":"打开项目",tooltip:e?"关闭项目":"打开项目",tooltipPlacement:"right",selected:e,visible:!0,"data-track":"toolbar_click_project_drawer","data-testid":"toolbar-project",onPointerDown:m=>{m.event.stopPropagation()},onClick:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:53,columnNumber:7},void 0),i&&c.jsxDEV(Ne,{type:"icon",icon:c.jsxDEV(Y1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:73,columnNumber:17},void 0),"aria-label":n?"关闭工具箱":"打开工具箱",tooltip:n?"关闭工具箱":"打开工具箱",tooltipPlacement:"right",selected:n,visible:!0,"data-track":"toolbar_click_toolbox","data-testid":"toolbar-toolbox",onPointerDown:m=>{m.event.stopPropagation()},onClick:i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:71,columnNumber:9},void 0),c.jsxDEV("div",{className:"bottom-actions-section__task-wrapper",children:[c.jsxDEV(Z1,{count:r.length>0?r.length:0,showZero:!1,offset:[6,-6],children:c.jsxDEV(Ne,{type:"icon",icon:c.jsxDEV(J1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:98,columnNumber:19},void 0),"aria-label":"任务队列",tooltip:d,tooltipPlacement:"right",selected:s,visible:!0,"data-track":"toolbar_click_tasks","data-testid":"toolbar-tasks",onPointerDown:m=>{m.event.stopPropagation()},onClick:o},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:96,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:91,columnNumber:9},void 0),r.length>0&&c.jsxDEV("div",{className:"bottom-actions-section__status bottom-actions-section__status--active"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:115,columnNumber:11},void 0),l.length>0&&r.length===0&&c.jsxDEV("div",{className:"bottom-actions-section__status bottom-actions-section__status--failed"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:118,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:90,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:48,columnNumber:5},void 0)},G2=p.lazy(()=>Ce(()=>import("./TaskQueuePanel-CcKV6Mtu.js"),__vite__mapDeps([0,2,3]),import.meta.url).then(e=>({default:e.TaskQueuePanel}))),H2=460,W2=["ai-image","ai-video"],$2=an.memo(({className:e,projectDrawerOpen:t=!1,onProjectDrawerToggle:n,toolboxDrawerOpen:i=!1,onToolboxDrawerToggle:s,taskPanelExpanded:o=!1,onTaskPanelToggle:r,onOpenBackupRestore:a,onOpenCloudSync:l,onOpenMediaLibrary:u,deferredFeaturesEnabled:d=!1,minimizedToolsBarEnabled:m=!1,onEnableToolWindows:f})=>{const[h,g]=p.useState(!1),[b,x]=p.useState(!0),y=p.useRef(!1),w=p.useRef(null),v=p.useRef(null),S=p.useRef(!1),{isMobile:k,isTablet:N}=Q1(),E=k||N;qc(w,{enablePositionTracking:!0,enableScaleCompensation:!0});const I=p.useCallback(M=>{if(M[0]){const U=M[0].contentRect.height;g(U<H2)}},[]);p.useEffect(()=>{const M=w.current;if(!M)return;const U=new ResizeObserver(I);return U.observe(M),()=>{U.disconnect()}},[I]),p.useEffect(()=>{if(S.current)return;const M=v.current;if(!M)return;const U=()=>{S.current=!0;let $=null;for(const te of W2){const oe=M.querySelector(`[data-button-id="${te}"]`);if(oe){$=oe;break}}if(!$)return;const A=M.getBoundingClientRect(),H=$.getBoundingClientRect();if(!(H.bottom<=A.bottom&&H.top>=A.top)&&A.height>0){const te=H.top-A.top;M.scrollTop+=te}},F=setTimeout(()=>{requestAnimationFrame(U)},100);return()=>{clearTimeout(F)}},[]);const T=p.useCallback(()=>{!o&&!y.current&&(y.current=!0),r==null||r()},[o,r]),j=p.useCallback(()=>{o&&(r==null||r())},[o,r]),V=p.useCallback(()=>{x(M=>!M)},[]),{openDialog:_}=On(),D=p.useCallback(()=>{_(fi.aiImageGeneration)},[_]),C=p.useCallback(()=>{_(fi.aiVideoGeneration)},[_]);return c.jsxDEV(c.Fragment,{children:[y.current&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(G2,{expanded:o,onClose:j},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:191,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:190,columnNumber:11},void 0),c.jsxDEV(Mt,{ref:w,className:ne("unified-toolbar",Yt,{"unified-toolbar--icon-only":h||E,"unified-toolbar--mobile-collapsed":E&&b},e),padding:0,"data-testid":"unified-toolbar",children:[E&&b&&c.jsxDEV("div",{className:"unified-toolbar__collapsed-shortcuts",children:[c.jsxDEV("button",{className:"unified-toolbar__collapsed-btn unified-toolbar__collapsed-btn--toggle",onClick:V,"aria-label":"展开工具栏",children:c.jsxDEV(a0,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:222,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:217,columnNumber:15},void 0),c.jsxDEV("button",{className:"unified-toolbar__collapsed-btn",onClick:D,"aria-label":"AI 图片生成",children:c.jsxDEV(Ac,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:230,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:225,columnNumber:15},void 0),c.jsxDEV("button",{className:"unified-toolbar__collapsed-btn",onClick:C,"aria-label":"AI 视频生成",children:c.jsxDEV(Mc,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:238,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:233,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:215,columnNumber:13},void 0),E&&!b&&c.jsxDEV("button",{className:"unified-toolbar__mobile-toggle unified-toolbar__mobile-toggle--expanded",onClick:V,"aria-label":"收起工具栏",children:c.jsxDEV(ko,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:250,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:245,columnNumber:13},void 0),c.jsxDEV("div",{className:"unified-toolbar__section unified-toolbar__section--fixed-top",children:c.jsxDEV(n2,{embedded:!0,iconMode:h||E,onOpenBackupRestore:a,onOpenCloudSync:l},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:256,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:255,columnNumber:11},void 0),c.jsxDEV("div",{ref:v,className:"unified-toolbar__scrollable",children:c.jsxDEV("div",{className:"unified-toolbar__section",children:c.jsxDEV(v2,{embedded:!0,iconMode:h||E,onOpenMediaLibrary:u,deferredFeaturesEnabled:d,minimizedToolsBarEnabled:m,onEnableToolWindows:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:268,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:267,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:265,columnNumber:11},void 0),c.jsxDEV("div",{className:"unified-toolbar__section unified-toolbar__section--fixed-bottom",children:c.jsxDEV(F2,{projectDrawerOpen:t,onProjectDrawerToggle:n||(()=>{}),toolboxDrawerOpen:i,onToolboxDrawerToggle:s,taskPanelExpanded:o,onTaskPanelToggle:T},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:281,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:280,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:198,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:187,columnNumber:7},void 0)}),X2=e=>n=>{const{globalKeyDown:i,keyDown:s}=n;return n.globalKeyDown=o=>{const r=o.target instanceof HTMLInputElement||o.target instanceof HTMLTextAreaElement||o.target instanceof HTMLElement&&o.target.isContentEditable;if(!r){if(Ot.isHotkey(["mod+k"])(o)){e({openCommandPalette:!0}),o.preventDefault();return}if(Ot.isHotkey(["mod+f"])(o)){e({openCanvasSearch:!0}),o.preventDefault();return}}if(!r&&(J.getMovingPointInBoard(n)||J.isMovingPointInBoard(n))&&!J.hasBeenTextEditing(n)){if(Ot.isHotkey(["mod+shift+e"],{byKey:!0})(o)){Il(n,!0),o.preventDefault();return}if(Ot.isHotkey(["mod+s"],{byKey:!0})(o)){N0(n),o.preventDefault();return}if(Ot.isHotkey(["mod+backspace"])(o)||Ot.isHotkey(["mod+delete"])(o)){e({openCleanConfirm:!0}),o.preventDefault();return}if(Ot.isHotkey(["mod+u"])(o)&&Rc(n),ut(n).length>1){if(Ot.isHotkey(["alt+a"])(o)){mi.alignLeft(n),o.preventDefault();return}if(Ot.isHotkey(["alt+h"])(o)){mi.alignCenter(n),o.preventDefault();return}if(Ot.isHotkey(["alt+d"])(o)){mi.alignRight(n),o.preventDefault();return}if(Ot.isHotkey(["alt+w"])(o)){mi.alignTop(n),o.preventDefault();return}if(Ot.isHotkey(["alt+v"])(o)){mi.alignMiddle(n),o.preventDefault();return}if(Ot.isHotkey(["alt+s"])(o)){mi.alignBottom(n),o.preventDefault();return}if(Ot.isHotkey(["shift+h"])(o)){er.distributeHorizontal(n),o.preventDefault();return}if(Ot.isHotkey(["shift+v"])(o)){er.distributeVertical(n),o.preventDefault();return}if(Ot.isHotkey(["shift+a"])(o)){er.autoArrange(n),o.preventDefault();return}if(Ot.isHotkey(["alt+shift+u"])(o)){Vi.union(n,"zh"),o.preventDefault();return}if(Ot.isHotkey(["alt+shift+s"])(o)){Vi.subtract(n,"zh"),o.preventDefault();return}if(Ot.isHotkey(["alt+shift+i"])(o)){Vi.intersect(n,"zh"),o.preventDefault();return}if(Ot.isHotkey(["alt+shift+e"])(o)){Vi.exclude(n,"zh"),o.preventDefault();return}if(Ot.isHotkey(["alt+shift+f"])(o)){Vi.flatten(n,"zh"),o.preventDefault();return}}if(!o.altKey&&!o.metaKey&&!o.ctrlKey&&Ot.isHotkey(["shift+p"],{byKey:!0})(o)){Wt(n,bn.drawing),Ue.updatePointerType(n,is.pen),e({pointer:is.pen}),o.preventDefault();return}if(!o.altKey&&!o.metaKey&&!o.ctrlKey&&!o.shiftKey){if(o.key==="l"){Wt(n,bn.drawing),Ue.updatePointerType(n,Bt.laserPointer),e({pointer:Bt.laserPointer}),o.preventDefault();return}if(o.key==="Escape"&&J.isPointer(n,Bt.laserPointer)){Ue.updatePointerType(n,dn.selection),e({pointer:dn.selection}),o.preventDefault();return}if(o.key==="h"&&(Ue.updatePointerType(n,dn.hand),e({pointer:dn.hand})),o.key==="v"&&(Ue.updatePointerType(n,dn.selection),e({pointer:dn.selection})),o.key==="q"&&(Ue.updatePointerType(n,Da),e({pointer:Da})),o.key==="m"&&(Wt(n,bn.dnd),Ue.updatePointerType(n,go.mind),e({pointer:go.mind})),o.key==="e"&&(Wt(n,bn.drawing),Ue.updatePointerType(n,Bt.eraser),e({pointer:Bt.eraser})),o.key==="p"&&(Wt(n,bn.drawing),Ue.updatePointerType(n,Bt.feltTipPen),e({pointer:Bt.feltTipPen})),o.key==="a"&&!Ot.isHotkey(["mod+a"])(o)&&ut(n).length===0&&(Wt(n,bn.drawing),Ue.updatePointerType(n,qi.straight),e({pointer:qi.straight})),o.key==="f"&&(Wt(n,bn.drawing),Ue.updatePointerType(n,nf),e({pointer:nf})),o.key==="r"||o.key==="o"||o.key==="t"){const l={r:st.rectangle,o:st.ellipse,t:st.text};l[o.key]===st.text?Wt(n,null):Wt(n,bn.drawing),Ue.updatePointerType(n,l[o.key]),e({pointer:l[o.key]})}o.preventDefault();return}}i(o)},n.keyDown=o=>{if(Ot.isHotkey(["mod+z"],{byKey:!0})(o)){n.undo(),o.preventDefault();return}if(Ot.isHotkey(["mod+shift+z"],{byKey:!0})(o)){n.redo(),o.preventDefault();return}s(o)},n};function sp(e){return e===Cn.square?"square":"round"}function op(e,t){const n=Math.min(t/50,1),i=.2+n*.1,s=6-n*4,o=i+e*(s-i);return Math.max(.5,t*o)}function K2(e,t,n,i,s,o){const r=document.createElementNS("http://www.w3.org/2000/svg","g"),a=sp(o);if(e.length<2){if(e.length===1){const f=op(t[0]??.5,n);if(o===Cn.square){const h=document.createElementNS("http://www.w3.org/2000/svg","rect");h.setAttribute("x",String(e[0][0]-f/2)),h.setAttribute("y",String(e[0][1]-f/2)),h.setAttribute("width",String(f)),h.setAttribute("height",String(f)),h.setAttribute("fill",i),r.appendChild(h)}else{const h=document.createElementNS("http://www.w3.org/2000/svg","circle");h.setAttribute("cx",String(e[0][0])),h.setAttribute("cy",String(e[0][1])),h.setAttribute("r",String(f/2)),h.setAttribute("fill",i),r.appendChild(h)}}return r}const l=vm(e,1,3);if(s===Ii.double){const f=n*.8,h=n*.4,[g,b]=Z2(l,t,h,f);if(g){const x=document.createElementNS("http://www.w3.org/2000/svg","path");x.setAttribute("d",g),x.setAttribute("fill",i),x.setAttribute("stroke","none"),r.appendChild(x)}if(b){const x=document.createElementNS("http://www.w3.org/2000/svg","path");x.setAttribute("d",b),x.setAttribute("fill",i),x.setAttribute("stroke","none"),r.appendChild(x)}return r}const u=G0(s,n),d=s!==_s.solid&&u?u.join(" "):"",m=J2(l,t,n);if(m.length>0){const f=document.createElementNS("http://www.w3.org/2000/svg","path");f.setAttribute("d",m),f.setAttribute("fill",i),f.setAttribute("stroke","none"),d&&(f.setAttribute("fill","none"),f.setAttribute("stroke",i),f.setAttribute("stroke-width",String(n)),f.setAttribute("stroke-dasharray",d),f.setAttribute("stroke-linecap",a),f.setAttribute("stroke-linejoin",a==="square"?"miter":"round")),r.appendChild(f)}return r}function Y2(e,t,n,i){const s=document.createElementNS("http://www.w3.org/2000/svg","g"),o=sp(i);if(e.length<2){if(e.length===1){const b=t*.8,x=t*.4;if(i===Cn.square){const y=document.createElementNS("http://www.w3.org/2000/svg","rect");y.setAttribute("x",String(e[0][0]-x/2)),y.setAttribute("y",String(e[0][1]-b/2-x/2)),y.setAttribute("width",String(x)),y.setAttribute("height",String(x)),y.setAttribute("fill",n),s.appendChild(y);const w=document.createElementNS("http://www.w3.org/2000/svg","rect");w.setAttribute("x",String(e[0][0]-x/2)),w.setAttribute("y",String(e[0][1]+b/2-x/2)),w.setAttribute("width",String(x)),w.setAttribute("height",String(x)),w.setAttribute("fill",n),s.appendChild(w)}else{const y=document.createElementNS("http://www.w3.org/2000/svg","circle");y.setAttribute("cx",String(e[0][0])),y.setAttribute("cy",String(e[0][1]-b/2)),y.setAttribute("r",String(x/2)),y.setAttribute("fill",n),s.appendChild(y);const w=document.createElementNS("http://www.w3.org/2000/svg","circle");w.setAttribute("cx",String(e[0][0])),w.setAttribute("cy",String(e[0][1]+b/2)),w.setAttribute("r",String(x/2)),w.setAttribute("fill",n),s.appendChild(w)}}return s}const r=vm(e,1,3),a=t*.8,l=t*.4,u=[],d=[];for(let b=0;b<r.length;b++){let x,y;b===0?(x=r[1][0]-r[0][0],y=r[1][1]-r[0][1]):b===r.length-1?(x=r[b][0]-r[b-1][0],y=r[b][1]-r[b-1][1]):(x=r[b+1][0]-r[b-1][0],y=r[b+1][1]-r[b-1][1]);const w=Math.sqrt(x*x+y*y);if(w>0){const v=-y/w,S=x/w,k=a/2;u.push([r[b][0]+v*k,r[b][1]+S*k]),d.push([r[b][0]-v*k,r[b][1]-S*k])}else u.push(r[b]),d.push(r[b])}const m=document.createElementNS("http://www.w3.org/2000/svg","path");let f=`M ${u[0][0]} ${u[0][1]}`;for(let b=1;b<u.length;b++){const x=u[b-1],y=u[b],w=(x[0]+y[0])/2,v=(x[1]+y[1])/2;f+=` Q ${x[0]} ${x[1]} ${w} ${v}`}f+=` L ${u[u.length-1][0]} ${u[u.length-1][1]}`,m.setAttribute("d",f),m.setAttribute("fill","none"),m.setAttribute("stroke",n),m.setAttribute("stroke-width",String(l)),m.setAttribute("stroke-linecap",o),m.setAttribute("stroke-linejoin",o==="square"?"miter":"round"),s.appendChild(m);const h=document.createElementNS("http://www.w3.org/2000/svg","path");let g=`M ${d[0][0]} ${d[0][1]}`;for(let b=1;b<d.length;b++){const x=d[b-1],y=d[b],w=(x[0]+y[0])/2,v=(x[1]+y[1])/2;g+=` Q ${x[0]} ${x[1]} ${w} ${v}`}return g+=` L ${d[d.length-1][0]} ${d[d.length-1][1]}`,h.setAttribute("d",g),h.setAttribute("fill","none"),h.setAttribute("stroke",n),h.setAttribute("stroke-width",String(l)),h.setAttribute("stroke-linecap",o),h.setAttribute("stroke-linejoin",o==="square"?"miter":"round"),s.appendChild(h),s}function Z2(e,t,n,i){if(e.length<2)return["",""];const s=[],o=[];for(let l=0;l<e.length;l++){let u,d;l===0?(u=e[1][0]-e[0][0],d=e[1][1]-e[0][1]):l===e.length-1?(u=e[l][0]-e[l-1][0],d=e[l][1]-e[l-1][1]):(u=e[l+1][0]-e[l-1][0],d=e[l+1][1]-e[l-1][1]);const m=Math.sqrt(u*u+d*d);if(m>0){const f=-d/m,h=u/m,g=i/2;s.push([e[l][0]+f*g,e[l][1]+h*g]),o.push([e[l][0]-f*g,e[l][1]-h*g])}else s.push(e[l]),o.push(e[l])}const r=jg(s,t,n),a=jg(o,t,n);return[r,a]}function jg(e,t,n){if(e.length<2)return"";const i=[],s=[];for(let r=0;r<e.length;r++){const a=t[r]??.5,u=op(a,n)/2;let d,m;r===0?(d=e[1][0]-e[0][0],m=e[1][1]-e[0][1]):r===e.length-1?(d=e[r][0]-e[r-1][0],m=e[r][1]-e[r-1][1]):(d=e[r+1][0]-e[r-1][0],m=e[r+1][1]-e[r-1][1]);const f=Math.sqrt(d*d+m*m);if(f>0){const h=-m/f,g=d/f;i.push([e[r][0]+h*u,e[r][1]+g*u]),s.push([e[r][0]-h*u,e[r][1]-g*u])}else i.push(e[r]),s.push(e[r])}let o=`M ${i[0][0]} ${i[0][1]}`;for(let r=1;r<i.length;r++){const a=i[r-1],l=i[r],u=(a[0]+l[0])/2,d=(a[1]+l[1])/2;o+=` Q ${a[0]} ${a[1]} ${u} ${d}`}o+=` L ${i[i.length-1][0]} ${i[i.length-1][1]}`,o+=` L ${s[s.length-1][0]} ${s[s.length-1][1]}`;for(let r=s.length-2;r>=0;r--){const a=s[r+1],l=s[r],u=(a[0]+l[0])/2,d=(a[1]+l[1])/2;o+=` Q ${a[0]} ${a[1]} ${u} ${d}`}return o+=` L ${s[0][0]} ${s[0][1]}`,o+=" Z",o}function J2(e,t,n){if(e.length<2)return"";const i=[],s=[];for(let r=0;r<e.length;r++){const a=t[r]??.5,u=op(a,n)/2;let d,m;r===0?(d=e[1][0]-e[0][0],m=e[1][1]-e[0][1]):r===e.length-1?(d=e[r][0]-e[r-1][0],m=e[r][1]-e[r-1][1]):(d=e[r+1][0]-e[r-1][0],m=e[r+1][1]-e[r-1][1]);const f=Math.sqrt(d*d+m*m);if(f>0){const h=-m/f,g=d/f;i.push([e[r][0]+h*u,e[r][1]+g*u]),s.push([e[r][0]-h*u,e[r][1]-g*u])}else i.push(e[r]),s.push(e[r])}let o=`M ${i[0][0]} ${i[0][1]}`;for(let r=1;r<i.length;r++){const a=i[r-1],l=i[r],u=(a[0]+l[0])/2,d=(a[1]+l[1])/2;o+=` Q ${a[0]} ${a[1]} ${u} ${d}`}o+=` L ${i[i.length-1][0]} ${i[i.length-1][1]}`,o+=` L ${s[s.length-1][0]} ${s[s.length-1][1]}`;for(let r=s.length-2;r>=0;r--){const a=s[r+1],l=s[r],u=(a[0]+l[0])/2,d=(a[1]+l[1])/2;o+=` Q ${a[0]} ${a[1]} ${u} ${d}`}return o+=` L ${s[0][0]} ${s[0][1]}`,o+=" Z",o}class rp extends S0{draw(t){const n=eE(t),i=y0(this.board,t),s=tE(this.board,t),o=nE(this.board,t),r=G0(o,n),a=t.brushShape,l=sp(a);if(t.pressures&&t.pressures.length>0)return K2(t.points,t.pressures,n,i,o,a);if(o===Ii.double)return Y2(t.points,n,i,a);const u={strokeWidth:n,stroke:i,fill:s,fillStyle:"solid",strokeLineDash:o!==_s.solid?r:void 0},d=J.getRoughSVG(this.board).curve(vm(t.points,1,3),u);return iE(d,l),d}canDraw(t){return!0}}class Q2 extends km{constructor(){super()}initializeGenerator(){this.activeGenerator=H0(this.board,{getRectangle:t=>Lc(t),getStrokeWidth:()=>W0,getStrokeOpacity:()=>1,hasResizeHandle:()=>$0(this.board,this.element)}),this.generator=new rp(this.board)}initialize(){super.initialize(),this.initializeGenerator(),this.generator.processDrawing(this.element,this.getElementG())}onContextChanged(t,n){const i=t.board.viewport.zoom!==n.board.viewport.zoom||t.board.viewport.offsetX!==n.board.viewport.offsetX||t.board.viewport.offsetY!==n.board.viewport.offsetY;t.element!==n.element||t.hasThemeChanged?(this.generator.processDrawing(this.element,this.getElementG()),this.activeGenerator.processDrawing(this.element,J.getActiveHost(this.board),{selected:this.selected})):i&&t.selected?this.activeGenerator.processDrawing(this.element,J.getActiveHost(this.board),{selected:this.selected}):(t.selected!==n.selected||t.selected)&&this.activeGenerator.processDrawing(this.element,J.getActiveHost(this.board),{selected:this.selected})}destroy(){var t;super.destroy(),(t=this.activeGenerator)==null||t.destroy()}}class Ty{constructor(t={}){this.defaultOptions={smoothing:.65,velocityWeight:.2,curvatureWeight:.3,minDistance:.2,maxPoints:8,pressureSensitivity:.5,tiltSensitivity:.3,velocityThreshold:800,samplingRate:5},this.points=[],this.lastProcessedTime=0,this.movingAverageVelocity=[],this.velocityWindowSize=3,this.options={...this.defaultOptions,...t}}process(t,n={}){const i=n.timestamp??Date.now();if(this.points.length===0){const l={point:t,timestamp:i,...n};return this.points.push(l),this.lastProcessedTime=i,t}if(i-this.lastProcessedTime<this.options.samplingRate&&i-this.lastProcessedTime<2)return null;const s={point:t,timestamp:i,...n};if(!this.checkDistance(t)&&this.points.length>1&&i-this.lastProcessedTime<32)return null;this.updatePoints(s);const r=this.calculateDynamicParameters(s),a=this.smooth(t,r);return this.lastProcessedTime=i,a}reset(){this.points=[],this.lastProcessedTime=0,this.movingAverageVelocity=[]}updatePoints(t){this.points.push(t),this.points.length>this.options.maxPoints&&this.points.shift()}checkDistance(t){if(this.points.length===0)return!0;const n=this.points[this.points.length-1].point,i=this.getDistance(n,t);let s=this.options.minDistance;if(this.movingAverageVelocity.length>0){const o=this.getAverageVelocity();s*=Math.max(.5,Math.min(1.5,o/200))}return i>=s}calculateDynamicParameters(t){const n=this.calculateVelocity(t);this.updateMovingAverage(n);const i=this.getAverageVelocity(),s={...this.options};if(t.pressure!==void 0){const r=Math.pow(t.pressure,1.2);s.smoothing*=1-r*s.pressureSensitivity*.8}const o=Math.min(i/s.velocityThreshold,1);if(s.velocityWeight=.2+o*.3,s.smoothing*=1+o*.2,t.tiltX!==void 0&&t.tiltY!==void 0){const r=Math.sqrt(t.tiltX**2+t.tiltY**2)/90;s.smoothing*=1+r*s.tiltSensitivity*.7}return s}smooth(t,n){if(this.points.length<2)return t;const i=this.calculateWeights(n),s=i.reduce((r,a)=>r+a,0);if(s===0)return t;const o=[0,0];for(let r=0;r<this.points.length;r++){const a=i[r]/s;o[0]+=this.points[r].point[0]*a,o[1]+=this.points[r].point[1]*a}return o}calculateWeights(t){const n=[],i=this.points.length-1;for(let s=0;s<this.points.length;s++){let o=Math.pow(t.smoothing,(i-s)*.8);if(s<i){const r=this.getPointVelocity(s);o*=1+r*t.velocityWeight*.8}if(s>0&&s<i){const r=this.getPointCurvature(s);o*=1+r*t.curvatureWeight*.7}n.push(o)}return n}getDistance(t,n){return $l(t[0],t[1],n[0],n[1])}calculateVelocity(t){if(this.points.length<2)return 0;const n=this.points[this.points.length-1],i=this.getDistance(n.point,t.point),s=t.timestamp-n.timestamp;return s>0?i/s:0}updateMovingAverage(t){this.movingAverageVelocity.push(t),this.movingAverageVelocity.length>this.velocityWindowSize&&this.movingAverageVelocity.shift()}getAverageVelocity(){return this.movingAverageVelocity.length===0?0:this.movingAverageVelocity.reduce((t,n)=>t+n)/this.movingAverageVelocity.length}getPointVelocity(t){if(t>=this.points.length-1)return 0;const n=this.points[t],i=this.points[t+1],s=this.getDistance(n.point,i.point),o=i.timestamp-n.timestamp;return o>0?s/o:0}getPointCurvature(t){if(t<=0||t>=this.points.length-1)return 0;const n=this.points[t-1].point,i=this.points[t].point,s=this.points[t+1].point,o=this.getDistance(n,i),r=this.getDistance(i,s),a=this.getDistance(n,s),l=(o+r+a)/2;return 4*Math.sqrt(Math.max(0,l*(l-o)*(l-r)*(l-a)))/(o*r*a+1e-4)}}const eV=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:s}=e;let o=!1,r=!1,a=[],l=[],u=null;const d=new rp(e),m=new Ty({smoothing:.7,pressureSensitivity:.6});let f=null,h=null,g=null,b=0;const x=(v=!1)=>{if(!h||v){const S=Cs(e);h={strokeWidth:S.strokeWidth,strokeColor:S.strokeColor,strokeStyle:S.strokeStyle,pencilShape:S.pencilShape,pressureEnabled:S.pressureEnabled}}return h},y=(v,S)=>{if(!S)return 1;if(v.pointerType==="pen"&&v.pressure>0&&v.pressure!==.5)return v.pressure;const N=[v.x,v.y],E=performance.now();if(g&&b>0){const I=N[0]-g[0],T=N[1]-g[1],j=Math.sqrt(I*I+T*T),V=E-b;if(V>0){const _=j/V,D=.2,C=1,U=Math.min(_/1.5,1),F=C-U*(C-D);return g=N,b=E,F}}return g=N,b=E,.6},w=v=>{if(o){const S=J.getPointer(e);r&&(a.push(a[0]),l.length>0&&l.push(l[0]));const k=x();f=rd(S,a,{strokeWidth:k.strokeWidth,strokeColor:k.strokeColor,strokeStyle:k.strokeStyle,brushShape:k.pencilShape,pressures:k.pressureEnabled?l:void 0})}f&&!v&&Se.insertNode(e,f,[e.children.length]),d==null||d.destroy(),f=null,o=!1,a=[],l=[],g=null,b=0,h=null,m.reset()};return e.pointerDown=v=>{const S=Em();if(J.isInPointer(e,S)&&Sm(e)){o=!0;const N=x(!0);u=[v.x,v.y];const E=m.process(u);if(E){const I=Un(e,Rn(e,E[0],E[1]));a.push(I),l.push(y(v,N.pressureEnabled))}}t(v)},e.pointerMove=v=>{if(o){const S=[v.x,v.y];u&&$l(u[0],u[1],S[0],S[1])<8?r=!0:r=!1;const k=m.process(S);if(k){d==null||d.destroy();const N=Un(e,Rn(e,k[0],k[1]));a.push(N);const E=x();l.push(y(v,E.pressureEnabled));const I=J.getPointer(e);f=rd(I,a,{strokeWidth:E.strokeWidth,strokeColor:E.strokeColor,strokeStyle:E.strokeStyle,brushShape:E.pencilShape,pressures:E.pressureEnabled?l:void 0}),d.processDrawing(f,J.getElementTopHost(e))}return}n(v)},e.pointerUp=v=>{w(),i(v)},e.globalPointerUp=v=>{w(!0),s(v)},e},tV=e=>{const t=e,{getDeletedFragment:n,buildFragment:i,insertFragment:s}=t;return t.getDeletedFragment=o=>{const r=sf(t);return r.length&&o.push(...r),n(o)},t.buildFragment=(o,r,a,l)=>{const u=sf(t);if(u.length){const d=X0(t,u,r?[r.x,r.y]:[0,0]);o=K0(o,{text:"",type:Y0.elements,elements:d})}return i(o,r,a,l)},t.insertFragment=(o,r,a)=>{var u;const l=(u=o==null?void 0:o.elements)==null?void 0:u.filter(d=>_t.isFreehand(d));l&&l.length>0&&Z0(t,l,r),s(o,r,a)},t};function nV(e,t,n,i=0){const s=Ae.getCenterPoint(t),o=So(t,Rs);if(i){const r=iV(n,s,-i);let a=o.find(l=>Ae.isHit(Ae.getRectangleByPoints([r,r]),l.rectangle));return a&&(a.cursorClass=Oc(a.cursorClass,i)),a}else return o.find(r=>Ae.isHit(Ae.getRectangleByPoints([n,n]),r.rectangle))}function iV(e,t,n){const i=n*Math.PI/180,s=Math.cos(i),o=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*s-a*o,t[1]+r*o+a*s]}function Dy(e){const t=ut(e);return t.length===1&&_t.isFreehand(t[0])?t[0]:null}function sV(e){return Dy(e)!==null}function oV(e,t){const n=Dy(e);if(!n)return null;const i=Lc(n),s=n.angle||0,o=nV(e,i,t,s);return o?{element:n,rectangle:i,handle:o.handle,cursorClass:o.cursorClass}:null}function rV(e,t,n){const i=n.width/t.width,s=n.height/t.height;return e.map(o=>{const r=o[0]-t.x,a=o[1]-t.y;return[n.x+r*i,n.y+a*s]})}function aV(e,t,n){const{element:i,rectangle:s,handle:o}=t,{startPoint:r,endPoint:a}=n;if(!s)return;const l=a[0]-r[0],u=a[1]-r[1],d=kr(s,o,l,u,Ha(),10),m=rV(i.points,s,d),f=e.children.findIndex(h=>h.id===i.id);f>=0&&Se.setNode(e,{points:m},[f])}const lV=e=>Eo(e,{key:"freehand",canResize:()=>sV(e),hitTest:(t=>oV(e,t)),onResize:(t,n)=>aV(e,t,n)});function _y(e){return e.type==="video"}const qa=1e3;async function ap(){const e=await Ce(()=>import("./clipper-DOGfacWv.js").then(t=>t.c),__vite__mapDeps([0]),import.meta.url);return e.default||e}function La(e){return e.map(t=>({X:Math.round(t[0]*qa),Y:Math.round(t[1]*qa)}))}function Iy(e){return e.map(t=>[t.X/qa,t.Y/qa])}async function cV(e,t,n=of.circle){if(e.length<2)return[];const i=await ap(),s=La(e),o=new i.ClipperOffset;n===of.square?o.AddPath(s,i.JoinType.jtMiter,i.EndType.etOpenSquare):o.AddPath(s,i.JoinType.jtRound,i.EndType.etOpenRound);const r=[];return o.Execute(r,t/2*qa),r.length===0?[]:Iy(r[0])}function lp(e){const t=e.points;if(!t||t.length<3)return!1;const n=t[0],i=t[t.length-1];return Math.hypot(i[0]-n[0],i[1]-n[1])<=10}function uV(e,t=20){if(Rt.isPenPath(e)){if(!e.closed)return null;const n=T0(e);return sE(n,!0,t)}if(_t.isFreehand(e)){const n=e.points;return!n||n.length<3||!lp(e)?null:n}return ee.isDrawElement(e)&&ee.isShapeElement(e)?ee.isImage(e)||ee.isText(e)?null:dV(e,t):null}function dV(e,t=20){const n=e.points;if(!n||n.length<2)return[];const[i,s]=n,o=Math.min(i[0],s[0]),r=Math.min(i[1],s[1]),a=Math.abs(s[0]-i[0]),l=Math.abs(s[1]-i[1]),u=e.shape;if(u==="ellipse"||u==="circle"){const d=o+a/2,m=r+l/2,f=a/2,h=l/2,g=[],b=Math.PI*(3*(f+h)-Math.sqrt((3*f+h)*(f+3*h))),x=Math.max(180,Math.ceil(b/2));for(let y=0;y<x;y++){const w=2*Math.PI*y/x;g.push([d+f*Math.cos(w),m+h*Math.sin(w)])}return g}return[[o,r],[o+a,r],[o+a,r+l],[o,r+l]]}function mV(e,t,n,i){if(e.length<3)throw new Error("Polygon must have at least 3 points");let s=1/0,o=1/0,r=-1/0,a=-1/0;for(const m of e)s=Math.min(s,m[0]),o=Math.min(o,m[1]),r=Math.max(r,m[0]),a=Math.max(a,m[1]);const l=[s,o],u=e.map(m=>({point:[m[0]-l[0],m[1]-l[1]],type:"corner"}));return{id:oE(),type:J0,shape:is.pen,points:[l,[r,a]],anchors:u,closed:!0,strokeColor:t,fill:n,strokeWidth:i}}function pV(e){let t="#333333",n="#FFFFFF",i=2;return Rt.isPenPath(e)?(t=e.strokeColor||t,n=e.fill||n,i=e.strokeWidth||i):_t.isFreehand(e)?(t=e.strokeColor||t,i=e.strokeWidth||i):ee.isDrawElement(e)&&(t=e.strokeColor||t,n=e.fill||n,i=e.strokeWidth||i),{strokeColor:t,fill:n,strokeWidth:i}}async function fV(e,t){const n=await ap(),i=new n.Clipper,s=[];return i.AddPath(La(e),n.PolyType.ptSubject,!0),i.AddPath(La(t),n.PolyType.ptClip,!0),i.Execute(n.ClipType.ctIntersection,s,n.PolyFillType.pftNonZero,n.PolyFillType.pftNonZero),s.length>0}async function hV(e,t,n){const i=uV(t);if(!i||i.length<3||!await fV(i,n))return null;const o=await ap(),r=new o.Clipper,a=[];if(r.AddPath(La(i),o.PolyType.ptSubject,!0),r.AddPath(La(n),o.PolyType.ptClip,!0),!r.Execute(o.ClipType.ctDifference,a,o.PolyFillType.pftNonZero,o.PolyFillType.pftNonZero))return null;const{strokeColor:u,fill:d,strokeWidth:m}=pV(t),f=[];for(const w of a)if(w.length>=3){let v=0;for(let S=0;S<w.length;S++){const k=(S+1)%w.length;v+=w[S].X*w[k].Y,v-=w[k].X*w[S].Y}v=v/2,f.push({path:w,signedArea:v,absArea:Math.abs(v)})}if(f.length===0)return[];const h=[...f].sort((w,v)=>v.absArea-w.absArea),g=h[0],b=h.slice(1);let x;b.length>0?x=gV(g.path,b.map(w=>w.path)):x=g.path;const y=Iy(x);try{return[mV(y,u,d,m)]}catch{return[]}}function gV(e,t){let n=[...e];for(const i of t){let s=1/0,o=0,r=0;for(let l=0;l<n.length;l++)for(let u=0;u<i.length;u++){const d=n[l].X-i[u].X,m=n[l].Y-i[u].Y,f=d*d+m*m;f<s&&(s=f,o=l,r=u)}const a=[];for(let l=0;l<=o;l++)a.push(n[l]);for(let l=0;l<i.length;l++){const u=(r+l)%i.length;a.push(i[u])}a.push(i[r]);for(let l=o;l<n.length;l++)a.push(n[l]);n=a}return n}function Cy(e){if(_t.isFreehand(e)){const s=e.points;if(!s||s.length<2)return null;const o=Ae.getRectangleByPoints(s),r=e.strokeWidth??2,a=r/2;return{x:o.x-a,y:o.y-a,width:o.width+r,height:o.height+r}}if(Rt.isPenPath(e)){const s=e.points;if(!s||s.length<2)return null;const[o,r]=s;return{x:Math.min(o[0],r[0]),y:Math.min(o[1],r[1]),width:Math.abs(r[0]-o[0]),height:Math.abs(r[1]-o[1])}}const t=e.points;if(!t||t.length<2)return null;const[n,i]=t;return{x:Math.min(n[0],i[0]),y:Math.min(n[1],i[1]),width:Math.abs(i[0]-n[0]),height:Math.abs(i[1]-n[1])}}function bV(e,t,n){if(t.length<2)return[];let i=1/0,s=1/0,o=-1/0,r=-1/0;for(const l of t)i=Math.min(i,l[0]-n),s=Math.min(s,l[1]-n),o=Math.max(o,l[0]+n),r=Math.max(r,l[1]+n);const a=[];for(const l of e.children){if(!xV(l))continue;const u=Cy(l);if(!u)continue;const{x:d,y:m,width:f,height:h}=u;d+f>=i&&d<=o&&m+h>=s&&m<=r&&a.push(l)}return a}function xV(e){return Rt.isPenPath(e)?e.closed:_t.isFreehand(e)?lp(e):ee.isDrawElement(e)?ee.isImage(e)||ee.isText(e)||ee.isArrowLine(e)||ee.isVectorLine(e)?!1:ee.isShapeElement(e):!1}function wV(e){if(Rt.isPenPath(e))return e.closed?null:"openPath";if(_t.isFreehand(e))return lp(e)?null:"openPath";if(ee.isDrawElement(e)){if(ee.isImage(e))return"image";if(ee.isText(e))return"text";if(ee.isArrowLine(e))return"arrowLine";if(ee.isVectorLine(e))return"vectorLine";if(ee.isShapeElement(e))return null}return"unsupported"}function yV(e,t,n){if(t.length<2)return[];let i=1/0,s=1/0,o=-1/0,r=-1/0;for(const l of t)i=Math.min(i,l[0]-n),s=Math.min(s,l[1]-n),o=Math.max(o,l[0]+n),r=Math.max(r,l[1]+n);const a=[];for(const l of e.children){const u=Cy(l);if(!u)continue;const{x:d,y:m,width:f,height:h}=u;d+f>=i&&d<=o&&m+h>=s&&m<=r&&wV(l)&&a.push(l)}return a}async function NV(e,t,n,i,s){if(s.length===0)return;const o=await cV(t,n,i);if(o.length<3)return;const r=[],a=[];for(const l of s){const u=await hV(e,l,o);u!==null&&(r.push(l),a.push(...u))}r.length>0&&ad.removeElements(e,r);for(const l of a)Se.insertNode(e,l,[e.children.length])}const vV=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:s}=e;let o=!1;const r=new Set;let a=[];const l=m=>{const f=Un(e,Rn(e,m[0],m[1])),g=Cs(e).eraserWidth/2;e.children.filter(x=>_t.isFreehand(x)).forEach(x=>{!r.has(x.id)&&rE(e,x,f,g)&&(Yo.getElementG(x).style.opacity="0.2",r.add(x.id))})},u=()=>{if(r.size>0){const m=e.children.filter(f=>r.has(f.id));m.length>0&&ad.removeElements(e,m)}},d=async()=>{if(o){if(u(),a.length>=2){const m=Cs(e),f=bV(e,a,m.eraserWidth).filter(g=>!_t.isFreehand(g));if(f.length>0)try{await NV(e,a,m.eraserWidth,m.eraserShape,f)}catch(g){console.error("Precise erase error:",g)}const h=yV(e,a,m.eraserWidth).filter(g=>!_t.isFreehand(g)&&!Ri(g)&&!_y(g)&&!(ee.isDrawElement(g)&&ee.isImage(g)));h.length>0&&ad.removeElements(e,h)}o=!1,r.clear(),a=[]}};return e.pointerDown=m=>{if(J.isInPointer(e,[Bt.eraser])&&Sm(e)){o=!0,r.clear(),a=[];const h=[m.x,m.y],g=Un(e,Rn(e,h[0],h[1]));a.push(g),l(h);return}t(m)},e.pointerMove=m=>{if(o){hm(e,"with-freehand-erase",()=>{const f=[m.x,m.y],h=Un(e,Rn(e,f[0],f[1]));a.push(h),l(f)});return}n(m)},e.pointerUp=m=>{if(o){d();return}i(m)},e.globalPointerUp=m=>{if(o){d();return}s(m)},e},kV="#e91e63",EV=3,Pg=2e3,SV=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:s}=e;let o=!1,r=[];const a=new rp(e),l=new Ty({smoothing:.7,pressureSensitivity:0});let u=null;const d=[],m=()=>J.isPointer(e,Bt.laserPointer),f=()=>{if(!o)return;o=!1;const g=a.g;g?(a.g=void 0,h(g)):a.destroy(),u=null,r=[],l.reset()},h=g=>{g.style.transition=`opacity ${Pg}ms ease-out`,g.style.opacity="1",g.getBoundingClientRect(),g.style.opacity="0";const b=window.setTimeout(()=>{g.remove();const x=d.findIndex(y=>y.g===g);x>=0&&d.splice(x,1)},Pg);d.push({g,timer:b})};return e.pointerDown=g=>{if(m()&&Sm(e)){o=!0;const b=[g.x,g.y],x=l.process(b);if(x){const y=Un(e,Rn(e,x[0],x[1]));r.push(y)}return}t(g)},e.pointerMove=g=>{if(o){const b=[g.x,g.y],x=l.process(b);if(x){a.destroy();const y=Un(e,Rn(e,x[0],x[1]));r.push(y),u=rd(Bt.laserPointer,r,{strokeWidth:EV,strokeColor:kV}),a.processDrawing(u,J.getElementTopHost(e))}return}n(g)},e.pointerUp=g=>{o&&f(),i(g)},e.globalPointerUp=g=>{o&&f(),s(g)},e},TV=e=>{const{getRectangle:t,drawElement:n,isHit:i,isRectangleHit:s,getOneHitElement:o,isMovable:r,isAlign:a}=e;return e.drawElement=l=>_t.isFreehand(l.element)?Q2:n(l),e.getRectangle=l=>_t.isFreehand(l)?Lc(l):t(l),e.isRectangleHit=(l,u)=>_t.isFreehand(l)?aE(e,l,u):s(l,u),e.isHit=(l,u,d)=>_t.isFreehand(l)?lE(e,l,u):i(l,u,d),e.getOneHitElement=l=>l.every(d=>_t.isFreehand(d))?Q0(e,l):o(l),e.isMovable=l=>_t.isFreehand(l)?!0:r(l),e.isAlign=l=>_t.isFreehand(l)?!0:a(l),e.setPluginOptions(ex,{customGeometryTypes:[cE]}),SV(lV(vV(tV(eV(e)))))};class DV extends km{constructor(){super()}initializeGenerator(){this.activeGenerator=H0(this.board,{getRectangle:t=>zc(t),getStrokeWidth:()=>W0,getStrokeOpacity:()=>1,hasResizeHandle:()=>$0(this.board,this.element)}),this.generator=new s2(this.board)}initialize(){super.initialize(),this.initializeGenerator(),this.generator.processDrawing(this.element,this.getElementG()),this.selected&&this.activeGenerator.processDrawing(this.element,J.getActiveHost(this.board),{selected:this.selected})}onContextChanged(t,n){const i=t.board.viewport.zoom!==n.board.viewport.zoom||t.board.viewport.offsetX!==n.board.viewport.offsetX||t.board.viewport.offsetY!==n.board.viewport.offsetY;t.element!==n.element||t.hasThemeChanged?(this.generator.processDrawing(this.element,this.getElementG()),this.activeGenerator.processDrawing(this.element,J.getActiveHost(this.board),{selected:this.selected})):i&&t.selected?this.activeGenerator.processDrawing(this.element,J.getActiveHost(this.board),{selected:this.selected}):(t.selected!==n.selected||t.selected)&&this.activeGenerator.processDrawing(this.element,J.getActiveHost(this.board),{selected:this.selected})}destroy(){var t;super.destroy(),(t=this.activeGenerator)==null||t.destroy()}}const _V=e=>e,IV=e=>{const t=e,{getDeletedFragment:n,buildFragment:i,insertFragment:s}=t;return t.getDeletedFragment=o=>{const r=rf(t);return r.length&&o.push(...r),n(o)},t.buildFragment=(o,r,a,l)=>{const u=rf(t);if(u.length){const d=X0(t,u,r?[r.x,r.y]:[0,0]);o=K0(o,{text:"",type:Y0.elements,elements:d})}return i(o,r,a,l)},t.insertFragment=(o,r,a)=>{var u;const l=(u=o==null?void 0:o.elements)==null?void 0:u.filter(d=>Rt.isPenPath(d));l&&l.length>0&&Z0(t,l,r),s(o,r,a)},t};function CV(e,t,n,i=0){const s=Ae.getCenterPoint(t),o=So(t,Rs);if(i){const r=jV(n,s,-i);let a=o.find(l=>Ae.isHit(Ae.getRectangleByPoints([r,r]),l.rectangle));return a&&(a.cursorClass=Oc(a.cursorClass,i)),a}else return o.find(r=>Ae.isHit(Ae.getRectangleByPoints([n,n]),r.rectangle))}function jV(e,t,n){const i=n*Math.PI/180,s=Math.cos(i),o=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*s-a*o,t[1]+r*o+a*s]}function jy(e){const t=ut(e);return t.length===1&&Rt.isPenPath(t[0])?t[0]:null}function PV(e){return jy(e)!==null}function AV(e,t){const n=jy(e);if(!n)return null;const i=zc(n),s=n.angle||0,o=CV(e,i,t,s);return o?{element:n,rectangle:i,handle:o.handle,cursorClass:o.cursorClass}:null}function MV(e,t,n){return e.map(i=>({...i,point:[i.point[0]*t,i.point[1]*n],handleIn:i.handleIn?[i.handleIn[0]*t,i.handleIn[1]*n]:void 0,handleOut:i.handleOut?[i.handleOut[0]*t,i.handleOut[1]*n]:void 0}))}function VV(e,t,n){const{element:i,rectangle:s,handle:o}=t,{startPoint:r,endPoint:a}=n;if(!s)return;const l=a[0]-r[0],u=a[1]-r[1],d=kr(s,o,l,u,Ha(),10),m=d.width/s.width,f=d.height/s.height,h=MV(i.anchors,m,f),b=[[d.x,d.y],[d.x+d.width,d.y+d.height]],x=e.children.findIndex(y=>y.id===i.id);x>=0&&Se.setNode(e,{points:b,anchors:h},[x])}const UV=e=>Eo(e,{key:"pen-path",canResize:()=>PV(e),hitTest:(t=>AV(e,t)),onResize:(t,n)=>VV(e,t,n)}),RV=e=>{const{getRectangle:t,drawElement:n,isHit:i,isRectangleHit:s,getOneHitElement:o,isMovable:r,isAlign:a}=e;return e.drawElement=l=>Rt.isPenPath(l.element)?DV:n(l),e.getRectangle=l=>Rt.isPenPath(l)?zc(l):t(l),e.isRectangleHit=(l,u)=>Rt.isPenPath(l)?uE(e,l,u):s(l,u),e.isHit=(l,u,d)=>Rt.isPenPath(l)?dE(e,l,u):i(l,u,d),e.getOneHitElement=l=>l.every(d=>Rt.isPenPath(d))?Q0(e,l):o(l),e.isMovable=l=>Rt.isPenPath(l)?!0:r(l),e.isAlign=l=>Rt.isPenPath(l)?!0:a(l),e.setPluginOptions(ex,{customGeometryTypes:[J0]}),UV(IV(_V(d2(e))))},Py=new WeakMap,Ag=e=>!!Py.get(e),Ay=(e,t)=>{Py.set(e,t)},qV=e=>n=>{const{pointerDown:i}=n;return n.pointerDown=s=>{af(s)&&!Ag(n)&&(Ay(n,!0),e({isPencilMode:!0})),!(Ag(n)&&!af(s))&&i(s)},n},LV=()=>{const e=Zt(),{appState:t,setAppState:n}=On();return c.jsxDEV(c.Fragment,{children:t.isPencilMode&&c.jsxDEV("div",{className:"pencil-mode-toolbar",children:c.jsxDEV(Ne,{type:"button",visible:!0,tooltip:"X Pencil","aria-label":"Arrow",label:"Pencil X",onPointerDown:()=>{n({...t,isPencilMode:!1}),Ay(e,!1)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-mode-toolbar.tsx",lineNumber:13,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-mode-toolbar.tsx",lineNumber:12,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-mode-toolbar.tsx",lineNumber:10,columnNumber:5},void 0)},OV="#f5f5f5";function zV(e,t){const n=Math.max(4,Math.min(256,t)),i=n+4,s=i/2,o=n/2,r=`<svg width="${i}" height="${i}" viewBox="0 0 ${i} ${i}" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
61
|
+
<circle cx="${s}" cy="${s}" r="${o}" fill="${e}" stroke="#fff" stroke-width="1"/>
|
|
62
|
+
<circle cx="${s}" cy="${s}" r="${o}" fill="none" stroke="#333" stroke-width="0.5" stroke-opacity="0.5"/>
|
|
63
|
+
</svg>`;return`url('data:image/svg+xml;base64,${btoa(r)}') ${s} ${s}, crosshair`}function BV(e,t){const n=Math.max(4,Math.min(256,t)),i=n+4,s=i/2,o=n/2,r=`<svg width="${i}" height="${i}" viewBox="0 0 ${i} ${i}" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
64
|
+
<rect x="${s-o}" y="${s-o}" width="${n}" height="${n}" fill="${e}" stroke="#fff" stroke-width="1"/>
|
|
65
|
+
<rect x="${s-o}" y="${s-o}" width="${n}" height="${n}" fill="none" stroke="#333" stroke-width="0.5" stroke-opacity="0.5"/>
|
|
66
|
+
</svg>`;return`url('data:image/svg+xml;base64,${btoa(r)}') ${s} ${s}, crosshair`}function Mg(e,t,n=Cn.circle){return n===Cn.square?BV(e,t):zV(e,t)}function My(e){return Em().includes(e)&&e!==Bt.eraser}function Vy(e){return e===Bt.eraser}function ga(e,t){var r;const n=document.querySelector(".plait-board-container"),i=n==null?void 0:n.querySelector(".board-host-svg");if(!i)return;const s=Cs(e),o=((r=e.viewport)==null?void 0:r.zoom)||1;if(My(t)){const a=s.strokeWidth*o,l=Mg(s.strokeColor,a,s.pencilShape);i.style.cursor=l}else if(Vy(t)){const a=s.eraserWidth*o,l=Mg(OV,a,s.eraserShape);i.style.cursor=l}else t===st.text?i.style.cursor="crosshair":i.style.cursor=""}function FV({board:e,pointer:t}){const n=p.useRef(1),i=p.useRef(null);return p.useEffect(()=>{var r;if(!e)return;ga(e,t),n.current=((r=e.viewport)==null?void 0:r.zoom)||1;let o=null;return(My(t)||Vy(t))&&(o=setInterval(()=>{var l;const a=((l=e.viewport)==null?void 0:l.zoom)||1;Math.abs(a-n.current)>.01&&(n.current=a,ga(e,t))},100)),()=>{o&&clearInterval(o),i.current&&cancelAnimationFrame(i.current);const a=document.querySelector(".plait-board-container"),l=a==null?void 0:a.querySelector(".board-host-svg");l&&(l.style.cursor="")}},[e,t]),{updateCursor:p.useCallback(()=>{e&&ga(e,t)},[e,t])}}function Nl(e,t){ga(e,t)}function Vg(e){ga(e,Bt.eraser)}const GV=({color:e,size:t,zoom:n,shape:i=Cn.circle})=>{const s=t*n,o=Math.max(4,Math.min(256,s)),r=i===Cn.circle?"50%":"0";return c.jsxDEV("div",{className:"cursor-preview-dot",style:{width:o,height:o,backgroundColor:e,borderRadius:r}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:55,columnNumber:5},void 0)},HV=()=>{var $;const e=Zt(),{appState:t}=On(),{t:n}=We(),i=p.useRef(null);qc(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const s=Cs(e),[o,r]=p.useState(s.strokeWidth),[a,l]=p.useState(s.strokeColor),[u,d]=p.useState(s.strokeStyle),[m,f]=p.useState(s.pencilShape),[h,g]=p.useState(s.pressureEnabled),[b,x]=p.useState(!1),[y,w]=p.useState(!1),[v,S]=p.useState(String(s.strokeWidth)),[k,N]=p.useState(!1),I=Em().includes(t.pointer)&&t.pointer!==Bt.eraser;p.useEffect(()=>{const A=Cs(e);r(A.strokeWidth),l(A.strokeColor),d(A.strokeStyle),f(A.pencilShape),g(A.pressureEnabled),S(String(A.strokeWidth))},[e,t.pointer]);const T=p.useCallback(A=>{S(A.target.value)},[]),j=p.useCallback(()=>{const A=parseInt(v,10);!isNaN(A)&&A>=1&&A<=100?(r(A),lf(e,A),Nl(e,t.pointer)):S(String(o))},[e,v,o,t.pointer]),V=p.useCallback(A=>{A.key==="Enter"?(j(),A.target.blur()):A.key==="Escape"&&(S(String(o)),A.target.blur())},[j,o]),_=p.useCallback(A=>{l(A),mE(e,A),Nl(e,t.pointer)},[e,t.pointer]),D=p.useCallback(A=>{d(A),pE(e,A)},[e]),C=p.useCallback(A=>{f(A),fE(e,A),Nl(e,t.pointer)},[e,t.pointer]),M=p.useCallback(A=>{g(A),hE(e,A)},[e]);if(!I)return null;const U=J.getBoardContainer(e),F=(($=e.viewport)==null?void 0:$.zoom)??1;return c.jsxDEV("div",{className:"pencil-settings-toolbar",onMouseEnter:()=>N(!0),onMouseLeave:()=>N(!1),children:[k&&c.jsxDEV(GV,{color:a||cf,size:o,zoom:F,shape:m},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:207,columnNumber:9},void 0),c.jsxDEV(Mt,{ref:i,padding:1,children:c.jsxDEV(Kt.Row,{gap:0,align:"center",children:[c.jsxDEV(Ft,{sideOffset:12,open:b,onOpenChange:x,placement:"bottom",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:"pencil-color-button",type:"button",visible:!0,tooltip:n("toolbar.strokeColor"),"aria-label":n("toolbar.strokeColor"),onPointerUp:()=>x(!b),children:c.jsxDEV("div",{className:"pencil-color-preview",style:{backgroundColor:a||cf}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:232,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:224,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:223,columnNumber:13},void 0),c.jsxDEV(Ht,{container:U,children:c.jsxDEV(Mt,{padding:4,className:ne("stroke-setting"),children:c.jsxDEV(fo,{value:a,onChange:_},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:240,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:239,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:238,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:217,columnNumber:11},void 0),c.jsxDEV("div",{className:"pencil-stroke-style-picker",children:[c.jsxDEV(Ne,{className:ne("pencil-stroke-style-button",{active:u===Ii.solid}),type:"button",visible:!0,icon:c.jsxDEV(t0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:256,columnNumber:21},void 0),tooltip:"实线","aria-label":"实线",onPointerUp:()=>D(Ii.solid)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:250,columnNumber:13},void 0),c.jsxDEV(Ne,{className:ne("pencil-stroke-style-button",{active:u===Ii.dashed}),type:"button",visible:!0,icon:c.jsxDEV(n0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:269,columnNumber:21},void 0),tooltip:"虚线","aria-label":"虚线",onPointerUp:()=>D(Ii.dashed)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:263,columnNumber:13},void 0),c.jsxDEV(Ne,{className:ne("pencil-stroke-style-button",{active:u===Ii.dotted}),type:"button",visible:!0,icon:c.jsxDEV(i0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:282,columnNumber:21},void 0),tooltip:"点线","aria-label":"点线",onPointerUp:()=>D(Ii.dotted)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:276,columnNumber:13},void 0),c.jsxDEV(Ne,{className:ne("pencil-stroke-style-button",{active:u===Ii.double}),type:"button",visible:!0,icon:c.jsxDEV(gE,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:295,columnNumber:21},void 0),tooltip:"双层线","aria-label":"双层线",onPointerUp:()=>D(Ii.double)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:289,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:249,columnNumber:11},void 0),c.jsxDEV("div",{className:"pencil-shape-picker",children:[c.jsxDEV(nn,{content:n("toolbar.pencilShape.circle"),children:c.jsxDEV(Yl,{variant:"text",size:"small",className:`pencil-shape-button ${m===Cn.circle?"active":""}`,onClick:()=>C(Cn.circle),children:c.jsxDEV(tx,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:315,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:307,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:306,columnNumber:13},void 0),c.jsxDEV(nn,{content:n("toolbar.pencilShape.square"),children:c.jsxDEV(Yl,{variant:"text",size:"small",className:`pencil-shape-button ${m===Cn.square?"active":""}`,onClick:()=>C(Cn.square),children:c.jsxDEV(nx,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:327,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:319,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:318,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:305,columnNumber:11},void 0),c.jsxDEV(Ft,{sideOffset:12,open:y,onOpenChange:w,placement:"bottom",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:"pencil-width-button",type:"button",visible:!0,tooltip:n("toolbar.strokeWidth"),"aria-label":n("toolbar.strokeWidth"),onPointerUp:()=>w(!y),children:c.jsxDEV("svg",{className:"pencil-width-icon",viewBox:"0 0 24 24",children:[c.jsxDEV("line",{x1:"4",y1:"8",x2:"20",y2:"8",strokeWidth:"1",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:349,columnNumber:19},void 0),c.jsxDEV("line",{x1:"4",y1:"12",x2:"20",y2:"12",strokeWidth:"2",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:357,columnNumber:19},void 0),c.jsxDEV("line",{x1:"4",y1:"16",x2:"20",y2:"16",strokeWidth:"3",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:365,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:348,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:340,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:339,columnNumber:13},void 0),c.jsxDEV(Ht,{container:U,children:c.jsxDEV(Mt,{padding:4,className:ne("stroke-width-picker"),children:c.jsxDEV(Kt.Row,{gap:3,align:"center",style:{padding:"4px 8px"},children:[c.jsxDEV("div",{className:"stroke-width-value",style:{minWidth:"40px",fontSize:"13px",fontWeight:500,color:"var(--color-on-surface)"},children:[o,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:383,columnNumber:19},void 0),c.jsxDEV("div",{className:"stroke-width-slider-wrapper",style:{flex:1,minWidth:"160px"},children:c.jsxDEV(_c,{value:o,min:1,max:100,step:1,onChange:A=>{const H=A;r(H),S(String(H)),lf(e,H),Nl(e,t.pointer)},label:!1},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:398,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:394,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:378,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:377,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:376,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:333,columnNumber:11},void 0),c.jsxDEV("div",{className:"pencil-width-input-wrapper",children:[c.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:v,onChange:T,onBlur:j,onKeyDown:V,className:"pencil-width-input"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:420,columnNumber:13},void 0),c.jsxDEV("span",{className:"pencil-width-input-unit",children:"px"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:430,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:419,columnNumber:11},void 0),c.jsxDEV(nn,{content:"压力感应:支持压感笔;鼠标/触控板使用速度模拟(慢=粗,快=细)",children:c.jsxDEV("div",{className:"pencil-pressure-switch",children:c.jsxDEV(bE,{size:"small",value:h,onChange:M},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:436,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:435,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:434,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:215,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:214,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:200,columnNumber:5},void 0)},WV=({color:e,size:t,zoom:n,shape:i=Cn.circle})=>{const s=t*n,o=Math.max(4,Math.min(256,s)),r=i===Cn.circle?"50%":"0";return c.jsxDEV("div",{className:"cursor-preview-dot",style:{width:o,height:o,backgroundColor:e,borderRadius:r}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/cursor-preview.tsx",lineNumber:34,columnNumber:5},void 0)},$V=()=>c.jsxDEV("svg",{className:"size-picker-icon",viewBox:"0 0 24 24",children:[c.jsxDEV("line",{x1:"4",y1:"8",x2:"20",y2:"8",strokeWidth:"1",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:36,columnNumber:5},void 0),c.jsxDEV("line",{x1:"4",y1:"12",x2:"20",y2:"12",strokeWidth:"2",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:37,columnNumber:5},void 0),c.jsxDEV("line",{x1:"4",y1:"16",x2:"20",y2:"16",strokeWidth:"3",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:38,columnNumber:5},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:35,columnNumber:3},void 0),XV=({size:e,onSizeChange:t,presets:n,previewColor:i,title:s,container:o,icon:r})=>{const{t:a}=We(),[l,u]=p.useState(!1),[d,m]=p.useState(String(e));an.useEffect(()=>{m(String(e))},[e]);const f=p.useCallback(b=>{m(b.target.value)},[]),h=p.useCallback(()=>{const b=parseInt(d,10);!isNaN(b)&&b>=1?t(b):m(String(e))},[d,e,t]),g=p.useCallback(b=>{b.key==="Enter"?(h(),b.target.blur()):b.key==="Escape"&&(m(String(e)),b.target.blur())},[h,e]);return c.jsxDEV(c.Fragment,{children:[c.jsxDEV(Ft,{sideOffset:12,open:l,onOpenChange:u,placement:"bottom",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV(Ne,{className:"size-picker-button",type:"button",visible:!0,tooltip:s,"aria-label":s,onPointerUp:()=>u(!l),children:r||c.jsxDEV($V,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:104,columnNumber:22},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:96,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:95,columnNumber:9},void 0),c.jsxDEV(Ht,{container:o,children:c.jsxDEV(Mt,{padding:4,className:ne("size-picker-popover"),children:c.jsxDEV(Kt.Row,{gap:3,align:"center",style:{padding:"4px 8px"},children:[c.jsxDEV("div",{className:"size-picker-value",style:{minWidth:"40px",fontSize:"13px",fontWeight:500,color:"var(--color-on-surface)"},children:[e,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:113,columnNumber:15},void 0),c.jsxDEV("div",{className:"size-picker-slider-wrapper",style:{flex:1,minWidth:"160px"},children:c.jsxDEV(_c,{value:e,min:1,max:Math.max(256,...n),step:1,onChange:b=>{const x=b;m(String(x)),t(x)},label:!1},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:117,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:116,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:112,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:108,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:107,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:89,columnNumber:7},void 0),c.jsxDEV("div",{className:"size-picker-input-wrapper",children:[c.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:d,onChange:f,onBlur:h,onKeyDown:g,className:"size-picker-input"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:137,columnNumber:9},void 0),c.jsxDEV("span",{className:"size-picker-input-unit",children:"px"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:147,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:136,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:87,columnNumber:5},void 0)},KV=[16,32,48,64,96,128,192,256],YV="#f5f5f5",ZV=()=>{var x;const e=Zt(),{appState:t}=On(),{t:n}=We(),i=p.useRef(null);qc(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const s=Cs(e),[o,r]=p.useState(s.eraserWidth),[a,l]=p.useState(s.eraserShape),[u,d]=p.useState(!1),m=t.pointer===Bt.eraser;p.useEffect(()=>{const y=Cs(e);r(y.eraserWidth),l(y.eraserShape)},[e,t.pointer]);const f=p.useCallback(y=>{r(y),xE(e,y),Vg(e)},[e]),h=p.useCallback(y=>{l(y),wE(e,y),Vg(e)},[e]);if(!m)return null;const g=J.getBoardContainer(e),b=((x=e.viewport)==null?void 0:x.zoom)??1;return c.jsxDEV("div",{className:"pencil-settings-toolbar eraser-settings-toolbar",onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),children:[u&&c.jsxDEV(WV,{color:YV,size:o,zoom:b,shape:a},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:106,columnNumber:9},void 0),c.jsxDEV(Mt,{ref:i,padding:1,children:c.jsxDEV(Kt.Row,{gap:1,align:"center",children:[c.jsxDEV(XV,{size:o,onSizeChange:f,presets:KV,previewColor:"#999",title:n("toolbar.eraserSize"),container:g},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:115,columnNumber:11},void 0),c.jsxDEV("div",{className:"toolbar-divider"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:124,columnNumber:11},void 0),c.jsxDEV("div",{className:"eraser-shape-picker",children:[c.jsxDEV(nn,{content:n("toolbar.eraserShape.circle"),children:c.jsxDEV(Yl,{variant:"text",size:"small",className:`eraser-shape-button ${a===Cn.circle?"active":""}`,onClick:()=>h(Cn.circle),children:c.jsxDEV(tx,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:136,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:128,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:127,columnNumber:13},void 0),c.jsxDEV(nn,{content:n("toolbar.eraserShape.square"),children:c.jsxDEV(Yl,{variant:"text",size:"small",className:`eraser-shape-button ${a===Cn.square?"active":""}`,onClick:()=>h(Cn.square),children:c.jsxDEV(nx,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:148,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:140,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:139,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:126,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:114,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:113,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:99,columnNumber:5},void 0)},JV=[{icon:c.jsxDEV(NE,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:37,columnNumber:11},void 0),type:"corner",titleKey:"toolbar.anchorCorner"},{icon:c.jsxDEV(vE,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:42,columnNumber:11},void 0),type:"smooth",titleKey:"toolbar.anchorSmooth"},{icon:c.jsxDEV(kE,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:47,columnNumber:11},void 0),type:"symmetric",titleKey:"toolbar.anchorSymmetric"}],QV=()=>{const e=Zt(),{appState:t}=On(),{t:n}=We(),i=p.useRef(null);qc(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const s=od(e),[o,r]=p.useState(s.defaultAnchorType),a=t.pointer===is.pen&&e.pointer===is.pen;p.useEffect(()=>{const u=od(e);r(u.defaultAnchorType)},[e,t.pointer,e.pointer]);const l=p.useCallback(u=>{r(u),yE(e,u)},[e]);return a?c.jsxDEV("div",{className:"pen-settings-toolbar",children:c.jsxDEV(Mt,{ref:i,padding:1,children:c.jsxDEV(Kt.Row,{gap:0,align:"center",children:c.jsxDEV("div",{className:"pen-anchor-type-picker",children:JV.map(u=>c.jsxDEV(Ne,{className:ne("pen-anchor-type-button",{active:o===u.type}),type:"button",visible:!0,icon:u.icon,tooltip:n(u.titleKey),"aria-label":n(u.titleKey),onPointerUp:()=>l(u.type)},u.type,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:101,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:99,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:97,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:93,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:92,columnNumber:5},void 0):null},eU=({container:e})=>{const{appState:t,setAppState:n}=On(),{t:i}=We(),s=Zt();return c.jsxDEV(ix,{open:t.openCleanConfirm,container:e,title:i("cleanConfirm.title"),description:i("cleanConfirm.description"),confirmText:i("cleanConfirm.ok"),cancelText:i("cleanConfirm.cancel"),danger:!0,onOpenChange:o=>{n({...t,openCleanConfirm:o})},onConfirm:()=>{s.deleteFragment(s.children)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/clean-confirm/clean-confirm.tsx",lineNumber:15,columnNumber:5},void 0)},Ug=e=>{const{appState:t}=e;return t&&t.linkState&&t.linkState.isHovering},Rg=e=>{const{appState:t}=e;return t&&t.linkState&&t.linkState.isEditing},tU=e=>n=>{const{pointerMove:i}=n;let s=null,o=null;return n.pointerMove=r=>{(J.isPointer(n,dn.selection)||J.isPointer(n,dn.hand))&&!Ta(n)&&!Yb(n)&&!Ug(n)&&!Rg(n)&&hm(n,"with-text-link",()=>{const a=r.target.closest(".plait-board-link");if(a&&a!==s){const l=a.closest(".plait-text-container"),u=Ui.toSlateNode(void 0,l),d=Ui.toSlateNode(void 0,a);s=a,e({linkState:{targetDom:a,targetElement:d,editor:u,isEditing:!1,isHovering:!1,isHoveringOrigin:!0}}),clearTimeout(o)}else!a&&s&&(o=setTimeout(()=>{!Ug(n)&&!Rg(n)&&e({linkState:null})},300),s=null)}),i(r)},n},nU=()=>{var x,y,w,v;const[e,t]=p.useState(""),{appState:n,setAppState:i}=On(),s=Zt(),{refs:o,floatingStyles:r}=cm({placement:"top",middleware:[um(20),dm()]}),a=n.linkState,l=((x=n.linkState)==null?void 0:x.targetDom)||null,u=((y=n.linkState)==null?void 0:y.isEditing)||!1,d=((w=n.linkState)==null?void 0:w.isHoveringOrigin)||!1,m=((v=n.linkState)==null?void 0:v.isHovering)||!1,f=u||d||m,h=p.useRef(n.linkState);p.useEffect(()=>{h.current=n.linkState,n.linkState?t(n.linkState.targetElement.url):t("")},[n.linkState]),p.useEffect(()=>{if(l){const S=l.getBoundingClientRect();o.setPositionReference({getBoundingClientRect(){return{x:S.x,y:S.y,width:S.width,height:S.height,top:S.y,left:S.x,right:S.x+S.width,bottom:S.y+S.height}}})}},[s.viewport,l,o]);const g=p.useRef();g.current=S=>{if(o.floating.current&&!o.floating.current.contains(S.target)){if(h.current){const k=Qo.getLinkElement(h.current.editor);k&&!k[0].url.trim()&&Qo.unwrapLink(h.current.editor)}i({...n,linkState:null})}},p.useEffect(()=>{const S=k=>{var N;(N=g.current)==null||N.call(g,k)};return document.addEventListener("mousedown",S),()=>{document.removeEventListener("mousedown",S)}},[]);const b=()=>{if(!a)return;if(e!==a.targetElement.url){const k=a.editor,N=a.targetElement,E=Ui.findPath(k,N);du.setNodes(k,{url:e},{at:E})}const S=Qo.getLinkElement(a.editor);S&&i({...n,linkState:{...n.linkState,targetElement:S[0],isEditing:!1,isHoveringOrigin:!0}})};return f&&c.jsxDEV(Mt,{ref:o.setFloating,style:r,padding:1,className:ne("link-popup"),onPointerEnter:()=>{!m&&n.linkState&&i({...n,linkState:{...n.linkState,isHovering:!0}})},onPointerLeave:()=>{!u&&n.linkState&&i({...n,linkState:{...n.linkState,isHovering:!1}})},children:c.jsxDEV(Kt.Row,{gap:1,align:"center",children:u?c.jsxDEV(c.Fragment,{children:[c.jsxDEV("input",{type:"text",value:e,onChange:S=>{t(S.target.value)},onKeyDown:S=>{S.key==="Enter"&&b()},className:"link-popup__input",autoFocus:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:151,columnNumber:15},void 0),c.jsxDEV(Ne,{type:"icon",visible:!0,icon:c.jsxDEV(Xl,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:168,columnNumber:23},void 0),tooltip:"Delete link","aria-label":"Delete link",onPointerDown:()=>{if(!a)return;const S=a.editor,k=a.targetElement,N=Ui.findPath(S,k);du.unwrapNodes(S,{at:N}),i({...n,linkState:null})}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:165,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:150,columnNumber:13},void 0):c.jsxDEV(c.Fragment,{children:[c.jsxDEV("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"link-popup__link",children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:188,columnNumber:15},void 0),c.jsxDEV(Ne,{className:"link-popup__edit",type:"icon",visible:!0,icon:c.jsxDEV(vr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:200,columnNumber:23},void 0),tooltip:"Edit link","aria-label":"Edit link",onPointerDown:({event:S})=>{S.preventDefault(),n.linkState&&i({...n,linkState:{...n.linkState,isEditing:!0}})}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:196,columnNumber:15},void 0),c.jsxDEV(Ne,{type:"icon",visible:!0,icon:c.jsxDEV(Xl,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:218,columnNumber:23},void 0),tooltip:"Delete link","aria-label":"Delete link",onPointerDown:()=>{if(!a)return;const S=a.editor,k=a.targetElement,N=Ui.findPath(S,k);du.unwrapNodes(S,{at:N}),i({...n,linkState:null})}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:215,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:187,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:148,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:120,columnNumber:7},void 0)},ua={autoTrack:!1,debounceTime:500,retryPolicy:{maxRetries:3,retryInterval:2e3,exponentialBackoff:!0},cacheConfig:{maxCacheSize:100,cacheTTL:3600*1e3,storageKey:"tracking_cache"},logLevel:"error",batchConfig:{batchSize:10,batchTimeout:5e3,enabled:!0},excludedSelectors:["nav","header","footer","[data-track-ignore]"],devMode:!1};function iU(){return"0.6.49"}function qg(e){return{...ua,...e,retryPolicy:{...ua.retryPolicy,...e.retryPolicy||{}},cacheConfig:{...ua.cacheConfig,...e.cacheConfig||{}},batchConfig:{...ua.batchConfig,...e.batchConfig||{}}}}class sU{isAvailable(){return Tt.isAnalyticsEnabled()}async track(t){if(!this.isAvailable())return;const n={...t.params,version:t.metadata.version,url:t.metadata.url,timestamp:t.metadata.timestamp,sessionId:t.metadata.sessionId,eventType:t.metadata.eventType};t.metadata.viewport&&(n.viewport=`${t.metadata.viewport.width}x${t.metadata.viewport.height}`);try{Tt.track(t.eventName,n)}catch(i){throw console.error("[Tracking] PostHog track failed:",i),i}}async trackBatch(t){const n=[];for(const i of t)try{await this.track(i),n.push({success:!0})}catch(s){n.push({success:!1,error:s})}return n}getSDKInfo(){return{available:this.isAvailable(),version:this.isAvailable()?"PostHog JS":void 0}}}const Lg=new sU;class oU{constructor(t){this.queue=[],this.timer=null,this.uploading=!1,this.config=t}enqueue(t){if(!this.config.enabled){this.uploadImmediate(t);return}this.queue.push(t),this.timer||(this.timer=setTimeout(()=>{this.flush()},this.config.batchTimeout)),this.queue.length>=this.config.batchSize&&this.flush()}async flush(){if(this.timer&&(clearTimeout(this.timer),this.timer=null),this.queue.length===0||this.uploading)return;this.uploading=!0;const t=[...this.queue];this.queue=[];try{const n=await Lg.trackBatch(t),i=n.filter(s=>!s.success);if(i.length>0){console.error(`Batch upload: ${i.length}/${t.length} events failed`);const s=t.filter((o,r)=>!n[r].success);this.requeueFailedEvents(s)}}catch(n){console.error("Batch upload failed:",n),this.requeueFailedEvents(t)}finally{this.uploading=!1}}async uploadImmediate(t){try{await Lg.track(t)}catch(n){console.error("Immediate upload failed:",n)}}requeueFailedEvents(t){this.queue=[...t,...this.queue]}getQueueSize(){return this.queue.length}isUploading(){return this.uploading}updateConfig(t){this.config={...this.config,...t},!this.config.enabled&&this.queue.length>0&&this.flush()}clear(){this.timer&&(clearTimeout(this.timer),this.timer=null),this.queue=[],this.uploading=!1}flushOnUnload(){this.queue.length!==0&&this.flush()}}class rU{constructor(t=500){this.debounceMap=new WeakMap,this.globalDebounceMap=new Map,this.globalDebounceTime=200,this.debounceTime=t}shouldTrack(t,n,i=!1){const s=Date.now(),o=this.globalDebounceMap.get(n);if(o&&s-o<this.globalDebounceTime)return i&&console.warn(`[Tracking] 🚫 Global debounce: ${n} (${s-o}ms ago)`),!1;const r=this.debounceMap.get(t);if(!r){const l=new Map;return l.set(n,s),this.debounceMap.set(t,l),this.globalDebounceMap.set(n,s),!0}const a=r.get(n);return!a||s-a>this.debounceTime?(r.set(n,s),this.globalDebounceMap.set(n,s),!0):(i&&console.warn(`[Tracking] 🚫 Element debounce: ${n} (${s-a}ms ago)`),!1)}clear(t){this.debounceMap.delete(t)}setDebounceTime(t){this.debounceTime=t}}const aU=["button:not([data-track-ignore])","a:not([data-track-ignore])",'input[type="button"]:not([data-track-ignore])','input[type="submit"]:not([data-track-ignore])','[role="button"]:not([data-track-ignore])','[role="link"]:not([data-track-ignore])'].join(", ");function lU(e,t){if(!e.matches(aU))return!1;for(const i of t)if(e.matches(i)||e.closest(i))return!1;return e.hasAttribute("data-track-ignore")?!1:(e.onclick!==null,!0)}function cU(e,t="click"){var a;const n=`auto_${t}_`;if(e.id)return`${n}${e.id}`;const i=e.getAttribute("aria-label");if(i)return`${n}${Og(i)}`;const s=(a=e.textContent)==null?void 0:a.trim();if(s&&s.length>0){const l=Og(s.substring(0,20));return`${n}${l}`}const o=e.tagName.toLowerCase(),r=e.className?`.${e.className.split(" ")[0]}`:"";return`${n}${o}${r}`}function Og(e){return e.toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"").substring(0,50)}function uU(e){if(e.id)return`#${e.id}`;const t=[];let n=e;for(;n&&n!==document.body;){let i=n.tagName.toLowerCase();if(n.className){const s=n.className.split(" ").filter(Boolean);s.length>0&&(i+=`.${s[0]}`)}t.unshift(i),n=n.parentElement}return t.join(" > ")}function Vu(e){const t=e.getAttribute("data-track-params")||e.getAttribute("track-params");if(!t)return null;try{return JSON.parse(t)}catch(n){return console.warn("Invalid track params JSON on element:",e,n),null}}function Uy(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function dU(){if(typeof window>"u")return"server-side";const e="tracking_session_id";let t=sessionStorage.getItem(e);return t||(t=Uy(),sessionStorage.setItem(e,t)),t}function mU(){return typeof window>"u"?{width:0,height:0}:{width:window.innerWidth||0,height:window.innerHeight||0}}class pU{constructor(t={}){this.state$=new EE({initialized:!1,config:ua,pendingEvents:[],uploading:!1,cachedEventCount:0,stats:{totalEvents:0,successfulUploads:0,failedUploads:0,batchUploadCount:0,debouncedEvents:0}}),this.clickListener=null,this.mutationObserver=null,this.attachedListeners=new WeakMap,this.config=qg(t),this.batchService=new oU(this.config.batchConfig),this.debouncer=new rU(this.config.debounceTime),this.updateState({config:this.config,initialized:!1})}initialize(){if(this.state$.value.initialized){this.log("debug","Tracking service already initialized");return}this.setupClickDelegation(),this.setupMultiEventListeners(),this.setupMutationObserver(),this.setupBeforeUnload(),this.updateState({initialized:!0}),this.log("debug","Tracking service initialized")}setupClickDelegation(){typeof window>"u"||typeof document>"u"||(this.clickListener=t=>{const n=t.target;if(!n)return;const i=n.closest("[data-track]");if(i){const s=i.getAttribute("data-track");if(s){if(this.isElementExcluded(i))return;this.trackClick(i,s);return}}if(this.config.autoTrack&&lU(n,this.config.excludedSelectors)){if(this.isElementExcluded(n))return;const s=cU(n,"click");this.trackClick(n,s)}},document.body.addEventListener("click",this.clickListener,!0))}setupMultiEventListeners(){if(typeof document>"u")return;document.querySelectorAll("[track-hover]").forEach(i=>{this.attachHoverListener(i)}),document.querySelectorAll("[track-focus]").forEach(i=>{this.attachFocusListener(i)})}attachHoverListener(t){const n=t.getAttribute("track-hover");if(!n||this.hasAttachedListener(t,"hover"))return;const i=()=>{if(!this.debouncer.shouldTrack(t,n,this.config.devMode)){this.incrementStat("debouncedEvents");return}const s=Vu(t),o=this.createTrackEvent(n,s,"hover",t);this.track(o)};t.addEventListener("mouseenter",i),this.markListenerAttached(t,"hover")}attachFocusListener(t){const n=t.getAttribute("track-focus");if(!n||this.hasAttachedListener(t,"focus"))return;const i=()=>{if(!this.debouncer.shouldTrack(t,n,this.config.devMode)){this.incrementStat("debouncedEvents");return}const s=Vu(t),o=this.createTrackEvent(n,s,"focus",t);this.track(o)};t.addEventListener("focus",i,!0),this.markListenerAttached(t,"focus")}hasAttachedListener(t,n){const i=this.attachedListeners.get(t);return i?i.has(n):!1}markListenerAttached(t,n){let i=this.attachedListeners.get(t);i||(i=new Set,this.attachedListeners.set(t,i)),i.add(n)}setupMutationObserver(){typeof window>"u"||typeof MutationObserver>"u"||(this.mutationObserver=new MutationObserver(t=>{t.forEach(n=>{n.addedNodes.forEach(i=>{if(i.nodeType===Node.ELEMENT_NODE){const s=i;s.hasAttribute("track-hover")&&this.attachHoverListener(s),s.hasAttribute("track-focus")&&this.attachFocusListener(s),s.querySelectorAll("[track-hover]").forEach(a=>this.attachHoverListener(a)),s.querySelectorAll("[track-focus]").forEach(a=>this.attachFocusListener(a))}})})}),this.mutationObserver.observe(document.body,{childList:!0,subtree:!0}))}trackClick(t,n){if(!this.debouncer.shouldTrack(t,n,this.config.devMode)){this.incrementStat("debouncedEvents"),this.log("debug",`Event debounced: ${n}`);return}const i=Vu(t),s=this.createTrackEvent(n,i,"click",t);this.track(s)}createTrackEvent(t,n,i,s){const o={timestamp:Date.now(),url:typeof window<"u"?window.location.href:"",version:iU(),sessionId:dU(),userAgent:typeof navigator<"u"?navigator.userAgent:void 0,viewport:mU(),eventType:i},r={eventName:t,params:n||void 0,metadata:o,id:Uy(),createdAt:Date.now()};return this.config.devMode&&this.log("debug",`Event created: ${t}`,{params:n,element:s?uU(s):void 0}),r}track(t){this.incrementStat("totalEvents"),this.batchService.enqueue(t),this.log("debug",`Event tracked: ${t.eventName}`)}isElementExcluded(t){if(t.hasAttribute("data-track-ignore"))return!0;for(const n of this.config.excludedSelectors)if(t.matches(n)||t.closest(n))return!0;return!1}setupBeforeUnload(){typeof window>"u"||window.addEventListener("beforeunload",()=>{this.batchService.flushOnUnload()})}getState(){return this.state$.asObservable()}getStats(){return this.state$.value.stats}updateConfig(t){this.config=qg({...this.config,...t}),t.batchConfig&&this.batchService.updateConfig(t.batchConfig),t.debounceTime&&this.debouncer.setDebounceTime(t.debounceTime),this.updateState({config:this.config}),this.log("debug","Configuration updated",t)}destroy(){this.clickListener&&typeof document<"u"&&(document.body.removeEventListener("click",this.clickListener,!0),this.clickListener=null),this.mutationObserver&&(this.mutationObserver.disconnect(),this.mutationObserver=null),this.attachedListeners=new WeakMap,this.batchService.flush(),this.updateState({initialized:!1}),this.log("debug","Tracking service destroyed")}updateState(t){this.state$.next({...this.state$.value,...t})}incrementStat(t){const n={...this.state$.value.stats};n[t]++,this.updateState({stats:n})}log(t,n,i){this.config.logLevel!=="silent"&&(t==="error"||t==="debug"&&this.config.devMode)}}let $i=null;function fU(){$i&&($i.destroy(),$i=null)}function hU(e,t){return $i||($i=new pU(t),typeof window<"u"&&setTimeout(()=>{$i==null||$i.initialize()},0),typeof module<"u"&&module.hot&&module.hot.dispose(()=>{fU()})),e.trackingService=$i,e}class gU extends km{initialize(){super.initialize()}}const bU=e=>{const{drawElement:t}=e;return e.drawElement=n=>{try{return t(n)}catch{return console.warn(`[Drawnix] Unknown element type "${n.element.type}" — may be from a newer version, hidden but preserved.`),gU}},e};function xU(e,t,n,i=0){const s=Ae.getCenterPoint(t),o=So(t,Rs);if(i){const r=wU(n,s,-i);let a=o.find(l=>Ae.isHit(Ae.getRectangleByPoints([r,r]),l.rectangle));return a&&(a.cursorClass=Oc(a.cursorClass,i)),a}else return o.find(r=>Ae.isHit(Ae.getRectangleByPoints([n,n]),r.rectangle))}function wU(e,t,n){const i=n*Math.PI/180,s=Math.cos(i),o=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*s-a*o,t[1]+r*o+a*s]}function yU(e){const t=ut(e);return t.length!==1?!1:mm(t[0])}function NU(e,t){const n=ut(e);if(n.length!==1||!mm(n[0]))return null;const i=n[0],s=Ae.getRectangleByPoints(i.points),o=i.angle||0,r=xU(e,s,t,o);return r?{element:i,rectangle:s,handle:r.handle,cursorClass:r.cursorClass}:null}function vU(e,t,n){const{element:i,rectangle:s,handle:o}=t,{startPoint:r,endPoint:a}=n;if(!s){console.warn("startRectangle is undefined");return}const l=a[0]-r[0],u=a[1]-r[1],d=kr(s,o,l,u,Ha(),100),m=[[d.x,d.y],[d.x+d.width,d.y+d.height]],f=e.children.findIndex(h=>h.id===i.id);f>=0&&Se.setNode(e,{points:m},[f])}const kU=e=>Eo(e,{key:"tool-elements",canResize:()=>yU(e),hitTest:(t=>NU(e,t)),onResize:(t,n)=>vU(e,t,n)});let mc=null;function EU(e,t){return _t.isFreehand(t)?Lc(t):Rt.isPenPath(t)?zc(t):e.getRectangle(t)}function SU(e,t){return So(e,Rs).find(i=>Ae.isHit(Ae.getRectangleByPoints([t,t]),i.rectangle))}function cp(e){return e.some(t=>_t.isFreehand(t)||Rt.isPenPath(t)||ee.isText(t))}function TU(e){return e.some(t=>ee.isText(t))}function Ry(e){const t=ut(e);if(t.length<2||!cp(t))return null;try{const n=It(e,t,!1);return{elements:t,rectangle:n}}catch{return null}}function DU(e){return Ry(e)!==null}function _U(e,t){const n=Ry(e);if(!n)return null;const i=SU(n.rectangle,t);if(i){mc=new Map;for(const s of n.elements){const o=EU(e,s);o&&mc.set(s.id,{element:JSON.parse(JSON.stringify(s)),rectangle:{...o}})}return{element:n.elements,rectangle:n.rectangle,handle:i.handle,cursorClass:i.cursorClass}}return null}function IU(e,t,n,i,s,o){const r=o.width/s.width,a=o.height/s.height,l=i.x-s.x,u=i.y-s.y,d=o.x+l*r,m=o.y+u*a,f=n.points.map(g=>{const b=g[0]-i.x,x=g[1]-i.y,y=b*r,w=x*a;return[d+y,m+w]}),h=e.children.findIndex(g=>g.id===t);h>=0&&Se.setNode(e,{points:f},[h])}function CU(e,t,n,i,s,o){const r=o.width/s.width,a=o.height/s.height,l=i.x-s.x,u=i.y-s.y,d=o.x+l*r,m=o.y+u*a,f=n.anchors.map(w=>({...w,point:[w.point[0]*r,w.point[1]*a],handleIn:w.handleIn?[w.handleIn[0]*r,w.handleIn[1]*a]:void 0,handleOut:w.handleOut?[w.handleOut[0]*r,w.handleOut[1]*a]:void 0})),h=i.width*r,g=i.height*a,x=[[d,m],[d+h,m+g]],y=e.children.findIndex(w=>w.id===t);y>=0&&Se.setNode(e,{points:x,anchors:f},[y])}const qy=14;function Ly(e,t){const n={...e};if("text"in e&&typeof e.text=="string"){const i=e["font-size"]?parseFloat(e["font-size"]):qy,s=Math.max(1,Math.round(i*t*10)/10);n["font-size"]=`${s}`}return Array.isArray(e.children)&&(n.children=e.children.map(i=>Ly(i,t))),n}function jU(e,t,n,i,s,o){const r=o.width/s.width,a=o.height/s.height,l=i.x-s.x,u=i.y-s.y,d=o.x+l*r,m=o.y+u*a,f=i.width*r,h=i.height*a,g=[[d,m],[d+f,m+h]],b=e.children.findIndex(x=>x.id===t);if(b>=0)if(ee.isDrawElement(n)&&ee.isImage(n))Se.setNode(e,{points:g,width:f,height:h},[b]);else if(ee.isText(n)){const x=n,y=Ly(x.text,r),w=x.textHeight||qy*1.4;Se.setNode(e,{points:g,text:y,textHeight:w*r,autoSize:!1},[b])}else Se.setNode(e,{points:g},[b])}function PU(e,t,n){const{element:i,rectangle:s,handle:o}=t,{startPoint:r,endPoint:a}=n;if(!s||!Array.isArray(i)||!mc)return;const l=a[0]-r[0],u=a[1]-r[1],d=Ha()||TU(i),m=kr(s,o,l,u,d);for(const f of i){const h=mc.get(f.id);if(!h)continue;const{element:g,rectangle:b}=h;_t.isFreehand(g)?IU(e,f.id,g,b,s,m):Rt.isPenPath(g)?CU(e,f.id,g,b,s,m):jU(e,f.id,g,b,s,m)}}function AU(e){const t=ut(e);if(t.length<2||!cp(t))return null;try{const n=fm(),i=It(e,t,!1),s=SE(e,i);return Ae.getCornerPoints(s).forEach(r=>{const a=TE(e,r);n.append(a)}),n}catch{return null}}const MU=e=>{const{afterChange:t}=e;let n=null;return e.afterChange=()=>{t(),n&&(n.remove(),n=null);const i=ut(e);i.length>1&&cp(i)&&!ka(e)&&(n=AU(e),n&&J.getActiveHost(e).append(n))},Eo(e,{key:"multi-resize",canResize:()=>DU(e),hitTest:(i=>_U(e,i)),onResize:(i,s)=>PU(e,i,s)})},Oy=14;let Bl=null,Wd=null;function VU(e,t){return So(e,Rs).find(i=>Ae.isHit(Ae.getRectangleByPoints([t,t]),i.rectangle))}function zy(e,t){const n={...e};if("text"in e&&typeof e.text=="string"){const i=e["font-size"]?parseFloat(e["font-size"]):Oy,s=Math.max(1,Math.round(i*t*10)/10);n["font-size"]=`${s}`}return Array.isArray(e.children)&&(n.children=e.children.map(i=>zy(i,t))),n}function UU(e){const t=ut(e);return t.length!==1?!1:ee.isText(t[0])}function RU(e,t){const n=ut(e);if(n.length!==1||!ee.isText(n[0]))return null;const i=n[0],s=Ae.getRectangleByPoints(i.points),o=VU(s,t);return o?(Bl=JSON.parse(JSON.stringify(i)),Wd={...s},{element:i,rectangle:s,handle:o.handle,cursorClass:o.cursorClass}):null}function qU(e,t,n){const{element:i,rectangle:s,handle:o}=t,{startPoint:r,endPoint:a}=n;if(!s||!Bl||!Wd)return;const l=a[0]-r[0],u=a[1]-r[1],d=kr(s,o,l,u,!0,20),m=d.width/Wd.width;if(m<=0)return;const f=zy(Bl.text,m),g=(Bl.textHeight||Oy*1.4)*m,b=[[d.x,d.y],[d.x+d.width,d.y+d.height]],x=e.children.findIndex(y=>y.id===i.id);x>=0&&Se.setNode(e,{points:b,text:f,textHeight:g,autoSize:!1},[x])}const LU=e=>Eo(e,{key:"text-resize",canResize:()=>UU(e),hitTest:t=>RU(e,t),onResize:(t,n)=>qU(e,t,n)});function OU(e){return e.some(n=>_t.isFreehand(n)||Rt.isPenPath(n))}function zU(e){const t=ut(e);if(t.length<2||!OU(t))return null;try{return It(e,t,!1)}catch{return null}}const BU=()=>{const e=Zt(),[t,n]=p.useState([]),[i,s]=p.useState(!1),[o,r]=p.useState(!1),a=p.useRef(!1),l=p.useCallback(()=>{const m=Ea(e)||Ta(e)||ka(e);if(r(m),m)return;ut(e);const f=zU(e);if(!f){s(!1);return}const g=[{x:f.x,y:f.y,cursor:"nwse-resize"},{x:f.x+f.width,y:f.y,cursor:"nesw-resize"},{x:f.x+f.width,y:f.y+f.height,cursor:"nwse-resize"},{x:f.x,y:f.y+f.height,cursor:"nesw-resize"}].map(b=>{const x=oa(e,[b.x,b.y]);return{x:x[0],y:x[1],cursor:b.cursor}});n(g),s(!0)},[e]);if(p.useEffect(()=>{a.current=o},[o]),p.useEffect(()=>{l();let m,f=JSON.stringify(e.viewport),h=JSON.stringify(e.selection),g=e.children.length;const b=()=>{const x=JSON.stringify(e.viewport),y=JSON.stringify(e.selection),w=e.children.length,v=Ea(e)||Ta(e)||ka(e);(x!==f||y!==h||w!==g||v!==a.current)&&(f=x,h=y,g=w,l()),m=requestAnimationFrame(b)};return m=requestAnimationFrame(b),()=>{cancelAnimationFrame(m)}},[e,l]),!i||t.length===0||o)return null;const u=Rs,d=u/2;return c.jsxDEV("div",{className:ne("multi-selection-handles",Yt),children:t.map((m,f)=>c.jsxDEV("div",{className:"multi-selection-handle",style:{left:m.x-d,top:m.y-d,width:u,height:u,cursor:m.cursor}},f,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/multi-selection-handles/multi-selection-handles.tsx",lineNumber:169,columnNumber:9},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/multi-selection-handles/multi-selection-handles.tsx",lineNumber:167,columnNumber:5},void 0)},By=p.createContext(null),FU=typeof window<"u"?Math.max(375,window.innerWidth*.5):600,GU=({children:e})=>{const t=p.useRef(null),n=p.useRef(null),[i,s]=p.useState([]),[o,r]=p.useState(!1),[a,l]=p.useState(FU),u=p.useCallback(m=>{n.current=m},[]),d=p.useCallback(async(m,f)=>{n.current?await n.current(m,f):console.warn("[ChatDrawerContext] No retry handler registered")},[]);return c.jsxDEV(By.Provider,{value:{chatDrawerRef:t,registerRetryHandler:u,executeRetry:d,selectedContent:i,setSelectedContent:s,isDrawerOpen:o,setIsDrawerOpen:r,drawerWidth:a,setDrawerWidth:l},children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/contexts/ChatDrawerContext.tsx",lineNumber:79,columnNumber:5},void 0)};function up(){const e=p.useContext(By);if(!e)throw new Error("useChatDrawer must be used within a ChatDrawerProvider");return e}function dp(){const{chatDrawerRef:e,registerRetryHandler:t,executeRetry:n,selectedContent:i,setSelectedContent:s,isDrawerOpen:o,setIsDrawerOpen:r,drawerWidth:a,setDrawerWidth:l}=up();return{openChatDrawer:()=>{var u;(u=e.current)==null||u.open()},closeChatDrawer:()=>{var u;(u=e.current)==null||u.close()},toggleChatDrawer:()=>{var u;(u=e.current)==null||u.toggle()},sendMessageToChatDrawer:async u=>{var d;await((d=e.current)==null?void 0:d.sendMessage(u))},sendWorkflowMessage:async u=>{var d;await((d=e.current)==null?void 0:d.sendWorkflowMessage(u))},updateWorkflowMessage:u=>{var d;(d=e.current)==null||d.updateWorkflowMessage(u)},appendAgentLog:u=>{var d;(d=e.current)==null||d.appendAgentLog(u)},updateThinkingContent:u=>{var d;(d=e.current)==null||d.updateThinkingContent(u)},isChatDrawerOpen:()=>{var u;return((u=e.current)==null?void 0:u.isOpen())??!1},isDrawerOpen:o,setIsDrawerOpen:r,drawerWidth:a,setDrawerWidth:l,registerRetryHandler:t,retryWorkflowFromStep:async(u,d)=>{await n(u,d)},selectedContent:i,setSelectedContent:s}}class HU{constructor(){this.board=null}setBoard(t){this.board=t}getBoard(){return this.board||console.error("❌ Board instance not set. Call testToolbox.setBoard(board) first"),this.board}insertBananaPrompt(){const t=this.getBoard();if(!t)return;const n=cl.getToolById("banana-prompt");if(!n){console.error('❌ Tool "banana-prompt" not found');return}Mo.insertTool(t,n.id,n.url,[100,100],{width:n.defaultWidth||Vo.defaultWidth,height:n.defaultHeight||Vo.defaultHeight},{name:n.name,category:n.category,permissions:n.permissions})}insertXiaohongshuTool(){const t=this.getBoard();if(!t)return;const n=cl.getToolById("xiaohongshu-tool");if(!n){console.error('❌ Tool "xiaohongshu-tool" not found');return}Mo.insertTool(t,n.id,n.url,[300,300],{width:n.defaultWidth||Vo.defaultWidth,height:n.defaultHeight||Vo.defaultHeight},{name:n.name,category:n.category,permissions:n.permissions})}insertToolById(t,n=200,i=200){const s=this.getBoard();if(!s)return;const o=cl.getToolById(t);if(!o){console.error(`❌ Tool "${t}" not found`);return}Mo.insertTool(s,o.id,o.url,[n,i],{width:o.defaultWidth||Vo.defaultWidth,height:o.defaultHeight||Vo.defaultHeight},{name:o.name,category:o.category,permissions:o.permissions})}listAllTools(){cl.getAvailableTools().forEach((n,i)=>{})}getAllToolElements(){const t=this.getBoard();if(!t)return;Mo.getAllTools(t).forEach((i,s)=>{})}removeAllTools(){const t=this.getBoard();if(!t)return;Mo.getAllTools(t).forEach(i=>{Mo.removeTool(t,i.id)})}help(){}}const Fy=new HU;typeof window<"u"&&(window.testToolbox=Fy);const WU={width:200,height:150,position:"bottom-right",margin:16,collapsible:!0,defaultExpanded:!1,backgroundColor:"rgba(255, 255, 255, 0.95)",borderColor:"rgba(0, 0, 0, 0.1)",viewportColor:"rgba(90, 79, 207, 0.3)",elementColor:"rgba(0, 0, 0, 0.5)"},$U={autoHideDelay:3e3},XU=({board:e,config:t,className:n,displayMode:i="auto",autoTriggerConfig:s})=>{const o=p.useRef(null),r=p.useRef(null);p.useRef(null);const a={...WU,...t},l={...$U,...s},[u,d]=p.useState(()=>({expanded:i==="always"?!0:a.defaultExpanded,dragging:!1,autoMode:i==="auto",manuallyExpanded:!1})),m=p.useRef({isDragging:!1,startPoint:null}),f=p.useRef(null),[h,g]=p.useState(null),b=p.useRef(null),[x,y]=p.useState(!1),w=120,v=p.useRef(0),S=p.useRef({zoom:e.viewport.zoom,offsetX:e.viewport.offsetX,offsetY:e.viewport.offsetY}),k=p.useRef(!1),N=p.useCallback(()=>{if(!e||!e.children)return[];const L=[];return e.children.forEach(P=>{try{let Q=null;P.points&&Array.isArray(P.points)?Q=Ae.getRectangleByPoints(P.points):P.x!==void 0&&P.y!==void 0&&(Q={x:P.x,y:P.y,width:P.width||100,height:P.height||100}),Q&&Q.width>0&&Q.height>0&&L.push({id:P.id,bounds:Q,type:P.type})}catch(Q){console.warn("Failed to get bounds for element:",P.id,Q)}}),L},[e]),E=p.useCallback(()=>{const P=J.getBoardContainer(e).getBoundingClientRect(),Q=e.viewport.zoom,se=wr(e),z=se[0],O=se[1],K=P.width/Q,G=P.height/Q;return{x:z,y:O,width:K,height:G}},[e]),I=p.useRef(u.expanded);I.current=u.expanded;const T=p.useRef(null),j=p.useRef(1);p.useEffect(()=>{if(i==="always"){I.current||d(P=>({...P,expanded:!0}));return}if(i!=="auto")return;const L=setInterval(()=>{const P=e.viewport,Q=S.current,se=Math.abs(P.zoom-Q.zoom)>.001,z=Math.abs(P.offsetX-Q.offsetX)>.5||Math.abs(P.offsetY-Q.offsetY)>.5;if(se||z){if(S.current={zoom:P.zoom,offsetX:P.offsetX,offsetY:P.offsetY},!k.current){k.current=!0;return}v.current=Date.now(),I.current||d(K=>({...K,expanded:!0,manuallyExpanded:!1}))}},100);return()=>{clearInterval(L)}},[i,e]),p.useEffect(()=>{if(i!=="auto"||!u.expanded||u.manuallyExpanded||u.dragging)return;const L=setTimeout(()=>{d(P=>!P.autoMode||P.manuallyExpanded||P.dragging?P:{...P,expanded:!1})},l.autoHideDelay);return()=>{clearTimeout(L)}},[i,u.expanded,u.manuallyExpanded,u.dragging,l.autoHideDelay]);const V=p.useCallback((L,P)=>{if(L.length===0)return{x:P.x-200,y:P.y-200,width:P.width+400,height:P.height+400};let Q=P.x,se=P.y,z=P.x+P.width,O=P.y+P.height;L.forEach(G=>{const{x:fe,y:ae,width:Y,height:le}=G.bounds;Q=Math.min(Q,fe),se=Math.min(se,ae),z=Math.max(z,fe+Y),O=Math.max(O,ae+le)});const K=100;return{x:Q-K,y:se-K,width:z-Q+K*2,height:O-se+K*2}},[]),_=p.useCallback(L=>{const Q=(a.width-20)/L.width,se=(a.height-20)/L.height;return Math.min(Q,se)},[a.width,a.height]),D=p.useCallback((L,P,Q,se)=>{const O=(L-Q.x)*se+10,K=(P-Q.y)*se+10;return[O,K]},[]),C=p.useCallback((L,P,Q,se)=>{const O=(L-10)/se+Q.x,K=(P-10)/se+Q.y;return[O,K]},[]),M=p.useCallback((L,P,Q)=>{if(100*Q<5)return;L.strokeStyle="rgba(0, 0, 0, 0.05)",L.lineWidth=.5;const O=Math.floor(P.x/100)*100,K=Math.floor(P.y/100)*100,G=P.x+P.width,fe=P.y+P.height;for(let ae=O;ae<=G;ae+=100){const[Y]=D(ae,0,P,Q);L.beginPath(),L.moveTo(Y,0),L.lineTo(Y,a.height),L.stroke()}for(let ae=K;ae<=fe;ae+=100){const[,Y]=D(0,ae,P,Q);L.beginPath(),L.moveTo(0,Y),L.lineTo(a.width,Y),L.stroke()}},[D,a.width,a.height]),U=p.useCallback(()=>{const L=o.current;if(!L)return;const P=L.getContext("2d");if(!P)return;P.clearRect(0,0,a.width,a.height);const Q=N(),se=E();if(Q.length===0&&!se){P.fillStyle="#999",P.font="12px sans-serif",P.textAlign="center",P.textBaseline="middle",P.fillText("空画布",a.width/2,a.height/2);return}const z=V(Q,se),O=_(z);T.current=z,j.current=O,M(P,z,O),P.fillStyle=a.elementColor,P.strokeStyle="rgba(0, 0, 0, 0.1)",P.lineWidth=.5,Q.forEach(ge=>{const{x:Ve,y:Nt,width:Xe,height:be}=ge.bounds,[ze,W]=D(Ve,Nt,z,O),B=Xe*O,re=be*O;P.fillRect(ze,W,B,re),P.strokeRect(ze,W,B,re)});const[K,G]=D(se.x,se.y,z,O),fe=se.width*O,ae=se.height*O;P.fillStyle=a.viewportColor,P.fillRect(K,G,fe,ae),P.strokeStyle=a.viewportColor.replace("0.3","1"),P.lineWidth=2,P.strokeRect(K,G,fe,ae);const Y=8;P.fillStyle=a.viewportColor.replace("0.3","0.8"),P.fillRect(K,G,Y,2),P.fillRect(K,G,2,Y),P.fillRect(K+fe-Y,G,Y,2),P.fillRect(K+fe-2,G,2,Y),P.fillRect(K,G+ae-2,Y,2),P.fillRect(K,G+ae-Y,2,Y),P.fillRect(K+fe-Y,G+ae-2,Y,2),P.fillRect(K+fe-2,G+ae-Y,2,Y);const le=b.current;if(le){const ge=le.x-fe/2,Ve=le.y-ae/2;P.fillStyle="rgba(243, 156, 18, 0.15)",P.fillRect(ge,Ve,fe,ae),P.strokeStyle="rgba(243, 156, 18, 0.8)",P.lineWidth=2,P.strokeRect(ge,Ve,fe,ae)}},[e,a,N,E,V,_,D,M]),F=p.useCallback(L=>{L.preventDefault(),L.stopPropagation();const P=o.current;if(!P||!T.current)return;const Q=P.getBoundingClientRect(),se=L.clientX-Q.left,z=L.clientY-Q.top;Tt.track("minimap_navigate",{action:"click",displayMode:i});const[O,K]=C(se,z,T.current,j.current);m.current={isDragging:!0,startPoint:[se,z]},d(G=>({...G,dragging:!0})),$(O,K)},[C,e]),$=p.useCallback((L,P)=>{const se=J.getBoardContainer(e).getBoundingClientRect(),z=e.viewport.zoom,O=L-se.width/(2*z),K=P-se.height/(2*z);Ue.updateViewport(e,[O,K],z),requestAnimationFrame(()=>U())},[e,U]),A=p.useCallback(L=>{if(!m.current.isDragging||!T.current)return;L.preventDefault(),L.stopPropagation();const P=o.current;if(!P)return;const Q=P.getBoundingClientRect(),se=L.clientX-Q.left,z=L.clientY-Q.top,[O,K]=C(se,z,T.current,j.current);$(O,K)},[C,$]),H=p.useCallback(()=>{m.current.isDragging&&Tt.track("minimap_navigate",{action:"drag",displayMode:i}),m.current={isDragging:!1,startPoint:null},d(L=>({...L,dragging:!1}))},[i]),ue=p.useCallback((L,P)=>{const Q=f.current;if(!Q||!T.current)return;const se=Q.getContext("2d");if(!se)return;const[z,O]=C(L,P,T.current,j.current),K=E(),G=K.width,fe=K.height,ae=G,Y=fe;se.clearRect(0,0,w,w),se.fillStyle="#fff",se.fillRect(0,0,w,w);const le=z-ae/2,ge=O-Y/2,Ve=w/ae,Nt=w/Y,Xe=Math.min(Ve,Nt),be=(w-ae*Xe)/2,ze=(w-Y*Xe)/2;N().forEach(B=>{const{bounds:re}=B;if(re.x+re.width>=le&&re.x<=le+ae&&re.y+re.height>=ge&&re.y<=ge+Y){const xe=(re.x-le)*Xe+be,ve=(re.y-ge)*Xe+ze,Be=re.width*Xe,Fe=re.height*Xe;se.fillStyle="rgba(0, 0, 0, 0.6)",se.fillRect(xe,ve,Be,Fe)}}),se.strokeStyle="rgba(90, 79, 207, 0.6)",se.lineWidth=1,se.setLineDash([4,4]),se.beginPath(),se.moveTo(0,w/2),se.lineTo(w,w/2),se.stroke(),se.beginPath(),se.moveTo(w/2,0),se.lineTo(w/2,w),se.stroke(),se.setLineDash([]),se.strokeStyle="rgba(90, 79, 207, 0.3)",se.lineWidth=2,se.strokeRect(0,0,w,w)},[N,E,C]),te=p.useCallback(()=>{u.dragging||y(!0)},[u.dragging]),oe=p.useCallback(()=>{y(!1),g(null),b.current=null},[]),me=p.useCallback(L=>{if(u.dragging){y(!1),b.current=null;return}const P=o.current;if(!P)return;const Q=P.getBoundingClientRect(),se=L.clientX-Q.left,z=L.clientY-Q.top,O={x:se,y:z};g(O),b.current=O,y(!0),ue(se,z),U()},[u.dragging,ue,U]),_e=p.useRef(!1),Pe=p.useCallback(L=>{_e.current=!0;const P=o.current;if(!P)return;const Q=L.touches[0],se=P.getBoundingClientRect(),z=Q.clientX-se.left,O=Q.clientY-se.top,K={x:z,y:O};g(K),b.current=K,y(!0),ue(z,O),U()},[ue,U]),He=p.useCallback(L=>{const P=o.current;if(!P)return;const Q=L.touches[0],se=P.getBoundingClientRect(),z=Q.clientX-se.left,O=Q.clientY-se.top,K={x:z,y:O};g(K),b.current=K,y(!0),ue(z,O),U()},[ue,U]),Z=p.useCallback(()=>{_e.current=!1,setTimeout(()=>{_e.current||(y(!1),g(null),b.current=null,U())},500)},[U]);p.useEffect(()=>{if(!u.expanded)return;U();const L=setInterval(()=>{U()},100);return()=>{clearInterval(L)}},[e,u.expanded,U]);const Ie=p.useCallback(()=>{d(L=>{const P=!L.expanded;return{...L,expanded:P,manuallyExpanded:P}})},[]),Qe={bottom:a.position.includes("bottom")?a.margin:void 0,top:a.position.includes("top")?a.margin:void 0,right:a.position.includes("right")?a.margin:void 0,left:a.position.includes("left")?a.margin:void 0},dt=x&&(_e.current||!u.dragging),bt=h?{position:"absolute",right:a.width+8,top:Math.max(0,Math.min(h.y-w/2,a.height-w)),width:w,height:w,opacity:dt?1:0,pointerEvents:"none",transition:"opacity 0.15s ease-out, top 0.1s ease-out"}:{display:"none"};return c.jsxDEV("div",{ref:r,className:`minimap ${u.expanded?"minimap--expanded":"minimap--collapsed"} ${i==="auto"?"minimap--auto":""} ${n||""}`,style:{...Qe,zIndex:Tn.MINIMAP},"data-track":"minimap_container",children:[u.expanded&&c.jsxDEV("div",{className:"minimap__content",children:[c.jsxDEV("canvas",{ref:o,width:a.width,height:a.height,className:"minimap__canvas",onPointerDown:F,onPointerMove:A,onPointerUp:H,onPointerLeave:H,onMouseEnter:te,onMouseLeave:oe,onMouseMove:me,onTouchStart:Pe,onTouchMove:He,onTouchEnd:Z,style:{cursor:u.dragging?"grabbing":"pointer"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:822,columnNumber:11},void 0),c.jsxDEV("div",{className:"minimap__preview",style:bt,children:c.jsxDEV("canvas",{ref:f,width:w,height:w,className:"minimap__preview-canvas"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:844,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:843,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:821,columnNumber:9},void 0),a.collapsible&&c.jsxDEV("button",{className:`minimap__toggle ${u.expanded?"minimap__toggle--expanded":""}`,onClick:Ie,title:u.expanded?"折叠小地图":"展开小地图","data-track":"minimap_click_toggle",children:c.jsxDEV(sx,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:861,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:855,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:812,columnNumber:5},void 0)},zg=10,KU=3e3,YU=({showMinimap:e=!0,container:t})=>{var T,j,V,_;const n=Zt(),{t:i}=We(),{isDrawerOpen:s,drawerWidth:o}=dp(),[r,a]=p.useState(!1),[l,u]=p.useState(!0),[d,m]=p.useState(!1),f=p.useRef(null),h=p.useRef({zoom:((T=n==null?void 0:n.viewport)==null?void 0:T.zoom)||1,offsetX:((j=n==null?void 0:n.viewport)==null?void 0:j.offsetX)||0,offsetY:((V=n==null?void 0:n.viewport)==null?void 0:V.offsetY)||0}),g=p.useRef(!1),b=p.useRef(null),x=p.useMemo(()=>s?o+zg:zg,[s,o]),y=p.useCallback(()=>{Ue.updateZoom(n,n.viewport.zoom-.1)},[n]),w=p.useCallback(()=>{Ue.updateZoom(n,n.viewport.zoom+.1)},[n]),v=p.useCallback(()=>{Ue.fitViewport(n),a(!1)},[n]),S=p.useCallback(()=>{Ue.updateZoom(n,1),a(!1)},[n]),k=p.useCallback(()=>{xm(n),a(!1)},[n]),N=p.useCallback(()=>{u(D=>{const C=!D;return m(C),C})},[]);p.useEffect(()=>{if(!l||!n)return;const D=J.getBoardContainer(n);if(!D)return;const C=M=>{var F;const U=M.target;(F=f.current)!=null&&F.contains(U)||(u(!1),m(!1))};return D.addEventListener("mousedown",C),()=>{D.removeEventListener("mousedown",C)}},[l,n]),p.useEffect(()=>{if(!e||!n)return;const D=setInterval(()=>{const C=n.viewport,M=h.current,U=Math.abs(C.zoom-M.zoom)>.001,F=Math.abs(C.offsetX-M.offsetX)>.5||Math.abs(C.offsetY-M.offsetY)>.5;if(U||F){if(h.current={zoom:C.zoom,offsetX:C.offsetX,offsetY:C.offsetY},!g.current){g.current=!0;return}l||(u(!0),m(!1)),b.current&&clearTimeout(b.current)}},100);return()=>{clearInterval(D)}},[e,n,l]),p.useEffect(()=>{if(!(!l||d))return b.current=setTimeout(()=>{u(!1)},KU),()=>{b.current&&clearTimeout(b.current)}},[l,d]);const E=p.useCallback(()=>{a(D=>!D)},[]),I=Math.round((((_=n==null?void 0:n.viewport)==null?void 0:_.zoom)||1)*100);return c.jsxDEV("div",{className:"view-navigation",style:{right:x,zIndex:Tn.VIEW_NAVIGATION},ref:f,"data-testid":"view-navigation",children:[c.jsxDEV("div",{className:"view-navigation__zoom",children:[c.jsxDEV(nn,{content:i("zoom.out"),showArrow:!1,children:c.jsxDEV("button",{className:"view-navigation__zoom-btn",onClick:y,"aria-label":i("zoom.out"),"data-track":"view_nav_zoom_out","data-testid":"zoom-out",children:c.jsxDEV(DE,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:214,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:207,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:206,columnNumber:9},void 0),c.jsxDEV(Ft,{sideOffset:8,open:r,onOpenChange:a,placement:"bottom",children:[c.jsxDEV(nn,{content:i("zoom.fit"),showArrow:!1,children:c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("button",{className:"view-navigation__zoom-percent",onClick:E,"aria-label":i("zoom.fit"),"data-track":"view_nav_zoom_menu","data-testid":"zoom-display",children:[I,"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:226,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:225,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:224,columnNumber:11},void 0),c.jsxDEV(Ht,{container:t,style:{zIndex:Tn.POPOVER},children:c.jsxDEV("div",{className:"view-navigation-zoom-menu",children:[c.jsxDEV("button",{className:"zoom-menu-item",onClick:v,"data-track":"view_nav_zoom_fit",children:[c.jsxDEV("span",{className:"zoom-menu-item__label",children:i("zoom.fit")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:244,columnNumber:17},void 0),c.jsxDEV("span",{className:"zoom-menu-item__shortcut",children:"⌘⇧="},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:245,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:239,columnNumber:15},void 0),c.jsxDEV("button",{className:"zoom-menu-item",onClick:k,"data-track":"view_nav_zoom_fit_frame",children:c.jsxDEV("span",{className:"zoom-menu-item__label",children:i("zoom.fitFrame")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:252,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:247,columnNumber:15},void 0),c.jsxDEV("button",{className:"zoom-menu-item",onClick:S,"data-track":"view_nav_zoom_100",children:[c.jsxDEV("span",{className:"zoom-menu-item__label",children:i("zoom.100")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:259,columnNumber:17},void 0),c.jsxDEV("span",{className:"zoom-menu-item__shortcut",children:"⌘0"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:260,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:254,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:238,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:237,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:218,columnNumber:9},void 0),c.jsxDEV(nn,{content:i("zoom.in"),showArrow:!1,children:c.jsxDEV("button",{className:"view-navigation__zoom-btn",onClick:w,"aria-label":i("zoom.in"),"data-track":"view_nav_zoom_in","data-testid":"zoom-in",children:c.jsxDEV(Tm,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:274,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:267,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:266,columnNumber:9},void 0),e&&c.jsxDEV(nn,{content:l?"折叠小地图":"展开小地图",showArrow:!1,children:c.jsxDEV("button",{className:`view-navigation__minimap-toggle ${l?"view-navigation__minimap-toggle--expanded":""}`,onClick:N,"aria-label":l?"折叠小地图":"展开小地图","data-track":"view_nav_minimap_toggle",children:c.jsxDEV(ox,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:290,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:284,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:280,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:205,columnNumber:7},void 0),e&&l&&c.jsxDEV("div",{className:"view-navigation__minimap",children:c.jsxDEV(XU,{board:n,displayMode:"always",config:{width:180,height:120,position:"top-right",margin:0,collapsible:!1,defaultExpanded:!0}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:299,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:298,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:195,columnNumber:5},void 0)},ZU=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oJ),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),JU=({position:e,visible:t,onClose:n,onOpenMediaLibrary:i})=>{const s=Zt(),{t:o}=We(),r=bm(),a=J.getBoardContainer(s),[l,u]=p.useState({freehand:!1,arrow:!1,shape:!1}),[d,m]=p.useState(!1),{refs:f,floatingStyles:h}=cm({placement:"bottom",middleware:[um(12),u0({padding:16}),dm({fallbackPlacements:["top","right","left"]})]});p.useEffect(()=>{if(e&&t){const[V,_]=e;f.setPositionReference({getBoundingClientRect(){return{width:1,height:1,x:V,y:_,top:_,left:V,right:V+1,bottom:_+1}}})}},[e,t,f]),p.useEffect(()=>{if(!t)return;const V=D=>{const C=D.target,M=C.closest(".quick-creation-toolbar"),U=C.closest(".quick-toolbar-popover")||C.closest("[data-radix-popper-content-wrapper]")||C.closest(".plait-popover")||C.closest(".shape-picker")||C.closest(".arrow-picker")||C.closest(".freehand-panel"),F=C.closest(".media-library-modal");!M&&!U&&!F&&n()},_=setTimeout(()=>{document.addEventListener("mousedown",V)},100);return()=>{clearTimeout(_),document.removeEventListener("mousedown",V)}},[t,n]);const g=()=>{u({freehand:!1,arrow:!1,shape:!1})},b=V=>{u({freehand:!1,arrow:!1,shape:!1,[V]:!0})},x=()=>{g(),Oi(s),Wt(s,null),Ue.updatePointerType(s,st.text),r(st.text),n()},y=()=>{g(),Oi(s),Wt(s,bn.dnd),Ue.updatePointerType(s,go.mind),r(go.mind),n()},w=()=>{g(),Rc(s),n()},v=async V=>{try{V.type===Ei.IMAGE?await lr(s,V.url):V.type===Ei.VIDEO?await cr(s,V.url):V.type===Ei.AUDIO&&await rr(s,V.url,{title:V.name,duration:V.duration,previewImageUrl:V.thumbnail,prompt:V.prompt,mv:V.modelName,clipId:V.clipId,providerTaskId:V.providerTaskId}),pe.success(o("toolbar.assetInserted")||"素材已插入到画板"),m(!1),n()}catch(_){console.error("Failed to insert asset:",_),pe.error(o("toolbar.assetInsertFailed")||"插入素材失败")}},S=()=>{if(g(),i){i({mode:ns.SELECT,onSelect:v,selectButtonText:o("toolbar.insert")||"插入"}),n();return}m(!0)},[k,N]=p.useState(Bt.feltTipPen),E=300,I=p.useRef(null),T=p.useCallback(()=>{I.current&&(clearTimeout(I.current),I.current=null)},[]);p.useEffect(()=>()=>{T()},[T]);const j=(V,_,D,C)=>c.jsxDEV(Ft,{open:l[_],sideOffset:12,onOpenChange:M=>{M||g()},placement:"bottom",children:[c.jsxDEV(Gt,{asChild:!0,children:c.jsxDEV("div",{onPointerEnter:()=>{T(),I.current=setTimeout(()=>{b(_)},E)},onPointerLeave:()=>{T()},children:c.jsxDEV(Ne,{type:"icon",visible:!0,selected:l[_],icon:V,"aria-label":D,"data-track":`quick_toolbar_click_${_}`,onPointerDown:()=>{T(),b(_),Oi(s),_==="freehand"&&(Wt(s,bn.dnd),Ue.updatePointerType(s,k),r(k))},onPointerUp:()=>{_==="freehand"&&Wt(s,bn.drawing)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:304,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:290,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:289,columnNumber:9},void 0),c.jsxDEV(Ht,{container:a,style:{zIndex:Tn.POPOVER},className:"quick-toolbar-popover",children:C},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:333,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:279,columnNumber:7},void 0);return t?c.jsxDEV(c.Fragment,{children:[c.jsxDEV(Mt,{padding:1,className:`quick-creation-toolbar ${Yt}`,ref:f.setFloating,style:h,children:c.jsxDEV(Kt.Row,{gap:1,children:[c.jsxDEV(Ne,{type:"icon",visible:!0,icon:c.jsxDEV(Nm,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:359,columnNumber:19},void 0),"aria-label":o("toolbar.text"),"data-track":"quick_toolbar_click_text",onPointerUp:x},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:356,columnNumber:11},void 0),c.jsxDEV(Ne,{type:"icon",visible:!0,icon:c.jsxDEV(Ga,{size:24},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:369,columnNumber:19},void 0),"aria-label":o("toolbar.image"),"data-track":"quick_toolbar_click_image",onPointerUp:w},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:366,columnNumber:11},void 0),c.jsxDEV(Ne,{type:"icon",visible:!0,icon:c.jsxDEV(Fa,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:379,columnNumber:19},void 0),"aria-label":o("toolbar.mediaLibrary"),"data-track":"quick_toolbar_click_media_library",onPointerUp:S},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:376,columnNumber:11},void 0),j(c.jsxDEV(vr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:387,columnNumber:13},void 0),"freehand",o("toolbar.pen"),c.jsxDEV(tp,{onPointerUp:V=>{g(),N(V),Ue.updatePointerType(s,V),r(V),n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:390,columnNumber:13},void 0)),j(c.jsxDEV(ym,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:405,columnNumber:13},void 0),"arrow",o("toolbar.arrow"),c.jsxDEV(ip,{onPointerUp:V=>{g(),Ue.updatePointerType(s,V),r(V),n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:408,columnNumber:13},void 0)),j(c.jsxDEV(wm,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:420,columnNumber:13},void 0),"shape",o("toolbar.shape"),c.jsxDEV(np,{onPointerUp:V=>{g(),Ue.updatePointerType(s,V),r(V),n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:423,columnNumber:13},void 0)),c.jsxDEV(Ne,{type:"icon",visible:!0,icon:c.jsxDEV(Kl,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:437,columnNumber:19},void 0),"aria-label":o("toolbar.mind"),"data-track":"quick_toolbar_click_mind",onPointerUp:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:434,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:354,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:348,columnNumber:7},void 0),d&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(ZU,{isOpen:d,onClose:()=>{m(!1)},mode:ns.SELECT,onSelect:v,selectButtonText:o("toolbar.insert")||"插入"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:448,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:447,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:347,columnNumber:5},void 0):null};function qz(e){const[t,n]=p.useState({isCached:!1}),[i,s]=p.useState(!1),o=p.useCallback(async()=>{if(!e){n({isCached:!1});return}try{const l=await Ki.getCacheInfo(e);n(l)}catch(l){console.error("[useUnifiedCache] Failed to load cache info:",l),n({isCached:!1})}},[e]);p.useEffect(()=>{o()},[o]),p.useEffect(()=>Ki.subscribe(()=>{o()}),[o]);const r=p.useCallback(async l=>{if(!e)return!1;s(!0);try{const u=await Ki.cacheImage(e,l);return u&&await o(),u}catch(u){return console.error("[useUnifiedCache] Failed to cache image:",u),!1}finally{s(!1)}},[e,o]),a=p.useCallback(async()=>{if(!e)return!1;s(!0);try{return await Ki.deleteCache(e),await o(),!0}catch(l){return console.error("[useUnifiedCache] Failed to delete cache:",l),!1}finally{s(!1)}},[e,o]);return{cacheInfo:t,isLoading:i,isCached:t.isCached,cacheAge:t.age,cacheImage:r,deleteCache:a,reload:o}}function QU(e){const[t,n]=p.useState(!1);p.useEffect(()=>{const s=()=>{n(!0),e==null||e()};return Ki.onQuotaExceeded(s)},[e]);const i=p.useCallback(()=>{n(!1)},[]);return{isQuotaExceeded:t,resetQuotaFlag:i}}const eR=({children:e,onOpenMediaLibrary:t})=>{const[n,i]=p.useState(!1),{confirm:s,confirmDialog:o}=Ba(),r=p.useCallback(()=>{n||(i(!0),s({title:"缓存空间已满",description:"图片缓存空间已满,无法继续缓存新图片。是否打开素材库清理缓存?",confirmText:"打开素材库",cancelText:"稍后处理",confirmTheme:"warning"}).then(a=>{i(!1),a&&(t==null||t())}))},[s,n,t]);return QU(r),c.jsxDEV(c.Fragment,{children:[e,o]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/cache-quota-provider/CacheQuotaProvider.tsx",lineNumber:52,columnNumber:5},void 0)},pc={visible:!1,position:{x:0,y:0},sourceElement:null,currentShape:null,hitIndex:-1,hitPoint:null,mode:"hover",arrowLineElement:null,arrowLineEndPoint:null},Gy=new WeakMap,$d=new WeakMap;function fc(e){return Gy.get(e)||pc}function da(e,t){Gy.set(e,t);const n=$d.get(e);n&&n(t)}function tR(e,t){return $d.set(e,t),()=>{$d.delete(e)}}function mp(e){da(e,pc)}const Xr=100;function nR(e,t,n,i,s){const o=AE(n),r=Ae.getRectangleByPoints(t.points),a=r.width,l=r.height,u=r.x+a/2,d=r.y+l/2,f=Ae.getEdgeCenterPoints(r)[n];let h,g;switch(o){case $t.right:h=u+a/2+Xr+a/2,g=d;break;case $t.bottom:h=u,g=d+l/2+Xr+l/2;break;case $t.left:h=u-a/2-Xr-a/2,g=d;break;case $t.top:h=u,g=d-l/2-Xr-l/2;break;default:h=u+a/2+Xr+a/2,g=d}const b=[[h-a/2,g-l/2],[h+a/2,g+l/2]],x=Dm(e,b,s);if(x.fill="#ffffff",ee.isShapeElement(t)&&!ee.isText(t)){const V=t;V.angle!==void 0&&(x.angle=V.angle),V.fill&&V.fill!=="none"&&(x.fill=V.fill),V.strokeColor!==void 0&&(x.strokeColor=V.strokeColor),V.strokeStyle!==void 0&&(x.strokeStyle=V.strokeStyle),V.strokeWidth!==void 0&&(x.strokeWidth=V.strokeWidth)}const y=Zl(f,t)||f,w=ee.isShapeElement(t)?_a(e,y,t):void 0;let v;switch(o){case $t.right:v=3;break;case $t.bottom:v=0;break;case $t.left:v=1;break;case $t.top:v=2;break;default:v=3}const S=Ae.getRectangleByPoints(x.points),N=Ae.getEdgeCenterPoints(S)[v],E=Zl(N,x)||N,I=_a(e,E,x),T=lx(qi.straight,[y,E],{marker:Ia.none,connection:w,boundId:t.id},{marker:Ia.arrow,connection:I,boundId:x.id},[],{});Se.insertNode(e,T,[e.children.length]),ax(e,x),mp(e);const j=x.id;setTimeout(()=>{const V=e.children.findIndex(D=>D.id===j),_=V>=0?e.children[V]:null;_&&(Is(e),ho(e,_),Ue.updatePointerType(e,dn.selection),Se.setNode(e,{_forceRender:Date.now()},[V]),Se.setNode(e,{_forceRender:void 0},[V]))},50)}function iR(e,t,n,i){var g;let s=100,o=100;const r=t,a=(g=r.source)==null?void 0:g.boundId;if(a){const b=e.children.find(x=>x.id===a);if(b&&ee.isShapeElement(b)){const x=Ae.getRectangleByPoints(b.points);s=x.width,o=x.height}}const l=[[n[0]-s/2,n[1]-o/2],[n[0]+s/2,n[1]+o/2]],u=Dm(e,l,i);u.fill="#ffffff";const d=Ae.getRectangleByPoints(u.points),m=Ae.getEdgeCenterPoints(d),f=r.points||[];if(f.length>=2){const b=f[0],x=f[f.length-1],y=x[0]-b[0],w=x[1]-b[1];let v;Math.abs(y)>Math.abs(w)?v=y>0?3:1:v=w>0?0:2;const S=m[v],k=_a(e,S,u),N=e.children.findIndex(E=>E.id===t.id);N!==-1&&Se.setNode(e,{target:{marker:Ia.arrow,connection:k,boundId:u.id},points:[b,S]},[N])}ax(e,u),mp(e);const h=u.id;setTimeout(()=>{const b=e.children.findIndex(y=>y.id===h),x=b>=0?e.children[b]:null;x&&(Is(e),ho(e,x),Ue.updatePointerType(e,dn.selection),Se.setNode(e,{_forceRender:Date.now()},[b]),Se.setNode(e,{_forceRender:void 0},[b]))},50)}const sR=e=>{const{pointerMove:t,pointerLeave:n,globalPointerUp:i}=e;let s=null,o=-1,r=e.children.length,a={x:0,y:0};return e.pointerMove=l=>{var S;a={x:l.clientX,y:l.clientY},s&&(clearTimeout(s),s=null);const u=rx(e),d=u.length===1&&u[0],m=fc(e);if(!d||!ee.isShapeElement(d)||ee.isText(d)){if(m.visible&&m.mode==="hover"&&da(e,{...pc}),o=-1,d&&ee.isShapeElement(d)&&!Yo.getElementRef(d))return;t(l);return}if(!Yo.getElementRef(d)){o=-1;return}const h=_E(e,l.x,l.y),g=IE(e,d,!0),b=CE(e,h,d,!0)||h,x=jE(b,g),y=g[x];if(y){if(x!==o||!m.visible){o=x;const k=l.clientX,N=l.clientY;s=setTimeout(()=>{const E=ee.isImage(d)?st.rectangle:d.shape||st.rectangle;da(e,{visible:!0,position:{x:k-140,y:N+20},sourceElement:d,currentShape:E,hitIndex:x,hitPoint:y,mode:"hover"})},50)}}else o=-1,m.visible&&m.mode==="hover"&&(s=setTimeout(()=>{const k=fc(e);k.visible&&k.mode==="hover"&&da(e,{...pc})},300));const w=Yo.getElementRef(d);(S=w==null?void 0:w.getGenerator)!=null&&S.call(w,PE.key)&&t(l)},e.pointerLeave=l=>{s&&(clearTimeout(s),s=null),n(l)},e.globalPointerUp=l=>{var d;i(l);const u=e.children.length;if(u>r){const m=e.children[u-1];if(ee.isArrowLine(m)){const f=m;if(!((d=f.target)==null?void 0:d.boundId)){const g=f.points||[];if(g.length>=2){const b=g[g.length-1];setTimeout(()=>{da(e,{visible:!0,position:{x:a.x-140,y:a.y+20},sourceElement:null,currentShape:st.rectangle,hitIndex:-1,hitPoint:null,mode:"arrowLine",arrowLineElement:m,arrowLineEndPoint:b})},50)}}}}r=e.children.length},e},Kr=100;function oR(e){switch(e){case"ArrowRight":return $t.right;case"ArrowDown":return $t.bottom;case"ArrowLeft":return $t.left;case"ArrowUp":return $t.top;default:return null}}function rR(e){switch(e){case $t.top:return 0;case $t.right:return 1;case $t.bottom:return 2;case $t.left:return 3;default:return 1}}function aR(e){return(e+2)%4}function lR(e,t,n,i,s,o){const r={x:t-i/2,y:n-s/2,width:i,height:s};for(const a of e.children)if(a.id!==o&&ee.isDrawElement(a)&&!ee.isArrowLine(a))try{const l=Ae.getRectangleByPoints(a.points);if(r.x<l.x+l.width&&r.x+r.width>l.x&&r.y<l.y+l.height&&r.y+r.height>l.y)return!0}catch{}return!1}function cR(e,t,n){const i=Ae.getRectangleByPoints(t.points),s=i.width,o=i.height,r=i.x+s/2,a=i.y+o/2;let l,u;switch(n){case $t.right:l=r+s/2+Kr+s/2,u=a;break;case $t.bottom:l=r,u=a+o/2+Kr+o/2;break;case $t.left:l=r-s/2-Kr-s/2,u=a;break;case $t.top:l=r,u=a-o/2-Kr-o/2;break;default:l=r+s/2+Kr+s/2,u=a}let d=0;const m=n===$t.right||n===$t.left?o+20:s+20;for(;lR(e,l,u,s,o,t.id)&&(d+=m,n===$t.right||n===$t.left?u=a+d:l=r+d,!(d>1e3)););const f=[[l-s/2,u-o/2],[l+s/2,u+o/2]],g=t.shape||"rectangle",b=Dm(e,f,g);if(b.fill="#ffffff",ee.isShapeElement(t)&&!ee.isText(t)){const D=t;D.fill&&D.fill!=="none"&&(b.fill=D.fill),D.strokeColor!==void 0&&(b.strokeColor=D.strokeColor),D.strokeWidth!==void 0&&(b.strokeWidth=D.strokeWidth)}const x=rR(n),y=aR(x),v=Ae.getEdgeCenterPoints(i)[x],S=Zl(v,t)||v,k=ee.isShapeElement(t)?_a(e,S,t):void 0,N=Ae.getRectangleByPoints(b.points),I=Ae.getEdgeCenterPoints(N)[y],T=Zl(I,b)||I,j=_a(e,T,b),V=lx(qi.elbow,[S,T],{marker:Ia.none,connection:k,boundId:t.id},{marker:Ia.arrow,connection:j,boundId:b.id},[],{});Se.insertNode(e,V,[e.children.length]),Se.insertNode(e,b,[e.children.length]);const _=b.id;setTimeout(()=>{const D=e.children.find(C=>C.id===_);D&&(Is(e),ho(e,D),Ue.updatePointerType(e,dn.selection),hi(e,[l,u]))},50)}function uR(e,t){var s,o,r,a;const n=[],i=[];for(const l of e.children){if(!ee.isArrowLine(l))continue;const u=l;if(((s=u.source)==null?void 0:s.boundId)===t.id&&((o=u.target)!=null&&o.boundId)){const d=e.children.find(m=>m.id===u.target.boundId);d&&i.push(d)}if(((r=u.target)==null?void 0:r.boundId)===t.id&&((a=u.source)!=null&&a.boundId)){const d=e.children.find(m=>m.id===u.source.boundId);d&&n.push(d)}}return{incoming:n,outgoing:i}}function dR(e,t,n){const{incoming:i,outgoing:s}=uR(e,t),o=n?[...s,...i]:[...i,...s];if(o.length===0)return!1;const r=o[0];Is(e),ho(e,r);try{const a=It(e,[r],!1),l=a.x+a.width/2,u=a.y+a.height/2;hi(e,[l,u])}catch{}return!0}const mR=e=>{const{keyDown:t}=e;return e.keyDown=n=>{if(!n.altKey&&!n.metaKey&&!n.ctrlKey){if(!n.shiftKey){const i=oR(n.key);if(i!==null){const s=rx(e);if(s.length===1){const o=s[0];if(ee.isShapeElement(o)&&!ee.isText(o)&&!ee.isImage(o)){cR(e,o,i),n.preventDefault();return}}}}if(n.key==="Tab"){const i=ut(e);if(i.length===1){const s=i[0];if(ee.isDrawElement(s)&&ee.isShapeElement(s)&&dR(e,s,!n.shiftKey)){n.preventDefault();return}}}}t(n)},e},pR=240,fR=new Set(["5","7"]);function hR(e,t,n){const i=n*Math.PI/180,s=Math.cos(i),o=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*s-a*o,t[1]+r*o+a*s]}function gR(e,t,n=0){const i=Ae.getCenterPoint(e),o=So(e,Rs).filter(r=>fR.has(String(r.handle)));if(n){const r=hR(t,i,-n),a=o.find(l=>Ae.isHit(Ae.getRectangleByPoints([r,r]),l.rectangle));return a&&(a.cursorClass=Oc(a.cursorClass,n)),a}return o.find(r=>Ae.isHit(Ae.getRectangleByPoints([t,t]),r.rectangle))}function bR(e){const t=ut(e);return t.length===1&&ks(t[0])}function xR(e,t){const n=ut(e);if(n.length!==1||!ks(n[0]))return null;const i=n[0],s=Ae.getRectangleByPoints(i.points),o=gR(s,t,0);return o?{element:i,rectangle:s,handle:o.handle,cursorClass:o.cursorClass}:null}function wR(e,t,n,i){const s=e.width/e.height,o=t==="7",r=o?-n:n,a=Math.max(pR,e.width+r),l=a/s,u=(e.height-l)/2;return{x:o?e.x+(e.width-a):e.x,y:e.y+u,width:a,height:l}}function yR(e,t,n){const{element:i,rectangle:s,handle:o}=t,{startPoint:r,endPoint:a}=n;if(!s)return;const l=a[0]-r[0];a[1]-r[1];const u=wR(s,o,l),d=[[u.x,u.y],[u.x+u.width,u.y+u.height]],m=e.children.findIndex(f=>f.id===i.id);m>=0&&Se.setNode(e,{points:d},[m])}const NR=e=>Eo(e,{key:"audio-nodes",canResize:()=>bR(e),hitTest:(t=>xR(e,t)),onResize:(t,n)=>yR(e,t,n)}),vR=[{icon:c.jsxDEV(I0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:27,columnNumber:11},void 0),title:"Rectangle",pointer:st.rectangle},{icon:c.jsxDEV(C0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:28,columnNumber:11},void 0),title:"Ellipse",pointer:st.ellipse},{icon:c.jsxDEV(j0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:29,columnNumber:11},void 0),title:"Triangle",pointer:st.triangle},{icon:c.jsxDEV(P0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:30,columnNumber:11},void 0),title:"Terminal",pointer:gm.terminal},{icon:c.jsxDEV(A0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:31,columnNumber:11},void 0),title:"Diamond",pointer:st.diamond},{icon:c.jsxDEV(M0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:32,columnNumber:11},void 0),title:"Parallelogram",pointer:st.parallelogram},{icon:c.jsxDEV(V0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:33,columnNumber:11},void 0),title:"RoundRectangle",pointer:st.roundRectangle}],kR=({visible:e,position:t,currentShape:n,onSelectShape:i,onClose:s,container:o})=>{const r=p.useRef(null);p.useEffect(()=>{if(!e)return;const f=b=>{r.current&&!r.current.contains(b.target)&&s()},h=b=>{b.key==="Escape"&&s()},g=setTimeout(()=>{document.addEventListener("mousedown",f),document.addEventListener("keydown",h)},50);return()=>{clearTimeout(g),document.removeEventListener("mousedown",f),document.removeEventListener("keydown",h)}},[e,s]);const a=p.useCallback(f=>{i(f)},[i]);if(!e)return null;const l={x:isNaN(t.x)?0:t.x,y:isNaN(t.y)?0:t.y},u=200,d=80;typeof window<"u"&&(l.x+u>window.innerWidth&&(l.x=window.innerWidth-u-10),l.y+d>window.innerHeight&&(l.y=t.y-d-20));const m=c.jsxDEV("div",{ref:r,className:ne("auto-complete-shape-picker",Yt),style:{left:l.x,top:l.y},children:c.jsxDEV(Mt,{padding:1,children:c.jsxDEV(Kt.Col,{gap:1,children:c.jsxDEV(Kt.Row,{gap:1,children:vR.map((f,h)=>c.jsxDEV(Ne,{className:ne("shape-button",{"is-current":n===f.pointer}),type:"icon",size:"small",visible:!0,icon:f.icon,tooltip:f.title,"aria-label":f.title,onPointerDown:({event:g})=>{g.stopPropagation(),a(f.pointer)}},h,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:127,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:125,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:124,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:123,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:115,columnNumber:5},void 0);return o?cs.createPortal(m,o):m},ER={visible:!1,position:{x:0,y:0},sourceElement:null,currentShape:null,hitIndex:-1,hitPoint:null,mode:"hover"};function SR(e){const[t,n]=p.useState(ER);p.useEffect(()=>{if(!e)return;n(fc(e));const o=tR(e,r=>{n(r)});return()=>{o()}},[e]);const i=p.useCallback(o=>{if(!e)return;const r=fc(e);r.mode==="arrowLine"?r.arrowLineElement&&r.arrowLineEndPoint&&iR(e,r.arrowLineElement,r.arrowLineEndPoint,o):r.sourceElement&&r.hitPoint&&r.hitIndex>=0&&nR(e,r.sourceElement,r.hitIndex,r.hitPoint,o)},[e]),s=p.useCallback(()=>{e&&mp(e)},[e]);return{state:t,selectShape:i,closePicker:s}}const TR="#ffffff",DR=[st.rectangle,st.ellipse,st.triangle,st.diamond,st.parallelogram,st.roundRectangle];function Bg(e){if(!ee.isGeometry(e)||ee.isText(e)||ee.isImage(e))return!1;const t=e;return!(!t.shape||!DR.includes(t.shape)||t.fill&&t.fill!=="none")}const _R=e=>{const{afterChange:t}=e,n=new Set;return e.afterChange=()=>{t();const i=[];e.children.forEach((s,o)=>{Bg(s)&&!n.has(s.id)&&(i.push({path:[o],element:s}),n.add(s.id))}),i.length>0&&setTimeout(()=>{i.forEach(({path:s})=>{const o=e.children[s[0]];o&&Bg(o)&&Se.setNode(e,{fill:TR},s)})},0)},e},hc=new WeakMap;let Uu=null,Hi=null;function Hy(e,t){try{const n=Yo.getElementG(t);if(n)return n}catch{}if(t!=null&&t.id){const n=J.getElementHost(e);if(n){const i=n.querySelector(`g[id="${t.id}"]`);if(i)return i}}return null}function Wy(e){return e.querySelector("path, rect, ellipse, polygon, circle")}function $y(e){let t=e.querySelector("defs");return t||(t=ME(),e.insertBefore(t,e.firstChild)),t}function IR(e,t){const n=hc.get(t);if(n){const i=e.querySelector(`#${n}`);i&&i.remove()}}function gc(e,t,n){const i=Hy(e,t);if(!i)return;const s=Wy(i);if(!s)return;const o=i.closest("svg");if(!o)return;const r=It(e,[t],!1),a=(r==null?void 0:r.width)||100,l=(r==null?void 0:r.height)||100,u=cx(n,t.id,a,l),d=$y(o);if(u.defElement){const m=u.defElement.id,f=d.querySelector(`#${m}`);f?f.replaceWith(u.defElement):d.appendChild(u.defElement),s.setAttribute("fill",u.fillValue),hc.set(t,m);const h=hc.get(t);if(h&&h!==m){const g=d.querySelector(`#${h}`);g&&g.remove()}}else s.setAttribute("fill",u.fillValue),IR(o,t)}function Fl(e,t){return e.children.find(n=>n.id===t)||null}function Yi(e){const t=e.fillConfig;return t&&Zi(t)?t:e.fill&&Zi(e.fill)?e.fill:null}function Xy(e,t){if(!e)return!1;if(e==="[object Object]")return!0;if(e.startsWith("url(#")){const n=e.match(/url\(#([^)]+)\)/);if(n){const i=n[1];if(!document.getElementById(i))return!0}return!1}if(t){const n=Yi(t);if(n&&(n.type==="gradient"||n.type==="image"))return!0}return!1}function CR(e){if(!Hi)return;const t=new Set;e.forEach(n=>{if(n.type==="attributes"&&n.attributeName==="fill"){const i=n.target,s=i.getAttribute("fill"),o=i.closest("g[id]");if(o){const r=o.getAttribute("id");if(r){const a=Fl(Hi,r),l=a?Yi(a):null;a&&l&&bi(Hi,a)&&Xy(s,a)&&t.add(a)}}}n.type==="childList"&&n.addedNodes.forEach(i=>{if(i instanceof SVGGElement&&i.hasAttribute("id")){const s=i.getAttribute("id");if(s){const o=Fl(Hi,s),r=o?Yi(o):null;o&&r&&bi(Hi,o)&&t.add(o)}}if(i instanceof Element){const s=i.closest("g[id]");if(s){const o=s.getAttribute("id");if(o){const r=Fl(Hi,o),a=r?Yi(r):null;r&&a&&bi(Hi,r)&&t.add(r)}}}})}),t.size>0&&t.forEach(n=>{const i=Yi(n);i&&gc(Hi,n,i)})}function jR(e){if(Uu)return;const t=J.getElementHost(e);t&&(Hi=e,Uu=new MutationObserver(CR),Uu.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["fill"]}))}function PR(e){const t=J.getElementHost(e);if(!t)return;t.querySelectorAll("path[fill], rect[fill], ellipse[fill], polygon[fill], circle[fill]").forEach(i=>{const s=i.getAttribute("fill"),o=i.closest("g[id]");if(o){const r=o.getAttribute("id");if(r){const a=Fl(e,r),l=a?Yi(a):null;a&&l&&bi(e,a)&&Xy(s,a)&&gc(e,a,l)}}})}function Xd(e,t=!1){e.children.forEach(n=>{const i=Yi(n);i&&bi(e,n)&&(t?gc(e,n,i):requestAnimationFrame(()=>{gc(e,n,i)}))}),t&&PR(e)}let Fg=!0;const Gg=new WeakSet;function Ky(e){const t=J.getElementHost(e);if(!t)return;const n=t.closest("svg")||t.querySelector("svg");n&&e.children.forEach(i=>{const s=Yi(i);if(s&&(s.type==="gradient"||s.type==="image")&&bi(e,i)){const o=It(e,[i],!1),r=(o==null?void 0:o.width)||100,a=(o==null?void 0:o.height)||100,l=cx(s,i.id,r,a);if(l.defElement){const u=$y(n);u.querySelector(`#${l.defElement.id}`)||(u.appendChild(l.defElement),hc.set(i,l.defElement.id))}}})}function AR(e){let t=0;return e.children.forEach(n=>{const i=Yi(n);if(i&&(i.type==="gradient"||i.type==="image")&&bi(e,n)){const s=Hy(e,n);(s?Wy(s):null)||t++}}),t}function MR(e){if(Gg.has(e))return;Gg.add(e);const t=15,n=16;let i=0;const s=()=>{i++;try{if(!J.getElementHost(e))return;if(Ky(e),Xd(e,!0),AR(e)>0&&i<t){const a=Math.min(n*Math.pow(1.5,i),500);setTimeout(s,a)}}catch{}};requestAnimationFrame(()=>{s(),setTimeout(s,0)})}const VR=e=>{const{afterChange:t}=e;return e.afterChange=()=>{t(),jR(e),Ky(e),Fg?(Fg=!1,Xd(e,!0),MR(e)):Xd(e,!0)},e};function UR(e,t){return So(e,Rs).find(i=>Ae.isHit(Ae.getRectangleByPoints([t,t]),i.rectangle))}function RR(e){const t=ut(e);return t.length!==1?!1:Ri(t[0])}function qR(e,t){const n=ut(e);if(n.length!==1||!Ri(n[0]))return null;const i=n[0],s=Ae.getRectangleByPoints(i.points),o=UR(s,t);return o?{element:i,rectangle:s,handle:o.handle,cursorClass:o.cursorClass}:null}function LR(e,t,n){const{element:i,rectangle:s,handle:o}=t;if(!s)return;const{startPoint:r,endPoint:a}=n,l=a[0]-r[0],u=a[1]-r[1],d=kr(s,o,l,u,Ha(),60),m=[[d.x,d.y],[d.x+d.width,d.y+d.height]],f=e.children.findIndex(h=>h.id===i.id);f>=0&&Se.setNode(e,{points:m},[f])}function OR(e,t){const{element:n}=t,i=e.children.find(s=>s.id===n.id);i&&ld.updateFrameMembers(e,i)}const zR=e=>Eo(e,{key:"frame-elements",canResize:()=>RR(e),hitTest:t=>qR(e,t),onResize:(t,n)=>LR(e,t,n),afterResize:t=>OR(e,t)});function Ru(e){return!!e.locked}const BR=e=>{const{isHit:t,isRectangleHit:n,isMovable:i}=e;return e.isHit=(s,o,r)=>Ru(s)?!1:t(s,o,r),e.isRectangleHit=(s,o)=>Ru(s)?!1:n(s,o),e.isMovable=s=>Ru(s)?!1:i(s),e},Kd="aitu-tab-sync-version",FR=500,Yd=`tab-${Date.now()}-${Math.random().toString(36).substr(2,9)}`;function Yy({onSyncNeeded:e,enabled:t=!0,currentBoardId:n}){const i=p.useRef(-1),s=p.useRef();p.useEffect(()=>{if(!t)return;const o=localStorage.getItem(Kd);if(o)try{const r=JSON.parse(o);i.current=r.version}catch{i.current=parseInt(o,10)||Date.now()}else i.current=Date.now()},[t]),p.useEffect(()=>{if(!t)return;const o=()=>{const a=localStorage.getItem(Kd);if(a)try{const l=JSON.parse(a);if(l.version>i.current&&l.tabId!==Yd){const u=n&&l.boardId&&l.boardId===n;i.current=l.version,u&&e()}else l.version>i.current&&l.tabId===Yd&&(i.current=l.version)}catch{const l=parseInt(a,10);l>i.current&&(i.current=l)}};s.current=setInterval(()=>{document.hidden||o()},FR);const r=()=>{document.hidden||o()};return document.addEventListener("visibilitychange",r),()=>{s.current&&clearInterval(s.current),document.removeEventListener("visibilitychange",r)}},[t,e,n])}function Zy(e){try{const n={version:Date.now(),tabId:Yd,boardId:e};localStorage.setItem(Kd,JSON.stringify(n))}catch{}}const Lz=Object.freeze(Object.defineProperty({__proto__:null,markTabSyncVersion:Zy,useTabSync:Yy},Symbol.toStringTag,{value:"Module"})),qu=new Set;function GR(){const e=typeof navigator<"u"?navigator.connection:void 0;return e?e.saveData?!1:e.effectiveType!=="slow-2g"&&e.effectiveType!=="2g":!0}function HR(e){if(typeof window>"u"||!("serviceWorker"in navigator)||e.length===0||!GR())return;const t=e.filter(o=>qu.has(o)?!1:(qu.add(o),!0));if(t.length===0)return;const n={type:"SW_PREFETCH_GROUPS",groups:t},i=()=>{const o=navigator.serviceWorker.controller;if(o){o.postMessage(n);return}navigator.serviceWorker.ready.then(r=>{var a;(a=r.active)==null||a.postMessage(n)}).catch(()=>{t.forEach(r=>qu.delete(r))})},s=window.requestIdleCallback;typeof s=="function"?s(()=>i(),{timeout:1500}):window.setTimeout(i,400)}const Hg=/^(调用|CALL)\s+(\S+)/im,WR=/^-\s*([\w]+)\s*:\s*(.+)/,$R=/^\d+(\.\d+)?$/,XR=/^\s*(#|\/\/)/;class bc{static parse(t,n,i="skill",s){if(!t||!t.trim())return null;const o=t.split(`
|
|
67
|
+
`),r=[];let a=null,l=0;for(const d of o){const m=d.trim();if(!m||XR.test(m))continue;const f=m.match(Hg);if(f){a&&r.push(a),l++;const h=f[2].replace(/\\(.)/g,"$1");a={id:`${i}-step-${l}`,mcp:h,args:{},options:{mode:"async"},description:`执行 ${h}`,status:"pending"};continue}if(a){const h=m.match(WR);if(h){const g=h[1].trim(),b=h[2].trim().replace(/\\(.)/g,"$1"),x=$R.test(b)?Number(b):b;a.args[g]=x}}}if(a&&r.push(a),r.length===0)return null;const u=s||n.input;if(u)for(const d of r)bc.injectUserInput(d,String(u));return{steps:r,parseMethod:"regex"}}static injectUserInput(t,n){var o,r;const i=["topic","theme","prompt","query","text","content"];for(const a of i)if(a in t.args)return;const s=js.getTool(t.mcp);if(s){const a=s.inputSchema.required||[],l=s.inputSchema.properties||{};for(const u of i)if(a.includes(u)&&((o=l[u])==null?void 0:o.type)==="string"){t.args[u]=n;return}for(const u of a)if(((r=l[u])==null?void 0:r.type)==="string"&&!(u in t.args)){t.args[u]=n;return}}t.args.theme=n}static isDSLContent(t){return!t||!t.trim()?!1:t.split(`
|
|
68
|
+
`).some(i=>Hg.test(i.trim()))}static extractToolNamesFromContent(t){if(!t||!t.trim())return[];const n=new Set,i=/(调用|CALL)\s+(\S+)/gim;let s;for(;(s=i.exec(t))!==null;){const a=s[2].replace(/\\(.)/g,"$1");n.add(a)}const o=/\b([a-z][a-z0-9]*(?:_[a-z0-9]+)+)\b/g;for(;(s=o.exec(t))!==null;)n.add(s[1]);const r=/mcp:\s*(\S+)/gi;for(;(s=r.exec(t))!==null;){const a=s[1].replace(/\\(.)/g,"$1");n.add(a)}return Array.from(n)}}const Xs="system",Jy="external",Gl="auto",Oz="__external_skill__:",xc=[{id:"generate_inspiration_board",name:"灵感图",mcpTool:"generate_inspiration_board",description:`灵感图
|
|
69
|
+
|
|
70
|
+
生成创意灵感拼贴图,将多张图片以不规则分割的方式拼合,以散落的横向布局插入画布,营造富有创意感的视觉效果。
|
|
71
|
+
|
|
72
|
+
**使用方式:** 在 AI 输入框中描述你的主题或灵感关键词,选择「灵感图」Skill 后提交,AI 将直接生成灵感拼贴图并插入画布。
|
|
73
|
+
|
|
74
|
+
**适用场景:** 创意头脑风暴、情绪板制作、视觉灵感收集。
|
|
75
|
+
|
|
76
|
+
**工作流:**
|
|
77
|
+
|
|
78
|
+
调用 generate_inspiration_board
|
|
79
|
+
- imageCount: 9
|
|
80
|
+
- imageSize: 16x9`,type:Xs},{id:"generate_grid_image",name:"宫格图",mcpTool:"generate_grid_image",description:`宫格图
|
|
81
|
+
|
|
82
|
+
生成整齐排列的宫格图片墙,将多张主题相关图片按网格布局排列在画布上,适合产品展示、表情包制作等场景。
|
|
83
|
+
|
|
84
|
+
**使用方式:** 在 AI 输入框中描述你的主题,选择「宫格图」Skill 后提交,AI 将直接生成宫格图并插入画布。
|
|
85
|
+
|
|
86
|
+
**适用场景:** 产品展示墙、表情包制作、图片集合展示。
|
|
87
|
+
|
|
88
|
+
**工作流:**
|
|
89
|
+
|
|
90
|
+
调用 generate_grid_image
|
|
91
|
+
- rows: 3
|
|
92
|
+
- cols: 3
|
|
93
|
+
- layoutStyle: scattered`,type:Xs},{id:"generate_flowchart",name:"流程图",description:`流程图
|
|
94
|
+
|
|
95
|
+
你是一个流程图专家。请根据用户的描述,生成 Mermaid 格式的流程图代码,并调用 insert_mermaid 工具将其插入画布。
|
|
96
|
+
|
|
97
|
+
**要求:**
|
|
98
|
+
1. 分析用户需求,设计合理的流程结构。
|
|
99
|
+
2. 使用 Mermaid 语法生成代码。
|
|
100
|
+
3. 必须调用 insert_mermaid 工具。`,type:Xs},{id:"generate_mindmap",name:"思维导图",description:`思维导图
|
|
101
|
+
|
|
102
|
+
你是一个思维导图专家。请根据用户的描述,生成 Markdown 格式的思维导图内容,并调用 insert_mindmap 工具将其插入画布。
|
|
103
|
+
|
|
104
|
+
**要求:**
|
|
105
|
+
1. 使用 Markdown 列表语法(# 标题, - 列表项)。
|
|
106
|
+
2. 结构清晰,层级分明。
|
|
107
|
+
3. 必须调用 insert_mindmap 工具。`,type:Xs},{id:"generate_svg",name:"SVG矢量图",description:`SVG矢量图
|
|
108
|
+
|
|
109
|
+
你是一个矢量图形设计师。请根据用户的描述,编写 SVG 代码,并调用 insert_svg 工具将其插入画布。
|
|
110
|
+
|
|
111
|
+
**要求:**
|
|
112
|
+
1. 生成标准 SVG 代码,包含 xmlns 和 viewBox。
|
|
113
|
+
2. 代码简洁,适合作为图标或 Logo。
|
|
114
|
+
3. 必须调用 insert_svg 工具。`,type:Xs},{id:"generate_ppt",name:"PPT演示",mcpTool:"generate_ppt",description:`PPT演示
|
|
115
|
+
|
|
116
|
+
生成 PPT 演示文稿大纲并自动布局。
|
|
117
|
+
|
|
118
|
+
**使用方式:** 输入 PPT 主题,选择「PPT演示」Skill 后提交。
|
|
119
|
+
|
|
120
|
+
**适用场景:** 演示文稿、课件制作、汇报材料。
|
|
121
|
+
|
|
122
|
+
**工作流:**
|
|
123
|
+
|
|
124
|
+
调用 generate_ppt`,type:Xs},{id:"role_chat_pm",name:"产品经理",description:`你是一位拥有 10 年经验的资深产品经理,擅长将模糊的业务需求转化为清晰的产品文档。
|
|
125
|
+
|
|
126
|
+
用户会描述一个功能需求或产品想法,请用以下结构回复:
|
|
127
|
+
|
|
128
|
+
1. **需求背景**:简述该功能的业务价值(2-3句)
|
|
129
|
+
2. **用户故事**:以"作为[用户],我希望[功能],以便[价值]"格式描述
|
|
130
|
+
3. **功能要点**:列出 3-5 个核心功能点
|
|
131
|
+
4. **验收标准**:列出可量化的验收条件
|
|
132
|
+
|
|
133
|
+
请保持简洁专业,避免冗余描述。`,type:Xs}];function KR(e){return xc.find(t=>t.id===e)}let pp=[];function Qy(e){pp=e}function zz(){return pp}function YR(e){return pp.find(t=>t.id===e)}function eN(e){if(!e||typeof e!="string")return console.warn("[ExternalSkillParser] SKILL.md 内容为空"),null;const t=e.trim();if(!t.startsWith("---"))return console.warn("[ExternalSkillParser] SKILL.md 缺少 YAML front matter(未以 --- 开头)"),null;const n=t.indexOf("---",3);if(n===-1)return console.warn("[ExternalSkillParser] SKILL.md YAML front matter 未闭合(缺少结束 ---)"),null;const i=t.substring(3,n).trim(),s=t.substring(n+3).trim(),o=ZR(i),r=o.name,a=o.description||"";return r?{name:r,description:a,body:s}:(console.warn("[ExternalSkillParser] SKILL.md 缺少必填字段 name"),null)}function ZR(e){const t={},n=e.split(`
|
|
134
|
+
`);for(const i of n){const s=i.trim();if(!s||s.startsWith("#"))continue;const o=s.indexOf(":");if(o===-1)continue;const r=s.substring(0,o).trim();let a=s.substring(o+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),r&&(t[r]=a)}return t}function JR(e){try{const t=JSON.parse(e);if(!t.plugins||!Array.isArray(t.plugins))return console.warn("[ExternalSkillParser] marketplace.json 缺少 plugins 数组"),null;const n=new Map,i=[];for(const s of t.plugins){const o={name:s.name||"",description:s.description||"",skills:[]};if(Array.isArray(s.skills))for(const r of s.skills){const a=QR(r);o.skills.push(a),n.set(a,s.name||"")}i.push(o)}return{name:t.name||"",metadata:t.metadata?{description:t.metadata.description,version:t.metadata.version}:void 0,plugins:i,skillCategoryMap:n}}catch(t){return console.warn("[ExternalSkillParser] marketplace.json 解析失败:",t),null}}function QR(e){let t=e.trim();return t.startsWith("./")&&(t=t.substring(2)),t.startsWith("skills/")&&(t=t.substring(7)),t.endsWith("/")&&(t=t.slice(0,-1)),t}function e3(e,t){if(!t||t.size===0)return e;let n=e;for(const[i,s]of t){const o=new RegExp("`"+t3(i)+"`","g");n=n.replace(o,`\`${i}\`
|
|
135
|
+
|
|
136
|
+
<details><summary>${i}</summary>
|
|
137
|
+
|
|
138
|
+
${s}
|
|
139
|
+
|
|
140
|
+
</details>`)}return n}function t3(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function n3(e,t,n,i){const s=[];for(const o of e){const r=eN(o.skillMdContent);if(!r){console.warn(`[ExternalSkillParser] 跳过无效 Skill: ${o.dirName}`);continue}let a=r.body;o.references&&o.references.size>0&&(a=e3(a,o.references));const l=(n==null?void 0:n.skillCategoryMap.get(r.name))||(n==null?void 0:n.skillCategoryMap.get(o.dirName));s.push({id:`${t}:${r.name}`,name:r.name,description:r.description,type:Jy,content:a,source:t,sourceUrl:i,category:l})}return s}function i3(e,t){if(t!=="image"||!e||e.trim().length===0)return e;let n=e;return n=n.replace(/```bash\n[\s\S]*?```/g,s=>/npx|bun|scripts\/|\.ts\b|\.js\b|mkdir|cp |mv |rm |cat /i.test(s)?"> *(此步骤在 aitu 中自动处理)*":s),n=n.replace(/(?:Select|Check|Use|Call)\s+(?:available\s+)?image\s+generation\s+skill[s]?[^.\n]*/gi,"调用 generate_image 工具生成图片"),n=n.replace(/(?:If\s+)?(?:multiple\s+)?(?:image\s+generation\s+)?skills?\s+available,?\s*ask\s+(?:user\s+)?preference[^.\n]*/gi,""),n=n.replace(/Call\s+(?:skill\s+)?with\s+prompt\s+file[^.\n]*/gi,"调用 generate_image 工具,传入构建好的 prompt"),n=n.replace(/If\s+image\s+generation\s+skill\s+supports[^.\n]*/gi,""),n=n.replace(/(?:Use\s+)?AskUserQuestion\s+(?:with\s+)?(?:ALL\s+)?(?:questions?\s+)?(?:in\s+ONE\s+call)?[^.\n]*/gi,"自动选择最合适的参数组合"),n=n.replace(/\*\*(?:Use\s+)?AskUserQuestion\*\*[^.\n]*/gi,"**自动选择**最合适的参数组合"),n=n.replace(/ask\s+(?:the\s+)?user\s+with\s+AskUserQuestion[^.\n]*/gi,"自动选择最合适的参数"),n=n.replace(/\bDo\s+NOT\s+split\s+into\s+separate\s+AskUserQuestion\s+calls[^.\n]*/gi,""),n=n.replace(/\*\*Important\*\*:\s*Do NOT split into separate AskUserQuestion[^.\n]*/gi,""),n=n.replace(/\*\*(?:Save|Write)\s+(?:source\s+)?(?:content|to\s+file)\*\*[^.\n]*(?:\n\s*-[^\n]*)*/gi,"> *(文件保存步骤在 aitu 中自动跳过)*"),n=n.replace(/(?:Save|Write)\s+(?:to|the)\s+(?:file|disk|output)[^.\n]*/gi,""),n=n.replace(/\*\*Check\s+for\s+existing\s+file\*\*[^.\n]*(?:\n\s*-[^\n]*)*/gi,""),n=n.replace(/If\s+exists?:\s*Rename\s+to[^\n]*/gi,""),n=n.replace(/\*\*Backup\s+rule\*\*[^\n]*/gi,""),n=n.replace(/output\s+path[,:]?\s*(?:files?\s+created)?[^.\n]*/gi,""),n=n.replace(/(?:^|\n)(?:[│├└─\s]+[^\n]+\n)+/gm,`
|
|
141
|
+
`),n=n.replace(/\n{4,}/g,`
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
`),n+=`
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 执行指引(aitu 环境适配)
|
|
149
|
+
|
|
150
|
+
**你必须严格按照以上 Skill 工作流指令执行。** 在 aitu 环境中,执行规则如下:
|
|
151
|
+
|
|
152
|
+
1. **内容分析**:基于用户输入内容,按照 Skill 中的步骤进行深入分析,提取关键信息
|
|
153
|
+
2. **参数选择**:自动选择最合适的布局(layout)和样式(style),无需询问用户
|
|
154
|
+
3. **Prompt 构建**:严格按照 Skill 中的模板和规则,结合 Reference 中的布局定义和样式定义,构建完整、详细的图片生成 prompt
|
|
155
|
+
4. **图片生成**:将构建好的完整 prompt 作为参数,调用 \`generate_image\` 工具生成图片
|
|
156
|
+
5. **禁止**:不要仅输出文字描述而不生成图片,必须实际调用 \`generate_image\` 工具
|
|
157
|
+
|
|
158
|
+
**重要**:你的最终目标是调用 \`generate_image\` 工具生成一张高质量的图片,而非输出文本分析。
|
|
159
|
+
`,n}function s3(e){if(!/\[(?:Intro|Verse|Chorus|Pre-Chorus|Bridge|Outro|Hook|Fade|Instrumental|Interlude)/i.test(e))return{lyrics:e};const t=e.split(`
|
|
160
|
+
`);let n,i;const s=[];for(const o of t){const r=o.trim();if(!n&&/^#\s+(.+)/.test(r)){n=r.replace(/^#\s+/,"").trim();continue}if(!i&&/^(?:标签|tags)\s*[::]\s*(.+)/i.test(r)){i=r.replace(/^(?:标签|tags)\s*[::]\s*/i,"").trim();continue}s.push(o)}for(;s.length>0&&s[0].trim()==="";)s.shift();for(;s.length>0&&s[s.length-1].trim()==="";)s.pop();return{title:n,tags:i,lyrics:s.join(`
|
|
161
|
+
`)}}function fp(){return`wf-${Date.now()}-${Math.random().toString(36).substring(2,8)}`}function o3(e,t=[]){const{generationType:n,modelId:i,modelRef:s,isModelExplicit:o,prompt:r,userInstruction:a,rawInput:l,count:u,size:d,duration:m,extraParams:f,selection:h}=e,g=[],b=fp(),x=`wf_batch_${b}`;for(let w=0;w<u;w++){const v=`${b}-step-${w+1}`,S={mode:"queue",batchId:x,batchIndex:w+1,batchTotal:u,globalIndex:w+1};if(n==="image"){const k={prompt:r,model:i,modelRef:s,workflowId:b,batchId:x,batchIndex:w+1,batchTotal:u,globalIndex:w+1};d&&(k.size=d),t.length>0&&(k.referenceImages=t),f&&(k.params=f),g.push({id:v,mcp:"generate_image",args:k,options:S,description:u>1?`生成图片 (${w+1}/${u})`:"生成图片",status:"pending"})}else if(n==="video"){const k={prompt:r,model:i,modelRef:s,seconds:m||"5",workflowId:b,batchId:x,batchIndex:w+1,batchTotal:u,globalIndex:w+1};d&&(k.size=d),t.length>0&&(k.referenceImages=t),f&&(k.params=f),g.push({id:v,mcp:"generate_video",args:k,options:S,description:u>1?`生成视频 (${w+1}/${u})`:"生成视频",status:"pending"})}else if(n==="audio"){const k=typeof(f==null?void 0:f.sunoAction)=="string"?f.sunoAction:"music",N=k==="lyrics",E={prompt:r,model:i,modelRef:s,sunoAction:k,workflowId:b,batchId:x,batchIndex:w+1,batchTotal:u,globalIndex:w+1};if(!N&&r){const I=s3(r);(I.title||I.tags)&&(E.prompt=I.lyrics,I.title&&!(f!=null&&f.title)&&(E.title=I.title),I.tags&&!(f!=null&&f.tags)&&(E.tags=I.tags))}f&&(E.params=f,f.notifyHook&&(E.notifyHook=f.notifyHook),!N&&f.mv&&(E.mv=f.mv),!N&&f.title&&(E.title=f.title),!N&&f.tags&&(E.tags=f.tags),!N&&f.continueClipId&&(E.continueClipId=f.continueClipId),!N&&f.continueAt!==void 0&&f.continueAt!==null&&f.continueAt!==""&&(E.continueAt=Number(f.continueAt))),g.push({id:v,mcp:"generate_audio",args:E,options:S,description:u>1?`${N?"生成歌词":"生成音频"} (${w+1}/${u})`:N?"生成歌词":"生成音频",status:"pending"})}else{const k={prompt:r,model:i,modelRef:s,rawInput:l,workflowId:b,batchId:x,batchIndex:w+1,batchTotal:u,globalIndex:w+1};t.length>0&&(k.referenceImages=t),f&&(k.params=f),g.push({id:v,mcp:"generate_text",args:k,options:S,description:"生成文本",status:"pending"})}}const y=n==="audio"&&g.every(w=>w.args.sunoAction==="lyrics");return{id:b,name:n==="image"?"图片生成":n==="video"?"视频生成":n==="text"?"文本生成":y?"歌词生成":"音频生成",description:`使用 ${i} 模型${u>1?`生成 ${u} 个`:"生成"}${n==="image"?"图片":n==="video"?"视频":n==="text"?"文本":y?"歌词":"音频"}`,scenarioType:"direct_generation",generationType:n,steps:g,metadata:{prompt:r,userInstruction:a,rawInput:l,modelId:i,modelRef:s,isModelExplicit:o,count:u,size:d,duration:m,referenceImages:t.length>0?t:void 0,selection:h},createdAt:Date.now()}}function r3(e,t=[]){const{generationType:n,modelId:i,modelRef:s,isModelExplicit:o,prompt:r,userInstruction:a,rawInput:l,count:u,size:d,duration:m,extraParams:f,selection:h}=e,g=fp(),b={userInstruction:a,rawInput:l,model:{id:i,type:n==="agent"?"text":n,isExplicit:o},params:{count:u,size:d,duration:m,...f},selection:h,finalPrompt:r},x=[...h.images||[],...h.graphics||[]];let y=dx();x.length>0&&(y+=cd(x.length,h.imageDimensions));const w=ux(b),v=[{role:"system",content:y},{role:"user",content:w}],S=[{id:`${g}-step-analyze`,mcp:"ai_analyze",args:{context:b,messages:v,referenceImages:x.length>0?x:void 0,textModel:i,modelRef:s},options:{mode:"async"},description:"AI 分析用户意图",status:"pending"}];return{id:g,name:"AI 智能生成",description:"AI 分析用户请求并执行相应操作",scenarioType:"agent_flow",generationType:n,steps:S,metadata:{prompt:r,userInstruction:a,rawInput:l,modelId:i,modelRef:s,isModelExplicit:o,count:u,size:d,duration:m,referenceImages:t.length>0?t:void 0,selection:h},createdAt:Date.now()}}function a3(e){const t=[];for(const n of e){const i=js.getTool(n);if(!i)continue;const s=i.inputSchema.properties||{},o=i.inputSchema.required||[],r=i.promptGuidance,a=Object.entries(s).map(([u,d])=>{var y;const f=o.includes(u)?"(必填)":"(可选)",h=[];d.type&&h.push(`类型: ${d.type}`),d.enum&&Array.isArray(d.enum)&&h.push(`可选值: ${d.enum.map(w=>`"${w}"`).join(" | ")}`),d.default!==void 0&&h.push(`默认: "${d.default}"`);const g=h.length>0?` [${h.join(", ")}]`:"",b=(y=r==null?void 0:r.parameterGuidance)==null?void 0:y[u],x=b?`
|
|
162
|
+
💡 ${b}`:"";return` - **${u}**${f}: ${d.description||"无描述"}${g}${x}`}).join(`
|
|
163
|
+
`);let l=`### ${i.name}
|
|
164
|
+
${i.description}
|
|
165
|
+
|
|
166
|
+
**参数:**
|
|
167
|
+
${a||" 无参数"}`;r!=null&&r.whenToUse&&(l+=`
|
|
168
|
+
|
|
169
|
+
**使用场景:** ${r.whenToUse}`),t.push(l)}return t.length>0?t.join(`
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
`):""}async function vl(e,t,n=[],i){const{generationType:s,modelRef:o,modelId:r,isModelExplicit:a,prompt:l,userInstruction:u,rawInput:d,count:m,size:f,duration:h,selection:g}=e,b=fp(),x=t.id,y=t.name,w=t.type==="system"?t.description:t.content,v=u||l||d,S={input:v,count:m,size:f,model:r},k=bc.parse(w,S,b,v);if(k)return{id:b,name:y,description:`使用「${y}」Skill 生成内容`,scenarioType:"skill_flow",skillId:x,generationType:s,steps:k.steps,metadata:{prompt:l,userInstruction:u,rawInput:d,modelId:r,modelRef:o,isModelExplicit:a,count:m,size:f,duration:h,referenceImages:n.length>0?n:void 0,selection:g,parseMethod:"regex"},createdAt:Date.now()};const N=[...g.images||[],...g.graphics||[]],E={userInstruction:u,rawInput:d,model:{id:r,type:s==="agent"?"text":s,isExplicit:a},params:{count:m,size:f,duration:h},selection:g,finalPrompt:l},I=t.type==="external",T=t.type==="user",V=t.outputType==="image"?"image":"text",D=I||T&&V==="image"?i3(w,V):w;console.log(`[SkillFlow] Skill="${y}" type=${t.type} outputType=${V} isExternal=${I} contentLen=${(D==null?void 0:D.length)||0}`);const C=bc.extractToolNamesFromContent(D),M=C.filter(ue=>js.hasTool(ue));V==="image"&&!M.includes("generate_image")&&js.hasTool("generate_image")&&M.push("generate_image");const U=M.includes("generate_image");if(console.log(`[SkillFlow] referencedTools=[${C.join(",")}] validTools=[${M.join(",")}] hasGenerateImage=${U} → 路径${M.length>0?"B":"C"}`),M.length>0){const ue=a3(M);let oe=`## 当前激活的 Skill:${y}
|
|
174
|
+
|
|
175
|
+
${D}`;ue&&(oe+=`
|
|
176
|
+
|
|
177
|
+
## 可用工具
|
|
178
|
+
|
|
179
|
+
${ue}`),N.length>0&&(oe+=cd(N.length,g.imageDimensions)),oe+=`
|
|
180
|
+
|
|
181
|
+
## 响应格式(严格遵守)
|
|
182
|
+
|
|
183
|
+
你的响应必须是一个有效的 JSON 对象:
|
|
184
|
+
{"content": "你的分析内容", "next": [{"mcp": "工具名称", "args": {"参数名": "参数值"}}]}`,U&&(oe+=`
|
|
185
|
+
|
|
186
|
+
## 执行要求
|
|
187
|
+
|
|
188
|
+
你必须严格按照以上 Skill 工作流指令执行。最终目标是:
|
|
189
|
+
1. 基于用户输入内容,按照 Skill 中的步骤分析并构建高质量的图片描述 prompt
|
|
190
|
+
2. 调用 generate_image 工具生成图片,将构建好的 prompt 作为参数传入
|
|
191
|
+
3. 不要仅输出文字描述,必须实际调用工具生成图片
|
|
192
|
+
|
|
193
|
+
你的回复必须包含对 generate_image 工具的调用,例如:
|
|
194
|
+
{"content": "分析与 prompt 构建过程", "next": [{"mcp": "generate_image", "args": {"prompt": "完整的图片描述 prompt"}}]}`);const me=ux(E),_e=[{role:"system",content:oe},{role:"user",content:me}],Pe=[{id:`${b}-step-analyze`,mcp:"ai_analyze",args:{context:E,messages:_e,referenceImages:N.length>0?N:void 0,textModel:r,modelRef:o},options:{mode:"async"},description:`AI 分析用户意图(Skill: ${y})`,status:"pending"}];return{id:b,name:y,description:`使用「${y}」Skill 生成内容`,scenarioType:"skill_flow",skillId:x,generationType:s,steps:Pe,metadata:{prompt:l,userInstruction:u,rawInput:d,modelId:r,isModelExplicit:a,count:m,size:f,duration:h,referenceImages:n.length>0?n:void 0,selection:g,parseMethod:"agent_fallback"},createdAt:Date.now()}}let F=D||"";N.length>0&&(F+=cd(N.length,g.imageDimensions)),U&&(F+=`
|
|
195
|
+
|
|
196
|
+
## 重要执行指引
|
|
197
|
+
|
|
198
|
+
请基于以上 Skill 指令构建详细的图片描述 prompt,并使用以下 JSON 格式回复以调用图片生成工具:
|
|
199
|
+
{"content": "你的分析", "next": [{"mcp": "generate_image", "args": {"prompt": "你构建的完整 prompt"}}]}
|
|
200
|
+
|
|
201
|
+
你必须实际调用 generate_image 工具生成图片,不要仅输出文字描述。`);const A=[{role:"system",content:F},{role:"user",content:v}],H=[{id:`${b}-step-analyze`,mcp:"ai_analyze",args:{context:E,messages:A,referenceImages:N.length>0?N:void 0,textModel:r,modelRef:o},options:{mode:"async"},description:`AI 以「${y}」角色回复`,status:"pending"}];return{id:b,name:y,description:`使用「${y}」Skill 生成内容`,scenarioType:"skill_flow",skillId:x,generationType:s,steps:H,metadata:{prompt:l,userInstruction:u,rawInput:d,modelId:r,modelRef:o,isModelExplicit:a,count:m,size:f,duration:h,referenceImages:n.length>0?n:void 0,selection:g,parseMethod:"agent_fallback"},createdAt:Date.now()}}function Qs(e,t=[]){return e.scenario==="direct_generation"?o3(e,t):r3(e,t)}function l3(e,t=0){try{let n=uf(e);if(!n){const o=VE(e),r=o.indexOf("{"),a=o.lastIndexOf("}");r>=0&&a>r&&(n=uf(o.slice(r,a+1)))}if(!n)return{content:"",steps:[]};const i=typeof n.content=="string"?n.content:"";if(!Array.isArray(n.next)||n.next.length===0)return{content:i,steps:[]};const s=n.next.filter(o=>typeof o.mcp=="string"&&typeof o.args=="object").map((o,r)=>({id:`step-${t+r+1}`,mcp:o.mcp,args:o.args,description:c3(o.mcp,o.args),status:"pending"}));return{content:i,steps:s}}catch{return{content:"",steps:[]}}}function c3(e,t){var n,i,s,o;switch(e){case"generate_image":return`生成图片: ${((n=t.prompt)==null?void 0:n.substring(0,30))||""}...`;case"generate_video":return`生成视频: ${((i=t.prompt)==null?void 0:i.substring(0,30))||""}...`;case"generate_audio":return`生成音频: ${((s=t.prompt)==null?void 0:s.substring(0,30))||""}...`;case"generate_text":return`生成文本: ${((o=t.prompt)==null?void 0:o.substring(0,30))||""}...`;case"ai_analyze":return"AI 分析用户意图";case"format_markdown":return"格式化输出";case"show_result":return"展示结果";default:return`执行 ${e}`}}function u3(e,t,n,i,s,o){return{...e,steps:e.steps.map(r=>r.id===t?{...r,status:n,result:i!==void 0?i:r.result,error:s,duration:o}:r)}}function d3(e,t){const n=new Set(e.steps.map(s=>s.id)),i=t.filter(s=>!n.has(s.id));return i.length===0?e:{...e,steps:[...e.steps,...i]}}function kl(e){const t=e.steps.filter(r=>r.status==="completed").length,n=e.steps.filter(r=>r.status==="failed").length,i=e.steps.find(r=>r.status==="running"),s=e.steps.filter(r=>r.status==="pending").length;let o;return n>0?o="failed":i?o="running":s===0&&t>0?o="completed":o="pending",{status:o,completedSteps:t,totalSteps:e.steps.length,currentStep:i||e.steps.find(r=>r.status==="pending")}}const Wg={workflow:null,status:"idle",currentStep:null,completedSteps:0,totalSteps:0,error:null};function m3(){const[e,t]=p.useState(Wg),n=p.useRef(null),i=p.useRef(!1),s=p.useCallback(h=>{n.current=h,i.current=!1;const g=kl(h);t({workflow:h,status:"running",currentStep:g.currentStep||null,completedSteps:g.completedSteps,totalSteps:g.totalSteps,error:null})},[]),o=p.useCallback(h=>{n.current=h,i.current=!1;const g=kl(h);let b="running";h.status==="completed"?b="completed":(h.status==="failed"||h.status==="cancelled")&&(b="failed"),t({workflow:h,status:b,currentStep:g.currentStep||null,completedSteps:g.completedSteps,totalSteps:g.totalSteps,error:h.error||null})},[]),r=p.useCallback((h,g,b,x,y)=>{if(i.current)return;const w=n.current;if(!w)return;const v=u3(w,h,g,b,x,y);n.current=v,t(S=>{const k=kl(v);let N="running";return k.status==="completed"?N="completed":k.status==="failed"&&(N="failed"),{...S,workflow:v,status:N,currentStep:k.currentStep||null,completedSteps:k.completedSteps,totalSteps:k.totalSteps,error:x||S.error}})},[]),a=p.useCallback(h=>{if(i.current||h.length===0)return;const g=n.current;if(!g)return;const b=d3(g,h);n.current=b,t(x=>{const y=kl(b);return{...x,workflow:b,currentStep:y.currentStep||x.currentStep,totalSteps:y.totalSteps}})},[]),l=p.useCallback(h=>{const g=n.current;if(!g||i.current)return{content:"",steps:[]};const b=g.steps.length,{content:x,steps:y}=l3(h,b);return x&&!g.aiAnalysis&&(n.current={...g,aiAnalysis:x}),y.length>0&&a(y),{content:x,steps:y}},[a]),u=p.useCallback(()=>{n.current=null,i.current=!1,t(Wg)},[]),d=p.useCallback(()=>{i.current=!0,t(h=>({...h,status:"failed",error:"工作流已中止"}))},[]),m=p.useCallback(()=>{i.current=!1,t(h=>({...h,status:"running",error:null}))},[]),f=p.useCallback(()=>n.current,[]);return{state:e,startWorkflow:s,restoreWorkflow:o,updateStep:r,addSteps:a,addStepsFromAIResponse:l,resetWorkflow:u,abortWorkflow:d,resumeWorkflow:m,getWorkflow:f}}const tN=p.createContext(null),p3=({children:e})=>{const t=m3(),n=p.useMemo(()=>({state:t.state,startWorkflow:t.startWorkflow,restoreWorkflow:t.restoreWorkflow,updateStep:t.updateStep,addSteps:t.addSteps,addStepsFromAIResponse:t.addStepsFromAIResponse,resetWorkflow:t.resetWorkflow,abortWorkflow:t.abortWorkflow,resumeWorkflow:t.resumeWorkflow,getWorkflow:t.getWorkflow}),[t.state,t.startWorkflow,t.restoreWorkflow,t.updateStep,t.addSteps,t.addStepsFromAIResponse,t.resetWorkflow,t.abortWorkflow,t.resumeWorkflow,t.getWorkflow]);return c.jsxDEV(tN.Provider,{value:n,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/contexts/WorkflowContext.tsx",lineNumber:78,columnNumber:5},void 0)};function f3(){const e=p.useContext(tN);if(!e)throw new Error("useWorkflowContext must be used within a WorkflowProvider");return e}function nN(){const e=f3();return{startWorkflow:e.startWorkflow,restoreWorkflow:e.restoreWorkflow,updateStep:e.updateStep,addSteps:e.addSteps,addStepsFromAIResponse:e.addStepsFromAIResponse,resetWorkflow:e.resetWorkflow,abortWorkflow:e.abortWorkflow,resumeWorkflow:e.resumeWorkflow,getWorkflow:e.getWorkflow}}const iN=({items:e,language:t="zh",enableHoverPreview:n=!0,className:i,onRemove:s,removableStartIndex:o=0})=>{const[r,a]=p.useState(null),l=p.useCallback((d,m)=>{if(!n)return;const f=m.currentTarget.getBoundingClientRect(),h=f.left+f.width/2,g=f.top-10;a({type:d.type,url:d.url,text:d.text,x:h,y:g})},[n]),u=p.useCallback(()=>{a(null)},[]);return e.length===0?null:c.jsxDEV(c.Fragment,{children:[n&&r&&UE.createPortal(c.jsxDEV("div",{className:`selected-content-preview__hover selected-content-preview__hover--${r.type}`,style:{left:`${r.x}px`,top:`${r.y}px`,transform:"translate(-50%, -100%)"},children:[(r.type==="image"||r.type==="graphics")&&r.url&&c.jsxDEV("img",{src:r.url,alt:"Preview"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:86,columnNumber:13},void 0),r.type==="video"&&r.url&&c.jsxDEV("div",{className:"selected-content-preview__hover-video",children:c.jsxDEV("video",{src:r.url,controls:!0,autoPlay:!0,muted:!0,loop:!0,playsInline:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:92,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:91,columnNumber:13},void 0),r.type==="text"&&r.text&&c.jsxDEV("div",{className:"selected-content-preview__hover-text",children:[c.jsxDEV("div",{className:"selected-content-preview__hover-text-header",children:[c.jsxDEV(df,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:107,columnNumber:17},void 0),c.jsxDEV("span",{children:t==="zh"?"文字内容":"Text Content"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:108,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:106,columnNumber:15},void 0),c.jsxDEV("div",{className:"selected-content-preview__hover-text-content",children:r.text},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:110,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:105,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:76,columnNumber:9},void 0),document.body),c.jsxDEV("div",{className:`selected-content-preview ${i||""}`,children:e.map((d,m)=>{const f=s&&m<o;return c.jsxDEV("div",{className:`selected-content-preview__item selected-content-preview__item--${d.type}`,onMouseEnter:h=>l(d,h),onMouseLeave:u,children:[d.type==="text"?c.jsxDEV("div",{className:"selected-content-preview__text",children:[c.jsxDEV(df,{size:14,className:"selected-content-preview__text-icon"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:136,columnNumber:19},void 0),c.jsxDEV("span",{className:"selected-content-preview__text-content",children:d.text&&d.text.length>20?`${d.text.substring(0,20)}...`:d.text},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:137,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:135,columnNumber:17},void 0):d.type==="video"?c.jsxDEV(c.Fragment,{children:[c.jsxDEV("div",{className:"selected-content-preview__video-placeholder",children:c.jsxDEV(Pc,{size:20},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:147,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:146,columnNumber:19},void 0),c.jsxDEV("div",{className:"selected-content-preview__video-overlay",children:c.jsxDEV(id,{size:16,fill:"white"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:150,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:149,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:145,columnNumber:17},void 0):c.jsxDEV("img",{src:d.url,alt:d.name},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:155,columnNumber:17},void 0),d.type==="graphics"&&c.jsxDEV("span",{className:"selected-content-preview__label",children:t==="zh"?"图形":"Graphics"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:160,columnNumber:17},void 0),d.type==="video"&&c.jsxDEV("span",{className:"selected-content-preview__label selected-content-preview__label--video",children:t==="zh"?"视频":"Video"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:167,columnNumber:17},void 0),f&&c.jsxDEV("button",{className:"selected-content-preview__remove-btn",onClick:h=>{h.stopPropagation(),s(m)},onMouseDown:h=>h.preventDefault(),title:t==="zh"?"移除":"Remove",children:c.jsxDEV(jc,{size:12},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:183,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:174,columnNumber:17},void 0)]},`${d.type}-${m}`,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:126,columnNumber:13},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:120,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/SelectedContentPreview.tsx",lineNumber:73,columnNumber:5},void 0)};function ma(e){return e.tagName==="TEXTAREA"||e.tagName==="INPUT"}function h3(e){const t=e.selectionStart||0,n=e.selectionEnd||0;return e.value.substring(t,n)}function sN(e){const t=window.getSelection();if(!t||t.rangeCount===0)return"";const n=t.getRangeAt(0);return e.contains(n.commonAncestorContainer)?t.toString():""}function Lu(e){return ma(e)?h3(e):sN(e)}function oN(e,t={}){const{enableCopy:n=!0,stopPropagation:i=!0}=t,s=p.useRef(null);return p.useEffect(()=>{const o=e.current;if(!o)return;const r=b=>!b||!(b instanceof HTMLElement)?!1:!!(["BUTTON","A","INPUT","SELECT","TEXTAREA","LABEL"].includes(b.tagName)||b.onclick||b.getAttribute("role")==="button"||b.closest('button, a, [role="button"], [onclick]')),a=()=>{const b=window.getSelection();return b!==null&&b.toString().length>0},l=b=>{i&&(r(b.target)||a()&&b.stopPropagation())},u=b=>{i&&(r(b.target)||b.stopPropagation())},d=b=>{const x=(b.ctrlKey||b.metaKey)&&b.key==="c",y=(b.ctrlKey||b.metaKey)&&b.key==="x";if(n&&(x||y)){const w=Lu(o);w&&x0(w).then(()=>{}).catch(v=>{console.error("Failed to copy text:",v)}),i&&b.stopPropagation()}},m=b=>{if(n){const x=Lu(o);x&&b.clipboardData&&(b.clipboardData.setData("text/plain",x),b.preventDefault())}i&&b.stopPropagation()},f=b=>{if(n){const x=Lu(o);x&&b.clipboardData&&b.clipboardData.setData("text/plain",x)}i&&b.stopPropagation()},h=()=>{if(ma(o)){const b=o.selectionStart||0,x=o.selectionEnd||0;b!==x&&(s.current={text:o.value.substring(b,x),start:b,end:x})}else{const b=sN(o);b&&(s.current={text:b})}},g=()=>{ma(o)||h()};return o.addEventListener("pointerdown",u),o.addEventListener("mousedown",u),o.addEventListener("pointerup",l),o.addEventListener("pointermove",l),o.addEventListener("mouseup",l),o.addEventListener("click",l),o.addEventListener("keydown",d),o.addEventListener("copy",m),o.addEventListener("cut",f),ma(o)?o.addEventListener("select",h):document.addEventListener("selectionchange",g),()=>{o.removeEventListener("pointerdown",u),o.removeEventListener("mousedown",u),o.removeEventListener("pointerup",l),o.removeEventListener("pointermove",l),o.removeEventListener("mouseup",l),o.removeEventListener("click",l),o.removeEventListener("keydown",d),o.removeEventListener("copy",m),o.removeEventListener("cut",f),ma(o)?o.removeEventListener("select",h):document.removeEventListener("selectionchange",g)}},[e,n,i]),{lastSelection:s.current}}function g3(e,t,n){return e==="size"?n.split("(")[0].trim():e==="duration"?`${t}s`:e==="klingAction2"?t==="image2video"?"图生":"文生":e==="mode"?t:n}const b3=({selectedParams:e,onParamChange:t,compatibleParams:n,modelId:i,language:s="zh",disabled:o=!1,isOpen:r,onOpenChange:a,excludeParamIds:l})=>{const{value:u,setValue:d}=mx({controlledValue:r,defaultValue:!1,onChange:a}),[m,f]=p.useState(0),[h,g]=p.useState(0),b=p.useMemo(()=>{const k=n??Jl(i);return l&&l.length>0?k.filter(N=>!l.includes(N.id)):k},[n,i,l]);p.useEffect(()=>{var k;if(u&&b.length>0){f(0);const N=b[0],E=e[N.id],I=((k=N.options)==null?void 0:k.findIndex(T=>T.value===E))??0;g(I>=0?I:0)}},[u,b,e]);const x=p.useMemo(()=>{if(b.length===0)return s==="zh"?"参数":"Params";const k=[];return b.forEach(N=>{var I;const E=e[N.id];if(E)if(N.valueType==="enum"){const T=(I=N.options)==null?void 0:I.find(j=>j.value===E);T&&k.push(g3(N.id,E,T.label))}else{const T=E.length>10?`${E.slice(0,10)}…`:E;k.push(`${N.shortLabel||N.label}:${T}`)}}),k.length===0?s==="zh"?"配置参数":"Settings":k.join(", ")},[b,e,s]),y=p.useCallback(k=>{k.preventDefault(),!o&&d(!u)},[o,u,d]),w=p.useCallback(k=>{var I,T;if(k==="Escape")return d(!1),!0;const N=b[m],E=((I=N==null?void 0:N.options)==null?void 0:I.length)??0;if(k==="ArrowDown")return f(j=>{var M;const V=j<b.length-1?j+1:0,_=b[V],D=e[_.id],C=((M=_.options)==null?void 0:M.findIndex(U=>U.value===D))??0;return g(C>=0?C:0),V}),!0;if(k==="ArrowUp")return f(j=>{var M;const V=j>0?j-1:b.length-1,_=b[V],D=e[_.id],C=((M=_.options)==null?void 0:M.findIndex(U=>U.value===D))??0;return g(C>=0?C:0),V}),!0;if(k==="ArrowRight")return g(j=>j<E-1?j+1:0),!0;if(k==="ArrowLeft")return g(j=>j>0?j-1:E-1),!0;if(k==="Enter"||k===" "||k==="Tab"){const j=(T=N==null?void 0:N.options)==null?void 0:T[h];return j&&t(N.id,j.value),!0}return!1},[b,m,h,e,t]),v=p.useCallback((k,N)=>{t(k,N)},[t]),S=p.useCallback((k,N)=>{t(k,N,{keepOpen:!0})},[t]);return b.length===0?null:c.jsxDEV(Bc,{isOpen:u,setIsOpen:d,disabled:o,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:w,children:({containerRef:k,menuRef:N,portalPosition:E,handleTriggerKeyDown:I})=>c.jsxDEV("div",{className:"parameters-dropdown",ref:k,children:[c.jsxDEV("button",{className:`parameters-dropdown__trigger ${u?"parameters-dropdown__trigger--open":""}`,onMouseDown:y,onKeyDown:I,type:"button",disabled:o,title:`${x} (↑↓ Tab)`,children:[c.jsxDEV("span",{className:"parameters-dropdown__label",children:x},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:237,columnNumber:13},void 0),c.jsxDEV(ko,{size:14,className:`parameters-dropdown__icon ${u?"parameters-dropdown__icon--open":""}`},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:238,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:229,columnNumber:11},void 0),u&&cs.createPortal(c.jsxDEV("div",{ref:N,className:`parameters-dropdown__menu parameters-dropdown__menu--flat ${Yt}`,style:{position:"fixed",zIndex:Tn.DROPDOWN_PORTAL,left:E.left,bottom:window.innerHeight-E.top+8,maxHeight:Math.max(240,Math.min(420,E.top-12)),overflowY:"auto"},onMouseDown:T=>T.stopPropagation(),onClick:T=>T.stopPropagation(),children:[c.jsxDEV("div",{className:"parameters-dropdown__header",children:[c.jsxDEV(RE,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:259,columnNumber:17},void 0),c.jsxDEV("span",{children:s==="zh"?"设置生成参数 (↑↓←→ Tab)":"Parameters (↑↓←→ Tab)"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:260,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:258,columnNumber:15},void 0),c.jsxDEV("div",{className:"parameters-dropdown__sections",children:b.map((T,j)=>{var D;const V=e[T.id],_=j===m;return c.jsxDEV("div",{className:`parameters-dropdown__section ${_?"parameters-dropdown__section--highlighted":""}`,children:[c.jsxDEV("div",{className:"parameters-dropdown__section-title",children:T.label},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:272,columnNumber:23},void 0),T.valueType==="enum"?c.jsxDEV("div",{className:"parameters-dropdown__options",children:(D=T.options)==null?void 0:D.map((C,M)=>{const U=V===C.value,F=_&&M===h;return c.jsxDEV("button",{type:"button",className:`parameters-dropdown__option ${U?"parameters-dropdown__option--selected":""} ${F?"parameters-dropdown__option--highlighted":""}`,onClick:()=>v(T.id,C.value),onMouseEnter:()=>{f(j),g(M)},children:[c.jsxDEV("span",{className:"parameters-dropdown__option-label",children:C.label.split("(")[0].trim()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:291,columnNumber:33},void 0),U&&c.jsxDEV(Fc,{size:12,className:"parameters-dropdown__option-check"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:294,columnNumber:48},void 0)]},C.value,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:281,columnNumber:31},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:276,columnNumber:25},void 0):c.jsxDEV("div",{className:"parameters-dropdown__field",children:c.jsxDEV("input",{type:T.valueType==="number"?"number":"text",className:"parameters-dropdown__field-input",value:V||"",placeholder:T.description||T.label,min:T.valueType==="number"?T.min:void 0,max:T.valueType==="number"?T.max:void 0,step:T.valueType==="number"?T.step:void 0,onChange:C=>S(T.id,C.target.value),onMouseDown:C=>C.stopPropagation(),onKeyDown:C=>C.stopPropagation()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:301,columnNumber:27},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:300,columnNumber:25},void 0)]},T.id,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:268,columnNumber:21},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:263,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:241,columnNumber:13},void 0),document.body)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:228,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/ParametersDropdown.tsx",lineNumber:220,columnNumber:5},void 0)},x3=({onSelectPrompt:e,language:t,extraActions:n})=>{const{history:i,removeHistory:s,togglePinHistory:o,refreshHistory:r}=eu({deduplicateWithPresets:!1}),{confirm:a,confirmDialog:l}=Ba(),[u,d]=p.useState(!1),m=p.useRef(null),f=p.useRef(null),h=p.useRef(null),g=p.useMemo(()=>(Xw[t]||[]).map((E,I)=>({id:`preset_${I}`,content:E.content,isPreset:!0,modelType:E.modelType,scene:E.scene})),[t]),b=100,x=p.useMemo(()=>{const N=new Set(g.map(j=>j.content.trim().toLowerCase())),I=i.filter(j=>!N.has(j.content.trim().toLowerCase())).slice(0,b).map(j=>({id:j.id,content:j.content,pinned:j.pinned,modelType:j.modelType})),T=g.map(j=>({id:j.id,content:j.content,pinned:!1,isPreset:!0,modelType:j.modelType,scene:j.scene}));return[...I,...T]},[i,g]);p.useEffect(()=>()=>{f.current&&clearTimeout(f.current),h.current&&clearTimeout(h.current)},[]);const y=p.useCallback(()=>{h.current&&(clearTimeout(h.current),h.current=null),f.current=setTimeout(()=>{r(),d(!0)},150)},[r]),w=p.useCallback(()=>{f.current&&(clearTimeout(f.current),f.current=null),h.current=setTimeout(()=>{d(!1)},200)},[]),v=p.useCallback(N=>{e({content:N.content,modelType:N.modelType,scene:N.scene}),d(!1)},[e]),S=p.useCallback(async N=>{N.startsWith("preset_")||!await a({title:t==="zh"?"确认删除提示词":"Delete Prompt",description:t==="zh"?"确定要删除这条历史提示词吗?此操作不可撤销。":"Are you sure you want to delete this prompt history item? This action cannot be undone.",confirmText:t==="zh"?"删除":"Delete",cancelText:t==="zh"?"取消":"Cancel",danger:!0})||s(N)},[a,t,s]),k=p.useCallback(N=>{N.startsWith("preset_")||o(N)},[o]);return c.jsxDEV("div",{ref:m,className:"prompt-history-popover",children:[c.jsxDEV("div",{className:"prompt-history-popover__actions",children:[c.jsxDEV("button",{className:"prompt-history-popover__trigger",title:t==="zh"?"提示词":"Prompts","data-track":"ai_input_click_history",onMouseEnter:y,onMouseLeave:w,children:c.jsxDEV(qE,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/PromptHistoryPopover.tsx",lineNumber:188,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/PromptHistoryPopover.tsx",lineNumber:181,columnNumber:9},void 0),n]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/PromptHistoryPopover.tsx",lineNumber:180,columnNumber:7},void 0),u&&c.jsxDEV("div",{className:"prompt-history-popover__panel-wrapper",onMouseEnter:y,onMouseLeave:w,children:c.jsxDEV(LE,{title:t==="zh"?"提示词":"Prompts",items:x,onSelect:v,onTogglePin:k,onDelete:S,language:t,showCount:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/PromptHistoryPopover.tsx",lineNumber:200,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/PromptHistoryPopover.tsx",lineNumber:195,columnNumber:9},void 0),l]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/PromptHistoryPopover.tsx",lineNumber:179,columnNumber:5},void 0)};function hp(){const e=$n.get();return(e==null?void 0:e.videoModelName)||xo()}function w3(){const e=new Set;return Object.values(bo).forEach(t=>{t.durationOptions.forEach(n=>e.add(n.value))}),Array.from(e).sort((t,n)=>parseInt(t)-parseInt(n))}function y3(){const e=new Set;return Object.values(bo).forEach(t=>{t.sizeOptions.forEach(n=>e.add(n.value))}),Array.from(e)}async function N3(e){const{prompt:t,model:n="veo3",modelRef:i,seconds:s="8",size:o="1280x720",referenceImages:r,params:a}=e,l=Im(t);if(l)return l;try{const u=n,d=BE("video",u,i||null);if(!d||d.kind!=="video")return{success:!1,error:`未找到可用的视频适配器: ${u}`,type:"error"};const m=s?Number(s):void 0,f=await d.generateVideo(FE("video",i||u),{prompt:t,size:o,model:u,modelRef:i||null,duration:Number.isFinite(m)?m:void 0,referenceImages:r,params:a}),h=f.url;return h?{success:!0,data:{url:h,format:f.format||"mp4",prompt:t,model:n,seconds:s,size:o},type:"video"}:{success:!1,error:"API 未返回有效的视频 URL",type:"error"}}catch(u){return console.error("[VideoGenerationTool] Generation failed:",u),GE(u,"视频生成失败")}}function v3(e){const t=e.model||"veo3",n=bo[t]||bo.veo3,i=zE(e.referenceImages);return{taskType:jn.VIDEO,resultType:"video",getDefaultModel:hp,logPrefix:"VideoGenerationTool",buildTaskPayload:()=>({prompt:e.prompt,size:e.size||"16x9",duration:parseInt(e.seconds||n.defaultDuration,10),model:t,modelRef:e.modelRef||null,uploadedImages:i&&i.length>0?i:void 0,referenceImages:e.referenceImages&&e.referenceImages.length>0?e.referenceImages:void 0,params:e.params}),buildResultData:()=>({size:e.size||"16x9",duration:parseInt(e.seconds||n.defaultDuration,10)})}}const gp={name:"generate_video",description:`生成视频工具。根据用户的文字描述生成视频。
|
|
202
|
+
|
|
203
|
+
使用场景:
|
|
204
|
+
- 用户想要创建、生成视频
|
|
205
|
+
- 用户描述了想要的视频内容、动作、场景
|
|
206
|
+
- 用户提供了图片并想要将其转换为视频(图生视频)
|
|
207
|
+
- 用户明确提到"视频"、"动画"、"动态"等关键词
|
|
208
|
+
|
|
209
|
+
不适用场景:
|
|
210
|
+
- 用户想要生成静态图片(使用 generate_image 工具)
|
|
211
|
+
- 用户只是在聊天,没有生成视频的意图
|
|
212
|
+
|
|
213
|
+
当前使用模型:${hp()}`,inputSchema:{type:"object",properties:{prompt:{type:"string",description:"视频描述提示词,详细描述想要生成的视频内容、动作、场景、风格等"},model:{type:"string",description:`视频生成模型,默认使用 ${xo()}`,default:xo()},seconds:{type:"string",description:"视频时长(秒),不同模型支持的时长不同",enum:w3(),default:"8"},size:{type:"string",description:"视频尺寸",enum:y3(),default:"1280x720"},referenceImages:{type:"array",description:"参考图片 URL 列表,用于图生视频",items:{type:"string"}},params:{type:"object",description:"额外模型参数,Kling 可用字段包括 model_name、klingAction2、mode、cfg_scale、negative_prompt 与 camera_*;其中 cfg_scale 取值 0 到 1,camera_* 取值 -10 到 10 且需为整数",properties:{model_name:{type:"string",enum:["kling-v3","kling-v2-6","kling-v2-1","kling-v1-6","kling-v1-5"]},klingAction2:{type:"string",enum:["text2video","image2video"]},mode:{type:"string",enum:["std","pro"]},cfg_scale:{type:"number",description:"Kling 自由度,取值范围 0 到 1"},negative_prompt:{type:"string"},camera_control_type:{type:"string"},camera_horizontal:{type:"number",description:"Kling 水平运镜,取值范围 -10 到 10,且必须为整数"},camera_vertical:{type:"number",description:"Kling 垂直运镜,取值范围 -10 到 10,且必须为整数"},camera_pan:{type:"number",description:"Kling 水平摇镜,取值范围 -10 到 10,且必须为整数"},camera_tilt:{type:"number",description:"Kling 垂直摇镜,取值范围 -10 到 10,且必须为整数"},camera_roll:{type:"number",description:"Kling 旋转运镜,取值范围 -10 到 10,且必须为整数"},camera_zoom:{type:"number",description:"Kling 变焦,取值范围 -10 到 10,且必须为整数"}}},count:{type:"number",description:"生成数量,1-10 之间,默认为 1",default:1}},required:["prompt"]},supportedModes:["async","queue"],promptGuidance:{whenToUse:"当用户想要生成视频、动画或动态内容时使用。适用于:将图片变成视频、创建短视频、生成动态场景等。关键词:视频、动画、动起来、动态。",parameterGuidance:{prompt:"将用户描述扩展为详细的英文视频提示词,包含:主体动作(walking, flying, spinning)、场景描述、镜头运动(camera pan, zoom in, tracking shot)、氛围(cinematic, dreamy)、时间节奏(slow motion, timelapse)。",model:"默认使用 veo3,支持高质量视频生成。可选其他模型如需特定效果。",seconds:"根据内容复杂度选择:简单动作用 5-8 秒,复杂场景用 8-10 秒。默认 8 秒。",size:"横屏视频用 1280x720 或 1920x1080,竖屏用 720x1280,正方形用 1024x1024。",referenceImages:'当用户提供图片并想让它"动起来"时使用,传入图片 URL 实现图生视频。',count:'用户明确要求批量生成时使用,如 "+3 生成视频" 则 count=3。'},bestPractices:["prompt 使用英文能获得更好的生成效果",'描述具体的动作和运动,如 "a cat walking slowly" 而非 "a cat"','添加镜头运动描述如 "camera slowly pans right"、"zoom in smoothly"','描述氛围和风格如 "cinematic lighting"、"slow motion"、"dreamy atmosphere"','对于图生视频,描述图片中元素如何运动,如 "the waves start to move"',"避免过于复杂的场景变化,每个视频专注一个主要动作"],examples:[{input:"生成一个猫咪走路的视频",args:{prompt:"A fluffy orange cat walking gracefully across a sunny room, soft natural lighting, camera tracking shot following the cat, gentle movements, high quality, cinematic",seconds:"8",size:"1280x720"}},{input:"让这张日落图片动起来",args:{prompt:"Beautiful sunset scene with moving clouds drifting slowly across the sky, sun rays shifting, gentle wind effect on trees, time-lapse style, warm golden hour lighting, peaceful atmosphere",referenceImages:["[图片1]"],seconds:"8"},explanation:"图生视频使用 referenceImages 传递原图,prompt 描述期望的动态效果"},{input:"赛博朋克城市夜景动画",args:{prompt:"Cyberpunk city at night with flying cars moving through neon-lit streets, holographic advertisements flickering, rain falling, camera slowly panning across the skyline, atmospheric fog, cinematic sci-fi mood",seconds:"10",size:"1920x1080"}},{input:"生成一个产品旋转展示视频",args:{prompt:"Product showcase video, sleek modern headphones rotating 360 degrees on a white pedestal, smooth continuous rotation, professional studio lighting, minimal clean background, commercial quality",seconds:"8",size:"1280x720"}}],warnings:["视频生成时间较长(通常 1-3 分钟),请耐心等待","避免描述突然的场景切换或多个不连贯的动作","图生视频时,确保参考图片清晰且主体明确"]},execute:async(e,t)=>{console.log("[VideoGenerationTool] execute called with mode:",t==null?void 0:t.mode);const n=e,i=(t==null?void 0:t.mode)||"async";let s=n.size;if(n.size){const r=n.model||"veo3",a=bo[r]||bo.veo3,l=a.sizeOptions.map(u=>u.value);s=OE(n.size,l,a.defaultSize)}const o={...n,size:s};return i==="queue"?_m(o,t||{},v3(o)):N3(o)}};async function k3(e,t){return await gp.execute(e,{...t,mode:"queue"})}const E3=Object.freeze(Object.defineProperty({__proto__:null,createVideoTask:k3,getCurrentVideoModel:hp,videoGenerationTool:gp},Symbol.toStringTag,{value:"Module"}));function Zd(){const e=$n.get();return(e==null?void 0:e.audioModelName)||tr()}async function S3(e){const t=Im(e.prompt);if(t)return t;try{const n=await HE.generateAudioWithPolling({model:e.model||Zd(),modelRef:e.modelRef||null,prompt:e.prompt,sunoAction:e.sunoAction,notifyHook:e.notifyHook,title:e.title,tags:e.tags,mv:e.mv,continueClipId:e.continueClipId,continueTaskId:e.continueTaskId,continueAt:e.continueAt,infillStartS:e.infillStartS,infillEndS:e.infillEndS,params:{...e.params||{},...e.continueSource?{continueSource:e.continueSource}:{}}}),i=WE(n);return{success:!0,data:{url:i.url,urls:i.urls,resultKind:i.resultKind,title:i.title,lyricsText:i.lyricsText,lyricsTitle:i.lyricsTitle,lyricsTags:i.lyricsTags,duration:i.duration,imageUrl:i.imageUrl,format:i.format||(i.resultKind==="lyrics"?"lyrics":"mp3"),providerTaskId:i.providerTaskId,primaryClipId:i.primaryClipId,clipIds:i.clipIds,clips:i.clips},type:"audio"}}catch(n){return{success:!1,error:n.message||"音频生成失败",type:"error"}}}function T3(e){return{taskType:jn.AUDIO,resultType:"audio",getDefaultModel:Zd,maxCount:1,buildTaskPayload:()=>({prompt:e.prompt,model:e.model||Zd(),modelRef:e.modelRef||null,sunoAction:e.sunoAction,notifyHook:e.notifyHook,title:e.title,tags:e.tags,mv:e.mv,continueClipId:e.continueClipId,continueTaskId:e.continueTaskId,continueAt:e.continueAt,infillStartS:e.infillStartS,infillEndS:e.infillEndS,...e.params||e.continueSource?{params:{...e.params||{},...e.continueSource?{continueSource:e.continueSource}:{}}}:{}}),buildResultData:()=>({mv:e.mv})}}async function D3(e,t={}){return(t.mode||"async")==="queue"?_m(e,t,T3(e)):S3(e)}const _3={name:"generate_audio",description:"生成音频或音乐,可用于 Suno 音乐生成与续写",supportedModes:["async","queue"],inputSchema:{type:"object",properties:{prompt:{type:"string",description:"音乐描述或歌词内容"},model:{type:"string",description:"音频能力模型 ID,默认 suno_music"},title:{type:"string",description:"歌曲标题"},sunoAction:{type:"string",description:"Suno 动作类型,music 或 lyrics"},notifyHook:{type:"string",description:"歌词生成完成后的回调地址"},tags:{type:"string",description:"风格标签,逗号分隔"},mv:{type:"string",description:"Suno 版本字段,如 chirp-v5-5、chirp-v5、chirp-v4-5、chirp-v4、chirp-v3-5"},continueClipId:{type:"string",description:"续写目标 clip ID"},continueTaskId:{type:"string",description:"续写目标所属任务 task_id"},continueSource:{type:"string",description:"续写来源,clip 或 upload;upload 会自动拼接 -upload 版本"},continueAt:{type:"number",description:"从第几秒开始续写"},infillStartS:{type:"number",description:"Infill 开始秒数"},infillEndS:{type:"number",description:"Infill 结束秒数"}},required:["prompt"]},async execute(e,t){return D3(e,t)}};function Jd(){const e=$n.get();return(e==null?void 0:e.textModelName)||ud()}function I3(e){return typeof e=="object"&&e!==null&&typeof e.prompt=="string"}async function C3(e,t={}){const n=Im(e.prompt);if(n)return n;try{return{success:!0,data:await ss.getFallbackExecutor().generateText({prompt:e.prompt,model:e.model||Jd(),modelRef:e.modelRef||null,referenceImages:e.referenceImages,params:e.params},void 0),type:"text"}}catch(i){return{success:!1,error:i.message||"文本生成失败",type:"error"}}}function j3(e){return{taskType:jn.CHAT,resultType:"text",getDefaultModel:Jd,maxCount:1,buildTaskPayload:()=>({prompt:e.prompt,model:e.model||Jd(),modelRef:e.modelRef||null,referenceImages:e.referenceImages,...e.params?{params:e.params}:{}})}}async function P3(e,t={}){return(t.mode||"async")==="queue"?_m(e,t,j3(e)):C3(e,t)}const A3={name:"generate_text",description:"生成纯文本内容,可用于文章、摘要、说明、Markdown 等文本直出场景",supportedModes:["async","queue"],execute:async(e,t)=>I3(e)?P3(e,t):{success:!1,error:"缺少必填参数 prompt",type:"error"},inputSchema:{type:"object",properties:{prompt:{type:"string",description:"文本生成提示词"},model:{type:"string",description:"文本模型 ID,默认使用当前文本路由模型"},referenceImages:{type:"array",description:"参考图片 URL 列表,用于图像理解后输出文本",items:{type:"string"}},params:{type:"object",description:"文本模型额外参数,如 temperature、top_p、max_tokens"}},required:["prompt"]}},Nn={DEFAULT_VERTICAL_GAP:50,DEFAULT_HORIZONTAL_GAP:20,TEXT_DEFAULT_WIDTH:300,TEXT_LINE_HEIGHT:24,MEDIA_DEFAULT_SIZE:400,MEDIA_MAX_SIZE:600};let bp=null;function Qd(e){bp=e}function rN(){return bp}function M3(e){const t=e.appState,n=(t==null?void 0:t.lastSelectedElementIds)||[];if(n.length===0)return;const i=n.map(s=>e.children.find(o=>o.id===s)).filter(Boolean);if(i.length!==0)try{const s=It(e,i,!1),o=s.x,r=s.y+s.height+Nn.DEFAULT_VERTICAL_GAP;return[o,r]}catch(s){console.warn("[CanvasInsertion] Error calculating start point:",s);return}}function V3(e){if(!e.children||e.children.length===0)return[100,100];let t=0,n=100;for(const i of e.children)try{const s=It(e,[i],!1),o=s.y+s.height;o>t&&(t=o,n=s.x)}catch{}return[n,t+Nn.DEFAULT_VERTICAL_GAP]}function aN(e){const t=e.split(`
|
|
214
|
+
`),n=Math.max(...t.map(o=>o.length)),i=Math.min(n*8,Nn.TEXT_DEFAULT_WIDTH),s=t.length*Nn.TEXT_LINE_HEIGHT;return{width:i,height:s}}function U3(e){const t=new Map;for(const s of e)if(s.groupId){const o=t.get(s.groupId)||[];o.push(s),t.set(s.groupId,o)}const n=[];let i=null;for(const s of e)if(s.groupId){if(i!==s.groupId){i=s.groupId;const o=t.get(s.groupId);o&&n.push(o)}}else n.push([s]),i=null;return n}async function $g(e,t,n,i){if(i){const o=Math.round(window.innerWidth*.5);return td(e,[{title:i,body:t}],n,o),{width:o,height:120}}const s=Zb(t);if(s&&s.length>0){const o=Math.round(window.innerWidth*.5);td(e,s,n,o);const r=Math.min(s.length,3),a=Math.ceil(s.length/3);return{width:r*(o+20)-20,height:a*140-20}}return Qn.insertText(e,n,t),aN(t)}async function Xg(e,t,n,i){const s=i||{width:Nn.MEDIA_DEFAULT_SIZE,height:Nn.MEDIA_DEFAULT_SIZE};try{await lr(e,t,n,!1,s,!0,!0)}catch(o){throw console.error("[CanvasInsertion] insertImageFromUrl failed:",o),o}return s}async function Kg(e,t,n,i){if(i)return await cr(e,t,n,!1,i,!0,!0),i;const s={width:Nn.MEDIA_DEFAULT_SIZE,height:Math.round(Nn.MEDIA_DEFAULT_SIZE*(9/16))};return await cr(e,t,n,!1,s,!0,!0),s}async function Yg(e,t,n,i,s){const o=KE({...s,width:i==null?void 0:i.width,height:i==null?void 0:i.height});return await rr(e,t,{...s,width:o.width,height:o.height},n,!1,!0),o}function R3(e){return`data:image/svg+xml,${encodeURIComponent(e).replace(/'/g,"%27").replace(/"/g,"%22")}`}function q3(e){let t=e.trim();return t.includes("xmlns=")||(t=t.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"')),t}function L3(e){const t=e.match(/viewBox=["']([^"']+)["']/i);if(t){const s=t[1].split(/\s+/).map(Number);if(s.length>=4&&s[2]&&s[3])return{width:s[2],height:s[3]}}const n=e.match(/width=["'](\d+)(?:px)?["']/i),i=e.match(/height=["'](\d+)(?:px)?["']/i);return n&&i?{width:parseInt(n[1]),height:parseInt(i[1])}:{width:400,height:400}}async function Zg(e,t,n){const i=q3(t),s=L3(i),o=Math.min(s.width,Nn.MEDIA_DEFAULT_SIZE),r=s.height/s.width,a=o*r,u={url:R3(i),width:o,height:a};return Qn.insertImage(e,u,n),{width:o,height:a}}async function lN(e){const t=bp;if(!t)return console.error("[CanvasInsertion] Board is null!"),{success:!1,error:"画布未初始化,请先打开画布",type:"error"};const{items:n,verticalGap:i=Nn.DEFAULT_VERTICAL_GAP,horizontalGap:s=Nn.DEFAULT_HORIZONTAL_GAP}=e;if(!n||n.length===0)return{success:!1,error:"没有要插入的内容",type:"error"};try{let o=e.startPoint;o||(o=M3(t)),o||(o=V3(t));const r=U3(n);let a=o[1];const l=o[0],u=[];for(const d of r)if(d.length===1){const m=d[0];let f={width:Nn.MEDIA_DEFAULT_SIZE,height:225};m.type==="text"?f=aN(m.content):m.type==="image"?f=m.dimensions||{width:Nn.MEDIA_DEFAULT_SIZE,height:Nn.MEDIA_DEFAULT_SIZE}:m.type==="video"?f=m.dimensions||{width:Nn.MEDIA_DEFAULT_SIZE,height:Math.round(Nn.MEDIA_DEFAULT_SIZE*(9/16))}:m.type==="audio"&&(f=m.dimensions||{width:XE,height:$E});const h=[l,a];if(m.type==="text")await $g(t,m.content,h,m.label),a+=f.height+i;else if(m.type==="image"){const g=await Xg(t,m.content,h,m.dimensions);a+=g.height+i}else if(m.type==="video")await Kg(t,m.content,h,m.dimensions),a+=f.height+i;else if(m.type==="audio"){const g=await Yg(t,m.content,h,m.dimensions,m.metadata);a+=g.height+i}else if(m.type==="svg"){const g=await Zg(t,m.content,h);a+=g.height+i}u.push({type:m.type,point:h})}else{let m=l,f=0;for(const h of d){const g=[m,a];if(h.type==="text"){const b=await $g(t,h.content,g,h.label);f=Math.max(f,b.height),m+=b.width+s}else if(h.type==="image"){const b=await Xg(t,h.content,g,h.dimensions);f=Math.max(f,b.height),m+=b.width+s}else if(h.type==="video")await Kg(t,h.content,g),f=Math.max(f,225),m+=Nn.MEDIA_DEFAULT_SIZE+s;else if(h.type==="audio"){const b=await Yg(t,h.content,g,h.dimensions,h.metadata);f=Math.max(f,b.height),m+=b.width+s}else if(h.type==="svg"){const b=await Zg(t,h.content,g);f=Math.max(f,b.height),m+=b.width+s}u.push({type:h.type,point:g})}a+=f+i}if(u.length>0){const d=u[0],m=[d.point[0]+Nn.MEDIA_DEFAULT_SIZE/2,d.point[1]+Nn.MEDIA_DEFAULT_SIZE/2];requestAnimationFrame(()=>{hi(t,m)})}return{success:!0,data:{insertedCount:u.length,items:u,firstElementPosition:u.length>0?u[0].point:void 0},type:"text"}}catch(o){return console.error("[CanvasInsertion] Failed to insert content:",o),{success:!1,error:`插入失败: ${o.message||"未知错误"}`,type:"error"}}}const cN={name:"insert_to_canvas",description:`将内容插入到画布工具。用于将AI生成的文本、图片、视频等内容插入到画布中。
|
|
215
|
+
|
|
216
|
+
使用场景:
|
|
217
|
+
- AI对话产生的Prompt需要显示在画布上
|
|
218
|
+
- AI生成的图片需要插入到画布
|
|
219
|
+
- AI生成的视频需要插入到画布
|
|
220
|
+
- 一次对话中多个产物需要按布局排列
|
|
221
|
+
|
|
222
|
+
布局规则:
|
|
223
|
+
- 垂直布局(默认):内容从上到下依次排列,表示流程/依赖关系
|
|
224
|
+
- 水平布局:同组内容(相同groupId)从左到右排列,表示并列关系
|
|
225
|
+
|
|
226
|
+
不适用场景:
|
|
227
|
+
- 仅生成内容但不需要显示在画布上`,inputSchema:{type:"object",properties:{items:{type:"array",description:"要插入的内容列表",items:{type:"object",properties:{type:{type:"string",description:"内容类型:text(文本)、image(图片URL)、video(视频URL)、audio(音频URL)、svg(SVG代码)",enum:["text","image","video","audio","svg"]},content:{type:"string",description:"内容:文本内容或媒体URL"},label:{type:"string",description:"标签/描述(可选)"},groupId:{type:"string",description:"分组ID,相同groupId的内容会水平排列(可选)"},metadata:{type:"object",description:"可选元数据(音频卡片标题、封面、时长等)"}},required:["type","content"]}},verticalGap:{type:"number",description:"垂直间距(像素),默认50",default:50},horizontalGap:{type:"number",description:"水平间距(像素),默认20",default:20}},required:["items"]},execute:async e=>lN(e)};async function O3(e,t,n,i,s){return lN({items:[{type:e,content:t,dimensions:i,metadata:s}],startPoint:n})}const z3=Object.freeze(Object.defineProperty({__proto__:null,canvasInsertionTool:cN,getCanvasBoard:rN,quickInsert:O3,setCanvasBoard:Qd},Symbol.toStringTag,{value:"Module"})),B3={name:"ai_analyze",description:`AI 分析工具。调用文本模型分析用户意图,决定需要执行的操作。
|
|
228
|
+
|
|
229
|
+
使用场景:
|
|
230
|
+
- 用户输入包含额外要求或复杂指令
|
|
231
|
+
- 需要 AI 理解用户意图并决定调用哪些工具
|
|
232
|
+
- 用户选择了文本内容作为生成素材
|
|
233
|
+
|
|
234
|
+
不适用场景:
|
|
235
|
+
- 简单的直接生成(使用 generate_image 或 generate_video)`,inputSchema:{type:"object",properties:{context:{type:"object",description:"Agent 执行上下文,包含用户指令、选中内容等"},textModel:{type:"string",description:"使用的文本模型 ID"},messages:{type:"array",description:"预构建的消息数组,传入时直接使用,不再生成默认系统提示词(用于 Skill 角色扮演/精准工具注入)"}},required:["context"]},supportedModes:["async"],execute:async(e,t)=>{var l;const{context:n,textModel:i,messages:s,modelRef:o}=e;if(!n)return{success:!1,error:"缺少必填参数 context",type:"error"};const r=Date.now(),a=[];try{console.log("[AIAnalyzeTool] 开始分析:",{userInstruction:(l=n.userInstruction)==null?void 0:l.substring(0,50),model:n.model,textModel:i,hasCustomMessages:!!s});const u=await YE.execute(n,{model:i||n.model.id,modelRef:o||null,messages:s,onChunk:m=>{var f;(f=t==null?void 0:t.onChunk)==null||f.call(t,m)},onToolCall:m=>{var b,x,y,w;const f={...m.arguments};if(["generate_image","generate_video","generate_grid_image","generate_photo_wall"].includes(m.name)){const v=f.model,S=m.name==="generate_video",k=$n.get(),N=(b=n.model)==null?void 0:b.type,E=(x=n.model)==null?void 0:x.id,I=N===(S?"video":"image")?E:void 0,T=I&&(o==null?void 0:o.modelId)===I?o:null,j=k.imageModelName||((y=px[0])==null?void 0:y.id)||"gemini-2.5-flash-image-vip",V=k.videoModelName||"veo3",_=I||(S?V:j);if(v){const D=fx(v);(S?D!=="video":D!=="image")?(f.model=_,T&&T.modelId===_?f.modelRef=T:delete f.modelRef):T&&T.modelId===v&&(f.modelRef=T)}else f.model=_,T&&T.modelId===_?f.modelRef=T:delete f.modelRef}const g={id:`step-tool-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,mcp:m.name,args:f,description:F3(m.name,f),status:"running"};a.push(g),(w=t==null?void 0:t.onAddSteps)==null||w.call(t,[g])},onToolResult:m=>{var f;if(a.length>0){const h=a[a.length-1];h.status=m.success?"completed":"failed",(f=t==null?void 0:t.onUpdateStep)==null||f.call(t,h.id,h.status,m.data,m.error)}}}),d=Date.now()-r;return u.success?{success:!0,type:"text",data:{response:u.response,generatedSteps:a,duration:d}}:{success:!1,error:u.error||"AI 分析失败",type:"error",data:{duration:d,generatedSteps:a}}}catch(u){return console.error("[AIAnalyzeTool] Analysis failed:",u),{success:!1,error:u.message||"AI 分析失败",type:"error",data:{duration:Date.now()-r,generatedSteps:a}}}}};function F3(e,t){switch(e){case"generate_image":return`生成图片: ${((t==null?void 0:t.prompt)||"").substring(0,30)}...`;case"generate_video":return`生成视频: ${((t==null?void 0:t.prompt)||"").substring(0,30)}...`;case"generate_grid_image":return`生成宫格图: ${((t==null?void 0:t.theme)||"").substring(0,30)}...`;case"insert_svg":return"插入SVG矢量图";case"canvas_insertion":case"insert_to_canvas":return"插入到画布";default:return`执行 ${e}`}}let uN=null;function Jg(e){uN=e}function nu(){return uN}const Oa=20,xp=50,G3=100;function wc(e,t){if(t){const s=new RegExp(`\`\`\`(?:${t}|${t.charAt(0).toUpperCase()+t.slice(1)})\\s*([\\s\\S]*?)\`\`\``,"i"),o=e.match(s);if(o)return o[1].trim()}const n=/```(?:\w+)?\s*([\s\S]*?)```/,i=e.match(n);return i?i[1].trim():e.trim()}function H3(e,t,n=Oa){const i=e.x-n,s=e.x+e.width+n,o=e.y-n,r=e.y+e.height+n,a=t.x,l=t.x+t.width,u=t.y,d=t.y+t.height;return!(s<a||i>l||r<u||o>d)}function W3(e){const t=[];if(!e.children||e.children.length===0)return t;for(const n of e.children)try{const i=It(e,[n],!1);t.push({x:i.x,y:i.y,width:i.width,height:i.height})}catch(i){console.warn("[InsertUtils] Failed to get bounding box for element:",i)}return t}function dN(e,t,n=Oa){for(const i of t)if(H3(e,i,n))return!0;return!1}function $3(e,t,n,i=Oa,s=xp){let o=[...e],r=0;for(;r<G3;){const a={x:o[0],y:o[1],width:t.width,height:t.height};if(!dN(a,n,i))return o;o=[o[0],o[1]+s],r++}return console.warn("[InsertUtils] Max iterations reached, returning current position:",o),o}function X3(e,t){try{const n=It(e,[t],!1);return{x:n.x,y:n.y,width:n.width,height:n.height}}catch(n){return console.warn("[InsertUtils] Failed to get actual bounding box:",n),null}}function K3(e,t){const n=[];if(!e.children||e.children.length===0)return n;for(const i of e.children){const s=i;if(!t.has(s.id))try{const o=It(e,[s],!1);n.push({x:o.x,y:o.y,width:o.width,height:o.height})}catch{}}return n}function Y3(e,t,n,i){try{const s=e.children.findIndex(a=>a.id===t.id);if(s<0)return console.warn("[InsertUtils] Element not found in board:",t.id),!1;const o=t.points;if(!o||o.length===0)return console.warn("[InsertUtils] Element has no points:",t.id),!1;const r=o.map(a=>[a[0]+n,a[1]+i]);return Se.setNode(e,{points:r},[s]),!0}catch(s){return console.error("[InsertUtils] Failed to move element:",s),!1}}function Z3(e){const t=ZE(e);if(t)return t;const n=W3(e);if(n.length>0){let u=-1/0,d=0;for(const m of n){const f=m.y+m.height;f>u&&(u=f,d=m.x+m.width/2)}return[d,u+xp]}const i=J.getBoardContainer(e).getBoundingClientRect(),s=[i.width/2,i.height/2],o=e.viewport.zoom,r=wr(e),a=r[0]+s[0]/o,l=r[1]+s[1]/o;return[a,l]}function J3(e,t){let n=!1;for(const i of t){const s=e.children.find(d=>d.id===i);if(!s)continue;const o=X3(e,s);if(!o)continue;const r=K3(e,t);if(r.length===0||!dN(o,r,Oa))continue;const a=$3([o.x,o.y],{width:o.width,height:o.height},r,Oa,xp),l=a[0]-o.x,u=a[1]-o.y;(l!==0||u!==0)&&Y3(e,s,l,u)&&(n=!0)}return n}function mN(e,t,n){if(!t||t.length===0)return{success:!1,error:"没有可插入的元素"};try{const i=new Set(e.children.map(r=>r.id)),s=n||Z3(e);e.insertFragment({elements:JSON.parse(JSON.stringify(t))},s,Ko.paste);const o=new Set;for(const r of e.children){const a=r;i.has(a.id)||o.add(a.id)}return o.size>0?requestAnimationFrame(()=>{const r=J3(e,o);s&&hi(e,s)}):s&&requestAnimationFrame(()=>{hi(e,s)}),{success:!0,elementsCount:t.length}}catch(i){return console.error("[InsertUtils] Failed to insert elements:",i),{success:!1,error:i.message||"插入元素失败"}}}const pN={loaded:!1,api:new Promise((e,t)=>{Ce(()=>import("./index-Dk5t_-56.js").then(n=>n.aq),__vite__mapDeps([0]),import.meta.url).then(n=>{pN.loaded=!0,e(n)}).catch(t)})};function Q3(e){return wc(e,"mermaid")}function eq(e){const t=e.trim().toLowerCase();return t.startsWith("flowchart")||t.startsWith("graph")?"flowchart":t.startsWith("sequencediagram")?"sequence":t.startsWith("classdiagram")?"classDiagram":t.startsWith("statediagram")?"stateDiagram":t.startsWith("erdiagram")?"erDiagram":t.startsWith("gantt")?"gantt":t.startsWith("pie")?"pie":t.startsWith("mindmap")?"mindmap":"unknown"}async function tq(e){const t=nu();if(!t)return{success:!1,error:"画布未初始化,请先打开画布",type:"error"};const{mermaid:n}=e;if(!n||typeof n!="string"||n.trim()==="")return{success:!1,error:"缺少必填参数 mermaid,请提供有效的Mermaid markdown字符串",type:"error"};try{const i=Q3(n),s=eq(i),o=await pN.api;let r;try{r=await o.parseMermaidToDrawnix(i)}catch(u){console.warn("[MermaidTool] First parse attempt failed, retrying with quote replacement:",u.message),r=await o.parseMermaidToDrawnix(i.replace(/"/g,"'"))}const{elements:a}=r;if(!a||a.length===0)return{success:!1,error:"Mermaid代码解析成功,但未生成任何图表元素",type:"error"};const l=mN(t,a);return l.success?{success:!0,data:{diagramType:s,elementsCount:l.elementsCount,mermaidCode:i.substring(0,200)+(i.length>200?"...":"")},type:"canvas"}:{success:!1,error:l.error||"插入图表失败",type:"error"}}catch(i){return console.error("[MermaidTool] Failed to process mermaid:",i),{success:!1,error:`Mermaid转换失败: ${i.message||"未知错误"}`,type:"error"}}}const nq={name:"insert_mermaid",description:`将Mermaid图表插入到画布工具。将Mermaid markdown语法转换为可视化图表并插入到画布中。
|
|
236
|
+
|
|
237
|
+
使用场景:
|
|
238
|
+
- 用户需要在画布上创建流程图、时序图、类图等图表
|
|
239
|
+
- 用户提供了Mermaid格式的图表代码
|
|
240
|
+
- AI生成了Mermaid代码需要展示在画布上
|
|
241
|
+
|
|
242
|
+
支持的图表类型:
|
|
243
|
+
- flowchart/graph: 流程图
|
|
244
|
+
- sequenceDiagram: 时序图(如OAuth2.0认证流程、API调用时序)
|
|
245
|
+
- classDiagram: 类图(如系统架构、对象关系)
|
|
246
|
+
- stateDiagram: 状态图(如订单状态流转)
|
|
247
|
+
- erDiagram: ER图(如数据库设计)
|
|
248
|
+
- gantt: 甘特图(如项目进度)
|
|
249
|
+
- pie: 饼图(如数据占比)
|
|
250
|
+
- mindmap: 思维导图
|
|
251
|
+
|
|
252
|
+
输入格式:
|
|
253
|
+
- 可以是纯Mermaid代码
|
|
254
|
+
- 也可以是包含\`\`\`mermaid代码块的markdown
|
|
255
|
+
|
|
256
|
+
示例输入:
|
|
257
|
+
\`\`\`mermaid
|
|
258
|
+
sequenceDiagram
|
|
259
|
+
participant Client
|
|
260
|
+
participant AuthServer
|
|
261
|
+
participant ResourceServer
|
|
262
|
+
Client->>AuthServer: 请求授权
|
|
263
|
+
AuthServer->>Client: 返回授权码
|
|
264
|
+
Client->>AuthServer: 用授权码换取Token
|
|
265
|
+
AuthServer->>Client: 返回Access Token
|
|
266
|
+
Client->>ResourceServer: 携带Token请求资源
|
|
267
|
+
ResourceServer->>Client: 返回资源
|
|
268
|
+
\`\`\``,inputSchema:{type:"object",properties:{mermaid:{type:"string",description:"Mermaid markdown字符串,可以是纯Mermaid代码或包含```mermaid代码块的markdown"}},required:["mermaid"]},execute:async e=>tq(e)},fN={loaded:!1,api:new Promise((e,t)=>{Ce(()=>import("./index-BkvYpt-1.js"),__vite__mapDeps([0]),import.meta.url).then(n=>{fN.loaded=!0,e(n)}).catch(t)})};function iq(e){const t=wc(e,"markdown");return t===e.trim(),t}async function sq(e){const t=nu();if(!t)return{success:!1,error:"画布未初始化,请先打开画布",type:"error"};const{markdown:n}=e;if(!n||typeof n!="string"||n.trim()==="")return{success:!1,error:"缺少必填参数 markdown,请提供有效的 Markdown 思维导图定义",type:"error"};try{const i=iq(n),s=await fN.api;let o;try{o=await s.parseMarkdownToDrawnix(i)}catch(l){console.warn("[MindmapTool] First parse attempt failed, retrying with quote replacement:",l.message),o=await s.parseMarkdownToDrawnix(i.replace(/"/g,"'"))}if(!o)return{success:!1,error:"Markdown 解析成功,但未生成思维导图元素",type:"error"};o.points=[[0,0]];const a=mN(t,[o]);return a.success?{success:!0,data:{type:"mindmap",elementsCount:a.elementsCount,markdownPreview:i.substring(0,200)+(i.length>200?"...":"")},type:"canvas"}:{success:!1,error:a.error||"插入思维导图失败",type:"error"}}catch(i){return console.error("[MindmapTool] Failed to process markdown:",i),{success:!1,error:`思维导图转换失败: ${i.message||"未知错误"}`,type:"error"}}}const oq={name:"insert_mindmap",description:`将 Markdown 思维导图插入到画布工具。将 Markdown 语法转换为可视化思维导图并插入到画布中。
|
|
269
|
+
|
|
270
|
+
使用场景:
|
|
271
|
+
- 用户需要在画布上创建思维导图
|
|
272
|
+
- 用户提供了 Markdown 格式的思维导图定义
|
|
273
|
+
- AI 生成了思维导图内容需要展示在画布上
|
|
274
|
+
- 用户输入"创作XXX思维导图"等指令时
|
|
275
|
+
|
|
276
|
+
支持的 Markdown 语法:
|
|
277
|
+
- # 一级标题(作为根节点)
|
|
278
|
+
- ## 二级标题(作为一级分支)
|
|
279
|
+
- ### 三级标题(作为二级分支)
|
|
280
|
+
- - 无序列表项(作为子节点)
|
|
281
|
+
- 缩进表示层级关系
|
|
282
|
+
- 支持 Emoji 表情符号
|
|
283
|
+
|
|
284
|
+
输入格式:
|
|
285
|
+
- 可以是纯 Markdown 文本
|
|
286
|
+
- 也可以是包含 \`\`\`markdown 代码块的内容
|
|
287
|
+
|
|
288
|
+
示例输入:
|
|
289
|
+
\`\`\`markdown
|
|
290
|
+
# 大模型未来趋势
|
|
291
|
+
|
|
292
|
+
## 技术演进
|
|
293
|
+
- 多模态融合
|
|
294
|
+
- 视觉理解
|
|
295
|
+
- 语音交互
|
|
296
|
+
- 跨模态推理
|
|
297
|
+
- 推理能力提升
|
|
298
|
+
- 思维链
|
|
299
|
+
- 自我反思
|
|
300
|
+
|
|
301
|
+
## 应用场景
|
|
302
|
+
- 智能助手
|
|
303
|
+
- 代码生成
|
|
304
|
+
- 内容创作
|
|
305
|
+
|
|
306
|
+
## 挑战与机遇
|
|
307
|
+
- 算力成本
|
|
308
|
+
- 数据安全
|
|
309
|
+
- 伦理规范
|
|
310
|
+
\`\`\``,inputSchema:{type:"object",properties:{markdown:{type:"string",description:"Markdown 格式的思维导图定义,支持标题和列表语法"}},required:["markdown"]},execute:async e=>sq(e)};function rq(){return JE.map(e=>`- ${e.style}(${e.labelZh}):${e.description}`).join(`
|
|
311
|
+
`)}function aq(e,t){const n=gx.zh;return n(e,t.rows,t.cols)}function lq(e,t){const{theme:n,rows:i=Xi.gridConfig.rows,cols:s=Xi.gridConfig.cols,layoutStyle:o=Xi.layoutStyle,imageSize:r=Xi.imageSize,imageQuality:a=Xi.imageQuality,referenceImages:l,model:u}=e,d=u||hx();if(!n||typeof n!="string")return{success:!1,error:"缺少必填参数 theme(主题描述)",type:"error"};const m=Math.min(Math.max(2,i),5),f=Math.min(Math.max(2,s),5),h={rows:m,cols:f},g=aq(n,h),b=l==null?void 0:l.map((x,y)=>({type:"url",url:x,name:`reference-${y+1}`}));try{let x;if(t.retryTaskId){if(ft.retryTask(t.retryTaskId),x=ft.getTask(t.retryTaskId),!x)throw new Error(`重试任务不存在: ${t.retryTaskId}`)}else x=ft.createTask({prompt:g,size:r,model:d,uploadedImages:b&&b.length>0?b:void 0,gridImageRows:m,gridImageCols:f,gridImageLayoutStyle:o,originalTheme:n,batchId:t.batchId,globalIndex:t.globalIndex||1,autoInsertToCanvas:!0},jn.IMAGE);return{success:!0,data:{taskId:x.id,theme:n,gridConfig:h,layoutStyle:o,prompt:g.substring(0,100)+"..."},type:"image",taskId:x.id,task:x}}catch(x){return console.error("[GridImageTool] Failed to create task:",x),{success:!1,error:x.message||"创建宫格图任务失败",type:"error"}}}const cq={name:"generate_grid_image",description:`宫格图生成工具。根据主题描述生成一组相关图片,并按照指定布局风格排列在画板上,形成宫格图效果。
|
|
312
|
+
|
|
313
|
+
使用场景:
|
|
314
|
+
- 用户想要创建宫格图、图片墙、产品展示墙
|
|
315
|
+
- 用户想要生成一组主题相关的图片并排列展示
|
|
316
|
+
- 用户想要创建拼贴画、图片集合、表情包
|
|
317
|
+
|
|
318
|
+
工作原理:
|
|
319
|
+
1. 根据主题生成一张包含多个元素的拼贴图
|
|
320
|
+
2. 将拼贴图按网格分割成独立图片
|
|
321
|
+
3. 按选定的布局风格计算位置
|
|
322
|
+
4. 批量插入到画板
|
|
323
|
+
|
|
324
|
+
可用布局风格:
|
|
325
|
+
${rq()}
|
|
326
|
+
|
|
327
|
+
不适用场景:
|
|
328
|
+
- 只想生成单张图片(使用 generate_image 工具)
|
|
329
|
+
- 想要生成视频(使用 generate_video 工具)`,inputSchema:{type:"object",properties:{theme:{type:"string",description:'宫格图主题描述,如"孟菲斯风格餐具"、"可爱猫咪表情包"、"复古相机收藏"等'},rows:{type:"number",description:"网格行数,2-5 之间,默认 3",default:3},cols:{type:"number",description:"网格列数,2-5 之间,默认 3",default:3},layoutStyle:{type:"string",description:"布局风格",enum:["scattered","grid","circular"],default:"scattered"},imageSize:{type:"string",description:"生成图片的尺寸比例",enum:["1x1","16x9","9x16","3x2","4x3"],default:"1x1"},imageQuality:{type:"string",description:"图片质量",enum:["1k","2k","4k"],default:"2k"},referenceImages:{type:"array",description:"参考图片 URL 列表,用于风格参考",items:{type:"string"}},model:{type:"string",description:"图片生成模型名称(可选,默认使用当前设置的模型)"}},required:["theme"]},supportedModes:["queue"],promptGuidance:{whenToUse:"当用户想要生成多个相关主题的图片并以宫格图/拼贴画形式展示时使用。关键词:宫格图、九宫格、图片墙、表情包、产品展示、拼贴画、系列图片。",parameterGuidance:{theme:'主题描述应该具体且有多样性潜力。好的主题:描述一类事物的多种变体(如"不同品种的可爱猫咪"、"各种颜色的马卡龙")。避免:过于具体的单一描述(如"一只橘猫")。',rows:"根据内容数量决定:表情包通常3x3或4x4,产品展示2x3或3x4,大型展示4x4或5x5。",cols:"建议与rows相同创建正方形网格,或cols略大于rows创建横向布局。",layoutStyle:"scattered(散落)适合艺术感展示;grid(网格)适合产品目录;circular(环形)适合突出中心主题。"},bestPractices:['主题应强调多样性,如"各种姿态的猫咪"而非"一只猫"','描述具体的视觉风格,如"扁平插画风格"、"3D渲染"、"水彩画风"','对于表情包,明确情绪类型如"开心、惊讶、生气、困惑等表情"','对于产品展示,说明产品类别和风格如"北欧简约风格家具"'],examples:[{input:"生成一个猫咪表情包",args:{theme:"可爱猫咪表情包,包含开心、惊讶、生气、困惑、得意、卖萌等各种有趣表情,卡通风格",rows:4,cols:4,layoutStyle:"grid"},explanation:"表情包适合用网格布局,主题描述了多种表情变体"},{input:"做一个孟菲斯风格的餐具宫格图",args:{theme:"孟菲斯风格餐具,包含碗、盘、杯、勺等不同类型,色彩鲜艳,几何图案装饰,白色背景",rows:3,cols:3,layoutStyle:"scattered"},explanation:"散落布局增加艺术感,主题明确了风格和物品多样性"},{input:"创建花卉插画集",args:{theme:"水彩风格花卉插画,包含玫瑰、向日葵、郁金香、樱花、薰衣草等不同种类的花朵,柔和色彩",rows:4,cols:4,layoutStyle:"scattered"},explanation:"4x4网格提供更多展示空间,主题列举了多种花卉种类"},{input:"做个美食九宫格",args:{theme:"精致甜点美食摄影,包含蛋糕、马卡龙、泡芙、冰淇淋等各式甜品,俯视角度,浅色背景",rows:3,cols:3,layoutStyle:"grid"},explanation:"美食九宫格用网格布局更整齐,俯视角度适合食物展示"}],warnings:['避免主题过于抽象(如"美丽的东西"),应该具体到某类事物',"rows 和 cols 的乘积即生成图片数量,过大(如5x5=25张)会增加处理时间","生成后系统会自动拆分图片,请确保主题适合被分割成独立元素"]},execute:async(e,t)=>lq(e,t||{})};function uq(e,t){const n=QE.zh;return n(e,t)}function dq(e,t){const{theme:n,imageCount:i=ra.imageCount,imageSize:s="16x9",imageQuality:o="2k",referenceImages:r,model:a}=e;if(!n||typeof n!="string")return{success:!1,error:"缺少必填参数 theme(主题描述)",type:"error"};const l=Math.min(Math.max(1,i),16),u=uq(n,l),d=a||hx(),m=r==null?void 0:r.map((f,h)=>({type:"url",url:f,name:`reference-${h+1}`}));try{let f;if(t.retryTaskId){if(ft.retryTask(t.retryTaskId),f=ft.getTask(t.retryTaskId),!f)throw new Error(`重试任务不存在: ${t.retryTaskId}`)}else f=ft.createTask({prompt:u,size:s,model:d,uploadedImages:m&&m.length>0?m:void 0,isInspirationBoard:!0,inspirationBoardImageCount:l,inspirationBoardLayoutStyle:"inspiration-board",originalTheme:n,batchId:t.batchId,globalIndex:t.globalIndex||1,autoInsertToCanvas:!0},jn.IMAGE);return{success:!0,data:{taskId:f.id,theme:n,imageCount:l,prompt:u.substring(0,100)+"..."},type:"image",taskId:f.id,task:f}}catch(f){return console.error("[InspirationBoardTool] Failed to create task:",f),{success:!1,error:f.message||"创建灵感图任务失败",type:"error"}}}const mq={name:"generate_inspiration_board",description:`灵感图生成工具。根据主题描述生成一组等大小的高质量图片,
|
|
330
|
+
以散落的横向布局插入画板,形成有创意感的灵感板效果。
|
|
331
|
+
|
|
332
|
+
生成策略(重要):
|
|
333
|
+
- 生成紧凑的网格生产图(等大小图片 + 细分割线)
|
|
334
|
+
- 智能拆分后获得更多、更大的独立图片
|
|
335
|
+
- 拆分后以散落布局插入画布,营造创意效果
|
|
336
|
+
|
|
337
|
+
与宫格图的区别:
|
|
338
|
+
- 宫格图:整齐排列,适合展示类场景
|
|
339
|
+
- 灵感图:散落布局 + 随机旋转,更有创意感和艺术感
|
|
340
|
+
|
|
341
|
+
使用场景:
|
|
342
|
+
- 用户想要创建有创意感的灵感板、情绪板
|
|
343
|
+
- 用户想要生成主题相关的多角度、多风格图片集合
|
|
344
|
+
- 用户想要类似 Pinterest 或 Mood Board 的展示效果
|
|
345
|
+
- 用户提到"创意"、"灵感"、"艺术感"等关键词
|
|
346
|
+
|
|
347
|
+
工作原理:
|
|
348
|
+
1. 根据主题生成一张紧凑的网格拼贴图(等大图片 + 细白线分割)
|
|
349
|
+
2. 智能检测并按分割线拆分出各个独立图片
|
|
350
|
+
3. 以散落的横向布局计算位置(带旋转和层叠)
|
|
351
|
+
4. 批量插入到画板
|
|
352
|
+
|
|
353
|
+
不适用场景:
|
|
354
|
+
- 只想生成单张图片(使用 generate_image 工具)
|
|
355
|
+
- 想要整齐的网格排列(使用 generate_grid_image 工具)
|
|
356
|
+
- 想要生成视频(使用 generate_video 工具)`,inputSchema:{type:"object",properties:{theme:{type:"string",description:'灵感图主题描述,如"可爱香蕉的各种形态"、"咖啡文化"、"城市街角"等'},imageCount:{type:"number",description:"图片数量,1-16 之间,默认 9",default:9},imageSize:{type:"string",description:"生成图片的尺寸比例(建议横向)",enum:["16x9","3x2","1x1"],default:"16x9"},imageQuality:{type:"string",description:"图片质量",enum:["1k","2k","4k"],default:"2k"},referenceImages:{type:"array",description:"参考图片 URL 列表,用于风格参考",items:{type:"string"}},model:{type:"string",description:"图片生成模型,不指定时使用用户设置的模型"}},required:["theme"]},supportedModes:["queue"],promptGuidance:{whenToUse:"当用户想要生成创意灵感图、灵感板、Mood Board 效果时使用。关键词:灵感图、灵感板、创意拼贴、艺术展示、Mood Board、Pinterest 风格。",parameterGuidance:{theme:"主题描述应该具体且有多样性潜力。好的主题:描述一类事物的多种变体、不同角度或不同场景。避免过于具体的单一描述。",imageCount:"1-16 张,会自动计算最优网格布局(如 9 张 = 3x3,12 张 = 3x4)。",imageSize:"建议使用 16x9 横向比例,生成更大尺寸的图片。"},bestPractices:['主题应强调多样性和变化,如"咖啡的各种形态"而非"一杯咖啡"','可以指定风格混搭,如"写实与插画混合"、"不同时代风格"',"描述具体的视觉元素,帮助 AI 生成更丰富的内容","生成的是紧凑网格图,拆分后每张子图都是高质量大图"],examples:[{input:"生成一个可爱香蕉的灵感图",args:{theme:"可爱香蕉的各种形态,包含卡通香蕉、写实香蕉、香蕉角色、香蕉图案等不同风格",imageCount:9},explanation:"生成 3x3 网格,拆分后 9 张等大图片以散落布局插入"},{input:"做个城市街角的 Mood Board",args:{theme:"城市街角,包含不同城市、不同时间、不同天气、不同风格的街角场景",imageCount:8,imageSize:"16x9"},explanation:"生成 2x4 网格,横向布局更适合展示街景"}],warnings:["生成的是紧凑网格生产图,拆分后以散落布局插入画布","实际图片数量取决于网格布局(如 7 张会调整为 2x4 = 8 张)","建议使用横向比例(16x9)以获得更大的子图尺寸"]},execute:async(e,t)=>dq(e,t||{})};function pq(e){return!e||typeof e!="string"?!1:e.startsWith("http://")||e.startsWith("https://")||e.startsWith("data:image/")||e.startsWith("blob:")}async function fq(e,t){const{imageUrl:n}=e;if(!pq(n))return{success:!1,error:"无效的图片 URL,支持 http/https/base64/blob 格式",type:"error"};const i=rN();if(!i)return{success:!1,error:"画板未初始化",type:"error"};try{const s=await p0(i,n,{scrollToResult:!0});return s.success?{success:!0,data:{count:s.count},type:"text"}:{success:!1,error:s.error||"拆分失败",type:"error"}}catch(s){return console.error("[SplitImageTool] Execution failed:",s),{success:!1,error:s.message||"拆分执行失败",type:"error"}}}const hq={name:"split_image",description:`图片拆分工具。将一张包含多个元素的图片拆分成多个独立图片,并插入到画板中。
|
|
357
|
+
|
|
358
|
+
使用场景:
|
|
359
|
+
- 用户有一张九宫格/拼贴图,想要拆分成独立图片
|
|
360
|
+
- 用户想要将宫格图图片拆分后重新排列
|
|
361
|
+
- 用户有一张包含多个产品的图片,想要分开展示
|
|
362
|
+
|
|
363
|
+
功能特点:
|
|
364
|
+
- 自动检测图片中的白色/浅色分割线
|
|
365
|
+
- 支持检测灵感图格式(灰色背景 + 白边框图片)
|
|
366
|
+
- 自动去除图片四周白边
|
|
367
|
+
- 对每个拆分后的子图进行白边清理
|
|
368
|
+
- 拆分后自动滚动到结果位置
|
|
369
|
+
|
|
370
|
+
不适用场景:
|
|
371
|
+
- 想要生成图片(使用 generate_image 工具)
|
|
372
|
+
- 想要生成宫格图(使用 generate_grid_image 工具)
|
|
373
|
+
- 图片没有分割线也不是规则网格结构`,inputSchema:{type:"object",properties:{imageUrl:{type:"string",description:"要拆分的图片 URL(支持 http/https/base64/blob 格式)"}},required:["imageUrl"]},supportedModes:["direct"],execute:async(e,t)=>fq(e)},ba={DEFAULT_VERTICAL_GAP:50,SVG_DEFAULT_WIDTH:400,SVG_MAX_WIDTH:800,SVG_MIN_WIDTH:100};function gq(e){let t=wc(e,"svg");if(t===e&&(t=wc(e,"xml")),t===e&&!t.trim().startsWith("<svg")){const n=t.match(/<svg[\s\S]*?<\/svg>/i);n&&(t=n[0])}return t.trim()}function bq(e){if(!e||typeof e!="string")return{valid:!1,error:"缺少SVG代码"};const t=e.trim();return!t.startsWith("<svg")&&!t.startsWith("<?xml")?{valid:!1,error:"SVG代码格式无效,必须以<svg开头"}:t.includes("</svg>")?{valid:!0}:{valid:!1,error:"SVG代码不完整,缺少</svg>结束标签"}}function xq(e){let t=e.trim();return t.includes("xmlns=")||(t=t.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"')),t}function wq(e){const t=e.match(/viewBox=["']([^"']+)["']/i);if(t){const[,,s,o]=t[1].split(/\s+/).map(Number);if(s&&o)return{width:s,height:o}}const n=e.match(/width=["'](\d+)(?:px)?["']/i),i=e.match(/height=["'](\d+)(?:px)?["']/i);return n&&i?{width:parseInt(n[1]),height:parseInt(i[1])}:{width:400,height:400}}function yq(e){return`data:image/svg+xml,${encodeURIComponent(e).replace(/'/g,"%27").replace(/"/g,"%22")}`}function Nq(e){const t=e.appState,n=(t==null?void 0:t.lastSelectedElementIds)||[];if(n.length===0)return;const i=n.map(s=>e.children.find(o=>o.id===s)).filter(Boolean);if(i.length!==0)try{const s=It(e,i,!1),o=s.x+s.width/2,r=s.y+s.height+ba.DEFAULT_VERTICAL_GAP;return[o,r]}catch(s){console.warn("[SvgTool] Error calculating start point:",s);return}}function vq(e){if(!e.children||e.children.length===0)return[100,100];let t=0,n=100;for(const i of e.children)try{const s=It(e,[i],!1),o=s.y+s.height;o>t&&(t=o,n=s.x+s.width/2)}catch{}return[n,t+ba.DEFAULT_VERTICAL_GAP]}async function kq(e){const t=nu();if(!t)return{success:!1,error:"画布未初始化,请先打开画布",type:"error"};const{svg:n,startPoint:i,width:s}=e,o=bq(n);if(!o.valid)return{success:!1,error:o.error||"SVG代码无效",type:"error"};try{const r=xq(gq(n)),a=wq(r),l=Math.min(Math.max(s||ba.SVG_DEFAULT_WIDTH,ba.SVG_MIN_WIDTH),ba.SVG_MAX_WIDTH),u=a.height/a.width,d=l*u,m=yq(r);let f=i;f||(f=Nq(t)),f||(f=vq(t)),f=[f[0]-l/2,f[1]];const h={url:m,width:l,height:d};Qn.insertImage(t,h,f);const g=[f[0]+l/2,f[1]+d/2];return requestAnimationFrame(()=>{hi(t,g)}),{success:!0,data:{width:l,height:d,position:f,svgPreview:r.substring(0,200)+(r.length>200?"...":"")},type:"canvas"}}catch(r){return console.error("[SvgTool] Failed to process SVG:",r),{success:!1,error:`SVG插入失败: ${r.message||"未知错误"}`,type:"error"}}}const Eq={name:"insert_svg",description:`将SVG矢量图插入到画布工具。将SVG代码转换为可缩放矢量图形并插入到画布中。
|
|
374
|
+
|
|
375
|
+
使用场景:
|
|
376
|
+
- 用户需要在画布上创建图标、Logo、徽章等矢量图
|
|
377
|
+
- AI生成了SVG代码需要展示在画布上
|
|
378
|
+
- 用户提供了"矢量图"、"SVG"、"图标"等关键词的请求
|
|
379
|
+
|
|
380
|
+
SVG的优势:
|
|
381
|
+
- 矢量图形,无限缩放不失真
|
|
382
|
+
- 文件体积小,适合图标和简单图形
|
|
383
|
+
- 可编辑性强,颜色和形状可以修改
|
|
384
|
+
|
|
385
|
+
输入格式:
|
|
386
|
+
- 可以是纯SVG代码
|
|
387
|
+
- 也可以是包含\`\`\`svg或\`\`\`xml代码块的markdown
|
|
388
|
+
|
|
389
|
+
示例输入:
|
|
390
|
+
\`\`\`svg
|
|
391
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
392
|
+
<circle cx="50" cy="50" r="40" fill="#5A4FCF"/>
|
|
393
|
+
<path d="M35 50 L45 60 L65 40" stroke="white" stroke-width="6" fill="none"/>
|
|
394
|
+
</svg>
|
|
395
|
+
\`\`\`
|
|
396
|
+
|
|
397
|
+
常用场景:
|
|
398
|
+
- 矢量图:简约风格的火箭图标 → 生成火箭SVG
|
|
399
|
+
- 图标:社交媒体图标组 → 生成多个社交图标
|
|
400
|
+
- Logo:品牌Logo设计 → 生成矢量Logo`,inputSchema:{type:"object",properties:{svg:{type:"string",description:"SVG代码字符串,可以是纯SVG代码或包含```svg代码块的markdown"},width:{type:"number",description:"目标宽度(像素),默认400,范围100-800",default:400}},required:["svg"]},promptGuidance:{whenToUse:"当用户请求生成矢量图、图标、Logo、SVG、徽章等关键词时使用此工具",parameterGuidance:{svg:"生成完整的SVG代码,确保包含xmlns属性和viewBox。使用简洁的路径和形状。",width:"根据图标复杂度调整,简单图标200-300,复杂图形400-600"},bestPractices:["使用viewBox确保SVG可缩放","颜色使用十六进制格式","图标设计保持简洁,避免过于复杂的路径","适当使用渐变和阴影增加质感"],examples:[{input:"矢量图:一个简约风格的火箭图标",args:{svg:`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
|
|
401
|
+
<path d="M50 10 L60 50 L55 50 L55 70 L45 70 L45 50 L40 50 Z" fill="#E67E22"/>
|
|
402
|
+
<circle cx="50" cy="35" r="5" fill="#5A4FCF"/>
|
|
403
|
+
<path d="M45 70 L40 85 L50 75 L60 85 L55 70" fill="#F39C12"/>
|
|
404
|
+
</svg>`,width:300},explanation:"生成简约火箭图标,使用品牌色彩"}],warnings:["不要生成过于复杂的SVG,可能导致渲染性能问题","确保SVG代码格式正确,包含完整的开始和结束标签"]},execute:async e=>kq(e)},hN=8,Sq="veo3.1";function Tq(e,t,n){const i=n?`
|
|
405
|
+
角色一致性要求(极其重要!):
|
|
406
|
+
- 视频中有固定角色,描述为:"${n}"
|
|
407
|
+
- 每个片段的 prompt 必须以 "The same ${n}," 开头
|
|
408
|
+
- 角色的外貌(发型、服装、体型等)在所有片段中保持完全一致,不得改变
|
|
409
|
+
`:"";return`你是一个专业的视频脚本编剧。用户会给你一个视频主题,你需要将其拆分为 ${e} 个连续的视频片段脚本。
|
|
410
|
+
|
|
411
|
+
要求:
|
|
412
|
+
1. 每个片段时长约 ${t} 秒
|
|
413
|
+
2. 片段之间要保持叙事连贯性,画面能自然衔接
|
|
414
|
+
3. 每个片段的描述要具体、可视化,包含:场景、主体、动作、镜头运动
|
|
415
|
+
4. 使用英文撰写描述以获得更好的生成效果
|
|
416
|
+
${i}
|
|
417
|
+
拼接衔接要求(极其重要!):
|
|
418
|
+
1. 视觉锚点:相邻片段之间必须有一个共同的视觉元素,确保画面连贯
|
|
419
|
+
2. 运镜方向延续:如果一个片段结尾是向右平移,下一个片段开头应继续向右或保持静止
|
|
420
|
+
3. 色调一致性:所有片段统一使用相同的色调和光线风格
|
|
421
|
+
4. 动作连贯:如果一个片段结尾主体正在做某个动作,下一个片段开头要延续
|
|
422
|
+
5. 尾帧描述:每个片段末尾需要描述最后画面的状态(因为会提取尾帧作为下一段首帧)
|
|
423
|
+
|
|
424
|
+
输出格式(严格遵循 JSON):
|
|
425
|
+
\`\`\`json
|
|
426
|
+
{
|
|
427
|
+
"segments": [
|
|
428
|
+
{
|
|
429
|
+
"index": 1,
|
|
430
|
+
"prompt": "Segment 1 description in English...",
|
|
431
|
+
"duration": ${t},
|
|
432
|
+
"transition_hint": "dissolve",
|
|
433
|
+
"end_frame_description": "Description of the last frame in English..."
|
|
434
|
+
}
|
|
435
|
+
]
|
|
436
|
+
}
|
|
437
|
+
\`\`\`
|
|
438
|
+
|
|
439
|
+
注意:
|
|
440
|
+
- 第一个片段要有好的开场
|
|
441
|
+
- 相邻片段的结尾和开头要能自然衔接(因为会用尾帧作为下一段首帧)
|
|
442
|
+
- transition_hint 从 'cut'/'dissolve'/'match_cut'/'fade_to_black' 中选择
|
|
443
|
+
- 最后一个片段的 transition_hint 设为 'fade_to_black'
|
|
444
|
+
- 最后一个片段要有完整的收尾`}function Dq(e){try{const t=e.match(/```json\s*([\s\S]*?)\s*```/)||e.match(/\{[\s\S]*"segments"[\s\S]*\}/);if(!t)return console.error("[LongVideo] Failed to find JSON in response"),[];const n=t[1]||t[0],i=JSON.parse(n);return Array.isArray(i.segments)?i.segments.map((s,o)=>({index:s.index||o+1,prompt:s.prompt||"",duration:s.duration||hN,transition_hint:s.transition_hint||void 0,end_frame_description:s.end_frame_description||void 0})):(console.error("[LongVideo] Invalid script format: segments is not an array"),[])}catch(t){return console.error("[LongVideo] Failed to parse script:",t),[]}}async function _q(e,t,n,i,s){const r=$n.get().textModelName,l=[{role:"system",content:[{type:"text",text:Tq(t,n,i)}]},{role:"user",content:[{type:"text",text:`视频主题:${e}`}]}];let u="";const d=await Ca.sendChat(l,m=>{u+=m,s==null||s(m)},void 0,r);return d.choices&&d.choices.length>0&&(u=d.choices[0].message.content||u),Dq(u)}function Iq(e,t,n){const i=[];n&&i.push({slot:0,slotLabel:"首帧",url:n,name:"first-frame.png"});const s=t.characterReferenceUrls&&t.characterReferenceUrls.length>0?t.characterReferenceUrls:void 0;return ft.createTask({prompt:e.prompt,size:t.size,duration:e.duration,model:t.model,uploadedImages:i.length>0?i:void 0,referenceImages:s,longVideoMeta:t,batchId:t.batchId,batchIndex:e.index,batchTotal:t.totalSegments},jn.VIDEO)}async function Cq(e,t){var d,m,f,h,g,b,x,y,w,v,S,k;const{prompt:n,totalDuration:i=60,segmentDuration:s=hN,model:o=Sq,size:r="16x9",firstFrameImage:a,characterDescription:l}=e;if(!n||typeof n!="string")return{success:!1,error:"缺少必填参数 prompt",type:"error"};const u=bo[o];(!u||u.imageUpload.mode!=="frames")&&console.warn(`[LongVideo] Model ${o} does not support first/last frame, using veo3.1`);try{const N=Math.ceil(i/s);(d=t.onChunk)==null||d.call(t,`正在为您规划 ${i} 秒的长视频,分为 ${N} 个片段...
|
|
445
|
+
|
|
446
|
+
`);const E=await _q(n,N,s,l,t.onChunk);if(E.length===0)return{success:!1,error:"视频脚本生成失败,请重试",type:"error"};(m=t.onChunk)==null||m.call(t,`
|
|
447
|
+
|
|
448
|
+
✓ 脚本生成完成,共 ${E.length} 个片段
|
|
449
|
+
|
|
450
|
+
`);const I=`long_video_${Date.now()}`,T=E[0],j={batchId:I,segmentIndex:1,totalSegments:E.length,needsLastFrame:E.length>1,scripts:E,model:o,size:r,characterDescription:l},V=Iq(T,j,a);return(f=t.onAddSteps)==null||f.call(t,[{id:V.id,mcp:"generate_video",args:{prompt:T.prompt,model:o,size:r},description:`生成视频片段 1/${E.length}: ${T.prompt.substring(0,50)}...`,status:"completed",options:{mode:"queue",batchId:I,batchIndex:1,batchTotal:E.length,globalIndex:1}}]),(h=t.onChunk)==null||h.call(t,`
|
|
451
|
+
✓ 已创建第 1 个视频生成任务
|
|
452
|
+
`),(g=t.onChunk)==null||g.call(t,`
|
|
453
|
+
📊 **长视频生成计划**:
|
|
454
|
+
`),(b=t.onChunk)==null||b.call(t,`- 总时长:${i} 秒
|
|
455
|
+
`),(x=t.onChunk)==null||x.call(t,`- 片段数:${E.length} 个(每段 ${s} 秒)
|
|
456
|
+
`),(y=t.onChunk)==null||y.call(t,`- 生成方式:串行生成(前一段完成后自动创建下一段)
|
|
457
|
+
`),(w=t.onChunk)==null||w.call(t,`
|
|
458
|
+
💡 **温馨提示**:
|
|
459
|
+
`),(v=t.onChunk)==null||v.call(t,`- 每段视频生成完成后,系统会自动提取尾帧作为下一段的首帧,确保画面连贯
|
|
460
|
+
`),(S=t.onChunk)==null||S.call(t,`- 所有片段生成完成后会自动合并并插入画布
|
|
461
|
+
`),(k=t.onChunk)==null||k.call(t,`- 您可以在任务队列中查看实时进度
|
|
462
|
+
`),{success:!0,data:{batchId:I,taskId:V.id,segmentCount:E.length,totalDuration:i,scripts:E},type:"video",taskId:V.id}}catch(N){return console.error("[LongVideo] Generation failed:",N),{success:!1,error:N.message||"长视频生成失败",type:"error"}}}const jq={name:"generate_long_video",description:`生成长视频工具。用于生成超过单个模型时长限制的长视频(如1分钟)。
|
|
463
|
+
|
|
464
|
+
使用场景:
|
|
465
|
+
- 用户想要生成1分钟或更长的视频
|
|
466
|
+
- 用户描述了一个需要多个场景的完整故事
|
|
467
|
+
- 用户明确提到"长视频"、"1分钟视频"、"完整视频"等关键词
|
|
468
|
+
|
|
469
|
+
工作原理:
|
|
470
|
+
1. 先调用文本模型将用户描述拆分为多个连续的视频片段脚本
|
|
471
|
+
2. 串行生成视频:第1段完成后提取尾帧,作为第2段首帧,以此类推
|
|
472
|
+
3. 所有视频片段分别加入任务队列,用户可以在任务面板查看进度
|
|
473
|
+
|
|
474
|
+
不适用场景:
|
|
475
|
+
- 用户只需要一个短视频(15秒以内),使用 generate_video 工具
|
|
476
|
+
- 用户只是在聊天,没有生成视频的意图`,inputSchema:{type:"object",properties:{prompt:{type:"string",description:"视频主题/故事描述,详细描述想要生成的视频内容、故事情节"},totalDuration:{type:"number",description:"目标总时长(秒),默认 60 秒",default:60},segmentDuration:{type:"number",description:"每个片段的时长(秒),默认 8 秒",default:8},model:{type:"string",description:"视频生成模型,默认使用 veo3.1(支持首尾帧)",default:"veo3.1"},size:{type:"string",description:"视频尺寸,默认 16x9",default:"16x9"},firstFrameImage:{type:"string",description:"第一段视频的首帧参考图片 URL(可选)"}},required:["prompt"]},supportedModes:["queue"],promptGuidance:{whenToUse:"当用户想要生成超过15秒的长视频时使用,特别是1分钟视频。关键词:长视频、1分钟、完整故事、多场景。",parameterGuidance:{prompt:"用户的视频主题或故事描述,可以是一个完整的故事大纲。工具会自动将其拆分为多个连贯的片段。",totalDuration:'默认60秒(1分钟)。用户说"1分钟视频"时设为60,"30秒"设为30。',segmentDuration:"每段视频时长,默认8秒。这个值通常不需要用户指定。",model:"默认使用 veo3.1,因为它支持首尾帧,能保证片段间的连贯性。",firstFrameImage:'可选参数。当用户选中图片并希望从该图片开始生成视频时使用。传递 "[图片1]" 等占位符,系统会自动替换为真实URL。'},bestPractices:["将用户的描述直接传给 prompt,工具会自动调用文本模型生成分段脚本","不需要用户提供详细的分段描述,工具会自动规划","建议提醒用户长视频生成需要较长时间(每段约1-3分钟)","如果用户选中了图片,可以将其作为 firstFrameImage 传递,这样第一段视频会从该图片开始"],examples:[{input:"帮我生成一个1分钟的视频,讲述一只猫咪从早到晚的一天",args:{prompt:"一只可爱的橘猫从早到晚的一天生活:清晨在窗台晒太阳、中午在厨房偷吃鱼、下午追逐蝴蝶玩耍、傍晚蜷缩在沙发上打盹、夜晚望着月亮",totalDuration:60}},{input:"创作一个30秒的日落延时视频",args:{prompt:"从太阳开始下山到完全落入地平线的日落延时摄影,天空从金色渐变为橙色再到粉紫色",totalDuration:30}},{input:"[图片1] 让这个场景动起来,生成30秒视频",args:{prompt:"Cinematic video starting from this scene, camera slowly panning around, natural ambient movement, objects gently swaying, dynamic lighting changes, smooth transitions",totalDuration:30,firstFrameImage:"[图片1]"}}],warnings:["长视频生成需要较长时间,每个片段约1-3分钟,且串行生成","生成完成后会产生多个独立的视频文件,需要用户手动下载或合并","确保使用支持首尾帧的模型(如 veo3.1)以保证片段间的连贯性"]},execute:async(e,t)=>Cq(e,t||{})},gN=60;function Pq(e){var s,o;const t=[];for(const r of e.children)Ri(r)&&t.push(Ae.getRectangleByPoints(r.points));if(t.length===0){const r=((s=e.viewport)==null?void 0:s.zoom)??1,a=(o=e.viewport)==null?void 0:o.origination,l=a?a[0]:0,u=a?a[1]:0,d=J.getBoardContainer(e),m=(d==null?void 0:d.clientWidth)??1920,f=(d==null?void 0:d.clientHeight)??1080,h=l+m/2/r,g=u+f/2/r;return[h-Ql/2,g-dd/2]}let n=-1/0,i=0;for(const r of t){const a=r.x+r.width;a>n&&(n=a,i=r.y)}return[n+gN,i]}function Aq(e,t){const n=Ae.getRectangleByPoints(t.points),i=80,s=J.getBoardContainer(e),o=s.clientWidth,r=s.clientHeight,a=o/(n.width+i*2),l=r/(n.height+i*2),u=Math.min(a,l,1),d=n.x+n.width/2,m=n.y+n.height/2,f=[d-o/2/u,m-r/2/u];Ue.updateViewport(e,f,u)}async function Mq(e,t,n){const s=$n.get().textModelName,o=eS({pageCount:t.pageCount,language:t.language,extraRequirements:t.extraRequirements}),r=tS(e,t),a=[{role:"system",content:[{type:"text",text:o}]},{role:"user",content:[{type:"text",text:r}]}];let l="";const u=await Ca.sendChat(a,d=>{l=d},void 0,s);return u.choices&&u.choices.length>0&&(l=u.choices[0].message.content||l),nS(l)}function Vq(e,t,n,i){const s=[i,[i[0]+Ql,i[1]+dd]],o=t.title||`Slide ${n}`,r=ld.insertFrame(e,s,o),a={x:i[0],y:i[1],width:Ql,height:dd},l=iS(t,a),u=sS(l,a);for(const f of u){const h=f.point;if(f.text==="[图片区域]")continue;const g=e.children.length,b=oS(f);if(Qn.insertText(e,h,b),e.children.length>g){const x=e.children[g];x&&ld.bindToFrame(e,x,r)}}const d={layout:t.layout,pageIndex:n};t.imagePrompt&&(d.imagePrompt=t.imagePrompt,d.imageStatus="placeholder"),t.notes&&(d.notes=t.notes);const m=e.children.findIndex(f=>f.id===r.id);return m!==-1&&Se.setNode(e,{pptMeta:d},[m]),t.imagePrompt&&rS(e,r,t.imagePrompt),r}async function Uq(e,t){var a,l,u,d,m,f,h,g,b,x,y,w;const{topic:n,pageCount:i,language:s,extraRequirements:o}=e;if(!n||typeof n!="string")return{success:!1,error:"缺少必填参数 topic(PPT 主题)",type:"error"};const r=nu();if(!r)return{success:!1,error:"画布未初始化,请先打开画布",type:"error"};try{(a=t.onChunk)==null||a.call(t,`🎯 正在为「${n}」生成 PPT 大纲...
|
|
477
|
+
|
|
478
|
+
`);const v=await Mq(n,e,T=>{});(l=t.onChunk)==null||l.call(t,`
|
|
479
|
+
|
|
480
|
+
✓ 大纲生成完成,共 ${v.pages.length} 页
|
|
481
|
+
|
|
482
|
+
`),(u=t.onChunk)==null||u.call(t,`📑 **PPT 结构**:
|
|
483
|
+
`),v.pages.forEach((T,j)=>{var _;const V=T.imagePrompt?" 🖼️":"";(_=t.onChunk)==null||_.call(t,`${j+1}. ${T.title} (${T.layout})${V}
|
|
484
|
+
`)}),(d=t.onChunk)==null||d.call(t,`
|
|
485
|
+
正在创建 Frame 并布局内容...
|
|
486
|
+
|
|
487
|
+
`);const S=Pq(r),k=[];for(let T=0;T<v.pages.length;T++)k.push([S[0]+T*(Ql+gN),S[1]]);const N=new Array(v.pages.length);let E=0;for(let T=0;T<v.pages.length;T++){const j=v.pages[T],V=T+1,_=k[T],D=Vq(r,j,V,_);N[T]=D,E++,(m=t.onChunk)==null||m.call(t,`✓ 第 ${E}/${v.pages.length} 页已创建
|
|
488
|
+
`)}N[0]&&Aq(r,N[0]);const I=v.pages.filter(T=>T.imagePrompt).length;return(f=t.onChunk)==null||f.call(t,`
|
|
489
|
+
🎉 **PPT 生成完成!**
|
|
490
|
+
`),(h=t.onChunk)==null||h.call(t,`- 共创建 ${E} 个 Frame
|
|
491
|
+
`),I>0&&((g=t.onChunk)==null||g.call(t,`- 其中 ${I} 页可配图(在 Frame 面板中点击配图按钮)
|
|
492
|
+
`)),(b=t.onChunk)==null||b.call(t,`
|
|
493
|
+
💡 **提示**:
|
|
494
|
+
`),(x=t.onChunk)==null||x.call(t,`- 在左侧「Frame」面板查看所有页面
|
|
495
|
+
`),(y=t.onChunk)==null||y.call(t,`- 点击页面可聚焦查看
|
|
496
|
+
`),(w=t.onChunk)==null||w.call(t,`- 点击「幻灯片播放」可全屏演示
|
|
497
|
+
`),{success:!0,data:{title:v.title,pageCount:E,pagesWithImage:I,outline:v},type:"text"}}catch(v){return console.error("[PPT] Generation failed:",v),{success:!1,error:v.message||"PPT 生成失败",type:"error"}}}const Rq={name:"generate_ppt",description:`生成 PPT 演示文稿工具。根据用户提供的主题或内容描述,自动生成结构化的 PPT 演示文稿。
|
|
498
|
+
|
|
499
|
+
使用场景:
|
|
500
|
+
- 用户想要创建 PPT、演示文稿、幻灯片
|
|
501
|
+
- 用户提供了一个主题,想要生成对应的演示内容
|
|
502
|
+
- 关键词:PPT、演示文稿、幻灯片、presentation、slides
|
|
503
|
+
|
|
504
|
+
工作原理:
|
|
505
|
+
1. 调用 AI 生成 PPT 大纲(包含版式、标题、正文、配图提示词)
|
|
506
|
+
2. 自动创建多个 Frame(1920x1080),每个 Frame 代表一页
|
|
507
|
+
3. 根据版式规则在 Frame 内布局文本内容
|
|
508
|
+
4. 视口自动聚焦到第一页
|
|
509
|
+
|
|
510
|
+
支持的版式:
|
|
511
|
+
- cover: 封面页
|
|
512
|
+
- toc: 目录页
|
|
513
|
+
- title-body: 标题正文页
|
|
514
|
+
- image-text: 图文页
|
|
515
|
+
- comparison: 对比页
|
|
516
|
+
- ending: 结尾页
|
|
517
|
+
|
|
518
|
+
配图说明:
|
|
519
|
+
- 生成的 PPT 默认只包含文本内容
|
|
520
|
+
- AI 会为适合配图的页面生成 imagePrompt
|
|
521
|
+
- 用户可在 Frame 面板中选择性地为页面生成配图`,inputSchema:{type:"object",properties:{topic:{type:"string",description:"PPT 主题或内容描述"},pageCount:{type:"string",description:"页数控制:short(5-7页), normal(8-12页), long(13-18页)",enum:["short","normal","long"],default:"normal"},language:{type:"string",description:"输出语言,默认中文",default:"中文"},extraRequirements:{type:"string",description:"额外要求,如风格、重点内容等"}},required:["topic"]},supportedModes:["async"],promptGuidance:{whenToUse:"当用户想要创建 PPT、演示文稿、幻灯片时使用。关键词:PPT、演示文稿、幻灯片、presentation、slides、做个汇报、生成演示。",parameterGuidance:{topic:"用户的 PPT 主题或内容描述。可以是一个简单的主题词,也可以是详细的内容大纲。",pageCount:"根据用户需求选择:short 适合简短汇报(5-7页),normal 适合常规演示(8-12页),long 适合详细讲解(13-18页)。",language:"根据用户语言偏好设置,默认中文。如果用户用英文交流,可以设为 English。",extraRequirements:'用户的额外要求,如"简洁风格"、"重点突出数据"、"适合技术分享"等。'},bestPractices:["将用户的描述直接作为 topic 传递,工具会自动规划内容结构",'如果用户提到"简短"、"快速",使用 pageCount: "short"','如果用户提到"详细"、"完整",使用 pageCount: "long"',"生成完成后提醒用户可以在 Frame 面板中为页面添加配图"],examples:[{input:"帮我做一个关于人工智能发展的 PPT",args:{topic:"人工智能发展",pageCount:"normal",language:"中文"}},{input:"生成一个简短的产品介绍幻灯片",args:{topic:"产品介绍",pageCount:"short",language:"中文"}},{input:"Create a detailed presentation about climate change",args:{topic:"Climate Change",pageCount:"long",language:"English"}},{input:"做一个关于团队年度总结的 PPT,要突出数据和成果",args:{topic:"团队年度总结",pageCount:"normal",language:"中文",extraRequirements:"突出数据展示和成果呈现"}}],warnings:["PPT 生成需要几秒钟时间,请耐心等待","生成的 PPT 默认只包含文本,配图需要用户在 Frame 面板中手动触发","每次生成会创建新的 Frame,不会覆盖已有内容"]},execute:async(e,t)=>Uq(e,t||{})},qq=new Set([",","。","!","?","“","”","‘","’",";",":","(",")","、","-","—","《","》",",",".","!","?",'"',"'",";",":","(",")","&","-","/","\\","[","]","{","}"]),bN=new Set(["啊","哎","唉","吧","比","便","不","差不多","的","得","地","对","多少","哒","对于","诶","而","而且","二","非常","否","咯","跟","哈","哈哈","哈啊","哎呀","嘿","哼","很多","后","会","唧","或","或许","哟","几","及","假如","即使","即便","就","觉得","喀","可以","可能","啦","了","呃","吗","嘛","么","每","没","没有","哪里","那","那个","那么","呢","嗯","哦","其他","或者","呕","前","若","三","啥","什么","甚","甚至","十分","是","手","太","哇","为","为什么","无论","无","嘻嘻","些","许多","呀","哎哟","一","已经","应该","咦","因为","由","于","有","有的","咋","再","再说","怎","怎么","怎么样","这","这个","这样","总","总是","总之","a","about","above","after","again","against","all","am","an","and","any","are","aren't","as","at","be","because","been","before","being","below","between","both","but","by","can't","cannot","could","couldn't","did","didn't","do","does","doesn't","doing","don't","down","during","each","few","for","from","further","had","hadn't","has","hasn't","have","haven't","having","he","he'd","he'll","he's","her","here","here's","hers","herself","him","himself","his","how","how's","i","i'd","i'll","i'm","i've","if","in","into","is","isn't","it","it's","its","itself","let's","me","more","most","mustn't","my","myself","no","nor","not","of","off","on","once","only","or","other","ought","our","ours","ourselves","out","over","own","same","shan't","she","she'd","she'll","she's","should","shouldn't","so","some","such","than","that","that's","the","their","theirs","them","themselves","then","there","there's","these","they","they'd","they'll","they're","they've","this","those","through","to","too","under","until","up","very","was","wasn't","we","we'd","we'll","we're","we've","were","weren't","what","what's","when","when's","where","where's","which","while","who","who's","whom","why","why's","with","won't","would","wouldn't","you","you'd","you'll","you're","you've","your","yours","yourself","yourselves"]);function Lq(e,t=2){if(!e||e.length<t)return[];const n=[];for(let i=0;i<=e.length-t;i++)n.push(e.substring(i,i+t));return n}function xN(e,t={}){const{ngramSize:n=2}=t,i=[];if(!e)return i;let s=e;qq.forEach(r=>{s=s.replace(new RegExp(r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g")," ")}),s=s.replace(/[.,!?;:()[\]{}"'`~@#$%^&*+=|\\<>\-]/g," ");const o=s.split(/\s+/).filter(Boolean);for(const r of o){const a=r.match(/[\u4e00-\u9fa5]+|[^\u4e00-\u9fa5]+/g)||[r];for(const l of a)if(/[\u4e00-\u9fa5]/.test(l))i.push(...Lq(l,n));else{const u=l.match(/^([^_\d]*)([_\d]+)$/);u?u[1]?(i.push(u[1]),i.push(u[1]+u[2])):i.push(u[2]):i.push(l)}}return i}function Oq(e,t=bN,n={}){for(const i of e)i&&!t.has(i)&&(n[i]=(n[i]||0)+1);return n}function El(e,t={}){return e?Oq(xN(e),bN,t):t}function Yr(e,t){let n=0;for(const o in e)Object.prototype.hasOwnProperty.call(t,o)&&(n+=e[o]*(t[o]||0));let i=0;for(const o in e)i+=e[o]*e[o];i=Math.sqrt(i);let s=0;for(const o in t)s+=t[o]*t[o];return s=Math.sqrt(s),i===0||s===0?0:n/(i*s)}class zq{constructor(){this.documentFrequency={},this.idfValues={},this.docCount=0,this.isFitted=!1}fit(t){this.docCount=t.length,this.documentFrequency={},this.idfValues={};for(const n of t)for(const i of Object.keys(n))this.documentFrequency[i]=(this.documentFrequency[i]||0)+1;for(const n in this.documentFrequency){const i=this.documentFrequency[n]||0;this.idfValues[n]=Math.log((this.docCount+1)/(i+1))+1}return this.isFitted=!0,this}getIdf(t){return this.idfValues[t]||0}getIdfValues(){return this.idfValues}get fitted(){return this.isFitted}}const Bq={limit:20,minSimilarity:.1,filter:{},includeContent:!1,snippetLength:200};class Fq{constructor(){this.documents=[],this.tfidfVectorizer=null,this.directoryMap=new Map,this.indexedVersions=new Map,this.isIndexed=!1,this.lastIndexTime=0}async buildIndex(){const[t,n]=await Promise.all([mf(),ec()]);this.directoryMap.clear();for(const s of n)this.directoryMap.set(s.id,s);this.documents=[],this.indexedVersions.clear();const i=[];for(const s of t){const o=await md(s.id),r=(o==null?void 0:o.content)||"",a=this._buildIndexedDoc(s,r);this.documents.push(a),this.indexedVersions.set(s.id,s.updatedAt),i.push(a.combinedVector)}i.length>0&&(this.tfidfVectorizer=new zq,this.tfidfVectorizer.fit(i)),this.isIndexed=!0,this.lastIndexTime=Date.now()}async syncIndex(){const[t,n]=await Promise.all([mf(),ec()]);this.directoryMap.clear();for(const a of n)this.directoryMap.set(a.id,a);const i=new Set;let s=0,o=0;for(const a of t){i.add(a.id);const l=this.indexedVersions.get(a.id);if(l===void 0||l<a.updatedAt){const u=await md(a.id),d=(u==null?void 0:u.content)||"",m=this._buildIndexedDoc(a,d);if(l===void 0)this.documents.push(m),s++;else{const f=this.documents.findIndex(h=>h.id===a.id);f!==-1?this.documents[f]=m:this.documents.push(m),o++}this.indexedVersions.set(a.id,a.updatedAt)}}const r=[];for(const a of this.indexedVersions.keys())i.has(a)||r.push(a);for(const a of r)this.documents=this.documents.filter(l=>l.id!==a),this.indexedVersions.delete(a);return this.lastIndexTime=Date.now(),{added:s,updated:o,removed:r.length}}async ensureIndex(){this.isIndexed?await this.syncIndex():await this.buildIndex()}async search(t,n){var r;const i={...Bq,...n};if(!t.trim())return[];if(await this.ensureIndex(),this.documents.length===0)return[];const s=El(t),o=[];for(const a of this.documents){if(i.filter.directoryId&&a.directoryId!==i.filter.directoryId||i.filter.domain&&((r=a.metadata)==null?void 0:r.domain)!==i.filter.domain)continue;const l=Yr(s,a.titleVector),u=Yr(s,a.contentVector),d=Yr(s,a.metadataVector),m=Yr(s,a.combinedVector),f=Math.max(m,l*1.5,u,d*1.3);f>=i.minSimilarity&&o.push({doc:a,similarity:f})}return o.sort((a,l)=>l.similarity-a.similarity),o.slice(0,i.limit).map(({doc:a,similarity:l})=>{var d,m;const u=this.directoryMap.get(a.directoryId);return{id:a.id,title:a.title,snippet:this._generateSnippet(a.content,t,i.snippetLength),content:i.includeContent?a.content:"",similarity:l,directoryId:a.directoryId,directoryName:u==null?void 0:u.name,sourceUrl:(d=a.metadata)==null?void 0:d.sourceUrl,domain:(m=a.metadata)==null?void 0:m.domain,updatedAt:a.updatedAt,createdAt:a.createdAt,metadata:a.metadata}})}async getRelatedNotes(t,n=5){await this.ensureIndex();const i=this.documents.find(o=>o.id===t);if(!i)return[];const s=[];for(const o of this.documents){if(o.id===t)continue;const r=Yr(i.combinedVector,o.combinedVector);r>.1&&s.push({doc:o,similarity:r})}return s.sort((o,r)=>r.similarity-o.similarity),s.slice(0,n).map(({doc:o,similarity:r})=>{var l,u;const a=this.directoryMap.get(o.directoryId);return{id:o.id,title:o.title,snippet:o.content.substring(0,200)+(o.content.length>200?"...":""),content:"",similarity:r,directoryId:o.directoryId,directoryName:a==null?void 0:a.name,sourceUrl:(l=o.metadata)==null?void 0:l.sourceUrl,domain:(u=o.metadata)==null?void 0:u.domain,updatedAt:o.updatedAt,createdAt:o.createdAt,metadata:o.metadata}})}addNote(t,n,i,s,o,r,a){this.documents=this.documents.filter(u=>u.id!==t);const l={id:t,title:n,directoryId:s,updatedAt:o,createdAt:r,metadata:a};this.documents.push(this._buildIndexedDoc(l,i)),this.indexedVersions.set(t,o)}removeNote(t){this.documents=this.documents.filter(n=>n.id!==t),this.indexedVersions.delete(t)}getStats(){return{documentCount:this.documents.length,isIndexed:this.isIndexed,lastIndexTime:this.lastIndexTime}}clearIndex(){this.documents=[],this.indexedVersions.clear(),this.tfidfVectorizer=null,this.isIndexed=!1,this.lastIndexTime=0}_buildIndexedDoc(t,n){const i=El(t.title),s=El(n),o=this._buildMetadataText(t.metadata),r=El(o),a={};for(const[l,u]of Object.entries(i))a[l]=(a[l]||0)+u*2;for(const[l,u]of Object.entries(s))a[l]=(a[l]||0)+u;for(const[l,u]of Object.entries(r))a[l]=(a[l]||0)+u*1.5;return{id:t.id,title:t.title,content:n,directoryId:t.directoryId,updatedAt:t.updatedAt,createdAt:t.createdAt,metadata:t.metadata,titleVector:i,contentVector:s,metadataVector:r,combinedVector:a}}_buildMetadataText(t){if(!t)return"";const n=[];return t.domain&&n.push(t.domain),t.tags&&n.push(...t.tags),n.join(" ")}_generateSnippet(t,n,i){if(!t)return"";const s=xN(n),o=t.toLowerCase();let r=0,a=0;for(const m of s){const f=o.indexOf(m.toLowerCase());if(f!==-1){const h=Math.max(0,f-50),g=Math.min(t.length,f+50),b=o.substring(h,g);let x=0;for(const y of s)b.includes(y.toLowerCase())&&x++;x>a&&(a=x,r=f)}}const l=Math.max(0,r-Math.floor(i/2)),u=Math.min(t.length,l+i);let d=t.substring(l,u);return l>0&&(d="..."+d),u<t.length&&(d=d+"..."),d}}let Ou=null;function Gq(){return Ou||(Ou=new Fq),Ou}const Hq={name:"search_notes",description:`在知识库中搜索笔记。使用语义搜索(TF-IDF + 余弦相似度)返回最相关的笔记摘要。
|
|
522
|
+
|
|
523
|
+
使用场景:
|
|
524
|
+
- 用户问到"我之前保存过…"、"关于XX的笔记"
|
|
525
|
+
- 需要查找知识库中的信息用于回答问题
|
|
526
|
+
- 查找与某个主题相关的所有笔记`,inputSchema:{type:"object",properties:{query:{type:"string",description:"搜索关键词或语义查询"},limit:{type:"number",description:"返回结果数量上限,默认 10"},directoryId:{type:"string",description:"限制在指定目录中搜索(可选)"}},required:["query"]},promptGuidance:{whenToUse:"当用户需要搜索知识库中的信息时使用,支持语义搜索",parameterGuidance:{query:"尽量使用核心关键词或简短的自然语言描述",limit:"一般用默认值即可,除非用户明确说了需要几条"},bestPractices:["优先使用核心词搜索,避免过长的句子","如果搜索不到结果,尝试换关键词","结合 get_note 工具获取完整内容"],examples:[{input:"搜索关于 React 的笔记",args:{query:"React"},explanation:"使用核心关键词搜索"},{input:"找一下上周保存的 AI 文章",args:{query:"AI 文章"},explanation:"自然语言搜索"}]},execute:async e=>{const t=e.query,n=e.limit||10,i=e.directoryId;if(!(t!=null&&t.trim()))return{success:!1,error:"搜索关键词不能为空",type:"error"};try{const o=await Gq().search(t,{limit:n,filter:i?{directoryId:i}:{},includeContent:!1,snippetLength:200});return o.length>0?{success:!0,type:"text",data:o.map(u=>({id:u.id,title:u.title,excerpt:u.snippet,similarity:Math.round(u.similarity*100)/100,directoryName:u.directoryName,domain:u.domain,updatedAt:new Date(u.updatedAt).toISOString()}))}:{success:!0,type:"text",data:(await aS(t)).slice(0,n).map(l=>({id:l.id,title:l.title,directoryId:l.directoryId,updatedAt:new Date(l.updatedAt).toISOString()}))}}catch(s){return{success:!1,error:`搜索失败: ${s.message}`,type:"error"}}}},Wq={name:"get_note",description:`获取知识库中某篇笔记的完整内容。
|
|
527
|
+
|
|
528
|
+
使用场景:
|
|
529
|
+
- 搜索到笔记后需要查看完整内容
|
|
530
|
+
- 用户指定了笔记 ID 要查看详情`,inputSchema:{type:"object",properties:{id:{type:"string",description:"笔记 ID"}},required:["id"]},promptGuidance:{whenToUse:"在 search_notes 返回结果后,需要获取某篇笔记的完整内容时使用",parameterGuidance:{id:"使用 search_notes 返回结果中的 id 字段"},examples:[{input:"查看笔记详情",args:{id:"note_12345"},explanation:"传入 search_notes 返回的笔记 ID"}]},execute:async e=>{const t=e.id;if(!t)return{success:!1,error:"笔记 ID 不能为空",type:"error"};try{const n=await md(t);return n?{success:!0,type:"text",data:{id:n.id,title:n.title,content:n.content,directoryId:n.directoryId,createdAt:new Date(n.createdAt).toISOString(),updatedAt:new Date(n.updatedAt).toISOString(),metadata:n.metadata}}:{success:!1,error:"笔记不存在",type:"error"}}catch(n){return{success:!1,error:`获取笔记失败: ${n.message}`,type:"error"}}}},$q={name:"create_note",description:`在知识库中创建新笔记。支持 Markdown 格式内容、指定目录、标签和来源 URL。
|
|
531
|
+
|
|
532
|
+
使用场景:
|
|
533
|
+
- 用户要求保存内容到知识库
|
|
534
|
+
- AI 对话中用户说"帮我记住这个"
|
|
535
|
+
- 保存 AI 生成的内容供后续参考`,inputSchema:{type:"object",properties:{title:{type:"string",description:"笔记标题"},content:{type:"string",description:"笔记内容(支持 Markdown 格式)"},directoryName:{type:"string",description:'目录名称(不存在则自动创建),默认为"笔记"'},tags:{type:"array",description:"标签列表(字符串数组,不存在则自动创建)"},sourceUrl:{type:"string",description:"来源 URL(可选)"}},required:["title","content"]},promptGuidance:{whenToUse:"当用户要求将信息保存到知识库时使用",parameterGuidance:{title:"简洁明了的标题,概括笔记核心内容",content:"完整的笔记内容,建议使用 Markdown 格式",directoryName:"根据内容类型推断合适的目录名称",tags:"提取内容中的核心主题作为标签"},bestPractices:["自动为笔记生成 2-4 个有意义的标签","标题控制在 50 字以内","内容保持完整结构化"],examples:[{input:"帮我保存这段关于 React Hooks 的笔记",args:{title:"React Hooks 使用指南",content:`## React Hooks
|
|
536
|
+
|
|
537
|
+
核心 Hook 包括...`,directoryName:"技术笔记",tags:["React","Hooks","前端"]}}]},execute:async e=>{const t=e.title,n=e.content,i=e.directoryName||"笔记",s=e.tags,o=e.sourceUrl;if(!(t!=null&&t.trim()))return{success:!1,error:"标题不能为空",type:"error"};if(!(n!=null&&n.trim()))return{success:!1,error:"内容不能为空",type:"error"};try{let a=(await ec()).find(d=>d.name===i);a||(a=await lS(i));const l=o?{sourceUrl:o}:void 0,u=await cS(t,a.id,n,l);if(s&&s.length>0)for(const d of s){const m=await uS(d);await dS(u.id,m.id)}return{success:!0,type:"text",data:{id:u.id,title:u.title,message:"笔记创建成功"}}}catch(r){return{success:!1,error:`创建笔记失败: ${r.message}`,type:"error"}}}},Xq={name:"list_directories",description:`列出知识库中的所有目录。
|
|
538
|
+
|
|
539
|
+
使用场景:
|
|
540
|
+
- 需要了解知识库的目录结构
|
|
541
|
+
- 创建笔记前查看可用目录`,inputSchema:{type:"object",properties:{}},execute:async()=>{try{return{success:!0,type:"text",data:(await ec()).map(t=>({id:t.id,name:t.name,isDefault:t.isDefault,createdAt:new Date(t.createdAt).toISOString()}))}}catch(e){return{success:!1,error:`获取目录失败: ${e.message}`,type:"error"}}}},Kq=[Hq,Wq,$q,Xq];function Yq(e){const t=e.prompt||pS;if(!e.videoData&&!e.youtubeUrl&&!e.videoCacheUrl)return{success:!1,error:"需要提供 videoData、videoCacheUrl 或 youtubeUrl",type:"error"};const n=ft.createTask({prompt:e.taskLabel||"视频分析",model:e.model,modelRef:e.modelRef||null,mimeType:e.mimeType||"video/mp4",youtubeUrl:e.youtubeUrl,videoData:e.videoData,videoCacheUrl:e.videoCacheUrl,videoAnalyzerAction:"analyze",videoAnalyzerPrompt:t,videoAnalyzerSource:e.videoAnalyzerSource,videoAnalyzerSourceLabel:e.videoAnalyzerSourceLabel,videoAnalyzerSourceSnapshot:e.videoAnalyzerSourceSnapshot,autoInsertToCanvas:!1},jn.CHAT);return{success:!0,data:{taskId:n.id,prompt:e.taskLabel||"视频分析",model:e.model},type:"text",taskId:n.id,task:n}}const Zq={name:"video_analyze",description:"分析视频内容,返回结构化的镜头拆解、脚本提取、风格分析等数据",supportedModes:["async","queue"],inputSchema:{type:"object",properties:{videoData:{type:"string",description:"base64 编码的视频数据(不含 data: 前缀),≤20MB"},mimeType:{type:"string",description:"视频 MIME 类型,默认 video/mp4",default:"video/mp4"},youtubeUrl:{type:"string",description:"YouTube 视频 URL"},videoCacheUrl:{type:"string",description:"本地缓存的视频 URL(队列模式)"},prompt:{type:"string",description:"自定义分析 prompt(可选,有内置默认值)"},model:{type:"string",description:"模型 ID,默认使用当前文本模型"}},required:[]},execute:async(e,t)=>(t==null?void 0:t.mode)==="queue"?Yq(e):mS(e)};function Jq(e){const t=e.prompt||hS;if(!e.audioData&&!e.audioCacheUrl)return{success:!1,error:"需要提供 audioData 或 audioCacheUrl",type:"error"};const n=ft.createTask({prompt:e.taskLabel||"音频分析",model:e.model,modelRef:e.modelRef||null,mimeType:e.mimeType||"audio/mpeg",audioData:e.audioData,audioCacheUrl:e.audioCacheUrl,musicAnalyzerAction:"analyze",musicAnalyzerPrompt:t,musicAnalyzerSource:e.musicAnalyzerSource,musicAnalyzerSourceLabel:e.musicAnalyzerSourceLabel,musicAnalyzerSourceSnapshot:e.musicAnalyzerSourceSnapshot,autoInsertToCanvas:!1},jn.CHAT);return{success:!0,data:{taskId:n.id,prompt:e.taskLabel||"音频分析",model:e.model},type:"text",taskId:n.id,task:n}}const Qq={name:"audio_analyze",description:"分析音频内容,返回结构化的音乐风格、情绪、Suno 标签和歌词改写建议",supportedModes:["async","queue"],inputSchema:{type:"object",properties:{audioData:{type:"string",description:"base64 编码的音频数据(不含 data: 前缀)"},mimeType:{type:"string",description:"音频 MIME 类型,默认 audio/mpeg",default:"audio/mpeg"},audioCacheUrl:{type:"string",description:"本地缓存的音频 URL(队列模式)"},prompt:{type:"string",description:"自定义分析 prompt(可选,有内置默认值)"},model:{type:"string",description:"Gemini 多模态模型 ID,默认使用当前文本模型"}},required:[]},execute:async(e,t)=>(t==null?void 0:t.mode)==="queue"?Jq(e):fS(e)};let Qg=!1;function wN(){Qg||(Qg=!0,js.registerAll([gS,gp,_3,A3,jq,cN,B3,nq,oq,cq,mq,hq,Eq,Rq,...Kq,Zq,Qq]))}let eo=null;function eb(e){eo=e}class e5{async execute(t){const{operation:n,args:i}=t;switch(n){case"canvas_insert":return this.handleCanvasInsert(i);case"insert_to_canvas":return this.handleInsertToCanvas(i);case"insert_mermaid":return this.handleMermaid(i);case"insert_mindmap":return this.handleMindmap(i);case"insert_svg":return this.handleSvg(i);case"generate_grid_image":return this.handleGridImage(i);case"generate_inspiration_board":return this.handleInspirationBoard(i);case"split_image":return this.handleSplitImage(i);case"generate_long_video":return this.handleLongVideo(i);case"ai_analyze":return this.handleAIAnalyze(i);case"generate_image":return this.handleGenerateImage(i);case"generate_video":return this.handleGenerateVideo(i);case"generate_audio":return this.handleGenerateAudio(i);default:return{success:!1,error:`Unknown operation: ${n}`,type:"error"}}}async handleGenerateAudio(t){return{success:!1,error:"SW 暂不支持直接处理音频生成,请回退到主线程执行",type:"audio"}}findWorkZoneForMCP(t,n){var o;const i=Qt.getAllWorkZones(t);if(i.length===0)return null;for(const r of i)if((o=r.workflow.steps)==null?void 0:o.some(l=>l.mcp===n))return r;return i.sort((r,a)=>(a.createdAt||0)-(r.createdAt||0))[0]||null}async handleInsertToCanvas(t){const n=eo;if(!n)return{success:!1,error:"画布未初始化",type:"error"};const{items:i,startPoint:s,verticalGap:o=50}=t;if(!i||i.length===0)return{success:!1,error:"没有要插入的内容",type:"error"};try{const{parseMarkdownToCards:r}=await Ce(async()=>{const{parseMarkdownToCards:m}=await import("./tool-windows-DWUG3k_L.js").then(f=>f.ou);return{parseMarkdownToCards:m}},__vite__mapDeps([0]),import.meta.url),{insertCardsToCanvas:a}=await Ce(async()=>{const{insertCardsToCanvas:m}=await import("./tool-windows-DWUG3k_L.js").then(f=>f.ov);return{insertCardsToCanvas:m}},__vite__mapDeps([0]),import.meta.url);let l=s||this.getInsertionPoint(n),u=0;for(const m of i){const{type:f,content:h,metadata:g}=m;switch(f){case"text":{const b=r(h);if(b&&b.length>0){const x=Math.round(window.innerWidth*.5);a(n,b,l,x);const y=Math.min(b.length,3),w=Math.ceil(b.length/3);l=[l[0],l[1]+w*140+o]}else Qn.insertText(n,l,h),l=[l[0],l[1]+100+o];u++;break}case"image":await lr(n,h,l,!1,{width:400,height:400},!1,!0),l=[l[0],l[1]+400+o],u++;break;case"video":await cr(n,h,l),l=[l[0],l[1]+300+o],u++;break;case"audio":await rr(n,h,g,l,!1,!0),l=[l[0],l[1]+160+o],u++;break;case"svg":{const x={url:this.svgToDataUrl(h),width:400,height:400};Qn.insertImage(n,x,l),l=[l[0],l[1]+400+o],u++;break}}}const d=s||this.getInsertionPoint(n);return requestAnimationFrame(()=>{hi(n,d)}),window.dispatchEvent(new CustomEvent("ai-generation-complete",{detail:{type:"text",success:!0}})),{success:!0,data:{insertedCount:u},type:"canvas"}}catch(r){return{success:!1,error:r.message||"插入失败",type:"error"}}}async handleCanvasInsert(t){const n=eo;if(!n)return{success:!1,error:"画布未初始化",type:"error"};const{items:i,startPoint:s,verticalGap:o=50,horizontalGap:r=20}=t;if(!i||i.length===0)return{success:!1,error:"没有要插入的内容",type:"error"};try{let a=s||this.getInsertionPoint(n),l=0;for(const u of i){const{type:d,content:m,metadata:f}=u;switch(d){case"image":await lr(n,m,a,!1,{width:400,height:400},!1,!0),a=[a[0],a[1]+400+o],l++;break;case"video":await cr(n,m,a),a=[a[0],a[1]+300+o],l++;break;case"audio":await rr(n,m,f,a,!1,!0),a=[a[0],a[1]+160+o],l++;break;case"text":Qn.insertText(n,a,m),a=[a[0],a[1]+100+o],l++;break;case"svg":const g={url:this.svgToDataUrl(m),width:400,height:400};Qn.insertImage(n,g,a),a=[a[0],a[1]+400+o],l++;break}}return{success:!0,data:{insertedCount:l},type:"canvas"}}catch(a){return{success:!1,error:a.message||"插入失败",type:"error"}}}async handleMermaid(t){const n=eo;if(!n)return{success:!1,error:"画布未初始化",type:"error"};const{mermaid:i}=t;if(!i)return{success:!1,error:"缺少 mermaid 参数",type:"error"};try{const{parseMermaidToDrawnix:s}=await Ce(async()=>{const{parseMermaidToDrawnix:m}=await import("./index-Dk5t_-56.js").then(f=>f.aq);return{parseMermaidToDrawnix:m}},__vite__mapDeps([0]),import.meta.url),o=this.extractCodeBlock(i,"mermaid");let r;try{r=await s(o)}catch{r=await s(o.replace(/"/g,"'"))}const{elements:a}=r;if(!a||a.length===0)return{success:!1,error:"Mermaid 解析未生成元素",type:"error"};const l=this.findWorkZoneForMCP(n,"insert_mermaid"),u=this.getViewportCenter(n),d=this.insertElementsToCanvasAtPoint(n,a,u);return d.success&&(requestAnimationFrame(()=>{this.centerInsertedElementsInViewport(n,a.length)}),l&&setTimeout(()=>{Qt.removeWorkZone(n,l.id),window.dispatchEvent(new CustomEvent("ai-generation-complete",{detail:{type:"mermaid",success:!0}}))},100)),{success:d.success,data:{elementsCount:d.elementsCount},type:"canvas",error:d.error}}catch(s){return console.error("[SWCapabilities] Mermaid conversion failed:",s),{success:!1,error:`Mermaid 转换失败: ${s.message}`,type:"error"}}}async handleMindmap(t){const n=eo;if(!n)return console.error("[SWCapabilities] ❌ handleMindmap: 画布未初始化"),{success:!1,error:"画布未初始化",type:"error"};const{markdown:i}=t;if(!i)return console.error("[SWCapabilities] ❌ handleMindmap: 缺少 markdown 参数"),{success:!1,error:"缺少 markdown 参数",type:"error"};try{const{parseMarkdownToDrawnix:s}=await Ce(async()=>{const{parseMarkdownToDrawnix:d}=await import("./index-BkvYpt-1.js");return{parseMarkdownToDrawnix:d}},__vite__mapDeps([0]),import.meta.url),o=this.extractCodeBlock(i,"markdown");let r;try{r=await s(o)}catch{r=await s(o.replace(/"/g,"'"))}if(!r)return{success:!1,error:"Markdown 解析未生成元素",type:"error"};r.points=[[0,0]];const a=this.findWorkZoneForMCP(n,"insert_mindmap"),l=this.getViewportCenter(n),u=this.insertElementsToCanvasAtPoint(n,[r],l);return u.success?(requestAnimationFrame(()=>{this.centerInsertedElementsInViewport(n,1)}),a&&setTimeout(()=>{Qt.removeWorkZone(n,a.id),window.dispatchEvent(new CustomEvent("ai-generation-complete",{detail:{type:"mindmap",success:!0}}))},100)):console.error("[SWCapabilities] ❌ Mindmap insert failed:",u.error),{success:u.success,data:{type:"mindmap",elementsCount:u.elementsCount},type:"canvas",error:u.error}}catch(s){return console.error("[SWCapabilities] ❌ Mindmap conversion failed:",s),{success:!1,error:`思维导图转换失败: ${s.message}`,type:"error"}}}async handleSvg(t){const n=eo;if(!n)return{success:!1,error:"画布未初始化",type:"error"};const{svg:i,width:s=400,startPoint:o}=t;if(!i)return{success:!1,error:"缺少 svg 参数",type:"error"};try{const r=this.extractSvgCode(i),a=this.normalizeSvg(r),l=this.parseSvgDimensions(a),u=Math.min(Math.max(s,100),800),d=l.height/l.width,m=u*d,f=this.svgToDataUrl(a);let h=o||this.getInsertionPoint(n);h=[h[0]-u/2,h[1]];const g={url:f,width:u,height:m};Qn.insertImage(n,g,h);const b=[h[0]+u/2,h[1]+m/2];return requestAnimationFrame(()=>{hi(n,b)}),{success:!0,data:{width:u,height:m},type:"canvas"}}catch(r){return{success:!1,error:`SVG 插入失败: ${r.message}`,type:"error"}}}async handleGridImage(t){try{const{createGridImageTask:n}=await Ce(async()=>{const{createGridImageTask:s}=await import("./tool-windows-DWUG3k_L.js").then(o=>o.oC);return{createGridImageTask:s}},__vite__mapDeps([0]),import.meta.url),i=await n(t);return{success:i.success,data:i.data,type:i.type,taskId:i.taskId,error:i.error}}catch(n){return{success:!1,error:`宫格图生成失败: ${n.message}`,type:"error"}}}async handleInspirationBoard(t){try{const{createInspirationBoardTask:n}=await Ce(async()=>{const{createInspirationBoardTask:s}=await import("./tool-windows-DWUG3k_L.js").then(o=>o.oD);return{createInspirationBoardTask:s}},__vite__mapDeps([0]),import.meta.url),i=await n(t);return{success:i.success,data:i.data,type:i.type,taskId:i.taskId,error:i.error}}catch(n){return{success:!1,error:`灵感图生成失败: ${n.message}`,type:"error"}}}async handleSplitImage(t){const n=eo;if(!n)return{success:!1,error:"画布未初始化",type:"error"};const{imageUrl:i}=t;if(!i)return{success:!1,error:"缺少 imageUrl 参数",type:"error"};try{const{splitAndInsertImages:s}=await Ce(async()=>{const{splitAndInsertImages:r}=await import("./tool-windows-DWUG3k_L.js").then(a=>a.oy);return{splitAndInsertImages:r}},__vite__mapDeps([0]),import.meta.url),o=await s(n,i,{scrollToResult:!0});return{success:o.success,data:{count:o.count},type:"canvas",error:o.error}}catch(s){return{success:!1,error:`图片拆分失败: ${s.message}`,type:"error"}}}async handleLongVideo(t){try{const{createLongVideoTask:n}=await Ce(async()=>{const{createLongVideoTask:s}=await import("./tool-windows-DWUG3k_L.js").then(o=>o.oF);return{createLongVideoTask:s}},__vite__mapDeps([0]),import.meta.url),i=await n(t);return{success:i.success,data:i.data,type:i.type,taskId:i.taskId,error:i.error}}catch(n){return{success:!1,error:`长视频生成失败: ${n.message}`,type:"error"}}}async handleAIAnalyze(t){var n;try{const{analyzeWithAI:i}=await Ce(async()=>{const{analyzeWithAI:o}=await import("./tool-windows-DWUG3k_L.js").then(r=>r.oE);return{analyzeWithAI:o}},__vite__mapDeps([0]),import.meta.url),s=await i(t.context,{onChunk:o=>{},onAddSteps:o=>{}},t.modelRef||null);return{success:s.success,data:{response:s.response},type:"text",addSteps:(n=s.generatedSteps)==null?void 0:n.map(o=>({id:o.id,mcp:o.mcp,args:o.args,description:o.description,status:o.status})),error:s.error}}catch(i){return{success:!1,error:`AI 分析失败: ${i.message}`,type:"error"}}}async handleGenerateImage(t){var n;try{const{createImageTask:i}=await Ce(async()=>{const{createImageTask:o}=await import("./tool-windows-DWUG3k_L.js").then(r=>r.op);return{createImageTask:o}},__vite__mapDeps([0]),import.meta.url),s=await i(t);return s.success?{success:!0,data:s.data,type:"image",taskId:s.taskId,taskIds:(n=s.data)==null?void 0:n.taskIds}:(console.error("[SWCapabilities] Image task creation failed:",s.error),{success:!1,error:s.error||"图片生成任务创建失败",type:"error"})}catch(i){return console.error("[SWCapabilities] Image generation error:",i),{success:!1,error:`图片生成失败: ${i.message}`,type:"error"}}}async handleGenerateVideo(t){var n;try{const{createVideoTask:i}=await Ce(async()=>{const{createVideoTask:o}=await Promise.resolve().then(()=>E3);return{createVideoTask:o}},void 0,import.meta.url),s=await i(t);return s.success?{success:!0,data:s.data,type:"video",taskId:s.taskId,taskIds:(n=s.data)==null?void 0:n.taskIds}:(console.error("[SWCapabilities] Video task creation failed:",s.error),{success:!1,error:s.error||"视频生成任务创建失败",type:"error"})}catch(i){return console.error("[SWCapabilities] Video generation error:",i),{success:!1,error:`视频生成失败: ${i.message}`,type:"error"}}}getInsertionPoint(t){const n=t.appState,i=(n==null?void 0:n.lastSelectedElementIds)||[];if(i.length>0){const s=i.map(o=>t.children.find(r=>r.id===o)).filter(Boolean);if(s.length>0)try{const o=It(t,s,!1);return[o.x+o.width/2,o.y+o.height+50]}catch{}}if(t.children&&t.children.length>0){let s=0,o=100;for(const r of t.children)try{const a=It(t,[r],!1),l=a.y+a.height;l>s&&(s=l,o=a.x+a.width/2)}catch{}return[o,s+50]}return[100,100]}insertElementsToCanvas(t,n){try{const i=this.getInsertionPoint(t);return t.insertFragment({elements:JSON.parse(JSON.stringify(n))},i,Ko.paste),requestAnimationFrame(()=>{hi(t,i)}),{success:!0,elementsCount:n.length}}catch(i){return{success:!1,error:i.message}}}insertElementsToCanvasAtPoint(t,n,i){try{return t.insertFragment({elements:JSON.parse(JSON.stringify(n))},i,Ko.paste),requestAnimationFrame(()=>{hi(t,i)}),{success:!0,elementsCount:n.length}}catch(s){return console.error("[SWCapabilities] insertElementsToCanvasAtPoint failed:",s),{success:!1,error:s.message}}}getViewportCenter(t){try{const i=J.getBoardContainer(t).getBoundingClientRect(),s=t.viewport.zoom,o=wr(t);if(!o)return[0,0];const r=o[0]+i.width/(2*s),a=o[1]+i.height/(2*s);return[r,a]}catch(n){return console.warn("[SWCapabilities] Error getting viewport center:",n),[0,0]}}centerInsertedElementsInViewport(t,n){try{const s=t.children.slice(-n);if(s.length===0){console.warn("[SWCapabilities] No inserted elements found to center");return}const o=It(t,s,!1),a=J.getBoardContainer(t).getBoundingClientRect(),l=80,u=a.width-l*2,d=a.height-l*2,m=u/o.width,f=d/o.height;let h=Math.min(m,f);h=Math.min(Math.max(h,.2),1.5);const g=o.x+o.width/2,b=o.y+o.height/2,x=g-a.width/(2*h),y=b-a.height/(2*h);Ue.updateViewport(t,[x,y],h)}catch(i){console.warn("[SWCapabilities] Error centering inserted elements:",i)}}extractCodeBlock(t,n){const i=new RegExp(`\`\`\`${n}\\s*\\n([\\s\\S]*?)\\n\\s*\`\`\``,"i"),s=t.match(i);if(s)return s[1].trim();const o=new RegExp(`\`\`\`${n}\\s*([\\s\\S]*?)\\s*\`\`\``,"i"),r=t.match(o);if(r)return r[1].trim();const a=new RegExp(`^${n}\\s*\\n`,"i");return a.test(t.trim())?t.trim().replace(a,"").trim():t.trim()}extractSvgCode(t){let n=this.extractCodeBlock(t,"svg");if(n===t&&(n=this.extractCodeBlock(t,"xml")),n===t&&!n.trim().startsWith("<svg")){const i=n.match(/<svg[\s\S]*?<\/svg>/i);i&&(n=i[0])}return n.trim()}normalizeSvg(t){let n=t.trim();return n.includes("xmlns=")||(n=n.replace("<svg",'<svg xmlns="http://www.w3.org/2000/svg"')),n}parseSvgDimensions(t){const n=t.match(/viewBox=["']([^"']+)["']/i);if(n){const[,,o,r]=n[1].split(/\s+/).map(Number);if(o&&r)return{width:o,height:r}}const i=t.match(/width=["'](\d+)(?:px)?["']/i),s=t.match(/height=["'](\d+)(?:px)?["']/i);return i&&s?{width:parseInt(i[1]),height:parseInt(s[1])}:{width:400,height:400}}svgToDataUrl(t){return`data:image/svg+xml,${encodeURIComponent(t).replace(/'/g,"%27").replace(/"/g,"%22")}`}}const tb=new e5;function t5(e){var t;return!!((t=e.params)!=null&&t.longVideoMeta)}function n5(e){var t;return((t=e.params)==null?void 0:t.longVideoMeta)||null}class $o{constructor(){this.isInitialized=!1,this.batches=new Map,this.initTimestamp=0}static getInstance(){return $o.instance||($o.instance=new $o),$o.instance}initialize(){this.isInitialized||(this.isInitialized=!0,this.initTimestamp=Date.now(),ft.observeTaskUpdates().subscribe(t=>{if(t.type==="taskUpdated"&&t.task.status===mn.COMPLETED&&t.task.type===jn.VIDEO&&t5(t.task)){if((t.task.completedAt||0)<this.initTimestamp)return;this.handleSegmentCompleted(t.task).catch(i=>{console.error("[LongVideoChain] Error handling completed segment:",i)})}}))}async handleSegmentCompleted(t){var u;const n=n5(t);if(!n)return;const{segmentIndex:i,totalSegments:s,scripts:o,batchId:r}=n,a=(u=t.result)==null?void 0:u.url;let l=this.batches.get(r);if(l||(l={batchId:r,totalSegments:s,completedSegments:new Map,processedSegments:new Set,creatingNextFor:null,isMerging:!1,mergeCompleted:!1,scripts:o||[],characterReferenceUrls:n.characterReferenceUrls,characterDescription:n.characterDescription},this.batches.set(r,l)),!l.processedSegments.has(i)){if(l.processedSegments.add(i),a&&l.completedSegments.set(i,a),l.completedSegments.size===s){await this.mergeAndInsert(l);return}if(l.creatingNextFor!==i&&i<s){l.creatingNextFor=i;try{await this.createNextSegment(t,n,o,a,l.characterReferenceUrls,l.characterDescription)}finally{l.creatingNextFor=null}}}}async createNextSegment(t,n,i,s,o,r){const a=n.segmentIndex+1,l=i.find(m=>m.index===a);if(!l){console.error(`[LongVideoChain] Script not found for segment ${a}`);return}let u;if(s)try{u=(await bS(s)).dataUrl}catch(m){console.error("[LongVideoChain] Failed to extract last frame:",m)}const d={...n,segmentIndex:a,needsLastFrame:a<n.totalSegments,characterReferenceUrls:o??n.characterReferenceUrls,characterDescription:r??n.characterDescription};xS(l,d,u)}async mergeAndInsert(t){if(!(t.isMerging||t.mergeCompleted)){t.isMerging=!0;try{const n=[];for(let r=1;r<=t.totalSegments;r++){const a=t.completedSegments.get(r);a&&n.push(a)}if(n.length===0){console.error("[LongVideoChain] No video URLs to merge");return}const i=this.extractTransitions(t),o=await Jw(n,(r,a,l)=>{const u=l||`${a} ${r.toFixed(1)}%`},{transitions:i,transitionDuration:.5});await this.insertMergedVideo(o.url),t.mergeCompleted=!0,this.cleanupBatch(t.batchId)}catch(n){console.error("[LongVideoChain] Merge failed:",n),this.cleanupBatch(t.batchId)}finally{t.isMerging=!1}}}async insertMergedVideo(t){try{await wS("video",t)}catch(n){console.error("[LongVideoChain] Failed to insert video to canvas:",n)}}extractTransitions(t){return!t.scripts||t.scripts.length===0?[]:t.scripts.sort((n,i)=>n.index-i.index).slice(0,-1).map(n=>n.transition_hint||"cut")}cleanupBatch(t){const n=this.batches.get(t);n&&(n.completedSegments.clear(),n.processedSegments.clear(),this.batches.delete(t))}getBatchStatus(t){const n=this.batches.get(t);return n?{completed:n.completedSegments.size,total:n.totalSegments,isMerging:n.isMerging,mergeCompleted:n.mergeCompleted}:null}}const i5=$o.getInstance();function s5(){i5.initialize()}function nb(){return`img-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}async function ib(e){return new Promise((t,n)=>{const i=new Image,s=e.startsWith("http")&&!e.startsWith(location.origin);i.crossOrigin="anonymous",i.onload=()=>t(i),i.onerror=()=>{n(s?new Error("无法加载外部图片,可能是跨域 (CORS) 限制。请先下载图片到本地后再操作。"):new Error("图片加载失败,请检查图片是否有效"))},i.src=e})}function o5(e,t=.92){return e.toDataURL("image/jpeg",t)}class r5{async split(t,n){const{rows:i,cols:s}=n;if(i<1||s<1)throw new Error("Grid rows and cols must be at least 1");const o=await ib(t),r=o.naturalWidth,a=o.naturalHeight,l=Math.floor(r/s),u=Math.floor(a/i),d=[];for(let m=0;m<i;m++)for(let f=0;f<s;f++){const h=m*s+f,g=f*l,b=m*u,x=document.createElement("canvas");x.width=l,x.height=u;const y=x.getContext("2d");if(!y)throw new Error("Failed to get canvas 2d context");y.drawImage(o,g,b,l,u,0,0,l,u);const w=o5(x);d.push({id:nb(),imageData:w,originalIndex:h,width:l,height:u})}return d}async splitToBlob(t,n){const{rows:i,cols:s}=n;if(i<1||s<1)throw new Error("Grid rows and cols must be at least 1");const o=await ib(t),r=o.naturalWidth,a=o.naturalHeight,l=Math.floor(r/s),u=Math.floor(a/i),d=[];for(let m=0;m<i;m++)for(let f=0;f<s;f++){const h=m*s+f,g=f*l,b=m*u,x=document.createElement("canvas");x.width=l,x.height=u;const y=x.getContext("2d");if(!y)throw new Error("Failed to get canvas 2d context");y.drawImage(o,g,b,l,u,0,0,l,u);const w=await new Promise((S,k)=>{x.toBlob(N=>{N?S(N):k(new Error("Failed to create blob"))},"image/png",.92)}),v=URL.createObjectURL(w);d.push({id:nb(),imageData:v,originalIndex:h,width:l,height:u})}return d}revokeBlobUrls(t){for(const n of t)n.imageData.startsWith("blob:")&&URL.revokeObjectURL(n.imageData)}}const sb=new r5;function di(e,t){return Math.random()*(t-e)+e}function Sl(e){const t=[...e];for(let n=t.length-1;n>0;n--){const i=Math.floor(Math.random()*(n+1));[t[n],t[i]]=[t[i],t[n]]}return t}class a5{calculate(t,n,i,s){switch(n){case"scattered":return this.scatteredLayout(t,i,s);case"grid":return this.gridLayout(t,i);case"circular":return this.circularLayout(t,i,s);case"inspiration-board":return this.inspirationBoardLayout(t,i,s);default:return console.warn(`[LayoutEngine] Unknown layout style: ${n}, falling back to grid`),this.gridLayout(t,i)}}scatteredLayout(t,n,i){const{maxRotation:s=15,minScale:o=.85,maxScale:r=1.15,positionJitter:a=40}=i||{},{canvasWidth:l,canvasHeight:u,startX:d,startY:m,gap:f=20}=n,h=t.length,g=Math.ceil(Math.sqrt(h)),b=Math.ceil(h/g),x=Math.max(...t.map(I=>I.width)),y=Math.max(...t.map(I=>I.height)),w=l-f*2,v=u-f*2,S=w/g,k=v/b,N=Math.min((S-f)/x,(k-f)/y,1),E=Sl(t.map((I,T)=>T));return t.map((I,T)=>{const j=Math.floor(T/g),V=T%g,_=d+f+V*S+S/2,D=m+f+j*k+k/2,C=di(-a,a),M=di(-a,a),U=di(-s,s),F=di(o,r),$=N*F,A=I.width*$,H=I.height*$;return{...I,x:_+C-A/2,y:D+M-H/2,rotation:U,scale:$,zIndex:E[T]}})}gridLayout(t,n){const{canvasWidth:i,canvasHeight:s,startX:o,startY:r,gap:a=20}=n,l=t.length,u=Math.ceil(Math.sqrt(l)),d=Math.ceil(l/u),m=Math.max(...t.map(w=>w.width)),f=Math.max(...t.map(w=>w.height)),h=i-a*(u+1),g=s-a*(d+1),b=h/u,x=g/d,y=Math.min(b/m,x/f,1);return t.map((w,v)=>{const S=Math.floor(v/u),k=v%u,N=w.width*y,E=w.height*y,I=o+a+k*(b+a),T=r+a+S*(x+a),j=I+(b-N)/2,V=T+(x-E)/2;return{...w,x:j,y:V,rotation:0,scale:y,zIndex:v}})}circularLayout(t,n,i){const{centerIndex:s=-1,radius:o,startAngle:r=-90}=i||{},{canvasWidth:a,canvasHeight:l,startX:u,startY:d}=n,m=u+a/2,f=d+l/2,h=s>=0&&s<t.length?t.filter((V,_)=>_!==s):t,g=s>=0&&s<t.length?t[s]:null,b=Math.max(...t.map(V=>V.width)),x=Math.max(...t.map(V=>V.height)),y=Math.max(b,x),w=h.length,v=y*.8,S=w*y*1.2,k=Math.max(v,S/(2*Math.PI)),N=o||Math.min(k,Math.min(a,l)/2-y/2),E=Math.min(a,l),I=Math.min(E*.25/y,1),T=[];if(g){const V=g.width*I*1.2,_=g.height*I*1.2;T.push({...g,x:m-V/2,y:f-_/2,rotation:0,scale:I*1.2,zIndex:w})}const j=360/w;return h.forEach((V,_)=>{const C=(r+_*j)*Math.PI/180,M=V.width*I,U=V.height*I,F=m+N*Math.cos(C)-M/2,$=f+N*Math.sin(C)-U/2;T.push({...V,x:F,y:$,rotation:0,scale:I,zIndex:_})}),T}inspirationBoardLayout(t,n,i){const{minWidthRatio:s=ra.minWidthRatio,maxWidthRatio:o=ra.maxWidthRatio,maxRotation:r=ra.maxRotation,gap:a=ra.gap}=i||{},{canvasWidth:l,canvasHeight:u,startX:d,startY:m}=n,f=t.length,h=this.assignSizeCategories(f),g=t.reduce((k,N)=>k+N.width,0)/f,b=t.reduce((k,N)=>k+N.height,0)/f,x=l||1200,y=u||600,w=Math.min(x*.25/g,y*.4/b,1),v=this.calculateInspirationBoardPositions(f,x,y,a),S=Sl(t.map((k,N)=>N));return t.map((k,N)=>{const E=v[N],I=h[N];let T;switch(I){case"large":T=di(1.2,o);break;case"medium":T=di(.9,1.1);break;case"small":T=di(s,.85);break;default:T=1}const j=w*T,V=di(-r,r),_=di(-20,20),D=di(-15,15),C=k.width*j,M=k.height*j;return{...k,x:d+E.x+_-C/2,y:m+E.y+D-M/2,rotation:V,scale:j,zIndex:S[N]}})}assignSizeCategories(t){const n=[],i=Math.max(2,Math.floor(t*.25)),s=Math.max(2,Math.floor(t*.25)),o=t-i-s;for(let r=0;r<i;r++)n.push("large");for(let r=0;r<o;r++)n.push("medium");for(let r=0;r<s;r++)n.push("small");return Sl(n)}calculateInspirationBoardPositions(t,n,i,s){const o=[],r=Math.ceil(t/4),a=Math.ceil(t/r),l=(n-s*2)/a,u=(i-s*2)/r;for(let d=0;d<t;d++){const m=Math.floor(d/a),f=d%a,h=s+f*l+l/2,g=s+m*u+u/2,b=di(-l*.3,l*.3),x=di(-u*.2,u*.2);o.push({x:h+b,y:g+x})}return Sl(o)}calculateRequiredSize(t,n,i=.5){const s=t.length,o=Math.ceil(Math.sqrt(s)),r=Math.ceil(s/o),a=Math.max(...t.map(h=>h.width)),l=Math.max(...t.map(h=>h.height)),u=20,d=n==="scattered"?60:40,m=o*a*i+(o+1)*u+d*2,f=r*l*i+(r+1)*u+d*2;return{width:m,height:f}}}const ob=new a5;class l5{constructor(){this.board=null}setBoard(t){this.board=t}getBoard(){return this.board}async generate(t){const{theme:n,gridConfig:i=Xi.gridConfig,layoutStyle:s=Xi.layoutStyle,imageSize:o=Xi.imageSize,imageQuality:r=Xi.imageQuality}=t;try{const a=this.buildPrompt(n,i),l=await Ca.generateImage(a,{size:o,quality:r,response_format:"url"});if(!l.data||l.data.length===0)throw new Error("AI 生成图片失败:未返回图片数据");const u=l.data[0].url||l.data[0].b64_json,d=u&&yS(String(u));if(!d)throw new Error("AI 生成图片失败:未返回图片 URL");const m=await Ki.getImageForAI(d),f=m.type==="base64"?m.value:d,h=await sb.split(f,i),g=this.calculateLayoutParams(h),b=ob.calculate(h,s,g);return{success:!0,originalImageUrl:d,elements:b}}catch(a){return console.error("[GridImageService] Generation failed:",a),{success:!1,error:a.message||"宫格图生成失败"}}}async processExistingImage(t,n,i="scattered"){try{const s=await Ki.getImageForAI(t),o=s.type==="base64"?s.value:t,r=await sb.split(o,n),a=this.calculateLayoutParams(r),l=ob.calculate(r,i,a);return{success:!0,originalImageUrl:t,elements:l}}catch(s){return console.error("[GridImageService] Processing failed:",s),{success:!1,error:s.message||"宫格图处理失败"}}}async insertToBoard(t,n){if(!this.board)throw new Error("画板未初始化,请先调用 setBoard");let i=(n==null?void 0:n[0])??100,s=n==null?void 0:n[1];if(s===void 0){const r=NS(this.board);s=(r==null?void 0:r[1])??100,i=(r==null?void 0:r[0])??i}const o=[...t].sort((r,a)=>r.zIndex-a.zIndex);for(const r of o){const a=i+r.x,l=s+r.y,u={url:r.imageData,width:r.width*r.scale,height:r.height*r.scale};Qn.insertImage(this.board,u,[a,l])}}async generateAndInsert(t,n){const i=await this.generate(t);return i.success&&i.elements&&await this.insertToBoard(i.elements,n),i}buildPrompt(t,n){const i=gx.zh;return i(t,n.rows,n.cols)}calculateLayoutParams(t){const n=t.reduce((h,g)=>h+g.width,0),i=t.reduce((h,g)=>h+g.height,0),s=t.length,o=Math.ceil(Math.sqrt(s)),r=Math.ceil(s/o),a=n/s,l=i/s,u=30,d=50,m=o*a+(o+1)*u+d*2,f=r*l+(r+1)*u+d*2;return{canvasWidth:m,canvasHeight:f,startX:0,startY:0,gap:u}}}const rb=new l5,c5={mj_ar:"--ar",mj_v:"--v",mj_style:"--style",mj_s:"--s",mj_q:"--q",mj_seed:"--seed"},u5=e=>{const t=[];return Object.entries(c5).forEach(([n,i])=>{const s=e[n];!s||s==="default"||t.push(`${i} ${s}`)}),t.join(" ")};function d5(e){return{cleanText:e,selectedAudioModel:null,selectedImageModel:null,selectedVideoModel:null,selectedParams:[],selectedCount:null}}function m5(){const e=$n.get();return(e==null?void 0:e.imageModelName)||zo()}function p5(){const e=$n.get();return(e==null?void 0:e.videoModelName)||xo()}function f5(){const e=$n.get();return(e==null?void 0:e.audioModelName)||tr()}function ab(){const e=$n.get();return(e==null?void 0:e.textModelName)||"deepseek-v3.2"}function h5(e,t,n){if(t.length>0)return t.join(`
|
|
542
|
+
`);if(e){if(n===1)return"请仔细分析这张图片的内容、风格、构图、色调和艺术特点,推测生成这张图片可能使用的原始提示词,然后基于你推测的提示词重新生成一张全新的、风格相似但内容不完全相同的图片。不要直接复制原图。";if(n>1)return"请分析这些图片的主题、风格和视觉元素,找出它们之间的共同点或关联性,然后创造性地将它们融合成一张全新的、和谐统一的图片。融合时请保持各图片的精华元素,确保最终作品在构图、色调和风格上协调一致。"}return""}function Zr(e){return e.replace(":","x").toLowerCase()}function g5(e,t,n){const i=t.texts.length>0||t.images.length>0||t.videos.length>0||t.graphics.length>0,s=t.texts,o=t.images.length+t.graphics.length,r=d5(e),a=r.cleanText.trim().length>0;let l=(n==null?void 0:n.generationType)||"image",u,d=!1;if(n!=null&&n.modelId){const S=so(n.modelId);n.generationType||((S==null?void 0:S.type)==="video"?l="video":(S==null?void 0:S.type)==="audio"?l="audio":(S==null?void 0:S.type)==="text"?l="text":l="image"),u=n.modelId,d=!0}else r.selectedAudioModel?(l="audio",u=r.selectedAudioModel,d=!0):r.selectedVideoModel?(l="video",u=r.selectedVideoModel,d=!0):r.selectedImageModel?(l="image",u=r.selectedImageModel,d=!0):!i&&a&&!(n!=null&&n.generationType)?(l="agent",u=ab()):l==="video"?u=p5():l==="audio"?u=f5():l==="text"||l==="agent"?u=ab():u=m5();let m;(n==null?void 0:n.generationType)==="image"||(n==null?void 0:n.generationType)==="video"||(n==null?void 0:n.generationType)==="audio"||(n==null?void 0:n.generationType)==="text"?m="direct_generation":(n==null?void 0:n.generationType)==="agent"?m="agent_flow":m=a?"agent_flow":"direct_generation";const f=r.cleanText.trim(),h=s.join(`
|
|
543
|
+
`).trim();let g;if(h&&f?g=`${h}
|
|
544
|
+
|
|
545
|
+
${f}`:f?g=f:h?g=h:i&&o>0?g=l==="text"?"":h5(i,[],o):g="",u.startsWith("mj")&&(n!=null&&n.params)){const S=u5(n.params);S&&(g=[g,S].filter(Boolean).join(" "))}const b=(n==null?void 0:n.count)||r.selectedCount||1;let x,y,w;if(n!=null&&n.params){l!=="audio"&&l!=="text"&&l!=="agent"&&!u.startsWith("mj")&&n.params.size&&(x=Zr(n.params.size)),n.params.duration&&(y=n.params.duration);const S={};for(const[k,N]of Object.entries(n.params))k!=="size"&&k!=="duration"&&N&&(S[k]=N);Object.keys(S).length>0&&(w=S)}if(!x&&(n!=null&&n.size)&&n.size!=="auto"&&(x=Zr(n.size)),!x&&(n==null?void 0:n.size)!=="auto"){for(const S of r.selectedParams)if(S.id==="size"){x=Zr(S.value);break}}if(!y){for(const S of r.selectedParams)if(S.id==="duration"){y=S.value;break}}if(!x&&(n==null?void 0:n.size)!=="auto"&&l!=="text"&&l!=="agent"&&l!=="audio"){const S=so(u);if((S==null?void 0:S.type)==="image"&&S.imageDefaults)x="1x1";else if((S==null?void 0:S.type)==="video"&&S.videoDefaults){const k=mu(u,(n==null?void 0:n.modelRef)||u,n==null?void 0:n.params);x=Zr(k.size||S.videoDefaults.size),y||(y=k.duration||S.videoDefaults.duration)}else if(l==="image")x="1x1";else if(l==="video"){const k=mu(u,(n==null?void 0:n.modelRef)||u,n==null?void 0:n.params);x=Zr(k.size),y||(y=k.duration)}}!y&&l==="video"&&(y=mu(u,(n==null?void 0:n.modelRef)||u,n==null?void 0:n.params).duration);const v=r.cleanText.trim();return{scenario:m,generationType:l,modelId:u,modelRef:(n==null?void 0:n.modelRef)||null,isModelExplicit:d,prompt:g,userInstruction:v,rawInput:e,count:b,size:x,duration:y,extraParams:w,parseResult:r,hasExtraContent:a,selection:t}}const ti="external-skill-packages";let wp=[],yc=[],em=!1;async function us(){var e,t;if(!em){try{let n=await Xt.get(ti),i=null;try{i=await b5()}catch(o){console.warn("[ExternalSkillService] 预构建 bundle 加载失败(非致命):",o)}if(!(n&&Array.isArray(n)&&n.length>0))i&&i.skills&&i.skills.length>0&&(n=[{name:i.name||"baoyu-skills",skills:i.skills,metadata:i.metadata}],await Xt.set(ti,n),console.log(`[ExternalSkillService] 已加载预构建 bundle: ${i.skills.length} 个 Skill`));else if(i&&i.skills&&i.skills.length>0){const o=(e=i.metadata)==null?void 0:e.bundleVersion,r=n.find(l=>l.name===(i.name||"baoyu-skills")),a=(t=r==null?void 0:r.metadata)==null?void 0:t.bundleVersion;if(o&&o!==a){const l={name:i.name||"baoyu-skills",skills:i.skills,metadata:i.metadata},u=n.filter(d=>d.name!==l.name);n=[l,...u],await Xt.set(ti,n),console.log(`[ExternalSkillService] 预构建 bundle 已更新: ${a||"无"} → ${o} (${i.skills.length} 个 Skill)`)}else if(!o&&!a){const l={name:i.name||"baoyu-skills",skills:i.skills,metadata:i.metadata},u=n.filter(d=>d.name!==l.name);n=[l,...u],await Xt.set(ti,n),console.log(`[ExternalSkillService] 预构建 bundle 已强制刷新(旧版本无版本号): ${i.skills.length} 个 Skill`)}}n&&Array.isArray(n)&&await iu(n)}catch(n){console.error("[ExternalSkillService] 初始化失败:",n)}em=!0}}async function b5(){try{const e=await Ce(()=>import("./external-skills-BcV6ATYi.js"),[],import.meta.url);return e.default||e}catch{return null}}async function x5(){return await us(),[...wp]}async function yp(e){await us();const t=await Xt.get(ti),n=t&&Array.isArray(t)?[...t]:[],i=n.findIndex(s=>s.name===e.name);i>=0?n[i]=e:n.push(e),await Xt.set(ti,n),await iu(n)}async function w5(e){await us();const t=await Xt.get(ti);if(!t||!Array.isArray(t))return;const n=t.filter(i=>i.name!==e);await Xt.set(ti,n),await iu(n)}async function y5(e){await us();const t=await Xt.get(ti);if(!t)return[];const n=t.find(i=>i.name===e);return(n==null?void 0:n.skills)??[]}async function N5(){return await us(),[...yc]}async function v5(){await us();const e=await Xt.get(ti);return e?e.flatMap(t=>t.skills):[]}async function yN(e){await us();const t=await Xt.get(ti);if(!t)return null;for(const n of t){const i=n.skills.find(s=>s.id===e);if(i)return i}return null}async function k5(e){const t=await yN(e);return(t==null?void 0:t.content)??null}async function E5(e,t){var m;const i=await(await Ce(async()=>{const{default:f}=await import("./tool-windows-DWUG3k_L.js").then(h=>h.j);return{default:f}},__vite__mapDeps([0]),import.meta.url)).default.loadAsync(e);let s=null;const o=((m=i.file(/\.claude-plugin\/marketplace\.json$/))==null?void 0:m[0])||i.file("marketplace.json");if(o){const f=await o.async("text");s=JR(f)}const r=t||(s==null?void 0:s.name)||e.name.replace(/\.zip$/i,""),a=[],l=/(?:^|\/)(skills\/([^/]+)\/SKILL\.md)$/;for(const[f,h]of Object.entries(i.files)){if(h.dir)continue;const g=f.match(l);if(g){const b=g[2],x=await h.async("text"),y=new Map,w=f.substring(0,f.lastIndexOf("SKILL.md"));for(const[v,S]of Object.entries(i.files))if(!S.dir&&v.startsWith(w)&&v!==f){const k=v.substring(w.length);if(k.startsWith("references/")||k.startsWith("prompts/")){const N=await S.async("text");y.set(k,N)}}a.push({dirName:b,skillMdContent:x,references:y.size>0?y:void 0})}}if(a.length===0)throw new Error("ZIP 文件中未找到有效的 Skill(预期路径: skills/*/SKILL.md)");const u=n3(a,r,s),d={name:r,url:void 0,skills:u,metadata:s==null?void 0:s.metadata};return await yp(d),d}async function S5(e,t="custom"){const n=eN(e);if(!n)throw new Error("无法解析 SKILL.md 内容,请检查格式是否正确(需包含 YAML front matter)");const i={id:`${t}:${n.name}`,name:n.name,description:n.description,type:Jy,content:n.body,source:t};await us();const s=await Xt.get(ti),o=s&&Array.isArray(s)?[...s]:[];let r=o.find(l=>l.name===t);r||(r={name:t,skills:[],metadata:{description:"手动导入的 Skill"}},o.push(r));const a=r.skills.findIndex(l=>l.id===i.id);return a>=0?r.skills[a]=i:r.skills.push(i),await Xt.set(ti,o),await iu(o),i}async function T5(e){await yp(e)}async function iu(e){wp=e.map(n=>({name:n.name,url:n.url,skillCount:n.skills.length,metadata:n.metadata})),yc=[];for(const n of e)for(const i of n.skills)yc.push({id:i.id,name:i.name,description:i.description,source:i.source,sourceUrl:i.sourceUrl,category:i.category,outputType:i.outputType});const t=e.flatMap(n=>n.skills);Qy(t)}async function D5(){await Xt.remove(ti),wp=[],yc=[],Qy([]),em=!1}const NN={initialize:us,getPackages:x5,addPackage:yp,removePackage:w5,getSkillsByPackage:y5,getAllExternalSkillsMeta:N5,getAllExternalSkills:v5,getSkillById:yN,getSkillContentById:k5,importFromZip:E5,importFromPastedContent:S5,importFromBundle:T5,clearAll:D5},zu={id:Gl,name:"自动"},lb=xc.map(e=>({id:e.id,name:e.name,isSystem:!0})),_5=({value:e,onSelect:t,onAddSkill:n,disabled:i=!1})=>{const[s,o]=p.useState(!1),[r,a]=p.useState([]),[l,u]=p.useState([]),[d,m]=p.useState(""),[f,h]=p.useState(0),g=p.useRef(null),b=p.useRef(null),x=p.useCallback(async()=>{try{const V=(await pd.getAllDirectories()).find(M=>M.name==="Skill");if(!V)return;const _=await pd.getNoteMetasByDirectory(V.id),D=new Set(xc.map(M=>M.id)),C=_.filter(M=>!D.has(M.id)).map(M=>{var U;return{id:M.id,name:M.title,outputType:((U=M.metadata)==null?void 0:U.outputType)||void 0}});a(C)}catch{}},[]),y=p.useCallback(async()=>{try{const j=await NN.getAllExternalSkillsMeta(),V=new Set(xc.map(D=>D.id)),_=j.filter(D=>!V.has(D.id)).map(D=>({id:D.id,name:D.name,isExternal:!0,source:D.source,outputType:D.outputType}));u(_)}catch{}},[]);p.useEffect(()=>{if(s){x(),y(),m("");const V=[zu,...lb,...l,...r].findIndex(_=>_.id===e);h(V>=0?V:0),setTimeout(()=>{var _;return(_=b.current)==null?void 0:_.focus()},50)}},[s,e]),p.useEffect(()=>{if(s&&g.current){const j=g.current.children[f];j&&j.scrollIntoView({block:"nearest"})}},[f,s]);const w=p.useCallback(j=>{j.preventDefault(),!i&&o(V=>!V)},[i]),v=p.useCallback(j=>{t(j),o(!1)},[t]),S=p.useCallback(j=>{j.stopPropagation(),o(!1),n()},[n]),k=[zu,...lb,...l,...r],N=d.trim()?k.filter(j=>j.name.toLowerCase().includes(d.toLowerCase())||j.id.toLowerCase().includes(d.toLowerCase())):k,E=k.length>15,I=p.useCallback(j=>j==="Escape"?(o(!1),!0):j==="ArrowDown"?(h(V=>V<N.length-1?V+1:0),!0):j==="ArrowUp"?(h(V=>V>0?V-1:N.length-1),!0):j==="Enter"||j===" "||j==="Tab"?(f<N.length&&v(N[f].id),!0):!1,[f,N,v]),T=N.find(j=>j.id===e)||zu;return c.jsxDEV(Bc,{isOpen:s,setIsOpen:o,disabled:i,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:I,children:({containerRef:j,menuRef:V,portalPosition:_,handleTriggerKeyDown:D})=>c.jsxDEV("div",{className:"skill-dropdown",ref:j,children:[c.jsxDEV("button",{className:`skill-dropdown__trigger ${s?"skill-dropdown__trigger--open":""}`,onMouseDown:w,onKeyDown:D,disabled:i,type:"button",title:`Skill: ${T.name}`,children:[c.jsxDEV("span",{className:"skill-dropdown__icon-prefix",children:c.jsxDEV(pf,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:205,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:204,columnNumber:13},void 0),c.jsxDEV("span",{className:"skill-dropdown__label",children:T.name},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:207,columnNumber:13},void 0),c.jsxDEV(ko,{size:14,className:`skill-dropdown__chevron ${s?"skill-dropdown__chevron--open":""}`},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:208,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:196,columnNumber:11},void 0),s&&cs.createPortal(c.jsxDEV("div",{ref:V,className:`skill-dropdown__menu ${Yt}`,style:{position:"fixed",zIndex:Tn.DROPDOWN_PORTAL,left:_.left,bottom:window.innerHeight-_.top+8},onMouseDown:C=>C.stopPropagation(),onClick:C=>C.stopPropagation(),children:[c.jsxDEV("div",{className:"skill-dropdown__header",children:[c.jsxDEV(pf,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:228,columnNumber:19},void 0),c.jsxDEV("span",{children:"Skill"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:229,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:227,columnNumber:17},void 0),E&&c.jsxDEV("div",{className:"skill-dropdown__search",children:c.jsxDEV("input",{ref:b,type:"text",className:"skill-dropdown__search-input",placeholder:"搜索 Skill...",value:d,onChange:C=>{m(C.target.value),h(0)},onMouseDown:C=>C.stopPropagation(),onKeyDown:C=>C.stopPropagation()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:233,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:232,columnNumber:19},void 0),c.jsxDEV("div",{ref:g,className:"skill-dropdown__list",children:N.map((C,M)=>{const U=C.id===e,F=M===f;return c.jsxDEV("div",{className:`skill-dropdown__item ${U?"skill-dropdown__item--selected":""} ${F?"skill-dropdown__item--highlighted":""}`,onClick:()=>v(C.id),onMouseEnter:()=>h(M),children:[c.jsxDEV("span",{className:"skill-dropdown__item-label",children:C.name},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:259,columnNumber:25},void 0),C.outputType==="image"&&c.jsxDEV(Cc,{size:12,className:"skill-dropdown__item-image-icon"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:261,columnNumber:27},void 0),C.outputType==="video"&&c.jsxDEV(Pc,{size:12,className:"skill-dropdown__item-image-icon"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:264,columnNumber:27},void 0),C.outputType==="ppt"&&c.jsxDEV(d0,{size:12,className:"skill-dropdown__item-image-icon"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:267,columnNumber:27},void 0),C.isSystem&&c.jsxDEV("span",{className:"skill-dropdown__item-badge",children:"系统"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:270,columnNumber:27},void 0),C.isExternal&&c.jsxDEV("span",{className:"skill-dropdown__item-badge",children:"系统"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:273,columnNumber:27},void 0),U&&c.jsxDEV(Fc,{size:14,className:"skill-dropdown__item-check"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:276,columnNumber:27},void 0)]},C.id,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:253,columnNumber:23},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:248,columnNumber:17},void 0),c.jsxDEV("div",{className:"skill-dropdown__divider"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:282,columnNumber:17},void 0),c.jsxDEV("div",{className:"skill-dropdown__add-btn",onClick:S,onMouseDown:C=>C.preventDefault(),children:[c.jsxDEV(vS,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:288,columnNumber:19},void 0),c.jsxDEV("span",{children:"添加 Skill"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:289,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:283,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:215,columnNumber:15},void 0),document.body)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:195,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/SkillDropdown.tsx",lineNumber:187,columnNumber:5},void 0)};var Pi=(e=>(e.VIDEO="视频创作",e.IMAGE="图片生成",e.MINDMAP="思维导图",e.FLOWCHART="流程图",e.GRID="宫格图",e.SVG="SVG矢量图",e))(Pi||{});const Jr=3,cb=[{id:"grid-emoji",title:"智能拆分宫格图",description:"宫格图,风格统一",prompt:"生成16宫格猫咪表情包",category:Pi.GRID,imageUrl:"https://tuziphoto.codernote.club/aitu/gonggetu.jpg",badgeColor:"badge--grid"},{id:"flowchart-process",title:"业务流程图",description:"使用 Mermaid 语法生成清晰的流程图",prompt:"绘制一个用户注册登录的流程图,包含邮箱验证、密码校验、短信验证码、登录成功/失败等节点",category:Pi.FLOWCHART,imageUrl:"https://tuziphoto.codernote.club/aitu/liuchengtu.png",badgeColor:"badge--flowchart"},{id:"mindmap-project",title:"项目规划脑图",description:"快速生成结构化的思维导图,梳理项目计划",prompt:"创建一个关于「移动应用开发」的思维导图,包含需求分析、UI设计、前端开发、后端开发、测试上线等主要分支",category:Pi.MINDMAP,imageUrl:"https://tuziphoto.codernote.club/aitu/siweidaotu.png",badgeColor:"badge--mindmap"}],I5={[Pi.VIDEO]:{bg:"#fce7f3",text:"#be185d"},[Pi.IMAGE]:{bg:"#dbeafe",text:"#1d4ed8"},[Pi.MINDMAP]:{bg:"#dcfce7",text:"#15803d"},[Pi.FLOWCHART]:{bg:"#fef3c7",text:"#b45309"},[Pi.GRID]:{bg:"#f3e8ff",text:"#7c3aed"},[Pi.SVG]:{bg:"#e0e7ff",text:"#4338ca"}},C5=({template:e,onClick:t})=>{const n=I5[e.category],i=s=>{s.preventDefault()};return c.jsxDEV("div",{className:"inspiration-card",onMouseDown:i,onClick:t,"data-track":`inspiration_click_${e.id}`,children:[c.jsxDEV("div",{className:"inspiration-card__image-wrapper",children:[c.jsxDEV("img",{src:e.imageUrl,alt:e.title,className:"inspiration-card__image",loading:"lazy"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:29,columnNumber:9},void 0),c.jsxDEV("span",{className:"inspiration-card__badge",style:{backgroundColor:n.bg,color:n.text},children:e.category},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:37,columnNumber:9},void 0),c.jsxDEV("div",{className:"inspiration-card__hover-overlay",children:c.jsxDEV("div",{className:"inspiration-card__arrow",children:c.jsxDEV(kS,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:50,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:49,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:48,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:28,columnNumber:7},void 0),c.jsxDEV("div",{className:"inspiration-card__content",children:[c.jsxDEV("h3",{className:"inspiration-card__title",children:e.title},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:57,columnNumber:9},void 0),c.jsxDEV("p",{className:"inspiration-card__description",children:e.description},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:58,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:56,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationCard.tsx",lineNumber:21,columnNumber:5},void 0)},ub="aitu_hide_inspiration_board",j5=({isCanvasEmpty:e,onSelectPrompt:t,onOpenPromptTool:n,visible:i=!0,className:s=""})=>{const[o,r]=p.useState(0),[a,l]=p.useState(!1);p.useEffect(()=>{localStorage.getItem(ub)==="true"&&l(!0)},[]);const u=Math.ceil(cb.length/Jr),d=u>1,m=cb.slice(o*Jr,(o+1)*Jr),f=p.useCallback(x=>{x.preventDefault(),x.stopPropagation(),r(y=>(y-1+u)%u)},[u]),h=p.useCallback(x=>{x.preventDefault(),x.stopPropagation(),r(y=>(y+1)%u)},[u]),g=p.useCallback(x=>{t({prompt:x,modelType:"agent"})},[t]),b=p.useCallback(x=>{x.preventDefault(),x.stopPropagation(),l(!0),localStorage.setItem(ub,"true")},[]);return!e||!i||a?null:c.jsxDEV("div",{className:`inspiration-board ${s}`,children:[c.jsxDEV("div",{className:"inspiration-board__header",children:[c.jsxDEV("h3",{className:"inspiration-board__title",children:"灵感创意"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:83,columnNumber:9},void 0),c.jsxDEV("button",{className:"inspiration-board__hide-btn",onClick:b,onMouseDown:x=>x.preventDefault(),title:"不再提示","data-track":"inspiration_click_hide",children:[c.jsxDEV(jc,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:93,columnNumber:11},void 0),c.jsxDEV("span",{children:"不再提示"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:94,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:86,columnNumber:9},void 0),n&&c.jsxDEV("button",{className:"inspiration-board__prompt-btn",onClick:n,onMouseDown:x=>x.preventDefault(),title:"提示词工具","data-track":"inspiration_click_prompt_tool",children:[c.jsxDEV(nd,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:106,columnNumber:13},void 0),c.jsxDEV("span",{children:"提示词"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:107,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:99,columnNumber:11},void 0),d&&c.jsxDEV("div",{className:"inspiration-board__pagination",children:[c.jsxDEV("span",{className:"inspiration-board__page-indicator",children:[o+1," / ",u]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:113,columnNumber:13},void 0),c.jsxDEV("div",{className:"inspiration-board__nav-buttons",children:[c.jsxDEV("button",{className:"inspiration-board__nav-btn",onMouseDown:x=>x.preventDefault(),onClick:f,"aria-label":"上一页","data-track":"inspiration_click_prev",children:c.jsxDEV(bx,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:124,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:117,columnNumber:15},void 0),c.jsxDEV("button",{className:"inspiration-board__nav-btn",onMouseDown:x=>x.preventDefault(),onClick:h,"aria-label":"下一页","data-track":"inspiration_click_next",children:c.jsxDEV(sx,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:133,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:126,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:116,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:112,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:82,columnNumber:7},void 0),c.jsxDEV("div",{className:"inspiration-board__grid",children:[m.map(x=>c.jsxDEV(C5,{template:x,onClick:()=>g(x.prompt)},x.id,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:143,columnNumber:11},void 0)),m.length<Jr&&Array.from({length:Jr-m.length}).map((x,y)=>c.jsxDEV("div",{className:"inspiration-card inspiration-card--placeholder"},`placeholder-${y}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:153,columnNumber:13},void 0))]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:141,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/inspiration-board/InspirationBoard.tsx",lineNumber:78,columnNumber:5},void 0)},Ks=[{value:"image",label:"图片",icon:c.jsxDEV(Cc,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:17,columnNumber:40},void 0),zh:"图片",en:"Image"},{value:"video",label:"视频",icon:c.jsxDEV(Pc,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:18,columnNumber:40},void 0),zh:"视频",en:"Video"},{value:"audio",label:"音频",icon:c.jsxDEV(ES,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:19,columnNumber:40},void 0),zh:"音频",en:"Audio"},{value:"text",label:"文本",icon:c.jsxDEV(SS,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:20,columnNumber:39},void 0),zh:"文本",en:"Text"},{value:"agent",label:"Agent",icon:c.jsxDEV(TS,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:21,columnNumber:43},void 0),zh:"Agent",en:"Agent"}],P5=({value:e,onSelect:t,disabled:n=!1})=>{const[i,s]=p.useState(!1),{language:o}=We(),[r,a]=p.useState(0),l=p.useRef(null);p.useEffect(()=>{if(i){const h=Ks.findIndex(g=>g.value===e);a(h>=0?h:0)}},[i,e]),p.useEffect(()=>{if(i&&l.current){const h=l.current.children[r];h&&h.scrollIntoView({block:"nearest"})}},[r,i]);const u=p.useCallback(h=>{h.preventDefault(),!n&&s(g=>!g)},[n]),d=p.useCallback(h=>{t(h),s(!1)},[t]),m=p.useCallback(h=>h==="Escape"?(s(!1),!0):h==="ArrowDown"?(a(g=>g<Ks.length-1?g+1:0),!0):h==="ArrowUp"?(a(g=>g>0?g-1:Ks.length-1),!0):h==="Enter"||h===" "||h==="Tab"?(d(Ks[r].value),!0):!1,[r,d]),f=Ks.find(h=>h.value===e)||Ks[0];return c.jsxDEV(Bc,{isOpen:i,setIsOpen:s,disabled:n,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:m,children:({containerRef:h,menuRef:g,portalPosition:b,handleTriggerKeyDown:x})=>c.jsxDEV("div",{className:"generation-type-dropdown",ref:h,children:[c.jsxDEV("button",{className:`generation-type-dropdown__trigger ${i?"generation-type-dropdown__trigger--open":""}`,onMouseDown:u,onKeyDown:x,disabled:n,type:"button",title:`${o==="zh"?"生成类型":"Type"}: ${o==="zh"?f.zh:f.en} (↑↓ Tab)`,children:[c.jsxDEV("span",{className:"generation-type-dropdown__icon-prefix",children:f.icon},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:107,columnNumber:13},void 0),c.jsxDEV("span",{className:"generation-type-dropdown__label",children:o==="zh"?f.zh:f.en},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:108,columnNumber:13},void 0),c.jsxDEV(ko,{size:14,className:`generation-type-dropdown__chevron ${i?"generation-type-dropdown__chevron--open":""}`},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:111,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:99,columnNumber:11},void 0),i&&cs.createPortal(c.jsxDEV("div",{ref:g,className:`generation-type-dropdown__menu ${Yt}`,style:{position:"fixed",zIndex:Tn.DROPDOWN_PORTAL,left:b.left,bottom:window.innerHeight-b.top+8},onMouseDown:y=>y.stopPropagation(),onClick:y=>y.stopPropagation(),children:[c.jsxDEV("div",{className:"generation-type-dropdown__header",children:[c.jsxDEV(Cm,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:127,columnNumber:17},void 0),c.jsxDEV("span",{children:o==="zh"?"生成类型 (↑↓ Tab)":"Generation type (↑↓ Tab)"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:128,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:126,columnNumber:15},void 0),c.jsxDEV("div",{ref:l,className:"generation-type-dropdown__list",children:Ks.map((y,w)=>{const v=y.value===e,S=w===r;return c.jsxDEV("div",{className:`generation-type-dropdown__item ${v?"generation-type-dropdown__item--selected":""} ${S?"generation-type-dropdown__item--highlighted":""}`,onClick:()=>d(y.value),onMouseEnter:()=>a(w),children:[c.jsxDEV("span",{className:"generation-type-dropdown__item-icon",children:y.icon},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:141,columnNumber:23},void 0),c.jsxDEV("span",{className:"generation-type-dropdown__item-label",children:o==="zh"?y.zh:y.en},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:142,columnNumber:23},void 0),v&&c.jsxDEV(Fc,{size:14,className:"generation-type-dropdown__item-check"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:145,columnNumber:38},void 0)]},y.value,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:135,columnNumber:21},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:130,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:114,columnNumber:13},void 0),document.body)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:98,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/GenerationTypeDropdown.tsx",lineNumber:90,columnNumber:5},void 0)},Qr=[1,2,3,4,5,10,20],A5=({value:e,onSelect:t,disabled:n=!1,isOpen:i,onOpenChange:s})=>{const{value:o,setValue:r}=mx({controlledValue:i,defaultValue:!1,onChange:s}),{language:a}=We(),[l,u]=p.useState(0),d=p.useRef(null);p.useEffect(()=>{if(o){const g=Qr.indexOf(e);u(g>=0?g:0)}},[o,e]),p.useEffect(()=>{if(o&&d.current){const g=d.current.children[l];g&&g.scrollIntoView({block:"nearest"})}},[l,o]);const m=p.useCallback(g=>{g.preventDefault(),!n&&r(!o)},[n,o,r]),f=p.useCallback(g=>{t(g),r(!1)},[t]),h=p.useCallback(g=>g==="Escape"?(r(!1),!0):g==="ArrowDown"?(u(b=>b<Qr.length-1?b+1:0),!0):g==="ArrowUp"?(u(b=>b>0?b-1:Qr.length-1),!0):g==="Enter"||g===" "||g==="Tab"?(f(Qr[l]),!0):!1,[l,f]);return c.jsxDEV(Bc,{isOpen:o,setIsOpen:r,disabled:n,openKeys:["Enter"," ","ArrowDown","ArrowUp"],onOpenKey:h,children:({containerRef:g,menuRef:b,portalPosition:x,handleTriggerKeyDown:y})=>c.jsxDEV("div",{className:"count-dropdown",ref:g,children:[c.jsxDEV("button",{className:`count-dropdown__trigger ${o?"count-dropdown__trigger--open":""}`,onMouseDown:m,onKeyDown:y,disabled:n,type:"button",title:`${a==="zh"?"生成数量":"Count"}: ${e} (↑↓ Tab)`,children:[c.jsxDEV("span",{className:"count-dropdown__label",children:[e,a==="zh"?"个":""]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:110,columnNumber:13},void 0),c.jsxDEV(ko,{size:14,className:`count-dropdown__chevron ${o?"count-dropdown__chevron--open":""}`},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:113,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:102,columnNumber:11},void 0),o&&cs.createPortal(c.jsxDEV("div",{ref:b,className:`count-dropdown__menu ${Yt}`,style:{position:"fixed",zIndex:Tn.DROPDOWN_PORTAL,left:x.left,bottom:window.innerHeight-x.top+8},onMouseDown:w=>w.stopPropagation(),onClick:w=>w.stopPropagation(),children:[c.jsxDEV("div",{className:"count-dropdown__header",children:c.jsxDEV("span",{children:a==="zh"?"生成数量 (↑↓ Tab)":"Count (↑↓ Tab)"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:129,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:128,columnNumber:15},void 0),c.jsxDEV("div",{ref:d,className:"count-dropdown__list",children:Qr.map((w,v)=>{const S=w===e,k=v===l;return c.jsxDEV("div",{className:`count-dropdown__item ${S?"count-dropdown__item--selected":""} ${k?"count-dropdown__item--highlighted":""}`,onClick:()=>f(w),onMouseEnter:()=>u(v),children:[c.jsxDEV("span",{className:"count-dropdown__item-label",children:[w,a==="zh"?"个":w>1?" items":" item"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:142,columnNumber:23},void 0),S&&c.jsxDEV(Fc,{size:14,className:"count-dropdown__item-check"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:145,columnNumber:38},void 0)]},w,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:136,columnNumber:21},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:131,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:116,columnNumber:13},void 0),document.body)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:101,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/CountDropdown.tsx",lineNumber:93,columnNumber:5},void 0)};function Np(e,t){return t!=null&&t.profileId?`${t.profileId}::${e}`:e}function vN(e){return e.selectionKey||(e.sourceProfileId?`${e.sourceProfileId}::${e.id}`:e.id)}function db(e){return e?ei(e.sourceProfileId||null,e.id):null}function Nc(e,t,n){if(!t)return;const i=Np(t,n),s=(n==null?void 0:n.profileId)||null;return e.find(o=>vN(o)===i)||e.find(o=>o.id===t&&(o.sourceProfileId||null)===s)||(s===null?e.find(o=>o.id===t&&!o.sourceProfileId):void 0)||e.find(o=>o.id===t)}const mb=(e,t,n)=>{const i=n==="image"?{isGenerating:e,imageLoading:t}:{isGenerating:e,videoLoading:t};window.dispatchEvent(new CustomEvent("ai-generation-state-change",{detail:i}))},Bz=(e,t,n)=>{p.useEffect(()=>{const i=s=>{(s.metaKey||s.ctrlKey)&&s.key==="Enter"&&(s.preventDefault(),!e&&t.trim()&&n())};return document.addEventListener("keydown",i),()=>{document.removeEventListener("keydown",i)}},[e,t,n])},Fz=e=>{const[t,n]=p.useState(!1),[i,s]=p.useState(!1),o=p.useCallback(a=>{n(a),mb(a,i,e)},[i,e]),r=p.useCallback(a=>{s(a),mb(t,a,e)},[t,e]);return{isGenerating:t,isLoading:i,updateIsGenerating:o,updateIsLoading:r}},Gz=(e,t,n)=>t==="image"?e==="zh"?"一只可爱的小猫坐在窗台上,阳光透过窗户洒在它的毛发上,背景是温馨的家居环境":"A cute kitten sitting on a windowsill, with sunlight streaming through the window onto its fur, with a cozy home environment in the background":n==="sora"?e==="zh"?"描述视频内容,输入 @ 可引用已创建的角色,如 @username 在海边漫步...":"Describe video content, type @ to reference created characters, e.g. @username walking on the beach...":e==="zh"?"生成一个美丽的日出场景,阳光从山峰后缓缓升起,云朵轻柔地飘动":"Generate a beautiful sunrise scene where the sun slowly rises from behind mountains with clouds gently floating",M5=({originalPrompt:e,optimizationRequirements:t,language:n,type:i,mode:s="polish"})=>{const o=e.trim(),r=(t==null?void 0:t.trim())||"",a=n==="zh"?i==="image"?"图片生成":"视频生成":i==="image"?"image generation":"video generation",l=n==="zh"?i==="image"?"重点补足主体、构图、风格、光线、材质与画面细节。":"重点补足主体动作、镜头语言、运镜、时序、转场与画面连续性。":i==="image"?"Improve subject detail, composition, style, lighting, materials, and visual detail.":"Improve subject motion, camera language, camera movement, timing, transitions, and continuity.";return s==="structured"?n==="zh"?[`你是一名专业的${a}结构化提示词设计师。`,"请把原始需求整理成适合复杂场景生成的 JSON 结构化提示词。","","目标:","1. 保留用户原始意图,不要擅自改题。","2. 将复杂场景拆解为稳定、可复用、可继续编辑的结构字段。","3. 如果原文中有明确的布局、数量、标题、区域、主体、材质、风格、时间线、图例、标注等信息,尽量显式结构化。",`4. ${l}`,"5. 只输出一个合法 JSON 对象,不要解释、不要标题、不要 Markdown 代码块。","","JSON 结构要求:","1. 顶层优先包含这些键:type、instruction、style、layout。","2. style 是对象,放背景、主体风格、材质、镜头或质感等。","3. layout 是对象,放标题、分区、数量、位置、图例、时间轴、主体布局等。","4. 对复杂主体区域,优先使用 centerpiece、focal_point、sections、annotations、timeline、legends 等语义化字段。","5. 数量必须用数字,枚举信息尽量使用数组。","6. 不确定的扩展项可以补充 defaults、constraints、notes,但保持简洁。","7. 如果用户已经给了某种 JSON 雏形,要在其基础上补全,而不是完全推翻重写。","","输出风格要求:","1. value 尽量写成可直接给生图/生视频模型使用的短句或短段落。","2. 字段命名保持英文 snake_case 或 lowerCamelCase 二选一,但同一份 JSON 内保持一致。","3. 内容语言尽量与原始提示词一致。","","【原始提示词】",o,"","【补充要求】",r||"将其整理成适合复杂结构场景的 JSON 提示词,便于后续继续扩写与复用。"].join(`
|
|
546
|
+
`):[`You are a professional ${a} prompt architect for structured prompts.`,"Transform the original request into a JSON-based structured prompt for complex scenes.","","Goals:","1. Preserve the original intent without changing the subject.","2. Decompose the scene into stable, reusable, and editable fields.","3. Explicitly structure layout, counts, titles, regions, subjects, materials, style, timeline, legends, labels, and annotations whenever present.",`4. ${l}`,"5. Output exactly one valid JSON object. No explanation, no title, no Markdown code fence.","","JSON structure rules:","1. Prefer these top-level keys: type, instruction, style, layout.","2. style should be an object for background, subject style, materials, camera, rendering, or texture.","3. layout should be an object for title, sections, counts, positions, legends, timelines, and composition.","4. For the main subject area, prefer semantic fields such as centerpiece, focal_point, sections, annotations, timeline, or legends.","5. Use numbers for counts and arrays for enumerations whenever possible.","6. Add defaults, constraints, or notes only when useful, and keep them concise.","7. If the user already provided a JSON draft, extend and normalize it instead of replacing it entirely.","","Output style rules:","1. Values should be concise and directly usable for downstream generation.","2. Use either snake_case or lowerCamelCase field names, but stay consistent within the same JSON.","3. Keep the language aligned with the original prompt as much as possible.","","[Original Prompt]",o,"","[Additional Requirements]",r||"Restructure it into a reusable JSON prompt for a complex visual scene."].join(`
|
|
547
|
+
`):n==="zh"?[`你是一名专业的${a}提示词优化助手。`,"请基于原始提示词和优化要求,输出一版可直接用于生成的最终提示词。","","要求:","1. 保持原始提示词的核心意图,不要偏题。","2. 优先满足优化要求;如果优化要求为空,仅做必要润色与结构优化。","3. 保持与原始提示词相同的语言风格;原文中英混合时,尽量沿用原表达。","4. 如果原始提示词已经较完整,只做轻量优化,避免无意义堆砌。",`5. ${l}`,"6. 只输出最终优化后的提示词,不要解释、不要加标题、不要用代码块。","","【原始提示词】",o,"","【优化要求】",r||"无,做通顺、准确、可执行的轻量优化。"].join(`
|
|
548
|
+
`):[`You are a professional ${a} prompt optimizer.`,"Based on the original prompt and refinement requirements, output one final prompt that can be used directly.","","Requirements:","1. Preserve the core intent of the original prompt.","2. Prioritize the refinement requirements; if they are empty, only do light polishing and restructuring.","3. Keep the same language style as the original prompt. If the original is mixed-language, preserve that style when possible.","4. If the original prompt is already detailed, only refine lightly and avoid unnecessary expansion.",`5. ${l}`,"6. Output only the final optimized prompt. No explanation, no title, no code block.","","[Original Prompt]",o,"","[Refinement Requirements]",r||"None. Apply light polishing for clarity and execution quality."].join(`
|
|
549
|
+
`)},V5=e=>{const t=e.trim(),n=t.match(/^```[\w-]*\n?([\s\S]*?)\n?```$/);return n?n[1].trim():t},U5=({open:e,onOpenChange:t,originalPrompt:n,language:i,type:s,onApply:o,allowStructuredMode:r=!1,defaultMode:a="polish"})=>{var D;const[l,u]=p.useState(""),[d,m]=p.useState(a),[f,h]=p.useState(!1),g=p.useRef(null),b=Bo("text"),x=ji("text"),y=x.modelId||((D=b[0])==null?void 0:D.id)||"",w=ei(x.profileId,x.modelId)||(y?ei(null,y):null),[v,S]=p.useState(y),[k,N]=p.useState(w),E=p.useMemo(()=>{if(Nc(b,v,k)||!v)return b;const M=oo("text",v,k);return M?[M,...b]:b},[v,k,b]),I=p.useCallback(()=>{var A;const C=ji("text"),M=ei(C.profileId,C.modelId),U=Nc(b,C.modelId,M)||oo("text",C.modelId,M),F=(U==null?void 0:U.id)||C.modelId||((A=b[0])==null?void 0:A.id)||"",$=db(U)||M||(F?ei(null,F):null);S(F),N($)},[b]),T=p.useCallback(()=>{var C;(C=g.current)==null||C.abort(),g.current=null,h(!1),u(""),m(a),t(!1)},[a,t]),j=p.useCallback(async()=>{var U;const C=n.trim();if(!C){pe.warning(i==="zh"?"请先输入提示词":"Please enter a prompt first");return}const M=new AbortController;(U=g.current)==null||U.abort(),g.current=M,h(!0);try{const F=V5((await ss.getFallbackExecutor().generateText({prompt:M5({originalPrompt:C,optimizationRequirements:l,language:i,type:s,mode:d}),model:v||void 0,modelRef:k},{signal:M.signal})).content);if(!F)throw new Error("Empty optimized prompt");o(F),pe.success(i==="zh"?d==="structured"?"结构化提示词已生成":"提示词优化完成":d==="structured"?"Structured prompt generated":"Prompt optimized"),u(""),m(a),t(!1)}catch(F){if(M.signal.aborted)return;console.error("[PromptOptimizeDialog] Failed to optimize prompt:",F),pe.error(i==="zh"?d==="structured"?"结构化提示词生成失败,请稍后重试":"提示词优化失败,请稍后重试":d==="structured"?"Failed to generate structured prompt, please try again later":"Failed to optimize prompt, please try again later")}finally{g.current===M&&(g.current=null),h(!1)}},[a,i,d,o,t,v,k,n,l,s]);p.useEffect(()=>{e&&(I(),u(""),m(a))},[a,e,I]),p.useEffect(()=>()=>{var C;(C=g.current)==null||C.abort(),g.current=null},[]);const V=i==="zh"?d==="structured"?"把复杂场景整理成可复用的 JSON 结构化提示词,结果会直接回填输入框。":"输入优化方向,选择文本模型,优化后会直接回填当前提示词。":d==="structured"?"Turn complex scenes into reusable JSON structured prompts and fill the result back into the current field.":"Describe how to refine the prompt and the optimized result will fill back into the current field.",_=i==="zh"?d==="structured"?"例如:突出时间轴结构、把区域与数量拆开、保留标题与图例、输出 JSON 不要解释...":"例如:更电影感、补充镜头语言、减少冗余、强调主体与光线...":d==="structured"?"For example: emphasize timeline structure, split regions and counts, preserve titles and legends, output JSON only...":"For example: make it more cinematic, add camera language, reduce redundancy, emphasize subject and lighting...";return c.jsxDEV(DS,{open:e,onOpenChange:C=>!C&&T(),children:c.jsxDEV(_S,{className:"Dialog prompt-optimize-dialog",children:[c.jsxDEV("div",{className:"prompt-optimize-dialog__header",children:[c.jsxDEV("div",{className:"prompt-optimize-dialog__headline",children:[c.jsxDEV(IS,{className:"prompt-optimize-dialog__title",children:i==="zh"?d==="structured"?"结构化提示词":"优化提示词":d==="structured"?"Structured Prompt":"Optimize Prompt"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:237,columnNumber:13},void 0),c.jsxDEV(CS,{className:"prompt-optimize-dialog__description",children:V},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:246,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:236,columnNumber:11},void 0),c.jsxDEV("button",{type:"button",className:"prompt-optimize-dialog__close",onClick:T,"aria-label":i==="zh"?"关闭":"Close",children:c.jsxDEV(jc,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:256,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:250,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:235,columnNumber:9},void 0),c.jsxDEV("div",{className:"prompt-optimize-dialog__body",children:[r&&c.jsxDEV("div",{className:"prompt-optimize-dialog__section",children:[c.jsxDEV("span",{className:"prompt-optimize-dialog__label",children:i==="zh"?"输出模式":"Output Mode"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:263,columnNumber:15},void 0),c.jsxDEV("div",{className:"prompt-optimize-dialog__mode-switch",children:[c.jsxDEV("button",{type:"button",className:`prompt-optimize-dialog__mode-btn ${d==="polish"?"prompt-optimize-dialog__mode-btn--active":""}`,onClick:()=>m("polish"),disabled:f,children:[c.jsxDEV(Cm,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:277,columnNumber:19},void 0),c.jsxDEV("span",{children:i==="zh"?"普通润色":"Polish"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:278,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:267,columnNumber:17},void 0),c.jsxDEV("button",{type:"button",className:`prompt-optimize-dialog__mode-btn ${d==="structured"?"prompt-optimize-dialog__mode-btn--active":""}`,onClick:()=>m("structured"),disabled:f,children:c.jsxDEV("span",{children:i==="zh"?"结构化 JSON":"Structured JSON"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:290,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:280,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:266,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:262,columnNumber:13},void 0),c.jsxDEV("div",{className:"prompt-optimize-dialog__section",children:[c.jsxDEV("span",{className:"prompt-optimize-dialog__label",children:i==="zh"?"当前提示词":"Current Prompt"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:297,columnNumber:13},void 0),c.jsxDEV("div",{className:"prompt-optimize-dialog__source",children:n.trim()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:300,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:296,columnNumber:11},void 0),c.jsxDEV("div",{className:"prompt-optimize-dialog__section",children:[c.jsxDEV("label",{className:"prompt-optimize-dialog__label",htmlFor:`prompt-optimize-requirements-${s}`,children:i==="zh"?"补充要求":"Additional Requirements"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:306,columnNumber:13},void 0),c.jsxDEV("textarea",{id:`prompt-optimize-requirements-${s}`,className:"prompt-optimize-dialog__textarea",value:l,onChange:C=>u(C.target.value),placeholder:_,rows:4,disabled:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:312,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:305,columnNumber:11},void 0),c.jsxDEV("div",{className:"prompt-optimize-dialog__section",children:[c.jsxDEV("span",{className:"prompt-optimize-dialog__label",children:i==="zh"?"文本模型":"Text Model"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:324,columnNumber:13},void 0),c.jsxDEV("div",{className:"prompt-optimize-dialog__model",children:c.jsxDEV(xx,{variant:"form",selectedModel:v,selectedSelectionKey:Np(v,k),onSelect:(C,M)=>{S(C),N(M||null)},onSelectModel:C=>{S(C.id),N(db(C))},language:i,models:E,placement:"down",disabled:f,placeholder:i==="zh"?"选择文本模型":"Select text model"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:328,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:327,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:323,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:260,columnNumber:9},void 0),c.jsxDEV("div",{className:"prompt-optimize-dialog__footer",children:[c.jsxDEV("button",{type:"button",className:"prompt-optimize-dialog__footer-btn prompt-optimize-dialog__footer-btn--secondary",onClick:T,disabled:f,children:i==="zh"?"取消":"Cancel"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:358,columnNumber:11},void 0),c.jsxDEV("button",{type:"button",className:"prompt-optimize-dialog__footer-btn prompt-optimize-dialog__footer-btn--primary",onClick:()=>void j(),disabled:f||!n.trim(),children:i==="zh"?f?d==="structured"?"生成中...":"优化中...":d==="structured"?"生成结构化提示词":"开始优化":f?d==="structured"?"Generating...":"Optimizing...":d==="structured"?"Generate Structured Prompt":"Optimize"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:366,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:357,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:234,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/shared/PromptOptimizeDialog.tsx",lineNumber:233,columnNumber:5},void 0)},kN=["right","bottom","left","top"],Tl=4;function R5(e,t,n,i,s=32){const o=i<=2?i:i<=4?2:3,r=Math.floor(n/o),a=n%o;return[e[0]+a*(t.width+s),e[1]+r*(t.height+s)]}function EN(e,t){const{ignoreElementIds:n=[],ignoreTypes:i=["workzone"],extraOccupiedRects:s=[]}=t;return[...e.children.filter(q5).filter(o=>!i.includes(o.type??"")&&!n.includes(o.id??"")).map(o=>({...Ae.getRectangleByPoints(o.points),id:o.id,type:o.type})),...s]}function q5(e){return typeof e=="object"&&e!==null&&Array.isArray(e.points)&&e.points.length===2}function SN(e,t,n){return e.x<t.x+t.width+n&&e.x+e.width+n>t.x&&e.y<t.y+t.height+n&&e.y+e.height+n>t.y}function L5(e,t,n,i){const s=[e];for(let o=1;o<=i;o+=1)s.push([e[0]+t*o,e[1]],[e[0],e[1]+n*o],[e[0]+t*o,e[1]+n*o],[e[0]-t*o,e[1]],[e[0]-t*o,e[1]+n*o],[e[0],e[1]-n*o],[e[0]+t*o,e[1]-n*o],[e[0]-t*o,e[1]-n*o]);return s}function O5(e,t,n,i,s){const o=Math.max(s,32),r=Math.max(Math.round(Math.min(t.width,t.height)*.16),28),a=Math.max(Math.round(Math.min(t.width,t.height)*.12),18),l=t.width+r,u=t.height+r,d=[];for(let m=0;m<n;m+=1){const f=Math.floor(m/Tl),h=m%Tl,g=Math.min(Tl,n-f*Tl),b=h-(g-1)/2,x=e.x+e.width/2-t.width/2,y=e.y+e.height/2-t.height/2,w=Math.abs(b)*a;let v=x,S=y;switch(i){case"right":v=e.x+e.width+o+f*l+w,S=y+b*(t.height+r);break;case"left":v=e.x-o-t.width-f*l-w,S=y+b*(t.height+r);break;case"top":v=x+b*(t.width+r),S=e.y-o-t.height-f*u-w;break;case"bottom":default:v=x+b*(t.width+r),S=e.y+e.height+o+f*u+w;break}d.push([Math.round(v),Math.round(S)])}return d}function pb(e,t,n,i,s){return e.reduce((r,a)=>{const l={x:a[0],y:a[1],width:t.width,height:t.height};return r+n.filter(u=>SN(l,u,i)).length},0)*1e3+kN.indexOf(s)*10}function z5(e,t,n,i,s){var u;const{gap:o=40,padding:r=16}=s,a=EN(e,s),l=kN.map(d=>({side:d,positions:O5(t,n,i,d,o)}));return l.sort((d,m)=>pb(d.positions,n,a,r,d.side)-pb(m.positions,n,a,r,m.side)),((u=l[0])==null?void 0:u.positions)??[]}function B5(e,t,n,i,s={}){const{frameRect:o,extraOccupiedRects:r=[],...a}=s,l={...a,extraOccupiedRects:r},u=o?z5(e,o,n,i,l):Array.from({length:i},(m,f)=>R5(t,n,f,i,l.gap)),d=[...r];return u.map(m=>{const f=F5(e,m,n,{...l,extraOccupiedRects:d});return d.push({x:f[0],y:f[1],width:n.width,height:n.height}),f})}function F5(e,t,n,i={}){const{gap:s=40,padding:o=16,maxSearchRadius:r=6}=i,a=EN(e,i),l=n.width+s,u=n.height+s,d=L5(t,l,u,r);for(const m of d){const f={x:m[0],y:m[1],width:n.width,height:n.height};if(!a.some(g=>SN(f,g,o)))return m}return[t[0],t[1]+u*(r+1)]}const xs=jS.WORKFLOWS;class G5{async isAvailable(){try{return(await ff()).objectStoreNames.contains(xs)}catch{return!1}}async getDB(){return ff()}async saveWorkflow(t){try{const n=await this.getDB();if(!n.objectStoreNames.contains(xs))return;await new Promise((i,s)=>{const a=n.transaction(xs,"readwrite").objectStore(xs).put(t);a.onerror=()=>{i()},a.onsuccess=()=>i()})}catch{}}async getWorkflow(t){if(!t)return null;const n=await this.getDB();return new Promise((i,s)=>{const a=n.transaction(xs,"readonly").objectStore(xs).get(t);a.onerror=()=>s(a.error),a.onsuccess=()=>i(a.result||null)})}async deleteWorkflow(t){if(!t)return;const n=await this.getDB();return new Promise((i,s)=>{const a=n.transaction(xs,"readwrite").objectStore(xs).delete(t);a.onerror=()=>s(a.error),a.onsuccess=()=>i()})}close(){}}const Yn=new G5;function H5(e){const t=e.steps.find(n=>n.status==="failed");return(t==null?void 0:t.error)||"Unknown error"}function W5(e){return e.steps.filter(t=>t.status!=="pending"?!1:t.dependsOn&&t.dependsOn.length>0?t.dependsOn.every(n=>{const i=e.steps.find(s=>s.id===n);return(i==null?void 0:i.status)==="completed"}):!0)}async function $5(e,t={}){var d,m;const n={prompt:e,...t},i=wx(n,jn.IMAGE);if(!i.valid)throw new Error(i.errors.join(", "));const s=yx(n);if(await Nx.waitForInitialization(),!tc("image",t.modelRef||t.model))throw new Error("未配置 API Key,请在设置中配置");const o=vx(),r=Date.now();await kx.createTask(o,"image",{prompt:s.prompt,model:t.model,modelRef:t.modelRef||null,size:t.size}),ft.trackExternalTask({id:o,type:jn.IMAGE,status:mn.PROCESSING,params:{prompt:s.prompt,model:t.model,modelRef:t.modelRef||null,size:t.size},createdAt:r,updatedAt:r,startedAt:r,executionPhase:Ex.SUBMITTING}),(d=t.onTaskCreated)==null||d.call(t,o);const a={taskId:o,prompt:s.prompt,model:t.model,modelRef:t.modelRef||null,size:t.size,quality:t.quality,referenceImages:t.referenceImages,uploadedImages:t.uploadedImages,count:t.count,params:t.params};await(t.forceMainThread?ss.getFallbackExecutor():await ss.getExecutor()).generateImage(a,{signal:t.signal});const u=await Sx(o,{signal:t.signal,onProgress:f=>{ft.syncTaskFromStorage(o,f)}});return!u.success||!u.task?{task:u.task||{id:o,type:jn.IMAGE,status:mn.FAILED,params:{prompt:e},createdAt:Date.now(),updatedAt:Date.now(),error:{code:"GENERATION_ERROR",message:u.error||"图片生成失败"}}}:{task:u.task,url:(m=u.task.result)==null?void 0:m.url}}async function X5(e,t={}){var d,m,f;const n={prompt:e,...t},i=wx(n,jn.VIDEO);if(!i.valid)throw new Error(i.errors.join(", "));const s=yx(n);if(await Nx.waitForInitialization(),!tc("video",t.modelRef||t.model))throw new Error("未配置 API Key,请在设置中配置");const o=vx(),r=Date.now();await kx.createTask(o,"video",{prompt:s.prompt,model:t.model||"veo3",modelRef:t.modelRef||null,duration:typeof t.duration=="string"?parseInt(t.duration,10):t.duration,size:t.size,params:t.params}),ft.trackExternalTask({id:o,type:jn.VIDEO,status:mn.PROCESSING,params:{prompt:s.prompt,model:t.model||"veo3",modelRef:t.modelRef||null,size:t.size,params:t.params},createdAt:r,updatedAt:r,startedAt:r,executionPhase:Ex.SUBMITTING,progress:0}),(d=t.onTaskCreated)==null||d.call(t,o);const a={taskId:o,prompt:s.prompt,model:t.model||"veo3",modelRef:t.modelRef||null,duration:(m=t.duration)==null?void 0:m.toString(),size:t.size||"1280x720",inputReference:t.inputReference,inputReferences:t.inputReferences,referenceImages:t.referenceImages,params:t.params};await(t.forceMainThread?ss.getFallbackExecutor():await ss.getExecutor()).generateVideo(a,{signal:t.signal});const u=await Sx(o,{signal:t.signal,onProgress:h=>{ft.syncTaskFromStorage(o,h)}});return!u.success||!u.task?{task:u.task||{id:o,type:jn.VIDEO,status:mn.FAILED,params:{prompt:e},createdAt:Date.now(),updatedAt:Date.now(),error:{code:"GENERATION_ERROR",message:u.error||"视频生成失败"}}}:{task:u.task,url:(f=u.task.result)==null?void 0:f.url}}class fb{constructor(t={}){this.workflows=new Map,this.abortControllers=new Map,this.events$=new Tx,this.options={stepTimeout:t.stepTimeout??600*1e3,continueOnError:t.continueOnError??!1,onEvent:t.onEvent??(()=>{}),executeMainThreadTool:t.executeMainThreadTool,forceFallbackExecutor:t.forceFallbackExecutor??!1},this.events$.subscribe(n=>{this.options.onEvent(n)})}async submitWorkflow(t){console.log("[WorkflowEngine] submitWorkflow 入口, id:",t.id,"steps:",t.steps.length),this.workflows.set(t.id,t);try{await Yn.saveWorkflow(t),console.log("[WorkflowEngine] submitWorkflow: IDB 保存完成")}catch(i){console.warn("[WorkflowEngine] submitWorkflow: IDB 保存失败,继续执行:",i)}const n=new AbortController;this.abortControllers.set(t.id,n),console.log("[WorkflowEngine] submitWorkflow: 开始异步执行工作流"),this.executeWorkflow(t.id).catch(i=>{console.error(`[WorkflowEngine] Workflow ${t.id} execution error:`,i)})}async cancelWorkflow(t){const n=this.workflows.get(t);if(!n)return;const i=this.abortControllers.get(t);i==null||i.abort(),n.status="cancelled",n.updatedAt=Date.now(),await Yn.saveWorkflow(n),this.emitEvent({type:"status",workflowId:t,status:"cancelled"})}getWorkflow(t){return this.workflows.get(t)}async resumeWorkflow(t){if(this.workflows.has(t))return;const n=await Yn.getWorkflow(t);if(!n)return;const i=n.steps.some(a=>a.status==="pending"),s=n.steps.some(a=>a.status==="running"),o=n.steps.some(a=>a.status==="pending_main_thread");if(!i&&!s&&!o)return;n.steps.forEach(a=>{a.status==="running"&&(a.status="pending")}),this.workflows.set(t,n);const r=new AbortController;this.abortControllers.set(t,r),this.executeWorkflow(t).catch(a=>{console.error("[WorkflowEngine] Resume workflow failed:",t,a)})}async executeWorkflow(t){console.log("[WorkflowEngine] executeWorkflow 开始, id:",t);const n=this.workflows.get(t);if(!n){console.warn("[WorkflowEngine] executeWorkflow: 工作流不存在:",t);return}const i=this.abortControllers.get(t);try{n.status="running",n.updatedAt=Date.now();try{await Yn.saveWorkflow(n)}catch(r){console.warn("[WorkflowEngine] executeWorkflow: IDB 保存失败,继续:",r)}console.log("[WorkflowEngine] executeWorkflow: 状态已更新为 running"),this.emitEvent({type:"status",workflowId:t,status:"running"}),await this.executeSteps(n,i==null?void 0:i.signal);const s=n.steps.every(r=>r.status==="completed"||r.status==="skipped");n.steps.some(r=>r.status==="failed")&&!this.options.continueOnError?(n.status="failed",n.error=H5(n)):s&&(n.status="completed",n.completedAt=Date.now()),n.updatedAt=Date.now(),await Yn.saveWorkflow(n),n.status==="completed"?this.emitEvent({type:"completed",workflowId:t,workflow:n}):n.status==="failed"&&this.emitEvent({type:"failed",workflowId:t,error:n.error||"Unknown error"})}catch(s){n.status="failed",n.error=s.message||"Workflow execution failed",n.updatedAt=Date.now(),await Yn.saveWorkflow(n),this.emitEvent({type:"failed",workflowId:t,error:n.error||"Workflow execution failed"})}finally{this.abortControllers.delete(t)}}async executeSteps(t,n){for(;;){if(n!=null&&n.aborted)throw new Error("Workflow cancelled");const i=W5(t);if(i.length===0)break;await Promise.all(i.map(s=>this.executeStep(t,s,n)))}}async executeStep(t,n,i){console.log("[WorkflowEngine] executeStep 开始:",n.mcp,"stepId:",n.id);const s=Date.now();n.status="running",t.updatedAt=Date.now(),await Yn.saveWorkflow(t),this.emitEvent({type:"step",workflowId:t.id,stepId:n.id,status:"running"});try{await this.executeToolStep(t,n,i),n.status="completed",n.duration=Date.now()-s,t.updatedAt=Date.now(),await Yn.saveWorkflow(t),this.emitEvent({type:"step",workflowId:t.id,stepId:n.id,status:"completed",result:n.result,duration:n.duration})}catch(o){if(n.status="failed",n.error=o.message||"Step execution failed",n.duration=Date.now()-s,t.updatedAt=Date.now(),await Yn.saveWorkflow(t),this.emitEvent({type:"step",workflowId:t.id,stepId:n.id,status:"failed",error:n.error,duration:n.duration}),!this.options.continueOnError)throw o}}async executeToolStep(t,n,i){var s,o,r;switch(console.log("[WorkflowEngine] executeToolStep:",n.mcp,"stepId:",n.id,"forceFallback:",this.options.forceFallbackExecutor),n.mcp){case"generate_image":{const a=await $5(n.args.prompt,{model:n.args.model,modelRef:n.args.modelRef||null,size:n.args.size,referenceImages:n.args.referenceImages,count:n.args.count,params:n.args.params,forceMainThread:this.options.forceFallbackExecutor,signal:i,onTaskCreated:l=>{n.result={taskId:l},Yn.saveWorkflow(t)}});if(a.task.status===mn.FAILED)throw new Error(((s=a.task.error)==null?void 0:s.message)||"Image generation failed");n.result={...a.task.result,taskId:a.task.id};break}case"generate_video":{const a=await X5(n.args.prompt,{model:n.args.model,modelRef:n.args.modelRef||null,duration:n.args.seconds??n.args.duration,size:n.args.size,referenceImages:n.args.referenceImages,params:n.args.params,forceMainThread:this.options.forceFallbackExecutor,signal:i,onTaskCreated:l=>{n.result={taskId:l},Yn.saveWorkflow(t)}});if(a.task.status===mn.FAILED)throw new Error(((o=a.task.error)==null?void 0:o.message)||"Video generation failed");n.result={...a.task.result,taskId:a.task.id};break}case"generate_text":{const u=(await ss.getFallbackExecutor().generateText({prompt:n.args.prompt,model:n.args.model,modelRef:n.args.modelRef||null,referenceImages:n.args.referenceImages,params:n.args.params},{signal:i})).content;n.result={content:u};const d=`${n.id}-insert-text`;if(!t.steps.find(m=>m.id===d)){const m={id:d,mcp:"insert_to_canvas",args:{items:[{type:"text",content:u}]},description:"将生成文本插入画布",status:"pending"};t.steps.push(m),await Yn.saveWorkflow(t),this.emitEvent({type:"steps_added",workflowId:t.id,steps:[m]})}break}case"ai_analyze":{const a=ss.getFallbackExecutor(),l=n.id,u=await a.aiAnalyze({taskId:l,messages:n.args.messages,prompt:n.args.prompt,referenceImages:n.args.referenceImages,images:n.args.images,textModel:n.args.textModel,model:n.args.model,modelRef:n.args.modelRef||null},{signal:i});if(n.result={content:u.content},u.addSteps&&u.addSteps.length>0){for(const d of u.addSteps)t.steps.find(m=>m.id===d.id)||t.steps.push({id:d.id,mcp:d.mcp,args:d.args,description:d.description,status:d.status});await Yn.saveWorkflow(t),this.emitEvent({type:"steps_added",workflowId:t.id,steps:t.steps.filter(d=>d.status==="pending")})}else if(u.content&&u.content.trim()){const d=`${n.id}-insert-text`;if(!t.steps.find(m=>m.id===d)){const m=((r=t.metadata)==null?void 0:r.rawInput)||"",f=m.trim()?`# ${m.trim()}
|
|
550
|
+
|
|
551
|
+
`:"",h={id:d,mcp:"insert_to_canvas",args:{items:[{type:"text",content:f+u.content}]},description:"将 AI 回复插入画布",status:"pending"};t.steps.push(h),await Yn.saveWorkflow(t),this.emitEvent({type:"steps_added",workflowId:t.id,steps:[h]})}}break}case"generate_grid_image":case"generate_inspiration_board":case"split_image":case"generate_long_video":case"insert_mermaid":case"insert_mindmap":case"insert_svg":case"canvas_insert":case"insert_to_canvas":{if(!this.options.executeMainThreadTool)throw new Error(`No main thread tool executor configured for: ${n.mcp}`);const a=await this.options.executeMainThreadTool(n.mcp,n.args);if(!a.success)throw new Error(a.error||`${n.mcp} failed`);n.result=a.result;break}default:throw new Error(`Unknown tool: ${n.mcp}`)}}emitEvent(t){this.events$.next(t)}destroy(){for(const[t,n]of this.abortControllers)n.abort();this.abortControllers.clear(),this.workflows.clear(),this.events$.complete()}}class K5{constructor(){this.events$=new Tx,this.workflows=new Map,this.initialized=!1,this.fallbackEngine=null,this.pendingCanvasHandler=null}init(){this.initialized||(this.initialized=!0)}destroy(){this.events$.complete(),this.initialized=!1}async recoverWorkflows(){try{let t=[];if(await gs.isAvailable()&&(t=await gs.getAllWorkflows()),t.length===0)return[];for(const n of t){const i=this.workflows.get(n.id);(!i||n.updatedAt>(i.updatedAt||0))&&(this.workflows.set(n.id,n),n.status==="failed"&&(i==null?void 0:i.status)!=="failed"&&this.events$&&this.events$.next({type:"failed",workflowId:n.id,error:n.error||"Unknown error"}))}return t.filter(n=>n.status==="running"||n.status==="pending")}catch(t){return console.warn("[WorkflowSubmissionService] Failed to recover workflows:",t),[]}}getRunningWorkflows(){return Array.from(this.workflows.values()).filter(t=>t.status==="running"||t.status==="pending")}notifyStepUpdate(t,n,i,s,o,r){const a=this.workflows.get(t);if(a){const l=a.steps.find(u=>u.id===n);l&&(l.status=i,l.result=s,l.error=o,l.duration=r)}this.events$.next({type:"step",workflowId:t,stepId:n,status:i,result:s,error:o,duration:r})}notifyWorkflowCompleted(t,n){this.workflows.set(t,n),this.events$.next({type:"completed",workflowId:t,workflow:n})}notifyWorkflowFailed(t,n){const i=this.workflows.get(t);i&&(i.status="failed",i.error=n),this.events$.next({type:"failed",workflowId:t,error:n})}isWorkflowManagedByFallback(t){return this.fallbackEngine?this.fallbackEngine.getWorkflow(t)!==void 0:!1}getWorkflowFromFallback(t){if(!this.fallbackEngine)return;const n=this.fallbackEngine.getWorkflow(t);if(n)return{id:n.id,name:n.name,steps:n.steps.map(i=>({id:i.id,mcp:i.mcp,args:i.args,description:i.description,status:i.status,result:i.result,error:i.error,duration:i.duration,options:i.options})),status:n.status,createdAt:n.createdAt,updatedAt:n.updatedAt,completedAt:n.completedAt,error:n.error,context:n.context}}async resumeWorkflowWithFallback(t){return this.fallbackEngine||(this.fallbackEngine=new fb({onEvent:n=>this.handleFallbackEngineEvent(n),executeMainThreadTool:async(n,i)=>{try{const s=await tb.execute({operation:n,args:i});return{success:s.success,error:s.error}}catch(s){return{success:!1,error:s.message||"Main thread tool execution failed"}}}})),await this.fallbackEngine.resumeWorkflow(t),this.fallbackEngine.getWorkflow(t)!==void 0}createWorkflow(t,n=[]){const i=`wf_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,s=Date.now(),o=t.generationType==="video"?"generate_video":"generate_image",r={prompt:t.prompt,model:t.modelId,modelRef:t.modelRef||null};t.size&&(r.size=t.size),t.count&&t.count>1&&(r.count=t.count),t.duration&&(r.seconds=t.duration),n.length>0&&(r.referenceImages=n),t.extraParams&&(r.params=t.extraParams);const a=[],l=t.count||1;for(let d=0;d<l;d++)a.push({id:`step_${d}_${Math.random().toString(36).substr(2,9)}`,mcp:o,args:{...r,count:1},description:t.generationType==="video"?`生成视频 ${d+1}/${l}`:`生成图片 ${d+1}/${l}`,status:"pending"});return{id:i,name:t.generationType==="video"?"视频生成":"图片生成",steps:a,status:"pending",createdAt:s,updatedAt:s,context:{userInput:t.userInstruction,model:t.modelId,modelRef:t.modelRef||null,params:{count:t.count,size:t.size,duration:t.duration},referenceImages:n}}}async submit(t){if(console.log("[WorkflowSubmissionService][submit] 入口 workflowId:",t.id),this.workflows.set(t.id,t),gs.invalidateCache(),!await this.tryFallbackEngine(t))throw this.workflows.delete(t.id),new Error("Submit workflow failed")}async tryFallbackEngine(t){try{if(!ss.getFallbackExecutor())return console.warn("[WorkflowSubmissionService] tryFallbackEngine: fallback executor 不可用"),!1;console.log("[WorkflowSubmissionService] tryFallbackEngine: 使用降级执行器"),this.fallbackEngine||(this.fallbackEngine=new fb({onEvent:s=>this.handleFallbackEngineEvent(s),forceFallbackExecutor:!0,executeMainThreadTool:async(s,o)=>{try{const r=await tb.execute({operation:s,args:o});return{success:r.success,result:r.data,error:r.error}}catch(r){return{success:!1,error:r.message||"Main thread tool execution failed"}}}}));const i={id:t.id,name:t.name,steps:t.steps.map(s=>({id:s.id,mcp:s.mcp,args:s.args,description:s.description,status:s.status,result:s.result,error:s.error,duration:s.duration,options:s.options})),status:t.status,createdAt:t.createdAt,updatedAt:t.updatedAt,completedAt:t.completedAt,error:t.error,context:t.context};return console.log("[WorkflowSubmissionService] tryFallbackEngine: 提交到主线程引擎, steps:",i.steps.length),await this.fallbackEngine.submitWorkflow(i),console.log("[WorkflowSubmissionService] tryFallbackEngine: 引擎已启动"),!0}catch(n){return console.error("[WorkflowSubmissionService] Fallback engine error:",n),!1}}handleFallbackEngineEvent(t){switch(t.type){case"status":this.events$.next({type:"status",workflowId:t.workflowId,status:t.status});break;case"step":this.events$.next({type:"step",workflowId:t.workflowId,stepId:t.stepId,status:t.status,result:t.result,error:t.error,duration:t.duration});const n=this.workflows.get(t.workflowId);if(n){const s=n.steps.find(o=>o.id===t.stepId);s&&(s.status=t.status,s.result=t.result,s.error=t.error,s.duration=t.duration),n.updatedAt=Date.now()}break;case"completed":this.events$.next({type:"completed",workflowId:t.workflowId,workflow:t.workflow}),this.workflows.set(t.workflowId,t.workflow);break;case"failed":this.events$.next({type:"failed",workflowId:t.workflowId,error:t.error});const i=this.workflows.get(t.workflowId);i&&(i.status="failed",i.error=t.error,i.updatedAt=Date.now());break;case"steps_added":this.events$.next({type:"steps_added",workflowId:t.workflowId,steps:t.steps.map(s=>({id:s.id,mcp:s.mcp,args:s.args,description:s.description,status:s.status}))});break}}async cancel(t){gs.invalidateCache(),this.fallbackEngine&&await this.fallbackEngine.cancelWorkflow(t)}getWorkflow(t){return this.workflows.get(t)}async queryWorkflowStatus(t){try{if(await gs.isAvailable()){const n=await gs.getWorkflow(t);if(n)return this.workflows.set(t,n),n}}catch(n){console.warn("[WorkflowSubmissionService] Failed to query workflow status:",n)}return this.workflows.get(t)||null}async queryAllWorkflows(){try{if(await gs.isAvailable()){const t=await gs.getAllWorkflows();for(const n of t)this.workflows.set(n.id,n);return t}}catch(t){console.warn("[WorkflowSubmissionService] Failed to query all workflows:",t)}return Array.from(this.workflows.values())}get events(){return this.events$.asObservable()}subscribeToWorkflow(t,n){return this.events$.pipe(hf(i=>i.type==="canvas_insert"?!1:i.workflowId===t)).subscribe(n)}registerCanvasHandler(t){this.pendingCanvasHandler=t}subscribeToToolRequests(t){return this.events$.pipe(hf(n=>n.type==="main_thread_tool_request")).subscribe(t)}subscribeToAllEvents(t){return this.events$.subscribe(t)}}const to=new K5,Y5=Object.freeze(Object.defineProperty({__proto__:null,workflowSubmissionService:to},Symbol.toStringTag,{value:"Module"})),Z5=20,hb=2e3,J5=3e4;function TN(e){const t=new Map;if(!e)return t;for(const n of e){const i=n.result;i!=null&&i.taskId&&t.set(i.taskId,n.id)}return t}function DN(e){var t;return e.status===mn.PROCESSING?{status:"running"}:e.status===mn.COMPLETED&&e.result?{status:"completed",result:{...e.result,taskId:e.id}}:e.status===mn.FAILED?{status:"failed",error:typeof e.error=="string"?e.error:((t=e.error)==null?void 0:t.message)||"Task failed"}:null}function Q5(e,t,n,i,s,o){const r=n.getWorkflow(),l=TN(r==null?void 0:r.steps).get(e.id);if(!l)return!1;const u=e.type!==jn.IMAGE&&(r==null?void 0:r.generationType)!=="image";t.status==="running"&&n.resumeWorkflow(),n.updateStep(l,t.status,t.result,t.error);const d=n.getWorkflow();if(d){const m=vs(d);i.current(m);const f=s.current,h=o.current;u&&f&&h&&Qt.updateWorkflow(f,h,m)}return!0}function eL(e,t,n,i,s,o){var a;const r=s.current;if(!r||e.type===jn.IMAGE)return!1;for(const l of r.children){if(!c0(l))continue;const u=l;if(u.workflow.generationType==="image")continue;const m=TN((a=u.workflow)==null?void 0:a.steps).get(e.id);if(!m)continue;const f=u.workflow.steps.map(g=>g.id!==m?g:{...g,status:t.status,...t.result!==void 0&&{result:t.result},...t.error!==void 0&&{error:t.error}}),h={...u.workflow,steps:f};if(t.status==="running"&&delete h.error,Qt.updateWorkflow(r,u.id,h),o.current=u.id,i.current(h),n.restoreWorkflow){const g={id:h.id,name:h.name||"",description:"",scenarioType:"direct_generation",generationType:h.generationType,status:t.status==="running"?"running":"failed",steps:f.map(b=>({id:b.id,mcp:b.mcp||"",args:b.args||{},description:b.description||"",status:b.status,result:b.result,error:b.error,duration:b.duration,options:b.options})),createdAt:h.createdAt||Date.now(),metadata:{prompt:h.prompt||"",userInstruction:"",rawInput:"",modelId:"",isModelExplicit:!1,count:h.count||1,selection:{texts:[],images:[],videos:[],graphics:[]}},aiAnalysis:h.aiAnalysis};n.restoreWorkflow(g)}return!0}return!1}function Bu(e,t,n,i,s,o){const r=e.task,a=DN(r);return a?((o==null?void 0:o.logProcessing)!==!1&&console.debug(`[useTaskWorkflowSync] Processing task ${r.id} → ${a.status}`),Q5(r,a,t,n,i,s)?(console.debug(`[useTaskWorkflowSync] Task ${r.id} handled via WorkflowContext`),!0):eL(r,a,t,n,i,s)?(console.debug(`[useTaskWorkflowSync] Task ${r.id} handled via WorkZone fallback`),!0):((o==null?void 0:o.logUnmatched)!==!1&&console.debug(`[useTaskWorkflowSync] Task ${r.id} not matched to any workflow step (buffering)`),!1)):!1}function tL(e){const{workflowControl:t,boardRef:n,workZoneIdRef:i}=e,s=p.useRef(e.updateWorkflowMessage);p.useEffect(()=>{s.current=e.updateWorkflowMessage},[e.updateWorkflowMessage]);const o=p.useRef(new Map),r=p.useRef(null),a=p.useRef(0),l=p.useRef(!1);p.useEffect(()=>{const u=f=>{const h=o.current;if(!h.has(f.task.id)&&h.size>=Z5){const g=h.keys().next().value;g&&h.delete(g)}h.set(f.task.id,f)},d=()=>{const f=new Map;for(const[h,g]of o.current.entries())Bu(g,t,s,n,i,{logProcessing:!1,logUnmatched:!1})||f.set(h,g);o.current=f,(f.size===0||Date.now()-a.current>J5)&&(r.current&&(clearInterval(r.current),r.current=null),o.current=new Map)};if(!l.current){l.current=!0;const f=ft.getAllTasks();for(const h of f){const g=DN(h);g&&(g.status==="completed"||g.status==="failed")&&Bu({task:h},t,s,n,i)}}const m=ft.observeTaskUpdates().subscribe(f=>{if(f.type!=="taskUpdated")return;if(f.task.status===mn.PROCESSING&&o.current.has(f.task.id)){u(f),r.current||(a.current=Date.now(),r.current=setInterval(d,hb));return}Bu(f,t,s,n,i)?o.current.delete(f.task.id):(u(f),r.current||(a.current=Date.now(),r.current=setInterval(d,hb)))});return()=>{m.unsubscribe(),r.current&&(clearInterval(r.current),r.current=null),o.current=new Map}},[t,n,i])}let Hl=null;const nL=new Promise(e=>{Hl=e});function vs(e,t,n,i){var o;const s=e.metadata||{};return{id:e.id,name:e.name,generationType:e.generationType,prompt:s.prompt||((o=t==null?void 0:t.aiContext)==null?void 0:o.finalPrompt)||"",aiAnalysis:e.aiAnalysis,count:s.count,createdAt:e.createdAt,steps:e.steps.map(r=>({id:r.id,description:r.description,status:r.status,mcp:r.mcp,args:r.args,result:r.result,error:r.error,duration:r.duration,options:r.options})),retryContext:t,postProcessingStatus:n,insertedCount:i}}async function iL(e,t){const{operation:n,params:i}=t;try{const{insertImageFromUrl:s}=await Ce(async()=>{const{insertImageFromUrl:u}=await import("./tool-windows-DWUG3k_L.js").then(d=>d.os);return{insertImageFromUrl:u}},__vite__mapDeps([0]),import.meta.url),{insertVideoFromUrl:o}=await Ce(async()=>{const{insertVideoFromUrl:u}=await import("./tool-windows-DWUG3k_L.js").then(d=>d.oA);return{insertVideoFromUrl:u}},__vite__mapDeps([0]),import.meta.url),{insertAudioFromUrl:r}=await Ce(async()=>{const{insertAudioFromUrl:u}=await import("./tool-windows-DWUG3k_L.js").then(d=>d.ot);return{insertAudioFromUrl:u}},__vite__mapDeps([0]),import.meta.url),{getSmartInsertionPoint:a}=await Ce(async()=>{const{getSmartInsertionPoint:u}=await import("./tool-windows-DWUG3k_L.js").then(d=>d.or);return{getSmartInsertionPoint:u}},__vite__mapDeps([0]),import.meta.url),l=i.position?[i.position.x,i.position.y]:a(e)||[100,100];if(n==="canvas_insert"&&i.items)for(const u of i.items)u.type==="image"&&u.url?await s(e,u.url,l):u.type==="video"&&u.url?await o(e,u.url,l):u.type==="audio"&&u.url&&await r(e,u.url,u,l);else n==="insert_image"&&i.url?await s(e,i.url,l):n==="insert_video"&&i.url?await o(e,i.url,l):n==="insert_audio"&&i.url&&await r(e,i.url,i,l)}catch(s){console.error("[useWorkflowSubmission] Failed to insert to canvas:",s)}}function _N(e){const{boardRef:t,workZoneIdRef:n}=e,i=nN(),s=dp(),o=p.useRef(s.sendWorkflowMessage),r=p.useRef(s.updateWorkflowMessage);p.useEffect(()=>{o.current=s.sendWorkflowMessage,r.current=s.updateWorkflowMessage},[s.sendWorkflowMessage,s.updateWorkflowMessage]),tL({workflowControl:i,updateWorkflowMessage:s.updateWorkflowMessage,boardRef:t,workZoneIdRef:n});const a=p.useRef(null),l=p.useRef([]),u=p.useRef(!1),d=p.useRef(null),m=p.useCallback(w=>w!=="image",[]),f=p.useCallback(async()=>{if(!u.current){u.current=!0;try{await to.recoverWorkflows()}catch(w){console.warn("[useWorkflowSubmission] Failed to recover workflows:",w)}finally{Hl==null||Hl()}}},[]);p.useEffect(()=>{to.init(),to.registerCanvasHandler(async(v,S)=>({success:!0}));const w=to.subscribeToAllEvents(v=>{var S,k,N,E,I,T,j,V,_;if(v.type==="recovered"&&v.workflow){const D=v.workflow,C=D.status==="running"||D.status==="pending",M=D.status==="failed"&&D.updatedAt&&Date.now()-D.updatedAt<300*1e3;if(!C&&!M)return;(S=i.restoreWorkflow)==null||S.call(i,D);const U=$n.get(),F={aiContext:{rawInput:((k=D.context)==null?void 0:k.userInput)||"",userInstruction:((N=D.context)==null?void 0:N.userInput)||"",model:{id:((E=D.context)==null?void 0:E.model)||"",type:D.generationType==="video"?"video":D.generationType==="audio"?"audio":"image",isExplicit:!0},defaultModels:{image:U.imageModelName||"gemini-3-pro-image-preview-vip",video:U.videoModelName||"veo3.1",audio:U.audioModelName||"suno_music"},params:{count:(I=D.metadata)==null?void 0:I.count,size:(T=D.metadata)==null?void 0:T.size,duration:(j=D.metadata)==null?void 0:j.duration},selection:{texts:[],images:[],videos:[],graphics:[]},finalPrompt:((V=D.metadata)==null?void 0:V.prompt)||""},referenceImages:((_=D.context)==null?void 0:_.referenceImages)||[],textModel:U.textModelName},$=vs(D,F);r.current($);const A=t.current,H=n.current;m(D.generationType)&&H&&A&&Qt.updateWorkflow(A,H,$);const ue=to.subscribeToWorkflow(D.id,async te=>{var oe;await((oe=d.current)==null?void 0:oe.call(d,te,D,F))});l.current.push(ue)}});return l.current.push(w),f(),()=>{l.current.forEach(v=>v.unsubscribe()),l.current=[]}},[]);const h=p.useCallback(async(w,v,S)=>{const k=t.current,N=n.current,E=m(v.generationType);switch(w.type){case"step":{i.updateStep(w.stepId,w.status,w.result,w.error,w.duration);const I=i.getWorkflow();if(I){const T=vs(I,S);r.current(T),E&&N&&k&&Qt.updateWorkflow(k,N,T)}break}case"completed":{const I=i.getWorkflow();let T=!1;I&&I.steps.forEach(V=>{const _=V.result,D=_==null?void 0:_.taskId;D&&(T=!0),(V.status==="running"||V.status==="pending")&&!D&&i.updateStep(V.id,"completed")});const j=i.getWorkflow();if(j){const V=vs(j,S);if(r.current(V),E&&N&&k){if(Qt.updateWorkflow(k,N,V),j.steps.some(D=>D.status==="pending"||D.status==="running"))break;if(!T)setTimeout(()=>{Qt.removeWorkZone(k,N)},1500);else{const{workflowCompletionService:D}=await Ce(async()=>{const{workflowCompletionService:M}=await import("./tool-windows-DWUG3k_L.js").then(U=>U.oB);return{workflowCompletionService:M}},__vite__mapDeps([0]),import.meta.url);j.steps.every(M=>{const U=M.result;return U!=null&&U.taskId?D.isPostProcessingCompleted(U.taskId):!0})&&setTimeout(()=>{Qt.removeWorkZone(k,N)},1500)}}}break}case"failed":{i.abortWorkflow();const I=i.getWorkflow();if(I){const T=vs(I,S);r.current(T),E&&N&&k&&Qt.updateWorkflow(k,N,T)}break}case"steps_added":{const I=w;i.addSteps(I.steps.map(j=>({id:j.id,mcp:j.mcp,args:j.args,description:j.description,status:j.status})));const T=i.getWorkflow();if(T){const j=vs(T,S);r.current(j),E&&N&&k&&Qt.updateWorkflow(k,N,j)}break}case"canvas_insert":{k&&iL(k,w);break}}},[i,t,n,m]);p.useEffect(()=>{d.current=h},[h]);const g=p.useCallback(async(w,v,S,k)=>{const N=k||Qs(w,v);i.startWorkflow(N);const E=$n.get(),I=E.textModelName,T=S||{aiContext:{rawInput:w.rawInput||w.userInstruction,userInstruction:w.userInstruction,model:{id:w.modelId,type:w.generationType,isExplicit:w.isModelExplicit},defaultModels:{image:E.imageModelName||"gemini-3-pro-image-preview-vip",video:E.videoModelName||"veo3.1",audio:E.audioModelName||"suno_music"},params:{count:w.count,size:w.size,duration:w.duration},selection:w.selection||{texts:[],images:[],videos:[],graphics:[]},finalPrompt:w.prompt},referenceImages:v,textModel:I};a.current=T;const j=vs(N,T);return await o.current({context:T.aiContext,workflow:j,textModel:I,autoOpen:!1}),{workflowId:N.id,usedSW:!1}},[i]),b=p.useCallback(async w=>{await to.cancel(w),i.abortWorkflow()},[i]),x=p.useCallback(async(w,v)=>{const S=w.retryContext;if(!S){console.error("[useWorkflowSubmission] No retry context available");return}const k={prompt:w.prompt,userInstruction:S.aiContext.userInstruction,rawInput:S.aiContext.rawInput,modelId:S.aiContext.model.id,isModelExplicit:S.aiContext.model.isExplicit,generationType:S.aiContext.model.type,count:w.count||1,size:S.aiContext.params.size,duration:S.aiContext.params.duration,scenario:S.aiContext.model.type==="agent"?"agent_flow":"direct_generation",selection:S.aiContext.selection,parseResult:{},hasExtraContent:!1};await g(k,S.referenceImages||[],S)},[g]),y=p.useCallback(()=>a.current,[]);return{submitWorkflow:g,cancelWorkflow:b,retryWorkflow:x,getRetryContext:y}}const Hz=Object.freeze(Object.defineProperty({__proto__:null,toWorkflowMessageData:vs,useWorkflowSubmission:_N,workflowRecoveryPromise:nL},Symbol.toStringTag,{value:"Module"}));function IN(e,t){return Math.abs(Math.log(e)-Math.log(t))}function sL(e,t,n){if(e<=0||t<=0)return;const i=e/t,s=Dx(n);if(s.length===0)return;const o=s.filter(l=>l.value!=="auto");if(o.length===0)return;let r,a=1/0;for(const l of o){const u=l.value.split("x");if(u.length!==2)continue;const d=parseFloat(u[0]),m=parseFloat(u[1]);if(isNaN(d)||isNaN(m)||m===0)continue;const f=d/m,h=IN(i,f);h<a&&(a=h,r=l.value)}if(!(a>.25))return r}function Wz(e,t){if(e<=0||t<=0)return;const n=e/t,i=Cl.filter(r=>r.value!=="auto"&&r.width>0&&r.height>0);let s,o=1/0;for(const r of i){const a=r.width/r.height,l=IN(n,a);l<o&&(o=l,s=r.value)}if(!(o>.25))return s}const oL=new Set([1,2,3,4,5,10,20]);function Ls(e){try{const t=localStorage.getItem(e);if(!t)return null;const n=JSON.parse(t);return n&&typeof n=="object"&&"value"in n?n.value:n}catch{return null}}function su(e,t){try{const n={value:t,updatedAt:Date.now()};localStorage.setItem(e,JSON.stringify(n))}catch{}}function ou(e){return!e||typeof e!="object"||Array.isArray(e)?{}:Object.entries(e).reduce((t,[n,i])=>(typeof i=="string"&&(t[n]=i),t),{})}function Ir(e,t){return typeof t=="string"&&t.trim()?t.trim():e}function CN(e,t,n){var l;const i=Jl(e),s=new Set((n==null?void 0:n.excludeParamIds)||[]),o=ou(t),r={},a=i.find(u=>u.id==="size");if(a&&!e.startsWith("mj")&&!s.has("size")&&(n==null?void 0:n.keepDefaultSize)!==!1){const u=o.size,d=(l=a.options)==null?void 0:l.some(m=>m.value===u);r.size=d?u:fd(e)}return i.forEach(u=>{var f;if(s.has(u.id)||u.id==="size")return;const d=o[u.id];if((u.valueType==="enum"?(f=u.options)==null?void 0:f.some(h=>h.value===d):typeof d=="string"&&d!=="")&&d){r[u.id]=d;return}u.defaultValue&&(r[u.id]=u.defaultValue)}),_x(e,r)}function rL(e){return e==="video"?xo():e==="audio"?tr():e==="text"||e==="agent"?PS:zo()}function aL(e){return e==="image"||e==="video"||e==="audio"||e==="text"||e==="agent"}function lL(e){const t=Dx(e);if(t.length===0)return new Set(Cl.map(s=>s.value));const n=new Set,i=new Map(Cl.map(s=>[s.value.replace(":","x"),s.value]));return t.forEach(s=>{if(s.value==="auto"){n.add("auto");return}const o=i.get(s.value);o&&n.add(o)}),n.size>0?n:new Set(Cl.map(s=>s.value))}function cL(e,t){if(typeof t!="string")return gf;const n=lL(e);return n.has(t)?t:n.has("auto")?"auto":gf}function uL(){const e=Ls(Ln.AI_INPUT_PREFERENCES)||{},t=e.generationType,i=e.modeVersion!==2&&t==="text"?"agent":aL(t)?t:"image",s=rL(i),o=typeof e.selectedModel=="string"?e.selectedModel:"",r=o?so(o):null,a=r&&(r.type===i||(i==="text"||i==="agent")&&r.type==="text")?o:s,l=i==="agent"?{}:CN(a,e.selectedParams),u=i==="agent"||i==="text"?1:typeof e.selectedCount=="number"&&oL.has(e.selectedCount)?e.selectedCount:1;return{generationType:i,selectedModel:a,selectedParams:l,selectedCount:u,selectedSkillId:typeof e.selectedSkillId=="string"&&e.selectedSkillId.trim()?e.selectedSkillId.trim():"auto"}}function dL(e){const t=Ls(Ln.AI_INPUT_PREFERENCES)||{};su(Ln.AI_INPUT_PREFERENCES,{...t,...e,modeVersion:2,selectedParams:e.generationType==="agent"?{}:e.selectedParams,selectedCount:e.generationType==="agent"||e.generationType==="text"?1:e.selectedCount})}function $z(e){const t=Ls(Ln.AI_IMAGE_TOOL_PREFERENCES)||{},n=Ir(e.currentModel,e.currentSelectionKey);su(Ln.AI_IMAGE_TOOL_PREFERENCES,{...t,...e,scopedPreferences:{...t.scopedPreferences||{},[n]:{modelId:e.currentModel,selectionKey:e.currentSelectionKey||null,extraParams:e.extraParams,aspectRatio:e.aspectRatio}}})}function Xz(e){const t=Ls(Ln.AI_VIDEO_TOOL_PREFERENCES)||{},n=Ir(e.currentModel,e.currentSelectionKey);su(Ln.AI_VIDEO_TOOL_PREFERENCES,{...t,...e,scopedPreferences:{...t.scopedPreferences||{},[n]:{modelId:e.currentModel,selectionKey:e.currentSelectionKey||null,extraParams:e.extraParams,duration:e.duration,size:e.size}}})}function Fu(e,t,n,i){var a,l;const s=Ls(Ln.AI_INPUT_PREFERENCES)||{},o=Ir(t,n),r=(l=(a=s.scopedPreferences)==null?void 0:a[e])==null?void 0:l[o];return ou(r??i)}function mL(e,t,n,i){var r;const s=Ls(Ln.AI_INPUT_PREFERENCES)||{},o=Ir(t,i);su(Ln.AI_INPUT_PREFERENCES,{...s,scopedPreferences:{...s.scopedPreferences||{},[e]:{...((r=s.scopedPreferences)==null?void 0:r[e])||{},[o]:ou(n)}}})}function Kz(e,t){var o;const n=Ls(Ln.AI_IMAGE_TOOL_PREFERENCES)||{},i=Ir(e,t),s=(o=n.scopedPreferences)==null?void 0:o[i];return{extraParams:CN(e,(s==null?void 0:s.extraParams)??n.extraParams,{excludeParamIds:e.startsWith("mj")?[]:["size"],keepDefaultSize:!1}),aspectRatio:cL(e,(s==null?void 0:s.aspectRatio)??n.aspectRatio)}}function Yz(e,t){var d;const n=Ls(Ln.AI_VIDEO_TOOL_PREFERENCES)||{},i=Ir(e,t),s=(d=n.scopedPreferences)==null?void 0:d[i],o=VS(e),r=AS(o),a=MS(o),l=typeof(s==null?void 0:s.duration)=="string"&&r.durationOptions.some(m=>m.value===s.duration)?s.duration:typeof n.duration=="string"&&r.durationOptions.some(m=>m.value===n.duration)?n.duration:a.duration,u=typeof(s==null?void 0:s.size)=="string"&&r.sizeOptions.some(m=>m.value===s.size)?s.size:typeof n.size=="string"&&r.sizeOptions.some(m=>m.value===n.size)?n.size:a.size;return{extraParams:ou((s==null?void 0:s.extraParams)??n.extraParams),duration:l,size:u}}function ao(e){return typeof e=="string"&&e.trim()?e.trim():null}function pL(e){return e==="image"||e==="video"||e==="audio"||e==="text"||e==="agent"}function fL(e){if(!e||typeof e!="object")return!1;const t=e;return typeof t.modelId=="string"&&t.modelId.trim().length>0&&(t.profileId===null||typeof t.profileId=="string")&&(t.providerIdHint===null||typeof t.providerIdHint=="string")&&(t.vendorHint===null||typeof t.vendorHint=="string")&&typeof t.updatedAt=="number"&&Number.isFinite(t.updatedAt)}function vp(){try{const e=window.localStorage.getItem(hd);if(!e)return{};const t=JSON.parse(e);if(!t||typeof t!="object")return{};const n={};return Object.entries(t).forEach(([i,s])=>{pL(i)&&fL(s)&&(n[i]={modelId:s.modelId.trim(),profileId:ao(s.profileId),providerIdHint:ao(s.providerIdHint),vendorHint:ao(s.vendorHint),updatedAt:s.updatedAt})}),n}catch{return{}}}function jN(e){try{if(!Object.values(e).some(Boolean)){window.localStorage.removeItem(hd);return}window.localStorage.setItem(hd,JSON.stringify(e))}catch{}}function hL(e){const t=vp();return t[e]?t[e]||null:e==="agent"&&t.text||null}function gL(e,t){var s;const n=ao(t.modelId);if(!n){PN(e);return}const i=vp();i[e]={modelId:n,profileId:ao((s=t.modelRef)==null?void 0:s.profileId),providerIdHint:ao(t.providerIdHint),vendorHint:ao(t.vendorHint),updatedAt:Date.now()},jN(i)}function PN(e){const t=vp();t[e]&&(delete t[e],jN(t))}function ws(e,t,n,i){var o;const s=e.metadata||{};return{id:e.id,name:e.name,generationType:e.generationType,prompt:s.prompt||((o=t==null?void 0:t.aiContext)==null?void 0:o.finalPrompt)||"",aiAnalysis:e.aiAnalysis,count:s.count,createdAt:e.createdAt,status:e.status,steps:e.steps.map(r=>({id:r.id,description:r.description,status:r.status,mcp:r.mcp,args:r.args,result:r.result,error:r.error,duration:r.duration,options:r.options})),retryContext:t,postProcessingStatus:n,insertedCount:i}}let gb=!1;gb||(wN(),s5(),NN.initialize().catch(e=>{console.warn("[AIInputBar] 外部 Skill 服务初始化失败(非致命):",e)}),gb=!0);function AN(e){return e.selectionKey||(e.sourceProfileId?`${e.sourceProfileId}::${e.id}`:e.id)}function ys(e,t){return t!=null&&t.profileId?`${t.profileId}::${e}`:e}function ea(e){return e?ei(e.sourceProfileId||null,e.id):null}function bL(e){return e<=0?"0":e<=20?"1-20":e<=100?"21-100":e<=300?"101-300":e<=800?"301-800":"800+"}function Di(e,t,n){if(!t)return;const i=ys(t,n),s=(n==null?void 0:n.profileId)||null;return e.find(o=>AN(o)===i)||e.find(o=>o.id===t&&(o.sourceProfileId||null)===s)||(s===null?e.find(o=>o.id===t&&!o.sourceProfileId):void 0)||e.find(o=>o.id===t)}function xL(e,t){return e==="agent"&&t==="text"?"agent":t}function wL(e){if(!e)return!1;const t=e.toLowerCase();return t.includes("#video")?!0:[".mp4",".webm",".mov",".avi",".mkv",".m4v",".flv",".wmv"].some(i=>t.includes(i))}const MN=an.memo(({language:e,onSelectionChange:t,externalBoardRef:n,onCanvasEmptyChange:i,isDataReady:s,onFrameSelected:o})=>{const r=Zt(),a=p.useRef(r);a.current=r,p.useEffect(()=>(yf(r),Qd(r),Jg(r),eb(r),rb.setBoard(r),n&&(n.current=r),()=>{yf(null),Qd(null),Jg(null),eb(null),rb.setBoard(null),n&&(n.current=null)}),[r,n]);const l=p.useRef(i);l.current=i,p.useEffect(()=>{if(!r||!l.current||!s)return;const f=setInterval(()=>{var g;const h=r.children||[];(g=l.current)==null||g.call(l,h.length===0)},500);return()=>{clearInterval(f)}},[r,s]);const u=p.useRef(t);u.current=t;const d=p.useRef(o);return d.current=o,p.useEffect(()=>{const m=async()=>{var b,x,y,w;const h=a.current;if(!h)return;const g=ut(h);if(g.length===1&&Ri(g[0])){const v=g[0],S=Ae.getRectangleByPoints(v.points);(b=d.current)==null||b.call(d,{id:v.id,width:S.width,height:S.height})}else(x=d.current)==null||x.call(d,null);if(g.length===0){u.current([]);return}try{const v=await zS(h),S=[];v.graphicsImage&&S.push({url:v.graphicsImage,name:e==="zh"?"图形元素":"Graphics",type:"graphics",width:(y=v.graphicsImageDimensions)==null?void 0:y.width,height:(w=v.graphicsImageDimensions)==null?void 0:w.height});for(const k of v.remainingImages){const N=k.url||"",E=wL(N);S.push({url:N,name:k.name||(E?`video-${Date.now()}`:`image-${Date.now()}`),type:E?"video":"image",width:k.width,height:k.height})}v.remainingText&&v.remainingText.trim()&&S.push({type:"text",text:v.remainingText.trim(),name:e==="zh"?"文字内容":"Text Content"}),u.current(S)}catch(v){console.error("Failed to process selected content:",v),u.current([])}};m();const f=()=>{setTimeout(m,50)};return document.addEventListener("mouseup",f),()=>{document.removeEventListener("mouseup",f)}},[e]),null});MN.displayName="SelectionWatcher";const VN=an.memo(({className:e,isDataReady:t})=>{const{language:n}=We(),i=Bo("image"),s=Bo("video"),o=Bo("audio"),r=Bo("text"),a=dp(),l=nN(),{addHistory:u}=eu(),{addAsset:d}=US(),m=p.useRef(a.sendWorkflowMessage);m.current=a.sendWorkflowMessage;const f=p.useRef(a.updateWorkflowMessage);f.current=a.updateWorkflowMessage;const h=p.useRef(a.appendAgentLog);h.current=a.appendAgentLog;const g=p.useRef(a.updateThinkingContent);g.current=a.updateThinkingContent;const b=p.useRef(a.setSelectedContent);b.current=a.setSelectedContent;const x=p.useRef(a.registerRetryHandler);x.current=a.registerRetryHandler;const y=p.useRef(null),w=p.useRef([]),v=p.useRef(null),S=uL(),k=p.useCallback((q,X,ie)=>{if(!q)return;const ke=w.current,ye=(ie!=null&&ie.workflowId&&(ie!=null&&ie.batchId)&&typeof ie.batchIndex=="number"?Ws.getAnchorByBatchSlot(q,{workflowId:ie.workflowId,batchId:ie.batchId,batchIndex:ie.batchIndex}):null)||(ie!=null&&ie.workflowId?Ws.getAnchorByWorkflowId(q,ie.workflowId):null)||(ke[0]?Ws.getAnchorById(q,ke[0]):null);if(!ye)return;const Le=ye.taskIds.includes(X)?ye.taskIds:[...ye.taskIds,X];Ws.updateAnchor(q,ye.id,{taskIds:Le,primaryTaskId:ye.primaryTaskId||X})},[]),N=p.useCallback((q,X,ie)=>{const ke=w.current;ke.length===0||!q||ke.forEach(ye=>{Ws.updateAnchor(q,ye,pu(X,ie))})},[]),E=p.useCallback(q=>{const X=w.current;X.length===0||!q||(X.forEach(ie=>{Ws.removeAnchor(q,ie)}),w.current=[])},[]),I=p.useCallback((q,X)=>{const ie=hL(q);if(!ie)return;const ke=Di(X,ie.modelId,ei(ie.profileId,ie.modelId));if(ke)return ke;PN(q)},[]),T=p.useCallback((q,X)=>{const ie=I(q,X);if(ie)return ie;const ye=ji(q==="video"?"video":q==="audio"?"audio":q==="text"||q==="agent"?"text":"image"),Le=Di(X,ye.modelId,ei(ye.profileId,ye.modelId));if(Le)return Le;const wt=q==="video"?xo():q==="audio"?tr():q==="text"||q==="agent"?ud():zo();return Di(X,wt,null)||X[0]},[I]),j=S.generationType,_=T(j,j==="video"?s:j==="audio"?o:j==="text"||j==="agent"?r:i)||so(S.selectedModel)||so(j==="video"?xo():j==="audio"?tr():j==="text"||j==="agent"?ud():zo()),D=T("image",i)||so(zo()),C=ji("image"),M=(D==null?void 0:D.id)||C.modelId||zo(),U=ea(D)||ei(C.profileId,C.modelId),F=ys((_==null?void 0:_.id)||M,ea(_)||U),$=j==="agent"?{}:Fu(j,(_==null?void 0:_.id)||M,F,S.selectedParams),[A,H]=p.useState(""),[ue,te]=p.useState(!1),[oe,me]=p.useState([]),[_e,Pe]=p.useState([]),[He,Z]=p.useState(!1),Ie=p.useRef(null),[Qe,dt]=p.useState(!1),[bt,L]=p.useState(null),[P,Q]=p.useState(j),[se,z]=p.useState(S.selectedSkillId||Gl),[O,K]=p.useState((_==null?void 0:_.id)||M),[G,fe]=p.useState(ea(_)||U),ae=p.useMemo(()=>{if(P!=="image"||Di(i,O,G))return i;const X=oo("image",O,G);return X?[X,...i]:i},[P,i,O,G]),Y=p.useMemo(()=>{if(P!=="video"||Di(s,O,G))return s;const X=oo("video",O,G);return X?[X,...s]:s},[P,O,G,s]),le=p.useMemo(()=>{if(P!=="audio"||Di(o,O,G))return o;const X=oo("audio",O,G);return X?[X,...o]:o},[o,P,O,G]),ge=p.useMemo(()=>{if(P!=="text"&&P!=="agent"||Di(r,O,G))return r;const X=oo("text",O,G);return X?[X,...r]:r},[P,O,G,r]),[Ve,Nt]=p.useState(()=>{if(j==="agent")return{};const q=(_==null?void 0:_.id)||M,X=Jl(q).find(ie=>ie.id==="size");return{...$,...q.startsWith("mj")||!X?{}:{size:$.size||fd(q)}}}),Xe=p.useRef(Ve),be=p.useRef(j==="agent"?"agent":`${j}:${F}`);p.useEffect(()=>{Xe.current=Ve},[Ve]);const[ze,W]=p.useState(S.selectedCount),[B,re]=p.useState(!1),[xe,ve]=p.useState(!1),[Be,Fe]=p.useState(!1),Me=p.useRef(null),et=p.useCallback(q=>{re(q),q||(Me.current=null)},[]),vt=p.useCallback(q=>{ve(q),q||(Me.current=null)},[]),he=p.useCallback(q=>{Fe(q),q||(Me.current=null)},[]),[je,we]=p.useState(!1),Te=p.useMemo(()=>[..._e,...oe],[_e,oe]),tt=p.useMemo(()=>({invalidFile:n==="zh"?"请上传图片文件":"Please upload image files",fileTooLarge:n==="zh"?"图片大小不能超过 25MB":"Image size cannot exceed 25MB",loadFailed:n==="zh"?"加载图片失败":"Failed to load image",compressionFailed:n==="zh"?"图片压缩失败":"Image compression failed",compressing:q=>n==="zh"?`正在压缩图片 (${q.toFixed(1)}MB)...`:`Compressing image (${q.toFixed(1)}MB)...`,compressed:(q,X)=>n==="zh"?`压缩完成: ${q.toFixed(1)}MB → ${X.toFixed(1)}MB`:`Compressed: ${q.toFixed(1)}MB → ${X.toFixed(1)}MB`}),[n]);p.useEffect(()=>{const q=P==="video"?Y:P==="audio"?le:P==="text"||P==="agent"?ge:ae,ie=Di(q,O,G)||T(P,q);if(ie){const ke=ys(O,G),ye=AN(ie);ke!==ye&&(K(ie.id),fe(ea(ie)))}P!=="agent"&&z(Gl),(P==="agent"||P==="text"||P==="audio")&&W(1)},[le,P,ae,T,O,G,ge,Y]);const Re=p.useMemo(()=>P==="video"?Y:P==="audio"?le:P==="text"||P==="agent"?ge:ae,[le,P,ae,ge,Y]),Ye=p.useMemo(()=>{var ie;if(P==="agent")return[];if(P==="video")return RS(O,G||O,Ve);const q=Jl(O);return P!=="audio"?q:(Ve.sunoAction||((ie=q.find(ke=>ke.id==="sunoAction"))==null?void 0:ie.defaultValue)||"music")==="lyrics"?q.filter(ke=>ke.id==="sunoAction"||ke.id==="mv"||ke.id==="title"||ke.id==="tags"):q},[P,O,G,Ve]);p.useEffect(()=>{if(!Qe)return;const q=X=>{const ie=X.target;rt.current&&!rt.current.contains(ie)&&dt(!1)};return document.addEventListener("mousedown",q),()=>document.removeEventListener("mousedown",q)},[Qe]),p.useEffect(()=>()=>{Ie.current&&clearTimeout(Ie.current)},[]),p.useEffect(()=>{const q=X=>{var ie;((ie=X.detail)==null?void 0:ie.type)!=="image"&&(Ie.current&&(clearTimeout(Ie.current),Ie.current=null),Z(!1))};return window.addEventListener("ai-generation-complete",q),()=>{window.removeEventListener("ai-generation-complete",q)}},[]),p.useEffect(()=>{const q=ft.observeTaskUpdates().subscribe(X=>{var nt,pt;const ie=X.task,ke=l.getWorkflow();if(!ke)return;const ye=ke.steps.find(at=>{const Dt=at.result;return(Dt==null?void 0:Dt.taskId)===ie.id});if(!ye)return;let Le=ye.status,wt=ye.result,Pt=ye.error;switch(ie.status){case mn.PENDING:case mn.PROCESSING:Le="running";break;case mn.COMPLETED:Le="completed",wt={...typeof wt=="object"?wt:{},taskId:ie.id,result:ie.result};break;case mn.FAILED:Le="failed",Pt=((nt=ie.error)==null?void 0:nt.message)||"任务执行失败";break;case mn.CANCELLED:Le="skipped";break}if(Le!==ye.status){if(l.updateStep(ye.id,Le,wt,Pt),Le==="failed"){const Dt=(pt=ye.options)==null?void 0:pt.batchId;Dt&&ke.steps.forEach(qt=>{var zn;qt.id!==ye.id&&((zn=qt.options)==null?void 0:zn.batchId)===Dt&&qt.status==="running"&&l.updateStep(qt.id,"skipped",void 0,"前置任务失败")})}const at=l.getWorkflow();if(at){const Dt=ws(at,y.current||void 0);f.current(Dt);const qt=v.current,zn=xt.current;qt&&zn&&Qt.updateWorkflow(zn,qt,Dt)}}});return()=>q.unsubscribe()},[l]);const mt=p.useRef(void 0),St=p.useRef(void 0);p.useEffect(()=>{const q=fu.observeCompletionEvents().subscribe(X=>{const ie=l.getWorkflow(),ke=ie==null?void 0:ie.steps.find(wt=>{const Pt=wt.result;return(Pt==null?void 0:Pt.taskId)===X.taskId});let ye,Le;switch(X.type){case"postProcessingStarted":ye="processing";break;case"postProcessingCompleted":ye="completed",Le=X.result.insertedCount;break;case"postProcessingFailed":ye="failed";break}if(mt.current=ye,Le!==void 0&&(St.current=(St.current||0)+Le),ie&&ke){const wt=l.getWorkflow();if(wt){const Pt=ws(wt,y.current||void 0,ye,St.current);f.current(Pt);const nt=v.current,pt=xt.current;nt&&pt&&Qt.updateWorkflow(pt,nt,Pt)}}if(X.type==="postProcessingCompleted"){const wt=X.result.firstElementPosition;Ie.current&&(clearTimeout(Ie.current),Ie.current=null),Z(!1),setTimeout(async()=>{var pt;a.closeChatDrawer();const Pt=v.current,nt=xt.current;if(Pt&&nt){const at=l.getWorkflow();if(at==null?void 0:at.steps.every(qt=>qt.status==="completed"||qt.status==="failed"||qt.status==="skipped")){const{workflowCompletionService:qt}=await Ce(async()=>{const{workflowCompletionService:sn}=await import("./tool-windows-DWUG3k_L.js").then(ht=>ht.oB);return{workflowCompletionService:sn}},__vite__mapDeps([0]),import.meta.url);(at==null?void 0:at.steps.every(sn=>{const ht=sn.result;return ht!=null&&ht.taskId?qt.isPostProcessingCompleted(ht.taskId):!0}))&&(Qt.removeWorkZone(nt,Pt),v.current=null)}}if(wt&&nt){const at=(pt=nt.host)==null?void 0:pt.getBoundingClientRect();if(at){const Dt=nt.viewport.zoom,qt=wt[0]-at.width/(2*Dt),zn=wt[1]-at.height/(2*Dt);Ue.updateViewport(nt,[qt,zn],Dt)}}},500),mt.current=void 0,St.current=void 0}});return()=>q.unsubscribe()},[l,a]);const xt=p.useRef(null),{submitWorkflow:Jt}=_N({boardRef:xt,workZoneIdRef:v}),ot=p.useRef(null),rt=p.useRef(null),wn=p.useRef(null);oN(ot,{enableCopy:!0,stopPropagation:!0});const zi=p.useCallback(q=>{var X;H(q.prompt),Q("agent"),(X=ot.current)==null||X.focus(),Tt.track("inspiration_selected",{promptLength:q.prompt.length,modelType:q.modelType})},[]),jr=p.useCallback(q=>{var X;H(q.content),q.modelType&&(q.modelType==="image"?Q("image"):q.modelType==="video"?Q("video"):q.modelType==="audio"?Q("audio"):q.modelType==="text"?Q("text"):q.modelType==="agent"&&Q("agent")),(X=ot.current)==null||X.focus()},[]),Ee=p.useCallback(()=>{const q=bf.find(X=>X.id==="knowledge-base");q&&(window.__kbPendingNavigation={directoryName:"Skill",autoCreateNote:!0},xf.openTool(q),setTimeout(()=>{window.dispatchEvent(new CustomEvent("kb:navigate",{detail:{directoryName:"Skill",autoCreateNote:!0}}))},300))},[]),Os=p.useCallback(()=>{const q=bf.find(X=>X.id==="banana-prompt");if(!q){console.warn("[AIInputBar] Banana prompt tool not found");return}xf.openTool(q)},[]),ds=p.useCallback(()=>{if(!(P!=="image"&&P!=="video")){if(!A.trim()){pe.warning(n==="zh"?"请先输入提示词":"Please enter a prompt first");return}te(!0)}},[P,n,A]),au=p.useCallback(async q=>{try{const X=new Image;X.onload=()=>{const ie={type:"image",url:q.url,name:q.name||`素材-${Date.now()}`,width:X.naturalWidth||void 0,height:X.naturalHeight||void 0};Pe(ke=>[...ke,ie]),we(!1)},X.onerror=()=>{const ie={type:"image",url:q.url,name:q.name||`素材-${Date.now()}`};Pe(ke=>[...ke,ie]),we(!1)},X.src=q.url}catch(X){console.error("Failed to select asset from library:",X),we(!1)}},[]),Ja=p.useCallback(()=>{var q;(q=wn.current)==null||q.click()},[]),Qa=p.useCallback(q=>new Promise((X,ie)=>{const ke=new FileReader;ke.onload=()=>{const ye=ke.result,Le=new Image;Le.onload=()=>{X({url:ye,width:Le.naturalWidth,height:Le.naturalHeight})},Le.onerror=()=>{X({url:ye,width:0,height:0})},Le.src=ye},ke.onerror=ie,ke.readAsDataURL(q)}),[]),ms=p.useCallback(async q=>{const X=Array.from(q);if(X.length===0)return;const ie=[];for(const[ke,ye]of X.entries()){if(!ye.type.startsWith("image/")){pe.error(tt.invalidFile);continue}if(ye.size>25*1024*1024){pe.error(tt.fileTooLarge);continue}try{let Le=ye;if(ye.size>10*1024*1024){const{compressImageBlob:at,getCompressionStrategy:Dt}=await Ce(async()=>{const{compressImageBlob:sn,getCompressionStrategy:ht}=await import("./tool-windows-DWUG3k_L.js").then(Mn=>Mn.on);return{compressImageBlob:sn,getCompressionStrategy:ht}},__vite__mapDeps([0]),import.meta.url),qt=Dt(ye.size/(1024*1024)),zn=pe.loading({content:tt.compressing(ye.size/(1024*1024)),duration:0,placement:"top"});try{Le=await at(ye,qt.targetSizeMB),pe.close(zn),pe.success({content:tt.compressed(ye.size/(1024*1024),Le.size/(1024*1024)),duration:2})}catch(sn){pe.close(zn),console.error("[AIInputBar] Failed to compress image:",sn),pe.error(tt.compressionFailed);continue}}const wt=Le instanceof File?Le:new File([Le],ye.name||`pasted-image-${Date.now()}.png`,{type:Le.type||ye.type||"image/png"});d(wt,Ei.IMAGE,Kb.LOCAL,wt.name).catch(at=>{console.warn("[AIInputBar] Failed to add asset to library:",at)});const{url:Pt,width:nt,height:pt}=await Qa(wt);ie.push({type:"image",url:Pt,name:wt.name||`上传图片 ${ke+1}`,width:nt||void 0,height:pt||void 0})}catch(Le){console.error("[AIInputBar] Failed to import local image:",Le),pe.error(tt.loadFailed)}}ie.length>0&&Pe(ke=>[...ke,...ie])},[d,Qa,tt]),Pr=p.useCallback(async q=>{const X=q.target.files;!X||X.length===0||(await ms(X),q.target.value="")},[ms]),el=p.useCallback(q=>{me(q)},[]),tl=p.useRef(null),Ar=p.useCallback(q=>{if(tl.current=q,!q)return;const X=sL(q.width,q.height,O);X&&Nt(ie=>({...ie,size:X}))},[O]),lu=p.useCallback(q=>{q<_e.length&&Pe(X=>X.filter((ie,ke)=>ke!==q))},[_e.length]);p.useEffect(()=>{b.current(Te.map(q=>({type:q.type,url:q.url,text:q.text,name:q.name})))},[Te]),p.useEffect(()=>{const q=X=>{var nt,pt;const ie=(nt=X.clipboardData)==null?void 0:nt.items;if(!ie||ie.length===0||!Array.from(ie).some(at=>at.type.startsWith("image/")))return;const ye=document.activeElement,Le=rt.current;if(!(!!Le&&(Le.contains(ye)||Qe&&(ye===document.body||(ye==null?void 0:ye.tagName)==="BODY"))))return;const Pt=[];for(const at of Array.from(ie)){if(!at.type.startsWith("image/"))continue;const Dt=at.getAsFile();Dt&&Pt.push(Dt)}Pt.length!==0&&(X.preventDefault(),ms(Pt),(pt=ot.current)==null||pt.focus())};return document.addEventListener("paste",q),()=>{document.removeEventListener("paste",q)}},[ms,Qe]);const Bi=p.useCallback(()=>{if(Me.current!==null){const q=Me.current;H(X=>X.substring(0,q)+X.substring(q+1)),Me.current=null}},[]),zs=p.useCallback(q=>{const X=xL(P,q.type);Tt.track("ai_input_change_model",{model:q.id,type:q.type,profileId:q.sourceProfileId||null}),Bi(),Q(X),K(q.id);const ie=ea(q);fe(ie),gL(X,{modelId:q.id,modelRef:ie,providerIdHint:q.sourceProfileId||(ie==null?void 0:ie.profileId),vendorHint:q.vendor}),Nt(X==="agent"?{}:Fu(X,q.id,ys(q.id,ie))),re(!1),setTimeout(()=>{var ke;return(ke=ot.current)==null?void 0:ke.focus()},0)},[Bi,P]),R=p.useCallback(q=>{const X=Di(Re,q,G)||Di(Re,q,null)||so(q);X&&zs(X)},[zs,Re,G]),De=p.useCallback(q=>{zs(q)},[zs]);p.useEffect(()=>{const q=(nt,pt)=>{const at=Object.keys(nt),Dt=Object.keys(pt);return at.length!==Dt.length?!1:at.every(qt=>nt[qt]===pt[qt])},X=P==="agent"?"agent":`${P}:${ys(O,G)}`,ie=P==="agent"?{}:be.current===X?Xe.current||{}:Fu(P,O,ys(O,G),Xe.current),ke={},ye=Ye.find(nt=>nt.id==="size"),Le=ie.size,wt=!Le||!(ye!=null&&ye.options)||ye.options.some(nt=>nt.value===Le);!O.startsWith("mj")&&ye&&(ke.size=Le&&wt?Le:ye.defaultValue||fd(O)),Ye.forEach(nt=>{if(nt.id==="size")return;const pt=ie[nt.id],at=!pt||nt.valueType!=="enum"||!nt.options||nt.options.some(Dt=>Dt.value===pt);pt&&at?ke[nt.id]=pt:nt.defaultValue&&(ke[nt.id]=nt.defaultValue)});const Pt=_x(O,ke);q(Xe.current||{},Pt)||(Nt(Pt),Xe.current=Pt),be.current=X},[P,O,G,Ye]),p.useEffect(()=>{dL({generationType:P,selectedModel:O,selectedParams:Ve,selectedCount:ze,selectedSkillId:se}),P!=="agent"&&mL(P,O,Ve,ys(O,G))},[P,O,G,Ve,ze,se]);const Je=p.useCallback((q,X,ie)=>{Bi(),Nt(ke=>{const ye={...ke};return X===void 0||X===""?delete ye[q]:ye[q]=X,ye}),ie!=null&&ie.keepOpen||(ve(!1),setTimeout(()=>{var ke;return(ke=ot.current)==null?void 0:ke.focus()},0))},[Bi]),jt=p.useCallback(q=>{Bi(),W(q),Fe(!1),setTimeout(()=>{var X;return(X=ot.current)==null?void 0:X.focus()},0)},[Bi]),An=p.useCallback(async()=>{var q,X,ie,ke,ye,Le,wt,Pt,nt;if(!(!A.trim()&&Te.length===0)&&!He){Z(!0);try{const pt=P==="video"?"video":P==="audio"?"audio":P==="text"||P==="agent"?"text":"image",at=tc(pt,G||O);if(console.log("[AIInputBar][handleGenerate] API Key 检查:",{hasApiKey:at}),!at){console.log("[AIInputBar][handleGenerate] 弹窗获取 API Key...");const ce=await qS();if(console.log("[AIInputBar][handleGenerate] API Key 输入完成:",{hasNewKey:!!ce}),!ce){Z(!1);return}console.log("[AIInputBar][handleGenerate] API Key 输入后设置状态:",{hasApiKey:tc(pt,G||O)})}const Dt=Te.filter(ce=>ce.type==="image"&&ce.url),qt=Te.filter(ce=>ce.type==="graphics"&&ce.url),zn=[...Dt,...qt].map(ce=>{if(ce.width&&ce.height)return{width:ce.width,height:ce.height}}).filter(ce=>ce!==void 0),sn={texts:Te.filter(ce=>ce.type==="text"&&ce.text).map(ce=>ce.text),images:Dt.map(ce=>ce.url),videos:Te.filter(ce=>ce.type==="video"&&ce.url).map(ce=>ce.url),graphics:qt.map(ce=>ce.url),imageDimensions:zn},ht=g5(A,sn,{modelId:O,modelRef:G,params:Ve,generationType:P,count:ze}),Mn=[...sn.images,...sn.graphics];let on;if(P==="agent"&&se!==Gl){const ce=KR(se);if(ce)try{on=await vl(ht,ce,Mn)}catch(ct){console.warn("[AIInputBar] 系统 Skill 工作流转换失败,降级到通用工作流:",ct),on=Qs(ht,Mn)}else{const ct=YR(se);if(ct){console.log(`[AIInputBar] 外部 Skill: id=${ct.id} name=${ct.name} outputType=${ct.outputType} contentLen=${((q=ct.content)==null?void 0:q.length)||0}`);try{on=await vl(ht,{id:ct.id,name:ct.name,type:"external",content:ct.content,outputType:ct.outputType},Mn,()=>{console.log("[AIInputBar] AI 正在解析外部 Skill 工作流...")})}catch(kt){console.warn("[AIInputBar] 外部 Skill 工作流转换失败,降级到角色扮演:",kt),on=await vl(ht,{id:ct.id,name:ct.name,type:"external",content:ct.content,outputType:ct.outputType},Mn).catch(()=>Qs(ht,Mn))}}else try{const kt=await pd.getNoteById(se);if(kt){const fn=((X=kt.metadata)==null?void 0:X.outputType)||void 0;on=await vl(ht,{id:kt.id,name:kt.title,type:"user",content:kt.content,outputType:fn},Mn,()=>{console.log("[AIInputBar] AI 正在解析工作流...")})}else on=Qs(ht,Mn)}catch{on=Qs(ht,Mn)}}on||(console.warn("[AIInputBar] Skill 工作流未能生成,降级到通用工作流"),on=Qs(ht,Mn))}else on=Qs(ht,Mn);console.log("[AIInputBar][handleGenerate] 即将创建 WorkZone, workflow.steps:",on.steps.length);const de=xt.current;if(de){const fn=(ie=de.host)==null?void 0:ie.getBoundingClientRect(),ln=((ke=de.viewport)==null?void 0:ke.zoom)||1,vn=((Le=(ye=de.viewport)==null?void 0:ye.origination)==null?void 0:Le[0])||0,Ni=((Pt=(wt=de.viewport)==null?void 0:wt.origination)==null?void 0:Pt[1])||0,Vr=de.children.filter(kn=>kn.type!=="workzone"),sl=vn+((fn==null?void 0:fn.width)||0)/2/ln,Ur=Ni+((fn==null?void 0:fn.height)||0)/2/ln;let Gn=sl-200,At=Ur,_o=Gn,hs=Ur-240/2;if(Vr.length>0){const kn=ut(de);let hn=!1;if(kn.length>0)try{const gn=It(de,kn,!1);kn.every(Hn=>ee.isDrawElement(Hn)&&ee.isImage(Hn)||_y(Hn))&&gn.width>gn.height?(Gn=gn.x+gn.width+50,At=gn.y):(Gn=gn.x,At=gn.y+gn.height+50),_o=Gn,hs=At,hn=!0}catch(gn){console.warn("[AIInputBar] Failed to calculate position for selected elements:",gn)}if(!hn){let gn=null,qr=-1/0;for(const Hn of Vr)try{const Co=It(de,[Hn],!1),Lr=Co.y+Co.height;Lr>qr&&(qr=Lr,gn=Hn)}catch(Co){console.warn("[AIInputBar] Failed to get rectangle for element:",Co)}if(gn){const Hn=It(de,[gn],!1);Gn=Hn.x,At=Hn.y+Hn.height+50,_o=Gn,hs=At}}}const Gs=ws(on),Io=tl.current;let Rr,Hs,jp;if(Io){const kn=de.children.find(hn=>hn.id===Io.id);if(kn&&Ri(kn)){Rr=Io.id,Hs={width:Io.width,height:Io.height};const hn=Ae.getRectangleByPoints(kn.points);jp=hn,Gn=hn.x,At=hn.y}}if(ht.generationType==="image"){const kn=Math.max(ht.count??1,1),hn=kn>1,gn=hn?void 0:Rr,qr=hn?void 0:Hs,Hn=[],Co=`wf_batch_${on.id}`,Lr=gn?null:B5(de,[Gn,At],wf({workflowId:on.id,expectedInsertPosition:[Gn,At],requestedSize:ht.size,requestedCount:1,zoom:ln,title:Gs.name||"图片生成",...pu("submitted")}).size??{width:320,height:180},kn,{frameRect:hn?jp:void 0});for(let ii=0;ii<kn;ii+=1){let Or=wf({workflowId:on.id,expectedInsertPosition:[Gn,At],targetFrameId:gn,targetFrameDimensions:qr,frameAffinityId:hn?Rr:void 0,frameAffinityDimensions:hn?Hs:void 0,requestedSize:ht.size,requestedCount:hn?1:kn,batchId:hn?Co:void 0,batchIndex:hn?ii+1:void 0,batchTotal:hn?kn:void 0,zoom:ln,title:Gs.name||"图片生成",...pu("submitted")});if(!gn){const Ap=Lr?Lr[ii]??Or.position:Or.position;Or={...Or,position:Ap,expectedInsertPosition:Ap}}const dv=Ws.insertAnchor(de,Or);Hn.push(dv)}w.current=Hn.map(ii=>ii.id),v.current=null,console.log("[AIInputBar][handleGenerate] Image Generation Anchor 已创建:",Hn.map(ii=>ii.id));const[Pp]=Hn;Pp&&setTimeout(()=>{const ii=Ae.getRectangleByPoints(Pp.points);hi(de,[ii.x+ii.width/2,ii.y+ii.height/2],100)},100)}else{const kn=Qt.insertWorkZone(de,{workflow:Gs,position:[_o,hs],size:{width:360,height:240},expectedInsertPosition:[Gn,At],targetFrameId:Rr,targetFrameDimensions:Hs,zoom:ln});v.current=kn.id,w.current=[],console.log("[AIInputBar][handleGenerate] WorkZone 已创建:",kn.id),setTimeout(()=>{const hn=_o+180,gn=hs+240/2;hi(de,[hn,gn],100)},100)}}const Lt={rawInput:A,userInstruction:ht.userInstruction,model:{id:ht.modelId,type:ht.generationType,isExplicit:ht.isModelExplicit},defaultModels:{audio:ji("audio").modelId||tr(),image:ji("image").modelId||"gemini-3-pro-image-preview-vip",video:ji("video").modelId||"veo3.1"},params:{count:ht.count,size:ht.size,duration:ht.duration},selection:sn,finalPrompt:ht.prompt},_n=ji("text").modelId,Bn={aiContext:Lt,referenceImages:Mn,textModel:_n};y.current=Bn;try{console.log("[AIInputBar][handleGenerate] 开始提交工作流 submitWorkflowToSW...");const ce=Date.now(),{usedSW:ct}=await Jt(ht,Mn,Bn,on);if(console.log("[AIInputBar][handleGenerate] submitWorkflowToSW 返回:",{usedSW:ct,耗时ms:Date.now()-ce}),ct){if(P==="image"&&N(de,"accepted"),A.trim()){const kt=Te.length>0;u(A.trim(),kt,P)}H(""),me([]),Pe([]),Ie.current&&clearTimeout(Ie.current),Ie.current=setTimeout(()=>{Z(!1),Ie.current=null},1e3);return}}catch(ce){console.warn("[AIInputBar] SW execution failed, falling back to main thread:",ce)}if(console.log("[AIInputBar] Fallback: Executing workflow in main thread:",on.steps.length,"steps"),P==="image"&&N(de,"handoff"),A.trim()){const ce=Te.length>0;u(A.trim(),ce,P)}H(""),me([]),Pe([]),Ie.current&&clearTimeout(Ie.current),Ie.current=setTimeout(()=>{Z(!1),Ie.current=null},1e3);const yn=[],Vn=[],il=(ce,ct)=>({onChunk:kt=>{g.current(kt)},onAddSteps:kt=>{l.updateStep(ce.id,"completed",{analysis:"completed"},void 0,Date.now()-ct);const fn=kt.map((vn,Ni)=>({...vn,status:vn.status==="completed"?"completed":"pending",options:{mode:"queue",batchId:`agent_${Date.now()}`,batchIndex:Ni+1,batchTotal:kt.length,globalIndex:Ni+1}}));l.addSteps(fn),Vn.push(...fn),kt.forEach(vn=>{h.current({type:"tool_call",timestamp:Date.now(),toolName:vn.mcp,args:vn.args})});const ln=ws(l.getWorkflow(),y.current||void 0);f.current(ln),v.current&&de&&Qt.updateWorkflow(de,v.current,ln)},onUpdateStep:(kt,fn,ln,vn)=>{l.updateStep(kt,fn,ln,vn),h.current({type:"tool_result",timestamp:Date.now(),toolName:kt,success:fn==="completed",data:ln,error:vn});const Ni=ws(l.getWorkflow(),y.current||void 0);f.current(Ni),v.current&&de&&Qt.updateWorkflow(de,v.current,Ni)}});let ps=!1;const Bs=()=>{const ce=ws(l.getWorkflow(),y.current||void 0);f.current(ce),v.current&&de&&Qt.updateWorkflow(de,v.current,ce)},Fs=async ce=>{var fn,ln,vn,Ni,Vr,sl,Ur;console.log("[AIInputBar] Executing step:",ce.mcp,"with mode:",(fn=ce.options)==null?void 0:fn.mode);const ct=Date.now(),kt=Vn.length;l.updateStep(ce.id,"running"),Bs();try{const Gn={...ce.options,...il(ce,ct)};console.log("[AIInputBar] Calling mcpRegistry.executeTool for:",ce.mcp);const At=await js.executeTool({name:ce.mcp,arguments:ce.args},Gn);console.log("[AIInputBar] Tool result:",{success:At.success,taskId:At.taskId,error:At.error});const _o=(vn=(ln=l.getWorkflow())==null?void 0:ln.steps.find(hs=>hs.id===ce.id))==null?void 0:vn.status;if(At.success){if(At.taskId)yn.push(At.taskId),l.updateStep(ce.id,"running",{taskId:At.taskId}),k(de,At.taskId,{workflowId:on.id,batchId:(Ni=ce.options)==null?void 0:Ni.batchId,batchIndex:(Vr=ce.options)==null?void 0:Vr.batchIndex});else if(_o==="running"){const hs=At.type==="text"&&At.data&&typeof At.data=="object"&&"content"in At.data?{content:At.data.content}:At.data;l.updateStep(ce.id,"completed",hs,void 0,Date.now()-ct);const Gs=ce.mcp==="generate_text"?(sl=At.data)==null?void 0:sl.content:ce.mcp==="ai_analyze"?(Ur=At.data)==null?void 0:Ur.response:void 0;if((ce.mcp==="generate_text"||ce.mcp==="ai_analyze")&&Gs&&Gs.trim()&&Vn.length===kt){const Hs={id:`${ce.id}-insert-text`,mcp:"insert_to_canvas",args:{items:[{type:"text",content:Gs}]},description:ce.mcp==="generate_text"?"将生成文本插入画布":"将 AI 回复插入画布",status:"pending"};l.addSteps([Hs]),Vn.push(Hs)}}}else return l.updateStep(ce.id,"failed",void 0,At.error||"执行失败",Date.now()-ct),!1;return!0}catch(Gn){return l.updateStep(ce.id,"failed",void 0,String(Gn)),!1}finally{Bs()}};for(const ce of on.steps){if(ps){l.updateStep(ce.id,"skipped"),Bs();continue}await Fs(ce)||(ps=!0)}if(!ps&&Vn.length>0){const ce=l.getWorkflow();for(const ct of Vn){if(ps){l.updateStep(ct.id,"skipped"),Bs();continue}const kt=(nt=l.getWorkflow())==null?void 0:nt.steps.find(ln=>ln.id===ct.id);if(!kt){console.warn(`[AIInputBar] Step ${ct.id} not found in workflow!`);continue}if(kt.status==="completed")continue;await Fs(kt)||(ps=!0)}}const fs=l.getWorkflow(),Fn=fs==null?void 0:fs.steps.every(ce=>ce.status==="completed"||ce.status==="failed"||ce.status==="skipped"),cu=yn.length>0;if(Fn&&!cu){const ce=v.current,ct=w.current,kt=xt.current;(ce||ct.length>0)&&kt&&(fs!=null&&fs.steps.every(ln=>{const vn=ln.result;return vn!=null&&vn.taskId?fu.isPostProcessingCompleted(vn.taskId):!0}))&&setTimeout(()=>{ce&&(Qt.removeWorkZone(kt,ce),v.current=null),ct.length>0&&(N(kt,"completed"),E(kt))},1500)}}catch(pt){console.error("Failed to create generation task:",pt),P==="image"&&N(xt.current,"failed",{error:pt instanceof Error?pt.message:"创建图片任务失败"}),l.abortWorkflow(),Z(!1)}}},[A,Te,He,O,G,l,Jt,u,Ve,P,ze,k,N,E]),ci=p.useCallback(async(q,X,ie)=>{var on;const ke=q.retryContext;if(!ke){console.error("[AIInputBar] No retry context available for workflow");return}ie&&(v.current=ie);const ye={id:q.id,name:q.name,description:`重试: ${q.name}`,scenarioType:q.steps.some(de=>de.mcp==="ai_analyze")?"agent_flow":"direct_generation",generationType:q.generationType,steps:q.steps.map((de,Lt)=>({id:de.id,mcp:de.mcp,args:de.args,description:de.description,status:Lt<X?de.status:"pending",result:Lt<X?de.result:void 0,error:Lt<X?de.error:void 0,duration:Lt<X?de.duration:void 0,options:de.options})),metadata:{prompt:q.prompt,userInstruction:ke.aiContext.userInstruction,rawInput:ke.aiContext.rawInput,modelId:ke.aiContext.model.id,isModelExplicit:ke.aiContext.model.isExplicit,count:q.count,size:ke.aiContext.params.size,duration:ke.aiContext.params.duration,referenceImages:ke.referenceImages,selection:ke.aiContext.selection},createdAt:Date.now()};l.startWorkflow(ye),h.current({type:"retry",timestamp:Date.now(),reason:`从步骤 ${X+1} 开始重试`,attempt:1});const Le=xt.current,wt=()=>{const de=ws(l.getWorkflow(),ke);f.current(de),v.current&&Le&&Qt.updateWorkflow(Le,v.current,de)},Pt=ws(ye,ke);f.current(Pt),v.current&&Le&&Qt.updateWorkflow(Le,v.current,Pt);const nt=(de,Lt)=>({onChunk:_n=>{g.current(_n)},onAddSteps:_n=>{l.updateStep(de.id,"completed",{analysis:"completed"},void 0,Date.now()-Lt);const Bn=_n.map((yn,Vn)=>({...yn,status:yn.status==="completed"?"completed":"pending",options:{mode:"queue",batchId:`agent_${Date.now()}`,batchIndex:Vn+1,batchTotal:_n.length,globalIndex:Vn+1}}));l.addSteps(Bn),pt.push(...Bn),_n.forEach(yn=>{h.current({type:"tool_call",timestamp:Date.now(),toolName:yn.mcp,args:yn.args})}),wt()},onUpdateStep:(_n,Bn,yn,Vn)=>{l.updateStep(_n,Bn,yn,Vn),h.current({type:"tool_result",timestamp:Date.now(),toolName:_n,success:Bn==="completed",data:yn,error:Vn}),wt()}}),pt=[];let at=!1;const Dt=new Map;q.steps.forEach(de=>{var _n;const Lt=(_n=de.result)==null?void 0:_n.taskId;Lt&&Dt.set(de.id,Lt)});const qt=async de=>{var Bn,yn,Vn,il,ps,Bs;const Lt=Date.now(),_n=pt.length;l.updateStep(de.id,"running"),wt();try{const Fs=Dt.get(de.id),fs={...de.options,...nt(de,Lt),...Fs?{retryTaskId:Fs}:{}},Fn=await js.executeTool({name:de.mcp,arguments:de.args},fs),cu=(yn=(Bn=l.getWorkflow())==null?void 0:Bn.steps.find(ce=>ce.id===de.id))==null?void 0:yn.status;if(Fn.success){if(Fn.taskId)l.updateStep(de.id,"running",{taskId:Fn.taskId}),k(Le,Fn.taskId,{workflowId:q.id,batchId:(Vn=de.options)==null?void 0:Vn.batchId,batchIndex:(il=de.options)==null?void 0:il.batchIndex});else if(cu==="running"){const ce=Fn.type==="text"&&Fn.data&&typeof Fn.data=="object"&&"content"in Fn.data?{content:Fn.data.content}:Fn.data;l.updateStep(de.id,"completed",ce,void 0,Date.now()-Lt);const ct=de.mcp==="generate_text"?(ps=Fn.data)==null?void 0:ps.content:de.mcp==="ai_analyze"?(Bs=Fn.data)==null?void 0:Bs.response:void 0;if((de.mcp==="generate_text"||de.mcp==="ai_analyze")&&ct&&ct.trim()&&pt.length===_n){const ln={id:`${de.id}-insert-text`,mcp:"insert_to_canvas",args:{items:[{type:"text",content:ct}]},description:de.mcp==="generate_text"?"将生成文本插入画布":"将 AI 回复插入画布",status:"pending"};l.addSteps([ln]),pt.push(ln)}}}else return l.updateStep(de.id,"failed",void 0,Fn.error||"执行失败",Date.now()-Lt),!1;return!0}catch(Fs){return l.updateStep(de.id,"failed",void 0,String(Fs)),!1}finally{wt()}},zn=ye.steps.slice(X);for(const de of zn){if(at){l.updateStep(de.id,"skipped"),wt();continue}await qt(de)||(at=!0)}if(!at&&pt.length>0)for(const de of pt){if(at){l.updateStep(de.id,"skipped"),wt();continue}const Lt=(on=l.getWorkflow())==null?void 0:on.steps.find(Bn=>Bn.id===de.id);if(!Lt||Lt.status==="completed")continue;await qt(Lt)||(at=!0)}const sn=l.getWorkflow(),ht=sn==null?void 0:sn.steps.every(de=>de.status==="completed"||de.status==="failed"||de.status==="skipped"),Mn=sn==null?void 0:sn.steps.some(de=>{var Lt;return(Lt=de.result)==null?void 0:Lt.taskId});if(ht&&!Mn){const de=v.current,Lt=xt.current;de&&Lt&&(sn!=null&&sn.steps.every(Bn=>{const yn=Bn.result;return yn!=null&&yn.taskId?fu.isPostProcessingCompleted(yn.taskId):!0}))&&setTimeout(()=>{Qt.removeWorkZone(Lt,de),v.current=null},1500)}},[l,k]);p.useEffect(()=>{x.current(ci);const q=xt.current;q&&(q.__executeWorkflowRetry=ci)},[ci]);const Mr=p.useCallback(q=>{var X;if(!q.nativeEvent.isComposing&&!(q.key==="Enter"&&(q.shiftKey||q.altKey))){if((B||xe||Be)&&(q.key==="Enter"||q.key==="Tab")){q.preventDefault();return}if(q.key==="Enter"){q.preventDefault(),Tt.track("ai_input_submit_keyboard"),An();return}if(q.key==="Escape"){dt(!1),(X=ot.current)==null||X.blur();return}}},[An]),rv=p.useCallback(()=>{Tt.track("ai_input_focus_textarea"),dt(!0)},[]),av=p.useCallback(()=>{Tt.track("ai_input_blur_textarea"),dt(!1)},[]),lv=p.useCallback(q=>{const X=q.target.value,ie=q.target.selectionStart||X.length;if(H(X),ie>0){const ke=X[ie-1],ye=ie>1?X[ie-2]:" ";ke==="#"&&(ye===" "||ye===`
|
|
552
|
+
`||ie===1)&&(Me.current=ie-1,re(!0),ve(!1),Fe(!1))}},[]),cv=p.useMemo(()=>JSON.stringify({generationType:P,model:O,profileId:(G==null?void 0:G.profileId)||null,hasAttachedContent:Te.length>0,attachedCount:Te.length,promptLengthBucket:bL(A.trim().length)}),[Te.length,P,A,O,G==null?void 0:G.profileId]),Ip=A.trim().length>0||Te.length>0,Cp=bt===!0,uv=oe.some(q=>{var X;return q.type==="text"&&((X=q.text)==null?void 0:X.trim())}),nl=Qe||Te.length>0||ue;return c.jsxDEV("div",{ref:rt,className:ne("ai-input-bar",Yt,e,{"ai-input-bar--with-inspiration":Cp}),"data-testid":"ai-input-bar",children:[c.jsxDEV(MN,{language:n,onSelectionChange:el,externalBoardRef:xt,onCanvasEmptyChange:L,isDataReady:t,onFrameSelected:Ar},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3553,columnNumber:9},void 0),c.jsxDEV(j5,{isCanvasEmpty:Cp,onSelectPrompt:zi,onOpenPromptTool:Os},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3562,columnNumber:9},void 0),c.jsxDEV("div",{className:ne("ai-input-bar__container",{"ai-input-bar__container--expanded":nl}),children:[c.jsxDEV("div",{className:"ai-input-bar__bottom-bar",children:[c.jsxDEV("input",{ref:wn,type:"file",accept:"image/*",multiple:!0,onChange:Pr,style:{display:"none"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3574,columnNumber:13},void 0),c.jsxDEV("button",{className:"ai-input-bar__upload-btn",onMouseDown:q=>{q.preventDefault(),q.stopPropagation()},onClick:Ja,title:n==="zh"?"上传图片":"Upload images","data-track":"ai_input_click_upload",children:c.jsxDEV(Ga,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3593,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3583,columnNumber:13},void 0),c.jsxDEV("button",{className:"ai-input-bar__library-btn",onMouseDown:q=>{q.preventDefault(),q.stopPropagation()},onClick:()=>we(!0),title:n==="zh"?"从素材库选择":"Select from library","data-track":"ai_input_click_library",children:c.jsxDEV(Fa,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3606,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3596,columnNumber:13},void 0),c.jsxDEV(P5,{value:P,onSelect:Q,disabled:He},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3609,columnNumber:13},void 0),P==="agent"&&c.jsxDEV(_5,{value:se,onSelect:z,onAddSkill:Ee,disabled:He},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3617,columnNumber:15},void 0),c.jsxDEV(xx,{selectedModel:O,selectedSelectionKey:ys(O,G),onSelect:R,onSelectModel:De,language:n,models:Re,header:n==="zh"?"选择模型 (↑↓ Tab)":"Select model (↑↓ Tab)",isOpen:B,onOpenChange:et},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3625,columnNumber:13},void 0),P!=="agent"&&Ye.length>0&&c.jsxDEV(b3,{selectedParams:Ve,onParamChange:Je,compatibleParams:Ye,modelId:O,language:n,isOpen:xe,onOpenChange:vt},O,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3646,columnNumber:15},void 0),P!=="agent"&&P!=="text"&&P!=="audio"&&c.jsxDEV(A5,{value:ze,onSelect:jt,disabled:He,isOpen:Be,onOpenChange:he},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3661,columnNumber:15},void 0),c.jsxDEV("div",{className:"ai-input-bar__bottom-spacer"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3670,columnNumber:13},void 0),c.jsxDEV("button",{className:`ai-input-bar__send-btn ${Ip?"active":""} ${He?"loading":""}`,onMouseDown:q=>{q.preventDefault(),q.stopPropagation()},onClick:()=>An(),disabled:!Ip||He,"data-track":"ai_input_click_send","data-track-params":cv,"data-testid":"ai-send-btn",children:c.jsxDEV(LS,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3686,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3672,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3573,columnNumber:11},void 0),c.jsxDEV("div",{className:ne("ai-input-bar__input-area",{"ai-input-bar__input-area--expanded":nl}),children:[Te.length>0&&c.jsxDEV("div",{className:"ai-input-bar__content-preview",children:c.jsxDEV(iN,{items:Te,language:n,enableHoverPreview:!0,onRemove:lu,removableStartIndex:_e.length},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3697,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3696,columnNumber:15},void 0),c.jsxDEV(x3,{onSelectPrompt:jr,language:n,extraActions:nl&&(P==="image"||P==="video")?c.jsxDEV("button",{type:"button",className:"prompt-history-popover__action-btn",onMouseDown:q=>{q.preventDefault(),q.stopPropagation(),dt(!0)},onClick:ds,title:n==="zh"?"优化提示词":"Optimize prompt","aria-label":n==="zh"?"优化提示词":"Optimize prompt","data-track":"ai_input_click_prompt_optimize",children:c.jsxDEV(Cm,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3728,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3713,columnNumber:19},void 0):null},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3707,columnNumber:13},void 0),c.jsxDEV("div",{className:"ai-input-bar__rich-input",children:c.jsxDEV("textarea",{ref:ot,className:ne("ai-input-bar__input",{"ai-input-bar__input--focused":Qe}),value:A,onChange:lv,onKeyDown:Mr,onFocus:rv,onBlur:av,placeholder:P==="agent"?n==="zh"?"输入指令,让 Agent 为你工作...":"Type instructions for Agent...":P==="text"?n==="zh"?"输入你想生成的文本内容、文章、摘要或 Markdown":"Describe the text, article, summary, or markdown you want":P==="audio"?uv?n==="zh"?"已有文本,无需额外提示词,直接发送":"Text already selected. No extra prompt needed, just send":n==="zh"?"描述你想要生成的音乐、风格、歌词或情绪":"Describe the music, style, lyrics, or mood you want":n==="zh"?`描述你想要创建的${P==="image"?"图片":"视频"}`:`Describe the ${P==="image"?"image":"video"} you want to create`,rows:nl?4:1,disabled:He,"data-testid":"ai-input-textarea"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3735,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3734,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3690,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3568,columnNumber:9},void 0),je&&c.jsxDEV(OS,{isOpen:je,onClose:()=>we(!1),mode:ns.SELECT,filterType:Ei.IMAGE,onSelect:au},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3779,columnNumber:11},void 0),c.jsxDEV(U5,{open:ue,onOpenChange:te,originalPrompt:A,language:n,type:P==="video"?"video":"image",allowStructuredMode:!0,defaultMode:"structured",onApply:q=>{H(q),dt(!0),requestAnimationFrame(()=>{var X;(X=ot.current)==null||X.focus()})}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3788,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/ai-input-bar/AIInputBar.tsx",lineNumber:3541,columnNumber:7},void 0)});VN.displayName="AIInputBar";function yL({isDataReady:e,activationKey:t}){const n=p.useRef(null);return p.useEffect(()=>{if(t<=0)return;const i=window.setTimeout(()=>{var o;const s=(o=n.current)==null?void 0:o.querySelector('[data-testid="ai-input-textarea"]');s==null||s.focus()},0);return()=>{window.clearTimeout(i)}},[t]),c.jsxDEV(p3,{children:c.jsxDEV(BS,{children:c.jsxDEV("div",{ref:n,children:c.jsxDEV(VN,{isDataReady:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/startup/DeferredAIInputBar.tsx",lineNumber:38,columnNumber:11},this)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/startup/DeferredAIInputBar.tsx",lineNumber:37,columnNumber:9},this)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/startup/DeferredAIInputBar.tsx",lineNumber:36,columnNumber:7},this)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/startup/DeferredAIInputBar.tsx",lineNumber:35,columnNumber:5},this)}const UN=an.memo(({session:e,isActive:t,onSelect:n,onDelete:i,onRename:s})=>{const[o,r]=p.useState(!1),[a,l]=p.useState(e.title),u=p.useRef(null),d=p.useCallback(()=>{o||n()},[n,o]),m=p.useCallback(w=>{w.stopPropagation(),i()},[i]),f=p.useCallback(w=>{w.stopPropagation(),l(e.title),r(!0)},[e.title]),h=p.useCallback(()=>{const w=a.trim();w&&w!==e.title&&s(w),r(!1)},[a,e.title,s]),g=p.useCallback(()=>{l(e.title),r(!1)},[e.title]),b=p.useCallback(w=>{w.key==="Enter"?(w.preventDefault(),h()):w.key==="Escape"&&(w.preventDefault(),g())},[h,g]),x=p.useCallback(w=>{l(w.target.value)},[]);p.useEffect(()=>{o&&u.current&&(u.current.focus(),u.current.select())},[o]);const y=p.useMemo(()=>{const w=new Date(e.updatedAt),v=new Date;return w.toDateString()===v.toDateString()?w.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):w.toLocaleDateString("zh-CN",{month:"short",day:"numeric"})},[e.updatedAt]);return c.jsxDEV("div",{className:`session-item ${t?"session-item--active":""} ${o?"session-item--editing":""}`,"data-track":"chat_click_session_select",onClick:d,role:"button",tabIndex:0,onKeyDown:w=>!o&&w.key==="Enter"&&d(),children:[c.jsxDEV("div",{className:"session-item__content",children:[o?c.jsxDEV("input",{ref:u,className:"session-item__title-input",value:a,onChange:x,onKeyDown:b,onBlur:h,onClick:w=>w.stopPropagation(),maxLength:50},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:101,columnNumber:13},void 0):c.jsxDEV("div",{className:"session-item__title",children:e.title},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:112,columnNumber:13},void 0),c.jsxDEV("div",{className:"session-item__time",children:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:114,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:99,columnNumber:9},void 0),!o&&c.jsxDEV("div",{className:"session-item__actions",children:[c.jsxDEV("button",{className:"session-item__edit","data-track":"chat_click_session_edit",onClick:f,"aria-label":`编辑会话标题: ${e.title}`,children:c.jsxDEV(FS,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:124,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:118,columnNumber:13},void 0),c.jsxDEV("button",{className:"session-item__delete","data-track":"chat_click_session_delete",onClick:m,"aria-label":`删除会话: ${e.title}`,children:c.jsxDEV(GS,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:132,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:126,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:117,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionItem.tsx",lineNumber:91,columnNumber:7},void 0)});UN.displayName="SessionItem";const RN=an.memo(({sessions:e,activeSessionId:t,onSelectSession:n,onNewSession:i,onDeleteSession:s,onRenameSession:o})=>{const[r,a]=an.useState(null),l=p.useCallback(h=>{n(h)},[n]),u=p.useCallback(h=>{a(h)},[]),d=p.useCallback(()=>{r&&(s(r),a(null))},[r,s]),m=p.useCallback(()=>{a(null)},[]),f=p.useCallback((h,g)=>{o(h,g)},[o]);return c.jsxDEV("div",{className:"session-list",children:[c.jsxDEV("div",{className:"session-list__header",children:[c.jsxDEV("span",{className:"session-list__title",children:"会话列表"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:49,columnNumber:11},void 0),c.jsxDEV("button",{className:"session-list__new-btn","data-track":"chat_click_session_new",onClick:i,"aria-label":"新建会话",children:[c.jsxDEV(Tm,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:56,columnNumber:13},void 0),c.jsxDEV("span",{children:"新建"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:57,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:50,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:48,columnNumber:9},void 0),c.jsxDEV("div",{className:"session-list__items",children:e.length===0?c.jsxDEV("div",{className:"session-list__empty",children:"暂无会话"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:62,columnNumber:13},void 0):e.map(h=>c.jsxDEV(UN,{session:h,isActive:h.id===t,onSelect:()=>l(h.id),onDelete:()=>u(h.id),onRename:g=>f(h.id,g)},h.id,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:65,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:60,columnNumber:9},void 0),c.jsxDEV(ix,{open:r!==null,title:"删除会话",description:"确定删除此会话吗?删除后无法恢复。",confirmText:"删除",cancelText:"取消",danger:!0,onOpenChange:h=>{h||m()},onConfirm:d},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:77,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/SessionList.tsx",lineNumber:47,columnNumber:7},void 0)});RN.displayName="SessionList";const qN=an.memo(({isOpen:e,onClick:t,drawerWidth:n})=>{const i=e&&n?{right:n-18}:void 0;return c.jsxDEV(nn,{content:e?"收起对话":"展开对话",children:c.jsxDEV("button",{className:`chat-drawer-trigger ${e?"chat-drawer-trigger--active":""}`,"data-track":e?"chat_click_drawer_close":"chat_click_drawer_open",onClick:t,"aria-label":e?"收起对话":"展开对话","aria-expanded":e,style:i,children:c.jsxDEV(bx,{size:16,className:"chat-drawer-trigger__icon"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawerTrigger.tsx",lineNumber:38,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawerTrigger.tsx",lineNumber:26,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawerTrigger.tsx",lineNumber:25,columnNumber:7},void 0)});qN.displayName="ChatDrawerTrigger";function vc(e){return e.sourceProfileName||Ix[e.vendor]||e.id}const NL=an.memo(({model:e})=>{const t=ZS(e.sourceProfileId,e.id);return t?c.jsxDEV("span",{className:"model-selector__item-price",children:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:60,columnNumber:12},void 0):null}),vL=an.memo(({model:e})=>{const t=JS(e.sourceProfileId,e.id);return t!=null&&t.description?c.jsxDEV("div",{className:"model-selector__item-desc",children:t.description},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:69,columnNumber:7},void 0):null});function kL(e,t){var o;const n=vc(e),i=(o=e.description)==null?void 0:o.trim(),s=(t==null?void 0:t.includeProvider)??!0;return i?!s||i.includes(n)?i:`${n} · ${i}`:s?n:""}function EL(e){return vc(e).trim().slice(0,1).toUpperCase()||"M"}const LN=an.memo(({className:e,value:t,valueRef:n,onChange:i,variant:s="capsule"})=>{var U;const o=Bo("text"),r=((U=o[0])==null?void 0:U.id)||HS,[a,l]=p.useState(r),[u,d]=p.useState(()=>ei(null,r)),m=t??a,f=n===void 0?u:n,[h,g]=p.useState(!1),[b,x]=p.useState(""),[y,w]=p.useState(null),v=p.useRef(null),S=p.useRef(null);p.useEffect(()=>{!t&&r&&a!==r&&(l(r),d(ei(null,r)))},[r,a,t]),p.useEffect(()=>{if(!h)return;const F=A=>{const H=A.target;v.current&&!v.current.contains(H)&&S.current&&!S.current.contains(H)&&(g(!1),x(""))},$=setTimeout(()=>{document.addEventListener("mousedown",F)},100);return()=>{clearTimeout($),document.removeEventListener("mousedown",F)}},[h]);const k=p.useMemo(()=>m?Np(m,f):null,[m,f]),N=p.useMemo(()=>{if(Nc(o,m,f)||!m)return o;const $=oo("text",m,f);return $?[$,...o]:o},[o,m,f]),E=p.useMemo(()=>Nc(N,m,f)||N.find(F=>F.id===m),[N,m,f]),I=p.useCallback(F=>{const $=ei(F.sourceProfileId||null,F.id);t===void 0&&l(F.id),n===void 0&&d($),i==null||i(F.id,$),g(!1),x("")},[t,n,i]),T=p.useCallback(()=>{const F=!h;g(F),F?w((E==null?void 0:E.vendor)||null):x("")},[E==null?void 0:E.vendor,h]),j=p.useMemo(()=>{const F=new Map,$=[];return N.forEach(A=>{F.has(A.vendor)||($.push(A.vendor),F.set(A.vendor,0)),F.set(A.vendor,(F.get(A.vendor)??0)+1)}),$.map(A=>({id:A,label:Ix[A],count:F.get(A)??0,icon:c.jsxDEV(WS,{vendor:A,size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:225,columnNumber:15},void 0)}))},[N]),V=p.useCallback(F=>{w(F)},[]),_=p.useMemo(()=>{const F=b.toLowerCase().trim();return F?N.filter($=>{var H,ue;const A=vc($).toLowerCase();return $.id.toLowerCase().includes(F)||$.label.toLowerCase().includes(F)||((H=$.shortLabel)==null?void 0:H.toLowerCase().includes(F))||((ue=$.description)==null?void 0:ue.toLowerCase().includes(F))||A.includes(F)}):y?N.filter($=>$.vendor===y):N},[b,y,N]),[D,C]=p.useState({top:0,left:0,width:0,bottom:0,placement:"bottom",maxHeight:480});p.useLayoutEffect(()=>{if(!h)return;const F=()=>{if(!S.current)return;const $=S.current.getBoundingClientRect(),A=window.innerHeight,H=A-$.bottom,ue=$.top,te=H<400&&ue>H?"top":"bottom",oe=te==="top"?ue-16:A-$.bottom-16;C({top:$.top,left:$.left,width:$.width,bottom:$.bottom,placement:te,maxHeight:Math.min(Math.max(oe,200),600)})};return F(),window.addEventListener("resize",F),window.addEventListener("scroll",F,!0),()=>{window.removeEventListener("resize",F),window.removeEventListener("scroll",F,!0)}},[h]);const M=()=>{if(!h)return null;const F=c.jsxDEV("div",{ref:v,className:"model-selector__dropdown",style:{position:"fixed",zIndex:Tn.DROPDOWN_PORTAL,left:D.left,top:D.placement==="bottom"?D.bottom+8:"auto",bottom:D.placement==="top"?window.innerHeight-D.top+8:"auto",minWidth:360,width:s==="form"?D.width:"auto",maxHeight:D.maxHeight,visibility:D.width===0?"hidden":"visible",transformOrigin:D.placement==="bottom"?"top left":"bottom left",display:"flex",flexDirection:"column"},onClick:$=>$.stopPropagation(),children:[c.jsxDEV("div",{className:"model-selector__search",children:c.jsxDEV($S,{value:b,onChange:x,placeholder:"搜索模型...",prefixIcon:c.jsxDEV(XS,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:339,columnNumber:27},void 0),clearable:!0,autofocus:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:335,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:334,columnNumber:11},void 0),c.jsxDEV(KS,{tabs:j,activeTab:y,onTabChange:V,searchQuery:b,compact:!0,children:c.jsxDEV("div",{className:"model-selector__list",children:_.length===0?c.jsxDEV("div",{className:"model-selector__empty",children:"未找到匹配的模型"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:354,columnNumber:17},void 0):_.map($=>{const A=vN($),H=A===k,ue=!!b.trim(),te=kL($,{includeProvider:!ue});return c.jsxDEV("button",{className:`model-selector__item ${H?"model-selector__item--active":""}`,"data-track":"chat_click_model_select",onClick:()=>I($),children:[c.jsxDEV("span",{className:"model-selector__item-icon model-selector__item-icon--text","aria-hidden":"true",children:EL($)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:372,columnNumber:23},void 0),c.jsxDEV("div",{className:"model-selector__item-content",children:[c.jsxDEV("div",{className:"model-selector__item-header",children:[c.jsxDEV("span",{className:"model-selector__item-name",children:$.shortLabel||$.label},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:380,columnNumber:27},void 0),ue?c.jsxDEV("span",{className:"model-selector__item-provider",children:vc($)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:384,columnNumber:29},void 0):null,c.jsxDEV(Nf,{modelId:$.id},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:388,columnNumber:27},void 0),c.jsxDEV(YS,{modelId:$.id},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:389,columnNumber:27},void 0),c.jsxDEV(NL,{model:$},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:390,columnNumber:27},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:379,columnNumber:25},void 0),te?c.jsxDEV("div",{className:"model-selector__item-desc",children:te},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:393,columnNumber:27},void 0):c.jsxDEV(vL,{model:$},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:397,columnNumber:27},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:378,columnNumber:23},void 0),H&&c.jsxDEV("svg",{className:"model-selector__check",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:c.jsxDEV("path",{d:"M13.3334 4L6.00002 11.3333L2.66669 8",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:408,columnNumber:27},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:401,columnNumber:25},void 0)]},A,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:364,columnNumber:21},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:352,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:345,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:306,columnNumber:9},void 0);return cs.createPortal(F,document.body)};return c.jsxDEV("div",{className:`model-selector ${e||""} model-selector--variant-${s}`,children:[c.jsxDEV("button",{ref:S,className:`model-selector__trigger ${h?"model-selector__trigger--active":""}`,"data-track":"chat_click_model_selector",onClick:T,"aria-label":"选择模型","aria-expanded":h,children:[c.jsxDEV("div",{className:"model-selector__trigger-content",children:[c.jsxDEV(Nf,{modelId:(E==null?void 0:E.id)||m,className:"model-selector__trigger-health"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:446,columnNumber:13},void 0),c.jsxDEV("span",{className:"model-selector__trigger-text",children:(E==null?void 0:E.shortLabel)||(E==null?void 0:E.label)||"选择模型"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:450,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:445,columnNumber:11},void 0),c.jsxDEV(ox,{size:16,className:`model-selector__trigger-icon ${h?"model-selector__trigger-icon--open":""}`},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:454,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:435,columnNumber:9},void 0),M()]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ModelSelector.tsx",lineNumber:430,columnNumber:7},void 0)});LN.displayName="ModelSelector";const ON=p.forwardRef(({selectedContent:e,onSend:t,disabled:n=!1,placeholder:i="输入消息..."},s)=>{const o=p.useRef(null),r=p.useRef(null),[a,l]=p.useState(""),u=e.length>0,{addHistory:d}=eu();p.useImperativeHandle(s,()=>({setContent:b=>{var x;l(b),(x=o.current)==null||x.focus()},getContent:()=>a,focus:()=>{var b;return(b=o.current)==null?void 0:b.focus()}}),[a]);const m=p.useCallback(()=>{const b=a.trim();if(!b&&e.length===0)return;const x=[];b&&x.push({type:"text",text:b}),e.forEach((w,v)=>{w.type==="image"||w.type==="graphics"?x.push({type:"data-file",data:{filename:`${w.type}-${v+1}.png`,mediaType:"image/png",url:w.url||""}}):w.type==="video"&&x.push({type:"data-file",data:{filename:`video-${v+1}.mp4`,mediaType:"video/mp4",url:w.url||""}})});const y={id:`msg_${Date.now()}`,role:"user",parts:x};b&&d(b,u,"agent"),Promise.resolve(t(y)).catch(w=>{console.error("[EnhancedChatInput] send failed:",w)}),l("")},[a,e,t,d,u]),f=p.useCallback(b=>{b.nativeEvent.isComposing||b.key==="Enter"&&!b.shiftKey&&(b.preventDefault(),m())},[m]);p.useEffect(()=>{o.current&&(o.current.style.height="auto",o.current.style.height=`${Math.min(o.current.scrollHeight,120)}px`)},[a]);const h=()=>e.length===0?null:c.jsxDEV("div",{className:"enhanced-chat-input__selection",children:c.jsxDEV(iN,{items:e,language:"zh",enableHoverPreview:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:138,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:137,columnNumber:7},void 0),g=(a.trim()||e.length>0)&&!n;return c.jsxDEV("div",{className:"enhanced-chat-input",ref:r,children:[h(),c.jsxDEV("div",{className:"enhanced-chat-input__form",children:[c.jsxDEV("div",{className:"enhanced-chat-input__input-wrapper",children:c.jsxDEV("textarea",{ref:o,className:"enhanced-chat-input__textarea",value:a,onChange:b=>l(b.target.value),onKeyDown:f,placeholder:u?"描述你想要的效果...":i,disabled:n,rows:4},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:155,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:154,columnNumber:9},void 0),c.jsxDEV("button",{className:`enhanced-chat-input__send ${g?"enhanced-chat-input__send--active":""}`,onClick:m,disabled:!g,"aria-label":"发送",children:c.jsxDEV(QS,{size:20},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:173,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:167,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:153,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/EnhancedChatInput.tsx",lineNumber:150,columnNumber:5},void 0)});ON.displayName="EnhancedChatInput";const xa={MAX_TITLE_LENGTH:30,DRAWER_MIN_WIDTH:320,DRAWER_MAX_WIDTH:500,DRAWER_DEFAULT_WIDTH_RATIO:.3},vo={DRAWER_STATE:"aitu:chat:drawer-state",ACTIVE_SESSION:"aitu:chat:active-session",DATABASE_NAME:"aitu-chat",SESSIONS_STORE:"sessions",MESSAGES_STORE:"messages"},Cr=Jo.createInstance({name:vo.DATABASE_NAME,storeName:vo.SESSIONS_STORE}),Us=Jo.createInstance({name:vo.DATABASE_NAME,storeName:vo.MESSAGES_STORE});function zN(){return eT()}function SL(e){const t=e.trim().replace(/\n/g," ");return t.length<=xa.MAX_TITLE_LENGTH?t:t.slice(0,xa.MAX_TITLE_LENGTH-3)+"..."}async function TL(){const e=Date.now(),t={id:zN(),title:"新对话",createdAt:e,updatedAt:e,messageCount:0};return await Cr.setItem(t.id,t),t}async function ru(e){return Cr.getItem(e)}async function DL(){const e=[];return await Cr.iterate(t=>{e.push(t)}),await new Promise(t=>{typeof window<"u"&&"requestIdleCallback"in window?window.requestIdleCallback(()=>t(),{timeout:50}):setTimeout(t,0)}),e.sort((t,n)=>n.updatedAt-t.updatedAt)}async function kp(e,t){const n=await ru(e);if(n){const i={...n,...t,updatedAt:Date.now()};await Cr.setItem(e,i)}}async function _L(e){const t=await BN(e);for(const n of t)await Us.removeItem(n.id);await Cr.removeItem(e)}async function IL(e){await Us.setItem(e.id,e);const t=await ru(e.sessionId);if(t){const n={messageCount:t.messageCount+1,updatedAt:Date.now()};await kp(e.sessionId,n)}}async function BN(e){const t=[];return await Us.iterate(n=>{n.sessionId===e&&t.push(n)}),t.sort((n,i)=>n.timestamp-i.timestamp)}async function CL(e,t){const n=await Us.getItem(e);if(n){const i={...n,...t};await Us.setItem(e,i)}}async function jL(e){const t=await Us.getItem(e);if(t){await Us.removeItem(e);const n=await ru(t.sessionId);n&&await kp(t.sessionId,{messageCount:Math.max(0,n.messageCount-1)})}}const bb={isOpen:!1,width:Math.min(xa.DRAWER_MAX_WIDTH,Math.max(xa.DRAWER_MIN_WIDTH,window.innerWidth*xa.DRAWER_DEFAULT_WIDTH_RATIO)),activeSessionId:null};function FN(){try{const e=localStorage.getItem(vo.DRAWER_STATE);if(e)return{...bb,...JSON.parse(e)}}catch(e){console.error("[ChatStorage] Failed to get drawer state:",e)}return bb}function PL(e){try{const n={...FN(),...e};localStorage.setItem(vo.DRAWER_STATE,JSON.stringify(n))}catch(t){console.error("[ChatStorage] Failed to set drawer state:",t)}}async function AL(){await Cr.clear(),await Us.clear(),localStorage.removeItem(vo.DRAWER_STATE)}const yt={createSession:TL,getSession:ru,getAllSessions:DL,updateSession:kp,deleteSession:_L,addMessage:IL,getMessages:BN,updateMessage:CL,deleteMessage:jL,getDrawerState:FN,setDrawerState:PL,clearAllData:AL,generateId:zN,generateTitle:SL};var oi=(e=>(e.SENDING="sending",e.STREAMING="streaming",e.SUCCESS="success",e.FAILED="failed",e))(oi||{}),gi=(e=>(e.USER="user",e.ASSISTANT="assistant",e))(gi||{});let Ai=null;function GN(e){const t={};let n=1,i=1,s=1,o=e;return o=o.replace(/data:image\/[^;]+;base64,[A-Za-z0-9+/=]+/g,r=>{const a=`[图片${n}]`;return t[a]=r,n++,a}),o=o.replace(/data:video\/[^;]+;base64,[A-Za-z0-9+/=]+/g,r=>{const a=`[视频${i}]`;return t[a]=r,i++,a}),o=o.replace(/blob:[^\s"'<>]+/g,r=>{const a=`[媒体${s}]`;return t[a]=r,s++,a}),o=o.replace(/https?:\/\/[^\s"'<>]+\.(png|jpg|jpeg|gif|webp|svg|bmp)(\?[^\s"'<>]*)?/gi,r=>{const a=`[图片${n}]`;return t[a]=r,n++,a}),o=o.replace(/https?:\/\/[^\s"'<>]+\.(mp4|webm|mov|avi|mkv)(\?[^\s"'<>]*)?/gi,r=>{const a=`[视频${i}]`;return t[a]=r,i++,a}),{sanitized:o,urlMap:t}}function ML(e,t){let n=e;for(const[i,s]of Object.entries(t))n=n.split(i).join(s);return n}async function VL(e,t={}){const n={};let i=t.maxImageCount??Number.POSITIVE_INFINITY;return{geminiMessages:await Promise.all(e.filter(o=>o.status==="success"||o.status==="streaming").map(async o=>{const{sanitized:r,urlMap:a}=GN(o.content);Object.assign(n,a);const l=[{type:"text",text:r}];if(t.includeImageAttachments&&o.role===gi.USER&&o.attachments&&o.attachments.length>0&&i>0){const u=await aT(o.attachments,i);i-=u.length,l.push(...u)}return{role:o.role===gi.USER?"user":"assistant",content:l}})),urlMap:n}}async function UL(e,t,n=[],i,s,o){return RL(e,t,n,i,s,o)}async function RL(e,t,n=[],i,s,o){Ai&&Ai.abort(),Ai=new AbortController;const r=Ai.signal,a=Date.now().toString(),l=Date.now(),u=(typeof s=="string"?s:s==null?void 0:s.modelId)||Ca.getConfig().modelName||"unknown";try{Tt.trackModelCall({taskId:a,taskType:"chat",model:u,promptLength:t.length,hasUploadedImage:n.length>0,startTime:l});const d=tT("text",s),m=nT(d==null?void 0:d.binding),f=iT(d==null?void 0:d.binding),h=sT(n),g=Math.max(f-h,0),{geminiMessages:b,urlMap:x}=await VL(e,{includeImageAttachments:m,maxImageCount:g}),{sanitized:y,urlMap:w}=GN(t),v={...x,...w},S=oT(b),k=Math.max(f-S,0),N=[{type:"text",text:y}];if(m&&n.length>0&&k>0){const j=await rT(n,k);N.push(...j)}const E=[];o&&E.push({role:"system",content:[{type:"text",text:o}]}),E.push(...b,{role:"user",content:N});let I="";if(await Ca.sendChat(E,j=>{if(r.aborted)return;const V=ML(j,v);I=V,i({type:"content",content:V})},r,s||void 0),r.aborted)throw new Error("Request cancelled");const T=Date.now()-l;return Tt.trackModelSuccess({taskId:a,taskType:"chat",model:u,duration:T,resultSize:I.length}),i({type:"done"}),Ai=null,I}catch(d){Ai=null;const m=Date.now()-l;if(r.aborted||d.message==="Request cancelled"||d.name==="AbortError")throw Tt.trackTaskCancellation({taskId:a,taskType:"chat",duration:m}),i({type:"done"}),new Error("Request cancelled");const f=d instanceof Error?d.message:"Unknown error occurred";throw Tt.trackModelFailure({taskId:a,taskType:"chat",model:u,duration:m,error:f}),i({type:"error",error:f}),d}}function qL(){Ai&&(Ai.abort(),Ai=null)}function LL(){return Ai!==null}const xb={sendChatMessage:UL,stopGeneration:qL,isGenerating:LL},tm="[[WORKFLOW_MESSAGE]]",OL=["generate_image","generate_video","generate_grid_image","generate_photo_wall"];function zL(e){var s;if(!OL.includes(e.name))return e;const t={...e.arguments},n=t.model;let i=!1;if(!n)i=!0;else{const o=fx(n),r=e.name==="generate_video";(r&&o!=="video"||!r&&o!=="image")&&(i=!0)}if(i){const o=$n.get(),r=e.name==="generate_video";let a;r?a=o.videoModelName||"veo3":a=o.imageModelName||((s=px[0])==null?void 0:s.id)||"gemini-2.5-flash-image-vip",t.model=a}return{...e,arguments:t}}function BL(e){const t=[];e.aiAnalysis&&t.push(e.aiAnalysis);const n=e.steps.filter(r=>r.status==="completed"),i=e.steps.filter(r=>r.status==="failed");if(n.length>0||i.length>0){const r=[];n.length>0&&r.push(`成功执行 ${n.length} 个工具`),i.length>0&&r.push(`${i.length} 个工具执行失败`),r.length>0&&t.push(`[执行结果: ${r.join(",")}]`)}const s=e.steps.map(r=>{const a={};for(const[l,u]of Object.entries(r.args||{}))l!=="context"&&(typeof u=="string"&&u.length>200?a[l]=u.substring(0,200)+"...":a[l]=u);return{mcp:r.mcp,args:a}}),o={content:t.join(`
|
|
553
|
+
`)||`已完成任务: ${e.name}`,next:s};return JSON.stringify(o)}function FL(e){const t=[{type:"text",text:e.content}];if(e.attachments&&e.attachments.length>0)for(const n of e.attachments)t.push({type:"data-file",data:{filename:n.name,mediaType:n.type,url:n.data}});return{id:e.id,role:e.role===gi.USER?"user":"assistant",parts:t}}function GL(e,t){const i=e.parts.filter(r=>r.type==="text").map(r=>r.text).join(""),o=e.parts.filter(r=>r.type==="data-file").map((r,a)=>{const l=r.data;return{id:`${e.id}-att-${a}`,name:l.filename,type:l.mediaType,size:0,data:l.url,isBlob:!1}});return{id:e.id,sessionId:t,role:e.role==="user"?gi.USER:gi.ASSISTANT,content:i,timestamp:Date.now(),status:oi.SUCCESS,attachments:o.length>0?o:void 0}}function HL(e){return e.workflow&&e.content.startsWith(tm)?{...e,content:BL(e.workflow)}:e}function wb(e){return e.parts.filter(t=>t.type==="text").map(t=>t.text).join("")}wN();function WL(e){const{sessionId:t,temporaryModel:n,onToolCalls:i,onWorkflowUpdate:s}=e,o=p.useRef(dx()),r=p.useRef(i);r.current=i;const a=p.useRef(s);a.current=s;const l=p.useRef(n);l.current=n;const[u,d]=p.useState([]),[m,f]=p.useState("ready"),[h,g]=p.useState(!1),b=p.useRef(null),x=p.useRef([]),y=p.useRef(!1);p.useEffect(()=>{if(!t){d([]),x.current=[];return}(async()=>{g(!0);try{const I=await yt.getMessages(t);x.current=I,d(I.map(FL))}catch(I){console.error("[useChatHandler] Failed to load messages:",I),d([]),x.current=[]}finally{g(!1)}})()},[t]);const w=p.useCallback(async E=>{if(!t)return;if(y.current){console.warn("[useChatHandler] Message already being sent, ignoring duplicate call");return}y.current=!0,f("submitted");const I=GL(E,t);await yt.addMessage(I),d(U=>[...U,E]);const T=await yt.getSession(t);await yt.updateSession(t,{updatedAt:Date.now(),messageCount:((T==null?void 0:T.messageCount)||0)+1});const j=yt.generateId();b.current=j;const V={id:j,role:"assistant",parts:[{type:"text",text:""}]};d(U=>[...U,V]),f("streaming");const _=x.current.map(HL);_.push(I),x.current=[...x.current,I];const D=wb(E);let C="",M=!1;try{await xb.sendChatMessage(_.slice(0,-1),D,I.attachments||[],U=>{if(U.type==="content"&&U.content)C=U.content,d(F=>F.map($=>$.id===j?{...$,parts:[{type:"text",text:C}]}:$));else if(U.type==="done"){const F=lT(C),$=cT(C)||C;if(F.length>0&&r.current){const H=F.map(oe=>zL(oe)),ue=async()=>{const oe=[];for(const me of H)try{const _e=await js.executeTool(me);oe.push({toolCall:me,success:_e.success,data:_e.data,error:_e.error,taskId:_e.taskId})}catch(_e){oe.push({toolCall:me,success:!1,error:_e.message||"工具执行失败"})}return oe},te=`${tm}${j}`;d(oe=>oe.map(me=>me.id===j?{...me,parts:[{type:"text",text:te}]}:me)),r.current(H,j,ue,$)}f("ready");const A={id:j,sessionId:t,role:gi.ASSISTANT,content:F.length>0?`${tm}${j}`:C,timestamp:Date.now(),status:F.length>0?oi.STREAMING:oi.SUCCESS};yt.addMessage(A),x.current=[...x.current,A],yt.updateSession(t,{updatedAt:Date.now(),messageCount:((T==null?void 0:T.messageCount)||0)+2}),b.current=null,y.current=!1}else if(U.type==="error"&&U.error){M=!0,f("error");const F=`❌ 错误: ${U.error}`;d(A=>A.map(H=>H.id===j?{...H,parts:[{type:"text",text:F}]}:H));const $={id:j,sessionId:t,role:gi.ASSISTANT,content:F,timestamp:Date.now(),status:oi.FAILED,error:U.error};yt.addMessage($),x.current=[...x.current,$],b.current=null,y.current=!1}},l.current,o.current)}catch(U){if(U.message!=="Request cancelled"&&!M){f("error"),console.error("[useChatHandler] Stream error:",U);const F=`❌ 错误: ${U.message||"未知错误"}`;if(d($=>$.map(A=>A.id===j?{...A,parts:[{type:"text",text:F}]}:A)),t&&j){const $={id:j,sessionId:t,role:gi.ASSISTANT,content:F,timestamp:Date.now(),status:oi.FAILED,error:U.message||"未知错误"};yt.addMessage($),x.current=[...x.current,$]}}b.current=null,y.current=!1}},[t]),v=p.useCallback(async()=>{if(xb.stopGeneration(),f("ready"),b.current&&t){const E=u.find(I=>I.id===b.current);if(E){const I=wb(E),T={id:E.id,sessionId:t,role:gi.ASSISTANT,content:I,timestamp:Date.now(),status:oi.SUCCESS};await yt.addMessage(T)}b.current=null}},[t,u]),S=p.useCallback(E=>{if(u.length<2)return;const I=[...u].reverse().findIndex(_=>_.role==="user");if(I===-1)return;const T=u.length-1-I,j=u[T],V=u.slice(0,T+1);d(V),w(j)},[u,w]),k=p.useCallback((E,I)=>{d(E),I&&(x.current=I)},[]),N=p.useCallback((E,I)=>{x.current=x.current.map(T=>T.id===E?{...T,workflow:I}:T)},[]);return{messages:u,status:m,sendMessage:w,stop:v,regenerate:S,setMessages:d,setMessagesWithRaw:k,updateRawMessageWorkflow:N,isLoading:h}}const $L=an.lazy(()=>Ce(()=>import("./ChatMessagesArea-D9jmGx5a.js").then(e=>e.C),__vite__mapDeps([0,4,1,5]),import.meta.url)),yb="[[WORKFLOW_MESSAGE]]";function XL(e,t){switch(e){case"generate_image":return`生成图片: ${((t==null?void 0:t.prompt)||"").substring(0,30)}...`;case"generate_video":return`生成视频: ${((t==null?void 0:t.prompt)||"").substring(0,30)}...`;case"generate_audio":return`生成音频: ${((t==null?void 0:t.prompt)||"").substring(0,30)}...`;case"generate_text":return`生成文本: ${((t==null?void 0:t.prompt)||"").substring(0,30)}...`;case"generate_grid_image":return`生成宫格图: ${((t==null?void 0:t.theme)||"").substring(0,30)}...`;case"canvas_insertion":return"插入到画布";case"generate_mermaid":return"生成流程图";case"generate_mindmap":return"生成思维导图";default:return`执行 ${e}`}}const Nb="chat-drawer-width",KL=Math.max(375,window.innerWidth*.5),vb=375,HN=p.forwardRef(({defaultOpen:e=!1,onOpenChange:t},n)=>{const[i,s]=p.useState(()=>yt.getDrawerState().isOpen??e),[o,r]=p.useState([]),[a,l]=p.useState(null),[u,d]=p.useState(!1),[m,f]=p.useState(()=>{const W=localStorage.getItem(Nb);if(W){const B=parseInt(W,10);if(!isNaN(B)&&B>=vb)return Math.min(B,window.innerWidth-60)}return KL}),[h,g]=p.useState(!1),b=p.useRef(null),[x,y]=p.useState(()=>ji("text").modelId),[w,v]=p.useState(()=>{const W=ji("text");return ei(W.profileId,W.modelId)}),[S,k]=p.useState(new Map),N=p.useRef(null),[E,I]=p.useState(null),{executeRetry:T,selectedContent:j,setIsDrawerOpen:V,setDrawerWidth:_}=up();p.useEffect(()=>{V(i)},[i,V]),p.useEffect(()=>{_(m)},[m,_]);const D=an.useRef(null),C=an.useRef(null),{appState:M,setAppState:U}=On();p.useEffect(()=>{if(!h)return;const W=re=>{const xe=window.innerWidth-re.clientX,ve=Math.max(vb,Math.min(xe,window.innerWidth-60));f(ve)},B=()=>{g(!1),localStorage.setItem(Nb,String(m))};return document.addEventListener("mousemove",W),document.addEventListener("mouseup",B),document.body.style.userSelect="none",document.body.style.cursor="ew-resize",()=>{document.removeEventListener("mousemove",W),document.removeEventListener("mouseup",B),document.body.style.userSelect="",document.body.style.cursor=""}},[h,m]),p.useEffect(()=>{const W=()=>{const B=window.innerWidth-60;m>B&&f(B)};return window.addEventListener("resize",W),()=>window.removeEventListener("resize",W)},[m]);const F=p.useCallback(W=>{W.preventDefault(),g(!0)},[]),$=p.useCallback(async(W,B,re,xe)=>{var Fe,Me;const Be={id:`workflow-${Date.now()}`,name:"AI 智能生成",generationType:(Fe=W[0])!=null&&Fe.name.includes("video")?"video":(Me=W[0])!=null&&Me.name.includes("audio")?"audio":"image",prompt:xe||"",aiAnalysis:xe,count:W.length,steps:W.map((et,vt)=>({id:`step-${vt}`,mcp:et.name,status:"pending",description:XL(et.name,et.arguments),args:et.arguments}))};k(et=>{const vt=new Map(et);return vt.set(B,Be),vt}),N.current=B,yt.updateMessage(B,{workflow:Be});try{const et=await re();Tt.track("chat_tool_execution_complete",{success:!0,resultCount:et.length}),k(vt=>{const he=new Map(vt),je=he.get(B);if(je){const we={...je,steps:je.steps.map((Te,tt)=>{const Re=et[tt];return{...Te,status:Re!=null&&Re.success?"completed":"failed",error:Re==null?void 0:Re.error,result:Re==null?void 0:Re.data}})};he.set(B,we),yt.updateMessage(B,{workflow:we,status:oi.SUCCESS})}return he})}catch(et){console.error("[ChatDrawer] Tool execution failed:",et),k(vt=>{const he=new Map(vt),je=he.get(B);if(je){const we={...je,steps:je.steps.map(Te=>({...Te,status:"failed",error:et.message||"执行失败"}))};he.set(B,we),yt.updateMessage(B,{workflow:we,status:oi.FAILED})}return he})}},[]),A=WL({sessionId:a,temporaryModel:w||x,onToolCalls:$}),H=p.useRef(A.sendMessage);H.current=A.sendMessage,p.useEffect(()=>{(async()=>{const B=yt.getDrawerState(),re=await yt.getAllSessions();r(re);let xe=null;if(B.activeSessionId?(xe=B.activeSessionId,l(B.activeSessionId)):re.length>0&&(xe=re[0].id,l(re[0].id)),xe)try{const ve=await yt.getMessages(xe),Be=new Map;for(const Me of ve)Me.workflow&&Be.set(Me.id,Me.workflow);k(Be);const Fe=ve.find(Me=>Me.workflow&&Me.status===oi.STREAMING);N.current=(Fe==null?void 0:Fe.id)||null}catch(ve){console.error("[ChatDrawer] Failed to load workflow messages:",ve)}})()},[]),p.useEffect(()=>{yt.setDrawerState({isOpen:i,activeSessionId:a})},[i,a]),p.useEffect(()=>{if(a&&Z.current){const W=Z.current;Z.current=null,setTimeout(()=>{H.current(W)},100)}},[a]),p.useEffect(()=>{if(!M.openSettings&&Z.current){const W=$n.get();if(W!=null&&W.apiKey){const B=Z.current;Z.current=null,a?setTimeout(()=>{H.current(B)},100):(async()=>{const re=await yt.createSession();r(xe=>[re,...xe]),l(re.id),Z.current=B})()}}},[M.openSettings,a]),p.useEffect(()=>{const W=B=>{B.key==="Escape"&&i&&(s(!1),t==null||t(!1))};return window.addEventListener("keydown",W),()=>window.removeEventListener("keydown",W)},[i,t]),p.useEffect(()=>{let W=null;return(async()=>{const{workflowSubmissionService:re}=await Ce(async()=>{const{workflowSubmissionService:xe}=await Promise.resolve().then(()=>Y5);return{workflowSubmissionService:xe}},void 0,import.meta.url);W=re.subscribeToAllEvents(xe=>{const ve=xe;k(Be=>{let Fe=null;for(const[he,je]of Be.entries())if(je.id===ve.workflowId){Fe=he;break}if(!Fe)return Be;const Me=Be.get(Fe);if(!Me)return Be;const et=new Map(Be);let vt;switch(ve.type){case"step":{vt={...Me,steps:Me.steps.map(he=>he.id===ve.stepId?{...he,status:ve.status||he.status,result:ve.result??he.result,error:ve.error??he.error}:he)};break}case"steps_added":{const je=(ve.steps||[]).map(we=>({id:we.id,mcp:we.mcp,args:we.args,description:we.description,status:we.status}));vt={...Me,steps:[...Me.steps,...je]};break}case"completed":case"failed":{const he=ve.type==="completed"?"completed":"failed";vt={...Me,status:he,steps:Me.steps.map(je=>{if(je.status==="running"||je.status==="pending"){const we=je.result;return we!=null&&we.taskId?je:{...je,status:he,error:ve.type==="failed"?ve.error:void 0}}return je})};break}default:return Be}return et.set(Fe,vt),yt.updateMessage(Fe,{workflow:vt}),et})})})().catch(re=>{console.error("[ChatDrawer] Failed to setup workflow sync:",re)}),()=>{W==null||W.unsubscribe()}},[]),p.useEffect(()=>{if(!u)return;const W=re=>{const xe=re.target;xe.closest(".t-dialog")===null&&D.current&&!D.current.contains(xe)&&C.current&&!C.current.contains(xe)&&d(!1)},B=setTimeout(()=>{document.addEventListener("mousedown",W)},100);return()=>{clearTimeout(B),document.removeEventListener("mousedown",W)}},[u]);const ue=p.useCallback(()=>{s(W=>{const B=!W;return t==null||t(B),B})},[t]),te=p.useCallback(()=>{s(!1),t==null||t(!1)},[t]),oe=p.useCallback(async()=>{Tt.track("chat_session_create");const W=await yt.createSession();r(B=>[W,...B]),l(W.id),d(!1),k(new Map),N.current=null,y(void 0)},[]),me=p.useCallback(()=>{d(W=>!W)},[]),_e=p.useCallback(async W=>{Tt.track("chat_session_select"),l(W),d(!1),y(void 0);try{const B=await yt.getMessages(W),re=new Map;for(const ve of B)ve.workflow&&re.set(ve.id,ve.workflow);k(re);const xe=B.find(ve=>ve.workflow&&ve.status===oi.STREAMING);N.current=(xe==null?void 0:xe.id)||null}catch(B){console.error("[ChatDrawer] Failed to load workflow messages:",B),k(new Map),N.current=null}},[]),Pe=p.useCallback(async W=>{Tt.track("chat_session_delete"),await yt.deleteSession(W),r(B=>{const re=B.filter(xe=>xe.id!==W);if(a===W){const xe=re[0]||null;l((xe==null?void 0:xe.id)||null)}return re})},[a]),He=p.useCallback(async(W,B)=>{Tt.track("chat_session_rename"),await yt.updateSession(W,{title:B}),r(re=>re.map(xe=>xe.id===W?{...xe,title:B}:xe))},[]),Z=an.useRef(null),Ie=p.useCallback(async W=>{try{Tt.track("chat_message_send",{hasImages:W.parts.some(re=>re.type==="image_url")});const B=$n.get();if(!(B!=null&&B.apiKey)){Z.current=W,U({...M,openSettings:!0});return}if(Z.current=null,!a){const re=await yt.createSession();r(xe=>[re,...xe]),l(re.id),Z.current=W;return}await A.sendMessage(W)}catch(B){console.error("[ChatDrawer] send message failed:",B),Z.current=W}},[a,A,M,U]),Qe=p.useCallback(async W=>{var ot;const{context:B,workflow:re,textModel:xe,autoOpen:ve=!0}=W;ve&&(s(!0),t==null||t(!0)),xe&&y(xe);const Be=await yt.createSession(),Fe=[];B.userInstruction&&Fe.push(B.userInstruction),B.selection.texts.length>0&&Fe.push(`
|
|
554
|
+
📝 选中的文本:
|
|
555
|
+
${B.selection.texts.join(`
|
|
556
|
+
`)}`),B.selection.texts.length===0&&!B.userInstruction&&B.finalPrompt&&Fe.push(`
|
|
557
|
+
提示词:
|
|
558
|
+
${B.finalPrompt}`);const Me=[],et=B.model.isExplicit?`模型: ${B.model.id}`:`模型: ${B.model.id} (默认)`;Me.push(et),B.params.count>1&&Me.push(`数量: ${B.params.count}`),Me.length>0&&Fe.push(`
|
|
559
|
+
---
|
|
560
|
+
${Me.join(" • ")}`);const vt=Fe.join(`
|
|
561
|
+
`);let he="新任务";if(B.finalPrompt)he=B.finalPrompt;else if(B.selection.texts.length>0)he=B.selection.texts[0];else if(B.userInstruction){const rt=B.userInstruction.indexOf(":"),wn=B.userInstruction.indexOf(":"),zi=rt>=0&&wn>=0?Math.min(rt,wn):Math.max(rt,wn);zi>=0&&zi<B.userInstruction.length-1?he=B.userInstruction.substring(zi+1).trim():he=B.userInstruction}else B.model.id&&(he=`模型: ${B.model.id}`);const je=he;await yt.updateSession(Be.id,{title:je}),Be.title=je,r(rt=>[Be,...rt]),l(Be.id);const we=Date.now(),Te=`msg_${we}_user`,tt=[{type:"text",text:vt}],Re=[...B.selection.images,...B.selection.graphics];for(let rt=0;rt<Re.length;rt++)tt.push({type:"data-file",data:{filename:`image-${rt+1}.png`,mediaType:"image/png",url:Re[rt]}});for(let rt=0;rt<B.selection.videos.length;rt++)tt.push({type:"data-file",data:{filename:`video-${rt+1}.mp4`,mediaType:"video/mp4",url:B.selection.videos[rt]}});const Ye={id:Te,role:"user",parts:tt},mt=`msg_${we}_workflow`,St={id:mt,role:"assistant",parts:[{type:"text",text:`${yb}${mt}`}]};k(rt=>{const wn=new Map(rt);return wn.set(mt,re),wn}),N.current=mt;const xt={id:Te,sessionId:Be.id,role:gi.USER,content:vt,timestamp:Date.now(),status:oi.SUCCESS,aiContext:B,attachments:Re.length>0||B.selection.videos.length>0?[...Re.map((rt,wn)=>({id:`${Te}-img-${wn}`,name:`image-${wn+1}.png`,type:"image/png",size:0,data:rt,isBlob:!1})),...B.selection.videos.map((rt,wn)=>({id:`${Te}-vid-${wn}`,name:`video-${wn+1}.mp4`,type:"video/mp4",size:0,data:rt,isBlob:!1}))]:void 0};await yt.addMessage(xt);const Jt={id:mt,sessionId:Be.id,role:gi.ASSISTANT,content:`${yb}${mt}`,timestamp:Date.now(),status:oi.STREAMING,workflow:re};await yt.addMessage(Jt),(ot=A.setMessagesWithRaw)==null||ot.call(A,[Ye,St],[xt,Jt])},[A,t]),dt=p.useCallback(async W=>{var re;let B=N.current;if(!B){for(const[xe,ve]of S.entries())if(ve.id===W.id){B=xe,N.current=xe;break}}B&&(k(xe=>{const ve=new Map(xe);return ve.set(B,W),ve}),yt.updateMessage(B,{workflow:W}),(re=A.updateRawMessageWorkflow)==null||re.call(A,B,W))},[a,o,A,S]),bt=p.useCallback(W=>{const B=N.current;B&&k(re=>{var Be;const xe=new Map(re),ve=xe.get(B);if(ve){const Fe=ve.logs||[],Me={...ve,logs:[...Fe,W]};xe.set(B,Me),yt.updateMessage(B,{workflow:Me}),(Be=A.updateRawMessageWorkflow)==null||Be.call(A,B,Me)}return xe})},[A]),L=p.useRef(null),P=p.useCallback(W=>{const B=N.current;B&&k(re=>{const xe=new Map(re),ve=xe.get(B);if(ve){const Be=ve.logs||[];let Fe=-1;for(let et=Be.length-1;et>=0;et--)if(Be[et].type==="thinking"){Fe=et;break}let Me;if(Fe>=0){const et=[...Be],vt=et[Fe];et[Fe]={...vt,content:vt.content+W},Me={...ve,logs:et}}else Me={...ve,logs:[...Be,{type:"thinking",timestamp:Date.now(),content:W}]};xe.set(B,Me),L.current&&clearTimeout(L.current),L.current=setTimeout(()=>{var et;yt.updateMessage(B,{workflow:Me}),(et=A.updateRawMessageWorkflow)==null||et.call(A,B,Me)},500)}return xe})},[A]),Q=p.useCallback(async(W,B,re)=>{if(!E){Tt.track("chat_workflow_retry",{stepIndex:re});try{I(W),N.current=W,await T(B,re)}finally{I(null)}}},[T,E]);p.useImperativeHandle(n,()=>({open:()=>{s(!0),t==null||t(!0)},close:()=>{s(!1),t==null||t(!1)},toggle:ue,sendMessage:async W=>{s(!0),t==null||t(!0);const B={id:`msg_${Date.now()}`,role:"user",parts:[{type:"text",text:W}]};await Ie(B)},sendWorkflowMessage:Qe,updateWorkflowMessage:dt,appendAgentLog:bt,updateThinkingContent:P,isOpen:()=>i,retryWorkflowFromStep:async(W,B)=>{let re=null;for(const[xe,ve]of S.entries())if(ve.id===W.id){re=xe;break}re?await Q(re,W,B):console.warn("[ChatDrawer] Could not find message ID for workflow retry",W.id)}}),[i,ue,Ie,Qe,dt,bt,P,t,S,Q]);const se=p.useMemo(()=>({...A,sendMessage:Ie}),[A,Ie]),z=o.find(W=>W.id===a),O=(z==null?void 0:z.title)||"新对话",[K,G]=p.useState(!1),[fe,ae]=p.useState(""),Y=p.useRef(null),le=p.useCallback(()=>{ae(O),G(!0)},[O]),ge=p.useCallback(async()=>{const W=fe.trim();W&&W!==O&&a&&await He(a,W),G(!1)},[fe,O,a,He]),Ve=p.useCallback(()=>{ae(O),G(!1)},[O]),Nt=p.useCallback(W=>{W.key==="Enter"?(W.preventDefault(),ge()):W.key==="Escape"&&(W.preventDefault(),Ve())},[ge,Ve]);p.useEffect(()=>{K&&Y.current&&(Y.current.focus(),Y.current.select())},[K]);const Xe=p.useRef(null);oN(Xe,{enableCopy:!0,stopPropagation:!0});const[be,ze]=p.useState(!1);return p.useEffect(()=>{i&&ze(!0)},[i]),c.jsxDEV(c.Fragment,{children:[c.jsxDEV(qN,{isOpen:i,onClick:ue,drawerWidth:m},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1321,columnNumber:9},void 0),c.jsxDEV("div",{className:`chat-drawer ${Yt} ${i?"chat-drawer--open":""} ${h?"chat-drawer--dragging":""}`,style:{width:m},"data-testid":"chat-drawer",children:[c.jsxDEV("div",{ref:b,className:"chat-drawer__resize-handle",onMouseDown:F},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1335,columnNumber:11},void 0),c.jsxDEV("div",{ref:Xe,className:"chat-drawer__body",children:[c.jsxDEV("div",{className:"chat-drawer__header",children:[c.jsxDEV("div",{className:"chat-drawer__header-top",children:[c.jsxDEV(nn,{content:"关闭",children:c.jsxDEV("button",{className:"chat-drawer__close-btn","data-track":"chat_click_drawer_close",onClick:te,"aria-label":"关闭对话",children:c.jsxDEV(uT,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1350,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1344,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1343,columnNumber:17},void 0),K?c.jsxDEV("input",{ref:Y,className:"chat-drawer__title-input",value:fe,onChange:W=>ae(W.target.value),onKeyDown:Nt,onBlur:ge,maxLength:50},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1354,columnNumber:19},void 0):c.jsxDEV("h2",{className:"chat-drawer__title chat-drawer__title--editable",onClick:le,title:"点击编辑标题",children:O},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1364,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1342,columnNumber:15},void 0),c.jsxDEV("div",{className:"chat-drawer__header-bottom",children:[c.jsxDEV(LN,{value:x,valueRef:w,onChange:(W,B)=>{y(W),v(B||ei(null,W))}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1374,columnNumber:17},void 0),c.jsxDEV("div",{className:"chat-drawer__session-actions",children:[c.jsxDEV(nn,{content:"会话列表",children:c.jsxDEV("button",{ref:C,className:`chat-drawer__close-btn ${u?"chat-drawer__close-btn--active":""}`,"data-track":"chat_click_sessions_toggle",onClick:me,"aria-label":"会话列表",children:c.jsxDEV(dT,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1395,columnNumber:23},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1386,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1385,columnNumber:19},void 0),c.jsxDEV(nn,{content:"新对话",children:c.jsxDEV("button",{className:"chat-drawer__close-btn","data-track":"chat_click_new_session",onClick:oe,"aria-label":"新对话",children:c.jsxDEV(Tm,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1405,columnNumber:23},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1399,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1398,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1384,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1373,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1341,columnNumber:13},void 0),u&&c.jsxDEV("div",{ref:D,children:c.jsxDEV(RN,{sessions:o,activeSessionId:a,onSelectSession:_e,onNewSession:oe,onDeleteSession:Pe,onRenameSession:He},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1414,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1413,columnNumber:15},void 0),c.jsxDEV("div",{className:"chat-drawer__content",children:[be&&c.jsxDEV(p.Suspense,{fallback:c.jsxDEV("div",{className:"chat-loading chat-loading--full",children:c.jsxDEV("div",{className:"chat-loading__spinner"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1430,columnNumber:23},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1429,columnNumber:21},void 0),children:c.jsxDEV($L,{handler:se,workflowMessages:S,retryingWorkflowId:E,handleWorkflowRetry:Q},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1434,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1427,columnNumber:17},void 0),c.jsxDEV(ON,{selectedContent:j,onSend:Ie,placeholder:"支持连续对话"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1443,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1425,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1340,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1327,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/chat-drawer/ChatDrawer.tsx",lineNumber:1320,columnNumber:7},void 0)});HN.displayName="ChatDrawer";const YL=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oM),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.DrawnixDeferredFeatures}))),ZL=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oN),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.DrawnixDeferredRuntime}))),JL=p.lazy(()=>Ce(()=>import("./ttd-dialog-BQiy0hwR.js"),__vite__mapDeps([0,2,3,6,7]),import.meta.url).then(e=>({default:e.TTDDialog}))),QL=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oO),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.SettingsDialog}))),eO=p.lazy(()=>Ce(()=>import("./tool-windows-DWUG3k_L.js").then(e=>e.oG),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.UnifiedMediaViewer}))),tO=p.lazy(()=>Ce(()=>import("./CanvasAudioPlayer-DITqjh6L.js"),__vite__mapDeps([0,8]),import.meta.url).then(e=>({default:e.CanvasAudioPlayer}))),kb=["tool-windows"],nO=({value:e,viewport:t,theme:n,onChange:i,onSelectionChange:s,onViewportChange:o,onThemeChange:r,onValueChange:a,afterInit:l,onBoardSwitch:u,onTabSyncNeeded:d,isDataReady:m=!1,currentBoardId:f})=>{const h={readonly:!1,hideScrollbar:!1,disabledScrollOnNonFocus:!1,themeColors:PT},[g,b]=p.useState(()=>{const be=new yP(window.navigator.userAgent);return{pointer:dn.hand,isMobile:be.mobile()!==null,isPencilMode:!1,openDialogTypes:new Set,dialogInitialData:null,dialogInitialDataByType:{},openCleanConfirm:!1,openSettings:!1}}),[x,y]=p.useState(null),[w,v]=p.useState(!1),[S,k]=p.useState(!1),[N,E]=p.useState(!1),[I,T]=p.useState(!1),[j,V]=p.useState({mode:ns.BROWSE}),[_,D]=p.useState(!1),[C,M]=p.useState(!1),[U,F]=p.useState(!1),[$,A]=p.useState(!1),[H,ue]=p.useState(!1),[te,oe]=p.useState(!1),[me,_e]=p.useState(!1),Pe=p.useRef(null),He=p.useCallback(()=>{v(!1),k(!1),E(!1),T(!1)},[]),Z=p.useCallback((be=kb)=>{HR(be),F(!0)},[]),Ie=p.useCallback((be=["tool-windows"])=>{Z(be),_e(!0),oe(!0)},[Z]),Qe=p.useCallback(()=>{Ie(["tool-windows"]),Promise.all([Ce(()=>import("./tool-windows-DWUG3k_L.js").then(be=>be.ox),__vite__mapDeps([0]),import.meta.url),Ce(()=>import("./tool-windows-DWUG3k_L.js").then(be=>be.ow),__vite__mapDeps([0]),import.meta.url)]).then(([{toolWindowService:be},{BUILT_IN_TOOLS:ze}])=>{const W=ze.find(re=>re.id==="knowledge-base");if(!W)return;const B=be.getToolState(W.id);B&&B.status==="open"?be.closeTool(W.id):be.openTool(W)})},[Ie]);p.useEffect(()=>{const be=ze=>{const{noteId:W}=ze.detail;Ie(["tool-windows"]),Promise.all([Ce(()=>import("./tool-windows-DWUG3k_L.js").then(B=>B.ox),__vite__mapDeps([0]),import.meta.url),Ce(()=>import("./tool-windows-DWUG3k_L.js").then(B=>B.ow),__vite__mapDeps([0]),import.meta.url)]).then(([{toolWindowService:B},{BUILT_IN_TOOLS:re}])=>{const xe=re.find(Be=>Be.id==="knowledge-base");if(!xe)return;const ve=B.isToolOpen(xe.id);B.openTool(xe,{componentProps:W?{initialNoteId:W}:{}}),ve&&W&&window.setTimeout(()=>{window.dispatchEvent(new CustomEvent("kb:open-note",{detail:{noteId:W}}))},50)})};return window.addEventListener("kb:open",be),()=>window.removeEventListener("kb:open",be)},[Ie]);const dt=p.useCallback(()=>{if(Ie(["tool-windows"]),w){v(!1);return}k(!1),E(!1),T(!1),v(!0)},[Ie,w]),bt=p.useCallback(()=>{if(Ie(["tool-windows"]),S){k(!1);return}v(!1),E(!1),T(!1),k(!0)},[Ie,S]),L=p.useCallback(()=>{if(Z(["tool-windows"]),N){E(!1);return}v(!1),k(!1),T(!1),E(!0)},[Z,N]),P=p.useCallback(be=>{Ie(["tool-windows"]),He(),V({mode:ns.BROWSE,...be}),T(!0)},[He,Ie]),Q=p.useCallback(()=>{Z(["tool-windows"]),D(!0)},[Z]),se=p.useCallback(()=>{Z(["tool-windows"]),M(!0)},[Z]),z=p.useCallback(be=>{b(be)},[]),O=p.useCallback(be=>{b(ze=>({...ze,...be}))},[]);p.useEffect(()=>{x&&(x.appState=g,x.__setAppState=z,Pe.current=x)},[x,g,z]),p.useEffect(()=>{let be=!1;const ze=new URLSearchParams(window.location.search).has("tool"),W=()=>{be||Z(ze?["tool-windows"]:kb)};if(ze){Ie(["tool-windows"]);return}const B=window.requestIdleCallback;if(typeof B=="function"){const xe=B(W,{timeout:1800});return()=>{var ve;be=!0,(ve=window.cancelIdleCallback)==null||ve.call(window,xe)}}const re=window.setTimeout(W,700);return()=>{be=!0,window.clearTimeout(re)}},[Z,Ie]),p.useEffect(()=>{if(typeof window>"u"||!("serviceWorker"in navigator))return;let be=!1;const ze=window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1",W=ve=>{var Be,Fe;((Be=ve.data)==null?void 0:Be.type)==="SW_IDLE_PREFETCH_STATUS"&&(Fe=ve.data.completedGroups)!=null&&Fe.includes("tool-windows")&&(be=!0,_e(!0))};navigator.serviceWorker.addEventListener("message",W);const B={type:"SW_IDLE_PREFETCH_STATUS_GET"},re=navigator.serviceWorker.controller;re?re.postMessage(B):navigator.serviceWorker.ready.then(ve=>{var Be;(Be=ve.active)==null||Be.postMessage(B)}).catch(()=>{});const xe=window.setTimeout(()=>{be||me||(ze?console.info("[Drawnix] SW idle prefetch status unresolved in dev, enabling minimized tools bar fallback"):console.warn("[Drawnix] SW idle prefetch status unresolved, enabling minimized tools bar fallback"),_e(!0))},2200);return()=>{window.clearTimeout(xe),navigator.serviceWorker.removeEventListener("message",W)}},[me]),p.useEffect(()=>{const be=window.requestIdleCallback;let ze;const W=window.setTimeout(()=>{const B=()=>{A(!0),ue(!0)};if(typeof be=="function"){ze=be(B,{timeout:2500});return}B()},1200);return()=>{var B;window.clearTimeout(W),typeof ze=="number"&&((B=window.cancelIdleCallback)==null||B.call(window,ze))}},[]),p.useEffect(()=>{const be=ze=>{const W=ze,{message:B}=W.detail;pe.error({content:"API Key 无效或已过期,请重新配置",duration:5e3}),console.error("[Drawnix] API auth error:",B),b(re=>({...re,openSettings:!0}))};return window.addEventListener(vf,be),()=>{window.removeEventListener(vf,be)}},[]);const K=[wT,yT,NT,NP,lA,X2(O),TV,RV,LU,MU,qV(O),tU(O),vT,kT,kU,ET,ST,TT,sR,mR,DT,zR,_T,IT,CT,NR,_R,VR,jT,BR,hU,bU],G=p.useRef(null),{saveBoard:fe,createBoard:ae,switchBoard:Y}=mT(),le=p.useCallback(async()=>{if(i&&Pe.current){const be={children:Pe.current.children||[],viewport:Pe.current.viewport,theme:Pe.current.theme};await fe(be)}},[i,fe]),ge=p.useCallback(async()=>{await le();const be=await ae({name:"新画布"});be&&(await Y(be.id),setTimeout(()=>{ur()},500))},[le,ae,Y]),Ve=p.useCallback(be=>{const ze=Pe.current;if(ze&&be){const B=ut(ze).map(re=>re.id).filter(Boolean);O({lastSelectedElementIds:B})}s&&s(be)},[s,O]),Nt=p.useMemo(()=>({appState:g,setAppState:z,board:x}),[g,z,x]),Xe=$||H||te||g.openCommandPalette||g.openCanvasSearch||w||S||I||_||C;return c.jsxDEV(pT,{children:c.jsxDEV(fT,{children:c.jsxDEV(hT,{children:c.jsxDEV(gT,{children:c.jsxDEV(bT,{children:c.jsxDEV(eR,{onOpenMediaLibrary:P,children:c.jsxDEV(GU,{children:c.jsxDEV(xT.Provider,{value:Nt,children:c.jsxDEV(iO,{value:e,viewport:t,theme:n,options:h,plugins:K,containerRef:G,appState:g,board:x,setBoard:y,projectDrawerOpen:w,toolboxDrawerOpen:S,taskPanelExpanded:N,mediaLibraryOpen:I,mediaLibraryConfig:j,backupRestoreOpen:_,onChange:i,onSelectionChange:Ve,onViewportChange:o,onThemeChange:r,onValueChange:a,afterInit:l,onBoardSwitch:u,onTabSyncNeeded:d,handleProjectDrawerToggle:dt,handleToolboxDrawerToggle:bt,handleKnowledgeBaseToggle:Qe,handleTaskPanelToggle:L,handleOpenMediaLibrary:P,handleOpenBackupRestore:Q,handleOpenCloudSync:se,setProjectDrawerOpen:v,setToolboxDrawerOpen:k,setMediaLibraryOpen:T,setBackupRestoreOpen:D,cloudSyncOpen:C,setCloudSyncOpen:M,handleBeforeSwitch:le,isDataReady:m,onCreateProjectForMemory:ge,currentBoardId:f,deferredRuntimeEnabled:U,shouldRenderDeferredFeatures:Xe,versionUpdateEnabled:$,performancePanelEnabled:H,toolWindowManagerEnabled:te,minimizedToolsBarEnabled:me,enableToolWindows:Ie},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:746,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:745,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:744,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:743,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:742,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:741,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:740,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:739,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:738,columnNumber:5},void 0)},iO=({value:e,viewport:t,theme:n,options:i,plugins:s,containerRef:o,appState:r,board:a,setBoard:l,projectDrawerOpen:u,toolboxDrawerOpen:d,taskPanelExpanded:m,mediaLibraryOpen:f,mediaLibraryConfig:h,backupRestoreOpen:g,deferredRuntimeEnabled:b,shouldRenderDeferredFeatures:x,versionUpdateEnabled:y,performancePanelEnabled:w,toolWindowManagerEnabled:v,minimizedToolsBarEnabled:S,enableToolWindows:k,cloudSyncOpen:N,onChange:E,onSelectionChange:I,onViewportChange:T,onThemeChange:j,onValueChange:V,afterInit:_,onBoardSwitch:D,onTabSyncNeeded:C,handleProjectDrawerToggle:M,handleToolboxDrawerToggle:U,handleKnowledgeBaseToggle:F,handleTaskPanelToggle:$,handleOpenMediaLibrary:A,handleOpenBackupRestore:H,handleOpenCloudSync:ue,setProjectDrawerOpen:te,setToolboxDrawerOpen:oe,setMediaLibraryOpen:me,setBackupRestoreOpen:_e,setCloudSyncOpen:Pe,handleBeforeSwitch:He,isDataReady:Z,onCreateProjectForMemory:Ie,currentBoardId:Qe})=>{const{setAppState:dt}=On(),{chatDrawerRef:bt}=up(),{language:L}=We(),P=kf(he=>he.error),Q=kf(he=>he.playing||!!he.activeAudioUrl||!!he.activeReadingSourceId),se=p.useRef(void 0),[z,O]=p.useState(Q);FV({board:a,pointer:r.pointer}),Yy({onSyncNeeded:p.useCallback(()=>{C?C():ur()},[C]),enabled:!0,currentBoardId:Qe});const[K,G]=p.useState(!1),[fe,ae]=p.useState(null),[Y,le]=p.useState(null),ge=p.useRef(null),[Ve,Nt]=p.useState(!1),[Xe,be]=p.useState([]),[ze,W]=p.useState(0);p.useEffect(()=>{if(!P){se.current=void 0;return}P!==se.current&&(se.current=P,pe.error(P))},[P]),p.useEffect(()=>{Q&&O(!0)},[Q]),p.useEffect(()=>{hu.setCanvasQueue(sd(e))},[e]),p.useEffect(()=>()=>{hu.stopAndClear()},[]);const B=p.useCallback(()=>{if(!a||!a.children)return{items:[],elementIds:[]};const he=[],je=[];for(const we of a.children){const Te=we.url;if(!Te||typeof Te!="string"||gu(we))continue;const tt=ee.isDrawElement(we)&&ee.isImage(we),Re=Ci(we);(tt||Re)&&(he.push({id:we.id,url:Te,type:Re?"video":"image",title:we.name||void 0}),je.push(we.id))}return{items:he,elementIds:je}},[a]),re=p.useCallback(he=>{const{items:je,elementIds:we}=B();if(je.length===0)return;const Te=we.indexOf(he);Te!==-1&&(be(je),W(Te),Nt(!0))},[B]),xe=p.useCallback(()=>{Nt(!1)},[]),ve=p.useCallback(async(he,je)=>{const we=je.id;if(!(!we||!a))try{const{unifiedCacheService:Te}=await Ce(async()=>{const{unifiedCacheService:ot}=await import("./tool-windows-DWUG3k_L.js").then(rt=>rt.oo);return{unifiedCacheService:ot}},__vite__mapDeps([0]),import.meta.url),{Transforms:tt}=await Ce(async()=>{const{Transforms:ot}=await import("./tool-windows-DWUG3k_L.js").then(rt=>rt.om);return{Transforms:ot}},__vite__mapDeps([0]),import.meta.url),Re=`edited-image-${Date.now()}`,Ye=`/__aitu_cache__/image/${Re}.png`,St=await(await fetch(he)).blob();await Te.cacheMediaFromBlob(Ye,St,"image",{taskId:Re});const xt=new Image;await new Promise((ot,rt)=>{xt.onload=()=>ot(),xt.onerror=()=>rt(new Error("Failed to load edited image")),xt.src=he});const Jt=a.children.findIndex(ot=>ot.id===we);if(Jt>=0){const ot=a.children[Jt],{newPoints:rt}=await g0({url:ot.url,width:ot.width,height:ot.height,points:ot.points||[[0,0],[0,0]]},xt.naturalWidth,xt.naturalHeight);tt.setNode(a,{url:Ye,width:xt.naturalWidth,height:xt.naturalHeight,points:rt},[Jt])}}catch(Te){console.error("Failed to update image:",Te),pe.error("更新失败")}},[a]),Be=p.useCallback(async he=>{if(a)try{const{unifiedCacheService:je}=await Ce(async()=>{const{unifiedCacheService:Jt}=await import("./tool-windows-DWUG3k_L.js").then(ot=>ot.oo);return{unifiedCacheService:Jt}},__vite__mapDeps([0]),import.meta.url),{insertImageFromUrl:we}=await Ce(async()=>{const{insertImageFromUrl:Jt}=await import("./tool-windows-DWUG3k_L.js").then(ot=>ot.os);return{insertImageFromUrl:Jt}},__vite__mapDeps([0]),import.meta.url),Te=`edited-image-${Date.now()}`,tt=`/__aitu_cache__/image/${Te}.png`,Ye=await(await fetch(he)).blob();await je.cacheMediaFromBlob(tt,Ye,"image",{taskId:Te});const mt=new Image;await new Promise((Jt,ot)=>{mt.onload=()=>Jt(),mt.onerror=()=>ot(new Error("Failed to load edited image")),mt.src=he});const St=wr(a),xt=[((St==null?void 0:St[0])??0)+100,((St==null?void 0:St[1])??0)+100];await we(a,tt,xt,!1,{width:mt.naturalWidth,height:mt.naturalHeight},!1,!0)}catch(je){console.error("Failed to insert image:",je),pe.error("插入失败")}},[a]),{state:Fe,selectShape:Me,closePicker:et}=SR(a);p.useEffect(()=>{Y&&ge.current&&ge.current.focus()},[Y]);const vt=p.useCallback(()=>{if(!a||!Y||!ge.current){le(null);return}const he=ge.current.innerText||"";he.trim()&&(Qn.insertText(a,Y.worldPoint,he),requestAnimationFrame(()=>{const je=a.children[a.children.length-1];if(ee.isText(je)){const we=je;if(!isFinite(we.textHeight)){const Te=Ae.getRectangleByPoints(we.points);Se.setNode(a,{textHeight:Te.height},[a.children.length-1])}}})),le(null),Ue.updatePointerType(a,dn.selection),dt(je=>({...je,pointer:dn.selection}))},[a,Y,dt]);return p.useEffect(()=>{if(!a)return;const he=we=>{const Te=we.target;if(!(Te.closest(".board-host-svg")||Te.closest(".plait-board-container")))return;const Re=Un(a,Rn(a,we.clientX,we.clientY)),Ye=ed(a,Re);if(Ye&&Sn(Ye)){ey(a,Ye,L),we.preventDefault(),we.stopPropagation();return}if(Ye){if(gu(Ye)){we.preventDefault(),we.stopPropagation();return}const St=Ye.url;if(St&&typeof St=="string"){const xt=ee.isDrawElement(Ye)&&ee.isImage(Ye),Jt=Ci(Ye);if(xt||Jt){re(Ye.id),we.preventDefault(),we.stopPropagation();return}}}const mt=Te.closest(".plait-tool-container")||Te.closest(".plait-workzone-container")||Te.closest("foreignObject");if(!Ye&&!mt){const St=[we.clientX,we.clientY];ae(St),G(!0)}},je=o.current;return je&&je.addEventListener("dblclick",he),()=>{je&&je.removeEventListener("dblclick",he)}},[a,o,re,L]),p.useEffect(()=>{if(!a)return;const he=we=>{const Te=we.target;if(!(Te.closest(".board-host-svg")||Te.closest(".plait-board-container")))return;const Re=Un(a,Rn(a,we.clientX,we.clientY)),Ye=ed(a,Re);if(Ye&&gu(Ye)&&!ks(Ye)){O(!0);const mt=AT(Ye);if(mt){we.preventDefault(),we.stopPropagation(),hu.togglePlaybackInQueue(mt,sd(a.children),{queueSource:"canvas",queueId:h0,queueName:f0}).catch(()=>{});return}}if(J.isPointer(a,st.text)&&!(Te.closest(".plait-tool-container")||Te.closest(".plait-workzone-container")||Te.closest("foreignObject"))&&!Ye){le({screenX:we.clientX,screenY:we.clientY,worldPoint:Re,zoom:a.viewport.zoom}),we.preventDefault(),we.stopPropagation();return}u&&te(!1),d&&oe(!1)},je=o.current;return je&&je.addEventListener("click",he),()=>{je&&je.removeEventListener("click",he)}},[a,o,u,d,te,oe]),c.jsxDEV("div",{className:ne("drawnix",{"drawnix--mobile":r.isMobile}),ref:o,children:c.jsxDEV("div",{className:"drawnix__main",children:[c.jsxDEV(hP,{value:e,viewport:t,theme:n,options:i,plugins:s,onChange:he=>{E&&E(he)},onSelectionChange:I,onViewportChange:T,onThemeChange:j,onValueChange:V,children:[c.jsxDEV(dP,{afterInit:he=>{l(he),window.__drawnixBoard=he,Fy.setBoard(he),_&&_(he),he.afterChange&&he.afterChange()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1432,columnNumber:11},void 0),c.jsxDEV(BU,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1453,columnNumber:11},void 0),c.jsxDEV($2,{projectDrawerOpen:u,onProjectDrawerToggle:M,toolboxDrawerOpen:d,onToolboxDrawerToggle:U,taskPanelExpanded:m,onTaskPanelToggle:$,onOpenBackupRestore:H,onOpenCloudSync:ue,onKnowledgeBaseToggle:F,onOpenMediaLibrary:A,deferredFeaturesEnabled:v,minimizedToolsBarEnabled:S,onEnableToolWindows:k},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1455,columnNumber:11},void 0),z&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(tO,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1472,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1471,columnNumber:13},void 0),c.jsxDEV(WM,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1476,columnNumber:11},void 0),c.jsxDEV(nU,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1477,columnNumber:11},void 0),c.jsxDEV(LV,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1478,columnNumber:11},void 0),c.jsxDEV(HV,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1479,columnNumber:11},void 0),c.jsxDEV(QV,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1480,columnNumber:11},void 0),c.jsxDEV(ZV,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1481,columnNumber:11},void 0),r.openDialogTypes.size>0&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(JL,{container:o.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1484,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1483,columnNumber:13},void 0),r.openSettings&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(QL,{container:o.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1489,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1488,columnNumber:13},void 0),c.jsxDEV(eU,{container:o.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1492,columnNumber:11},void 0),c.jsxDEV(yL,{isDataReady:Z,activationKey:0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1493,columnNumber:11},void 0),c.jsxDEV(JU,{position:fe,visible:K,onClose:()=>G(!1),onOpenMediaLibrary:A},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1495,columnNumber:11},void 0),Y&&c.jsxDEV("div",{ref:ge,contentEditable:!0,suppressContentEditableWarning:!0,style:{position:"fixed",left:Y.screenX,top:Y.screenY-14*Y.zoom/2,minWidth:"2px",minHeight:"1.5em",outline:"none",border:"none",background:"transparent",fontSize:`${14*Y.zoom}px`,lineHeight:"1.5",color:"#333",caretColor:"#333",zIndex:1e4,whiteSpace:"pre-wrap",fontFamily:"inherit"},onBlur:vt,onKeyDown:he=>{he.key==="Escape"&&le(null),he.stopPropagation()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1503,columnNumber:13},void 0),Ve&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(eO,{visible:Ve,items:Xe,initialIndex:ze,onClose:xe,showThumbnails:!0,useBuiltInEditor:!0,showEditOverwrite:!0,onEditOverwrite:ve,onEditInsert:Be},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1536,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1535,columnNumber:13},void 0),c.jsxDEV(kR,{visible:Fe.visible,position:Fe.position,currentShape:Fe.currentShape||void 0,onSelectShape:Me,onClose:et,container:o.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1550,columnNumber:11},void 0),c.jsxDEV(YU,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1559,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1418,columnNumber:9},void 0),c.jsxDEV(HN,{ref:bt},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1561,columnNumber:9},void 0),b&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(ZL,{board:a,value:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1564,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1563,columnNumber:11},void 0),x&&c.jsxDEV(p.Suspense,{fallback:null,children:c.jsxDEV(YL,{board:a,value:e,containerRef:o,versionUpdateEnabled:y,performancePanelEnabled:w,toolWindowManagerEnabled:v,projectDrawerOpen:u,toolboxDrawerOpen:d,mediaLibraryOpen:f,mediaLibraryConfig:h,backupRestoreOpen:g,cloudSyncOpen:N,onBoardSwitch:D,setProjectDrawerOpen:te,setToolboxDrawerOpen:oe,setMediaLibraryOpen:me,setBackupRestoreOpen:_e,setCloudSyncOpen:Pe,handleBeforeSwitch:He,onCreateProjectForMemory:Ie},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1569,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1568,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1417,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1411,columnNumber:5},void 0)},sO="Opentu",oO="Opentu - AI应用平台";function kc(e){e&&e.trim()?document.title=`${sO} - ${e.trim()}`:document.title=oO}function rO(e){if(!e){kc();return}const t=Cx.getBoard(e);kc(t==null?void 0:t.name)}function aO(e,t){return p.useEffect(()=>{rO(e)},[e,t]),p.useEffect(()=>{const i=Cx.observeEvents().subscribe(s=>{if(s.type==="boardUpdated"){const o=s.payload;o&&o.id===e&&kc(o.name)}});return()=>{i.unsubscribe()}},[e]),{updateTitle:p.useCallback(i=>{kc(i)},[])}}const WN="main_board_content",$N=Jo.createInstance({name:"Drawnix",storeName:MT,driver:[Jo.INDEXEDDB,Jo.LOCALSTORAGE]});async function XN(){try{const e=await gd.loadState();return(e==null?void 0:e.migrationCompleted)===!0}catch(e){return console.error("[WorkspaceMigration] Failed to check migration status:",e),!1}}async function Eb(){try{const e=await gd.loadState();e.migrationCompleted=!0,await gd.saveState(e)}catch(e){console.error("[WorkspaceMigration] Failed to mark migration completed:",e)}}async function lO(){try{const e=await $N.getItem(WN);if(e&&e.children&&e.children.length>0)return e;const t=localStorage.getItem(jx);if(t){const n=JSON.parse(t);if(Array.isArray(n)&&n.length>0)return{children:n}}return null}catch(e){return console.error("[WorkspaceMigration] Failed to get legacy data:",e),null}}async function cO(){try{if(await XN())return null;const t=await lO();if(!t||!t.children||t.children.length===0)return await Eb(),null;const n=_i.getInstance();await n.initialize();const i=await n.createBoard({name:"迁移的画板",elements:t.children,viewport:t.viewport,theme:t.theme});return i?(await n.switchBoard(i.id),await Eb(),await uO(),i.id):(console.error("[WorkspaceMigration] Failed to create board"),null)}catch(e){return console.error("[WorkspaceMigration] Migration failed:",e),null}}async function uO(){try{await $N.removeItem(WN),localStorage.removeItem(jx)}catch(e){console.error("[WorkspaceMigration] Failed to clear legacy data:",e)}}function ta(e){if(!Tt.isAnalyticsEnabled())return;const t=dO(e.name,e.value),n=document.referrer,i={[`$web_vitals_${e.name}_value`]:e.value,[`$web_vitals_${e.name}_event`]:{id:e.id,delta:e.delta,rating:t,navigationType:e.navigationType},page_path:window.location.pathname,referrer:n.length>200?n.slice(0,200):n,timestamp:Date.now()};setTimeout(()=>{Tt.track("$web_vitals",i)},0)}function dO(e,t){const i={LCP:{good:2500,poor:4e3},FID:{good:100,poor:300},CLS:{good:.1,poor:.25},FCP:{good:1800,poor:3e3},TTFB:{good:800,poor:1800},INP:{good:200,poor:500}}[e];return i?t<=i.good?"good":t<=i.poor?"needs-improvement":"poor":"needs-improvement"}async function mO(){try{const e=await Ce(()=>import("./web-vitals-DcvjKPr-.js"),[],import.meta.url),{onCLS:t,onFCP:n,onLCP:i,onTTFB:s,onINP:o}=e;t(ta),n(ta),i(ta),s(ta),o(ta)}catch(e){console.error("[Web Vitals] Failed to initialize monitoring:",e)}}const za="page_report";function pO(){const e=window.innerWidth;return e<768?"mobile":e<1024?"tablet":"desktop"}const Sb=200;function fO(){const e=navigator.userAgent;return{page_url:window.location.href,page_path:window.location.pathname,page_title:document.title,referrer:document.referrer,viewport_width:window.innerWidth,viewport_height:window.innerHeight,screen_width:window.screen.width,screen_height:window.screen.height,device_type:pO(),user_agent:e.length>Sb?e.slice(0,Sb):e,language:navigator.language,timestamp:Date.now()}}function hO(){if(!window.performance)return null;const e={page_url:window.location.pathname,page_path:window.location.pathname,timestamp:Date.now()};if(window.performance.getEntriesByType){const t=window.performance.getEntriesByType("navigation");if(t&&t.length>0){const n=t[0];n.domainLookupEnd&&n.domainLookupStart&&(e.dns_time=n.domainLookupEnd-n.domainLookupStart),n.connectEnd&&n.connectStart&&(e.tcp_time=n.connectEnd-n.connectStart),n.responseStart&&n.requestStart&&(e.request_time=n.responseStart-n.requestStart),n.responseEnd&&n.responseStart&&(e.response_time=n.responseEnd-n.responseStart),n.domComplete&&n.domInteractive&&(e.dom_processing_time=n.domComplete-n.domInteractive),n.domInteractive&&n.fetchStart&&(e.dom_interactive_time=n.domInteractive-n.fetchStart),n.domComplete&&n.fetchStart&&(e.dom_complete_time=n.domComplete-n.fetchStart),n.loadEventEnd&&n.fetchStart&&(e.load_time=n.loadEventEnd-n.fetchStart)}}if(window.performance.getEntriesByType){const t=window.performance.getEntriesByType("resource");e.total_resources=t.length,e.total_size=t.reduce((n,i)=>n+(i.transferSize||0),0)}return e}function Dl(){if(!Tt.isAnalyticsEnabled())return;const e=fO();Tt.track("page_view",{category:za,...e})}function Tb(){if(!Tt.isAnalyticsEnabled())return;const e=hO();if(!e){console.warn("[Page Report] Performance data not available");return}Tt.track("page_performance",{category:za,...e})}function gO(){if(!Tt.isAnalyticsEnabled())return;const e=Math.round(performance.now());Tt.track("page_unload",{category:za,page_url:window.location.href,page_path:window.location.pathname,time_on_page:e,timestamp:Date.now()})}function bO(){try{Dl(),document.readyState==="complete"?Tb():window.addEventListener("load",()=>{setTimeout(()=>{Tb()},0)}),window.addEventListener("beforeunload",()=>{gO()}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?Tt.track("page_hidden",{category:za,page_url:window.location.href,page_path:window.location.pathname,timestamp:Date.now()}):document.visibilityState==="visible"&&Tt.track("page_visible",{category:za,page_url:window.location.href,page_path:window.location.pathname,timestamp:Date.now()})}),window.addEventListener("popstate",()=>{setTimeout(()=>{Dl()},100)});const e=history.pushState,t=history.replaceState;history.pushState=function(...n){e.apply(this,n),setTimeout(()=>{Dl()},100)},history.replaceState=function(...n){t.apply(this,n),setTimeout(()=>{Dl()},100)}}catch(e){console.error("[Page Report] Failed to initialize monitoring:",e)}}function Db(e){if(!e||!(e instanceof Element))return!1;const t=e,n=["input","textarea","select","button",".unified-toolbar",".chat-drawer",".side-drawer",".toolbox-drawer",".project-drawer",".popup-toolbar",".t-dialog",".t-drawer",".t-popup",".t-popover",".Dialog",".winbox",".ai-input-bar",".view-navigation",".minimap",".task-queue-panel",".t-slider",".unified-color-picker",".color-picker",".media-library",".viewer-container",".viewer-canvas",".viewer-footer",".viewer-toolbar",".unified-viewer",".media-viewport",".thumbnail-queue",'[role="button"]','[role="slider"]','[role="menu"]','[role="menuitem"]','[role="dialog"]',"[data-allow-touch]"];for(const i of n)if(t.matches(i)||t.closest(i))return!0;if(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth){const i=window.getComputedStyle(t);if(i.overflowY==="auto"||i.overflowY==="scroll"||i.overflowX==="auto"||i.overflowX==="scroll")return!0}return!1}function _b(e){if(!e||!(e instanceof Element))return!1;const t=e,n=[".plait-board-container",".plait-board","[plait-board]","svg.rough-svg"];for(const i of n)if(t.matches(i)||t.closest(i))return!0;return!1}function xO(){if(typeof window>"u")return()=>{};const e=i=>{if(i.touches.length>1){const s=i.target;if(Db(s))return;_b(s)&&(i.preventDefault(),i.stopPropagation())}},t=i=>{const s=i.target;Db(s)||_b(s)&&(i.preventDefault(),i.stopPropagation())},n=i=>{(i.ctrlKey||i.metaKey)&&i.preventDefault()};return document.addEventListener("touchstart",e,{passive:!1,capture:!0}),document.addEventListener("touchmove",e,{passive:!1,capture:!0}),document.addEventListener("touchend",e,{passive:!1,capture:!0}),document.addEventListener("gesturestart",t,{passive:!1,capture:!0}),document.addEventListener("gesturechange",t,{passive:!1,capture:!0}),document.addEventListener("gestureend",t,{passive:!1,capture:!0}),window.addEventListener("wheel",n,{passive:!1}),()=>{document.removeEventListener("touchstart",e,!0),document.removeEventListener("touchmove",e,!0),document.removeEventListener("touchend",e,!0),document.removeEventListener("gesturestart",t,!0),document.removeEventListener("gesturechange",t,!0),document.removeEventListener("gestureend",t,!0),window.removeEventListener("wheel",n)}}const nm=Ln.DB_CLEANUP_DONE;function KN(){let e=0;for(const t of Px)try{localStorage.getItem(t)!==null&&(localStorage.removeItem(t),e++)}catch(n){console.warn(`[DBCleanup] Failed to remove LocalStorage key ${t}:`,n)}return e}async function YN(){localStorage.getItem(nm)||(KN(),localStorage.setItem(nm,Date.now().toString()))}function wO(){localStorage.removeItem(nm)}typeof window<"u"&&(window.__dbCleanup={run:YN,reset:wO,cleanupLS:KN,LS_KEYS_DEPRECATED:Px});const Ep=[{lsKey:En.PROMPT_HISTORY,idbKey:En.PROMPT_HISTORY,deleteAfterMigration:!0},{lsKey:En.VIDEO_PROMPT_HISTORY,idbKey:En.VIDEO_PROMPT_HISTORY,deleteAfterMigration:!0},{lsKey:En.PRESET_SETTINGS,idbKey:En.PRESET_SETTINGS,deleteAfterMigration:!0},{lsKey:En.BATCH_IMAGE_CACHE,idbKey:En.BATCH_IMAGE_CACHE,deleteAfterMigration:!0},{lsKey:En.RECENT_TEXT_COLORS,idbKey:En.RECENT_TEXT_COLORS,deleteAfterMigration:!0},{lsKey:En.CUSTOM_GRADIENTS,idbKey:En.CUSTOM_GRADIENTS,deleteAfterMigration:!0},{lsKey:En.CUSTOM_FONTS,idbKey:En.CUSTOM_FONTS,deleteAfterMigration:!0},{lsKey:En.TOOLBAR_CONFIG,idbKey:En.TOOLBAR_CONFIG,deleteAfterMigration:!0}];function Sp(){try{return localStorage.getItem(Ln.LS_TO_IDB_MIGRATION_DONE)!==null}catch{return!1}}function yO(){try{localStorage.setItem(Ln.LS_TO_IDB_MIGRATION_DONE,Date.now().toString())}catch(e){console.error("[StorageMigration] Failed to mark migration done:",e)}}function NO(e){try{const t=localStorage.getItem(e);return t===null?null:JSON.parse(t)}catch(t){return console.warn(`[StorageMigration] Failed to read ${e} from LocalStorage:`,t),null}}function Ib(e){try{localStorage.removeItem(e)}catch(t){console.warn(`[StorageMigration] Failed to delete ${e} from LocalStorage:`,t)}}async function vO(e){const{lsKey:t,idbKey:n,deleteAfterMigration:i}=e;try{const s=NO(t);return s===null?{key:t,success:!0}:await Xt.get(n)!==null?(i&&Ib(t),{key:t,success:!0}):(await Xt.set(n,s),await Xt.get(n)===null?{key:t,success:!1,error:"Verification failed: data not found after write"}:(i&&Ib(t),{key:t,success:!0}))}catch(s){const o=s instanceof Error?s.message:String(s);return console.error(`[StorageMigration] Failed to migrate ${t}:`,s),{key:t,success:!1,error:o}}}async function ZN(){if(!Xt.isAvailable())return console.warn("[StorageMigration] IndexedDB not available, skipping migration"),[];if(Sp())return[];const e=[];for(const n of Ep){const i=await vO(n);e.push(i),i.success||console.warn(`[StorageMigration] Failed: ${i.key} - ${i.error}`)}return e.filter(n=>n.success).length,e.filter(n=>!n.success).length===0&&yO(),e}function JN(){try{localStorage.removeItem(Ln.LS_TO_IDB_MIGRATION_DONE)}catch(e){console.error("[StorageMigration] Failed to reset migration status:",e)}}const kO={isMigrationDone:Sp,runMigration:ZN,resetMigration:JN,MIGRATION_CONFIGS:Ep};typeof window<"u"&&(window.__storageMigration={run:ZN,reset:JN,isDone:Sp,configs:Ep});const Zn={LOADING_STATE:"aitu_page_loading_state",CRASH_COUNT:"aitu_crash_count",LAST_SUCCESS_LOAD:"aitu_last_success_load",SAFE_MODE:"aitu_safe_mode",CRASH_HISTORY:"aitu_crash_history"};class EO{constructor(){this.state={crashDetected:!1,crashCount:0,isSafeMode:!1,crashHistory:[]}}markLoadingStart(){try{localStorage.getItem(Zn.LOADING_STATE)==="loading"&&(this.state.crashDetected=!0,this.incrementCrashCount(),this.recordCrash()),localStorage.setItem(Zn.LOADING_STATE,"loading"),this.state.isSafeMode=localStorage.getItem(Zn.SAFE_MODE)==="true",this.loadCrashHistory()}catch(t){console.warn("[CrashRecovery] Failed to mark loading start:",t)}}markLoadingComplete(){try{localStorage.setItem(Zn.LOADING_STATE,"complete"),localStorage.setItem(Zn.LAST_SUCCESS_LOAD,Date.now().toString()),this.state.isSafeMode||(localStorage.setItem(Zn.CRASH_COUNT,"0"),this.state.crashCount=0)}catch(t){console.warn("[CrashRecovery] Failed to mark loading complete:",t)}}incrementCrashCount(){try{const t=parseInt(localStorage.getItem(Zn.CRASH_COUNT)||"0",10);this.state.crashCount=t+1,localStorage.setItem(Zn.CRASH_COUNT,this.state.crashCount.toString())}catch{}}recordCrash(){try{const t=performance,n={timestamp:Date.now(),url:window.location.href,memoryStats:t.memory?{usedJSHeapSize:t.memory.usedJSHeapSize,totalJSHeapSize:t.memory.totalJSHeapSize,jsHeapSizeLimit:t.memory.jsHeapSizeLimit}:null};this.state.crashHistory.unshift(n),this.state.crashHistory=this.state.crashHistory.slice(0,10),this.saveCrashHistory()}catch{}}loadCrashHistory(){try{const t=localStorage.getItem(Zn.CRASH_HISTORY);t&&(this.state.crashHistory=JSON.parse(t))}catch{this.state.crashHistory=[]}}saveCrashHistory(){try{localStorage.setItem(Zn.CRASH_HISTORY,JSON.stringify(this.state.crashHistory))}catch{}}getState(){return{...this.state}}isCrashDetected(){return this.state.crashDetected}getCrashCount(){return this.state.crashCount}isSafeMode(){return this.state.isSafeMode}shouldShowSafeModePrompt(){return this.state.crashDetected&&this.state.crashCount>=2}enableSafeMode(){try{localStorage.setItem(Zn.SAFE_MODE,"true"),this.state.isSafeMode=!0}catch{}}disableSafeMode(){try{localStorage.removeItem(Zn.SAFE_MODE),this.state.isSafeMode=!1,localStorage.setItem(Zn.CRASH_COUNT,"0"),this.state.crashCount=0}catch{}}clearCrashState(){try{localStorage.setItem(Zn.CRASH_COUNT,"0"),this.state.crashCount=0,this.state.crashDetected=!1}catch{}}checkUrlSafeMode(){try{const t=new URLSearchParams(window.location.search);if(t.get("safe")==="1"||t.get("safe_mode")==="1")return this.enableSafeMode(),!0}catch{}return!1}getMemoryInfo(){try{const t=performance;if(!t.memory)return null;const n=i=>i<1024*1024?`${(i/1024).toFixed(1)} KB`:i<1024*1024*1024?`${(i/1024/1024).toFixed(1)} MB`:`${(i/1024/1024/1024).toFixed(2)} GB`;return{used:n(t.memory.usedJSHeapSize),limit:n(t.memory.jsHeapSizeLimit),percent:t.memory.usedJSHeapSize/t.memory.jsHeapSizeLimit*100}}catch{return null}}}const Jn=new EO,SO=3e4,TO=800,DO=.6,_O=3,Tp="aitu_last_snapshot",IO=50,wa=[],CO=20,jO=2e3;let ya=null;const Cb=3e3,PO=1e4,AO=200,MO=5e3,VO=10,UO=5e3,RO=30,qO=20,jb=20,LO=100,OO=30;let Pb=null,Ab=!1,Mb=null,Vb=null,Gu=null,Hu=0,lo=60,pa=!1,Wu=!1;const ts=[],mo=[],Mi=[];function zO(e){const t=qn(),n=Date.now();return()=>{const i=qn();if(!t||!i)return;const s=(i.usedJSHeapSize-t.usedJSHeapSize)/(1024*1024),o=Date.now()-n;if(Math.abs(s)>=IO){const r=s>=0?"+":"";console.warn(`[MemoryLog] ${e}: ${r}${s.toFixed(0)} MB (${o}ms)`)}}}function qn(){if(typeof performance<"u"&&"memory"in performance){const e=performance.memory;return{usedJSHeapSize:e.usedJSHeapSize,totalJSHeapSize:e.totalJSHeapSize,jsHeapSizeLimit:e.jsHeapSizeLimit}}}function xr(){try{const e={domNodeCount:document.getElementsByTagName("*").length,canvasCount:document.getElementsByTagName("canvas").length,imageCount:document.getElementsByTagName("img").length,videoCount:document.getElementsByTagName("video").length,iframeCount:document.getElementsByTagName("iframe").length,plaitBoardExists:!!document.querySelector(".plait-board-container")},t=document.querySelector(".plait-board-container");if(t){const n=t.querySelectorAll("svg > g > g");e.plaitElementCount=n.length}return window.getEventListeners,e}catch{return{domNodeCount:0,canvasCount:0,imageCount:0,videoCount:0,iframeCount:0,plaitBoardExists:!1}}}function QN(){if(!tn.isInitialized()||wa.length===0)return;const e=wa.splice(0,wa.length);for(const t of e)tn.reportCrashSnapshot(t).catch(()=>{});ya&&(clearInterval(ya),ya=null)}function BO(){ya||(ya=setInterval(()=>{tn.isInitialized()&&QN()},jO))}function wi(e){try{tn.isInitialized()?(QN(),tn.reportCrashSnapshot(e).catch(()=>{})):wa.length<CO&&(wa.push(e),BO())}catch(t){console.warn("[MemoryLog] Failed to send snapshot to SW:",t)}}function FO(e){try{localStorage.setItem(Tp,JSON.stringify(e))}catch{}}function GO(){try{const e=localStorage.getItem(Tp);if(e)return JSON.parse(e)}catch{}return null}function HO(){try{localStorage.removeItem(Tp)}catch{}}function WO(){const e={id:`startup-${Date.now()}`,timestamp:Date.now(),type:"startup",userAgent:navigator.userAgent,url:location.href,memory:qn()};wi(e)}function $O(){if(Pb!==null)return;let e=0;Pb=window.setInterval(()=>{const t=qn();if(!t)return;const n=t.usedJSHeapSize/(1024*1024),i=t.jsHeapSizeLimit/(1024*1024),s=n/i;if(n>TO||s>DO){e++;const a=e>=_O?xr():void 0,l={id:`periodic-${Date.now()}`,timestamp:Date.now(),type:"periodic",memory:t,pageStats:a,userAgent:navigator.userAgent,url:location.href};wi(l)}else e=0},SO)}function XO(){window.addEventListener("error",e=>{var n;if(e.error instanceof DOMException&&(e.error.name==="AbortError"||e.error.name==="NotAllowedError"))return;const t={id:`error-${Date.now()}`,timestamp:Date.now(),type:"error",error:{message:e.message||"Unknown error",stack:(n=e.error)==null?void 0:n.stack,type:"uncaughtError"},memory:qn(),userAgent:navigator.userAgent,url:location.href,customData:{recentActions:ts.slice(-10),filename:e.filename,lineno:e.lineno,colno:e.colno}};wi(t),console.error("[MemoryLog] Uncaught error captured:",e.message)}),window.addEventListener("unhandledrejection",e=>{const t=e.reason,n=(t==null?void 0:t.message)||String(t)||"",i=(t==null?void 0:t.stack)||"";if(t instanceof DOMException&&(t.name==="AbortError"||t.name==="NotAllowedError"||t.name==="DataError"&&n.includes("No key or key range specified"))||n.includes("posthog.com")||n.includes("sentry.io")||i.includes("posthog")||i.includes("sentry"))return;const s={id:`rejection-${Date.now()}`,timestamp:Date.now(),type:"error",error:{message:n||"Unhandled Promise rejection",stack:i,type:"unhandledRejection"},memory:qn(),userAgent:navigator.userAgent,url:location.href,customData:{recentActions:ts.slice(-10)}};wi(s),console.error("[MemoryLog] Unhandled rejection captured:",t)}),window.addEventListener("beforeunload",()=>{const e=qn();if(e){const t={id:`beforeunload-${Date.now()}`,timestamp:Date.now(),type:"beforeunload",memory:e,userAgent:navigator.userAgent,url:location.href};FO(t),wi(t)}})}function KO(){if(Mb!==null)return;let e=Date.now();document.addEventListener("visibilitychange",()=>{document.hidden?Wu=!0:(e=Date.now(),setTimeout(()=>{Wu=!1},Cb+100))}),Mb=window.setInterval(()=>{const t=Date.now(),n=t-e;if(n>PO&&!Wu&&!document.hidden){const i={id:`freeze-${Date.now()}`,timestamp:Date.now(),type:"freeze",memory:qn(),pageStats:xr(),performance:{freezeDuration:n,lastHeartbeat:e,fps:lo},userAgent:navigator.userAgent,url:location.href,customData:{recentActions:ts.slice(-10),recentErrors:mo.slice(-5),recentNetworkErrors:Mi.slice(-5)}};wi(i)}e=t,tn.isInitialized()&&tn.sendHeartbeat(t).catch(()=>{})},Cb)}function YO(){if(Gu===null&&!(typeof PerformanceObserver>"u"))try{Gu=new PerformanceObserver(e=>{for(const t of e.getEntries())if(t.duration>AO){const i=t.attribution;let s;if(i&&i.length>0){const r=i[0];s={name:r.name,containerType:r.containerType,containerSrc:r.containerSrc,containerId:r.containerId,containerName:r.containerName}}const o={id:`longtask-${Date.now()}`,timestamp:Date.now(),type:"longtask",memory:qn(),performance:{longTaskDuration:t.duration,fps:lo},userAgent:navigator.userAgent,url:location.href,customData:{taskName:t.name,startTime:t.startTime,attribution:s,debugTip:"Use Chrome DevTools Performance panel to record and analyze the call stack"}};wi(o)}}),Gu.observe({entryTypes:["longtask"]})}catch{}}function ZO(){if(Vb!==null)return;let e=0;const t=()=>{if(e++,e>=OO){const n=performance.now(),i=n-Hu;i>0&&(lo=Math.round(e*1e3/i)),e=0,Hu=n}requestAnimationFrame(t)};Hu=performance.now(),requestAnimationFrame(t),Vb=window.setInterval(()=>{if(lo<VO&&lo>0){const n={id:`lowfps-${Date.now()}`,timestamp:Date.now(),type:"freeze",memory:qn(),performance:{fps:lo},userAgent:navigator.userAgent,url:location.href};wi(n)}},MO)}function JO(){setTimeout(()=>{Ub()},UO),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&!pa&&setTimeout(Ub,1e3)})}function Ub(){if(pa)return;const e=document.getElementById("root"),t=e&&e.children.length>0,i=!!document.querySelector(".plait-board-container");if(document.body.children.length>1,e&&!t){pa=!0;const s={id:`whitescreen-${Date.now()}`,timestamp:Date.now(),type:"whitescreen",memory:qn(),pageStats:{domNodeCount:document.getElementsByTagName("*").length,canvasCount:0,imageCount:0,videoCount:0,iframeCount:0,plaitBoardExists:i},userAgent:navigator.userAgent,url:location.href,customData:{rootExists:!!e,rootChildCount:(e==null?void 0:e.children.length)||0,bodyChildCount:document.body.children.length,hasPlaitBoard:i}};wi(s),console.error("[MemoryLog] 白屏检测: React 未渲染内容")}t&&!i&&location.pathname==="/"&&setTimeout(()=>{if(!document.querySelector(".plait-board-container")&&!pa){pa=!0;const s={id:`whitescreen-noboard-${Date.now()}`,timestamp:Date.now(),type:"whitescreen",memory:qn(),pageStats:xr(),userAgent:navigator.userAgent,url:location.href,customData:{reason:"画板未加载",rootChildCount:(e==null?void 0:e.children.length)||0}};wi(s),console.error("[MemoryLog] 白屏检测: 画板组件未加载")}},5e3)}function fa(e,t,n){ts.push({time:Date.now(),action:e,target:t,detail:n}),ts.length>RO&&ts.shift()}function QO(){let e=0;document.addEventListener("click",t=>{const n=Date.now();if(n-e<LO)return;e=n;const i=t.target;if(!i)return;const s=()=>{var a,l,u,d,m,f,h,g,b,x,y,w,v,S,k;let o="";const r=(l=(a=i.closest)==null?void 0:a.call(i,"[data-track]"))==null?void 0:l.getAttribute("data-track");if(r)o=r;else if(i.tagName==="BUTTON"||(u=i.closest)!=null&&u.call(i,"button")){const N=((d=i.closest)==null?void 0:d.call(i,"button"))||i,E=(m=N.textContent)==null?void 0:m.trim().slice(0,20),I=(b=(g=(h=(f=N.className)==null?void 0:f.split)==null?void 0:h.call(f," "))==null?void 0:g[0])==null?void 0:b.slice(0,20);o=`btn:${E||I||"unknown"}`}else if(i.tagName==="A")o=`link:${((x=i.pathname)==null?void 0:x.slice(0,30))||""}`;else if(i.tagName==="INPUT"||i.tagName==="TEXTAREA"){const N=i;o=`input:${N.name||N.type||((y=N.placeholder)==null?void 0:y.slice(0,15))||""}`}else if(i.id)o=`#${i.id}`;else{const N=(S=(v=(w=i.className)==null?void 0:w.split)==null?void 0:v.call(w," "))==null?void 0:S[0];o=N?`.${N.slice(0,20)}`:((k=i.tagName)==null?void 0:k.toLowerCase())||"unknown"}fa("click",o)};"requestIdleCallback"in window?window.requestIdleCallback(s,{timeout:100}):setTimeout(s,0)},{capture:!0,passive:!0}),document.addEventListener("keydown",t=>{if(t.ctrlKey||t.metaKey||t.altKey){const n=[];(t.ctrlKey||t.metaKey)&&n.push("Cmd"),t.altKey&&n.push("Alt"),t.shiftKey&&n.push("Shift"),n.push(t.key),fa("shortcut",n.join("+"))}},{capture:!0,passive:!0}),window.addEventListener("popstate",()=>{fa("navigate",location.pathname)}),window.addEventListener("hashchange",()=>{fa("navigate",location.hash)})}function ez(){const e=window.fetch;window.fetch=async function(t,n){const i=Date.now();try{const s=await e.call(this,t,n);if(!s.ok){const o=typeof t=="string"?t:t.url,r=Date.now()-i,a=bd(o).slice(0,300);Mi.push({time:Date.now(),url:a,method:(n==null?void 0:n.method)||"GET",status:s.status,statusText:s.statusText,duration:r}),Mi.length>jb&&Mi.shift()}return s}catch(s){const o=typeof t=="string"?t:t.url,r=Date.now()-i,a=bd(o).slice(0,300);throw Mi.push({time:Date.now(),url:a,method:(n==null?void 0:n.method)||"GET",error:s.message,duration:r}),Mi.length>jb&&Mi.shift(),s}}}function tz(){window.addEventListener("error",e=>{var n;const t=e.target;if(t&&t!==window&&t instanceof HTMLElement&&("src"in t||"href"in t)){const i=t.src||t.href,s=(n=t.tagName)==null?void 0:n.toLowerCase();fa("resource_error",s,i==null?void 0:i.slice(0,100))}},{capture:!0})}function nz(){const e=console.error;console.error=function(...t){e.apply(this,t);const n=t[0];if(typeof n=="string"&&n.includes("[MemoryLog]"))return;const i=[...t];setTimeout(()=>{var r;let s="",o;for(let a=0;a<Math.min(i.length,5);a++){const l=i[a];if(typeof l=="string")s+=l+" ";else if(typeof l=="number"||typeof l=="boolean")s+=String(l)+" ";else if(l instanceof Error)s+=`Error: ${l.message} `,o=l.stack;else if(l&&typeof l=="object")try{const d=Object.keys(l).slice(0,5).map(m=>{const f=l[m];return`${m}:${typeof f=="string"?f.slice(0,20):typeof f}`}).join(",");s+=`{${d}} `}catch{s+=`[${((r=l.constructor)==null?void 0:r.name)||"Object"}] `}}mo.push({time:Date.now(),message:s.trim().slice(0,500),stack:o}),mo.length>qO&&mo.shift()},0)}}function ev(){return{userActions:[...ts],consoleErrors:[...mo],networkErrors:[...Mi],memory:qn(),pageStats:xr(),fps:lo}}function iz(){typeof window>"u"||(window.__memoryLog={getMemory:()=>{const e=qn();return e?{usedMB:(e.usedJSHeapSize/1024/1024).toFixed(1),limitMB:(e.jsHeapSizeLimit/1024/1024).toFixed(0),percent:(e.usedJSHeapSize/e.jsHeapSizeLimit*100).toFixed(1)}:null},track:zO,diagnose:()=>{const e=qn(),t=xr();if(console.group("[MemoryLog] 内存诊断"),e){const n=e.usedJSHeapSize/1048576,i=e.jsHeapSizeLimit/(1024*1024),s=n/i*100;console.log(`内存: ${n.toFixed(0)} MB / ${i.toFixed(0)} MB (${s.toFixed(1)}%)`)}return console.log(`页面: DOM ${t.domNodeCount} | Canvas ${t.canvasCount} | Img ${t.imageCount} | Video ${t.videoCount}`),t.plaitElementCount!==void 0&&console.log(`Plait 元素: ${t.plaitElementCount}`),t.imageCount>50&&console.warn("图片较多,考虑懒加载"),t.domNodeCount>5e3&&console.warn("DOM 节点较多"),console.groupEnd(),{memory:e,pageStats:t}},snapshot:()=>{const e={id:`manual-${Date.now()}`,timestamp:Date.now(),type:"periodic",memory:qn(),pageStats:xr(),userAgent:navigator.userAgent,url:location.href};wi(e)},getDiagnostics:ev,getActions:()=>(console.table(ts.map(e=>({time:new Date(e.time).toLocaleTimeString("zh-CN"),action:e.action,target:e.target,detail:e.detail}))),ts),getNetworkErrors:()=>(console.table(Mi.map(e=>({time:new Date(e.time).toLocaleTimeString("zh-CN"),url:e.url,status:e.status,error:e.error}))),Mi),getConsoleErrors:()=>(console.table(mo.map(e=>({time:new Date(e.time).toLocaleTimeString("zh-CN"),message:e.message.slice(0,100)}))),mo)})}function sz(){if(Ab)return;Ab=!0,WO(),XO(),$O(),KO(),YO(),ZO(),JO(),QO(),ez(),tz(),nz(),iz();const e=GO();e&&(e.customData={...e.customData,recovered:!0,recoveredAt:Date.now()},wi(e),HO())}function im(e,t){try{const n=oz(e,t),i=JSON.stringify(n,null,2),s=new Blob([i],{type:"application/json"}),o=URL.createObjectURL(s),r=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),a=document.createElement("a");a.href=o,a.download=`opentu-error-log-${r}.json`,a.style.display="none",document.body.appendChild(a),a.click(),setTimeout(()=>{document.body.removeChild(a),URL.revokeObjectURL(o)},100)}catch(n){console.error("[ErrorLogExporter] Failed to export:",n)}}function oz(e,t){const n={exportTime:new Date().toISOString(),version:"1.0",environment:{userAgent:navigator.userAgent,url:window.location.href,timestamp:Date.now(),language:navigator.language,platform:navigator.platform,screenSize:`${window.screen.width}x${window.screen.height}`},crashRecovery:Jn.getState(),diagnostics:ev(),unifiedLogs:VT.getMemoryLogs()};return e&&(n.currentError={message:e.message,stack:e.stack,componentStack:(t==null?void 0:t.componentStack)??void 0}),n}const rz="aitu:lazy-chunk-retry",az="_lazy_chunk_retry",lz="_t",cz=[/Failed to fetch dynamically imported module/i,/Importing a module script failed/i,/Loading chunk [\w-]+ failed/i,/ChunkLoadError/i];function uz(){var e;return typeof document>"u"?"unknown":((e=document.querySelector('meta[name="app-version"]'))==null?void 0:e.getAttribute("content"))||"unknown"}function tv(e){if(e instanceof Error){const t=[e.name,e.message,e.stack];return e.cause&&t.push(String(e.cause)),t.filter(Boolean).join(`
|
|
562
|
+
`)}return String(e??"")}function dz(e){const t=e.match(/https?:\/\/[^\s)'"]+\.js(?:\?[^\s)'"]*)?/i);if(!t)return"unknown-module";try{return new URL(t[0]).pathname}catch{return t[0]}}function mz(e){const t=tv(e);return cz.some(n=>n.test(t))}function pz(e){if(typeof window>"u"||typeof sessionStorage>"u"||!mz(e))return!1;const t=tv(e),n=`${rz}:${uz()}:${dz(t)}`;try{if(sessionStorage.getItem(n)==="1")return!1;sessionStorage.setItem(n,"1")}catch{return!1}const i=new URL(window.location.href);return i.searchParams.set(az,"1"),i.searchParams.set(lz,String(Date.now())),console.warn("[ErrorBoundary] Detected stale lazy chunk. Reloading once to recover.",e),window.setTimeout(()=>{window.location.replace(i.toString())},0),!0}class fz extends p.Component{constructor(){super(...arguments),this.state={hasError:!1,error:null,errorInfo:null,recoveringFromChunkError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){const i=pz(t);this.setState({errorInfo:n,recoveringFromChunkError:i}),!i&&console.error("[ErrorBoundary] React render error:",t,n)}render(){var t,n,i,s,o,r;return this.state.hasError?this.state.recoveringFromChunkError?c.jsxDEV(Sc,{variant:"error",title:"检测到静态资源已更新",description:"当前页面引用的懒加载资源已失效,正在自动刷新一次以恢复工作台。若长时间未恢复,可手动点击安全模式。",errorMessage:((t=this.state.error)==null?void 0:t.message)||"动态资源加载失败",errorStack:(n=this.state.error)==null?void 0:n.stack,componentStack:((i=this.state.errorInfo)==null?void 0:i.componentStack)??void 0,onExportLog:()=>im(this.state.error,this.state.errorInfo),onSafeModeReload:sm,onGoToDebug:Ec},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:153,columnNumber:9},this):c.jsxDEV(Sc,{variant:"error",errorMessage:((s=this.state.error)==null?void 0:s.message)||"未知错误",errorStack:(o=this.state.error)==null?void 0:o.stack,componentStack:((r=this.state.errorInfo)==null?void 0:r.componentStack)??void 0,onExportLog:()=>im(this.state.error,this.state.errorInfo),onSafeModeReload:sm,onGoToDebug:Ec},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:170,columnNumber:7},this):this.props.children}}function sm(){try{localStorage.setItem("aitu_safe_mode","true")}catch{}window.location.reload()}function Ec(){const e="/sw-debug.html";window.location.href=e}const hz={crash:{iconBg:"#FFF3E0",iconStroke:"#F57C00",iconPath:c.jsxDEV(c.Fragment,{children:[c.jsxDEV("circle",{cx:"12",cy:"12",r:"10"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:235,columnNumber:9},void 0),c.jsxDEV("line",{x1:"12",y1:"8",x2:"12",y2:"12"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:236,columnNumber:9},void 0),c.jsxDEV("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:237,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:234,columnNumber:7},void 0),defaultTitle:"检测到页面异常退出",defaultDesc:""},error:{iconBg:"#FFEBEE",iconStroke:"#E53935",iconPath:c.jsxDEV(c.Fragment,{children:[c.jsxDEV("circle",{cx:"12",cy:"12",r:"10"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:248,columnNumber:9},void 0),c.jsxDEV("line",{x1:"15",y1:"9",x2:"9",y2:"15"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:249,columnNumber:9},void 0),c.jsxDEV("line",{x1:"9",y1:"9",x2:"15",y2:"15"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:250,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:247,columnNumber:7},void 0),defaultTitle:"应用渲染出错",defaultDesc:"页面遇到了意外错误,可能是画布数据异常或浏览器内存不足。"}},Sc=e=>{const{variant:t,crashCount:n,memoryInfo:i,onIgnore:s,title:o,description:r,errorMessage:a,errorStack:l,componentStack:u,onExportLog:d,onSafeModeReload:m,onGoToDebug:f}=e,[h,g]=an.useState(!1),b=hz[t],x=o||b.defaultTitle,y=r||b.defaultDesc;return c.jsxDEV("div",{style:cn.overlay,children:c.jsxDEV("div",{style:cn.card,children:[c.jsxDEV("div",{style:{...cn.iconWrap,backgroundColor:b.iconBg},children:c.jsxDEV("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:b.iconStroke,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:b.iconPath},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:277,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:276,columnNumber:9},void 0),c.jsxDEV("h2",{style:cn.title,children:x},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:284,columnNumber:9},void 0),t==="crash"&&n!=null&&c.jsxDEV("p",{style:cn.desc,children:["页面已连续 ",n," 次未能正常加载,可能是因为:",c.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:290,columnNumber:13},void 0),"• 画布元素过多导致内存不足",c.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:291,columnNumber:13},void 0),"• 浏览器内存限制",c.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:292,columnNumber:13},void 0),c.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:292,columnNumber:19},void 0),"建议使用「安全模式」创建空白画布,稍后可从侧边栏切换到其他画布。"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:288,columnNumber:11},void 0),t==="error"&&y&&c.jsxDEV("p",{style:cn.desc,children:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:299,columnNumber:11},void 0),i&&c.jsxDEV(gz,{info:i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:303,columnNumber:24},void 0),t==="error"&&a&&c.jsxDEV("div",{style:cn.errorBox,children:[c.jsxDEV("div",{style:cn.errorMsg,children:a},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:308,columnNumber:13},void 0),(l||u)&&c.jsxDEV("button",{onClick:()=>g(w=>!w),style:cn.detailToggle,children:h?"收起详情":"展开详情"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:310,columnNumber:15},void 0),h&&c.jsxDEV("pre",{style:cn.errorDetail,children:[l,u&&`
|
|
563
|
+
|
|
564
|
+
Component Stack:${u}`]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:316,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:307,columnNumber:11},void 0),c.jsxDEV("div",{style:cn.btnRow,children:[t==="crash"&&s&&c.jsxDEV(_l,{label:"继续加载",onClick:s,bg:"#f5f5f5",bgHover:"#e8e8e8",color:"#666"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:327,columnNumber:13},void 0),t==="error"&&d&&c.jsxDEV(_l,{label:"导出错误日志",onClick:d,bg:"#f5f5f5",bgHover:"#e8e8e8",color:"#333"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:331,columnNumber:13},void 0),c.jsxDEV(_l,{label:"安全模式",onClick:m,bg:"#F39C12",bgHover:"#E67E22",color:"#fff"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:334,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:325,columnNumber:9},void 0),c.jsxDEV("div",{style:cn.divider},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:339,columnNumber:9},void 0),c.jsxDEV("div",{style:cn.helpSection,children:c.jsxDEV("div",{style:cn.helpRow,children:[c.jsxDEV("img",{src:"https://nav.ourzhishi.top/api/dynamic-image/qr-code",alt:"企业微信二维码",style:cn.qrcode,referrerPolicy:"no-referrer"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:345,columnNumber:13},void 0),c.jsxDEV("div",{style:cn.helpText,children:[c.jsxDEV("p",{style:cn.helpTitle,children:"需要帮助?"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:350,columnNumber:15},void 0),c.jsxDEV("p",{style:cn.helpDesc,children:"扫码联系客服,或前往调试页面导出完整日志与备份数据"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:351,columnNumber:15},void 0),c.jsxDEV(_l,{label:"打开调试页面",onClick:f,bg:"#f0eefa",bgHover:"#e2ddf7",color:"#5A4FCF",small:!0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:352,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:349,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:343,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:342,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:274,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:273,columnNumber:5},void 0)},gz=({info:e})=>{const t=e.percent>75?"#E53935":e.percent>50?"#FB8C00":"#43A047";return c.jsxDEV("div",{style:cn.memoryBox,children:[c.jsxDEV("div",{style:{fontSize:12,color:"#888",marginBottom:8},children:"当前内存使用情况"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:370,columnNumber:7},void 0),c.jsxDEV("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[c.jsxDEV("span",{style:{fontSize:14,color:"#333"},children:[e.used," / ",e.limit]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:372,columnNumber:9},void 0),c.jsxDEV("span",{style:{fontSize:14,fontWeight:500,color:t},children:[e.percent.toFixed(0),"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:373,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:371,columnNumber:7},void 0),c.jsxDEV("div",{style:{height:4,backgroundColor:"#e0e0e0",borderRadius:2,marginTop:8,overflow:"hidden"},children:c.jsxDEV("div",{style:{height:"100%",width:`${Math.min(e.percent,100)}%`,backgroundColor:t,transition:"width 0.3s ease"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:376,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:375,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:369,columnNumber:5},void 0)},_l=({label:e,onClick:t,bg:n,bgHover:i,color:s,small:o})=>{const[r,a]=an.useState(!1),l=o?{...cn.btnSmall,backgroundColor:r?i:n,color:s}:{...cn.btn,backgroundColor:r?i:n,color:s};return c.jsxDEV("button",{onClick:t,onMouseOver:()=>a(!0),onMouseOut:()=>a(!1),style:l,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:392,columnNumber:5},void 0)},cn={overlay:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0,0,0,0.5)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:99999},card:{backgroundColor:"#fff",borderRadius:12,padding:32,maxWidth:520,width:"90%",maxHeight:"90vh",overflowY:"auto",boxShadow:"0 20px 60px rgba(0,0,0,0.3)"},iconWrap:{width:64,height:64,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 24px"},title:{margin:"0 0 12px",fontSize:20,fontWeight:600,textAlign:"center",color:"#1a1a1a"},desc:{margin:"0 0 20px",fontSize:14,color:"#666",textAlign:"center",lineHeight:1.6},memoryBox:{backgroundColor:"#f5f5f5",borderRadius:8,padding:"12px 16px",marginBottom:24},errorBox:{backgroundColor:"#f5f5f5",borderRadius:8,padding:"12px 16px",marginBottom:24},errorMsg:{fontSize:13,color:"#E53935",wordBreak:"break-word"},detailToggle:{marginTop:8,padding:0,border:"none",background:"none",color:"#888",fontSize:12,cursor:"pointer",textDecoration:"underline"},errorDetail:{marginTop:8,padding:8,backgroundColor:"#eee",borderRadius:4,fontSize:11,color:"#555",maxHeight:150,overflow:"auto",whiteSpace:"pre-wrap",wordBreak:"break-all"},btnRow:{display:"flex",gap:12},btn:{flex:1,padding:"12px 24px",fontSize:14,fontWeight:500,border:"none",borderRadius:8,cursor:"pointer",transition:"background-color 0.2s ease"},btnSmall:{padding:"8px 16px",fontSize:13,fontWeight:500,border:"none",borderRadius:6,cursor:"pointer",transition:"background-color 0.2s ease"},divider:{height:1,backgroundColor:"#eee",margin:"24px 0"},helpSection:{padding:0},helpRow:{display:"flex",gap:16,alignItems:"center"},qrcode:{width:96,height:96,borderRadius:8,flexShrink:0},helpText:{flex:1,minWidth:0},helpTitle:{margin:"0 0 4px",fontSize:14,fontWeight:500,color:"#333"},helpDesc:{margin:"0 0 12px",fontSize:12,color:"#999",lineHeight:1.5}},bz=500,om="board",Dp="aitu_board_close_snapshot_v1";let $u=!1;function xz(){if(!(typeof window>"u"))return window.__OPENTU_BOOT__}function Rb(){return new URLSearchParams(window.location.search).get(om)}function qb(e,t=!1){const n=new URL(window.location.href);e?n.searchParams.set(om,e):n.searchParams.delete(om),t?window.history.replaceState({boardId:e},"",n.toString()):window.history.pushState({boardId:e},"",n.toString())}function wz(e){try{localStorage.setItem(Dp,JSON.stringify(e))}catch(t){console.warn("[App] Failed to save board close snapshot:",t)}}function nv(){try{const e=localStorage.getItem(Dp);if(!e)return null;const t=JSON.parse(e);return!t||typeof t.boardId!="string"||typeof t.updatedAt!="number"||!Array.isArray(t.children)?null:t}catch(e){return console.warn("[App] Failed to load board close snapshot:",e),null}}function Lb(e){try{const t=nv();if(!t)return;(!e||t.boardId===e)&&localStorage.removeItem(Dp)}catch(t){console.warn("[App] Failed to clear board close snapshot:",t)}}function yz(){const[e,t]=p.useState(!0),[n,i]=p.useState(!1),s=p.useRef(!1),[o,r]=p.useState(!1),[a,l]=p.useState(null),[u,d]=p.useState({children:[]}),[m,f]=p.useState(null),h=p.useRef(null),g=p.useRef(),b=p.useRef(null),x=p.useRef(null),y=p.useRef(!1),w=p.useRef(null),v=p.useRef(!1),S=p.useRef(!1);aO(m),p.useEffect(()=>{h.current=m},[m]);const k=p.useCallback((_,D,C=Date.now())=>{g.current=D.viewport,b.current={boardId:_,children:D.children,viewport:D.viewport,theme:D.theme,updatedAt:C}},[]),N=p.useCallback(_=>{const D=b.current,C=h.current;if(!D||!C||D.boardId!==C)return;wz({...D,updatedAt:Date.now()}),_i.getInstance().saveCurrentBoard({children:D.children,viewport:D.viewport,theme:D.theme}).catch(U=>{console.warn(`[App] Failed to flush board on ${_}:`,U)})},[]);p.useEffect(()=>{const _=xz();_&&(o||a||!e)&&_.markReady()},[a,e,o]),p.useEffect(()=>{(async()=>{if(Jn.shouldShowSafeModePrompt()&&!Jn.isSafeMode()){r(!0),t(!1);return}if($u){const D=_i.getInstance();await D.waitForInitialization();const C=D.getState().currentBoardId;if(C&&D.getBoardMetadata(C)){const M=await D.switchBoard(C),U={children:M.elements||[],viewport:M.viewport,theme:M.theme};k(M.id,U,M.updatedAt),d(U)}t(!1),Jn.markLoadingComplete();return}$u=!0;try{const D=_i.getInstance();if(await D.initialize(),await XN()||await cO(),Jn.isSafeMode()){console.log("[App] Safe mode: looking for existing safe mode board");const H=D.getAllBoards().find(oe=>oe.name.startsWith("安全模式")&&(!oe.elements||oe.elements.length===0));if(H)console.log("[App] Safe mode: reusing existing board:",H.name),await D.switchBoard(H.id),f(H.id);else{console.log("[App] Safe mode: creating new blank board");const oe=new Date().toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"),me=await D.createBoard({name:`安全模式 ${oe}`,elements:[]});me&&(await D.switchBoard(me.id),f(me.id))}const ue={children:[]},te=(H==null?void 0:H.id)||h.current||"safe-mode";k(te,ue,Date.now()),d(ue),s.current=!0,i(!0),t(!1),Jn.markLoadingComplete(),Jn.disableSafeMode(),setTimeout(()=>{pe.warning({content:"当前处于安全模式,已创建空白画布。可从侧边栏切换到其他画布。",duration:8e3,closeBtn:!0})},500);return}let M=null;const U=Rb(),F=D.getState().currentBoardId;let $=null;if(U&&D.getBoardMetadata(U)?$=U:F&&D.getBoardMetadata(F)&&($=F),$)M=await D.switchBoard($);else if(D.hasBoards()){const A=D.getTree(),H=iv(A);H&&(M=await D.switchBoard(H.id))}else{const A=await D.createBoard({name:"我的画板1",elements:[]});A&&(M=await D.switchBoard(A.id))}if(M&&(qb(M.id,!0),f(M.id),D.persistCurrentBoardId(M.id)),M){const A=nv();let H={children:M.elements||[],viewport:M.viewport,theme:M.theme};if(A&&A.boardId===M.id&&A.updatedAt>M.updatedAt){H={children:A.children,viewport:A.viewport,theme:A.theme},M={...M,...H,updatedAt:A.updatedAt};const ue=M.id;D.saveBoard(ue,H).then(()=>{Lb(ue)}).catch(te=>{console.warn("[App] Failed to rehydrate board from close snapshot:",te)}),pe.warning({content:"检测到上次关闭前的未落盘画布,已自动恢复",duration:5e3,closeBtn:!0})}else A&&A.boardId&&!D.getBoardMetadata(A.boardId)&&Lb(A.boardId);k(M.id,H,M.updatedAt),d(H),Xu(H.children).then(ue=>{if(ue!==H.children){const te={...H,children:ue};k(M.id,te,Date.now()),d(te)}}).catch(ue=>{console.error("[App] Video URL recovery failed:",ue)})}}catch(D){console.error("[App] Initialization failed:",D),l(D instanceof Error?D:new Error(String(D)))}finally{s.current=!0,i(!0),t(!1),Jn.markLoadingComplete()}})()},[k]);const E=p.useCallback(async(_,D=!1)=>{try{D||(qb(_.id),_i.getInstance().persistCurrentBoardId(_.id)),f(_.id),S.current=!1;const M={children:await Xu(_.elements||[]),viewport:_.viewport,theme:_.theme};k(_.id,M,_.updatedAt),d(M),setTimeout(()=>{w.current&&(va(w.current),Xb(w.current),Wl(w.current))},0)}catch(C){console.error("[App] Board switch failed:",C),pe.error({content:`切换画板失败: ${C instanceof Error?C.message:"未知错误"}`,duration:5e3,closeBtn:!0})}},[k]);p.useEffect(()=>{const _=async()=>{if(!y.current){y.current=!0;try{const D=Rb();if(D&&D!==m){const C=_i.getInstance(),M=await C.switchBoard(D);M&&(await E(M,!0),C.persistCurrentBoardId(M.id))}}catch(D){console.error("[App] Failed to handle browser navigation:",D)}finally{y.current=!1}}};return window.addEventListener("popstate",_),()=>{window.removeEventListener("popstate",_)}},[m,E]);const I=p.useCallback(async()=>{v.current=!0;try{const _=_i.getInstance();let D=_.getCurrentBoard();if(!D){const M=_.getState().currentBoardId;if(!M){console.warn("[App] handleTabSyncNeeded: no current board ID");return}if(!_.getBoardMetadata(M)){console.warn("[App] handleTabSyncNeeded: board not found",M);return}try{D=await _.switchBoard(M)}catch(U){console.error("[App] handleTabSyncNeeded: failed to load board",U);return}}const C=await _.reloadBoard(D.id);if(C){const U={children:await Xu(C.elements||[]),viewport:C.viewport,theme:C.theme};k(C.id,U,C.updatedAt),d(U)}}catch(_){console.error("[App] Failed to sync board data:",_),ur()}finally{setTimeout(()=>{v.current=!1},100)}},[k]),T=p.useCallback(_=>{if(d(_),g.current=_.viewport,!s.current||v.current)return;S.current=!0;const D=_i.getInstance(),C=D.getCurrentBoard();if(!C){console.warn("[App] handleBoardChange: board not fully loaded, skipping save");return}k(C.id,_),D.saveCurrentBoard(_).then(()=>{Zy(C.id)}).catch(M=>{console.error("[App] Failed to save board:",M)})},[k]),j=p.useCallback(_=>{g.current=_;const D=b.current;D&&(b.current={...D,viewport:_,updatedAt:Date.now()}),!v.current&&(x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{if(v.current)return;const C=_i.getInstance(),M=C.getCurrentBoard();M&&C.saveCurrentBoard({children:M.elements,viewport:_,theme:M.theme}).catch(U=>{console.error("[App] Failed to save viewport:",U)})},bz))},[k]);p.useEffect(()=>{const _=U=>{if(x.current&&(clearTimeout(x.current),x.current=null),v.current)return;const $=_i.getInstance().getCurrentBoard(),A=b.current,H=g.current,ue=h.current;$&&ue&&(!A||A.boardId!==ue)&&k($.id,{children:$.elements,viewport:H??$.viewport,theme:$.theme},Date.now()),!(U==="visibilitychange"&&!S.current)&&N(U)},D=()=>{_("beforeunload")},C=()=>{document.visibilityState==="hidden"&&_("visibilitychange")},M=()=>{_("pagehide")};return window.addEventListener("beforeunload",D),window.addEventListener("pagehide",M),document.addEventListener("visibilitychange",C),()=>{window.removeEventListener("beforeunload",D),window.removeEventListener("pagehide",M),document.removeEventListener("visibilitychange",C),x.current&&clearTimeout(x.current)}},[N,k]);const V=p.useCallback(_=>{r(!1),_?Jn.enableSafeMode():Jn.clearCrashState(),t(!0),$u=!1,setTimeout(()=>{ur()},100)},[]);return o?c.jsxDEV(Sc,{variant:"crash",crashCount:Jn.getCrashCount(),memoryInfo:Jn.getMemoryInfo(),onIgnore:()=>V(!1),onSafeModeReload:()=>V(!0),onGoToDebug:Ec},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:839,columnNumber:7},this):a?c.jsxDEV(Sc,{variant:"error",title:"应用初始化失败",description:"无法加载画板数据,可能是存储损坏或浏览器限制。",errorMessage:a.message,errorStack:a.stack,onExportLog:()=>im(a),onSafeModeReload:sm,onGoToDebug:Ec},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:853,columnNumber:7},this):e?c.jsxDEV("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100vh"},children:"加载中..."},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:868,columnNumber:7},this):c.jsxDEV("div",{style:{height:"100vh"},children:c.jsxDEV(nO,{value:u.children,viewport:u.viewport,theme:u.theme,onChange:T,onViewportChange:j,onBoardSwitch:E,onTabSyncNeeded:I,isDataReady:n,currentBoardId:m,afterInit:_=>{w.current=_,window.__drawnix__web__console=D=>{Nz(_,D)}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:883,columnNumber:7},this)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:882,columnNumber:5},this)}const Nz=(e,t)=>{const n=J.getBoardContainer(e).closest(".drawnix");let i=n.querySelector(".drawnix-console");i||(i=document.createElement("div"),i.classList.add("drawnix-console"),n.append(i));const s=document.createElement("div");s.innerHTML=t,i.append(s)};async function Xu(e){return e.map(t=>{const n=t.url;if(n!=null&&n.startsWith("/__aitu_cache__/video/"))return t;if(n!=null&&n.startsWith("blob:")&&n.includes("#merged-video-")){const i=n.indexOf("#merged-video-");if(i!==-1){const s=n.substring(i+1),o=s.indexOf("#",1),a=`/__aitu_cache__/video/${o>0?s.substring(0,o):s}.mp4`;return{...t,url:a}}}return t})}function iv(e){for(const t of e){if(t.type==="board")return t.data;if(t.type==="folder"&&t.children){const n=iv(t.children);if(n)return n}}return null}const Ob=window.addEventListener.bind(window),vz=window.removeEventListener.bind(window);let _p=null;window.addEventListener=function(e,t,n){if(e==="unload"){console.warn("[Permissions Policy] Blocked unload event listener");return}return e==="beforeunload"&&(_p=t),Ob.call(window,e,t,n)};window.removeEventListener=function(e,t,n){return e==="beforeunload"&&(_p=null),vz.call(window,e,t,n)};window.__checkBeforeUnload=()=>!!_p;let zb=!1;const sv="sw-debug-enabled";function kz(){try{return sessionStorage.getItem(sv)==="true"}catch{return!1}}function Bb(e){try{sessionStorage.setItem(sv,e===!0?"true":"false")}catch{}}let na=kz();const Na=[];let or=null,Ts=0;const Tc=15e3,ia={error:console.error,warn:console.warn,info:console.info,log:console.log,debug:console.debug};function Ys(e,t,n){if(t.includes("[SW]")||t.includes("[SWTaskQueue]")||t.includes("[SWChannelManager]")||t.includes("Invalid message structure")||t.includes("posthog.com")||t.includes("sentry.io")||n&&(n.includes("posthog")||n.includes("sentry")))return;const i=()=>{tn.isInitialized()&&tn.reportConsoleLog(e,[{message:t,stack:n||"",source:window.location.href}],Date.now()).catch(()=>{})},s=()=>{for(;Na.length>0&&tn.isInitialized();){const r=Na.shift();tn.reportConsoleLog(r.level,[{message:r.message,stack:r.stack||"",source:window.location.href}],Date.now()).catch(()=>{})}},o=()=>{const r=Date.now();or||r<Ts||(or=tn.initialize().then(a=>{if(!a){Ts=Date.now()+Tc;return}Ts=0,s()}).catch(()=>{Ts=Date.now()+Tc}).finally(()=>{or=null}))};tn.isInitialized()?i():(Na.push({level:e,message:t,stack:n}),o())}function sa(e){return e.map(t=>{if(t instanceof Error)return t.message;if(typeof t=="object")try{return JSON.stringify(t)}catch{return String(t)}return String(t)}).join(" ")}function Fb(e){for(const t of e)if(t instanceof Error&&t.stack)return t.stack;return""}function Ez(){if(zb||!("serviceWorker"in navigator))return;zb=!0;const e=()=>{if(tn.isInitialized())tn.subscribeToEvent("debug:statusChanged",t=>{const n=t,i=n.enabled??n.debugModeEnabled??!1;na=i,Bb(i)}),tn.getDebugStatus().then(t=>{const n=t.enabled??t.debugModeEnabled??!1;na=n,Bb(n)});else{const t=Date.now();!or&&t>=Ts&&(or=tn.initialize().then(n=>{if(!n){Ts=Date.now()+Tc;return}for(Ts=0;Na.length>0&&tn.isInitialized();){const i=Na.shift();tn.reportConsoleLog(i.level,[{message:i.message,stack:i.stack||"",source:window.location.href}],Date.now()).catch(()=>{})}}).catch(()=>{Ts=Date.now()+Tc}).finally(()=>{or=null})),setTimeout(e,500)}};e(),console.error=function(...t){ia.error.apply(console,t),Ys("error",sa(t),Fb(t))},console.warn=function(...t){ia.warn.apply(console,t),Ys("warn",sa(t),Fb(t))},console.log=function(...t){ia.log.apply(console,t),na&&Ys("log",sa(t),"")},console.info=function(...t){ia.info.apply(console,t),na&&Ys("info",sa(t),"")},console.debug=function(...t){ia.debug.apply(console,t),na&&Ys("debug",sa(t),"")},window.addEventListener("error",t=>{var i;const n=`${t.message} at ${t.filename}:${t.lineno}:${t.colno}`;Ys("error",n,((i=t.error)==null?void 0:i.stack)||"")}),window.addEventListener("unhandledrejection",t=>{const n=t.reason,i=n instanceof Error?n.message:`Unhandled Promise: ${String(n)}`,s=n instanceof Error&&n.stack||"";Ys("error",i,s)})}"serviceWorker"in navigator&&Ez();Jn.markLoadingStart();Jn.checkUrlSafeMode();sz();const Sz=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),Tz=typeof window<"u"&&new URLSearchParams(window.location.search).get("report")==="1",Dz=Tz||!Sz&&!1,_z="0.6.49",Gb="_lazy_chunk_retry",Iz="_t";function Cz(){if(typeof window>"u")return;const e=new URL(window.location.href);if(e.searchParams.has(Gb)){e.searchParams.delete(Gb),e.searchParams.delete(Iz);try{window.history.replaceState(window.history.state,"",e.toString())}catch{}}}Cz();function ov(e){return e==="jsdelivr"||e==="unpkg"||e==="local"}function jz(){return window.__OPENTU_BOOT__||null}function Xo(e){var t,n;(n=(t=jz())==null?void 0:t.setProgress)==null||n.call(t,void 0,e)}function Pz(){const e=window.__OPENTU_CDN__||window.__AITU_CDN__;return!e||!ov(e.cdn)?null:{cdn:e.cdn,latency:Number.isFinite(e.latency)&&e.latency>=0?e.latency:0,timestamp:Number.isFinite(e.timestamp)&&e.timestamp>0?e.timestamp:Date.now()}}function Hb(e){const t=Pz();if(!t)return;const n={type:"SW_CDN_SET_PREFERENCE",...t,version:_z},i=new Set,s=[navigator.serviceWorker.controller,e==null?void 0:e.active,e==null?void 0:e.waiting,e==null?void 0:e.installing];for(const o of s)o&&i.add(o);i.forEach(o=>{o.postMessage(n)})}function Ku(e){const t={type:"SW_BOOT_PROGRESS_GET"},n=new Set,i=[navigator.serviceWorker.controller,e==null?void 0:e.active,e==null?void 0:e.waiting,e==null?void 0:e.installing];for(const s of i)s&&n.add(s);n.forEach(s=>{s.postMessage(t)})}function Wb(e){Hb(e);const t=window.__OPENTU_CDN_API__||window.__AITU_CDN_API__;t!=null&&t.selectBestCDN&&t.selectBestCDN().then(n=>{n&&ov(n.cdn)&&(window.__OPENTU_CDN__=n),Hb(e)}).catch(n=>{console.warn("[Main] Failed to sync CDN preference to Service Worker:",n)})}function Yu(e,t={}){if(typeof window>"u")return;const{delay:n=0,timeout:i=2e3}=t,s=()=>{const r=window.requestIdleCallback;if(typeof r=="function"){r(e,{timeout:i});return}window.setTimeout(e,Math.min(i,500))},o=()=>{if(n>0){window.setTimeout(s,n);return}s()};window.requestAnimationFrame(()=>{window.requestAnimationFrame(o)})}Tj({dsn:"https://a18e755345995baaa0e1972c4cf24497@o4510700882296832.ingest.us.sentry.io/4510700883869696",enabled:Dz,sendDefaultPii:!1,tracesSampleRate:.1,beforeSend(e){return e.extra&&(e.extra=Uo(e.extra)),e.contexts&&(e.contexts=Uo(e.contexts)),e.breadcrumbs&&(e.breadcrumbs=e.breadcrumbs.map(t=>({...t,data:t.data?Uo(t.data):void 0,message:t.message?String(Uo(t.message)):void 0}))),e.request&&(e.request.headers&&(e.request.headers=Uo(e.request.headers)),e.request.data&&(e.request.data=Uo(e.request.data)),e.request.url&&(e.request.url=bd(e.request.url))),e}});Xo({tip:"正在初始化启动服务...",source:"phase"});if(typeof window<"u"){xO(),Yu(()=>{YN().catch(t=>{console.warn("[Main] Database cleanup failed:",t)}),kO.runMigration().then(()=>Promise.all([UT(),RT.initializeAsync()])).catch(t=>{console.warn("[Main] Storage migration/init failed:",t)})},{delay:400,timeout:2500}),Yu(()=>{Ef.start(),Ef.logMemoryStatus()},{delay:5e3,timeout:2500});const e=()=>{window.posthog?(mO(),bO()):setTimeout(e,500)};Yu(e,{delay:1500,timeout:3e3})}if("serviceWorker"in navigator){const e=window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1";let t=null,n=!1,i=null;const s=window.__OPENTU_SW_REGISTRATION_PROMISE__||navigator.serviceWorker.register("/sw.js").catch(a=>(console.warn("[Main] Service worker registration failed:",a),null));window.__OPENTU_SW_REGISTRATION_PROMISE__=s,s.then(a=>{if(!a){Xo({tip:"离线加速未启用,正在直接启动工作台...",source:"phase"});return}i=a,Xo({tip:"启动缓存服务已连接,正在准备资源清单...",source:"phase"}),Wb(a),Ku(a),e&&(a.update().catch(l=>console.warn("Forced update check failed:",l)),a.waiting&&a.waiting.postMessage({type:"SKIP_WAITING"})),a.addEventListener("updatefound",()=>{const l=a.installing;l&&(Ku(a),l.addEventListener("statechange",()=>{Ku(a),l.state==="installed"&&navigator.serviceWorker.controller&&(t=l,e?l.postMessage({type:"SKIP_WAITING"}):fetch(`/version.json?t=${Date.now()}`).then(u=>u.ok?u.json():null).then(u=>{window.dispatchEvent(new CustomEvent("sw-update-available",{detail:{version:(u==null?void 0:u.version)||"new"}}))}).catch(()=>{window.dispatchEvent(new CustomEvent("sw-update-available",{detail:{version:"new"}}))}))}))}),a.active&&!a.installing&&!a.waiting&&Xo({tip:"启动缓存服务已就绪,正在恢复工作台状态...",source:"phase"}),setInterval(()=>{a.update().catch(l=>{console.warn("Update check failed:",l)})},300*1e3)}).catch(a=>{Xo({tip:"离线加速未启用,正在直接启动工作台...",source:"phase"})});const o=()=>{if(!tn.isInitialized()){setTimeout(o,500);return}tn.setEventHandlers({onSWUpdated:a=>{n&&setTimeout(()=>{ur()},1e3)},onSWNewVersionReady:a=>{window.dispatchEvent(new CustomEvent("sw-update-available",{detail:{version:a.version}}))},onSWActivated:a=>{window.dispatchEvent(new CustomEvent("sw-update-available",{detail:{version:a.version,autoActivated:!0}}))}})};setTimeout(o,1e3);const r=async()=>{if(!tn.isInitialized()){setTimeout(r,500);return}tn.registerVideoThumbnailHandler(async(a,l)=>{try{const{generateVideoThumbnailFromBlob:u}=await Ce(async()=>{const{generateVideoThumbnailFromBlob:b}=await import("./tool-windows-DWUG3k_L.js").then(x=>x.on);return{generateVideoThumbnailFromBlob:b}},__vite__mapDeps([0]),import.meta.url);let d=null;const f=await(await caches.open("drawnix-images")).match(a);if(f&&(d=await f.blob()),!d&&(a.startsWith("http://")||a.startsWith("https://")))try{const b=await fetch(a);b.ok&&(d=await b.blob())}catch{d=null}if(!d)return{error:"Video not found in cache or network"};const h=await u(d,l||400);return{thumbnailUrl:await new Promise((b,x)=>{const y=new FileReader;y.onloadend=()=>b(y.result),y.onerror=x,y.readAsDataURL(h)})}}catch(u){return{error:u instanceof Error?u.message:String(u)}}})};r(),navigator.serviceWorker.addEventListener("controllerchange",()=>{Wb(i),n&&setTimeout(()=>{ur()},1e3)}),window.addEventListener("user-confirmed-upgrade",()=>{if(n=!0,t){t.postMessage({type:"SKIP_WAITING"});return}if(i&&i.waiting){i.waiting.postMessage({type:"SKIP_WAITING"});return}caches.keys().then(a=>{const l=a.filter(u=>u.startsWith("drawnix-static-v"));return Promise.all(l.map(u=>caches.delete(u)))}).finally(()=>{window.location.href=window.location.href.split("?")[0]+"?_t="+Date.now()})})}Xo({tip:"正在挂载工作台界面...",source:"phase"});const Az=Dc.createRoot(document.getElementById("root"));Az.render(c.jsxDEV(p.StrictMode,{children:c.jsxDEV(fz,{children:c.jsxDEV(yz,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:698,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:697,columnNumber:5},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:696,columnNumber:3},void 0));const Zz=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{O3 as A,dP as B,Zq as C,Qd as D,Oz as E,Lz as F,Y5 as G,Hz as H,Zz as I,LN as M,U5 as P,xc as S,hP as W,O2 as a,Uz as b,Rz as c,q2 as d,L2 as e,R2 as f,Gz as g,Nc as h,db as i,Np as j,Fz as k,Kz as l,Bz as m,b3 as n,u5 as o,Yz as p,Xz as q,Wz as r,$z as s,qz as t,Zt as u,zz as v,lA as w,bc as x,Gq as y,YR as z};
|