aitu-app 0.6.78 → 0.6.80
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-CSFENxi6.js +2 -0
- package/assets/ChatDrawer-CWZQP5R5.css +1 -0
- package/assets/ChatDrawer-sVEVW11M.js +11 -0
- package/assets/ChatMessagesArea-Cnb94V8-.js +7 -0
- package/assets/ChatMessagesArea-PlF5AwzD.css +1 -0
- package/assets/DeferredAIInputBar-D99l6sBS.js +8 -0
- package/assets/DrawnixDeferredFeatures-78cIu-ev.js +2 -0
- package/assets/{KnowledgeBaseContent-DcX5Jofx.js → KnowledgeBaseContent-DZ-1fPZa.js} +10 -10
- package/assets/{MVCreator-DllHozYg.js → MVCreator-BV8KDR6E.js} +8 -8
- package/assets/ModelBenchmarkWorkbench-DL6r0Z_5.js +2 -0
- package/assets/MusicAnalyzer-D9Bpmhym.css +1 -0
- package/assets/{MusicAnalyzer-DDeT6g3c.js → MusicAnalyzer-DQtjf36o.js} +2 -2
- package/assets/{MusicAnalyzer-CHcQ5t4P.js → MusicAnalyzer-u_5sy56T.js} +1 -1
- package/assets/PromptHistoryTool-B-ktaOpK.js +2 -0
- package/assets/PromptHistoryTool-BH7hq916.css +1 -0
- package/assets/ResizableDivider-BpUFdkte.js +1 -0
- package/assets/TaskQueuePanel-BLD1r7_I.js +1 -0
- package/assets/{VideoAnalyzer-BSLz1FaI.js → VideoAnalyzer-Bjv9pyDs.js} +2 -2
- package/assets/ai-generation-preferences-service-BSpgVCHz.js +1 -0
- package/assets/arc-CnA_FoJK.js +1 -0
- package/assets/{arc-BU2KKCa_.js → arc-DDvk_-VM.js} +1 -1
- package/assets/{batch-image-generation-Bg68r_Ql.js → batch-image-generation-N-lwbjRE.js} +3 -3
- package/assets/{blockDiagram-38ab4fdb-BCGEnMME.js → blockDiagram-38ab4fdb-B2G4wjZe.js} +6 -6
- package/assets/{blockDiagram-38ab4fdb-CsZR5uC5.js → blockDiagram-38ab4fdb-DBkZWrKk.js} +1 -1
- package/assets/{browser-DpICcNby.js → browser-ZXTF4AKv.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-9fuiuFdV.js → c4Diagram-3d4e48cf-BFg-wccg.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-WM4wd_GR.js → c4Diagram-3d4e48cf-CmyNnfip.js} +1 -1
- package/assets/{canvas-insertion-CdUQF7IV.js → canvas-insertion-CKIoVZ9a.js} +1 -1
- package/assets/channel-BQh3J7kz.js +1 -0
- package/assets/channel-CPsF_uSp.js +1 -0
- package/assets/{classDiagram-70f12bd4-DcYDedz1.js → classDiagram-70f12bd4-BoP-e23u.js} +2 -2
- package/assets/{classDiagram-70f12bd4-CBVHTwQu.js → classDiagram-70f12bd4-UTHJc2XA.js} +1 -1
- package/assets/classDiagram-v2-f2320105-BeBc2H-D.js +2 -0
- package/assets/{classDiagram-v2-f2320105-jpCwaHEd.js → classDiagram-v2-f2320105-Bjwz5ljW.js} +1 -1
- package/assets/{clipper-jvd5rF5a.js → clipper-NoHaeWV4.js} +1 -1
- package/assets/clone-CA2KqVCK.js +1 -0
- package/assets/createText-2e5e7dd3-Bsu7vT-L.js +8 -0
- package/assets/{createText-2e5e7dd3-x5lOIwut.js → createText-2e5e7dd3-DrWUfa-s.js} +1 -1
- package/assets/{edges-e0da2a9e-CbrF4nbD.js → edges-e0da2a9e-B9sYOHRt.js} +1 -1
- package/assets/{edges-e0da2a9e-Ch6PBwWs.js → edges-e0da2a9e-DX4IQMED.js} +1 -1
- package/assets/{erDiagram-9861fffd-DSlNVuAZ.js → erDiagram-9861fffd-B-LfsIMf.js} +1 -1
- package/assets/{erDiagram-9861fffd-Bq07elcI.js → erDiagram-9861fffd-DPdud_LA.js} +1 -1
- package/assets/{flowDb-956e92f1-Ti5YC4Vv.js → flowDb-956e92f1-C3xKlizM.js} +1 -1
- package/assets/{flowDb-956e92f1-BqPCJlZp.js → flowDb-956e92f1-Ck5oiEta.js} +1 -1
- package/assets/{flowDiagram-66a62f08-CPDuG3rY.js → flowDiagram-66a62f08-Bkt2NoHM.js} +4 -4
- package/assets/{flowDiagram-66a62f08-D3GSABFi.js → flowDiagram-66a62f08-CJnxo6dI.js} +1 -1
- package/assets/flowDiagram-v2-96b9c2cf-MnwxRDMO.js +1 -0
- package/assets/flowDiagram-v2-96b9c2cf-U7nNPvdl.js +1 -0
- package/assets/{flowchart-elk-definition-4a651766-BH09NeLA.js → flowchart-elk-definition-4a651766-2XkrsdKI.js} +2 -2
- package/assets/{flowchart-elk-definition-4a651766-BLaLPCDV.js → flowchart-elk-definition-4a651766-ec8y1a8S.js} +1 -1
- package/assets/{ganttDiagram-c361ad54-DL9ZeaEc.js → ganttDiagram-c361ad54-1TA0mZY_.js} +3 -3
- package/assets/{ganttDiagram-c361ad54-Sp9M1KHP.js → ganttDiagram-c361ad54-D-OrVtXV.js} +3 -3
- package/assets/{gitGraphDiagram-72cf32ee-BWwmRKo-.js → gitGraphDiagram-72cf32ee-Blt3RsBD.js} +1 -1
- package/assets/{gitGraphDiagram-72cf32ee-BSf1fsDV.js → gitGraphDiagram-72cf32ee-CKf6xgO1.js} +1 -1
- package/assets/{graph-g-2U7grQ.js → graph-CUYgHJmb.js} +1 -1
- package/assets/{graph--nPw8zXQ.js → graph-WeSRtsZO.js} +1 -1
- package/assets/{index-ZrVeQUWo.js → index--MqiaN5t.js} +1 -1
- package/assets/{index-C5eu4uSl.js → index-0b_TeH8L.js} +11 -11
- package/assets/{index-3862675e-BXwbZ2pz.js → index-3862675e-C2ipEQC8.js} +1 -1
- package/assets/{index-3862675e-D6Zy95zZ.js → index-3862675e-CeX6VlsU.js} +1 -1
- package/assets/{index-CLJUfzvO.js → index-B-J0JJak.js} +1 -1
- package/assets/{index-TkfyNewx.js → index-B7Hj7g41.js} +1 -1
- package/assets/{index-eZfwJ9bV.js → index-BS_v5cOh.js} +1 -1
- package/assets/index-Btk31p7r.js +1 -0
- package/assets/{index-DH12_HTj.js → index-C-Samsu3.js} +2 -2
- package/assets/index-C-llNX01.js +1 -0
- package/assets/index-C8c9icsH.js +2 -0
- package/assets/{index-D7b5fX1d.js → index-CAn2jfNg.js} +1 -1
- package/assets/{index-Dz8sghkK.js → index-CK2zt94U.js} +1 -1
- package/assets/{index-CfgvFFx3.js → index-CP51k4n6.js} +17 -17
- package/assets/{index-DI0OV6F8.js → index-CXBhIy30.js} +1 -1
- package/assets/index-C_Mj1wbj.js +2 -0
- package/assets/{index-BwSnJN93.js → index-CbfE0MBd.js} +1 -1
- package/assets/{index-C3qD42ws.js → index-CjeDxq0c.js} +1 -1
- package/assets/{index-DqMndQiP.js → index-Ct7OFnWK.js} +1 -1
- package/assets/{index-BaCHOxhI.js → index-CxxUIkx1.js} +1 -1
- package/assets/{index-B2dttXd7.js → index-D2Kc-3MO.js} +1 -1
- package/assets/{index-Bq8mPedC.js → index-DK0XEByD.js} +1 -1
- package/assets/{index-DllL1sx1.js → index-DQcV2DYj.js} +1 -1
- package/assets/{index-BP77pG9S.js → index-DSKRBuhn.js} +73 -73
- package/assets/{index-BXzGHPXz.js → index-DXqL8NRE.js} +2 -2
- package/assets/{index-B7V7-Vxz.js → index-DcLrRIlS.js} +1 -1
- package/assets/{index-D4pIkh3S.js → index-DdA-dF0D.js} +1 -1
- package/assets/{index-QkP3EC02.js → index-DdxTnVj5.js} +1 -1
- package/assets/{index-CmyOpFTN.js → index-DmrnShhc.js} +1 -1
- package/assets/{index-Bti3m-iW.js → index-QO0uGVDP.js} +1 -1
- package/assets/{index-BPR_DyGD.js → index-aIKXDB1M.js} +1 -1
- package/assets/{index-DIiIUyb-.js → index-n6JhNACm.js} +1 -1
- package/assets/{index-BWrcsh8u.js → index-qbS_W7PW.js} +1 -1
- package/assets/index-v7iKPBEu.css +1 -0
- package/assets/{infoDiagram-f8f76790-DpFqCCNv.js → infoDiagram-f8f76790-DEWQ3NXc.js} +1 -1
- package/assets/{infoDiagram-f8f76790-G2JpJJP7.js → infoDiagram-f8f76790-u_qjHFCm.js} +3 -3
- package/assets/{journeyDiagram-49397b02-DLLTobRM.js → journeyDiagram-49397b02-C8A30CBr.js} +1 -1
- package/assets/{journeyDiagram-49397b02-BdESGMrv.js → journeyDiagram-49397b02-hQJfqZih.js} +1 -1
- package/assets/{layout-WSR0vNPO.js → layout-CFKTKeqQ.js} +1 -1
- package/assets/{layout-CVkuImk4.js → layout-DvRyabpG.js} +1 -1
- package/assets/{line-D3bnG227.js → line-C72F34Po.js} +1 -1
- package/assets/{line-DQuMJveY.js → line-W5R41tQ1.js} +1 -1
- package/assets/{linear-CciP-97N.js → linear-7FXykgHM.js} +1 -1
- package/assets/{linear-Z6vFvuwc.js → linear-CVyOPUvz.js} +1 -1
- package/assets/main-BO0HWBB1.js +42 -0
- package/assets/{main-8DNjLY6L.css → main-DAuE07rf.css} +1 -1
- package/assets/{mermaid.core-CwZQb0ud.js → mermaid.core-2VcXhn43.js} +4 -4
- package/assets/{mindmap-definition-fc14e90a-BnJ8OOTI.js → mindmap-definition-fc14e90a-CcVXKGg4.js} +1 -1
- package/assets/{mindmap-definition-fc14e90a-CxQMydCW.js → mindmap-definition-fc14e90a-DRDYXe84.js} +2 -2
- package/assets/model-benchmark-launcher-C2qBiDlM.js +1 -0
- package/assets/{photo-wall-splitter-BZ88W5Zy.js → photo-wall-splitter-CFntSOdS.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-BSDdkTeu.js → pieDiagram-8a3498a8-Be9dl9pU.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-D6VtAoja.js → pieDiagram-8a3498a8-DXZOJYBv.js} +5 -5
- package/assets/ppt-generation-B5fKT_by.js +48 -0
- package/assets/{quadrantDiagram-120e2f19-C8k2xuBd.js → quadrantDiagram-120e2f19-DoU7aQSp.js} +3 -3
- package/assets/{quadrantDiagram-120e2f19-BbFV0VXY.js → quadrantDiagram-120e2f19-l5K9mx26.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-C3xMdzJV.js → requirementDiagram-deff3bca-DN_87Wxe.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-CpjqKjYZ.js → requirementDiagram-deff3bca-DOooq7kx.js} +1 -1
- package/assets/retry-image-BmIVuAVu.js +6 -0
- package/assets/{sankeyDiagram-04a897e0-Bjvig9bW.js → sankeyDiagram-04a897e0-BB33nO6_.js} +1 -1
- package/assets/{sankeyDiagram-04a897e0-BBJJgsFv.js → sankeyDiagram-04a897e0-CCa0hwml.js} +2 -2
- package/assets/{sequenceDiagram-704730f1-PFC_9IFI.js → sequenceDiagram-704730f1-CNhXZiix.js} +1 -1
- package/assets/{sequenceDiagram-704730f1-DX1MmBN_.js → sequenceDiagram-704730f1-ZqQ1QrY-.js} +1 -1
- package/assets/settings-dialog-BFuWTeQR.js +1 -0
- package/assets/{skill-dsl-parser-syNWYxFu.js → skill-dsl-parser-b-aB3P5u.js} +1 -1
- package/assets/{stateDiagram-587899a1-Dc3mI_B_.js → stateDiagram-587899a1-BBlOIJr7.js} +1 -1
- package/assets/{stateDiagram-587899a1-SFMUVAam.js → stateDiagram-587899a1-BhomZ0AN.js} +1 -1
- package/assets/{stateDiagram-v2-d93cdb3a-P4Yt2p_j.js → stateDiagram-v2-d93cdb3a-BpJsgMa0.js} +1 -1
- package/assets/stateDiagram-v2-d93cdb3a-CuOn9du2.js +1 -0
- package/assets/{styles-6aaf32cf-C3jnr3hV.js → styles-6aaf32cf-C2WEewoA.js} +1 -1
- package/assets/{styles-6aaf32cf-b6AdP7fu.js → styles-6aaf32cf-CTtf8moq.js} +1 -1
- package/assets/{styles-9a916d00-BUiD9iBe.js → styles-9a916d00-44Xi2-39.js} +1 -1
- package/assets/{styles-9a916d00-ii0XTdIm.js → styles-9a916d00-DUU3VgNe.js} +4 -4
- package/assets/{styles-c10674c1-DbTSpy3W.js → styles-c10674c1--AhWSGg7.js} +1 -1
- package/assets/styles-c10674c1-DS-wE3tK.js +116 -0
- package/assets/{svgDrawCommon-08f97a94-D4gIV05W.js → svgDrawCommon-08f97a94-CXcvtSSy.js} +1 -1
- package/assets/{svgDrawCommon-08f97a94-BK6lD4D6.js → svgDrawCommon-08f97a94-Dyqh4V2s.js} +1 -1
- package/assets/{timeline-definition-85554ec2-Bl2y548G.js → timeline-definition-85554ec2-k788753O.js} +1 -1
- package/assets/{timeline-definition-85554ec2-CWKg_JxG.js → timeline-definition-85554ec2-sw6-UuBe.js} +1 -1
- package/assets/tool-windows-BEnZdJqF.js +2948 -0
- package/assets/{tool-windows-CUNbW1Tz.css → tool-windows-D61Le6TE.css} +1 -1
- package/assets/ttd-dialog-BJzXAZ0l.js +99 -0
- package/assets/useCharacters-DRBoWvvj.css +1 -0
- package/assets/useCharacters-gsV4K8Hn.js +2 -0
- package/assets/{useWorkflowSubmission-BizuDmuw.js → useWorkflowSubmission-XRR21P6Y.js} +10 -10
- package/assets/{video-analyze-6v3Y-rUE.js → video-analyze-CpbnpSiI.js} +1 -1
- package/assets/{video-generation-DnmTlWnm.js → video-generation-BXhS7x-a.js} +2 -2
- package/assets/video-recovery-service-6G2lkWcu.js +1 -0
- package/assets/workflow-generation-utils-CYxtSHl0.js +3 -0
- package/assets/workflow-submission-service-DygSzydV.js +4 -0
- package/assets/{xychartDiagram-e933f94c-CJX9_9WF.js → xychartDiagram-e933f94c-CvTTDwPb.js} +3 -3
- package/assets/{xychartDiagram-e933f94c-Cep8CQEH.js → xychartDiagram-e933f94c-Ga9zi9ha.js} +1 -1
- package/changelog.json +45 -0
- package/idle-prefetch-manifest.json +310 -306
- package/manifest.json +3 -3
- package/package.json +1 -1
- package/precache-manifest.json +10 -10
- package/sitemap.xml +37 -0
- package/sw-debug/app.js +269 -156
- package/sw-debug/backup-restore.js +235 -103
- package/sw-debug/crypto-helper.js +116 -120
- package/sw-debug/duplex-client.js +33 -19
- package/sw-debug/gist-management.js +938 -655
- package/sw-debug/sw-communication.js +87 -50
- package/sw.js +5 -5
- package/version.json +7 -17
- package/assets/CanvasAudioPlayer-DutgwdiU.js +0 -2
- package/assets/ChatDrawer-0jNvKIoI.css +0 -1
- package/assets/ChatDrawer-E6Fog16I.js +0 -11
- package/assets/ChatMessagesArea-Bgwiz_XP.js +0 -250
- package/assets/ChatMessagesArea-DyR_wHFQ.css +0 -1
- package/assets/DeferredAIInputBar-CPkD8Cv9.js +0 -8
- package/assets/DrawnixDeferredFeatures-Cul76-88.js +0 -2
- package/assets/ModelBenchmarkWorkbench-Dv9SNYTi.js +0 -2
- package/assets/MusicAnalyzer-DhtRGpAp.css +0 -1
- package/assets/ResizableDivider-CaG9JQbJ.js +0 -1
- package/assets/TaskQueuePanel-BNhNzGp5.js +0 -1
- package/assets/ai-generation-preferences-service-BF7QkuJp.js +0 -1
- package/assets/arc-DmGoDCEL.js +0 -1
- package/assets/channel-CZjE-WNp.js +0 -1
- package/assets/channel-SXZD6bG3.js +0 -1
- package/assets/classDiagram-v2-f2320105-CsxWGkSy.js +0 -2
- package/assets/clone-C4mvvMDb.js +0 -1
- package/assets/createText-2e5e7dd3-CkXS3l7I.js +0 -5
- package/assets/flowDiagram-v2-96b9c2cf-BCcJ-cre.js +0 -1
- package/assets/flowDiagram-v2-96b9c2cf-DCVaFEgV.js +0 -1
- package/assets/index-3eqA7Bag.js +0 -1
- package/assets/index-7Q-aiwln.js +0 -4
- package/assets/index-B1XP5g7P.css +0 -1
- package/assets/index-BHPTfCZM.js +0 -1
- package/assets/index-BqHZCcen.js +0 -2
- package/assets/index-DcZrElEK.js +0 -2
- package/assets/index-gQ7LgvSv.js +0 -12
- package/assets/main-BFEkxCOK.js +0 -56
- package/assets/model-benchmark-launcher-Ct3lYXVq.js +0 -1
- package/assets/ppt-generation-FzjP_rp0.js +0 -48
- package/assets/settings-dialog-CQM4v791.js +0 -1
- package/assets/stateDiagram-v2-d93cdb3a-DmnBjHpC.js +0 -1
- package/assets/styles-c10674c1-Bt89Yy8Q.js +0 -116
- package/assets/tool-windows-DOIu9TAD.js +0 -2975
- package/assets/ttd-dialog-DI4kQSg8.js +0 -99
- package/assets/useCharacters-Chv4Ky7x.js +0 -7
- package/assets/useCharacters-OrDbG69o.css +0 -1
- package/assets/video-recovery-service-BeRoh0s2.js +0 -1
- package/assets/workflow-generation-utils-me381Cax.js +0 -3
- package/assets/workflow-submission-service-YOpo7g37.js +0 -4
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./tool-windows-D61Le6TE.css","./MediaLibrarySidebar-CNCXXhfY.css","./useCharacters-DRBoWvvj.css","./character-Bo9jcTNu.css","./index-I7GscWS1.css","./ai-generation-preferences-service-CeFIqZqn.css","./DeferredAIInputBar-szBPHiNW.css","./ChatDrawer-CWZQP5R5.css","./DrawnixDeferredFeatures-BBiW9_Pn.css","./ResizableDivider-ClzYJk-6.css","./ttd-dialog-BlUvpMr5.css","./settings-dialog-CdRrvvi_.css","./CanvasAudioPlayer-mm7y75Ol.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{Y as m,iD as xl,O as z,iE as nf,iF as of,iG as Nl,eo as mr,iH as Mt,iI as Rt,iJ as sf,iK as Ar,ep as Ao,iL as rf,Q as be,iM as af,iN as Na,iO as Mo,iP as Ro,iQ as lf,iR as No,iS as cf,iT as uf,iU as wl,iV as yl,iW as vl,iX as kl,iY as df,iZ as El,i_ as jl,i$ as mf,j0 as Mr,j1 as Rr,$ as a,cw as K,j2 as pf,j3 as ff,j4 as hf,j5 as gf,iu as Rs,j6 as Dl,j7 as gn,j8 as Sl,j9 as gs,ja as bf,jb as xf,jc as fi,jd as Nf,je as wf,jf as Xu,hk as Oe,jg as Ci,jh as Cl,ji as yf,jj as vf,jk as kf,jl as Ef,jm as jf,jn as Df,jo as Sf,jp as Cf,jq as _f,jr as Pf,js as Vf,jt as Tf,ju as Uf,jv as If,jw as qf,jx as Af,jy as pr,jz as Fo,jA as Mf,jB as Rf,R as he,jC as zf,jD as Lf,aW as se,c5 as Of,jE as _l,jF as Pl,jG as Ff,jH as Vl,ax as Bf,at as Cn,_ as Tl,jI as Hf,jJ as Wf,h as wa,jK as $f,jL as Gf,jM as Ku,jN as wo,jO as yo,jP as zr,jQ as Kt,jR as Yf,p as Xf,c as Kf,D as zs,aJ as yn,jS as Tn,jT as Un,jU as sn,jV as Zu,jW as Ai,jX as ya,N as ce,jY as va,jZ as Oi,j_ as Fi,j$ as Ct,k0 as Zf,k1 as ai,k2 as Ju,k3 as Qu,k4 as Ln,k5 as vt,k6 as _t,k7 as Se,k8 as _i,k9 as _n,ka as it,kb as ot,kc as ie,kd as st,ke as li,dc as Pt,bm as _e,kf as vn,kg as Ls,i2 as On,kh as ed,ki as td,kj as nd,kk as Jf,kl as Qf,km as id,kn as od,g3 as ss,ko as Os,kp as Ul,aF as Fs,br as bn,bs as St,am as qe,kq as sd,kr as eh,eT as th,eU as nh,ar as Bs,as as Hs,ks as rd,cQ as ka,bP as Bn,ha as ad,kt as vo,ku as ih,kv as oh,kw as Ze,da as Ws,g as It,kx as sh,ky as rh,kz as ah,S as Ht,hl as B,kA as Ge,al as Lt,kB as lh,kC as Pi,kD as ch,g1 as uh,kE as dh,kF as mh,kG as ph,kH as Ea,he as Il,kI as fh,aQ as Et,c_ as hh,au as gh,kJ as bh,kK as xh,kL as Nh,kM as wh,kN as yh,kO as vh,kP as nn,kQ as kh,kR as Eh,kS as jh,kT as Dh,kU as Sh,kV as Ch,kW as _h,kX as Vi,kY as Ph,kZ as Vh,k_ as Th,k$ as Uh,l0 as hn,l1 as Ih,l2 as qh,l3 as Ah,l4 as Mh,l5 as Rh,l6 as zh,l7 as Lh,l8 as ql,l9 as Al,la as Bo,lb as Oh,bj as Fh,by as Bh,dw as Hh,ih as Ho,gF as ld,lc as Wh,ld as $h,le as Gh,dI as Yh,cK as Xh,lf as ja,lg as Da,lh as cd,li as Sa,lj as pn,lk as Ca,ll as An,lm as Ml,cn as $t,ln as Kh,M as Zh,lo as Jh,lp as Qh,lq as eg,lr as Wo,ls as oo,lt as ko,lu as tg,lv as ng,gG as Rl,lw as ig,lx as og,cx as sg,cy as rg,ly as ag,hb as lg,gz as zl,lz as ud,e3 as cg,lA as Ll,lB as $s,lC as Gs,lD as ug,lE as dg,go as mg,lF as pg,lG as fg,bC as hg,lH as gg,bA as bg,lI as xg,lJ as Ng,lK as Hn,lL as ci,lM as wg,cT as Ol,lN as Lr,lO as dd,lP as md,lQ as yg,lR as vg,lS as kg,lT as Eg,lU as bs,d as _a,lV as pd,lW as jg,lX as Dg,lY as fd,bQ as Sg,lZ as hd,l_ as Cg,l$ as Ys,m0 as gd,m1 as _g,m2 as Pg,hw as Pa,m3 as Vg,m4 as Tg,m5 as bd,m6 as rs,m7 as Ug,m8 as Ig,m9 as qg,ma as Ag,mb as Mg,mc as Rg,md as zg,me as Lg,mf as Jn,mg as xd,mh as Xs,db as Yt,mi as Nd,mj as wd,mk as Og,ml as yd,mm as Va,mn as vd,mo as kd,mp as Fg,mq as Bg,mr as Hg,ms as Wg,mt as $g,mu as Or,mv as Gg,mw as Yg,mx as Ta,my as Pn,mz as Qe,mA as nt,mB as Bi,mC as Xg,mD as Kg,mE as Zg,mF as Ed,mG as at,mH as yt,i7 as Ve,ib as Ua,mI as jd,mJ as Dd,mK as Sd,mL as Cd,mM as _d,mN as Pd,mO as Vd,id as xn,mP as Jg,mQ as Qg,mR as eb,mS as wt,mT as Eo,mU as ui,mV as tb,mW as Ia,mX as Ks,mY as Td,mZ as qa,m_ as Ud,m$ as Id,n0 as qd,n1 as Ad,n2 as Aa,n3 as Ma,n4 as Ra,n5 as xs,n6 as Md,n7 as Rd,n8 as zd,n9 as nb,e as Ld,na as ib,bo as ob,nb as sb,nc as rb,nd as ab,ne as lb,bq as cb,nf as Zs,ng as Fl,nh as ub,ni as db,nj as mb,nk as Od,nl as mn,nm as za,nn as pb,no as qt,np as La,nq as Fd,nr as Bd,ns as Hd,nt as Js,nu as Oa,nv as Fa,nw as Fr,nx as Wn,ny as Bl,nz as Wd,nA as $d,nB as Gd,nC as Yd,nD as di,nE as Hi,nF as mi,nG as Qs,nH as zo,nI as Yn,nJ as Hl,nK as Br,nL as fb,ii as hb,nM as Xd,nN as gb,nO as bb,nP as xb,nQ as Kd,nR as Zd,nS as Nb,nT as er,nU as Wl,nV as wb,nW as yb,nX as $l,y as gt,nY as Gl,nZ as vb,n_ as kb,n$ as Eb,o0 as jb,o1 as Yl,o2 as Db,aq as Ns,o3 as Jd,o4 as Qd,e7 as Sb,o5 as Cb,o6 as _b,o7 as Pb,o8 as Vb,o9 as Tb,oa as Ub,ca as Ib,ob as fr,oc as qb,od as Ab,oe as Mb,of as $o,og as hi,oh as gi,bN as Rb,oi as zb,bM as Lb,fZ as Ob,oj as Fb,ok as em,ol as Bb,om as Hb,on as Wb,oo as $b,op as Gb,oq as Ba,or as jo,i3 as Do,os as tm,ot as Yb,ou as lt,ov as ws,ic as nm,s as im,ow as om,ox as Xb,J as Kb,oy as Xl,oz as Kl,oA as Zb,oB as So,oC as Jb,oD as Qb,oE as ex,oF as tx,oG as nx,oH as ix,hx as ox,hz as sx,hy as rx,oI as ax,oJ as lx,oK as cx,oL as ux,oM as dx,oN as mx,oO as px,oP as fx,oQ as hx,oR as gx,hA as bx,oS as Ha,ci as Wa,oT as Zl,oU as hr,oV as gr,oW as xx,oX as sm,oY as Nx,oZ as Hr,o_ as dn,o$ as rm,p0 as am,cM as tr,p1 as pt,p2 as Fn,p3 as wx,p4 as yx,p5 as vx,p6 as kx,p7 as Jl,p8 as Ex}from"./tool-windows-BEnZdJqF.js";function Wr(e,t,n){if(e&&e.length){const[i,o]=t,s=Math.PI/180*n,r=Math.cos(s),l=Math.sin(s);for(const u of e){const[c,d]=u;u[0]=(c-i)*r-(d-o)*l+i,u[1]=(c-i)*l+(d-o)*r+o}}}function jx(e,t,n){const i=[];e.forEach(o=>i.push(...o)),Wr(i,t,n)}function Dx(e,t){return e[0]===t[0]&&e[1]===t[1]}function Sx(e,t,n,i=1){const o=n,s=Math.max(t,.1),r=e[0]&&e[0][0]&&typeof e[0][0]=="number"?[e]:e,l=[0,0];if(o)for(const c of r)Wr(c,l,o);const u=Cx(r,s,i);if(o){for(const c of r)Wr(c,l,-o);jx(u,l,-o)}return u}function Cx(e,t,n){const i=[];for(const c of e){const d=[...c];Dx(d[0],d[d.length-1])||d.push([d[0][0],d[0][1]]),d.length>2&&i.push(d)}const o=[];t=Math.max(t,.1);const s=[];for(const c of i)for(let d=0;d<c.length-1;d++){const p=c[d],f=c[d+1];if(p[1]!==f[1]){const h=Math.min(p[1],f[1]);s.push({ymin:h,ymax:Math.max(p[1],f[1]),x:h===p[1]?p[0]:f[0],islope:(f[0]-p[0])/(f[1]-p[1])})}}if(s.sort((c,d)=>c.ymin<d.ymin?-1:c.ymin>d.ymin?1:c.x<d.x?-1:c.x>d.x?1:c.ymax===d.ymax?0:(c.ymax-d.ymax)/Math.abs(c.ymax-d.ymax)),!s.length)return o;let r=[],l=s[0].ymin,u=0;for(;r.length||s.length;){if(s.length){let c=-1;for(let p=0;p<s.length&&!(s[p].ymin>l);p++)c=p;s.splice(0,c+1).forEach(p=>{r.push({s:l,edge:p})})}if(r=r.filter(c=>!(c.edge.ymax<=l)),r.sort((c,d)=>c.edge.x===d.edge.x?0:(c.edge.x-d.edge.x)/Math.abs(c.edge.x-d.edge.x)),(n!==1||u%t===0)&&r.length>1)for(let c=0;c<r.length;c=c+2){const d=c+1;if(d>=r.length)break;const p=r[c].edge,f=r[d].edge;o.push([[Math.round(p.x),l],[Math.round(f.x),l]])}l+=n,r.forEach(c=>{c.edge.x=c.edge.x+n*c.edge.islope}),u++}return o}function Lo(e,t){var n;const i=t.hachureAngle+90;let o=t.hachureGap;o<0&&(o=t.strokeWidth*4),o=Math.round(Math.max(o,.1));let s=1;return t.roughness>=1&&(((n=t.randomizer)===null||n===void 0?void 0:n.next())||Math.random())>.7&&(s=o),Sx(e,o,i,s||1)}class $a{constructor(t){this.helper=t}fillPolygons(t,n){return this._fillPolygons(t,n)}_fillPolygons(t,n){const i=Lo(t,n);return{type:"fillSketch",ops:this.renderLines(i,n)}}renderLines(t,n){const i=[];for(const o of t)i.push(...this.helper.doubleLineOps(o[0][0],o[0][1],o[1][0],o[1][1],n));return i}}function nr(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 _x extends $a{fillPolygons(t,n){let i=n.hachureGap;i<0&&(i=n.strokeWidth*4),i=Math.max(i,.1);const o=Object.assign({},n,{hachureGap:i}),s=Lo(t,o),r=Math.PI/180*n.hachureAngle,l=[],u=i*.5*Math.cos(r),c=i*.5*Math.sin(r);for(const[p,f]of s)nr([p,f])&&l.push([[p[0]-u,p[1]+c],[...f]],[[p[0]+u,p[1]-c],[...f]]);return{type:"fillSketch",ops:this.renderLines(l,n)}}}class Px extends $a{fillPolygons(t,n){const i=this._fillPolygons(t,n),o=Object.assign({},n,{hachureAngle:n.hachureAngle+90}),s=this._fillPolygons(t,o);return i.ops=i.ops.concat(s.ops),i}}class Vx{constructor(t){this.helper=t}fillPolygons(t,n){n=Object.assign({},n,{hachureAngle:0});const i=Lo(t,n);return this.dotsOnLines(i,n)}dotsOnLines(t,n){const i=[];let o=n.hachureGap;o<0&&(o=n.strokeWidth*4),o=Math.max(o,.1);let s=n.fillWeight;s<0&&(s=n.strokeWidth/2);const r=o/4;for(const l of t){const u=nr(l),c=u/o,d=Math.ceil(c)-1,p=u-d*o,f=(l[0][0]+l[1][0])/2-o/4,h=Math.min(l[0][1],l[1][1]);for(let x=0;x<d;x++){const b=h+p+x*o,g=f-r+Math.random()*2*r,w=b-r+Math.random()*2*r,N=this.helper.ellipse(g,w,s,s,n);i.push(...N.ops)}}return{type:"fillSketch",ops:i}}}class Tx{constructor(t){this.helper=t}fillPolygons(t,n){const i=Lo(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,o=n.dashGap<0?n.hachureGap<0?n.strokeWidth*4:n.hachureGap:n.dashGap,s=[];return t.forEach(r=>{const l=nr(r),u=Math.floor(l/(i+o)),c=(l+o-u*(i+o))/2;let d=r[0],p=r[1];d[0]>p[0]&&(d=r[1],p=r[0]);const f=Math.atan((p[1]-d[1])/(p[0]-d[0]));for(let h=0;h<u;h++){const x=h*(i+o),b=x+i,g=[d[0]+x*Math.cos(f)+c*Math.cos(f),d[1]+x*Math.sin(f)+c*Math.sin(f)],w=[d[0]+b*Math.cos(f)+c*Math.cos(f),d[1]+b*Math.sin(f)+c*Math.sin(f)];s.push(...this.helper.doubleLineOps(g[0],g[1],w[0],w[1],n))}}),s}}class Ux{constructor(t){this.helper=t}fillPolygons(t,n){const i=n.hachureGap<0?n.strokeWidth*4:n.hachureGap,o=n.zigzagOffset<0?i:n.zigzagOffset;n=Object.assign({},n,{hachureGap:i+o});const s=Lo(t,n);return{type:"fillSketch",ops:this.zigzagLines(s,o,n)}}zigzagLines(t,n,i){const o=[];return t.forEach(s=>{const r=nr(s),l=Math.round(r/(2*n));let u=s[0],c=s[1];u[0]>c[0]&&(u=s[1],c=s[0]);const d=Math.atan((c[1]-u[1])/(c[0]-u[0]));for(let p=0;p<l;p++){const f=p*2*n,h=(p+1)*2*n,x=Math.sqrt(2*Math.pow(n,2)),b=[u[0]+f*Math.cos(d),u[1]+f*Math.sin(d)],g=[u[0]+h*Math.cos(d),u[1]+h*Math.sin(d)],w=[b[0]+x*Math.cos(d+Math.PI/4),b[1]+x*Math.sin(d+Math.PI/4)];o.push(...this.helper.doubleLineOps(b[0],b[1],w[0],w[1],i),...this.helper.doubleLineOps(w[0],w[1],g[0],g[1],i))}}),o}}const Ot={};function Ix(e,t){let n=e.fillStyle||"hachure";if(!Ot[n])switch(n){case"zigzag":Ot[n]||(Ot[n]=new _x(t));break;case"cross-hatch":Ot[n]||(Ot[n]=new Px(t));break;case"dots":Ot[n]||(Ot[n]=new Vx(t));break;case"dashed":Ot[n]||(Ot[n]=new Tx(t));break;case"zigzag-line":Ot[n]||(Ot[n]=new Ux(t));break;case"hachure":default:n="hachure",Ot[n]||(Ot[n]=new $a(t));break}return Ot[n]}function qx(){return Math.floor(Math.random()*2**31)}class Ax{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}}const Mx=0,$r=1,lm=2,Go={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 Rx(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:Mx,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:$r,text:`${parseFloat(RegExp.$1)}`},e=e.substr(RegExp.$1.length);else return[];return t[t.length]={type:lm,text:""},t}function br(e,t){return e.type===t}function Ga(e){const t=[],n=Rx(e);let i="BOD",o=0,s=n[o];for(;!br(s,lm);){let r=0;const l=[];if(i==="BOD")if(s.text==="M"||s.text==="m")o++,r=Go[s.text],i=s.text;else return Ga("M0,0"+e);else br(s,$r)?r=Go[i]:(o++,r=Go[s.text],i=s.text);if(o+r<n.length){for(let u=o;u<o+r;u++){const c=n[u];if(br(c,$r))l[l.length]=+c.text;else throw new Error("Param not a number: "+i+","+c.text)}if(typeof Go[i]=="number"){const u={key:i,data:l};t.push(u),o+=r,s=n[o],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 cm(e){let t=0,n=0,i=0,o=0;const s=[];for(const{key:r,data:l}of e)switch(r){case"M":s.push({key:"M",data:[...l]}),[t,n]=l,[i,o]=l;break;case"m":t+=l[0],n+=l[1],s.push({key:"M",data:[t,n]}),i=t,o=n;break;case"L":s.push({key:"L",data:[...l]}),[t,n]=l;break;case"l":t+=l[0],n+=l[1],s.push({key:"L",data:[t,n]});break;case"C":s.push({key:"C",data:[...l]}),t=l[4],n=l[5];break;case"c":{const u=l.map((c,d)=>d%2?c+n:c+t);s.push({key:"C",data:u}),t=u[4],n=u[5];break}case"Q":s.push({key:"Q",data:[...l]}),t=l[2],n=l[3];break;case"q":{const u=l.map((c,d)=>d%2?c+n:c+t);s.push({key:"Q",data:u}),t=u[2],n=u[3];break}case"A":s.push({key:"A",data:[...l]}),t=l[5],n=l[6];break;case"a":t+=l[5],n+=l[6],s.push({key:"A",data:[l[0],l[1],l[2],l[3],l[4],t,n]});break;case"H":s.push({key:"H",data:[...l]}),t=l[0];break;case"h":t+=l[0],s.push({key:"H",data:[t]});break;case"V":s.push({key:"V",data:[...l]}),n=l[0];break;case"v":n+=l[0],s.push({key:"V",data:[n]});break;case"S":s.push({key:"S",data:[...l]}),t=l[2],n=l[3];break;case"s":{const u=l.map((c,d)=>d%2?c+n:c+t);s.push({key:"S",data:u}),t=u[2],n=u[3];break}case"T":s.push({key:"T",data:[...l]}),t=l[0],n=l[1];break;case"t":t+=l[0],n+=l[1],s.push({key:"T",data:[t,n]});break;case"Z":case"z":s.push({key:"Z",data:[]}),t=i,n=o;break}return s}function um(e){const t=[];let n="",i=0,o=0,s=0,r=0,l=0,u=0;for(const{key:c,data:d}of e){switch(c){case"M":t.push({key:"M",data:[...d]}),[i,o]=d,[s,r]=d;break;case"C":t.push({key:"C",data:[...d]}),i=d[4],o=d[5],l=d[2],u=d[3];break;case"L":t.push({key:"L",data:[...d]}),[i,o]=d;break;case"H":i=d[0],t.push({key:"L",data:[i,o]});break;case"V":o=d[0],t.push({key:"L",data:[i,o]});break;case"S":{let p=0,f=0;n==="C"||n==="S"?(p=i+(i-l),f=o+(o-u)):(p=i,f=o),t.push({key:"C",data:[p,f,...d]}),l=d[0],u=d[1],i=d[2],o=d[3];break}case"T":{const[p,f]=d;let h=0,x=0;n==="Q"||n==="T"?(h=i+(i-l),x=o+(o-u)):(h=i,x=o);const b=i+2*(h-i)/3,g=o+2*(x-o)/3,w=p+2*(h-p)/3,N=f+2*(x-f)/3;t.push({key:"C",data:[b,g,w,N,p,f]}),l=h,u=x,i=p,o=f;break}case"Q":{const[p,f,h,x]=d,b=i+2*(p-i)/3,g=o+2*(f-o)/3,w=h+2*(p-h)/3,N=x+2*(f-x)/3;t.push({key:"C",data:[b,g,w,N,h,x]}),l=p,u=f,i=h,o=x;break}case"A":{const p=Math.abs(d[0]),f=Math.abs(d[1]),h=d[2],x=d[3],b=d[4],g=d[5],w=d[6];p===0||f===0?(t.push({key:"C",data:[i,o,g,w,g,w]}),i=g,o=w):(i!==g||o!==w)&&(dm(i,o,g,w,p,f,h,x,b).forEach(function(y){t.push({key:"C",data:y})}),i=g,o=w);break}case"Z":t.push({key:"Z",data:[]}),i=s,o=r;break}n=c}return t}function zx(e){return Math.PI*e/180}function $i(e,t,n){const i=e*Math.cos(n)-t*Math.sin(n),o=e*Math.sin(n)+t*Math.cos(n);return[i,o]}function dm(e,t,n,i,o,s,r,l,u,c){const d=zx(r);let p=[],f=0,h=0,x=0,b=0;if(c)[f,h,x,b]=c;else{[e,t]=$i(e,t,-d),[n,i]=$i(n,i,-d);const M=(e-n)/2,T=(t-i)/2;let _=M*M/(o*o)+T*T/(s*s);_>1&&(_=Math.sqrt(_),o=_*o,s=_*s);const P=l===u?-1:1,A=o*o,Q=s*s,Ee=A*Q-A*T*T-Q*M*M,V=A*T*T+Q*M*M,$=P*Math.sqrt(Math.abs(Ee/V));x=$*o*T/s+(e+n)/2,b=$*-s*M/o+(t+i)/2,f=Math.asin(parseFloat(((t-b)/s).toFixed(9))),h=Math.asin(parseFloat(((i-b)/s).toFixed(9))),e<x&&(f=Math.PI-f),n<x&&(h=Math.PI-h),f<0&&(f=Math.PI*2+f),h<0&&(h=Math.PI*2+h),u&&f>h&&(f=f-Math.PI*2),!u&&h>f&&(h=h-Math.PI*2)}let g=h-f;if(Math.abs(g)>Math.PI*120/180){const M=h,T=n,_=i;u&&h>f?h=f+Math.PI*120/180*1:h=f+Math.PI*120/180*-1,n=x+o*Math.cos(h),i=b+s*Math.sin(h),p=dm(n,i,T,_,o,s,r,0,u,[h,M,x,b])}g=h-f;const w=Math.cos(f),N=Math.sin(f),y=Math.cos(h),D=Math.sin(h),j=Math.tan(g/4),k=4/3*o*j,E=4/3*s*j,I=[e,t],q=[e+k*N,t-E*w],W=[n+k*D,i-E*y],U=[n,i];if(q[0]=2*I[0]-q[0],q[1]=2*I[1]-q[1],c)return[q,W,U].concat(p);{p=[q,W,U].concat(p);const M=[];for(let T=0;T<p.length;T+=3){const _=$i(p[T][0],p[T][1],d),P=$i(p[T+1][0],p[T+1][1],d),A=$i(p[T+2][0],p[T+2][1],d);M.push([_[0],_[1],P[0],P[1],A[0],A[1]])}return M}}const Lx={randOffset:Wx,randOffsetWithRange:$x,ellipse:Bx,doubleLineOps:Gx};function mm(e,t,n,i,o){return{type:"path",ops:$n(e,t,n,i,o)}}function as(e,t,n){const i=(e||[]).length;if(i>2){const o=[];for(let s=0;s<i-1;s++)o.push(...$n(e[s][0],e[s][1],e[s+1][0],e[s+1][1],n));return t&&o.push(...$n(e[i-1][0],e[i-1][1],e[0][0],e[0][1],n)),{type:"path",ops:o}}else if(i===2)return mm(e[0][0],e[0][1],e[1][0],e[1][1],n);return{type:"path",ops:[]}}function Ox(e,t){return as(e,!0,t)}function Fx(e,t,n,i,o){const s=[[e,t],[e+n,t],[e+n,t+i],[e,t+i]];return Ox(s,o)}function Ql(e,t){if(e.length){const i=typeof e[0][0]=="number"?[e]:e,o=Yo(i[0],1*(1+t.roughness*.2),t),s=t.disableMultiStroke?[]:Yo(i[0],1.5*(1+t.roughness*.22),nc(t));for(let r=1;r<i.length;r++){const l=i[r];if(l.length){const u=Yo(l,1*(1+t.roughness*.2),t),c=t.disableMultiStroke?[]:Yo(l,1.5*(1+t.roughness*.22),nc(t));for(const d of u)d.op!=="move"&&o.push(d);for(const d of c)d.op!=="move"&&s.push(d)}}return{type:"path",ops:o.concat(s)}}return{type:"path",ops:[]}}function Bx(e,t,n,i,o){const s=pm(n,i,o);return Gr(e,t,o,s).opset}function pm(e,t,n){const i=Math.sqrt(Math.PI*2*Math.sqrt((Math.pow(e/2,2)+Math.pow(t/2,2))/2)),o=Math.ceil(Math.max(n.curveStepCount,n.curveStepCount/Math.sqrt(200)*i)),s=Math.PI*2/o;let r=Math.abs(e/2),l=Math.abs(t/2);const u=1-n.curveFitting;return r+=xe(r*u,n),l+=xe(l*u,n),{increment:s,rx:r,ry:l}}function Gr(e,t,n,i){const[o,s]=ic(i.increment,e,t,i.rx,i.ry,1,i.increment*ys(.1,ys(.4,1,n),n),n);let r=vs(o,null,n);if(!n.disableMultiStroke&&n.roughness!==0){const[l]=ic(i.increment,e,t,i.rx,i.ry,1.5,0,n),u=vs(l,null,n);r=r.concat(u)}return{estimatedPoints:s,opset:{type:"path",ops:r}}}function ec(e,t,n,i,o,s,r,l,u){const c=e,d=t;let p=Math.abs(n/2),f=Math.abs(i/2);p+=xe(p*.01,u),f+=xe(f*.01,u);let h=o,x=s;for(;h<0;)h+=Math.PI*2,x+=Math.PI*2;x-h>Math.PI*2&&(h=0,x=Math.PI*2);const b=Math.PI*2/u.curveStepCount,g=Math.min(b/2,(x-h)/2),w=oc(g,c,d,p,f,h,x,1,u);if(!u.disableMultiStroke){const N=oc(g,c,d,p,f,h,x,1.5,u);w.push(...N)}return r&&(l?w.push(...$n(c,d,c+p*Math.cos(h),d+f*Math.sin(h),u),...$n(c,d,c+p*Math.cos(x),d+f*Math.sin(x),u)):w.push({op:"lineTo",data:[c,d]},{op:"lineTo",data:[c+p*Math.cos(h),d+f*Math.sin(h)]})),{type:"path",ops:w}}function tc(e,t){const n=um(cm(Ga(e))),i=[];let o=[0,0],s=[0,0];for(const{key:r,data:l}of n)switch(r){case"M":{s=[l[0],l[1]],o=[l[0],l[1]];break}case"L":i.push(...$n(s[0],s[1],l[0],l[1],t)),s=[l[0],l[1]];break;case"C":{const[u,c,d,p,f,h]=l;i.push(...Yx(u,c,d,p,f,h,s,t)),s=[f,h];break}case"Z":i.push(...$n(s[0],s[1],o[0],o[1],t)),s=[o[0],o[1]];break}return{type:"path",ops:i}}function xr(e,t){const n=[];for(const i of e)if(i.length){const o=t.maxRandomnessOffset||0,s=i.length;if(s>2){n.push({op:"move",data:[i[0][0]+xe(o,t),i[0][1]+xe(o,t)]});for(let r=1;r<s;r++)n.push({op:"lineTo",data:[i[r][0]+xe(o,t),i[r][1]+xe(o,t)]})}}return{type:"fillPath",ops:n}}function xi(e,t){return Ix(t,Lx).fillPolygons(e,t)}function Hx(e,t,n,i,o,s,r){const l=e,u=t;let c=Math.abs(n/2),d=Math.abs(i/2);c+=xe(c*.01,r),d+=xe(d*.01,r);let p=o,f=s;for(;p<0;)p+=Math.PI*2,f+=Math.PI*2;f-p>Math.PI*2&&(p=0,f=Math.PI*2);const h=(f-p)/r.curveStepCount,x=[];for(let b=p;b<=f;b=b+h)x.push([l+c*Math.cos(b),u+d*Math.sin(b)]);return x.push([l+c*Math.cos(f),u+d*Math.sin(f)]),x.push([l,u]),xi([x],r)}function Wx(e,t){return xe(e,t)}function $x(e,t,n){return ys(e,t,n)}function Gx(e,t,n,i,o){return $n(e,t,n,i,o,!0)}function nc(e){const t=Object.assign({},e);return t.randomizer=void 0,e.seed&&(t.seed=e.seed+1),t}function fm(e){return e.randomizer||(e.randomizer=new Ax(e.seed||0)),e.randomizer.next()}function ys(e,t,n,i=1){return n.roughness*i*(fm(n)*(t-e)+e)}function xe(e,t,n=1){return ys(-e,e,t,n)}function $n(e,t,n,i,o,s=!1){const r=s?o.disableMultiStrokeFill:o.disableMultiStroke,l=Yr(e,t,n,i,o,!0,!1);if(r)return l;const u=Yr(e,t,n,i,o,!0,!0);return l.concat(u)}function Yr(e,t,n,i,o,s,r){const l=Math.pow(e-n,2)+Math.pow(t-i,2),u=Math.sqrt(l);let c=1;u<200?c=1:u>500?c=.4:c=-.0016668*u+1.233334;let d=o.maxRandomnessOffset||0;d*d*100>l&&(d=u/10);const p=d/2,f=.2+fm(o)*.2;let h=o.bowing*o.maxRandomnessOffset*(i-t)/200,x=o.bowing*o.maxRandomnessOffset*(e-n)/200;h=xe(h,o,c),x=xe(x,o,c);const b=[],g=()=>xe(p,o,c),w=()=>xe(d,o,c),N=o.preserveVertices;return r?b.push({op:"move",data:[e+(N?0:g()),t+(N?0:g())]}):b.push({op:"move",data:[e+(N?0:xe(d,o,c)),t+(N?0:xe(d,o,c))]}),r?b.push({op:"bcurveTo",data:[h+e+(n-e)*f+g(),x+t+(i-t)*f+g(),h+e+2*(n-e)*f+g(),x+t+2*(i-t)*f+g(),n+(N?0:g()),i+(N?0:g())]}):b.push({op:"bcurveTo",data:[h+e+(n-e)*f+w(),x+t+(i-t)*f+w(),h+e+2*(n-e)*f+w(),x+t+2*(i-t)*f+w(),n+(N?0:w()),i+(N?0:w())]}),b}function Yo(e,t,n){if(!e.length)return[];const i=[];i.push([e[0][0]+xe(t,n),e[0][1]+xe(t,n)]),i.push([e[0][0]+xe(t,n),e[0][1]+xe(t,n)]);for(let o=1;o<e.length;o++)i.push([e[o][0]+xe(t,n),e[o][1]+xe(t,n)]),o===e.length-1&&i.push([e[o][0]+xe(t,n),e[o][1]+xe(t,n)]);return vs(i,null,n)}function vs(e,t,n){const i=e.length,o=[];if(i>3){const s=[],r=1-n.curveTightness;o.push({op:"move",data:[e[1][0],e[1][1]]});for(let l=1;l+2<i;l++){const u=e[l];s[0]=[u[0],u[1]],s[1]=[u[0]+(r*e[l+1][0]-r*e[l-1][0])/6,u[1]+(r*e[l+1][1]-r*e[l-1][1])/6],s[2]=[e[l+1][0]+(r*e[l][0]-r*e[l+2][0])/6,e[l+1][1]+(r*e[l][1]-r*e[l+2][1])/6],s[3]=[e[l+1][0],e[l+1][1]],o.push({op:"bcurveTo",data:[s[1][0],s[1][1],s[2][0],s[2][1],s[3][0],s[3][1]]})}}else i===3?(o.push({op:"move",data:[e[1][0],e[1][1]]}),o.push({op:"bcurveTo",data:[e[1][0],e[1][1],e[2][0],e[2][1],e[2][0],e[2][1]]})):i===2&&o.push(...Yr(e[0][0],e[0][1],e[1][0],e[1][1],n,!0,!0));return o}function ic(e,t,n,i,o,s,r,l){const u=l.roughness===0,c=[],d=[];if(u){e=e/4,d.push([t+i*Math.cos(-e),n+o*Math.sin(-e)]);for(let p=0;p<=Math.PI*2;p=p+e){const f=[t+i*Math.cos(p),n+o*Math.sin(p)];c.push(f),d.push(f)}d.push([t+i*Math.cos(0),n+o*Math.sin(0)]),d.push([t+i*Math.cos(e),n+o*Math.sin(e)])}else{const p=xe(.5,l)-Math.PI/2;d.push([xe(s,l)+t+.9*i*Math.cos(p-e),xe(s,l)+n+.9*o*Math.sin(p-e)]);const f=Math.PI*2+p-.01;for(let h=p;h<f;h=h+e){const x=[xe(s,l)+t+i*Math.cos(h),xe(s,l)+n+o*Math.sin(h)];c.push(x),d.push(x)}d.push([xe(s,l)+t+i*Math.cos(p+Math.PI*2+r*.5),xe(s,l)+n+o*Math.sin(p+Math.PI*2+r*.5)]),d.push([xe(s,l)+t+.98*i*Math.cos(p+r),xe(s,l)+n+.98*o*Math.sin(p+r)]),d.push([xe(s,l)+t+.9*i*Math.cos(p+r*.5),xe(s,l)+n+.9*o*Math.sin(p+r*.5)])}return[d,c]}function oc(e,t,n,i,o,s,r,l,u){const c=s+xe(.1,u),d=[];d.push([xe(l,u)+t+.9*i*Math.cos(c-e),xe(l,u)+n+.9*o*Math.sin(c-e)]);for(let p=c;p<=r;p=p+e)d.push([xe(l,u)+t+i*Math.cos(p),xe(l,u)+n+o*Math.sin(p)]);return d.push([t+i*Math.cos(r),n+o*Math.sin(r)]),d.push([t+i*Math.cos(r),n+o*Math.sin(r)]),vs(d,null,u)}function Yx(e,t,n,i,o,s,r,l){const u=[],c=[l.maxRandomnessOffset||1,(l.maxRandomnessOffset||1)+.3];let d=[0,0];const p=l.disableMultiStroke?1:2,f=l.preserveVertices;for(let h=0;h<p;h++)h===0?u.push({op:"move",data:[r[0],r[1]]}):u.push({op:"move",data:[r[0]+(f?0:xe(c[0],l)),r[1]+(f?0:xe(c[0],l))]}),d=f?[o,s]:[o+xe(c[h],l),s+xe(c[h],l)],u.push({op:"bcurveTo",data:[e+xe(c[h],l),t+xe(c[h],l),n+xe(c[h],l),i+xe(c[h],l),d[0],d[1]]});return u}function Gi(e){return[...e]}function sc(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(Gi(e[0]),Gi(e[1]),Gi(e[2]),Gi(e[2]));else{const o=[];o.push(e[0],e[0]);for(let l=1;l<e.length;l++)o.push(e[l]),l===e.length-1&&o.push(e[l]);const s=[],r=1-t;i.push(Gi(o[0]));for(let l=1;l+2<o.length;l++){const u=o[l];s[0]=[u[0],u[1]],s[1]=[u[0]+(r*o[l+1][0]-r*o[l-1][0])/6,u[1]+(r*o[l+1][1]-r*o[l-1][1])/6],s[2]=[o[l+1][0]+(r*o[l][0]-r*o[l+2][0])/6,o[l+1][1]+(r*o[l][1]-r*o[l+2][1])/6],s[3]=[o[l+1][0],o[l+1][1]],i.push(s[1],s[2],s[3])}}return i}function Xx(e,t){return Math.sqrt(ls(e,t))}function ls(e,t){return Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)}function Kx(e,t,n){const i=ls(t,n);if(i===0)return ls(e,t);let o=((e[0]-t[0])*(n[0]-t[0])+(e[1]-t[1])*(n[1]-t[1]))/i;return o=Math.max(0,Math.min(1,o)),ls(e,Qn(t,n,o))}function Qn(e,t,n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n]}function Zx(e,t){const n=e[t+0],i=e[t+1],o=e[t+2],s=e[t+3];let r=3*i[0]-2*n[0]-s[0];r*=r;let l=3*i[1]-2*n[1]-s[1];l*=l;let u=3*o[0]-2*s[0]-n[0];u*=u;let c=3*o[1]-2*s[1]-n[1];return c*=c,r<u&&(r=u),l<c&&(l=c),r+l}function Xr(e,t,n,i){const o=i||[];if(Zx(e,t)<n){const s=e[t+0];o.length?Xx(o[o.length-1],s)>1&&o.push(s):o.push(s),o.push(e[t+3])}else{const r=e[t+0],l=e[t+1],u=e[t+2],c=e[t+3],d=Qn(r,l,.5),p=Qn(l,u,.5),f=Qn(u,c,.5),h=Qn(d,p,.5),x=Qn(p,f,.5),b=Qn(h,x,.5);Xr([r,d,h,b],0,n,o),Xr([b,x,f,c],0,n,o)}return o}function Jx(e,t){return ks(e,0,e.length,t)}function ks(e,t,n,i,o){const s=o||[],r=e[t],l=e[n-1];let u=0,c=1;for(let d=t+1;d<n-1;++d){const p=Kx(e[d],r,l);p>u&&(u=p,c=d)}return Math.sqrt(u)>i?(ks(e,t,c+1,i,s),ks(e,c,n,i,s)):(s.length||s.push(r),s.push(l)),s}function Kr(e,t=.15,n){const i=[],o=(e.length-1)/3;for(let s=0;s<o;s++){const r=s*3;Xr(e,r,t,i)}return n&&n>0?ks(i,0,i.length,n):i}function Qx(e,t,n){const i=Ga(e),o=um(cm(i)),s=[];let r=[],l=[0,0],u=[];const c=()=>{u.length>=4&&r.push(...Kr(u,t)),u=[]},d=()=>{c(),r.length&&(s.push(r),r=[])};for(const{key:f,data:h}of o)switch(f){case"M":d(),l=[h[0],h[1]],r.push(l);break;case"L":c(),r.push([h[0],h[1]]);break;case"C":if(!u.length){const x=r.length?r[r.length-1]:l;u.push([x[0],x[1]])}u.push([h[0],h[1]]),u.push([h[2],h[3]]),u.push([h[4],h[5]]);break;case"Z":c(),r.push([l[0],l[1]]);break}if(d(),!n)return s;const p=[];for(const f of s){const h=Jx(f,n);h.length&&p.push(h)}return p}const Wt="none";class Es{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 qx()}_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,o,s){const r=this._o(s);return this._d("line",[mm(t,n,i,o,r)],r)}rectangle(t,n,i,o,s){const r=this._o(s),l=[],u=Fx(t,n,i,o,r);if(r.fill){const c=[[t,n],[t+i,n],[t+i,n+o],[t,n+o]];r.fillStyle==="solid"?l.push(xr([c],r)):l.push(xi([c],r))}return r.stroke!==Wt&&l.push(u),this._d("rectangle",l,r)}ellipse(t,n,i,o,s){const r=this._o(s),l=[],u=pm(i,o,r),c=Gr(t,n,r,u);if(r.fill)if(r.fillStyle==="solid"){const d=Gr(t,n,r,u).opset;d.type="fillPath",l.push(d)}else l.push(xi([c.estimatedPoints],r));return r.stroke!==Wt&&l.push(c.opset),this._d("ellipse",l,r)}circle(t,n,i,o){const s=this.ellipse(t,n,i,i,o);return s.shape="circle",s}linearPath(t,n){const i=this._o(n);return this._d("linearPath",[as(t,!1,i)],i)}arc(t,n,i,o,s,r,l=!1,u){const c=this._o(u),d=[],p=ec(t,n,i,o,s,r,l,!0,c);if(l&&c.fill)if(c.fillStyle==="solid"){const f=Object.assign({},c);f.disableMultiStroke=!0;const h=ec(t,n,i,o,s,r,!0,!1,f);h.type="fillPath",d.push(h)}else d.push(Hx(t,n,i,o,s,r,c));return c.stroke!==Wt&&d.push(p),this._d("arc",d,c)}curve(t,n){const i=this._o(n),o=[],s=Ql(t,i);if(i.fill&&i.fill!==Wt)if(i.fillStyle==="solid"){const r=Ql(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));o.push({type:"fillPath",ops:this._mergedShape(r.ops)})}else{const r=[],l=t;if(l.length){const c=typeof l[0][0]=="number"?[l]:l;for(const d of c)d.length<3?r.push(...d):d.length===3?r.push(...Kr(sc([d[0],d[0],d[1],d[2]]),10,(1+i.roughness)/2)):r.push(...Kr(sc(d),10,(1+i.roughness)/2))}r.length&&o.push(xi([r],i))}return i.stroke!==Wt&&o.push(s),this._d("curve",o,i)}polygon(t,n){const i=this._o(n),o=[],s=as(t,!0,i);return i.fill&&(i.fillStyle==="solid"?o.push(xr([t],i)):o.push(xi([t],i))),i.stroke!==Wt&&o.push(s),this._d("polygon",o,i)}path(t,n){const i=this._o(n),o=[];if(!t)return this._d("path",o,i);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");const s=i.fill&&i.fill!=="transparent"&&i.fill!==Wt,r=i.stroke!==Wt,l=!!(i.simplification&&i.simplification<1),u=l?4-4*(i.simplification||1):(1+i.roughness)/2,c=Qx(t,1,u),d=tc(t,i);if(s)if(i.fillStyle==="solid")if(c.length===1){const p=tc(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));o.push({type:"fillPath",ops:this._mergedShape(p.ops)})}else o.push(xr(c,i));else o.push(xi(c,i));return r&&(l?c.forEach(p=>{o.push(as(p,!1,i))}):o.push(d)),this._d("path",o,i)}opsToPath(t,n){let i="";for(const o of t.ops){const s=typeof n=="number"&&n>=0?o.data.map(r=>+r.toFixed(n)):o.data;switch(o.op){case"move":i+=`M${s[0]} ${s[1]} `;break;case"bcurveTo":i+=`C${s[0]} ${s[1]}, ${s[2]} ${s[3]}, ${s[4]} ${s[5]} `;break;case"lineTo":i+=`L${s[0]} ${s[1]} `;break}}return i.trim()}toPaths(t){const n=t.sets||[],i=t.options||this.defaultOptions,o=[];for(const s of n){let r=null;switch(s.type){case"path":r={d:this.opsToPath(s),stroke:i.stroke,strokeWidth:i.strokeWidth,fill:Wt};break;case"fillPath":r={d:this.opsToPath(s),stroke:Wt,strokeWidth:0,fill:i.fill||Wt};break;case"fillSketch":r=this.fillSketch(s,i);break}r&&o.push(r)}return o}fillSketch(t,n){let i=n.fillWeight;return i<0&&(i=n.strokeWidth/2),{d:this.opsToPath(t),stroke:n.fill||Wt,strokeWidth:i,fill:Wt}}_mergedShape(t){return t.filter((n,i)=>i===0?!0:n.op!=="move")}}class eN{constructor(t,n){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new Es(n)}draw(t){const n=t.sets||[],i=t.options||this.getDefaultOptions(),o=this.ctx,s=t.options.fixedDecimalPlaceDigits;for(const r of n)switch(r.type){case"path":o.save(),o.strokeStyle=i.stroke==="none"?"transparent":i.stroke,o.lineWidth=i.strokeWidth,i.strokeLineDash&&o.setLineDash(i.strokeLineDash),i.strokeLineDashOffset&&(o.lineDashOffset=i.strokeLineDashOffset),this._drawToContext(o,r,s),o.restore();break;case"fillPath":{o.save(),o.fillStyle=i.fill||"";const l=t.shape==="curve"||t.shape==="polygon"||t.shape==="path"?"evenodd":"nonzero";this._drawToContext(o,r,s,l),o.restore();break}case"fillSketch":this.fillSketch(o,r,i);break}}fillSketch(t,n,i){let o=i.fillWeight;o<0&&(o=i.strokeWidth/2),t.save(),i.fillLineDash&&t.setLineDash(i.fillLineDash),i.fillLineDashOffset&&(t.lineDashOffset=i.fillLineDashOffset),t.strokeStyle=i.fill||"",t.lineWidth=o,this._drawToContext(t,n,i.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,n,i,o="nonzero"){t.beginPath();for(const s of n.ops){const r=typeof i=="number"&&i>=0?s.data.map(l=>+l.toFixed(i)):s.data;switch(s.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(o):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,n,i,o,s){const r=this.gen.line(t,n,i,o,s);return this.draw(r),r}rectangle(t,n,i,o,s){const r=this.gen.rectangle(t,n,i,o,s);return this.draw(r),r}ellipse(t,n,i,o,s){const r=this.gen.ellipse(t,n,i,o,s);return this.draw(r),r}circle(t,n,i,o){const s=this.gen.circle(t,n,i,o);return this.draw(s),s}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,o,s,r,l=!1,u){const c=this.gen.arc(t,n,i,o,s,r,l,u);return this.draw(c),c}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 Xo="http://www.w3.org/2000/svg";class tN{constructor(t,n){this.svg=t,this.gen=new Es(n)}draw(t){const n=t.sets||[],i=t.options||this.getDefaultOptions(),o=this.svg.ownerDocument||window.document,s=o.createElementNS(Xo,"g"),r=t.options.fixedDecimalPlaceDigits;for(const l of n){let u=null;switch(l.type){case"path":{u=o.createElementNS(Xo,"path"),u.setAttribute("d",this.opsToPath(l,r)),u.setAttribute("stroke",i.stroke),u.setAttribute("stroke-width",i.strokeWidth+""),u.setAttribute("fill","none"),i.strokeLineDash&&u.setAttribute("stroke-dasharray",i.strokeLineDash.join(" ").trim()),i.strokeLineDashOffset&&u.setAttribute("stroke-dashoffset",`${i.strokeLineDashOffset}`);break}case"fillPath":{u=o.createElementNS(Xo,"path"),u.setAttribute("d",this.opsToPath(l,r)),u.setAttribute("stroke","none"),u.setAttribute("stroke-width","0"),u.setAttribute("fill",i.fill||""),(t.shape==="curve"||t.shape==="polygon")&&u.setAttribute("fill-rule","evenodd");break}case"fillSketch":{u=this.fillSketch(o,l,i);break}}u&&s.appendChild(u)}return s}fillSketch(t,n,i){let o=i.fillWeight;o<0&&(o=i.strokeWidth/2);const s=t.createElementNS(Xo,"path");return s.setAttribute("d",this.opsToPath(n,i.fixedDecimalPlaceDigits)),s.setAttribute("stroke",i.fill||""),s.setAttribute("stroke-width",o+""),s.setAttribute("fill","none"),i.fillLineDash&&s.setAttribute("stroke-dasharray",i.fillLineDash.join(" ").trim()),i.fillLineDashOffset&&s.setAttribute("stroke-dashoffset",`${i.fillLineDashOffset}`),s}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,n){return this.gen.opsToPath(t,n)}line(t,n,i,o,s){const r=this.gen.line(t,n,i,o,s);return this.draw(r)}rectangle(t,n,i,o,s){const r=this.gen.rectangle(t,n,i,o,s);return this.draw(r)}ellipse(t,n,i,o,s){const r=this.gen.ellipse(t,n,i,o,s);return this.draw(r)}circle(t,n,i,o){const s=this.gen.circle(t,n,i,o);return this.draw(s)}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,o,s,r,l=!1,u){const c=this.gen.arc(t,n,i,o,s,r,l,u);return this.draw(c)}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 nN={canvas(e,t){return new eN(e,t)},svg(e,t){return new tN(e,t)},generator(e){return new Es(e)},newSeed(){return Es.newSeed()}};function iN(e){return e?"current"in e?e.current||null:e:typeof window>"u"?null:window}function Ut(e,t,n={}){const i=m.useRef(t),{target:o,capture:s,passive:r,once:l}=n;m.useEffect(()=>{i.current=t},[t]),m.useEffect(()=>{const u=iN(o);if(!u)return;const c=p=>{i.current(p)},d={capture:s,passive:r,once:l};return u.addEventListener(e,c,d),()=>{u.removeEventListener(e,c,d)}},[e,o,s,r,l])}const oN=(e,t,n)=>{Ut("pointerdown",i=>{e.pointerDown(i)},{target:n}),Ut("pointermove",i=>{xl.set(e,[i.x,i.y]),e.pointerMove(i)},{target:t}),Ut("pointerleave",i=>{xl.delete(e),e.pointerLeave(i)},{target:t}),Ut("pointerup",i=>{e.pointerUp(i)},{target:t}),Ut("dblclick",i=>{z.isFocus(e)&&!z.hasBeenTextEditing(e)&&e.dblClick(i)},{target:n}),Ut("pointermove",i=>{nf.set(e,[i.x,i.y]),e.globalPointerMove(i)}),Ut("pointerup",i=>{e.globalPointerUp(i)}),Ut("keydown",i=>{e.globalKeyDown(i),z.isFocus(e)&&!z.hasBeenTextEditing(e)&&!of(i.target)&&e.keyDown(i)}),Ut("keyup",i=>{z.isFocus(e)&&!z.hasBeenTextEditing(e)&&(e==null||e.keyUp(i))}),Ut("copy",i=>{z.isFocus(e)&&!z.hasBeenTextEditing(e)&&(i.preventDefault(),Nl(e,mr.copy,i.clipboardData))}),Ut("paste",async i=>{if(z.isFocus(e)&&!z.isReadonly(e)&&!z.hasBeenTextEditing(e)){const o=z.getMovingPointInBoard(e);if(o){const s=Mt(e,Rt(e,o[0],o[1])),r=await sf(i.clipboardData);e.insertFragment(r,s,mr.paste)}}}),Ut("cut",i=>{z.isFocus(e)&&!z.isReadonly(e)&&!z.hasBeenTextEditing(e)&&(i.preventDefault(),Nl(e,mr.cut,i.clipboardData),Ar(e))}),Ut("drop",i=>{z.isReadonly(e)||(i.preventDefault(),e.drop(i))},{target:t}),Ut("dragover",i=>{i.preventDefault()},{target:t})},mo=new WeakMap,po=new WeakMap,hm=e=>{const t=lN(e);return t||Ao(e)||e.viewport.origination||[0,0]},sN=(e,t,n)=>{const i=e.viewport.zoom,o=hm(e),s=z.getBoardContainer(e).getBoundingClientRect(),r=cN(s,n),l=af(t),u=o[0]+r[0]/i,c=o[1]+r[1]/i;be.updateViewport(e,[u-r[0]/l,c-r[1]/l],l)},rN=(e,t=1,n=120)=>{mo.set(e,t);const i=po.get(e);i&&clearTimeout(i),po.set(e,setTimeout(()=>{mo.delete(e),po.delete(e)},n))},aN=e=>{const t=mo.get(e)??0;if(t<=0)return!1;if(t===1){mo.delete(e);const n=po.get(e);n&&(clearTimeout(n),po.delete(e))}else mo.set(e,t-1);return!0},lN=e=>{const t=e.viewport.zoom;if(!Number.isFinite(t)||t<=0)return null;try{const n=z.getViewportContainer(e),i=rf(e);return!i||!Number.isFinite(i.x)||!Number.isFinite(i.y)||!Number.isFinite(i.width)||!Number.isFinite(i.height)||i.width<=0||i.height<=0?null:[n.scrollLeft/t+i.x,n.scrollTop/t+i.y]}catch{return null}},cN=(e,t)=>t&&uN(t,e)?[t[0]-e.x,t[1]-e.y]:[e.width/2,e.height/2],uN=(e,t)=>e[0]>=t.left&&e[0]<=t.right&&e[1]>=t.top&&e[1]<=t.bottom,dN=(e,t)=>{Ut("scroll",i=>{if(aN(e)||lf(e))No(e,!1);else{const o=i.target;if(!o)return;const{scrollLeft:s,scrollTop:r}=o;cf(e,s,r)}},{target:t}),Ut("touchstart",i=>{i.preventDefault()},{target:t,passive:!1}),Ut("wheel",i=>{if(i.metaKey||i.ctrlKey){i.preventDefault();const{deltaX:o,deltaY:s}=i,r=e.viewport.zoom,l=Math.sign(s),u=uf*100,c=Math.abs(s);let d=s;c>u&&(d=u*l);let p=r-d/100;p+=Math.log10(Math.max(1,r))*-l*Math.min(1,c/20),sN(e,p,z.getMovingPointInBoard(e))}},{target:t,passive:!1});const n=m.useRef(!1);m.useEffect(()=>{const i=new ResizeObserver(()=>{if(!n.current){n.current=!0;return}Na(e),Mo(e),Ro(e)});return i.observe(z.getBoardContainer(e)),()=>{i&&i.disconnect()}},[])},Ya=m.createContext(null),ft=()=>{const e=m.useContext(Ya);if(!e)throw new Error("The `useBoard` hook must be used inside the <Plait> component's context.");const{board:t}=e;return t},gm=()=>{const e=m.useContext(Ya);if(!e)throw new Error("The `useBoard` hook must be used inside the <Plait> component's context.");const{listRender:t}=e;return t},mN=({style:e,className:t,children:n,afterInit:i})=>{var x,b;const o=m.useRef(null),s=m.useRef(null),r=m.useRef(null),l=m.useRef(null),u=m.useRef(null),c=m.useRef(null),d=m.useRef(null),p=m.useRef(null),f=ft(),h=gm();return m.useEffect(()=>{const g=nN.svg(o.current,{options:{roughness:0,strokeWidth:1}});wl.set(f,g),yl.set(f,o.current),vl.set(f,!0),kl.set(f,{lowerHost:s.current,host:r.current,upperHost:l.current,topHost:u.current,activeHost:c.current,container:p.current,viewportContainer:d.current});const w=new df;return El.set(f,w),jl.set(f,new Map),h.initialized||(h.initialize(f.children,{board:f,parent:f,parentG:z.getElementHost(f)}),i&&i(f)),Na(f),Mo(f),mf(f),()=>{El.delete(f),Mr.delete(f),Rr.delete(f),kl.delete(f),vl.delete(f),yl.delete(f),wl.delete(f),jl.delete(f)}},[]),oN(f,d,o),dN(f,d),a.jsxDEV("div",{className:K(t,pf,`${pN()}`,`theme-${(x=f.theme)==null?void 0:x.themeColorMode}`,`pointer-${f.pointer}`,{focused:z.isFocus(f),readonly:z.isReadonly(f),"disabled-scroll":((b=f.options)==null?void 0:b.disabledScrollOnNonFocus)&&!z.isFocus(f)}),ref:p,style:e,children:a.jsxDEV("div",{className:"viewport-container",ref:d,style:{width:"100%",height:"100%",overflow:"auto"},children:[a.jsxDEV("svg",{ref:o,width:"100%",height:"100%",style:{position:"relative"},className:"board-host-svg",children:[a.jsxDEV("g",{className:"element-lower-host",ref:s},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:136,columnNumber:11},void 0),a.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),a.jsxDEV("g",{className:"element-upper-host",ref:l},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/board.tsx",lineNumber:138,columnNumber:11},void 0),a.jsxDEV("g",{className:"element-top-host",ref:u},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),a.jsxDEV("svg",{width:"100%",height:"100%",className:"board-active-svg",children:a.jsxDEV("g",{className:"active-host-g",ref:c},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)},pN=()=>ff?"safari":hf?"chrome":gf?"firefox":"",fN=e=>{const t=e;return t.renderText=(n,i)=>{const o=Rs.createRoot(n);let s;const r=a.jsxDEV(Dl,{...i,afterInit:c=>{s=c,i.afterInit&&i.afterInit(c)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/plugins/with-react.tsx",lineNumber:22,columnNumber:7},void 0);o.render(r);let l={...i};return{destroy:()=>{setTimeout(()=>{o.unmount()},0)},update:c=>{if(!(c&&l&&!Object.keys(c).every(f=>c[f]===l[f])))return;const p=gn.isReadOnly(s);l={...l,...c},o.render(a.jsxDEV(Dl,{...l},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/plugins/with-react.tsx",lineNumber:52,columnNumber:21},void 0)),p===!0&&l.readonly===!1?setTimeout(()=>{gn.focus(s)},0):p===!1&&l.readonly===!0&&(gn.blur(s),gn.deselect(s))}}},t},hN=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e,s=[];let r=!1;return e.pointerDown=l=>{const u=[l.clientX,l.clientY];s.length<2&&(e.viewport.zoom,s.push({pointerId:l.pointerId,lastPoint:u,currentPoint:u,hasMoved:!1})),t(l)},e.pointerMove=l=>{const u=[l.clientX,l.clientY];if(s.length>=2){const c=s.find(d=>d.pointerId===l.pointerId);if(c&&(c.currentPoint=u,c.hasMoved=!0,s.length===2&&s.every(d=>d.hasMoved))){const d=s[0],p=s[1],f=Sl(...d.lastPoint,...p.lastPoint),h=Sl(...d.currentPoint,...p.currentPoint),x=h[0]-f[0],b=h[1]-f[1],g=z.getBoardContainer(e).getBoundingClientRect(),w=g.width/2,N=g.height/2,y=e.viewport.zoom,D=hm(e);let j=D[0]+w/y-x/y,k=D[1]+N/y-b/y,E=[j-g.width/2/y,k-g.height/2/y],I=y;const q=gs(...d.lastPoint,...p.lastPoint),U=gs(...d.currentPoint,...p.currentPoint)/q,M=[d.currentPoint[0]-d.lastPoint[0],d.currentPoint[1]-d.lastPoint[1]],T=[p.currentPoint[0]-p.lastPoint[0],p.currentPoint[1]-p.lastPoint[1]],_=M[0]*T[0]+M[1]*T[1],P=Math.sqrt(M[0]*M[0]+M[1]*M[1]),A=Math.sqrt(T[0]*T[0]+T[1]*T[1]),Q=_/(P*A||1);if(Q<-.7||Q<=.8&&r&&U>=.01?r=!0:r=!1,r){I=Math.min(Math.max(e.viewport.zoom*U,bf),xf);const V=z.getBoardContainer(e).getBoundingClientRect(),$=h[0]-V.x,ue=h[1]-V.y;j=E[0]+$/y,k=E[1]+ue/y,E=[j-$/I,k-ue/I]}be.updateViewport(e,E,I),s.forEach(Ee=>{Ee.lastPoint=Ee.currentPoint,Ee.hasMoved=!1})}return}n(l)},e.pointerUp=l=>{const u=s.findIndex(c=>c.pointerId===l.pointerId);u!==-1&&s.splice(u,1),i(l)},e.globalPointerUp=l=>{const u=s.findIndex(c=>c.pointerId===l.pointerId);u!==-1&&s.splice(u,1),o(l)},e},gN=({value:e,children:t,options:n,plugins:i,viewport:o,theme:s,onChange:r,onSelectionChange:l,onValueChange:u,onViewportChange:c,onThemeChange:d})=>{const[p,f]=m.useState(()=>{const N=bN(e,n,i,o,s),y=xN(N);return{v:0,board:N,listRender:y}}),{board:h,listRender:x}=p,b=m.useCallback(()=>{if(r){const k={children:h.children,operations:h.operations,viewport:h.viewport,selection:h.selection,theme:h.theme};r(k)}const N=h.operations.some(k=>fi.isSetSelectionOperation(k)),y=h.operations.some(k=>fi.isSetViewportOperation(k)),D=h.operations.some(k=>fi.isSetThemeOperation(k)),j=h.operations.length>0&&!h.operations.every(k=>fi.isSetSelectionOperation(k)||fi.isSetViewportOperation(k)||fi.isSetThemeOperation(k));u&&j&&u(h.children),l&&N&&l(h.selection),c&&y&&c(h.viewport),d&&D&&d(h.theme.themeColorMode),f(k=>({v:k.v+1,board:h,listRender:x}))},[h,r,l,u,c,d]);m.useEffect(()=>(Rr.set(h,()=>{if(h.operations.length&&h.operations.every(j=>j.type==="set_selection")){x.update(h.children,{board:h,parent:h,parentG:z.getElementHost(h)});return}const y=h.operations.length&&h.operations.some(j=>j.type==="set_viewport");if(y&&Nf(h)){wf(h,!1),x.update(h.children,{board:h,parent:h,parentG:z.getElementHost(h)});return}x.update(h.children,{board:h,parent:h,parentG:z.getElementHost(h)}),y?Mo(h):Xu(h),Ro(h),Oe(h).forEach(j=>{const k=Ci.getElementRef(j);k==null||k.updateActiveSection()})}),Mr.set(h,()=>{b()}),()=>{Rr.delete(h),Mr.delete(h)}),[h]);const g=m.useRef(!0),w=m.useRef(o);return m.useEffect(()=>{const N=w.current;w.current=o;const y=e!==h.children;o&&!Cl.get(h)&&!y&&(yN(N,o)||(h.viewport=o,rc(h,"viewport-prop-change")))},[o,h,e]),m.useEffect(()=>{if(g.current){g.current=!1;return}e!==p.board.children&&!Cl.get(h)&&(h.children=e,x.update(h.children,{board:h,parent:h,parentG:z.getElementHost(h)}),o?(h.viewport=o,rc(h,"value-with-viewport-change")):be.fitViewport(h))},[e,o]),a.jsxDEV(Ya.Provider,{value:p,children:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/react-board/src/wrapper.tsx",lineNumber:242,columnNumber:5},void 0)},bN=(e,t,n,i,o)=>{let s=yf(vf(kf(Ef(jf(Df(Sf(Cf(_f(fN(Pf(Vf(Tf(e,t)))))))))))));return n.forEach(r=>{s=r(s)}),hN(s),i&&(s.viewport=i),o&&(s.theme=o),s},xN=e=>new Uf(e),NN=30,wN=6,vi=2,fo=new WeakMap,Zr=new WeakMap,rc=(e,t)=>{Na(e),Mo(e),Ro(e),jN(e,t)},yN=(e,t)=>{var n,i,o,s;return e===t?!0:!e||!t?!1:e.zoom===t.zoom&&e.offsetX===t.offsetX&&e.offsetY===t.offsetY&&((n=e.origination)==null?void 0:n[0])===((i=t.origination)==null?void 0:i[0])&&((o=e.origination)==null?void 0:o[1])===((s=t.origination)==null?void 0:s[1])},vN="aitu_debug_viewport",kN=()=>{if(typeof window>"u")return!1;try{return new URLSearchParams(window.location.search).get("debugViewport")==="1"||window.localStorage.getItem(vN)==="true"}catch{return!1}},EN=e=>{var t;try{const n=(t=e.viewport)==null?void 0:t.origination;if(!n)return null;const i=z.getHost(e).getAttribute("viewBox");if(!i)return null;const[o,s]=i.trim().split(/[\s,]+/).map(l=>Number(l));if(!Number.isFinite(o)||!Number.isFinite(s))return null;const r=e.viewport.zoom;return{targetScrollLeft:(n[0]-o)*r,targetScrollTop:(n[1]-s)*r}}catch{return null}},jN=(e,t)=>{if(typeof window>"u")return;const n=(fo.get(e)??0)+1;fo.set(e,n),SN(e,t);let i=0;const o=()=>{if(fo.get(e)!==n)return;const s=EN(e);if(!s){Jr(),js(e),No(e,!1);return}const r=z.getViewportContainer(e),l=Math.abs(r.scrollLeft-s.targetScrollLeft),u=Math.abs(r.scrollTop-s.targetScrollTop);(l>vi||u>vi)&&DN(e,s);const d=Math.abs(r.scrollLeft-s.targetScrollLeft),p=Math.abs(r.scrollTop-s.targetScrollTop),f=d<=vi&&p<=vi;if(!(i+1<NN&&(!f||i+1<wN))){Jr("wrapper:restore-scroll",e,{...s}),js(e),No(e,!1);return}i+=1,ac(o)};ac(o)},ac=e=>{if(typeof window.requestAnimationFrame=="function"){window.requestAnimationFrame(e);return}window.setTimeout(e,0)},DN=(e,t)=>{const n=z.getViewportContainer(e);No(e,!0),n.scrollLeft=t.targetScrollLeft,n.scrollTop=t.targetScrollTop;const i=Math.abs(n.scrollLeft-t.targetScrollLeft),o=Math.abs(n.scrollTop-t.targetScrollTop);(i>vi||o>vi)&&Ro(e)},SN=(e,t)=>{js(e);const n=o=>{CN(e,t,o)},i={capture:!0,passive:!0};window.addEventListener("wheel",n,i),window.addEventListener("pointerdown",n,i),window.addEventListener("touchstart",n,i),window.addEventListener("keydown",n,i),Zr.set(e,()=>{window.removeEventListener("wheel",n,i),window.removeEventListener("pointerdown",n,i),window.removeEventListener("touchstart",n,i),window.removeEventListener("keydown",n,i)})},CN=(e,t,n)=>{fo.set(e,(fo.get(e)??0)+1),js(e),_N(n)&&rN(e,2),No(e,!1),Jr()},_N=e=>typeof WheelEvent<"u"&&e instanceof WheelEvent&&(e.ctrlKey||e.metaKey),js=e=>{const t=Zr.get(e);t&&(t(),Zr.delete(e))},Jr=(e,t,n)=>{kN()},lc=e=>a.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),PN=e=>{const t=e;return e.setPluginOptions(If,{emojiPadding:0,spaceBetweenEmojis:4}),t.renderEmoji=(n,i)=>{const o=document.createElement("span");n.appendChild(o);const s=Rs.createRoot(o);s.render(a.jsxDEV(lc,{...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(()=>{s.unmount()},0)},update:u=>{r={...r,...u},s.render(a.jsxDEV(lc,{...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},VN=e=>{const t=m.useRef(null),[n,i]=m.useState(!1),[o,s]=m.useState(!0),{videoItem:r,isFocus:l=!1,isSelected:u=!1,readonly:c=!1}=e,{url:d,poster:p,videoType:f}=r,h=(d==null?void 0:d.replace("#video",""))||"";m.useEffect(()=>{const w=t.current;if(w){const N=()=>{s(!1),i(!1)},y=()=>{s(!1),i(!0)};return w.addEventListener("loadeddata",N),w.addEventListener("error",y),()=>{w.removeEventListener("loadeddata",N),w.removeEventListener("error",y)}}},[h]);const x=w=>{c&&w.stopPropagation()},b=w=>{c&&(w.stopPropagation(),w.preventDefault(),window.open(h,"_blank"))},g={position:"relative",width:"100%",height:"100%",backgroundColor:"#000",borderRadius:"4px",overflow:"hidden"};return n?a.jsxDEV("div",{style:g,"data-slideshow-media-control":"true",onClick:b,onPointerDown:x,onPointerUp:x,children:a.jsxDEV("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",color:"#666",backgroundColor:"#f5f5f5",cursor:c?"pointer":"default"},children:[a.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:97,columnNumber:11},void 0),a.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:98,columnNumber:11},void 0),c&&a.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:102,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:87,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:80,columnNumber:7},void 0):a.jsxDEV("div",{style:g,"data-slideshow-media-control":"true",onClick:b,onPointerDown:x,onPointerUp:x,children:[o&&a.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:a.jsxDEV("div",{style:{textAlign:"center"},children:[a.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:134,columnNumber:13},void 0),a.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:135,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:133,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:120,columnNumber:9},void 0),a.jsxDEV("video",{ref:t,"data-slideshow-media-control":"true",src:h,poster:p,width:"100%",height:"100%",controls:!c,muted:!0,playsInline:!0,draggable:!1,className:K("video-origin",{"video-origin--focus":l,"video-origin--selected":u}),style:{width:"100%",height:"100%",objectFit:"contain"},onPointerDown:x,onPointerUp:x,onError:()=>i(!0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:139,columnNumber:7},void 0),c&&a.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:164,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/video.tsx",lineNumber:112,columnNumber:5},void 0)},TN=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))},cc=e=>{const t=m.useRef(e.imageItem.url),n=m.useRef(null),i=m.useCallback(()=>{var g;(g=n.current)==null||g.call(n),n.current=null},[]);m.useEffect(()=>(t.current=e.imageItem.url,i),[e.imageItem.url,i]);const o=m.useCallback(g=>{if(typeof navigator>"u"||!("serviceWorker"in navigator)||navigator.serviceWorker.controller)return;i();let w=!1;const N=()=>{w||(w=!0,i(),!(!g.isConnected||t.current!==e.imageItem.url)&&(g.src=`${e.imageItem.url}${e.imageItem.url.includes("?")?"&":"?"}_sw_ready=${Date.now()}`))},y=window.setTimeout(()=>{w||(w=!0,i())},1e4),D=()=>{window.clearTimeout(y),navigator.serviceWorker.removeEventListener("controllerchange",N)};n.current=D,navigator.serviceWorker.addEventListener("controllerchange",N,{once:!0}),navigator.serviceWorker.ready.then(()=>{navigator.serviceWorker.controller&&N()}).catch(()=>{})},[i,e.imageItem.url]),s=m.useCallback(g=>{const w=g.currentTarget;w.style.visibility="hidden",o(w);const N=qf(e.board,e.element,e.imageItem.url);N&&window.setTimeout(()=>{w.isConnected&&(w.src=N.retryUrl)},N.delay)},[e.board,e.element,e.imageItem.url,o]),r=m.useCallback(g=>{g.currentTarget.style.visibility="",i(),Af(e.board,e.element,e.imageItem.url)},[i,e.board,e.element,e.imageItem.url]),l=e.element,u=l==null?void 0:l.pptImageStatus,c=l==null?void 0:l.pptImagePrompt,d=l==null?void 0:l.frameId,p=(l==null?void 0:l.isAudio)===!0||(l==null?void 0:l.audioType)==="music-card"||typeof(l==null?void 0:l.audioUrl)=="string"&&l.audioUrl.length>0,f=TN(e.imageItem),h=!p&&!f&&typeof(l==null?void 0:l.frameId)=="string",x=m.useCallback(async()=>{var g;if(!(!e.board||!d||!c||u==="loading")){pr(e.board,d,"loading"),Fo(e.board,d,"loading");try{const w=await Mf({prompt:c,size:"16x9"});if(w.success&&((g=w.data)!=null&&g.url)){Rf(e.board,d);const N=e.board.children.find(y=>y.id===d);if(N){const y=he.getRectangleByPoints(N.points),D=zf({x:y.x,y:y.y,width:y.width,height:y.height});await Lf(e.board,w.data.url,"image",d,{width:y.width,height:y.height},{width:800,height:450},D)}Fo(e.board,d,"generated")}else pr(e.board,d,"placeholder"),Fo(e.board,d,"placeholder"),se.error(w.error||"图片生成失败")}catch(w){pr(e.board,d,"placeholder"),Fo(e.board,d,"placeholder"),se.error((w==null?void 0:w.message)||"图片生成失败")}}},[e.board,d,c,u]);if(l!=null&&l.pptImagePlaceholder){const g=u==="loading";return a.jsxDEV("div",{className:"ppt-image-placeholder",onClick:g?void 0:x,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:g?"default":"pointer",userSelect:"none"},children:[g?a.jsxDEV(Of,{size:"small"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:251,columnNumber:22},void 0):null,a.jsxDEV("span",{children:g?"生成配图中…":"点击生成配图"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:252,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:231,columnNumber:7},void 0)}if(f)return a.jsxDEV(VN,{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:260,columnNumber:7},void 0);const b={src:e.imageItem.url,draggable:!1,...h?{style:{width:"100%",height:"100%",objectFit:"contain",display:"block"}}:{width:"100%"}};return a.jsxDEV("div",{"data-slideshow-legacy-audio":p?"true":void 0,style:h?{width:"100%",height:"100%"}:void 0,children:a.jsxDEV("img",{...b,className:K("image-origin",{"image-origin--focus":e.isFocus}),onError:s,onLoad:r},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:299,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/components/image.tsx",lineNumber:293,columnNumber:5},void 0)};/*!
|
|
3
|
+
* Viewer.js v1.11.7
|
|
4
|
+
* https://fengyuanchen.github.io/viewerjs
|
|
5
|
+
*
|
|
6
|
+
* Copyright 2015-present Chen Fengyuan
|
|
7
|
+
* Released under the MIT license
|
|
8
|
+
*
|
|
9
|
+
* Date: 2024-11-24T04:32:19.116Z
|
|
10
|
+
*/function UN(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uc(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,bm(i.key),i)}}function IN(e,t,n){return t&&uc(e.prototype,t),n&&uc(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function qN(e,t,n){return(t=bm(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable})),n.push.apply(n,i)}return n}function Xa(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?dc(Object(n),!0).forEach(function(i){qN(e,i,n[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):dc(Object(n)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})}return e}function AN(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 bm(e){var t=AN(e,"string");return typeof t=="symbol"?t:t+""}function Qr(e){"@babel/helpers - typeof";return Qr=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},Qr(e)}var mc={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},MN='<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>',ir=typeof window<"u"&&typeof window.document<"u",Vn=ir?window:{},Ti=ir&&Vn.document.documentElement?"ontouchstart"in Vn.document.documentElement:!1,Ka=ir?"PointerEvent"in Vn:!1,Pe="viewer",cs="move",xm="switch",so="zoom",Ko="".concat(Pe,"-active"),RN="".concat(Pe,"-close"),us="".concat(Pe,"-fade"),ea="".concat(Pe,"-fixed"),zN="".concat(Pe,"-fullscreen"),pc="".concat(Pe,"-fullscreen-exit"),ei="".concat(Pe,"-hide"),LN="".concat(Pe,"-hide-md-down"),ON="".concat(Pe,"-hide-sm-down"),FN="".concat(Pe,"-hide-xs-down"),en="".concat(Pe,"-in"),ho="".concat(Pe,"-invisible"),Ui="".concat(Pe,"-loading"),BN="".concat(Pe,"-move"),fc="".concat(Pe,"-open"),bi="".concat(Pe,"-show"),ht="".concat(Pe,"-transition"),Mi="click",ta="dblclick",hc="dragstart",gc="focusin",bc="keydown",on="load",oi="error",HN=Ti?"touchend touchcancel":"mouseup",WN=Ti?"touchmove":"mousemove",$N=Ti?"touchstart":"mousedown",xc=Ka?"pointerdown":$N,Nc=Ka?"pointermove":WN,wc=Ka?"pointerup pointercancel":HN,yc="resize",an="transitionend",vc="wheel",kc="ready",Ec="show",jc="shown",Dc="hide",Sc="hidden",Cc="view",Co="viewed",_c="move",Pc="moved",Vc="rotate",Tc="rotated",Uc="scale",Ic="scaled",qc="zoom",Ac="zoomed",Mc="play",Rc="stop",Ds="".concat(Pe,"Action"),Za=/\s\s*/,Zo=["zoom-in","zoom-out","one-to-one","reset","prev","play","next","rotate-left","rotate-right","flip-horizontal","flip-vertical"];function _o(e){return typeof e=="string"}var GN=Number.isNaN||Vn.isNaN;function mt(e){return typeof e=="number"&&!GN(e)}function ki(e){return typeof e>"u"}function Ri(e){return Qr(e)==="object"&&e!==null}var YN=Object.prototype.hasOwnProperty;function Ei(e){if(!Ri(e))return!1;try{var t=e.constructor,n=t.prototype;return t&&n&&YN.call(n,"isPrototypeOf")}catch{return!1}}function Xe(e){return typeof e=="function"}function et(e,t){if(e&&Xe(t))if(Array.isArray(e)||mt(e.length)){var n=e.length,i;for(i=0;i<n&&t.call(e,e[i],i,e)!==!1;i+=1);}else Ri(e)&&Object.keys(e).forEach(function(o){t.call(e,e[o],o,e)});return e}var Gt=Object.assign||function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),o=1;o<n;o++)i[o-1]=arguments[o];return Ri(t)&&i.length>0&&i.forEach(function(s){Ri(s)&&Object.keys(s).forEach(function(r){t[r]=s[r]})}),t},XN=/^(?:width|height|left|top|marginLeft|marginTop)$/;function cn(e,t){var n=e.style;et(t,function(i,o){XN.test(o)&&mt(i)&&(i+="px"),n[o]=i})}function KN(e){return _o(e)?e.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">"):e}function Ni(e,t){return!e||!t?!1:e.classList?e.classList.contains(t):e.className.indexOf(t)>-1}function ve(e,t){if(!(!e||!t)){if(mt(e.length)){et(e,function(i){ve(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 We(e,t){if(!(!e||!t)){if(mt(e.length)){et(e,function(n){We(n,t)});return}if(e.classList){e.classList.remove(t);return}e.className.indexOf(t)>=0&&(e.className=e.className.replace(t,""))}}function Po(e,t,n){if(t){if(mt(e.length)){et(e,function(i){Po(i,t,n)});return}n?ve(e,t):We(e,t)}}var ZN=/([a-z\d])([A-Z])/g;function Ja(e){return e.replace(ZN,"$1-$2").toLowerCase()}function ji(e,t){return Ri(e[t])?e[t]:e.dataset?e.dataset[t]:e.getAttribute("data-".concat(Ja(t)))}function na(e,t,n){Ri(n)?e[t]=n:e.dataset?e.dataset[t]=n:e.setAttribute("data-".concat(Ja(t)),n)}var Nm=(function(){var e=!1;if(ir){var t=!1,n=function(){},i=Object.defineProperty({},"once",{get:function(){return e=!0,t},set:function(s){t=s}});Vn.addEventListener("test",n,i),Vn.removeEventListener("test",n,i)}return e})();function Ke(e,t,n){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},o=n;t.trim().split(Za).forEach(function(s){if(!Nm){var r=e.listeners;r&&r[s]&&r[s][n]&&(o=r[s][n],delete r[s][n],Object.keys(r[s]).length===0&&delete r[s],Object.keys(r).length===0&&delete e.listeners)}e.removeEventListener(s,o,i)})}function De(e,t,n){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},o=n;t.trim().split(Za).forEach(function(s){if(i.once&&!Nm){var r=e.listeners,l=r===void 0?{}:r;o=function(){delete l[s][n],e.removeEventListener(s,o,i);for(var c=arguments.length,d=new Array(c),p=0;p<c;p++)d[p]=arguments[p];n.apply(e,d)},l[s]||(l[s]={}),l[s][n]&&e.removeEventListener(s,l[s][n],i),l[s][n]=o,e.listeners=l}e.addEventListener(s,o,i)})}function Nt(e,t,n,i){var o;return Xe(Event)&&Xe(CustomEvent)?o=new CustomEvent(t,Xa({bubbles:!0,cancelable:!0,detail:n},i)):(o=document.createEvent("CustomEvent"),o.initCustomEvent(t,!0,!0,n)),e.dispatchEvent(o)}function JN(e){var t=e.getBoundingClientRect();return{left:t.left+(window.pageXOffset-document.documentElement.clientLeft),top:t.top+(window.pageYOffset-document.documentElement.clientTop)}}function ds(e){var t=e.rotate,n=e.scaleX,i=e.scaleY,o=e.translateX,s=e.translateY,r=[];mt(o)&&o!==0&&r.push("translateX(".concat(o,"px)")),mt(s)&&s!==0&&r.push("translateY(".concat(s,"px)")),mt(t)&&t!==0&&r.push("rotate(".concat(t,"deg)")),mt(n)&&n!==1&&r.push("scaleX(".concat(n,")")),mt(i)&&i!==1&&r.push("scaleY(".concat(i,")"));var l=r.length?r.join(" "):"none";return{WebkitTransform:l,msTransform:l,transform:l}}function QN(e){return _o(e)?decodeURIComponent(e.replace(/^.*\//,"").replace(/[?&#].*$/,"")):""}var Nr=Vn.navigator&&/Version\/\d+(\.\d+)+?\s+Safari/i.test(Vn.navigator.userAgent);function wm(e,t,n){var i=document.createElement("img");if(e.naturalWidth&&!Nr)return n(e.naturalWidth,e.naturalHeight),i;var o=document.body||document.documentElement;return i.onload=function(){n(i.width,i.height),Nr||o.removeChild(i)},et(t.inheritedAttributes,function(s){var r=e.getAttribute(s);r!==null&&i.setAttribute(s,r)}),i.src=e.src,Nr||(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;",o.appendChild(i)),i}function Jo(e){switch(e){case 2:return FN;case 3:return ON;case 4:return LN;default:return""}}function ew(e){var t=Xa({},e),n=[];return et(e,function(i,o){delete t[o],et(t,function(s){var r=Math.abs(i.startX-s.startX),l=Math.abs(i.startY-s.startY),u=Math.abs(i.endX-s.endX),c=Math.abs(i.endY-s.endY),d=Math.sqrt(r*r+l*l),p=Math.sqrt(u*u+c*c),f=(p-d)/d;n.push(f)})}),n.sort(function(i,o){return Math.abs(i)<Math.abs(o)}),n[0]}function Qo(e,t){var n=e.pageX,i=e.pageY,o={endX:n,endY:i};return t?o:Xa({timeStamp:Date.now(),startX:n,startY:i},o)}function tw(e){var t=0,n=0,i=0;return et(e,function(o){var s=o.startX,r=o.startY;t+=s,n+=r,i+=1}),t/=i,n/=i,{pageX:t,pageY:n}}var nw={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=Gt({},i)},renderViewer:function(){this.options.inline&&!this.fulled&&cn(this.viewer,this.viewerData)},initList:function(){var t=this,n=this.element,i=this.options,o=this.list,s=[];o.innerHTML="",et(this.images,function(r,l){var u=r.src,c=r.alt||QN(u),d=t.getImageURL(r);if(u||d){var p=document.createElement("li"),f=document.createElement("img");et(i.inheritedAttributes,function(h){var x=r.getAttribute(h);x!==null&&f.setAttribute(h,x)}),i.navbar&&(f.src=u||d),f.alt=c,f.setAttribute("data-original-url",d||u),p.setAttribute("data-index",l),p.setAttribute("data-viewer-action","view"),p.setAttribute("role","button"),i.keyboard&&p.setAttribute("tabindex",0),p.appendChild(f),o.appendChild(p),s.push(p)}}),this.items=s,et(s,function(r){var l=r.firstElementChild,u,c;na(l,"filled",!0),i.loading&&ve(r,Ui),De(l,on,u=function(p){Ke(l,oi,c),i.loading&&We(r,Ui),t.loadImage(p)},{once:!0}),De(l,oi,c=function(){Ke(l,on,u),i.loading&&We(r,Ui)},{once:!0})}),i.transition&&De(n,Co,function(){ve(o,ht)},{once:!0})},renderList:function(){var t=this.index,n=this.items[t];if(n){var i=n.nextElementSibling,o=parseInt(window.getComputedStyle(i||n).marginLeft,10),s=n.offsetWidth,r=s+o;cn(this.list,Gt({width:r*this.length-o},ds({translateX:(this.viewerData.width-s)/2-r*t})))}},resetList:function(){var t=this.list;t.innerHTML="",We(t,ht),cn(t,ds({translateX:0}))},initImage:function(t){var n=this,i=this.options,o=this.image,s=this.viewerData,r=this.footer.offsetHeight,l=s.width,u=Math.max(s.height-r,r),c=this.imageData||{},d;this.imageInitializing={abort:function(){d.onload=null}},d=wm(o,i,function(p,f){var h=p/f,x=Math.max(0,Math.min(1,i.initialCoverage)),b=l,g=u;n.imageInitializing=!1,u*h>l?g=l/h:b=u*h,x=mt(x)?x:.9,b=Math.min(b*x,p),g=Math.min(g*x,f);var w=(l-b)/2,N=(u-g)/2,y={left:w,top:N,x:w,y:N,width:b,height:g,oldRatio:1,ratio:b/p,aspectRatio:h,naturalWidth:p,naturalHeight:f},D=Gt({},y);i.rotatable&&(y.rotate=c.rotate||0,D.rotate=0),i.scalable&&(y.scaleX=c.scaleX||1,y.scaleY=c.scaleY||1,D.scaleX=1,D.scaleY=1),n.imageData=y,n.initialImageData=D,t&&t()})},renderImage:function(t){var n=this,i=this.image,o=this.imageData;if(cn(i,Gt({width:o.width,height:o.height,marginLeft:o.x,marginTop:o.y},ds(o))),t)if((this.viewing||this.moving||this.rotating||this.scaling||this.zooming)&&this.options.transition&&Ni(i,ht)){var s=function(){n.imageRendering=!1,t()};this.imageRendering={abort:function(){Ke(i,an,s)}},De(i,an,s,{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="")}},iw={bind:function(){var t=this.options,n=this.viewer,i=this.canvas,o=this.element.ownerDocument;De(n,Mi,this.onClick=this.click.bind(this)),De(n,hc,this.onDragStart=this.dragstart.bind(this)),De(i,xc,this.onPointerDown=this.pointerdown.bind(this)),De(o,Nc,this.onPointerMove=this.pointermove.bind(this)),De(o,wc,this.onPointerUp=this.pointerup.bind(this)),De(o,bc,this.onKeyDown=this.keydown.bind(this)),De(window,yc,this.onResize=this.resize.bind(this)),t.zoomable&&t.zoomOnWheel&&De(n,vc,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),t.toggleOnDblclick&&De(i,ta,this.onDblclick=this.dblclick.bind(this))},unbind:function(){var t=this.options,n=this.viewer,i=this.canvas,o=this.element.ownerDocument;Ke(n,Mi,this.onClick),Ke(n,hc,this.onDragStart),Ke(i,xc,this.onPointerDown),Ke(o,Nc,this.onPointerMove),Ke(o,wc,this.onPointerUp),Ke(o,bc,this.onKeyDown),Ke(window,yc,this.onResize),t.zoomable&&t.zoomOnWheel&&Ke(n,vc,this.onWheel,{passive:!1,capture:!0}),t.toggleOnDblclick&&Ke(i,ta,this.onDblclick)}},ow={click:function(t){var n=this.options,i=this.imageData,o=t.target,s=ji(o,Ds);switch(!s&&o.localName==="img"&&o.parentElement.localName==="li"&&(o=o.parentElement,s=ji(o,Ds)),Ti&&t.isTrusted&&o===this.canvas&&clearTimeout(this.clickCanvasTimeout),s){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(ji(o,"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&&(Ti&&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,o=this.image,s=this.index,r=this.viewerData;We(o,ho),i.loading&&We(this.canvas,Ui),o.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(){Po(o,BN,i.movable),Po(o,ht,i.transition),t.renderImage(function(){t.viewed=!0,t.viewing=!1,Xe(i.viewed)&&De(n,Co,i.viewed,{once:!0}),Nt(n,Co,{originalImage:t.images[s],index:s,image:o},{cancelable:!1})})})},loadImage:function(t){var n=t.target,i=n.parentNode,o=i.offsetWidth||30,s=i.offsetHeight||50,r=!!ji(n,"filled");wm(n,this.options,function(l,u){var c=l/u,d=o,p=s;s*c>o?r?d=s*c:p=o/c:r?p=o/c:d=s*c,cn(n,Gt({width:d,height:p},ds({translateX:(o-d)/2,translateY:(s-p)/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,o=t.buttons,s=t.button;if(this.pointerMoved=!1,!(!this.viewed||this.showing||this.viewing||this.hiding||(t.type==="mousedown"||t.type==="pointerdown"&&t.pointerType==="mouse")&&(mt(o)&&o!==1||mt(s)&&s!==0||t.ctrlKey))){t.preventDefault(),t.changedTouches?et(t.changedTouches,function(l){i[l.identifier]=Qo(l)}):i[t.pointerId||0]=Qo(t);var r=n.movable?cs:!1;n.zoomOnTouch&&n.zoomable&&Object.keys(i).length>1?r=so:n.slideOnTouch&&(t.pointerType==="touch"||t.type==="touchstart")&&this.isSwitchable()&&(r=xm),n.transition&&(r===cs||r===so)&&We(this.image,ht),this.action=r}},pointermove:function(t){var n=this.pointers,i=this.action;!this.viewed||!i||(t.preventDefault(),t.changedTouches?et(t.changedTouches,function(o){Gt(n[o.identifier]||{},Qo(o,!0))}):Gt(n[t.pointerId||0]||{},Qo(t,!0)),this.change(t))},pointerup:function(t){var n=this,i=this.options,o=this.action,s=this.pointers,r;t.changedTouches?et(t.changedTouches,function(l){r=s[l.identifier],delete s[l.identifier]}):(r=s[t.pointerId||0],delete s[t.pointerId||0]),o&&(t.preventDefault(),i.transition&&(o===cs||o===so)&&ve(this.image,ht),this.action=!1,Ti&&o!==so&&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(){Nt(n.image,ta,{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(){Nt(n.canvas,Mi,{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}et(this.player.getElementsByTagName("img"),function(n){De(n,on,t.loadImage.bind(t),{once:!0}),Nt(n,on)})}},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,o=1;t.deltaY?o=t.deltaY>0?1:-1:t.wheelDelta?o=-t.wheelDelta/120:t.detail&&(o=t.detail>0?1:-1),this.zoom(-o*i,!0,null,t)}}},sw={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(Xe(i.show)&&De(n,Ec,i.show,{once:!0}),Nt(n,Ec)===!1||!this.ready)return this;this.hiding&&this.transitioning.abort(),this.showing=!0,this.open();var o=this.viewer;if(We(o,ei),o.setAttribute("role","dialog"),o.setAttribute("aria-labelledby",this.title.id),o.setAttribute("aria-modal",!0),o.removeAttribute("aria-hidden"),i.transition&&!t){var s=this.shown.bind(this);this.transitioning={abort:function(){Ke(o,an,s),We(o,en)}},ve(o,ht),o.initialOffsetWidth=o.offsetWidth,De(o,an,s,{once:!0}),ve(o,en)}else ve(o,en),this.shown();return this},hide:function(){var t=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,i=this.element,o=this.options;if(o.inline||this.hiding||!(this.isShown||this.showing))return this;if(Xe(o.hide)&&De(i,Dc,o.hide,{once:!0}),Nt(i,Dc)===!1)return this;this.showing&&this.transitioning.abort(),this.hiding=!0,this.played?this.stop():this.viewing&&this.viewing.abort();var s=this.viewer,r=this.image,l=function(){We(s,en),t.hidden()};if(o.transition&&!n){var u=function(p){p&&p.target===s&&(Ke(s,an,u),t.hidden())},c=function(){Ni(s,ht)?(De(s,an,u),We(s,en)):l()};this.transitioning={abort:function(){t.viewed&&Ni(r,ht)?Ke(r,an,c):Ni(s,ht)&&Ke(s,an,u)}},this.viewed&&Ni(r,ht)?(De(r,an,c,{once:!0}),this.zoomTo(0,!1,null,null,!0)):c()}else l();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,o=this.options,s=this.title,r=this.canvas,l=this.items[n],u=l.querySelector("img"),c=ji(u,"originalUrl"),d=u.getAttribute("alt"),p=document.createElement("img");if(et(o.inheritedAttributes,function(g){var w=u.getAttribute(g);w!==null&&p.setAttribute(g,w)}),p.src=c,p.alt=d,Xe(o.view)&&De(i,Cc,o.view,{once:!0}),Nt(i,Cc,{originalImage:this.images[n],index:n,image:p})===!1||!this.isShown||this.hiding||this.played)return this;var f=this.items[this.index];f&&(We(f,Ko),f.removeAttribute("aria-selected")),ve(l,Ko),l.setAttribute("aria-selected",!0),o.focus&&l.focus(),this.image=p,this.viewed=!1,this.index=n,this.imageData={},ve(p,ho),o.loading&&ve(r,Ui),r.innerHTML="",r.appendChild(p),this.renderList(),s.innerHTML="";var h=function(){var w=t.imageData,N=Array.isArray(o.title)?o.title[1]:o.title;s.innerHTML=KN(Xe(N)?N.call(t,p,w):"".concat(d," (").concat(w.naturalWidth," × ").concat(w.naturalHeight,")"))},x,b;return De(i,Co,h,{once:!0}),this.viewing={abort:function(){Ke(i,Co,h),p.complete?t.imageRendering?t.imageRendering.abort():t.imageInitializing&&t.imageInitializing.abort():(p.src="",Ke(p,on,x),t.timeout&&clearTimeout(t.timeout))}},p.complete?this.load():(De(p,on,x=function(){Ke(p,oi,b),t.load()},{once:!0}),De(p,oi,b=function(){Ke(p,on,x),t.timeout&&(clearTimeout(t.timeout),t.timeout=!1),We(p,ho),o.loading&&We(t.canvas,Ui)},{once:!0}),this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(function(){We(p,ho),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(ki(t)?t:i.x+Number(t),ki(n)?n:i.y+Number(n)),this},moveTo:function(t){var n=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:t,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,s=this.element,r=this.options,l=this.imageData;if(t=Number(t),i=Number(i),this.viewed&&!this.played&&r.movable){var u=l.x,c=l.y,d=!1;if(mt(t)?d=!0:t=u,mt(i)?d=!0:i=c,d){if(Xe(r.move)&&De(s,_c,r.move,{once:!0}),Nt(s,_c,{x:t,y:i,oldX:u,oldY:c,originalEvent:o})===!1)return this;l.x=t,l.y=i,l.left=t,l.top=i,this.moving=!0,this.renderImage(function(){n.moving=!1,Xe(r.moved)&&De(s,Pc,r.moved,{once:!0}),Nt(s,Pc,{x:t,y:i,oldX:u,oldY:c,originalEvent:o},{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,o=this.options,s=this.imageData;if(t=Number(t),mt(t)&&this.viewed&&!this.played&&o.rotatable){var r=s.rotate;if(Xe(o.rotate)&&De(i,Vc,o.rotate,{once:!0}),Nt(i,Vc,{degree:t,oldDegree:r})===!1)return this;s.rotate=t,this.rotating=!0,this.renderImage(function(){n.rotating=!1,Xe(o.rotated)&&De(i,Tc,o.rotated,{once:!0}),Nt(i,Tc,{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,o=this.element,s=this.options,r=this.imageData;if(t=Number(t),i=Number(i),this.viewed&&!this.played&&s.scalable){var l=r.scaleX,u=r.scaleY,c=!1;if(mt(t)?c=!0:t=l,mt(i)?c=!0:i=u,c){if(Xe(s.scale)&&De(o,Uc,s.scale,{once:!0}),Nt(o,Uc,{scaleX:t,scaleY:i,oldScaleX:l,oldScaleY:u})===!1)return this;r.scaleX=t,r.scaleY=i,this.scaling=!0,this.renderImage(function(){n.scaling=!1,Xe(s.scaled)&&De(o,Ic,s.scaled,{once:!0}),Nt(o,Ic,{scaleX:t,scaleY:i,oldScaleX:l,oldScaleY:u},{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,o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,s=this.imageData;return t=Number(t),t<0?t=1/(1-t):t=1+t,this.zoomTo(s.width*t/s.naturalWidth,n,i,o),this},zoomTo:function(t){var n=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null,r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1,l=this.element,u=this.options,c=this.pointers,d=this.imageData,p=d.x,f=d.y,h=d.width,x=d.height,b=d.naturalWidth,g=d.naturalHeight;if(t=Math.max(0,t),mt(t)&&this.viewed&&!this.played&&(r||u.zoomable)){if(!r){var w=Math.max(.01,u.minZoomRatio),N=Math.min(100,u.maxZoomRatio);t=Math.min(Math.max(t,w),N)}if(s)switch(s.type){case"wheel":u.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 y=b*t,D=g*t,j=y-h,k=D-x,E=d.ratio;if(Xe(u.zoom)&&De(l,qc,u.zoom,{once:!0}),Nt(l,qc,{ratio:t,oldRatio:E,originalEvent:s})===!1)return this;if(this.zooming=!0,s){var I=JN(this.viewer),q=c&&Object.keys(c).length>0?tw(c):{pageX:s.pageX,pageY:s.pageY};d.x-=j*((q.pageX-I.left-p)/h),d.y-=k*((q.pageY-I.top-f)/x)}else Ei(o)&&mt(o.x)&&mt(o.y)?(d.x-=j*((o.x-p)/h),d.y-=k*((o.y-f)/x)):(d.x-=j/2,d.y-=k/2);d.left=d.x,d.top=d.y,d.width=y,d.height=D,d.oldRatio=E,d.ratio=t,this.renderImage(function(){n.zooming=!1,Xe(u.zoomed)&&De(l,Ac,u.zoomed,{once:!0}),Nt(l,Ac,{ratio:t,oldRatio:E,originalEvent:s},{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,o=this.options;if(Xe(o.play)&&De(i,Mc,o.play,{once:!0}),Nt(i,Mc)===!1)return this;var s=this.player,r=this.loadImage.bind(this),l=[],u=0,c=0;if(this.played=!0,this.onLoadWhenPlay=r,n&&this.requestFullscreen(n),ve(s,bi),et(this.items,function(f,h){var x=f.querySelector("img"),b=document.createElement("img");b.src=ji(x,"originalUrl"),b.alt=x.getAttribute("alt"),b.referrerPolicy=x.referrerPolicy,u+=1,ve(b,us),Po(b,ht,o.transition),Ni(f,Ko)&&(ve(b,en),c=h),l.push(b),De(b,on,r,{once:!0}),s.appendChild(b)}),mt(o.interval)&&o.interval>0){var d=function(){clearTimeout(t.playing.timeout),We(l[c],en),c-=1,c=c>=0?c:u-1,ve(l[c],en),t.playing.timeout=setTimeout(d,o.interval)},p=function(){clearTimeout(t.playing.timeout),We(l[c],en),c+=1,c=c<u?c:0,ve(l[c],en),t.playing.timeout=setTimeout(p,o.interval)};u>1&&(this.playing={prev:d,next:p,timeout:setTimeout(p,o.interval)})}return this},stop:function(){var t=this;if(!this.played)return this;var n=this.element,i=this.options;if(Xe(i.stop)&&De(n,Rc,i.stop,{once:!0}),Nt(n,Rc)===!1)return this;var o=this.player;return clearTimeout(this.playing.timeout),this.playing=!1,this.played=!1,et(o.getElementsByTagName("img"),function(s){Ke(s,on,t.onLoadWhenPlay)}),We(o,bi),o.innerHTML="",this.exitFullscreen(),this},full:function(){var t=this,n=this.options,i=this.viewer,o=this.image,s=this.list;return!this.isShown||this.played||this.fulled||!n.inline?this:(this.fulled=!0,this.open(),ve(this.button,pc),n.transition&&(We(s,ht),this.viewed&&We(o,ht)),ve(i,ea),i.setAttribute("role","dialog"),i.setAttribute("aria-labelledby",this.title.id),i.setAttribute("aria-modal",!0),i.removeAttribute("style"),cn(i,{zIndex:n.zIndex}),n.focus&&this.enforceFocus(),this.initContainer(),this.viewerData=Gt({},this.containerData),this.renderList(),this.viewed&&this.initImage(function(){t.renderImage(function(){n.transition&&setTimeout(function(){ve(o,ht),ve(s,ht)},0)})}),this)},exit:function(){var t=this,n=this.options,i=this.viewer,o=this.image,s=this.list;return!this.isShown||this.played||!this.fulled||!n.inline?this:(this.fulled=!1,this.close(),We(this.button,pc),n.transition&&(We(s,ht),this.viewed&&We(o,ht)),n.focus&&this.clearEnforceFocus(),i.removeAttribute("role"),i.removeAttribute("aria-labelledby"),i.removeAttribute("aria-modal"),We(i,ea),cn(i,{zIndex:n.zIndexInline}),this.viewerData=Gt({},this.parentData),this.renderViewer(),this.renderList(),this.viewed&&this.initImage(function(){t.renderImage(function(){n.transition&&setTimeout(function(){ve(o,ht),ve(s,ht)},0)})}),this)},tooltip:function(){var t=this,n=this.options,i=this.tooltipBox,o=this.imageData;return!this.viewed||this.played||!n.tooltip?this:(i.textContent="".concat(Math.round(o.ratio*100),"%"),this.tooltipping?clearTimeout(this.tooltipping):n.transition?(this.fading&&Nt(i,an),ve(i,bi),ve(i,us),ve(i,ht),i.removeAttribute("aria-hidden"),i.initialOffsetWidth=i.offsetWidth,ve(i,en)):(ve(i,bi),i.removeAttribute("aria-hidden")),this.tooltipping=setTimeout(function(){n.transition?(De(i,an,function(){We(i,bi),We(i,us),We(i,ht),i.setAttribute("aria-hidden",!0),t.fading=!1},{once:!0}),We(i,en),t.fading=!0):(We(i,bi),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=Gt({},this.initialImageData),this.renderImage()),this},update:function(){var t=this,n=this.element,i=this.options,o=this.isImg;if(o&&!n.parentNode)return this.destroy();var s=[];if(et(o?[n]:n.querySelectorAll("img"),function(c){Xe(i.filter)?i.filter.call(t,c)&&s.push(c):t.getImageURL(c)&&s.push(c)}),!s.length)return this;if(this.images=s,this.length=s.length,this.ready){var r=[];if(et(this.items,function(c,d){var p=c.querySelector("img"),f=s[d];f&&p?(f.src!==p.src||f.alt!==p.alt)&&r.push(d):r.push(d)}),cn(this.list,{width:"auto"}),this.initList(),this.isShown)if(this.length){if(this.viewed){var l=r.indexOf(this.index);if(l>=0)this.viewed=!1,this.view(Math.max(Math.min(this.index-l,this.length-1),0));else{var u=this.items[this.index];ve(u,Ko),u.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[Pe]?(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||Ke(t,Mi,this.onStart),t[Pe]=void 0,this):this}},rw={getImageURL:function(t){var n=this.options.url;return _o(n)?n=t.getAttribute(n):Xe(n)?n=n.call(this,t):n="",n},enforceFocus:function(){var t=this;this.clearEnforceFocus(),De(document,gc,this.onFocusin=function(n){var i=t.viewer,o=n.target;if(!(o===document||o===i||i.contains(o))){for(;o;){if(o.getAttribute("tabindex")!==null||o.getAttribute("aria-modal")==="true")return;o=o.parentElement}i.focus()}})},clearEnforceFocus:function(){this.onFocusin&&(Ke(document,gc,this.onFocusin),this.onFocusin=null)},open:function(){var t=this.body;ve(t,fc),this.scrollbarWidth>0&&(t.style.paddingRight="".concat(this.scrollbarWidth+(parseFloat(this.initialBodyComputedPaddingRight)||0),"px"))},close:function(){var t=this.body;We(t,fc),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()),Xe(n.shown)&&De(t,jc,n.shown,{once:!0}),Nt(t,jc)!==!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(),ve(i,ei),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||(Xe(n.hidden)&&De(t,Sc,n.hidden,{once:!0}),Nt(t,Sc,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?Ei(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,o=i[Object.keys(i)[0]];if(o){var s=o.endX-o.startX,r=o.endY-o.startY;switch(this.action){case cs:(s!==0||r!==0)&&(this.pointerMoved=!0,this.move(s,r,t));break;case so:this.zoom(ew(i),!1,null,t);break;case xm:{this.action="switched";var l=Math.abs(s);l>1&&l>Math.abs(r)&&(this.pointers={},s>1?this.prev(n.loop):s<-1&&this.next(n.loop));break}}et(i,function(u){u.startX=u.endX,u.startY=u.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}},aw=Vn.Viewer,lw=(function(e){return function(){return e+=1,e}})(-1),ym=(function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(UN(this,e),!t||t.nodeType!==1)throw new Error("The first argument is required and must be an element.");this.element=t,this.options=Gt({},mc,Ei(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=lw(),this.init()}return IN(e,[{key:"init",value:function(){var n=this,i=this.element,o=this.options;if(!i[Pe]){i[Pe]=this,o.focus&&!o.keyboard&&(o.focus=!1);var s=i.localName==="img",r=[];if(et(s?[i]:i.querySelectorAll("img"),function(c){Xe(o.filter)?o.filter.call(n,c)&&r.push(c):n.getImageURL(c)&&r.push(c)}),this.isImg=s,this.length=r.length,this.images=r,this.initBody(),ki(document.createElement(Pe).style.transition)&&(o.transition=!1),o.inline){var l=0,u=function(){if(l+=1,l===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(){et(r,function(d){d.complete||(Ke(d,on,u),Ke(d,oi,u))})}},et(r,function(c){if(c.complete)u();else{var d,p;De(c,on,d=function(){Ke(c,oi,p),u()},{once:!0}),De(c,oi,p=function(){Ke(c,on,d),u()},{once:!0})}})}else De(i,Mi,this.onStart=function(c){var d=c.target;d.localName==="img"&&(!Xe(o.filter)||o.filter.call(n,d))&&n.view(n.images.indexOf(d))})}}},{key:"build",value:function(){if(!this.ready){var n=this.element,i=this.options,o=n.parentNode,s=document.createElement("div");s.innerHTML=MN;var r=s.querySelector(".".concat(Pe,"-container")),l=r.querySelector(".".concat(Pe,"-title")),u=r.querySelector(".".concat(Pe,"-toolbar")),c=r.querySelector(".".concat(Pe,"-navbar")),d=r.querySelector(".".concat(Pe,"-button")),p=r.querySelector(".".concat(Pe,"-canvas"));if(this.parent=o,this.viewer=r,this.title=l,this.toolbar=u,this.navbar=c,this.button=d,this.canvas=p,this.footer=r.querySelector(".".concat(Pe,"-footer")),this.tooltipBox=r.querySelector(".".concat(Pe,"-tooltip")),this.player=r.querySelector(".".concat(Pe,"-player")),this.list=r.querySelector(".".concat(Pe,"-list")),r.id="".concat(Pe).concat(this.id),l.id="".concat(Pe,"Title").concat(this.id),ve(l,i.title?Jo(Array.isArray(i.title)?i.title[0]:i.title):ei),ve(c,i.navbar?Jo(i.navbar):ei),Po(d,ei,!i.button),i.keyboard&&d.setAttribute("tabindex",0),i.backdrop&&(ve(r,"".concat(Pe,"-backdrop")),!i.inline&&i.backdrop!=="static"&&na(p,Ds,"hide")),_o(i.className)&&i.className&&i.className.split(Za).forEach(function(y){ve(r,y)}),i.toolbar){var f=document.createElement("ul"),h=Ei(i.toolbar),x=Zo.slice(0,3),b=Zo.slice(7,9),g=Zo.slice(9);h||ve(u,Jo(i.toolbar)),et(h?i.toolbar:Zo,function(y,D){var j=h&&Ei(y),k=h?Ja(D):y,E=j&&!ki(y.show)?y.show:y;if(!(!E||!i.zoomable&&x.indexOf(k)!==-1||!i.rotatable&&b.indexOf(k)!==-1||!i.scalable&&g.indexOf(k)!==-1)){var I=j&&!ki(y.size)?y.size:y,q=j&&!ki(y.click)?y.click:y,W=document.createElement("li");i.keyboard&&W.setAttribute("tabindex",0),W.setAttribute("role","button"),ve(W,"".concat(Pe,"-").concat(k)),Xe(q)||na(W,Ds,k),mt(E)&&ve(W,Jo(E)),["small","large"].indexOf(I)!==-1?ve(W,"".concat(Pe,"-").concat(I)):k==="play"&&ve(W,"".concat(Pe,"-large")),Xe(q)&&De(W,Mi,q),f.appendChild(W)}}),u.appendChild(f)}else ve(u,ei);if(!i.rotatable){var w=u.querySelectorAll('li[class*="rotate"]');ve(w,ho),et(w,function(y){u.appendChild(y)})}if(i.inline)ve(d,zN),cn(r,{zIndex:i.zIndexInline}),window.getComputedStyle(o).position==="static"&&cn(o,{position:"relative"}),o.insertBefore(r,n.nextSibling);else{ve(d,RN),ve(r,ea),ve(r,us),ve(r,ei),cn(r,{zIndex:i.zIndex});var N=i.container;_o(N)&&(N=n.ownerDocument.querySelector(N)),N||(N=this.body),N.appendChild(r)}if(i.inline&&(this.render(),this.bind(),this.isShown=!0),this.ready=!0,Xe(i.ready)&&De(n,kc,i.ready,{once:!0}),Nt(n,kc)===!1){this.ready=!1;return}this.ready&&i.inline&&this.view(this.index)}}}],[{key:"noConflict",value:function(){return window.Viewer=aw,e}},{key:"setDefaults",value:function(n){Gt(mc,Ei(n)&&n)}}])})();Gt(ym.prototype,nw,iw,ow,sw,rw);const cw=()=>window.innerWidth<=768||/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);class uw{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 o=cw(),s=o?{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 ym(this.container,{inline:!1,button:!0,navbar:!1,title:!!n,toolbar:s,fullscreen:!o,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 dw(e){const t=e.getData("text/uri-list");if(t){const o=t.split(`
|
|
11
|
+
`).filter(s=>s&&!s.startsWith("#"));if(o.length>0&&zc(o[0]))return o[0].trim()}const n=e.getData("text/plain");if(n&&zc(n.trim()))return n.trim();const i=e.getData("text/html");if(i){const o=i.match(/<img[^>]+src=["']([^"']+)["']/i);if(o&&o[1])return o[1]}return null}function zc(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(o=>n.includes(o))?!0:[/\.(jpg|jpeg|png|gif|webp|svg|bmp)(\?|$)/i,/\/image\//i,/\/images\//i,/\/img\//i,/\/photo\//i,/data:image\//i,/blob:/i].some(o=>o.test(e))}const mw=e=>{const t=e,{insertFragment:n,drop:i,pointerUp:o}=t,s=new uw({zoomStep:.3,minZoom:.1,maxZoom:5,enableKeyboard:!0});return t.insertFragment=(r,l,u)=>{var c;if((c=r==null?void 0:r.files)!=null&&c.length&&_l(r.files[0].type)){const d=r.files[0];Pl(e,d,l,!1).catch(()=>{});return}n(r,l,u)},t.drop=r=>{var l,u;if((u=(l=r.dataTransfer)==null?void 0:l.files)!=null&&u.length){const c=r.dataTransfer.files[0];if(_l(c.type)){const d=Mt(e,Rt(e,r.x,r.y));return Pl(e,c,d,!0),!0}if(Ff(c.type)){const d=Mt(e,Rt(e,r.x,r.y));return(async()=>{try{const p=c.name.replace(/\.[^.]+$/,"");await Vl.initialize();const f=await Vl.addAsset({type:Cn.AUDIO,source:Bf.LOCAL,name:c.name,blob:c,mimeType:c.type});await Tl.updateCachedMedia(f.url,{metadata:{name:p}});const[h,x]=await Promise.all([Hf(c),Wf(c)]);let b;if(x){const g=`/__aitu_cache__/image/${f.id}-cover.png`;await Tl.cacheMediaFromBlob(g,x,"image",{taskId:`${f.id}-cover`,name:`${p}-cover`}),b=g}await wa(e,f.url,{title:p,duration:h,previewImageUrl:b},d,!0)}catch(p){console.error("[withImagePlugin] Failed to insert audio from drop:",p)}})(),!0}}if(r.dataTransfer){const c=dw(r.dataTransfer);if(c){const d=Mt(e,Rt(e,r.x,r.y));return $f(e,c,d).catch(p=>{console.error("[withImagePlugin] Failed to insert image from URL:",p)}),!0}}return i(r)},t.pointerUp=r=>{const l=Gf(e);if(l&&!Ku(e)&&!wo(e)&&!yo(e)){const u=Mt(e,Rt(e,r.x,r.y)),c=zr(e,u);c&&Kt.isMindElement(e,c)&&Kt.hasImage(c)&&Yf(e,c,u)&&l===c&&s.open(c.data.image.url)}o(r)},t},Yi={MAX_CHARS_PER_LINE:50};function pw(e){const t=e.split(`
|
|
12
|
+
`),n=[];for(const i of t)if(i.length<=Yi.MAX_CHARS_PER_LINE)n.push(i);else{let o=i;for(;o.length>0;){let s=Yi.MAX_CHARS_PER_LINE;if(o.length>Yi.MAX_CHARS_PER_LINE){const r=o.lastIndexOf(" ",Yi.MAX_CHARS_PER_LINE);r>Yi.MAX_CHARS_PER_LINE*.7&&(s=r)}n.push(o.substring(0,s).trim()),o=o.substring(s).trim()}}return n.join(`
|
|
13
|
+
`)}function fw(e){var i,o;if(!e)return!1;const t=!!e.text||!!((i=e.data)!=null&&i.text),n=!!e.elements||!!((o=e.data)!=null&&o.elements);return t&&!n}function hw(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 gw=e=>{const{insertFragment:t}=e;return e.insertFragment=(n,i,o)=>{if(fw(n)){const s=hw(n);if(s&&s.trim()){const r=s.trim(),l=Xf(r);if(l&&l.length>0){const c=Math.round(window.innerWidth*.5);Kf(e,l,i,c);return}const u=pw(r);zs.insertText(e,i,u);return}}t(n,i,o)},e},bw=e=>{const t=e;return t.renderImage=(n,i)=>{const o=Rs.createRoot(n);o.render(a.jsxDEV(cc,{...i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/with-common.tsx",lineNumber:20,columnNumber:17},void 0));let s={...i};return{destroy:()=>{setTimeout(()=>{o.unmount()},0)},update:l=>{s={...s,...l},o.render(a.jsxDEV(cc,{...s},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/with-common.tsx",lineNumber:30,columnNumber:21},void 0))}}},gw(mw(t))},xw=m.forwardRef(({children:e,gap:t,align:n,justifyContent:i,className:o,style:s},r)=>a.jsxDEV("div",{className:K("stack stack_horizontal",o),style:{"--gap":t,alignItems:n,justifyContent:i,...s},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)),Nw=m.forwardRef(({children:e,gap:t,align:n,justifyContent:i,className:o,style:s},r)=>a.jsxDEV("div",{className:K("stack stack_vertical",o),style:{"--gap":t,justifyItems:n,justifyContent:i,...s},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)),ct={Row:xw,Col:Nw},Ye=yn.forwardRef(({children:e,padding:t,className:n,style:i,...o},s)=>a.jsxDEV("div",{className:K("island",n),style:{"--padding":t,...i},ref:s,...o,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/island.tsx",lineNumber:16,columnNumber:5},void 0)),vm=e=>e?typeof e=="string"?e:_n(e)&&e.type==="solid"&&e.solid?e.solid.color:null:null,ww=(e,t)=>{Tn.setFillColor(e,null,{getMemorizeKey:Un,callback:(n,i)=>{if(!sn(e,n))return;const o=n.fill,s=vm(o)||Zu(e,n);if(!Zf(s))return;const r=ai(s),l=Oi(t)?r:Fi(r,t);ce.setNode(e,{fill:l},i)}})},yw=(e,t)=>{Tn.setFillColor(e,null,{getMemorizeKey:Un,callback:(n,i)=>{if(!sn(e,n))return;const o=n.fill,s=vm(o)||Zu(e,n),r=typeof s=="string"?Ai(s):void 0;ya(t)?ce.setNode(e,{fill:"none"},i):va(r)||Oi(r)?ce.setNode(e,{fill:t},i):ce.setNode(e,{fill:Fi(t,r)},i)}})},vw=(e,t)=>{Tn.setStrokeColor(e,null,{getMemorizeKey:Un,callback:(n,i)=>{const o=Qu(e,n),s=ai(o),r=Oi(t)?s:Fi(s,t);ce.setNode(e,{strokeColor:r},i)}})},kw=(e,t)=>{Tn.setStrokeColor(e,null,{getMemorizeKey:Un,callback:(n,i)=>{const o=Qu(e,n),s=Ai(o);ya(t)?ce.setNode(e,{strokeColor:"none"},i):va(s)||Oi(s)?ce.setNode(e,{strokeColor:t},i):ce.setNode(e,{strokeColor:Fi(t,s)},i)}})},Ew=(e,t)=>{Tn.setStrokeStyle(e,t,{getMemorizeKey:Un,callback:(n,i)=>{ce.setNode(e,{strokeStyle:t},i)}})},Lc=(e,t)=>{Tn.setStrokeWidth(e,t,{getMemorizeKey:Un,callback:(n,i)=>{ce.setNode(e,{strokeWidth:t},i)}})},jw=(e,t,n)=>{const i=Ai(t);ya(n)?Ln.setTextColor(e,null):va(i)||Oi(i)?Ln.setTextColor(e,n):Ln.setTextColor(e,Fi(n,i))},Dw=(e,t,n)=>{const i=ai(t),o=Oi(n)?i:Fi(i,n);Ln.setTextColor(e,o)},km=(e,t)=>{try{Ln.setFontSize(e,t,16)}catch{const i=vt(e);i&&i.length>0&&i.forEach(o=>{try{o.addMark("font-size",t)}catch(s){console.error("Failed to set font size mark:",s)}})}},Sw=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i),Se.addMark(i,"font-family",t)}catch(o){console.error("Failed to set font family:",o)}})},wr=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i),t?Se.addMark(i,"text-shadow",t):Se.removeMark(i,"text-shadow")}catch(o){console.error("Failed to set text shadow:",o)}})},Oc=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i),t?Se.addMark(i,"text-gradient",t):Se.removeMark(i,"text-gradient")}catch(o){console.error("Failed to set text gradient:",o)}})},Em=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i),Se.addMark(i,"font-weight",String(t))}catch(o){console.error("Failed to set font weight:",o)}})},Cw=(e,t)=>{try{let n;t==="left"?n=_i.left:t==="center"?n=_i.center:n=_i.right,Ln.setTextAlign(e,n)}catch(n){console.error("Failed to set text align:",n)}},_w=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i),Se.addMark(i,"line-height",String(t))}catch(o){console.error("Failed to set line height:",o)}})},Pw=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i);const o=typeof t=="number"?`${t}px`:t;Se.addMark(i,"letter-spacing",o)}catch(o){console.error("Failed to set letter spacing:",o)}})},Vw=e=>{const t=vt(e);t&&t.length>0&&t.forEach(n=>{try{_t(n);const i=Se.marks(n);(i?!!i.bold:!1)?Se.removeMark(n,"bold"):Se.addMark(n,"bold",!0)}catch(i){console.error("Failed to toggle bold:",i)}})},Tw=e=>{const t=vt(e);t&&t.length>0&&t.forEach(n=>{try{_t(n);const i=Se.marks(n);(i?!!i.italic:!1)?Se.removeMark(n,"italic"):Se.addMark(n,"italic",!0)}catch(i){console.error("Failed to toggle italic:",i)}})},Uw=e=>{const t=vt(e);t&&t.length>0&&t.forEach(n=>{try{_t(n);const i=Se.marks(n);(i?!!i.underlined:!1)?Se.removeMark(n,"underlined"):Se.addMark(n,"underlined",!0)}catch(i){console.error("Failed to toggle underline:",i)}})},Iw=e=>{const t=vt(e);t&&t.length>0&&t.forEach(n=>{try{_t(n);const i=Se.marks(n);(i?!!i.strikethrough:!1)?Se.removeMark(n,"strikethrough"):Se.addMark(n,"strikethrough",!0)}catch(i){console.error("Failed to toggle strikethrough:",i)}})},qw=e=>{const t=vt(e);t&&t.length>0&&t.forEach(n=>{try{_t(n);const i=Se.marks(n);(i?!!i.superscript:!1)?Se.removeMark(n,"superscript"):(Se.removeMark(n,"subscript"),Se.addMark(n,"superscript",!0))}catch(i){console.error("Failed to toggle superscript:",i)}})},Aw=e=>{const t=vt(e);t&&t.length>0&&t.forEach(n=>{try{_t(n);const i=Se.marks(n);(i?!!i.subscript:!1)?Se.removeMark(n,"subscript"):(Se.removeMark(n,"superscript"),Se.addMark(n,"subscript",!0))}catch(i){console.error("Failed to toggle subscript:",i)}})},Mw=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i),t?Se.addMark(i,"background-color",t):Se.removeMark(i,"background-color")}catch(o){console.error("Failed to set background color:",o)}})},Rw=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i),t&&t!=="none"?Se.addMark(i,"text-transform",t):Se.removeMark(i,"text-transform")}catch(o){console.error("Failed to set text transform:",o)}})},zw=(e,t,n)=>{const i=vt(e);i&&i.length>0&&i.forEach(o=>{try{_t(o),t&&t>0?(Se.addMark(o,"text-stroke",t),n&&Se.addMark(o,"text-stroke-color",n)):(Se.removeMark(o,"text-stroke"),Se.removeMark(o,"text-stroke-color"))}catch(s){console.error("Failed to set text stroke:",s)}})},Lw=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i),t?Se.addMark(i,"text-decoration-style",t):Se.removeMark(i,"text-decoration-style")}catch(o){console.error("Failed to set text decoration style:",o)}})},Ow=(e,t)=>{const n=vt(e);n&&n.length>0&&n.forEach(i=>{try{_t(i),t?Se.addMark(i,"text-decoration-color",t):Se.removeMark(i,"text-decoration-color")}catch(o){console.error("Failed to set text decoration color:",o)}})},Fw=e=>{const t=vt(e);if(t&&t.length>0){const n=t[0];try{return _t(n),Se.marks(n)||{}}catch(i){return console.error("Failed to get text marks:",i),{}}}return{}},Bw=e=>{const t=vt(e);if(t&&t.length>0){const n=t[0];try{const{selection:i}=n;if(i){const o=Array.from(Se.nodes(n,{at:i,match:s=>{const r=s.type==="paragraph",l="align"in s;return Se.isBlock(n,s)&&(r||l)}}));if(o.length>0){const[s]=o[0],r=s.align;if(r===_i.right||r==="right")return"right";if(r===_i.center||r==="center")return"center";if(r===_i.left||r==="left")return"left"}}}catch(i){console.error("Failed to get text align:",i)}}return"left"},Hw=(e,t)=>{Tn.setFillColor(e,null,{getMemorizeKey:Un,callback:(n,i)=>{if(!sn(e,n))return;const o=Ju(t),s={type:"gradient",gradient:t,fallbackColor:o};ce.setNode(e,{fill:o,fillConfig:s},i)}})},Fc=(e,t)=>{Tn.setFillColor(e,null,{getMemorizeKey:Un,callback:(n,i)=>{if(!sn(e,n))return;const o="#FFFFFF",s={type:"image",image:t,fallbackColor:o};ce.setNode(e,{fill:o,fillConfig:s},i)}})},Ww=(e,t)=>{Tn.setFillColor(e,null,{getMemorizeKey:Un,callback:(n,i)=>{if(!sn(e,n))return;const o=n.fillConfig,s=n.fill;if((o==null?void 0:o.type)!==t)switch(t){case"solid":{let r="#FFFFFF";typeof s=="string"&&s!=="none"?r=s:o!=null&&o.solid&&(r=o.solid.color),ce.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"}]},l=(o==null?void 0:o.gradient)||r,u=Ju(l),c={type:"gradient",gradient:l,fallbackColor:u};ce.setNode(e,{fill:u,fillConfig:c},i);break}case"image":{const r={imageUrl:"",mode:"stretch",scale:1,offsetX:0,offsetY:0,rotation:0},l="#FFFFFF",u={type:"image",image:(o==null?void 0:o.image)||r,fallbackColor:l};ce.setNode(e,{fill:l,fillConfig:u},i);break}default:return}}})},$w=(e,t)=>{const n=Oe(e);for(const i of n)if(Ct(i)){const o=e.children.findIndex(s=>s.id===i.id);o!==-1&&ce.setNode(e,{fillColor:t},[o])}},Gw=({board:e,currentColor:t,fontColorIcon:n,title:i})=>{const[o,s]=m.useState(!1),r=z.getBoardContainer(e),l=m.useCallback(c=>{jw(e,t||c,c)},[e,t]),u=m.useCallback(c=>{t&&Dw(e,t,c)},[e,t]);return a.jsxDEV(it,{sideOffset:12,open:o,onOpenChange:c=>{s(c)},placement:"top",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:K("property-button"),selected:o,visible:!0,icon:n,type:"button",tooltip:i,"aria-label":i,onPointerUp:()=>{s(!o)}},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),a.jsxDEV(st,{container:r,children:a.jsxDEV(Ye,{padding:4,className:K(`${Pt}`),children:a.jsxDEV(li,{value:t,onChange:l,onOpacityChange:u},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)},ia=[{key:"title",labelZh:"标题",labelEn:"Title",previewSize:26,...vn.title},{key:"subtitle",labelZh:"副标题",labelEn:"Subtitle",previewSize:22,...vn.subtitle},{key:"h1",labelZh:"标题 1",labelEn:"Heading 1",previewSize:20,...vn.h1,divider:!0},{key:"h2",labelZh:"标题 2",labelEn:"Heading 2",previewSize:18,...vn.h2},{key:"h3",labelZh:"标题 3",labelEn:"Heading 3",previewSize:16,...vn.h3},{key:"h4",labelZh:"标题 4",labelEn:"Heading 4",previewSize:15,...vn.h4},{key:"body",labelZh:"正文",labelEn:"Body",previewSize:14,...vn.body,divider:!0},{key:"caption",labelZh:"注释",labelEn:"Caption",previewSize:13,...vn.caption},{key:"footnote",labelZh:"脚注",labelEn:"Footnote",previewSize:12,...vn.footnote}],Yw=e=>{if(!e)return null;const t=parseInt(e,10);if(isNaN(t))return null;for(const n of ia)if(n.fontSize===t)return n.key;return null},Xw=({board:e,currentFontSize:t,title:n})=>{const[i,o]=m.useState(!1),{language:s}=_e(),r=z.getBoardContainer(e),l=Yw(t),u=m.useCallback(d=>{km(e,String(d.fontSize)),Em(e,d.fontWeight),Ln.setTextColor(e,d.color),o(!1)},[e]),c=(()=>{if(l){const d=ia.find(p=>p.key===l);if(d)return s==="zh"?d.labelZh:d.labelEn}return t||"16"})();return a.jsxDEV(it,{sideOffset:12,open:i,onOpenChange:o,placement:"bottom",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:K("property-button"),selected:i,visible:!0,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>o(!i),children:a.jsxDEV("div",{style:{fontSize:"12px",fontWeight:"bold",minWidth:"20px"},children:c},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),a.jsxDEV(st,{container:r,children:a.jsxDEV(Ye,{padding:4,className:K(`${Pt}`),children:a.jsxDEV(ct.Col,{gap:0,style:{minWidth:"200px"},children:[a.jsxDEV("div",{style:{fontSize:"12px",color:"#666",marginBottom:"2px",padding:"4px 10px 0"},children:s==="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),a.jsxDEV("div",{style:{maxHeight:"320px",overflowY:"auto"},children:ia.map(d=>{const p=l===d.key;return a.jsxDEV(yn.Fragment,{children:[d.divider&&a.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),a.jsxDEV("div",{onClick:()=>u(d),style:{padding:"6px 10px",cursor:"pointer",backgroundColor:p?"#f0f7ff":"transparent",borderLeft:p?"3px solid #0052d9":"3px solid transparent",borderRadius:"2px",transition:"background-color 0.15s",display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"8px"},onMouseEnter:f=>{p||(f.currentTarget.style.backgroundColor="#f5f5f5")},onMouseLeave:f=>{p||(f.currentTarget.style.backgroundColor="transparent")},children:[a.jsxDEV("span",{style:{fontSize:`${d.previewSize}px`,fontWeight:d.fontWeight,color:d.color,lineHeight:1.4},children:s==="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),a.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)},Kw=({board:e,currentColor:t,title:n,hasStrokeStyle:i,hasStrokeWidth:o,currentStrokeWidth:s,children:r})=>{const[l,u]=m.useState(!1),[c,d]=m.useState(String(s||2)),p=t&&ai(t),f=t?Ai(t):100,h=z.getBoardContainer(e);yn.useEffect(()=>{d(String(s||2))},[s]);const x=id(f)?Jf:od(p)?Qf:void 0,b=x?a.jsxDEV(x,{},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,g=E=>{Ew(e,E)},w=m.useCallback(E=>{kw(e,E)},[e]),N=m.useCallback(E=>{vw(e,E)},[e]),y=m.useCallback(E=>{Lc(e,E),d(String(E))},[e]),D=m.useCallback(E=>{d(E.target.value)},[]),j=m.useCallback(()=>{const E=parseInt(c,10);!isNaN(E)&&E>=1&&E<=100?Lc(e,E):d(String(s||2))},[e,c,s]),k=m.useCallback(E=>{E.key==="Enter"?(j(),E.target.blur()):E.key==="Escape"&&(d(String(s||2)),E.target.blur())},[j,s]);return a.jsxDEV(it,{sideOffset:12,crossAxisOffset:40,open:l,onOpenChange:E=>{u(E)},placement:"left",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:K("property-button"),visible:!0,icon:b,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>{u(!l)},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),a.jsxDEV(st,{container:h,children:a.jsxDEV(Ye,{padding:4,className:K(`${Pt}`,"stroke-setting",{"has-stroke-style":i}),children:a.jsxDEV(ct.Col,{children:[o&&a.jsxDEV("div",{className:"stroke-width-section",style:{marginBottom:"8px"},children:a.jsxDEV(ct.Row,{gap:2,align:"center",children:[a.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),a.jsxDEV("div",{style:{flex:1,minWidth:"100px"},children:a.jsxDEV(Ls,{value:s||2,min:1,max:100,step:1,onChange:E=>y(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),a.jsxDEV("div",{className:"stroke-width-input-wrapper",children:[a.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:c,onChange:D,onBlur:j,onKeyDown:k,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),a.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&&a.jsxDEV("div",{className:"stroke-style-section",children:[a.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),a.jsxDEV(ct.Row,{className:K("stroke-style-picker"),children:[a.jsxDEV(ie,{visible:!0,icon:a.jsxDEV(ed,{},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:()=>g(On.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),a.jsxDEV(ie,{visible:!0,icon:a.jsxDEV(td,{},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:()=>g(On.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),a.jsxDEV(ie,{visible:!0,icon:a.jsxDEV(nd,{},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:()=>g(On.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),a.jsxDEV(li,{value:t,onChange:w,onOpacityChange:N},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)},Zw="drawnix-color-history",Bc=24,Hc=12,Wc=ss.createInstance({name:"drawnix",storeName:Zw});let Ie=null;function oa(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 Jw(e,t){return oa(e)===oa(t)}class Qw{constructor(){this.initialized=!1}async initialize(){if(!this.initialized)try{Ie=await Wc.getItem("history")||{colors:[],gradients:[]},this.initialized=!0}catch(t){console.error("[ColorHistoryService] Failed to initialize:",t),Ie={colors:[],gradients:[]},this.initialized=!0}}async saveData(){if(Ie)try{await Wc.setItem("history",Ie)}catch(t){console.error("[ColorHistoryService] Failed to save data:",t)}}async addColor(t){if(await this.initialize(),!Ie)return;const n=t.toUpperCase(),i=Ie.colors.findIndex(o=>o.color.toUpperCase()===n);if(i>=0){Ie.colors[i].lastUsedAt=Date.now(),Ie.colors[i].useCount+=1;const[o]=Ie.colors.splice(i,1);Ie.colors.unshift(o)}else Ie.colors.unshift({color:n,lastUsedAt:Date.now(),useCount:1}),Ie.colors.length>Bc&&(Ie.colors=Ie.colors.slice(0,Bc));await this.saveData()}async addGradient(t){if(await this.initialize(),!Ie)return;const n=oa(t),i=Ie.gradients.findIndex(o=>Jw(o.config,t));if(i>=0){Ie.gradients[i].lastUsedAt=Date.now(),Ie.gradients[i].useCount+=1;const[o]=Ie.gradients.splice(i,1);Ie.gradients.unshift(o)}else Ie.gradients.unshift({id:n,config:{...t},lastUsedAt:Date.now(),useCount:1}),Ie.gradients.length>Hc&&(Ie.gradients=Ie.gradients.slice(0,Hc));await this.saveData()}async getColors(){return await this.initialize(),(Ie==null?void 0:Ie.colors)||[]}async getGradients(){return await this.initialize(),(Ie==null?void 0:Ie.gradients)||[]}async removeColor(t){if(await this.initialize(),!Ie)return;const n=t.toUpperCase();Ie.colors=Ie.colors.filter(i=>i.color.toUpperCase()!==n),await this.saveData()}async removeGradient(t){await this.initialize(),Ie&&(Ie.gradients=Ie.gradients.filter(n=>n.id!==t),await this.saveData())}async clearAll(){Ie={colors:[],gradients:[]},await this.saveData()}resetCache(){Ie=null,this.initialized=!1}}const un=new Qw;function ey(){const[e,t]=m.useState([]),[n,i]=m.useState([]),[o,s]=m.useState(!0),r=m.useCallback(async()=>{try{const[p,f]=await Promise.all([un.getColors(),un.getGradients()]);t(p),i(f)}catch(p){console.error("[useColorHistory] Failed to load data:",p)}finally{s(!1)}},[]);m.useEffect(()=>{r()},[r]);const l=m.useCallback(async p=>{await un.addColor(p);const f=await un.getColors();t(f)},[]),u=m.useCallback(async p=>{await un.addGradient(p);const f=await un.getGradients();i(f)},[]),c=m.useCallback(async p=>{await un.removeColor(p);const f=await un.getColors();t(f)},[]),d=m.useCallback(async p=>{await un.removeGradient(p);const f=await un.getGradients();i(f)},[]);return{colors:e,gradients:n,isLoading:o,addColor:l,addGradient:u,removeColor:c,removeGradient:d,refresh:r}}function ni(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 ty(e){const t=e.match(/linear-gradient\((\d+)deg,\s*(.+)\)/);if(t){const i=parseInt(t[1],10),o=t[2],s=$c(o);return{type:"linear",angle:i,stops:s.length>=2?s:[{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,o=n[2]?parseInt(n[2],10)/100:.5,s=n[3],r=$c(s);return{type:"radial",centerX:i,centerY:o,stops:r.length>=2?r:[{color:"#FF6B6B",offset:0},{color:"#4ECDC4",offset:1}]}}return Os}function $c(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 Gc=[{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}],jm=({value:e,onChange:t,showPresets:n=!0,showHistory:i=!0,presetCategories:o,customPresets:s,compact:r=!1,inline:l=!1,onSavePreset:u,onDeletePreset:c})=>{const{language:d}=_e(),{addGradient:p}=ey(),[f,h]=m.useState(e||Os),[x,b]=m.useState(0),[g,w]=m.useState(null),[N,y]=m.useState(!1),D=m.useRef(null);m.useEffect(()=>{e&&h(e)},[e]);const j=m.useCallback(Y=>{h(Y),t==null||t(Y),p(Y)},[t,p]),k=m.useCallback(Y=>{j(Y.config)},[j]),E=m.useCallback(Y=>{const ae={...f,...Y};j(ae)},[f,j]),I=m.useCallback(Y=>{if(f.type!==Y)if(Y==="linear"){const ae={type:"linear",angle:90,stops:f.stops};j(ae)}else{const ae={type:"radial",centerX:.5,centerY:.5,stops:f.stops};j(ae)}},[f,j]),q=m.useCallback((Y,ae)=>{const ne=[...f.stops];ne[Y]={...ne[Y],...ae},ne.sort((ye,ze)=>ye.offset-ze.offset);const ge=ne.findIndex(ye=>ye.color===(ae.color??f.stops[Y].color));ge!==-1&&ge!==x&&b(ge),E({stops:ne})},[f.stops,x,E]),W=m.useCallback(()=>{if(f.stops.length>=8)return;const Y=.5,ne=[...f.stops,{color:"#888888",offset:Y}].sort((ge,ye)=>ge.offset-ye.offset);E({stops:ne}),b(ne.findIndex(ge=>ge.offset===Y))},[f.stops,E]),U=m.useCallback(Y=>{if(f.stops.length<=2)return;const ae=f.stops.filter((ne,ge)=>ge!==Y);E({stops:ae}),b(Math.min(x,ae.length-1))},[f.stops,x,E]),M=m.useCallback((Y,ae)=>{if(!D.current)return;const ne=D.current.getBoundingClientRect(),ye=Math.max(0,Math.min(Y.clientX-ne.left,ne.width))/ne.width;q(ae,{offset:ye})},[q]),T=m.useCallback((Y,ae)=>{Y.preventDefault(),Y.stopPropagation(),b(ae);const ne=Y.clientX,ge=Y.clientY;let ye=!1;const ze=3,R=Ae=>{const Fe=Math.abs(Ae.clientX-ne),X=Math.abs(Ae.clientY-ge);(Fe>ze||X>ze)&&(ye=!0,y(!0),M(Ae,ae))},fe=()=>{document.removeEventListener("mousemove",R),document.removeEventListener("mouseup",fe),ye||w(ae),setTimeout(()=>{y(!1)},0)};document.addEventListener("mousemove",R),document.addEventListener("mouseup",fe)},[M]),_=m.useCallback(Y=>{if(N||f.stops.length>=8||Y.target!==D.current||!D.current)return;const ne=D.current.getBoundingClientRect(),ge=Y.clientX-ne.left,ye=Math.max(0,Math.min(ge/ne.width,1)),ze=[...f.stops].sort((X,v)=>X.offset-v.offset);let R=ze[0];for(let X=0;X<ze.length-1;X++)if(ze[X].offset<=ye&&ze[X+1].offset>=ye){R=ze[X];break}const fe=R.color,Ae=[...f.stops,{color:fe,offset:ye}].sort((X,v)=>X.offset-v.offset);E({stops:Ae});const Fe=Ae.findIndex(X=>X.offset===ye);b(Fe)},[N,f.stops,E]);m.useMemo(()=>ni(f),[f]),m.useMemo(()=>{const Y=[{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 o?Y.filter(ae=>o.includes(ae.key)):Y},[d,o]);const P=m.useMemo(()=>s?s.length>0&&typeof s[0]=="string"?s.map((Y,ae)=>({id:`custom-${ae}`,name:`Custom ${ae+1}`,nameZh:`自定义 ${ae+1}`,category:"custom",config:ty(Y),css:Y})):s:Ul,[s]),A=m.useCallback(()=>{var ne;if(f.type!=="radial")return null;const{centerX:Y,centerY:ae}=f;return(ne=Gc.find(ge=>Math.abs(ge.x-Y)<.01&&Math.abs(ge.y-ae)<.01))==null?void 0:ne.key},[f]),Q=m.useMemo(()=>s&&s.length>0&&typeof s[0]=="string",[s]),Ee=m.useMemo(()=>ni(f),[f]),V=m.useCallback(Y=>Ee===Y,[Ee]),$=()=>{const Y=Ul.slice(0,10),ae=Q?P:[];return a.jsxDEV("div",{className:"ge-quick-presets",children:[a.jsxDEV("div",{className:"ge-quick-presets-header",children:a.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),a.jsxDEV("div",{className:"ge-quick-presets-grid",children:[ae.map((ne,ge)=>{const ye=ne.css||ni(ne.config);return a.jsxDEV("button",{className:K("ge-quick-preset-item ge-quick-preset-item--custom",{"ge-quick-preset-item--selected":V(ye)}),onClick:()=>k(ne),title:d==="zh"?ne.nameZh:ne.name,children:[a.jsxDEV("div",{className:"ge-quick-preset-preview",style:{background:ye}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:453,columnNumber:17},void 0),c&&a.jsxDEV("button",{className:"ge-quick-preset-delete",onClick:ze=>{ze.stopPropagation(),c(ge)},children:"×"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:458,columnNumber:19},void 0)]},ne.id,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:445,columnNumber:15},void 0)}),Y.map(ne=>{const ge=ni(ne.config);return a.jsxDEV("button",{className:K("ge-quick-preset-item",{"ge-quick-preset-item--selected":V(ge)}),onClick:()=>k(ne),title:d==="zh"?ne.nameZh:ne.name,children:a.jsxDEV("div",{className:"ge-quick-preset-preview",style:{background:ge}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:483,columnNumber:17},void 0)},ne.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=()=>a.jsxDEV("div",{className:K("ge-custom-editor",{"ge-custom-editor--inline":l}),children:[a.jsxDEV("div",{className:"ge-type-section",children:a.jsxDEV("div",{className:"ge-type-buttons",children:[a.jsxDEV("button",{className:K("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),a.jsxDEV("button",{className:K("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),a.jsxDEV("div",{className:"ge-color-section",children:[a.jsxDEV("div",{className:"ge-section-header",children:[a.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),a.jsxDEV("div",{className:"ge-stop-actions",children:[a.jsxDEV("button",{className:"ge-action-btn",onClick:W,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),a.jsxDEV("button",{className:"ge-action-btn",onClick:()=>U(x),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),a.jsxDEV("div",{className:"ge-gradient-bar-wrapper",children:a.jsxDEV("div",{ref:D,className:"ge-gradient-bar",style:{background:`linear-gradient(90deg, ${f.stops.map(Y=>`${Y.color} ${Math.round(Y.offset*100)}%`).join(", ")})`},onClick:_,children:f.stops.map((Y,ae)=>a.jsxDEV(it,{open:g===ae,onOpenChange:ne=>w(ne?ae:null),children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("button",{className:K("ge-stop-handle",{selected:x===ae}),style:{left:`${Y.offset*100}%`,backgroundColor:Y.color},onMouseDown:ne=>{T(ne,ae)}},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),a.jsxDEV(st,{children:a.jsxDEV(Ye,{padding:4,className:"ge-color-picker-popover "+Pt,children:a.jsxDEV(li,{value:Y.color,onChange:ne=>q(ae,{color:ne}),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)]},ae,!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"&&a.jsxDEV("div",{className:"ge-origin-section",children:[a.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),a.jsxDEV("div",{className:"ge-origin-buttons",children:Gc.map(Y=>a.jsxDEV("button",{className:K("ge-origin-btn",{active:A()===Y.key}),onClick:()=>E({centerX:Y.x,centerY:Y.y}),children:d==="zh"?Y.labelZh:Y.labelEn},Y.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"&&a.jsxDEV("div",{className:"ge-angle-section",children:[a.jsxDEV("div",{className:"ge-section-header",children:[a.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),a.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),a.jsxDEV("input",{type:"range",min:0,max:360,value:f.angle,onChange:Y=>E({angle:Number(Y.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),u&&a.jsxDEV("div",{className:"ge-save-section",children:a.jsxDEV("button",{className:"ge-save-btn",onClick:u,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),$()]},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||l?a.jsxDEV("div",{className:K("gradient-editor",{"gradient-editor--compact":r,"gradient-editor--inline":l}),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):a.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)},yr=St.CUSTOM_GRADIENTS,ny=({value:e,onChange:t,inline:n=!1})=>{const{language:i}=_e(),{confirm:o,confirmDialog:s}=Fs(),[r,l]=m.useState([]),[u,c]=m.useState(e||Os);m.useEffect(()=>{let h=!0;return bn.get(yr).then(x=>{h&&x&&l(x)}).catch(x=>{console.warn("Failed to load gradient data:",x)}),()=>{h=!1}},[]),m.useEffect(()=>{e&&c(e)},[e]);const d=m.useCallback(h=>{c(h),t==null||t(h)},[t]),p=m.useCallback(()=>{const h=ni(u),b=[{id:`custom-${Date.now()}`,css:h},...r].slice(0,8);l(b),bn.set(yr,b).catch(g=>{console.warn("Failed to save custom gradients:",g)})},[u,r]),f=m.useCallback(async h=>{const x=r[h];if(!x||!await o({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 g=r.filter(w=>w.id!==x.id);l(g),bn.set(yr,g).catch(w=>{console.warn("Failed to save custom gradients:",w)})},[o,r,i]);return a.jsxDEV(a.Fragment,{children:[a.jsxDEV(jm,{value:u,onChange:d,showPresets:!0,showHistory:!0,inline:n,customPresets:r.map(h=>h.css),onSavePreset:p,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),s]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/GradientFillPanel.tsx",lineNumber:109,columnNumber:5},void 0)},iy=m.lazy(()=>qe(()=>import("./tool-windows-BEnZdJqF.js").then(e=>e.px),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),oy=[{value:"stretch",labelZh:"拉伸",labelEn:"Stretch",icon:"⬌"},{value:"tile",labelZh:"平铺",labelEn:"Tile",icon:"⊞"},{value:"fit",labelZh:"适应",labelEn:"Fit",icon:"⊡"}],sy=({value:e,onChange:t,onOpenMediaLibrary:n,externalMediaLibraryControl:i=!1})=>{const{language:o}=_e(),[s,r]=m.useState(e||sd),[l,u]=m.useState(!1),[c,d]=m.useState(!1),p=m.useRef(null);m.useEffect(()=>{e&&r(e)},[e]);const f=m.useCallback(j=>{const k={...s,...j};r(k),t==null||t(k)},[s,t]),h=m.useMemo(()=>eh(j=>{t==null||t(j)},300),[t]),x=m.useCallback(j=>{const k={...s,...j};r(k),h(k)},[s,h]),b=m.useCallback((j,k,E,I,q=1)=>{const W=parseFloat(k);if(isNaN(W))return;const U=Math.max(E,Math.min(I,W)),M=q===1?U:U/q;f({[j]:M})},[f]),g=m.useCallback(j=>{f({imageUrl:j.url}),u(!1)},[f]),w=m.useCallback(async j=>{var q;const k=(q=j.target.files)==null?void 0:q[0];if(!k)return;if(!k.type.startsWith("image/")){se.warning(o==="zh"?"请选择图片文件":"Please select an image file");return}if(k.size>25*1024*1024){se.warning(o==="zh"?"图片大小不能超过 25MB":"Image size cannot exceed 25MB");return}let E=k;if(k.size>10*1024*1024){const W=th(k.size/1048576),U=se.loading({content:o==="zh"?`正在压缩图片 (${(k.size/1024/1024).toFixed(1)}MB)...`:`Compressing image (${(k.size/1024/1024).toFixed(1)}MB)...`,duration:0,placement:"top"});try{E=await nh(k,W.targetSizeMB),se.close(U),se.success({content:o==="zh"?`压缩完成: ${(k.size/1024/1024).toFixed(1)}MB → ${(E.size/1024/1024).toFixed(1)}MB`:`Compressed: ${(k.size/1024/1024).toFixed(1)}MB → ${(E.size/1024/1024).toFixed(1)}MB`,duration:2})}catch(M){se.close(U),console.error("[ImageFillPanel] Compression failed:",M),se.warning(o==="zh"?"图片压缩失败":"Image compression failed");return}}const I=new FileReader;I.onload=W=>{var M;const U=(M=W.target)==null?void 0:M.result;f({imageUrl:U})},I.readAsDataURL(E),j.target.value=""},[o,f]),N=m.useCallback(()=>{var j;(j=p.current)==null||j.click()},[]),y=m.useCallback(()=>{i&&n?n():u(!0)},[i,n]),D=()=>s.imageUrl?a.jsxDEV("div",{className:"ifp-image-preview",children:[a.jsxDEV("img",{src:s.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),a.jsxDEV("button",{className:"ifp-image-remove",onClick:()=>f({imageUrl:""}),title:o==="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):a.jsxDEV("div",{className:"ifp-image-placeholder",children:[a.jsxDEV(ad,{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),a.jsxDEV("span",{className:"ifp-placeholder-text",children:o==="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 a.jsxDEV("div",{className:"image-fill-panel",children:[a.jsxDEV("input",{ref:p,type:"file",accept:"image/*",style:{display:"none"},onChange:w},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:240,columnNumber:7},void 0),a.jsxDEV("div",{className:"ifp-image-section",children:[a.jsxDEV("div",{className:"ifp-image-container",onClick:()=>!s.imageUrl&&y(),children:D()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:250,columnNumber:9},void 0),a.jsxDEV("div",{className:"ifp-image-actions",children:[a.jsxDEV("button",{className:"ifp-action-btn ifp-action-btn--primary",onClick:y,children:[a.jsxDEV(Bs,{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),a.jsxDEV("span",{children:o==="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),a.jsxDEV("button",{className:"ifp-action-btn",onClick:N,children:[a.jsxDEV(Hs,{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),a.jsxDEV("span",{children:o==="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),s.imageUrl&&a.jsxDEV(a.Fragment,{children:[a.jsxDEV("div",{className:"ifp-control-section",children:[a.jsxDEV("div",{className:"ifp-section-title",children:o==="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),a.jsxDEV("div",{className:"ifp-mode-buttons",children:oy.map(j=>a.jsxDEV("button",{className:K("ifp-mode-btn",{active:s.mode===j.value}),onClick:()=>f({mode:j.value}),title:o==="zh"?j.labelZh:j.labelEn,children:[a.jsxDEV("span",{className:"ifp-mode-icon",children:j.icon},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:282,columnNumber:19},void 0),a.jsxDEV("span",{className:"ifp-mode-label",children:o==="zh"?j.labelZh:j.labelEn},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:283,columnNumber:19},void 0)]},j.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),a.jsxDEV("div",{className:"ifp-advanced-section",children:[a.jsxDEV("button",{className:"ifp-advanced-toggle",onClick:()=>d(!c),children:[a.jsxDEV("span",{children:o==="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),c?a.jsxDEV(rd,{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):a.jsxDEV(ka,{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),c&&a.jsxDEV("div",{className:"ifp-advanced-content",children:[a.jsxDEV("div",{className:"ifp-control-row",children:[a.jsxDEV("label",{className:"ifp-control-label",children:o==="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),a.jsxDEV("div",{className:"ifp-control-input",children:[a.jsxDEV("input",{type:"range",min:50,max:200,value:(s.scale??1)*100,onChange:j=>x({scale:Number(j.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),a.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[a.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((s.scale??1)*100),min:50,max:200,onChange:j=>b("scale",j.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),a.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),a.jsxDEV("div",{className:"ifp-control-row",children:[a.jsxDEV("label",{className:"ifp-control-label",children:o==="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),a.jsxDEV("div",{className:"ifp-control-input",children:[a.jsxDEV("input",{type:"range",min:-100,max:100,value:(s.offsetX??0)*100,onChange:j=>x({offsetX:Number(j.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),a.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[a.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((s.offsetX??0)*100),min:-100,max:100,onChange:j=>b("offsetX",j.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),a.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),a.jsxDEV("div",{className:"ifp-control-row",children:[a.jsxDEV("label",{className:"ifp-control-label",children:o==="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),a.jsxDEV("div",{className:"ifp-control-input",children:[a.jsxDEV("input",{type:"range",min:-100,max:100,value:(s.offsetY??0)*100,onChange:j=>x({offsetY:Number(j.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),a.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[a.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((s.offsetY??0)*100),min:-100,max:100,onChange:j=>b("offsetY",j.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),a.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),a.jsxDEV("div",{className:"ifp-control-row",children:[a.jsxDEV("label",{className:"ifp-control-label",children:o==="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),a.jsxDEV("div",{className:"ifp-control-input",children:[a.jsxDEV("input",{type:"range",min:0,max:360,value:s.rotation??0,onChange:j=>x({rotation:Number(j.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),a.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[a.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:s.rotation??0,min:0,max:360,onChange:j=>b("rotation",j.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),a.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),a.jsxDEV("button",{className:"ifp-reset-btn",onClick:()=>f({scale:1,offsetX:0,offsetY:0,rotation:0}),children:o==="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&&l&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(iy,{isOpen:l,onClose:()=>u(!1),mode:Bn.SELECT,filterType:Cn.IMAGE,onSelect:g,selectButtonText:o==="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)},ry=[{value:"solid",labelZh:"纯色",labelEn:"Solid"},{value:"gradient",labelZh:"渐变",labelEn:"Gradient"},{value:"image",labelZh:"图片",labelEn:"Image"}],ay=({value:e,onSolidChange:t,onOpacityChange:n,onGradientChange:i,onImageChange:o,onFillTypeChange:s,showClose:r=!1,onClose:l,onOpenMediaLibrary:u})=>{const{language:c}=_e(),d=m.useMemo(()=>e?vo(e)?ih(e):_n(e)?e:{type:"solid",solid:{color:"#FFFFFF"}}:{type:"solid",solid:{color:"#FFFFFF"}},[e]),[p,f]=m.useState(d.type);m.useEffect(()=>{f(d.type)},[d.type]);const[h,x]=m.useState(d.gradient||Os),[b,g]=m.useState(d.image||sd);m.useEffect(()=>{d.gradient&&x(d.gradient)},[d.gradient]),m.useEffect(()=>{d.image&&g(d.image)},[d.image]);const w=m.useCallback(k=>{f(k)},[]),N=m.useCallback(k=>{s==null||s("solid"),t==null||t(k)},[t,s]),y=m.useCallback(k=>{x(k),s==null||s("gradient"),i==null||i(k)},[i,s]),D=m.useCallback(k=>{g(k),s==null||s("image"),o==null||o(k)},[o,s]),j=m.useMemo(()=>vo(e)?e:_n(e)&&e.solid?e.solid.color:"#FFFFFF",[e]);return a.jsxDEV("div",{className:"fill-panel",children:[a.jsxDEV("div",{className:"fill-panel__header",children:[a.jsxDEV("span",{className:"fill-panel__title",children:c==="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&&a.jsxDEV("button",{className:"fill-panel__close",onClick:l,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),a.jsxDEV("div",{className:"fill-panel__tabs",children:ry.map(k=>a.jsxDEV("button",{className:K("fill-panel__tab",{active:p===k.value}),onClick:()=>w(k.value),children:c==="zh"?k.labelZh:k.labelEn},k.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),a.jsxDEV("div",{className:"fill-panel__content",children:[p==="solid"&&a.jsxDEV("div",{className:"fill-panel__solid",children:a.jsxDEV(li,{value:j,onChange:N,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),p==="gradient"&&a.jsxDEV(ny,{value:h,onChange:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:196,columnNumber:11},void 0),p==="image"&&a.jsxDEV(sy,{value:b,onChange:D,onOpenMediaLibrary:u,externalMediaLibraryControl:!!u},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)},ly=m.lazy(()=>qe(()=>import("./index-Btk31p7r.js"),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),cy=({board:e,currentColor:t,title:n,children:i})=>{const{language:o}=_e(),[s,r]=m.useState(!1),[l,u]=m.useState(!1),{hexColor:c,opacity:d}=m.useMemo(()=>{var D;if(!t)return{hexColor:void 0,opacity:100};if(vo(t)){const j=ai(t),k=Ai(t);return{hexColor:j,opacity:k}}if(_n(t))switch(t.type){case"solid":if(t.solid){const j=ai(t.solid.color),k=Ai(t.solid.color);return{hexColor:j,opacity:k}}break;case"gradient":if((D=t.gradient)!=null&&D.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]),p=!c||id(d)?a.jsxDEV(oh,{},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=m.useCallback(D=>{yw(e,D),$w(e,D)},[e]),h=m.useCallback(D=>{ww(e,D)},[e]),x=m.useCallback(D=>{Hw(e,D)},[e]),b=m.useCallback(D=>{Fc(e,D)},[e]),g=m.useCallback(D=>{Ww(e,D)},[e]),w=m.useCallback(()=>{r(!1)},[]),N=m.useCallback(()=>{u(!0)},[]),y=m.useCallback(D=>{Fc(e,{imageUrl:D.url,mode:"stretch",scale:1,offsetX:0,offsetY:0,rotation:0}),u(!1)},[e]);return a.jsxDEV(it,{sideOffset:12,crossAxisOffset:40,open:s,onOpenChange:D=>{!D&&l||r(D)},placement:"left",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:K("property-button"),visible:!0,icon:p,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>{r(!s)},children:!p&&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),a.jsxDEV(st,{children:a.jsxDEV(Ye,{padding:0,className:K(`${Pt}`,"fill-setting"),children:a.jsxDEV(ay,{value:t,onSolidChange:f,onOpacityChange:h,onGradientChange:x,onImageChange:b,onFillTypeChange:g,showClose:!0,onClose:w,onOpenMediaLibrary:N},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),l&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(ly,{isOpen:l,onClose:()=>u(!1),mode:Bn.SELECT,filterType:Cn.IMAGE,onSelect:y,selectButtonText:o==="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)},uy=({board:e,currentRadius:t,title:n,selectionRect:i})=>{const[o,s]=m.useState(!1),[r,l]=m.useState({top:0,left:0}),[u,c]=m.useState(""),d=m.useRef(null),p=m.useRef(null),f=z.getBoardContainer(e),{t:h}=_e(),x=n||h("toolbar.cornerRadius")||"圆角",b=t??0;m.useEffect(()=>{c(String(b))},[b]),m.useEffect(()=>{if(o&&d.current){const k=d.current.getBoundingClientRect(),E=220,I=8;let q=k.left+k.width/2-E/2,W=k.bottom+I;const U=window.innerWidth,M=window.innerHeight;q+E>U-16&&(q=U-E-16),q<16&&(q=16),W+40>M-16&&(W=k.top-40-I),l({left:q,top:W})}},[o]),m.useEffect(()=>{if(!o)return;const k=I=>{const q=I.target;p.current&&p.current.contains(q)||d.current&&d.current.contains(q)||q.closest(".popup-toolbar")!==null||s(!1)},E=setTimeout(()=>{document.addEventListener("mousedown",k)},100);return()=>{clearTimeout(E),document.removeEventListener("mousedown",k)}},[o]);const g=m.useCallback(k=>{const E=Math.max(0,Math.min(100,k));Oe(e).filter(q=>Ze.isPenPath(q)).forEach(q=>{const W=e.children.findIndex(U=>U.id===q.id);W>=0&&ce.setNode(e,{cornerRadius:E},[W])})},[e]),w=m.useCallback(k=>{c(String(k)),g(k)},[g]),N=m.useCallback(k=>{c(k.target.value)},[]),y=m.useCallback(()=>{const k=parseInt(u,10);if(isNaN(k))c(String(b));else{const E=Math.max(0,Math.min(100,k));c(String(E)),g(E)}},[u,b,g]),D=m.useCallback(k=>{k.key==="Enter"&&k.target.blur()},[]),j=m.useCallback(()=>{s(!o)},[o]);return a.jsxDEV(a.Fragment,{children:[a.jsxDEV(ie,{ref:d,className:K("property-button","corner-radius-button",{"is-active":o}),visible:!0,type:"button",tooltip:x,"aria-label":x,onPointerUp:j,children:a.jsxDEV("svg",{viewBox:"0 0 24 24",width:"18",height:"18",children:a.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),o&&f&&Ws.createPortal(a.jsxDEV("div",{ref:p,className:K(Pt,"corner-radius-panel"),style:{position:"fixed",top:r.top,left:r.left,zIndex:5e3},onPointerDown:k=>k.stopPropagation(),onMouseDown:k=>k.stopPropagation(),children:a.jsxDEV(Ye,{padding:2,className:"corner-radius-setting-compact",children:a.jsxDEV("div",{className:"corner-radius-row",children:[a.jsxDEV("span",{className:"corner-radius-label",children:x},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),a.jsxDEV("div",{className:"corner-radius-slider",children:a.jsxDEV(Ls,{value:b,min:0,max:100,step:1,onChange:k=>w(k),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),a.jsxDEV("input",{type:"text",className:"corner-radius-input",value:u,onChange:N,onBlur:y,onKeyDown:D},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),a.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)},dy=(e,t)=>{try{return It(e,[t],!1)}catch{return null}},Yc=(e,t,n,i,o,s)=>{const r=e.children.findIndex(x=>x.id===t.id);if(r<0)return;const l=dy(e,t);if(!l)return;const u=(l.x-n.x)/n.width,c=(l.y-n.y)/n.height,d=i.x+u*i.width,p=i.y+c*i.height,f=l.width*o,h=l.height*s;if(Ht(t)){const x=[[d,p],[d+f,p+h]];ce.setNode(e,{points:x},[r])}else if(B.isDrawElement(t)){const x=[[d,p],[d+f,p+h]];ce.setNode(e,{points:x},[r])}else if(Kt.isMindElement(e,t)){const x=[[d,p],[d+f,p+h]];ce.setNode(e,{points:x},[r])}else if(Ge.isFreehand(t)){const b=t.points.map(g=>{const w=(g[0]-n.x)/n.width,N=(g[1]-n.y)/n.height;return[i.x+w*i.width,i.y+N*i.height]});ce.setNode(e,{points:b},[r])}else if(Ze.isPenPath(t)){const b=t.anchors.map(w=>{const N=[w.point[0]*o,w.point[1]*s],y=w.handleIn?[w.handleIn[0]*o,w.handleIn[1]*s]:void 0,D=w.handleOut?[w.handleOut[0]*o,w.handleOut[1]*s]:void 0;return{...w,point:N,handleIn:y,handleOut:D}}),g=[d,p];ce.setNode(e,{points:[g,g],anchors:b},[r])}},my=({board:e})=>{const{language:t}=_e(),n=t==="zh",i=Oe(e),[o,s]=m.useState(!0),[r,l]=m.useState(""),[u,c]=m.useState(""),[d,p]=m.useState(1),[f,h]=m.useState(!1),x=m.useRef(null),b=z.getBoardContainer(e),g=i.length>0?It(e,i,!1):null;m.useEffect(()=>{g&&(x.current?(l(Math.round(x.current.width).toString()),c(Math.round(x.current.height).toString()),x.current=null):(l(Math.round(g.width).toString()),c(Math.round(g.height).toString())),p(g.width/g.height))},[g==null?void 0:g.width,g==null?void 0:g.height]);const w=m.useCallback(k=>{const E=k.target.value;if(l(E),o&&g){const I=parseFloat(E);if(!isNaN(I)&&I>0){const q=Math.round(I/d);c(q.toString())}}},[o,d,g]),N=m.useCallback(k=>{const E=k.target.value;if(c(E),o&&g){const I=parseFloat(E);if(!isNaN(I)&&I>0){const q=Math.round(I*d);l(q.toString())}}},[o,d,g]),y=m.useCallback(()=>{if(!g||i.length===0)return;const k=parseFloat(r),E=parseFloat(u);if(isNaN(k)||isNaN(E)||k<=0||E<=0){l(Math.round(g.width).toString()),c(Math.round(g.height).toString());return}if(Math.abs(k-g.width)<.5&&Math.abs(E-g.height)<.5)return;x.current={width:k,height:E};const I=k/g.width,q=E/g.height,W={x:g.x,y:g.y,width:k,height:E};i.forEach(U=>{Yc(e,U,g,W,I,q)})},[e,i,g,r,u]),D=m.useCallback(k=>{if(!g||i.length===0)return;const E=k.width,I=k.height;l(E.toString()),c(I.toString()),x.current={width:E,height:I};const q=E/g.width,W=I/g.height,U={x:g.x,y:g.y,width:E,height:I};i.forEach(M=>{Yc(e,M,g,U,q,W)}),p(E/I),h(!1)},[e,i,g]),j=m.useCallback(k=>{k.key==="Enter"?(y(),k.target.blur()):k.key==="Escape"&&(g&&(l(Math.round(g.width).toString()),c(Math.round(g.height).toString())),k.target.blur())},[y,g]);return g?a.jsxDEV("div",{className:"size-input-container",children:[a.jsxDEV("div",{className:"size-input-group",children:[a.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),a.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"size-input",value:r,onChange:w,onBlur:y,onKeyDown:j},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),a.jsxDEV("button",{className:`size-lock-button ${o?"locked":""}`,onClick:()=>s(!o),title:o?"解锁比例":"锁定比例",children:o?a.jsxDEV(sh,{},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):a.jsxDEV(rh,{},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),a.jsxDEV("div",{className:"size-input-group",children:[a.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),a.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"size-input",value:u,onChange:N,onBlur:y,onKeyDown:j},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),a.jsxDEV(it,{open:f,onOpenChange:h,placement:"bottom-end",sideOffset:8,children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("button",{className:`size-preset-button ${f?"active":""}`,title:n?"常用尺寸":"Preset Sizes",onClick:()=>h(!f),children:a.jsxDEV(ka,{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),a.jsxDEV(st,{container:b,children:a.jsxDEV("div",{className:"size-preset-panel",children:ah.map(k=>a.jsxDEV("div",{className:"size-preset-category",children:[a.jsxDEV("div",{className:"size-preset-category-label",children:n?k.category:k.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),k.items.map(E=>a.jsxDEV("button",{className:"size-preset-item",onClick:()=>D(E),children:[a.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),a.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))]},k.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},py=({board:e,title:t})=>{const{appState:n,setAppState:i}=Lt();return a.jsxDEV(ie,{className:K("property-button"),visible:!0,icon:a.jsxDEV(ch,{},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 o=Oe(e)[0],s=lh(o);Pi.getLinkElement(s)||Pi.wrapLink(s,"链接",""),setTimeout(()=>{const u=Pi.getLinkElement(s)[0],c=gn.toDOMNode(s,u);i({...n,linkState:{editor:s,targetDom:c,targetElement:u,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)},Xi=8,fy=60,hy=600,Xc=24,gy='16px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';let vr=null,es=null;function by(){if(vr||(vr=document.createElement("canvas"),es=vr.getContext("2d")),!es)throw new Error("Failed to get canvas context");return es.font=gy,es}function kr(e){return by().measureText(e).width}function xy(e){const t=e.split(`
|
|
14
|
+
`);let n=0;for(const l of t){const u=kr(l);n=Math.max(n,u)}const i=Math.min(hy-Xi*2,Math.max(fy-Xi*2,n)),o=i+Xi*2;let s=0;for(const l of t){if(l.length===0){s+=1;continue}if(kr(l)<=i)s+=1;else{let c=0,d=1;for(const p of l){const f=kr(p);c+f>i?(d++,c=f):c+=f}s+=d}}const r=Math.max(Xc+Xi*2,s*Xc+Xi*2);return{width:o,height:r}}function Ny(e){switch(e){case"ai-input":return a.jsxDEV(bh,{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 a.jsxDEV(ad,{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 a.jsxDEV(gh,{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 wy(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 yy=({board:e,language:t,title:n})=>{const[i,o]=m.useState(!1),[s,r]=m.useState(0),{history:l,addHistory:u,removeHistory:c}=uh({deduplicateWithPresets:!1}),{confirm:d,confirmDialog:p}=Fs({container:e?z.getBoardContainer(e):null}),f=m.useRef(null),[h,x]=m.useState([]),[b,g]=m.useState([]);m.useEffect(()=>{i&&(x(dh()),g(mh()))},[i]);const w=m.useMemo(()=>{const E=ph[t].map((P,A)=>({id:`preset_${A}`,content:P,source:"preset"})),I=l.map(P=>({id:P.id,content:P.content,source:"ai-input",timestamp:P.timestamp})),q=h.map(P=>({id:P.id,content:P.content,source:"image",timestamp:P.timestamp})),W=b.map(P=>({id:P.id,content:P.content,source:"video",timestamp:P.timestamp})),U=[...I,...q,...W];U.sort((P,A)=>(A.timestamp||0)-(P.timestamp||0));const M=new Set,T=[];for(const P of U){const A=P.content.trim();M.has(A)||(M.add(A),T.push(P))}const _=E.filter(P=>!M.has(P.content.trim()));return[...T,..._]},[t,l,h,b]),{historyPrompts:N,presetPrompts:y}=m.useMemo(()=>{const E=w.filter(q=>q.source!=="preset"),I=w.filter(q=>q.source==="preset");return{historyPrompts:E,presetPrompts:I}},[w]),D=m.useCallback((E,I)=>E==="history"?I:N.length+I,[N.length]);m.useEffect(()=>{i&&r(0)},[i]);const j=m.useCallback(E=>{u(E.content),o(!1);const I=Oe(e);if(I.length===0)return;const q=M=>({type:"paragraph",children:[{text:M}]}),{width:W,height:U}=xy(E.content);for(const M of I){const T=e.children.findIndex(P=>P.id===M.id);if(T<0)continue;const _={};if(Kt.isMindElement(e,M)){const P=[q(E.content)];ce.setNode(e,{data:P},[T]);continue}if(B.isText&&B.isText(M)){if(_.text=q(E.content),"points"in M&&Array.isArray(M.points)&&M.points.length>=2){const P=M.points,[A]=P,Q=[A,[A[0]+W,A[1]+U]];_.points=Q}ce.setNode(e,_,[T]);continue}if(B.isDrawElement(M)&&Ea([M])){if("text"in M&&M.text){if(_.text=q(E.content),"points"in M&&Array.isArray(M.points)&&M.points.length>=2){const P=M.points,[A]=P,Q=[A,[A[0]+W,A[1]+U]];_.points=Q}ce.setNode(e,_,[T]);continue}if("data"in M&&Array.isArray(M.data)){if(_.data=[q(E.content)],"points"in M&&Array.isArray(M.points)&&M.points.length>=2){const P=M.points,[A]=P,Q=[A,[A[0]+W,A[1]+U]];_.points=Q}ce.setNode(e,_,[T]);continue}}if("text"in M&&M.text){if(_.text=q(E.content),"points"in M&&Array.isArray(M.points)&&M.points.length>=2){const P=M.points,[A]=P,Q=[A,[A[0]+W,A[1]+U]];_.points=Q}ce.setNode(e,_,[T]);continue}"textContent"in M&&ce.setNode(e,{textContent:E.content},[T])}},[e,u]),k=m.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})&&c(I)},[d,t,c]);return m.useEffect(()=>{if(!i)return;const E=I=>{if(w.length===0){I.key==="Escape"&&(I.preventDefault(),o(!1));return}switch(I.key){case"ArrowUp":I.preventDefault(),r(q=>q<=0?w.length-1:q-1);break;case"ArrowDown":I.preventDefault(),r(q=>q>=w.length-1?0:q+1);break;case"Enter":I.preventDefault(),w[s]&&j(w[s]);break;case"Escape":I.preventDefault(),o(!1);break}};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[i,w,s,j]),m.useEffect(()=>{var I;if(!i||w.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"})},[s,i,w.length]),a.jsxDEV(it,{open:i,onOpenChange:o,placement:"top",sideOffset:8,children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:"prompt-button",type:"icon",icon:a.jsxDEV(Il,{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:()=>o(!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),a.jsxDEV(st,{className:`popup-prompt-panel ${Pt}`,onMouseDown:E=>E.preventDefault(),children:a.jsxDEV("div",{ref:f,className:"popup-prompt-panel__content",children:[N.length>0&&a.jsxDEV("div",{className:"popup-prompt-panel__section",children:[a.jsxDEV("div",{className:"popup-prompt-panel__section-header",children:[a.jsxDEV(fh,{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),a.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),a.jsxDEV("div",{className:"popup-prompt-panel__list",children:N.map((E,I)=>a.jsxDEV("div",{className:`popup-prompt-panel__item popup-prompt-panel__item--history ${D("history",I)===s?"popup-prompt-panel__item--highlighted":""}`,onClick:()=>j(E),onMouseEnter:()=>r(D("history",I)),children:[a.jsxDEV("div",{className:"popup-prompt-panel__item-content",children:[a.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),a.jsxDEV("span",{className:`popup-prompt-panel__item-source popup-prompt-panel__item-source--${E.source}`,children:[Ny(E.source),a.jsxDEV("span",{children:wy(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"&&a.jsxDEV(Et,{content:t==="zh"?"删除":"Delete",showArrow:!1,children:a.jsxDEV("button",{className:"popup-prompt-panel__item-delete",onClick:q=>k(q,E.id),children:a.jsxDEV(hh,{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),y.length>0&&a.jsxDEV("div",{className:"popup-prompt-panel__section",children:[a.jsxDEV("div",{className:"popup-prompt-panel__section-header",children:[a.jsxDEV(Il,{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),a.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),a.jsxDEV("div",{className:"popup-prompt-panel__list",children:y.map((E,I)=>a.jsxDEV("div",{className:`popup-prompt-panel__item ${D("preset",I)===s?"popup-prompt-panel__item--highlighted":""}`,onClick:()=>j(E),onMouseEnter:()=>r(D("preset",I)),children:a.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),p]},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)},Ki={bringToFront(e){const t=Oe(e);if(t.length===0)return;const n=e.children.length-1,i=t.map(o=>({element:o,index:e.children.findIndex(s=>s.id===o.id)})).sort((o,s)=>s.index-o.index);for(const{element:o,index:s}of i)s>=0&&s<n&&ce.moveNode(e,[s],[n])},bringForward(e){const t=Oe(e);if(t.length===0)return;const n=e.children.length-1,i=t.map(o=>({element:o,index:e.children.findIndex(s=>s.id===o.id)})).sort((o,s)=>s.index-o.index);for(const{element:o,index:s}of i)s>=0&&s<n&&ce.moveNode(e,[s],[s+2])},sendBackward(e){const t=Oe(e);if(t.length===0)return;const n=t.map(i=>({element:i,index:e.children.findIndex(o=>o.id===i.id)})).sort((i,o)=>i.index-o.index);for(const{element:i,index:o}of n)o>0&&ce.moveNode(e,[o],[o-1])},sendToBack(e){const t=Oe(e);if(t.length===0)return;const n=t.map(i=>({element:i,index:e.children.findIndex(o=>o.id===i.id)})).sort((i,o)=>i.index-o.index);for(const{element:i,index:o}of n)o>0&&ce.moveNode(e,[o],[0])},getLayerInfo(e,t){const n=e.children.findIndex(o=>o.id===t);if(n<0)return null;const i=e.children.length;return{index:n,total:i,canMoveUp:n<i-1,canMoveDown:n>0}}},vy=({board:e,title:t})=>{const{language:n}=_e(),[i,o]=m.useState(!1),[s,r]=m.useState(0),l=z.getBoardContainer(e),u=m.useMemo(()=>{const b=Oe(e);if(b.length===0)return null;const g=b[0];return Ki.getLayerInfo(e,g.id)},[e,s]),c=m.useCallback(()=>{Ki.bringToFront(e),r(b=>b+1)},[e]),d=m.useCallback(()=>{Ki.bringForward(e),r(b=>b+1)},[e]),p=m.useCallback(()=>{Ki.sendBackward(e),r(b=>b+1)},[e]),f=m.useCallback(()=>{Ki.sendToBack(e),r(b=>b+1)},[e]),h=(u==null?void 0:u.canMoveUp)??!1,x=(u==null?void 0:u.canMoveDown)??!1;return a.jsxDEV(it,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:o,placement:"top-start",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:K("property-button","layer-control-button"),selected:i,visible:!0,icon:a.jsxDEV(xh,{},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:()=>o(!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),a.jsxDEV(st,{container:l,children:a.jsxDEV(Ye,{padding:1,className:K(Pt,"layer-control-panel"),children:a.jsxDEV("div",{className:"layer-actions",children:[a.jsxDEV(Et,{content:n==="zh"?"置顶":"Bring to Front",showArrow:!1,children:a.jsxDEV("button",{className:K("layer-action-btn",{disabled:!h}),onClick:c,disabled:!h,children:[a.jsxDEV(Nh,{},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),a.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),a.jsxDEV(Et,{content:n==="zh"?"上移一层":"Bring Forward",showArrow:!1,children:a.jsxDEV("button",{className:K("layer-action-btn",{disabled:!h}),onClick:d,disabled:!h,children:[a.jsxDEV(wh,{},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),a.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),a.jsxDEV(Et,{content:n==="zh"?"下移一层":"Send Backward",showArrow:!1,children:a.jsxDEV("button",{className:K("layer-action-btn",{disabled:!x}),onClick:p,disabled:!x,children:[a.jsxDEV(yh,{},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),a.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),a.jsxDEV(Et,{content:n==="zh"?"置底":"Send to Back",showArrow:!1,children:a.jsxDEV("button",{className:K("layer-action-btn",{disabled:!x}),onClick:f,disabled:!x,children:[a.jsxDEV(vh,{},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),a.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),u&&a.jsxDEV("span",{className:"layer-info",children:[u.index+1,"/",u.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)},ky=({board:e,title:t})=>{const{language:n}=_e(),[i,o]=m.useState(!1),s=z.getBoardContainer(e),r=m.useCallback(()=>{nn.alignLeft(e)},[e]),l=m.useCallback(()=>{nn.alignCenter(e)},[e]),u=m.useCallback(()=>{nn.alignRight(e)},[e]),c=m.useCallback(()=>{nn.alignTop(e)},[e]),d=m.useCallback(()=>{nn.alignMiddle(e)},[e]),p=m.useCallback(()=>{nn.alignBottom(e)},[e]),f=[{key:"left",icon:a.jsxDEV(Eh,{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:a.jsxDEV(jh,{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:l},{key:"right",icon:a.jsxDEV(Dh,{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:u},{key:"top",icon:a.jsxDEV(Sh,{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:c},{key:"middle",icon:a.jsxDEV(Ch,{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:a.jsxDEV(_h,{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:p}];return a.jsxDEV(it,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:o,placement:"top-start",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:K("property-button","alignment-button"),selected:i,visible:!0,icon:a.jsxDEV(kh,{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:()=>o(!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),a.jsxDEV(st,{container:s,children:a.jsxDEV(Ye,{padding:1,className:K(Pt,"alignment-panel"),children:a.jsxDEV("div",{className:"alignment-actions",children:f.map(h=>a.jsxDEV(Et,{content:h.label,showArrow:!1,children:a.jsxDEV("button",{className:"alignment-action-btn",onClick:h.handler,children:[h.icon,a.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),a.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)},Ey=({board:e,title:t})=>{const{language:n}=_e(),[i,o]=m.useState(!1),s=z.getBoardContainer(e),r=m.useCallback(()=>{Vi.distributeHorizontal(e)},[e]),l=m.useCallback(()=>{Vi.distributeVertical(e)},[e]),u=m.useCallback(()=>{Vi.autoArrange(e)},[e]),c=[{key:"horizontal",icon:a.jsxDEV(Vh,{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:a.jsxDEV(Th,{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:l},{key:"auto",icon:a.jsxDEV(Uh,{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:u}];return a.jsxDEV(it,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:o,placement:"top-start",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:K("property-button","distribute-button"),selected:i,visible:!0,icon:a.jsxDEV(Ph,{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:()=>o(!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),a.jsxDEV(st,{container:s,children:a.jsxDEV(Ye,{padding:1,className:K(Pt,"distribute-panel"),children:a.jsxDEV("div",{className:"distribute-actions",children:c.map(d=>a.jsxDEV(Et,{content:d.label,showArrow:!1,children:a.jsxDEV("button",{className:"distribute-action-btn",onClick:d.handler,children:[d.icon,a.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),a.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)},jy=({board:e,title:t})=>{const{language:n}=_e(),[i,o]=m.useState(!1),s=z.getBoardContainer(e),r=m.useCallback(()=>{hn.union(e,n),o(!1)},[e,n]),l=m.useCallback(()=>{hn.subtract(e,n)},[e,n]),u=m.useCallback(()=>{hn.intersect(e,n)},[e,n]),c=m.useCallback(()=>{hn.exclude(e,n)},[e,n]),d=m.useCallback(()=>{hn.flatten(e,n)},[e,n]),p=[{key:"union",icon:a.jsxDEV(qh,{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:a.jsxDEV(Ah,{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:l},{key:"intersect",icon:a.jsxDEV(Mh,{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:u},{key:"exclude",icon:a.jsxDEV(Rh,{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:c},{key:"flatten",icon:a.jsxDEV(zh,{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 a.jsxDEV(it,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:o,placement:"top-start",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:K("property-button","boolean-button"),selected:i,visible:!0,icon:a.jsxDEV(Ih,{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:()=>o(!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),a.jsxDEV(st,{container:s,children:a.jsxDEV(Ye,{padding:1,className:K(Pt,"boolean-panel"),children:a.jsxDEV("div",{className:"boolean-actions",children:p.map(f=>a.jsxDEV(Et,{content:f.label,showArrow:!1,children:a.jsxDEV("button",{className:"boolean-action-btn",onClick:f.handler,children:[f.icon,a.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),a.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 Dy(e){return e.sort((t,n)=>t.position-n.position).map(t=>`${t.color} ${t.position}%`).join(", ")}function Sy(e){const t=Dy(e.stops);return e.type==="linear"?`linear-gradient(${e.angle}deg, ${t})`:`radial-gradient(circle, ${t})`}function Er(e){return e.enabled?`${e.offsetX}px ${e.offsetY}px ${e.blur}px ${e.color}`:""}const jr=St.CUSTOM_GRADIENTS,Cy=({board:e,isOpen:t,onClose:n,currentFontSize:i,currentFontFamily:o,currentColor:s,toolbarRect:r,selectionRect:l})=>{var gl,bl;const{t:u,language:c}=_e(),{confirm:d,confirmDialog:p}=Fs({container:z.getBoardContainer(e)}),f=m.useRef(null),[h,x]=m.useState({top:0,left:0}),[b,g]=m.useState(i||"16"),[w,N]=m.useState(!1),[y,D]=m.useState(o||"PingFang SC"),[j,k]=m.useState(new Set),[E,I]=m.useState(400),[q,W]=m.useState("left"),[U,M]=m.useState(1.5),[T,_]=m.useState(0),[P,A]=m.useState(!1),[Q,Ee]=m.useState(!1),[V,$]=m.useState(!1),[ue,Y]=m.useState(!1),[ae,ne]=m.useState(!1),[ge,ye]=m.useState(!1),[ze,R]=m.useState(null),[fe,Ae]=m.useState(null),[Fe,X]=m.useState(0),[v,H]=m.useState("#000000"),[O,pe]=m.useState(null),[me,C]=m.useState(null),[L,F]=m.useState(!1),[G,J]=m.useState(null),[ee,Z]=m.useState({color:"rgba(0, 0, 0, 0.5)",offsetX:2,offsetY:2,blur:4}),[te,le]=m.useState(!1),[Me,$e]=m.useState(null),[oe,Ce]=m.useState({type:"linear",angle:135,stops:[{color:"#FF6B6B",offset:0},{color:"#4ECDC4",offset:1}]}),[ke,Ne]=m.useState([]),[bt,Vt]=m.useState(s||"#000000"),[jt,kt]=m.useState(!1);m.useEffect(()=>{let S=!0;return bn.get(jr).then(de=>{S&&de&&Ne(de)}).catch(de=>{console.warn("Failed to load gradient data:",de)}),()=>{S=!1}},[]),m.useEffect(()=>{if(t){const S=Fw(e);if(S["text-gradient"]){le(!0);const Ue=Lh.find(Je=>Sy(Je.config)===S["text-gradient"]);$e(Ue?Ue.id:null)}else le(!1),$e(null);if(S["text-shadow"]){F(!0);const Ue=S["text-shadow"];let Je=null;for(const[Qt,qn]of Object.entries(ql.textShadow))if(Er(qn)===Ue){Je=Qt;break}J(Je||null)}else F(!1),J(null);if(S["font-family"]&&D(S["font-family"]),S["font-weight"]&&I(Number(S["font-weight"])),S["line-height"]&&M(Number(S["line-height"])),S["letter-spacing"]){const Ue=String(S["letter-spacing"]).replace("px","");_(Number(Ue))}const de=Bw(e);W(de),A(!!S.bold),Ee(!!S.italic),$(!!S.underlined),Y(!!S.strikethrough),ne(!!S.superscript),ye(!!S.subscript),R(S["background-color"]||null),Ae(S["text-transform"]||null),X(S["text-stroke"]||0),H(S["text-stroke-color"]||"#000000"),pe(S["text-decoration-style"]||null),C(S["text-decoration-color"]||null)}},[t,e]),m.useEffect(()=>{if(t&&!w){const S=setTimeout(()=>{Al.forEach(de=>{Bo.isFontLoaded(de.family)||Bo.loadGoogleFont(de.family).catch(Ue=>{console.warn(`Failed to preload font ${de.family}:`,Ue)})})},500);return()=>clearTimeout(S)}},[t,w]),m.useEffect(()=>{if(t&&r&&l){let Je=l.right+12,Qt=r.top+r.height+8;const qn=window.innerWidth,dr=window.innerHeight;Je+320>qn-16&&(Je=l.left-320-12,Je<16&&(Je=qn-320-16)),Qt+520>dr-16&&(Qt=Math.max(16,dr-520-16)),x({left:Math.max(16,Je),top:Math.max(16,Qt)})}},[t,r,l]);const In=m.useCallback(S=>{const de=parseInt(S,10);!isNaN(de)&&de>=8&&de<=100&&(g(S),km(e,S))},[e]),zt=m.useCallback(async S=>{if(D(S.family),N(!1),S.source==="google"&&!Bo.isFontLoaded(S.family)){k(de=>new Set(de).add(S.family));try{await Bo.loadGoogleFont(S.family)}catch(de){console.error("Failed to load Google font:",de)}finally{k(de=>{const Ue=new Set(de);return Ue.delete(S.family),Ue})}}Sw(e,S.family)},[e]);m.useEffect(()=>{s&&Vt(s)},[s]);const Zt=m.useCallback(S=>{Vt(S),Ln.setTextColor(e,S)},[e]),Xn=m.useCallback((S,de)=>{J(S),F(!0),Z({color:de.color,offsetX:de.offsetX,offsetY:de.offsetY,blur:de.blur});const Ue=Er(de);wr(e,Ue)},[e]),Jt=m.useCallback((S,de)=>{const Ue={...ee,[S]:de};Z(Ue),J(null);const Je=`${Ue.offsetX}px ${Ue.offsetY}px ${Ue.blur}px ${Ue.color}`;wr(e,Je)},[e,ee]),je=m.useCallback(S=>{Ce(S),$e(null);const de=ni(S);Oc(e,de)},[e]),Be=m.useCallback(()=>{const S=ni(oe),Ue=[{id:`custom-${Date.now()}`,css:S},...ke].slice(0,8);Ne(Ue),bn.set(jr,Ue).catch(Je=>{console.warn("Failed to save custom gradients:",Je)})},[oe,ke]),we=m.useCallback(async S=>{if(!await d({title:c==="zh"?"确认删除渐变预设":"Delete Gradient Preset",description:c==="zh"?"确定要删除这个自定义渐变预设吗?":"Are you sure you want to delete this custom gradient preset?",confirmText:c==="zh"?"删除":"Delete",cancelText:c==="zh"?"取消":"Cancel",danger:!0}))return;const Ue=ke.filter(Je=>Je.id!==S);Ne(Ue),bn.set(jr,Ue).catch(Je=>{console.warn("Failed to save custom gradients:",Je)})},[d,ke,c]),Te=m.useCallback(()=>{const S=!L;F(S),S||(wr(e,null),J(null))},[e,L]),tt=m.useCallback(()=>{const S=!te;le(S),S||(Oc(e,null),$e(null))},[e,te]),He=m.useCallback(S=>{I(S),Em(e,S)},[e]),Re=m.useCallback(S=>{W(S),Cw(e,S)},[e]),ut=m.useCallback(S=>{M(S),_w(e,S)},[e]),dt=m.useCallback(S=>{_(S),Pw(e,S)},[e]),Dt=m.useCallback(()=>{A(!P),Vw(e)},[e,P]),Tt=m.useCallback(()=>{Ee(!Q),Tw(e)},[e,Q]),rt=m.useCallback(()=>{$(!V),Uw(e)},[e,V]),rn=m.useCallback(()=>{Y(!ue),Iw(e)},[e,ue]),sr=m.useCallback(()=>{const S=!ae;ne(S),S&&ye(!1),qw(e)},[e,ae]),rr=m.useCallback(()=>{const S=!ge;ye(S),S&&ne(!1),Aw(e)},[e,ge]),Oo=m.useCallback(S=>{R(S),Mw(e,S)},[e]),Wi=m.useCallback(S=>{const de=S===fe?null:S;Ae(de),Rw(e,de)},[e,fe]),re=m.useCallback((S,de)=>{X(S),de&&H(de),zw(e,S>0?S:null,de||v)},[e,v]),ar=m.useCallback(S=>{pe(S),Lw(e,S)},[e]),pi=m.useCallback(S=>{C(S),Ow(e,S)},[e]);m.useEffect(()=>{if(!t)return;const S=Ue=>{const Je=Ue.target;f.current&&f.current.contains(Je)||Je.closest(".popup-toolbar")!==null||n()},de=setTimeout(()=>{document.addEventListener("mousedown",S)},100);return()=>{clearTimeout(de),document.removeEventListener("mousedown",S)}},[t,n]);const Qp=m.useCallback(S=>{S.target===S.currentTarget&&n()},[n]),[lr,cr]=m.useState(!1),hl=[{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:"黑体"}],ef=m.useCallback(S=>{const de=hl.find(Ue=>Ue.value===S);return de?c==="zh"?de.labelZh:de.label:String(S)},[c]),ur=[...Oh,...Al],tf=m.useCallback(S=>{const de=ur.find(Ue=>Ue.family===S);return(de==null?void 0:de.displayName)||S},[ur]);return t?a.jsxDEV(a.Fragment,{children:[a.jsxDEV("div",{className:"text-property-panel-overlay",onClick:Qp,onPointerDown:S=>S.stopPropagation(),onMouseDown:S=>S.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),a.jsxDEV("div",{ref:f,className:K("text-property-panel",{"is-open":t}),style:{top:h.top,left:h.left},onPointerDown:S=>S.stopPropagation(),onMouseDown:S=>S.stopPropagation(),onClick:S=>S.stopPropagation(),onPointerUp:S=>S.stopPropagation(),children:[a.jsxDEV("div",{className:"text-property-panel__header",children:[a.jsxDEV("span",{className:"text-property-panel__header-title",children:u("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),a.jsxDEV("button",{className:"text-property-panel__header-close",onClick:n,children:a.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:a.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),a.jsxDEV("div",{className:"text-property-panel__content",children:[a.jsxDEV("div",{className:"text-property-panel__section",children:a.jsxDEV("div",{className:"text-property-panel__section-content",children:[a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"inline-control__slider-group",children:[a.jsxDEV("input",{type:"range",className:"inline-control__slider",value:b,min:8,max:100,step:1,onChange:S=>{g(S.target.value),In(S.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),a.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),a.jsxDEV("div",{className:"inline-control inline-control--dropdown",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"custom-dropdown",children:[a.jsxDEV("div",{className:K("custom-dropdown__trigger",{"is-expanded":w}),onClick:()=>{N(!w),cr(!1)},children:[a.jsxDEV("span",{className:"custom-dropdown__value",style:{fontFamily:`'${y}', sans-serif`},children:tf(y)},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),a.jsxDEV("svg",{className:"custom-dropdown__arrow",width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:a.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),a.jsxDEV("div",{className:K("custom-dropdown__menu custom-dropdown__menu--font",{"is-open":w}),children:ur.map(S=>a.jsxDEV("div",{className:K("custom-dropdown__item custom-dropdown__item--font",{"is-active":y===S.family}),onClick:()=>{zt(S),N(!1)},children:[a.jsxDEV("span",{className:"custom-dropdown__item-label",children:S.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),a.jsxDEV("span",{className:"custom-dropdown__item-preview",style:{fontFamily:`'${S.family}', sans-serif`},children:S.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)]},S.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),a.jsxDEV("div",{className:"inline-control inline-control--dropdown",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"custom-dropdown",children:[a.jsxDEV("div",{className:K("custom-dropdown__trigger",{"is-expanded":lr}),onClick:()=>{cr(!lr),N(!1)},children:[a.jsxDEV("span",{className:"custom-dropdown__value",style:{fontWeight:E},children:ef(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),a.jsxDEV("svg",{className:"custom-dropdown__arrow",width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:a.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),a.jsxDEV("div",{className:K("custom-dropdown__menu",{"is-open":lr}),children:hl.map(S=>a.jsxDEV("div",{className:K("custom-dropdown__item",{"is-active":E===S.value}),onClick:()=>{He(S.value),cr(!1)},children:a.jsxDEV("span",{className:"custom-dropdown__item-label",style:{fontWeight:S.value},children:c==="zh"?S.labelZh:S.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)},S.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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"align-buttons align-buttons--compact",children:[a.jsxDEV("button",{className:K("align-buttons__btn",{"is-active":q==="left"}),onClick:()=>Re("left"),title:c==="zh"?"左对齐":"Align Left",children:a.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"currentColor",children:a.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),a.jsxDEV("button",{className:K("align-buttons__btn",{"is-active":q==="center"}),onClick:()=>Re("center"),title:c==="zh"?"居中对齐":"Align Center",children:a.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"currentColor",children:a.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),a.jsxDEV("button",{className:K("align-buttons__btn",{"is-active":q==="right"}),onClick:()=>Re("right"),title:c==="zh"?"右对齐":"Align Right",children:a.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"currentColor",children:a.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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"style-buttons",children:[a.jsxDEV("button",{className:K("style-buttons__btn",{"is-active":P}),onClick:Dt,title:c==="zh"?"加粗":"Bold",children:a.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),a.jsxDEV("button",{className:K("style-buttons__btn",{"is-active":Q}),onClick:Tt,title:c==="zh"?"斜体":"Italic",children:a.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),a.jsxDEV("button",{className:K("style-buttons__btn",{"is-active":V}),onClick:rt,title:c==="zh"?"下划线":"Underline",children:a.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),a.jsxDEV("button",{className:K("style-buttons__btn",{"is-active":ue}),onClick:rn,title:c==="zh"?"删除线":"Strikethrough",children:a.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),a.jsxDEV("button",{className:K("style-buttons__btn",{"is-active":ae}),onClick:sr,title:c==="zh"?"上标":"Superscript",children:a.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--superscript",children:["X",a.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),a.jsxDEV("button",{className:K("style-buttons__btn",{"is-active":ge}),onClick:rr,title:c==="zh"?"下标":"Subscript",children:a.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--subscript",children:["X",a.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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"case-buttons",children:[a.jsxDEV("button",{className:K("case-buttons__btn",{"is-active":fe==="uppercase"}),onClick:()=>Wi("uppercase"),title:c==="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),a.jsxDEV("button",{className:K("case-buttons__btn",{"is-active":fe==="lowercase"}),onClick:()=>Wi("lowercase"),title:c==="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),a.jsxDEV("button",{className:K("case-buttons__btn",{"is-active":fe==="capitalize"}),onClick:()=>Wi("capitalize"),title:c==="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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"inline-control__slider-group",children:[a.jsxDEV("input",{type:"range",className:"inline-control__slider",value:U,min:.8,max:3,step:.1,onChange:S=>ut(Number(S.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),a.jsxDEV("span",{className:"inline-control__value",children:U.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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"inline-control__slider-group",children:[a.jsxDEV("input",{type:"range",className:"inline-control__slider",value:T,min:-2,max:10,step:.5,onChange:S=>dt(Number(S.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),a.jsxDEV("span",{className:"inline-control__value",children:[T,"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),a.jsxDEV("div",{className:"text-property-panel__section",children:[a.jsxDEV("div",{className:"text-property-panel__section-title",children:u("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),a.jsxDEV("div",{className:"text-property-panel__section-content text-color-picker",children:a.jsxDEV(li,{value:bt,onChange:Zt,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),a.jsxDEV("div",{className:"text-property-panel__section",children:a.jsxDEV("div",{className:"text-property-panel__section-content",children:[a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"highlight-colors",children:[a.jsxDEV("button",{className:K("highlight-colors__btn highlight-colors__btn--none",{"is-active":!ze}),onClick:()=>Oo(null),title:c==="zh"?"无":"None",children:a.jsxDEV("svg",{width:"12",height:"12",viewBox:"0 0 16 16",children:a.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(S=>a.jsxDEV("button",{className:K("highlight-colors__btn",{"is-active":ze===S}),style:{backgroundColor:S},onClick:()=>Oo(S),title:S},S,!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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"inline-control__slider-group",children:[a.jsxDEV("input",{type:"range",className:"inline-control__slider",value:Fe,min:0,max:3,step:.5,onChange:S=>re(Number(S.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),a.jsxDEV("span",{className:"inline-control__value",children:[Fe,"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),Fe>0&&a.jsxDEV("input",{type:"color",className:"inline-control__color-input",value:v,onChange:S=>re(Fe,S.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),(V||ue)&&a.jsxDEV(a.Fragment,{children:[a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"decoration-style-buttons",children:["solid","double","dotted","dashed","wavy"].map(S=>a.jsxDEV("button",{className:K("decoration-style-buttons__btn",{"is-active":O===S}),onClick:()=>ar(O===S?null:S),title:S,children:a.jsxDEV("span",{className:`decoration-preview decoration-preview--${S}`,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)},S,!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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"highlight-colors",children:[a.jsxDEV("button",{className:K("highlight-colors__btn highlight-colors__btn--none",{"is-active":!me}),onClick:()=>pi(null),title:c==="zh"?"默认":"Default",children:a.jsxDEV("svg",{width:"12",height:"12",viewBox:"0 0 16 16",children:a.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(S=>a.jsxDEV("button",{className:K("highlight-colors__btn",{"is-active":me===S}),style:{backgroundColor:S},onClick:()=>pi(S),title:S},S,!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),a.jsxDEV("div",{className:"text-property-panel__section",children:a.jsxDEV("div",{className:"text-property-panel__section-content",children:[a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:K("toggle-switch__control toggle-switch__control--inline",{"is-active":L}),onClick:Te},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),L&&a.jsxDEV(a.Fragment,{children:[a.jsxDEV("div",{className:"effect-presets",children:Object.entries(ql.textShadow).map(([S,de])=>a.jsxDEV("div",{className:K("effect-presets__item",{"is-active":G===S}),onClick:()=>Xn(S,de),title:S,children:a.jsxDEV("span",{style:{textShadow:Er(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)},S,!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),a.jsxDEV("div",{className:"effect-config",children:[a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"inline-control__color-group",children:[a.jsxDEV(it,{open:jt,onOpenChange:kt,placement:"bottom",sideOffset:8,children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("button",{className:"inline-control__color-trigger",style:{backgroundColor:ee.color.startsWith("rgba")?`#${((gl=ee.color.match(/\d+/g))==null?void 0:gl.slice(0,3).map(S=>parseInt(S).toString(16).padStart(2,"0")).join(""))||"000000"}`:ee.color},onClick:()=>kt(!jt)},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),a.jsxDEV(st,{children:a.jsxDEV(Ye,{padding:4,className:"color-picker-popover",children:a.jsxDEV(li,{value:ee.color.startsWith("rgba")?`#${((bl=ee.color.match(/\d+/g))==null?void 0:bl.slice(0,3).map(S=>parseInt(S).toString(16).padStart(2,"0")).join(""))||"000000"}`:ee.color,onChange:S=>{const de=parseInt(S.slice(1,3),16),Ue=parseInt(S.slice(3,5),16),Je=parseInt(S.slice(5,7),16),Qt=ee.color.match(/[\d.]+\)$/),qn=Qt?parseFloat(Qt[0]):.5;Jt("color",`rgba(${de}, ${Ue}, ${Je}, ${qn})`)},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),a.jsxDEV("input",{type:"range",className:"inline-control__slider inline-control__slider--short",value:(()=>{const S=ee.color.match(/[\d.]+\)$/);return S?parseFloat(S[0])*100:50})(),min:0,max:100,step:5,title:c==="zh"?"透明度":"Opacity",onChange:S=>{const de=Number(S.target.value)/100,Ue=ee.color.match(/\d+/g);if(Ue&&Ue.length>=3){const[Je,Qt,qn]=Ue.slice(0,3);Jt("color",`rgba(${Je}, ${Qt}, ${qn}, ${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),a.jsxDEV("span",{className:"inline-control__value inline-control__value--narrow",children:[(()=>{const S=ee.color.match(/[\d.]+\)$/);return S?Math.round(parseFloat(S[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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"inline-control__slider-group",children:[a.jsxDEV("input",{type:"range",className:"inline-control__slider",value:ee.offsetX,min:-20,max:20,step:1,onChange:S=>Jt("offsetX",Number(S.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),a.jsxDEV("span",{className:"inline-control__value",children:[ee.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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"inline-control__slider-group",children:[a.jsxDEV("input",{type:"range",className:"inline-control__slider",value:ee.offsetY,min:-20,max:20,step:1,onChange:S=>Jt("offsetY",Number(S.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),a.jsxDEV("span",{className:"inline-control__value",children:[ee.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),a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:"inline-control__slider-group",children:[a.jsxDEV("input",{type:"range",className:"inline-control__slider",value:ee.blur,min:0,max:30,step:1,onChange:S=>Jt("blur",Number(S.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),a.jsxDEV("span",{className:"inline-control__value",children:[ee.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),a.jsxDEV("div",{className:"text-property-panel__section",children:a.jsxDEV("div",{className:"text-property-panel__section-content",children:[a.jsxDEV("div",{className:"inline-control",children:[a.jsxDEV("label",{className:"inline-control__label",children:c==="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),a.jsxDEV("div",{className:K("toggle-switch__control toggle-switch__control--inline",{"is-active":te}),onClick:tt},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),te&&a.jsxDEV("div",{className:"gradient-editor-wrapper",children:a.jsxDEV(jm,{value:oe,onChange:je,showPresets:!0,showHistory:!1,inline:!0,customPresets:ke.map(S=>S.css),onSavePreset:Be,onDeletePreset:S=>{const de=ke[S];de&&we(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),p]},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 Gn={x:0,y:0},zi=new Set,Ss=!1;const Dm=e=>{Gn={x:e.clientX,y:e.clientY},zi.forEach(t=>t(Gn))},Sm=e=>{Gn={x:e.clientX,y:e.clientY},zi.forEach(t=>t(Gn))},Cm=e=>{Gn={x:e.clientX,y:e.clientY},zi.forEach(t=>t(Gn))},_y=()=>{Ss||(document.addEventListener("mousemove",Dm,!0),document.addEventListener("mousedown",Sm,!0),document.addEventListener("mouseup",Cm,!0),Ss=!0)},Py=()=>{Ss&&zi.size===0&&(document.removeEventListener("mousemove",Dm,!0),document.removeEventListener("mousedown",Sm,!0),document.removeEventListener("mouseup",Cm,!0),Ss=!1)},Vy=()=>{const[e,t]=m.useState(()=>Gn),n=m.useRef();return m.useEffect(()=>(n.current=i=>{t(i)},zi.add(n.current),_y(),t(Gn),()=>{n.current&&zi.delete(n.current),Py()}),[]),e},Ty=({visible:e,videoUrl:t,onClose:n,onConfirm:i})=>{const{language:o}=_e(),s=m.useRef(null),r=m.useRef(null),l=m.useRef(null),[u,c]=m.useState(!0),[d,p]=m.useState(0),[f,h]=m.useState(0),[x,b]=m.useState(""),[g,w]=m.useState(!1),[N,y]=m.useState(!1);m.useEffect(()=>(e&&t&&(c(!0),b(""),w(!1),y(!1)),()=>{l.current!==null&&window.clearTimeout(l.current)}),[e,t]);const D=()=>{const _=s.current;_&&(p(_.duration),w(!0))},j=m.useCallback((_,P=!1)=>{const A=s.current;if(!A)return;l.current!==null&&(window.clearTimeout(l.current),l.current=null);const Q=()=>{if(A.readyState<2){console.warn("Video not ready for seeking, readyState:",A.readyState);const Ee=()=>{A.currentTime=_,A.removeEventListener("canplay",Ee)};A.addEventListener("canplay",Ee);return}A.currentTime=_};P?Q():l.current=window.setTimeout(Q,150)},[]);m.useEffect(()=>{const _=s.current;if(g&&_&&d>0){const P=Math.max(0,d-.1);h(P),j(P,!0)}},[g,d,j]);const k=m.useCallback(()=>{const _=s.current,P=r.current;if(!_||!P)return;const A=P.getContext("2d");if(A)try{P.width=_.videoWidth,P.height=_.videoHeight,A.drawImage(_,0,0,P.width,P.height);const Q=P.toDataURL("image/png");b(Q)}catch(Q){console.warn("Failed to generate frame image (likely due to CORS):",Q);try{A.fillStyle="#000",A.fillRect(0,0,P.width,P.height),A.fillStyle="#fff",A.font="16px Arial",A.textAlign="center",A.fillText("视频帧预览不可用",P.width/2,P.height/2);const Ee=P.toDataURL("image/png");b(Ee)}catch(Ee){console.error("Failed to create placeholder image:",Ee),b("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==")}}},[]),E=m.useCallback(()=>{N||(k(),c(!1))},[N,k]),I=()=>{y(!0)},q=_=>{if(s.current&&d>0&&g){const A=_/100*d;h(A),j(A,!1)}},W=()=>{y(!1),c(!0),s.current&&g&&j(f,!0)},U=_=>{if(!s.current||d===0||!g)return;const A=parseFloat(_.target.value);if(isNaN(A))return;const Q=Math.max(0,Math.min(d,A));h(Q),j(Q,!0),c(!0)},M=()=>{x&&(i(x,f),n())},T=_=>{const P=Math.floor(_/60),A=(_%60).toFixed(1);return`${P}:${A.padStart(4,"0")}`};return a.jsxDEV(Fh,{visible:e,onClose:n,header:o==="zh"?"选择视频帧":"Select Video Frame",width:600,destroyOnClose:!0,footer:!1,children:a.jsxDEV("div",{className:"video-frame-selector",children:[a.jsxDEV("video",{ref:s,src:t,style:{display:"none"},muted:!0,playsInline:!0,preload:"auto",crossOrigin:"anonymous",onLoadedMetadata:D,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),a.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),a.jsxDEV("div",{className:"frame-preview",children:u?a.jsxDEV("div",{className:"loading-placeholder",children:[a.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),a.jsxDEV("div",{className:"loading-text",children:o==="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):a.jsxDEV("div",{className:"frame-image-container",children:a.jsxDEV("img",{src:x,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),a.jsxDEV("div",{className:"time-controls",children:[a.jsxDEV("div",{className:"time-display",children:[a.jsxDEV("span",{className:"current-time",children:T(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),a.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),a.jsxDEV("span",{className:"total-time",children:T(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),a.jsxDEV("div",{className:"progress-container",children:a.jsxDEV("input",{type:"range",min:0,max:100,value:d>0?f/d*100:0,onChange:_=>q(Number(_.target.value)),onMouseDown:I,onMouseUp:W,onTouchStart:I,onTouchEnd:W,className:"progress-slider",disabled:u&&!N},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),a.jsxDEV("div",{className:"time-input-container",children:[a.jsxDEV("label",{className:"time-input-label",children:o==="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),a.jsxDEV("input",{type:"number",min:0,max:d,step:.1,value:f.toFixed(1),onChange:U,className:"time-input",disabled:u},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),a.jsxDEV("div",{className:"actions",children:[a.jsxDEV("button",{className:"action-button secondary",onClick:n,children:o==="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),a.jsxDEV("button",{className:"action-button primary",onClick:M,disabled:u||!x,children:o==="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)},Uy=async(e,t,n,i)=>{if(!e||!t)throw new Error("Board and video element are required");try{const o=It(e,[t],!1),s=[o.x,o.y+o.height+20],r=new Image,l=await new Promise(c=>{r.onload=()=>{c({width:r.naturalWidth,height:r.naturalHeight})},r.onerror=()=>{c({width:o.width,height:o.height})},r.src=n}),u={url:n,width:l.width,height:l.height,isVideoFrame:!0,videoTimestamp:i,sourceVideoId:t.id||"unknown"};zs.insertImage(e,u,s)}catch(o){throw console.error("Failed to insert video frame:",o),new Error(`Video frame insertion failed: ${o instanceof Error?o.message:"Unknown error"}`)}};function Iy(){if(typeof VideoDecoder>"u"||typeof VideoEncoder>"u")throw new Error(`当前浏览器不支持 WebCodecs API。
|
|
15
|
+
请使用 Chrome 94+ 或 Edge 94+ 浏览器。`)}function qy(){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 Ay(e,t,n){const i=document.createElement("canvas"),o=i.getContext("2d",{willReadFrequently:!1});if(!o)throw new Error("无法创建 Canvas 2D 上下文");const s=document.createElement("video");s.crossOrigin="anonymous",s.src=e[0],await new Promise((N,y)=>{s.onloadedmetadata=()=>N(),s.onerror=()=>y(new Error("无法加载第一个视频"))}),i.width=s.videoWidth,i.height=s.videoHeight;const r=qy(),l=new AudioContext,u=l.createMediaStreamDestination(),c=i.captureStream(30),d=new MediaStream([...c.getVideoTracks(),...u.stream.getAudioTracks()]),p=new MediaRecorder(d,{mimeType:r.mimeType,videoBitsPerSecond:8e6,audioBitsPerSecond:128e3}),f=[];p.ondataavailable=N=>{N.data.size>0&&f.push(N.data)},p.start(),t==null||t(0,"encoding","开始录制视频...");const h=(n==null?void 0:n.transitions)||[],x=(n==null?void 0:n.transitionDuration)??.5;for(let N=0;N<e.length;N++){t==null||t(N/e.length*100,"encoding",`正在处理视频 ${N+1}/${e.length}...`);const y=document.createElement("video");y.crossOrigin="anonymous",y.src=e[N],y.volume=1,await new Promise((E,I)=>{y.onloadedmetadata=()=>E(),y.onerror=()=>I(new Error(`无法加载视频 ${N+1}`))});let D=null;try{D=l.createMediaElementSource(y),D.connect(u)}catch(E){console.warn(`[WebCodecs] Failed to connect audio from video ${N+1}:`,E)}const j=N<h.length?h[N]:"cut",k=j==="dissolve"||j==="fade_to_black";await new Promise(E=>{y.play().catch(q=>{console.warn(`[WebCodecs] Failed to play video ${N+1}:`,q)});const I=()=>{if(y.ended){E();return}let q=1;if(k&&y.duration>0){const W=y.duration-y.currentTime;W<x&&(q=Math.max(0,W/x))}j==="fade_to_black"&&q<1&&(o.fillStyle="#000",o.fillRect(0,0,i.width,i.height)),o.globalAlpha=q,o.drawImage(y,0,0,i.width,i.height),o.globalAlpha=1,requestAnimationFrame(I)};y.onended=()=>E(),I()}),D&&D.disconnect(),y.pause(),y.src="",y.load()}t==null||t(100,"finalizing","正在生成最终视频..."),await new Promise(N=>{p.onstop=()=>N(),p.stop()}),await l.close();const b=r.mimeType.split(";")[0],g=new Blob(f,{type:b}),w=e.length*8;try{const{unifiedCacheService:N}=await qe(async()=>{const{unifiedCacheService:k}=await import("./tool-windows-BEnZdJqF.js").then(E=>E.pb);return{unifiedCacheService:k}},__vite__mapDeps([0]),import.meta.url),y=`merged-video-${Date.now()}`,D=`/__aitu_cache__/video/${y}.mp4`,j=D;return await N.cacheMediaFromBlob(j,g,"video",{taskId:y}),{blob:g,url:D,duration:w,taskId:y}}catch(N){console.warn("[WebCodecs] Failed to cache video, using blob URL:",N);const y=URL.createObjectURL(g);return{blob:g,url:y,duration:w}}}class Di{constructor(){Iy()}static getInstance(){return Di.instance||(Di.instance=new Di),Di.instance}async mergeVideos(t,n,i){if(t.length===0)throw new Error("没有视频可合并");if(t.length===1){n==null||n(0,"downloading","下载视频...");const s=await(await fetch(t[0])).blob();return{blob:s,url:URL.createObjectURL(s),duration:0}}try{n==null||n(0,"downloading",`下载 ${t.length} 个视频...`);const o=[];for(let s=0;s<t.length;s++){n==null||n(s/t.length*100,"downloading",`下载视频 ${s+1}/${t.length}...`);const l=await(await fetch(t[s])).blob();o.push(l)}return await Ay(t,n,i)}catch(o){throw console.error("[WebCodecs] Merge failed:",o),new Error(`视频合并失败: ${o instanceof Error?o.message:String(o)}`)}}static isSupported(){return typeof VideoDecoder<"u"&&typeof VideoEncoder<"u"}}const My=Di.getInstance();async function Ry(e,t,n){return My.mergeVideos(e,t,n)}function _m(e,t){return Math.abs(Math.log(e)-Math.log(t))}function aD(e,t,n){if(e<=0||t<=0)return;const i=e/t,o=Bh(n);if(o.length===0)return;const s=o.filter(u=>u.value!=="auto");if(s.length===0)return;let r,l=1/0;for(const u of s){const c=u.value.split("x");if(c.length!==2)continue;const d=parseFloat(c[0]),p=parseFloat(c[1]);if(isNaN(d)||isNaN(p)||p===0)continue;const f=d/p,h=_m(i,f);h<l&&(l=h,r=u.value)}if(!(l>.25))return r}function zy(e,t){if(e<=0||t<=0)return;const n=e/t,i=Hh.filter(r=>r.value!=="auto"&&r.width>0&&r.height>0);let o,s=1/0;for(const r of i){const l=r.width/r.height,u=_m(n,l);u<s&&(s=u,o=r.value)}if(!(s>.25))return o}const Kc="笔记",Ly="新笔记",Oy=24;function Fy(e){var t;return((t=e.title)==null?void 0:t.trim())||Ly}function By(e){return(e.body||"").trim()}async function Hy(){const{knowledgeBaseService:e}=await qe(async()=>{const{knowledgeBaseService:o}=await import("./tool-windows-BEnZdJqF.js").then(s=>s.pv);return{knowledgeBaseService:o}},__vite__mapDeps([0]),import.meta.url);await e.initialize();const n=(await e.getAllDirectories()).find(o=>o.name===Kc);if(n)return{knowledgeBaseService:e,directory:n};const i=await e.createDirectory(Kc);return{knowledgeBaseService:e,directory:i}}function Wy(e,t,n){const i=e.children.findIndex(o=>o.id===t);i<0||ce.setNode(e,{noteId:n},[i])}function $y(e){var n,i;if(Ct(e)){const o=(n=e.title)!=null&&n.trim()?`# ${e.title.trim()}`:"",s=((i=e.body)==null?void 0:i.trim())||"";return[o,s].filter(Boolean).join(`
|
|
16
|
+
|
|
17
|
+
`).trim()}const t=[];if("data"in e&&Array.isArray(e.data)){for(const o of e.data)if(Ho.isNode(o)){const s=Ho.string(o).trim();s&&t.push(s)}}if("text"in e){if(typeof e.text=="string"){const o=e.text.trim();o&&t.push(o)}else if(e.text&&typeof e.text=="object"&&Ho.isNode(e.text)){const o=Ho.string(e.text).trim();o&&t.push(o)}}if("textContent"in e&&typeof e.textContent=="string"){const o=e.textContent.trim();o&&t.push(o)}return t.join(`
|
|
18
|
+
`).trim()}function Gy(e){return B.isDrawElement(e)&&B.isText(e)}function Yy(e,t){return[...t].sort((n,i)=>{const o=It(e,[n],!1),s=It(e,[i],!1);return Math.abs(o.x-s.x)<=Oy&&Math.abs(o.y-s.y)>.5?o.y-s.y:o.x-s.x})}async function Pm(e,t,n="zh"){if(!t)return null;if(t.noteId)return t.noteId;try{const{knowledgeBaseService:i,directory:o}=await Hy(),s=await i.createNote(Fy(t),o.id),r=By(t);return r&&await i.updateNote(s.id,{content:r}),Wy(e,t.id,s.id),s.id}catch(i){return console.error("Failed to create note for card:",i),se.error(n==="zh"?"保存到知识库失败":"Failed to save to knowledge base"),null}}async function Xy(e,t){const n=[...new Set(e.filter(Boolean))];if(n.length===0)return;const{knowledgeBaseService:i}=await qe(async()=>{const{knowledgeBaseService:s}=await import("./tool-windows-BEnZdJqF.js").then(r=>r.pv);return{knowledgeBaseService:s}},__vite__mapDeps([0]),import.meta.url);await i.initialize();const o=n[0];await i.updateNote(o,{content:t});for(const s of n.slice(1))await i.deleteNote(s);return o}const Vm=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 Pm(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),se.error(n==="zh"?"无法打开知识库笔记":"Failed to open knowledge base note")}}};function jn(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Ky(e){const t=e;return t.isAudio===!0||t.audioType==="music-card"||typeof t.audioUrl=="string"&&t.audioUrl.length>0}function Zy(e){return B.isDrawElement(e)&&B.isImage(e)&&typeof e.url=="string"&&!Ky(e)&&!e.pptImagePlaceholder}function Tm(e,t){const n=t.points;if(n&&n.length>=2)return he.getRectangleByPoints(n);try{return It(e,[t],!1)}catch{return null}}function Jy(e,t){const n=Math.max(e.x,t.x),i=Math.max(e.y,t.y),o=Math.min(e.x+e.width,t.x+t.width),s=Math.min(e.y+e.height,t.y+t.height);return Math.max(0,o-n)*Math.max(0,s-i)}function Qy(e,t){if(!t)return null;const n=e.children.find(i=>i.id===t&&Ht(i));return n&&Ht(n)?n:null}function Um(e,t){const n=Qy(e,t.frameId);if(n)return n;const i=Tm(e,t);if(!i)return null;let o=null,s=0;for(const r of e.children){if(!Ht(r))continue;const l=he.getRectangleByPoints(r.points),u=Jy(i,l);u>s&&(s=u,o=r)}return s>0?o:null}function ev(e,t){return e.children.filter(n=>{var o;return n.id===t.id||Ht(n)||!Zy(n)?!1:n.frameId===t.id?!0:((o=Um(e,n))==null?void 0:o.id)===t.id})}function tv(e,t){const n=e;return jn(n.width)&&jn(n.height)?n.width/n.height:jn(t.width)&&jn(t.height)?t.width/t.height:null}function nv(e){const t=e.toLowerCase();return t.includes("#video")||t.includes("#merged-video-")||[".mp4",".avi",".mov",".wmv",".flv",".webm",".mkv"].some(n=>t.includes(n))}function iv(e){return typeof Image>"u"||nv(e)?Promise.resolve(null):new Promise(t=>{const n=new Image;let i;const o=()=>{i&&clearTimeout(i),n.onload=null,n.onerror=null};n.referrerPolicy="no-referrer",n.onload=()=>{const s=n.naturalWidth||n.width,r=n.naturalHeight||n.height;o(),t(jn(s)&&jn(r)?s/r:null)},n.onerror=()=>{o(),t(null)},i=setTimeout(()=>{o(),t(null)},3e3),n.src=e})}async function ov(e){const t=e.url;return typeof t=="string"&&t.length>0?iv(t):null}function sv(e,t){if(!jn(e)||!jn(t.width)||!jn(t.height))return null;const n=t.width/t.height;let i,o;return e>n?(i=t.width,o=i/e):(o=t.height,i=o*e),{x:t.x+(t.width-i)/2,y:t.y+(t.height-o)/2,width:i,height:o}}function rv(e,t,n,i){const o=e.children.findIndex(d=>d.id===t.id);if(o===-1)return!1;const s=Tm(e,t);if(!s)return!1;const r=i||tv(t,s);if(!r)return!1;const l=he.getRectangleByPoints(n.points),u=sv(r,l);if(!u)return!1;const c=[[u.x,u.y],[u.x+u.width,u.y+u.height]];return ce.setNode(e,{points:c,frameId:n.id},[o]),!0}async function av(e,t,n){return rv(e,t,n,await ov(t))}async function lv(e,t){let n=0,i=0;for(const o of ev(e,t)){const s=Um(e,o);if(!s||!await av(e,o,s)){i+=1;continue}n+=1}return{fittedCount:n,skippedCount:i}}function Zc(e){return Gh(e).replace(/\u00a0/g," ").replace(/[ \t]+\n/g,`
|
|
19
|
+
`).replace(/\n{3,}/g,`
|
|
20
|
+
|
|
21
|
+
`).trim()}function Mn(e){if(!e)return"";if(typeof e=="string")return e;if(Array.isArray(e))return e.map(i=>Mn(i)).filter(Boolean).join(`
|
|
22
|
+
`);if(typeof e!="object")return"";const t=e,n=[];return typeof t.text=="string"&&n.push(t.text),Array.isArray(t.children)&&n.push(Mn(t.children)),Array.isArray(t.data)&&n.push(Mn(t.data)),n.filter(Boolean).join(`
|
|
23
|
+
`)}function cv(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 uv(e,t){if(Ct(t))return[t.title,t.body].filter(Boolean).join(`
|
|
24
|
+
|
|
25
|
+
`);if(Kt.isMindElement(e,t))return Mn(t.data);if(B.isDrawElement(t)){const i=t,o=Mn(i.text);if(o)return o;const s=Mn(i.data);if(s)return s;if(typeof i.textContent=="string")return i.textContent}const n=t;return Mn(n.text)||Mn(n.data)}function dv(e,t){if(t.length===0)return{text:"",source:null,title:""};if(t.length===1&&Ct(t[0])){const s=t[0],r=Zc(cv($h(s.id)));if(r)return{text:r,source:"selection",title:s.title||"卡片朗读",sourceId:`card:${s.id}:selection`,origin:{kind:"card",id:s.id}}}const n=t[0],i=t.length===1&&Ct(n)?n:null,o=Zc(t.map(s=>uv(e,s)).filter(Boolean).join(`
|
|
26
|
+
|
|
27
|
+
`));return{text:o,source:o?"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(s=>s.id).sort().join("|")}`,origin:i?{kind:"card",id:i.id}:void 0}}function Im(e){return!e.text||!e.sourceId?null:ld({elementId:e.sourceId,title:e.title,content:e.text,origin:e.origin||{kind:"card",id:e.sourceId}})}function mv(e,t){const n=Im(t);if(!n)return[];if(!e.children||!t.origin||t.origin.kind!=="card")return[n];const i=Wh(e,e.children.filter(Ct));return i.length<=1?[n]:i.map(o=>{var s;return o.id===((s=t.origin)==null?void 0:s.id)?n:ld({elementId:`card:${o.id}`,title:o.title||"卡片朗读",content:[o.title,o.body].filter(Boolean).join(`
|
|
28
|
+
|
|
29
|
+
`),origin:{kind:"card",id:o.id}})}).filter(o=>!!o)}const pv=m.lazy(()=>qe(()=>import("./tool-windows-BEnZdJqF.js").then(e=>e.pw),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.ImageEditor}))),fv=m.lazy(()=>qe(()=>import("./tool-windows-BEnZdJqF.js").then(e=>e.py),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.FrameSlideshow}))),hv=()=>{var X,v,H,O,pe,me;const e=ft(),n=Oe(e).filter(C=>!Yh(C)),{openDialog:i}=Lt(),{language:o,t:s}=_e(),[r,l]=m.useState(!1),u=m.useRef(r),[c,d]=m.useState(!1),[p,f]=m.useState(null),[h,x]=m.useState(!1),[b,g]=m.useState(""),[w,N]=m.useState(null),[y,D]=m.useState(!1),j=m.useRef(!1),[k,E]=m.useState(!1),[I,q]=m.useState(),[W,U]=m.useState({text:"",title:"",source:null}),[M,T]=m.useState(),[_,P]=m.useState(),A=m.useRef(null);Vy();const Q=Xh(),Ee=Q.mediaType==="reading"?Q.activeReadingSourceId:void 0,V=!!W.sourceId&&!!Ee&&Ee.startsWith(W.sourceId),$=m.useMemo(()=>n.map(C=>C.id).sort().join("|"),[n]),ue=V?Q.playing?o==="zh"?"暂停朗读":"Pause reading":o==="zh"?"继续朗读":"Resume reading":o==="zh"?"语音朗读":"Read aloud";m.useEffect(()=>{if(n.length===0||r){U(L=>L.text||L.source?{text:"",title:"",source:null}:L);return}const C=()=>{const L=dv(e,n);U(F=>F.text===L.text&&F.source===L.source&&F.title===L.title&&F.sourceId===L.sourceId?F:L)};return C(),document.addEventListener("selectionchange",C),()=>{document.removeEventListener("selectionchange",C)}},[e,$,r]);const Y=n.length>0&&!wo(e),{viewport:ae,selection:ne,children:ge}=e,{refs:ye,floatingStyles:ze}=ja({placement:"top",middleware:[Da(12),cd({padding:16}),Sa({fallbackPlacements:["bottom","right","left"]})]});let R={fill:"red"};if(Y&&!r){const C=n.some(re=>xv(e,re))&&!z.hasBeenTextEditing(e),L=n.some(re=>wv(e,re)),F=n.length>0&&n.every(re=>B.isDrawElement(re)&&B.isText(re)),G=n.some(re=>zm(e,re))&&!z.hasBeenTextEditing(e),J=n.some(re=>Nv(e,re))&&!z.hasBeenTextEditing(e),ee=n.some(re=>pn(re)),Z=n.some(re=>Ca(re)),te=n.some(re=>Ct(re)),le=n.length>1&&n.every(re=>Ct(re)||Gy(re)),Me=n.length>0&&!ee&&!Z&&!te&&n.some(re=>B.isDrawElement(re)&&B.isImage(re))&&!z.hasBeenTextEditing(e),$e=n.length===1&&pn(n[0])&&!z.hasBeenTextEditing(e),oe=!ee&&!Z&&!te&&!z.hasBeenTextEditing(e),Ce=n[0],ke=B.isDrawElement(Ce)&&B.isImage(Ce)&&((X=Ce.url)==null?void 0:X.startsWith("data:image/svg+xml")),Ne=n.length===1&&!ee&&!Z&&B.isDrawElement(n[0])&&B.isImage(n[0])&&!ke&&!z.hasBeenTextEditing(e),bt=Ne,Vt=Ne,jt=n.length>0&&!Z&&n.some(re=>B.isDrawElement(re)&&B.isImage(re)||pn(re)||An(re))&&!z.hasBeenTextEditing(e),kt=n.length>1&&!le&&!ee&&!Z&&n.every(re=>B.isDrawElement(re)&&B.isImage(re)||B.isDrawElement(re)&&Ea([re])||B.isDrawElement(re)&&B.isShapeElement(re)&&!B.isImage(re)||B.isDrawElement(re)&&B.isArrowLine(re)||B.isDrawElement(re)&&B.isVectorLine(re)||B.isDrawElement(re)&&B.isTable(re)||Ge.isFreehand(re)||Ze.isPenPath(re)||Kt.isMindElement(e,re))&&!z.hasBeenTextEditing(e),zt=n.filter(re=>pn(re)).length>1&&!z.hasBeenTextEditing(e),Zt=n.filter(re=>Ze.isPenPath(re)),Xn=Zt.length>0&&!z.hasBeenTextEditing(e);let Jt;if(Zt.length>0){const re=Zt[0].cornerRadius??0;Jt=Zt.every(pi=>(pi.cornerRadius??0)===re)?re:void 0}const je=n.filter(re=>Ge.isFreehand(re)),Be=(Zt.length>0||je.length>0)&&!z.hasBeenTextEditing(e);let we;const Te=[...Zt.map(re=>re.strokeWidth??2),...je.map(re=>re.strokeWidth??2)];if(Te.length>0){const re=Te[0];we=Te.every(pi=>pi===re)?re:void 0}const tt=n.length>0&&!Z&&!z.hasBeenTextEditing(e),He=n.length>0&&n.every(re=>Kt.isMindElement(e,re)),Re=n.length>1&&!He&&!z.hasBeenTextEditing(e),ut=n.length>1&&!He&&!z.hasBeenTextEditing(e),dt=n.length>1&&!z.hasBeenTextEditing(e)&&n.every(re=>yv(e,re)),Dt=n.length>0&&!z.hasBeenTextEditing(e)&&!!Ml(e,n),Tt=n.length===1&&Ct(n[0])&&!!n[0].noteId&&!z.hasBeenTextEditing(e),rt=n.length===1&&Ct(n[0])&&!n[0].noteId&&!z.hasBeenTextEditing(e),rn=le&&!z.hasBeenTextEditing(e),sr=n.length===1&&Ht(n[0])&&!z.hasBeenTextEditing(e),rr=n.length===1&&An(n[0])&&!z.hasBeenTextEditing(e),Oo=typeof window<"u"&&"speechSynthesis"in window&&!z.hasBeenTextEditing(e)&&W.text.length>0,Wi=n.length===1&&!z.hasBeenTextEditing(e)&&Ht(n[0]);R={...gv(e),hasFill:C,hasFontColor:L,hasFontSize:L,hasStroke:G,hasStrokeStyle:J,hasStrokeWidth:Be,strokeWidth:we,hasText:L,isTextOnly:F,hasAIImage:oe,hasAIVideo:Me,hasVideoFrame:$e,hasSplitImage:bt,hasImageEdit:Vt,hasDownloadable:jt,hasMergeable:kt,hasVideoMergeable:zt,hasCornerRadius:Xn,cornerRadius:Jt,hasSizeInput:tt,hasAlignment:Re,hasDistribute:ut,hasBoolean:dt,hasMindmapToPPT:Dt,hasCardEdit:Tt,hasCardSave:rt,hasContentMerge:rn,hasFramePlay:sr,hasAudioPlayer:rr,hasTextToSpeech:Oo,hasMediaFitPPT:Wi}}const fe=async(C,L)=>{if(!C)return;const F=C.title?`# ${C.title}
|
|
30
|
+
|
|
31
|
+
`:"",G=C.body||"",J=`${F}${G}`.trim();try{await Sg(J),se.success(o==="zh"?"已复制到剪贴板":"Copied to clipboard",2e3)}catch{se.error(o==="zh"?"复制失败":"Copy failed",2e3)}},Ae=async()=>{const C=Yy(e,n);if(C.length<2)return;const L=C[0],F=C.map((J,ee)=>ee===0&&Ct(L)&&Ct(J)?(J.body||"").trim():$y(J)).filter(Boolean).join(`
|
|
32
|
+
|
|
33
|
+
`).trim();if(!F){se.warning(o==="zh"?"没有可合并的内容":"No content to merge");return}const G=C.flatMap(J=>Ct(J)&&J.noteId?[J.noteId]:[]);try{const J=await Xy(G,F),ee=C.slice(1).map(te=>e.children.findIndex(le=>le.id===te.id)).filter(te=>te>=0).sort((te,le)=>le-te);for(const te of ee)ce.removeNode(e,[te]);let Z;if(Ct(L)){const te=e.children.findIndex(Me=>Me.id===L.id);if(te<0)throw new Error(o==="zh"?"合并目标不存在":"Merge target missing");const le={body:F};J&&(le.noteId=J),ce.setNode(e,le,[te]),Z=e.children[te]}else{const te=It(e,[L],!1),le=e.children.findIndex(Ce=>Ce.id===L.id);if(le<0)throw new Error(o==="zh"?"合并目标不存在":"Merge target missing");const Me=Math.max(te.width,320),$e=Math.max(te.height,180),oe={type:"card",id:`card-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`,body:F,fillColor:"#FA8C16",points:[[te.x,te.y],[te.x+Me,te.y+$e]],children:[],...J?{noteId:J}:{}};ce.insertNode(e,oe,[le]),ce.removeNode(e,[le+1]),Z=e.children[le]}Hn(e),Z&&ci(e,Z),se.success(o==="zh"?`已合并 ${C.length} 个元素`:`Merged ${C.length} elements`)}catch(J){console.error("[PopupToolbar] Failed to merge content:",J),se.error((J==null?void 0:J.message)||(o==="zh"?"合并内容失败":"Failed to merge content"))}},Fe=m.useCallback(()=>{var le;const C=n.length===1&&Ht(n[0])?n[0]:null;if(!C){i($t.aiImageGeneration);return}const L=he.getRectangleByPoints(C.points),F=C.pptMeta,G=Kh(F),J=F?((le=F.commonPrompt)==null?void 0:le.trim())||Zh(F.styleSpec):"",ee=Jh(e,C.id),Z=Qh(e,C.id),te=[];ee!=null&&ee.url&&te.push({url:ee.url,name:`${C.name||"frame"}-reference.png`}),Z!=null&&Z.url&&Z.url!==(ee==null?void 0:ee.url)&&te.push({url:Z.url,name:`${C.name||"frame"}-previous-reference.png`}),i($t.aiImageGeneration,{initialPrompt:eg(J,G),initialImages:te,initialAspectRatio:zy(L.width,L.height),initialWidth:L.width,initialHeight:L.height,targetFrameId:C.id,targetFrameDimensions:{width:L.width,height:L.height},autoInsertToCanvas:!0,pptSlideImage:!0,pptSlidePrompt:G,pptReplaceElementId:ee==null?void 0:ee.elementId})},[e,i,n]);return m.useEffect(()=>{if(Y){const C=n.length>0;if(!r&&C){let L,F;const G=Oe(e),J=It(e,G,!1),[ee,Z]=he.getPoints(J),te=Wo(e,oo(e,ee)),le=Wo(e,oo(e,Z));L=te[0]+(le[0]-te[0])/2,F=te[1],ye.setPositionReference({getBoundingClientRect(){return{width:1,height:1,x:L,y:F,top:F,left:L,right:L+1,bottom:F+1}}})}}},[ae,ne,ge,r]),m.useEffect(()=>{if(Y&&!r&&A.current){const C=A.current.getBoundingClientRect();T({top:C.top,left:C.left,width:C.width,height:C.height});const L=Oe(e);if(L.length>0){const F=It(e,L,!1),[G,J]=he.getPoints(F),ee=Wo(e,oo(e,G)),Z=Wo(e,oo(e,J));P({top:ee[1],left:ee[0],right:Z[0],bottom:Z[1],width:Z[0]-ee[0],height:Z[1]-ee[1]})}}},[Y,r,ze,e]),m.useEffect(()=>{j.current=y},[y]),m.useEffect(()=>{if(n.length===0&&!r){const C=setTimeout(()=>{D(!1)},50);return()=>clearTimeout(C)}},[n.length,r]),m.useEffect(()=>{u.current=r},[r]),m.useEffect(()=>{const{pointerUp:C,pointerMove:L}=e;return e.pointerMove=F=>{(ko(e)||yo(e))&&!u.current&&l(!0),L(F)},e.pointerUp=F=>{u.current&&(ko(e)||yo(e))&&l(!1),C(F)},()=>{e.pointerUp=C,e.pointerMove=L}},[e]),a.jsxDEV(a.Fragment,{children:[Y&&!r&&a.jsxDEV(Ye,{padding:1,className:K("popup-toolbar",Pt),ref:C=>{ye.setFloating(C),A.current=C},style:ze,"data-testid":"popup-toolbar",children:a.jsxDEV(ct.Row,{gap:1,children:[R.hasFill&&a.jsxDEV(cy,{board:e,currentColor:R.fill,title:s("toolbar.fillColor"),children:a.jsxDEV("label",{className:K("fill-label","color-label",{"color-white":R.fill&&vo(R.fill)&&od(ai(R.fill)),"color-mixed":R.fill===void 0,"color-gradient":R.fill&&_n(R.fill)&&R.fill.type==="gradient","color-image":R.fill&&_n(R.fill)&&R.fill.type==="image"}),style:R.fill===void 0?void 0:{background:vo(R.fill)?R.fill:_n(R.fill)?R.fill.type==="gradient"&&R.fill.gradient?tg(R.fill.gradient):R.fill.type==="solid"&&R.fill.solid?R.fill.solid.color:R.fill.type==="image"&&((v=R.fill.image)!=null&&v.imageUrl)?`url(${R.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:978,columnNumber:17},void 0)},3,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:972,columnNumber:15},void 0),R.hasStroke&&a.jsxDEV(Kw,{board:e,currentColor:R.strokeColor,title:s("toolbar.stroke"),hasStrokeStyle:R.hasStrokeStyle||!1,hasStrokeWidth:R.hasStrokeWidth||!1,currentStrokeWidth:R.strokeWidth,children:a.jsxDEV("label",{className:K("stroke-label","color-label",{"color-mixed":R.strokeColor===void 0}),style:{borderColor:R.strokeColor}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1028,columnNumber:17},void 0)},2,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1019,columnNumber:15},void 0),R.hasFontColor&&a.jsxDEV(Gw,{board:e,currentColor:(H=R.marks)==null?void 0:H.color,title:s("toolbar.fontColor"),fontColorIcon:a.jsxDEV(ng,{currentColor:(O=R.marks)==null?void 0:O.color},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1043,columnNumber:19},void 0)},0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1037,columnNumber:15},void 0),R.hasFontSize&&a.jsxDEV(Xw,{board:e,currentFontSize:R.fontSize,title:s("toolbar.fontSize")},1,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1048,columnNumber:15},void 0),R.hasCornerRadius&&a.jsxDEV(uy,{board:e,currentRadius:R.cornerRadius,title:s("toolbar.cornerRadius"),selectionRect:_},"corner-radius",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1058,columnNumber:15},void 0),R.hasText&&a.jsxDEV(py,{board:e,title:"Link"},4,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1067,columnNumber:15},void 0),R.isTextOnly&&a.jsxDEV(yy,{board:e,language:o,title:o==="zh"?"提示词":"Prompts"},"prompt",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1074,columnNumber:15},void 0),R.hasTextToSpeech&&a.jsxDEV(ie,{className:"text-to-speech",type:"icon",icon:V&&Q.playing?a.jsxDEV(sg,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1088,columnNumber:21},void 0):a.jsxDEV(rg,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1090,columnNumber:21},void 0),visible:!0,selected:V&&Q.playing,title:ue,"aria-label":ue,"data-track":"toolbar_click_text_to_speech",onPointerUp:()=>{if(!W.text)return;const C=Im(W);if(!C)return;const L=mv(e,W);if(V){Q.playing?Q.pausePlayback():Q.resumePlayback();return}Rl({source:C,queue:L.length>0?L:[C],queueTab:{queueId:og,queueName:ig}})}},"text-to-speech",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1082,columnNumber:15},void 0),R.hasText&&a.jsxDEV(ie,{className:"property-settings",type:"icon",icon:a.jsxDEV(ag,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1135,columnNumber:23},void 0),visible:!0,selected:y,title:s("propertyPanel.title"),"aria-label":s("propertyPanel.title"),"data-track":"toolbar_click_property_settings",onPointerUp:()=>{D(!y)}},"property-settings",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1131,columnNumber:15},void 0),R.hasAlignment&&a.jsxDEV(ky,{board:e,title:s("toolbar.alignment")},"alignment",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1148,columnNumber:15},void 0),R.hasDistribute&&a.jsxDEV(Ey,{board:e,title:s("toolbar.distribute")},"distribute",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1156,columnNumber:15},void 0),R.hasBoolean&&a.jsxDEV(jy,{board:e,title:s("toolbar.boolean")},"boolean",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1164,columnNumber:15},void 0),R.hasMindmapToPPT&&a.jsxDEV(ie,{className:"mindmap-to-ppt",type:"icon",icon:a.jsxDEV(lg,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1176,columnNumber:23},void 0),visible:!0,title:o==="zh"?"转换为PPT":"Convert to PPT","aria-label":o==="zh"?"转换为PPT":"Convert to PPT","data-track":"toolbar_click_mindmap_to_ppt",onPointerUp:async()=>{const C=Ml(e,n);if(!C)return;const L=se.loading(o==="zh"?"正在转换为PPT...":"Converting to PPT...",0);try{const{generatePPTFromMindmap:F}=await qe(async()=>{const{generatePPTFromMindmap:J}=await import("./tool-windows-BEnZdJqF.js").then(ee=>ee.pd);return{generatePPTFromMindmap:J}},__vite__mapDeps([0]),import.meta.url),G=await F(e,C);se.close(L),G.success?se.success(o==="zh"?`已生成 ${G.pageCount} 页PPT`:`Generated ${G.pageCount} PPT slides`):se.error(G.error||(o==="zh"?"转换失败":"Conversion failed"))}catch(F){se.close(L),se.error(F.message||(o==="zh"?"转换失败":"Conversion failed"))}}},"mindmap-to-ppt",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1172,columnNumber:15},void 0),R.hasCardEdit&&a.jsxDEV(ie,{className:"card-edit",type:"icon",icon:a.jsxDEV(zl,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1234,columnNumber:23},void 0),visible:!0,title:o==="zh"?"在知识库中编辑":"Edit in Knowledge Base","aria-label":o==="zh"?"在知识库中编辑":"Edit in Knowledge Base","data-track":"toolbar_click_card_edit",onPointerUp:async()=>{const C=n[0];C&&await Vm(e,C,o)}},"card-edit",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1230,columnNumber:15},void 0),R.hasCardSave&&a.jsxDEV(ie,{className:"card-save",type:"icon",icon:a.jsxDEV(ud,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1263,columnNumber:23},void 0),visible:!0,title:o==="zh"?"保存到知识库":"Save to Knowledge Base","aria-label":o==="zh"?"保存到知识库":"Save to Knowledge Base","data-track":"toolbar_click_card_save",onPointerUp:async()=>{const C=n[0];if(!C)return;await Pm(e,C,o)&&se.success(o==="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:1259,columnNumber:15},void 0),(R.hasCardEdit||R.hasCardSave)&&a.jsxDEV(ie,{className:"card-copy",type:"icon",icon:a.jsxDEV(cg,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1296,columnNumber:23},void 0),visible:!0,title:o==="zh"?"复制文本内容":"Copy text content","aria-label":o==="zh"?"复制文本内容":"Copy text content","data-track":"toolbar_click_card_copy",onPointerDown:({event:C})=>{C.stopPropagation()},onPointerUp:async()=>{await fe(n[0])}},"card-copy",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1292,columnNumber:15},void 0),R.hasContentMerge&&a.jsxDEV(ie,{className:"content-merge",type:"icon",icon:a.jsxDEV(Ll,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1316,columnNumber:23},void 0),visible:!0,title:o==="zh"?"合并内容":"Merge Content","aria-label":o==="zh"?"合并内容":"Merge Content","data-track":"toolbar_click_content_merge",onPointerUp:()=>{Ae()}},"content-merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1312,columnNumber:15},void 0),R.hasAIImage&&a.jsxDEV(ie,{className:"ai-image",type:"icon",icon:a.jsxDEV($s,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1331,columnNumber:23},void 0),visible:!0,title:o==="zh"?"AI图片生成":"AI Image Generation","aria-label":o==="zh"?"AI图片生成":"AI Image Generation","data-track":"toolbar_click_ai_image",onPointerUp:Fe},5,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1327,columnNumber:15},void 0),R.hasAIVideo&&a.jsxDEV(ie,{className:"ai-video",type:"icon",icon:a.jsxDEV(Gs,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1346,columnNumber:23},void 0),visible:!0,title:o==="zh"?"AI视频生成":"AI Video Generation","aria-label":o==="zh"?"AI视频生成":"AI Video Generation","data-track":"toolbar_click_ai_video",onPointerUp:()=>{i($t.aiVideoGeneration)}},6,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1342,columnNumber:15},void 0),R.hasVideoFrame&&a.jsxDEV(ie,{className:"video-frame",type:"icon",icon:a.jsxDEV(ug,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1363,columnNumber:23},void 0),visible:!0,title:o==="zh"?"视频帧选择":"Video Frame Selection","aria-label":o==="zh"?"视频帧选择":"Video Frame Selection","data-track":"toolbar_click_video_frame",onPointerUp:()=>{const C=n.find(L=>pn(L));C&&(f(C),d(!0))}},7,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1359,columnNumber:15},void 0),R.hasMediaFitPPT&&a.jsxDEV(ie,{className:"media-fit-ppt",type:"icon",icon:a.jsxDEV(dg,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1389,columnNumber:23},void 0),visible:!0,title:o==="zh"?"素材自适应PPT":"Fit media to PPT","aria-label":o==="zh"?"素材自适应PPT":"Fit media to PPT","data-track":"toolbar_click_media_fit_ppt",onPointerUp:()=>{(async()=>{const C=n[0];if(!Ht(C))return;const L=await lv(e,C);if(L.fittedCount>0){se.success(o==="zh"?`已自适应 ${L.fittedCount} 个素材`:`Fitted ${L.fittedCount} media item${L.fittedCount>1?"s":""}`);return}se.warning(o==="zh"?"未找到可自适应的PPT素材":"No media item can be fitted to PPT")})()}},"media-fit-ppt",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1385,columnNumber:15},void 0),R.hasSplitImage&&a.jsxDEV(ie,{className:"split-image",type:"icon",icon:a.jsxDEV(pg,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1430,columnNumber:23},void 0),visible:!0,title:o==="zh"?"智能拆图":"Smart Split","aria-label":o==="zh"?"智能拆图":"Smart Split","data-track":"toolbar_click_split_image",onPointerUp:async()=>{const C=n[0];if(B.isImage(C)&&C.url){const L=se.loading(o==="zh"?"正在分析图片...":"Analyzing image...",0);try{const F=It(e,[C],!1),G=await mg(e,C.url,{sourceRect:{x:F.x,y:F.y,width:F.width,height:F.height},scrollToResult:!0});se.close(L),G.success?se.success(o==="zh"?`成功拆分为 ${G.count} 张图片`:`Split into ${G.count} images`):se.warning(G.error||(o==="zh"?"拆图失败":"Split failed"))}catch(F){se.close(L),se.error(F.message||(o==="zh"?"拆图失败":"Split failed"))}}}},"split-image",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1426,columnNumber:15},void 0),R.hasImageEdit&&a.jsxDEV(ie,{className:"image-edit",type:"icon",icon:a.jsxDEV(zl,{size:15},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:o==="zh"?"编辑图片":"Edit Image","aria-label":o==="zh"?"编辑图片":"Edit Image","data-track":"toolbar_click_image_edit",onPointerUp:()=>{const C=n[0];B.isImage(C)&&C.url&&(g(C.url),N(C),x(!0))}},"image-edit",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1493,columnNumber:15},void 0),R.hasDownloadable&&a.jsxDEV(ie,{className:"download",type:"icon",icon:a.jsxDEV(gg,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1520,columnNumber:23},void 0),visible:!0,title:o==="zh"?"下载":"Download","aria-label":o==="zh"?"下载":"Download","data-track":"toolbar_click_download",onPointerUp:async()=>{const C=[];for(const G of n)B.isDrawElement(G)&&B.isImage(G)&&G.url?C.push({url:G.url,type:"image"}):pn(G)&&G.url?C.push({url:G.url,type:"video"}):An(G)&&G.audioUrl&&C.push({url:G.audioUrl,type:"audio",filename:fg(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(C.length===0){se.warning(o==="zh"?"没有可下载的内容":"No downloadable content");return}const L=C.length>1?o==="zh"?"正在打包下载...":"Packaging download...":o==="zh"?"正在下载...":"Downloading...",F=se.loading(L,0);try{const{unifiedCacheService:G}=await qe(async()=>{const{unifiedCacheService:te}=await import("./tool-windows-BEnZdJqF.js").then(le=>le.pb);return{unifiedCacheService:te}},__vite__mapDeps([0]),import.meta.url),{downloadFromBlob:J}=await qe(async()=>{const{downloadFromBlob:te}=await import("./tool-windows-BEnZdJqF.js").then(le=>le.pa);return{downloadFromBlob:te}},__vite__mapDeps([0]),import.meta.url),ee=[];for(const te of C)if(te.url.startsWith("blob:")){const le=te.url.indexOf("#"),Me=le>0?te.url.substring(le+1):null;if(Me&&Me.startsWith("merged-video-")){const $e=await G.getCachedBlob(Me);if($e){const oe=$e.type||"video/webm",Ce=oe.startsWith("video/mp4")?"mp4":oe.startsWith("video/webm")?"webm":"bin",ke=`merged-video-${Date.now()}.${Ce}`;J($e,ke);continue}else console.warn("[Download] Cache not found for taskId:",Me)}try{const oe=await(await fetch(te.url)).blob(),Ce=oe.type.startsWith("video/mp4")?"mp4":oe.type.startsWith("video/webm")?"webm":oe.type.startsWith("image/")?"png":"bin",ke=`${te.type}_${Date.now()}.${Ce}`;J(oe,ke)}catch($e){throw console.error("[Download] Failed to fetch blob URL:",$e),new Error(`Failed to download ${te.type}: Blob URL inaccessible`)}}else ee.push(te);let Z;ee.length>0&&(Z=await hg(ee)),se.close(F),Z!=null&&Z.openedCount&&Z.downloadedCount===0?se.success(o==="zh"?Z.openedCount>1?`已打开 ${Z.openedCount} 个链接,请在新标签页下载`:"资源不支持直接下载,已打开链接":Z.openedCount>1?`Opened ${Z.openedCount} links for download`:"Opened link for download"):se.success(C.length>1?o==="zh"?`已下载 ${C.length} 个文件`:`Downloaded ${C.length} files`:o==="zh"?"下载成功":"Download complete")}catch(G){se.close(F),se.error(G.message||(o==="zh"?"下载失败":"Download failed"))}}},"download",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1516,columnNumber:15},void 0),R.hasMergeable&&a.jsxDEV(ie,{className:"merge",type:"icon",icon:a.jsxDEV(Ll,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1705,columnNumber:23},void 0),visible:!0,title:o==="zh"?"合并为图片":"Merge to Image","aria-label":o==="zh"?"合并为图片":"Merge to Image","data-track":"toolbar_click_merge",onPointerUp:async()=>{const C=bg("图片合并"),L=se.loading(o==="zh"?"正在合并...":"Merging...",0);try{const F=n.filter(tt=>{const He=tt.url||tt.imageUrl;if(!He||He.startsWith("/")||He.startsWith("data:")||He.startsWith("blob:"))return!1;try{return new URL(He).origin!==location.origin}catch{return!1}});if(F.length>0){const tt=F.map(async ut=>{const dt=ut.url||ut.imageUrl;try{const Dt=new AbortController,Tt=setTimeout(()=>Dt.abort(),3e3),rt=await fetch(dt,{method:"HEAD",mode:"cors",signal:Dt.signal});return clearTimeout(Tt),rt.ok}catch{return!1}});if((await Promise.all(tt)).some(ut=>!ut)){se.close(L),se.warning(o==="zh"?"部分外部图片无法访问,请先下载到本地后再合并":"Some external images are inaccessible. Please download them locally first."),C();return}}const G=It(e,n,!1),J=[...n].sort((tt,He)=>{const Re=e.children.findIndex(dt=>dt.id===tt.id),ut=e.children.findIndex(dt=>dt.id===He.id);return Re-ut}),ee=await xg(e,{elements:J,fillStyle:"transparent",inlineStyleClassNames:".extend,.emojis,.text",ratio:2});if(!ee)throw new Error(o==="zh"?"合并失败:无法生成图片":"Merge failed: Unable to generate image");const Z=new Image;await new Promise((tt,He)=>{Z.onload=()=>tt(),Z.onerror=()=>He(new Error("Failed to load merged image")),Z.src=ee});const te=document.createElement("canvas");te.width=Z.width,te.height=Z.height;const le=te.getContext("2d");if(!le)throw new Error("Failed to get canvas context");le.drawImage(Z,0,0);const Me=Ng(te),{canvas:$e,left:oe,top:Ce,trimmedWidth:ke,trimmedHeight:Ne}=Me,bt=await new Promise((tt,He)=>{$e.toBlob(Re=>{Re?tt(Re):He(new Error("Failed to convert canvas to blob"))},"image/png")}),{unifiedCacheService:Vt}=await qe(async()=>{const{unifiedCacheService:tt}=await import("./tool-windows-BEnZdJqF.js").then(He=>He.pb);return{unifiedCacheService:tt}},__vite__mapDeps([0]),import.meta.url),jt=`merged-image-${Date.now()}`,kt=`/__aitu_cache__/image/${jt}.png`,In=kt;await Vt.cacheMediaFromBlob(In,bt,"image",{taskId:jt});const zt=2,Zt=G.x+oe/zt,Xn=G.y+Ce/zt,Jt=ke/zt,je=Ne/zt;Ar(e);const Be=e.children.length,we={url:kt,width:Jt,height:je};zs.insertImage(e,we,[Zt,Xn]);const Te=e.children[Be];Te&&(Hn(e),ci(e,Te)),se.close(L),C(),se.success(o==="zh"?`已将 ${n.length} 个元素合并为图片`:`Merged ${n.length} elements into image`)}catch(F){se.close(L),C(),se.error(F.message||(o==="zh"?"合并失败":"Merge failed"))}}},"merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1701,columnNumber:15},void 0),R.hasVideoMergeable&&a.jsxDEV(ie,{className:"video-merge",type:"icon",icon:a.jsxDEV(wg,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1929,columnNumber:23},void 0),visible:!0,title:o==="zh"?"合成视频":"Merge Videos","aria-label":o==="zh"?"合成视频":"Merge Videos","data-track":"toolbar_click_video_merge",onPointerUp:async()=>{const C=[];for(const F of n)pn(F)&&F.url&&C.push(F.url);if(C.length<2){se.warning(o==="zh"?"请选择至少2个视频":"Please select at least 2 videos");return}const L=se.loading(o==="zh"?"正在合成视频...":"Merging videos...",0);try{const F=await Ry(C,(G,J)=>{const ee={downloading:o==="zh"?"下载视频...":"Downloading videos...",decoding:o==="zh"?"解码视频...":"Decoding videos...",encoding:o==="zh"?"编码视频...":"Encoding videos...",finalizing:o==="zh"?"生成文件中...":"Finalizing..."}});se.close(L);try{const{quickInsert:G}=await qe(async()=>{const{quickInsert:J}=await import("./canvas-insertion-CKIoVZ9a.js");return{quickInsert:J}},__vite__mapDeps([0]),import.meta.url);await G("video",F.url),se.success(o==="zh"?`已合成并插入 ${C.length} 个视频`:`Merged and inserted ${C.length} videos`)}catch(G){console.error("[VideoMerge] Failed to insert video:",G);const J=F.blob.type||"video/webm",ee=J.startsWith("video/mp4")?"mp4":"webm",Z=new Blob([F.blob],{type:J}),te=URL.createObjectURL(Z),le=document.createElement("a");le.href=te,le.download=`merged-video-${Date.now()}.${ee}`,document.body.appendChild(le),le.click(),document.body.removeChild(le),setTimeout(()=>URL.revokeObjectURL(te),1e3),se.warning(o==="zh"?`视频已合成,但插入失败,已自动下载 (${ee.toUpperCase()})`:`Video merged but failed to insert, downloaded as ${ee.toUpperCase()}`)}}catch(F){se.close(L),se.error(F.message||(o==="zh"?"视频合成失败":"Video merge failed"))}}},"video-merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1925,columnNumber:15},void 0),a.jsxDEV(vy,{board:e,title:s("textEffect.layer")},"layer-control",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2062,columnNumber:13},void 0),R.hasSizeInput&&a.jsxDEV(my,{board:e},"size-input",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2067,columnNumber:36},void 0),R.hasFramePlay&&a.jsxDEV(ie,{className:"frame-play",type:"icon",icon:a.jsxDEV(Ol,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2074,columnNumber:23},void 0),visible:!0,title:o==="zh"?"播放幻灯片":"Play Slideshow","aria-label":o==="zh"?"播放幻灯片":"Play Slideshow","data-track":"toolbar_click_frame_play",onPointerUp:()=>{const C=n.find(L=>Ht(L));C&&(q(C.id),E(!0))}},"frame-play",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2070,columnNumber:15},void 0),R.hasAudioPlayer&&a.jsxDEV(ie,{className:"audio-player-play",type:"icon",icon:a.jsxDEV(Ol,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2095,columnNumber:23},void 0),visible:!0,title:o==="zh"?"在音乐播放器中播放":"Play in Music Player","aria-label":o==="zh"?"在音乐播放器中播放":"Play in Music Player","data-track":"toolbar_click_audio_player_play",onPointerUp:()=>{const C=n.find(L=>An(L));!C||!An(C)||Rl({source:{elementId:C.id,audioUrl:C.audioUrl,title:C.title,duration:C.duration,previewImageUrl:C.previewImageUrl,providerTaskId:C.providerTaskId,clipId:C.clipId,clipIds:C.clipIds},queue:Lr(e.children),queueTab:{queueId:md,queueName:dd}})}},"audio-player-play",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2091,columnNumber:15},void 0),a.jsxDEV(ie,{className:"duplicate",type:"icon",icon:a.jsxDEV(Eg,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2140,columnNumber:21},void 0),visible:!0,title:s("general.duplicate"),"aria-label":s("general.duplicate"),"data-track":"toolbar_click_duplicate",onPointerUp:()=>{if(n.length===1&&Ht(n[0])){const L=yg(e,n[0],o);L&&vg(e,L)}else kg(e)}},8,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2136,columnNumber:13},void 0),a.jsxDEV(ie,{className:"trash",type:"icon",icon:a.jsxDEV(bs,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2173,columnNumber:21},void 0),visible:!0,title:s("general.delete"),"aria-label":s("general.delete"),"data-track":"toolbar_click_delete",onPointerUp:()=>{Ar(e)}},9,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2169,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:969,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:957,columnNumber:9},void 0),c&&p&&a.jsxDEV(Ty,{visible:c,videoUrl:p.url||"",onClose:()=>{d(!1),f(null)},onConfirm:async(C,L)=>{try{p&&await Uy(e,p,C,L)}catch(F){console.error("Failed to insert video frame:",F)}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2188,columnNumber:9},void 0),h&&b&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(pv,{visible:h,imageUrl:b,showOverwrite:!!w,onClose:()=>{x(!1),g(""),N(null)},onOverwrite:async C=>{if(w)try{const{unifiedCacheService:L}=await qe(async()=>{const{unifiedCacheService:le}=await import("./tool-windows-BEnZdJqF.js").then(Me=>Me.pb);return{unifiedCacheService:le}},__vite__mapDeps([0]),import.meta.url),F=`edited-image-${Date.now()}`,G=`/__aitu_cache__/image/${F}.png`,ee=await(await fetch(C)).blob();await L.cacheMediaFromBlob(G,ee,"image",{taskId:F});const Z=new Image;await new Promise((le,Me)=>{Z.onload=()=>le(),Z.onerror=()=>Me(new Error("Failed to load edited image")),Z.src=C});const te=e.children.findIndex(le=>le.id===w.id);if(te>=0){const le=e.children[te],{newPoints:Me}=await pd({url:le.url,width:le.width,height:le.height,points:le.points||[[0,0],[0,0]]},Z.naturalWidth,Z.naturalHeight);ce.setNode(e,{url:G,width:Z.naturalWidth,height:Z.naturalHeight,points:Me},[te])}}catch(L){console.error("Failed to update image:",L),se.error(o==="zh"?"更新失败":"Update failed")}},onInsert:async C=>{try{const{unifiedCacheService:L}=await qe(async()=>{const{unifiedCacheService:Ce}=await import("./tool-windows-BEnZdJqF.js").then(ke=>ke.pb);return{unifiedCacheService:Ce}},__vite__mapDeps([0]),import.meta.url),F=`edited-image-${Date.now()}`,G=`/__aitu_cache__/image/${F}.png`,ee=await(await fetch(C)).blob();await L.cacheMediaFromBlob(G,ee,"image",{taskId:F});const Z=new Image;await new Promise((Ce,ke)=>{Z.onload=()=>Ce(),Z.onerror=()=>ke(new Error("Failed to load edited image")),Z.src=C});const te=Ao(e),le=w?w.points[1][0]-w.points[0][0]+20:0,Me=w?w.points[0][0]:te?te[0]+100:100,$e=w?w.points[0][1]:te?te[1]+100:100,oe=[Me+le,$e];await _a(e,G,oe,!1,{width:Z.naturalWidth,height:Z.naturalHeight},!1,!0)}catch(L){console.error("Failed to insert image:",L),se.error(o==="zh"?"插入失败":"Insert failed")}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2216,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2215,columnNumber:9},void 0),R.hasText&&a.jsxDEV(Cy,{board:e,isOpen:y,onClose:()=>D(!1),currentFontSize:R.fontSize,currentFontFamily:(pe=R.marks)==null?void 0:pe["font-family"],currentColor:(me=R.marks)==null?void 0:me.color,toolbarRect:M,selectionRect:_},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2367,columnNumber:9},void 0),k&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(fv,{visible:k,board:e,onClose:()=>{E(!1),q(void 0)},initialFrameId:I},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2382,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:2381,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:955,columnNumber:5},void 0)},qm=(e,t)=>{const n=hd(t);return{fill:Ys(t),strokeColor:Cg(e,t),fontSize:n["font-size"],marks:n}},Am=(e,t)=>{const n=hd(t);return{fill:Ys(t),strokeColor:_g(e,t),fontSize:n["font-size"],marks:n}},gv=e=>{const t=Oe(e);if(t.length===0)return{fill:void 0,strokeColor:void 0};if(t.length===1){const n=t[0];return Ct(n)?{fill:n.fillColor,strokeColor:void 0}:Kt.isMindElement(e,n)?qm(e,n):Ge.isFreehand(n)?Mm(e,n):Ze.isPenPath(n)?Rm(e,n):Am(e,n)}return bv(e,t)},bv=(e,t)=>{const n=t.map(l=>Ct(l)?{fill:l.fillColor,strokeColor:void 0}:Kt.isMindElement(e,l)?qm(e,l):Ge.isFreehand(l)?Mm(e,l):Ze.isPenPath(l)?Rm(e,l):B.isDrawElement(l)?Am(e,l):{fill:void 0,strokeColor:void 0}),i=n.map(l=>l.fill),o=n.map(l=>l.strokeColor),s=i.every(l=>l===i[0]),r=o.every(l=>l===o[0]);return{fill:s?i[0]:void 0,strokeColor:r?o[0]:void 0}},Mm=(e,t)=>({fill:Ys(t),strokeColor:gd(e,t)}),Rm=(e,t)=>({fill:Ys(t),strokeColor:t.strokeColor,cornerRadius:t.cornerRadius}),xv=(e,t)=>Ct(t)||Kt.isMindElement(e,t)||jg(e,t)?!0:Ge.isFreehand(t)?Dg(t.points):Ze.isPenPath(t)?t.closed:B.isDrawElement(t)?B.isShapeElement(t)&&!B.isImage(t)&&!B.isText(t)&&fd(t):!1,zm=(e,t)=>Kt.isMindElement(e,t)||Ge.isFreehand(t)||Ze.isPenPath(t)?!0:B.isDrawElement(t)?B.isShapeElement(t)&&!B.isImage(t)&&!B.isText(t)||B.isArrowLine(t)||B.isVectorLine(t)||B.isTable(t):!1,Nv=(e,t)=>zm(e,t),wv=(e,t)=>Kt.isMindElement(e,t)?!0:B.isDrawElement(t)?Ea([t]):!1,yv=(e,t)=>{if(Ze.isPenPath(t))return t.closed;if(Ge.isFreehand(t)){const n=t.points;if(!n||n.length<3)return!1;const i=n[0],o=n[n.length-1];return Math.hypot(o[0]-i[0],o[1]-i[1])<=10}return B.isDrawElement(t)?B.isImage(t)||B.isText(t)||B.isArrowLine(t)||B.isVectorLine(t)?!1:B.isShapeElement(t)&&fd(t):(Kt.isMindElement(e,t),!1)},or=yn.createContext({}),Jc=(e="",t=!1)=>`menu-item menu-item-base ${e} ${t?"menu-item--active":""}`.trim(),vv=(e,t)=>{const n=m.useContext(or);return Pg(e,i=>{var s;const o=new CustomEvent(Pa.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});t==null||t(o),o.defaultPrevented||(s=n.onSelect)==null||s.call(n,o)})},kv=({icon:e,shortcut:t,children:n})=>a.jsxDEV(a.Fragment,{children:[e&&a.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),a.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&&a.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),Le=({icon:e,onSelect:t,children:n,shortcut:i,className:o,selected:s,submenu:r,...l})=>{const[u,c]=m.useState(!1),d=m.useRef(),p=vv(l.onClick,t),f=a.jsxDEV(kv,{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),c(!0)},x=()=>{d.current=window.setTimeout(()=>{c(!1)},100)};return r?a.jsxDEV(it,{open:u,onOpenChange:c,placement:"right-start",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("button",{...l,type:"button",className:Jc(o,s||u),title:l.title??l["aria-label"],onClick:p,onMouseEnter:h,onMouseLeave:x,role:"menuitem","aria-haspopup":"true","aria-expanded":u,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),a.jsxDEV(st,{onMouseEnter:h,onMouseLeave:x,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):a.jsxDEV("button",{...l,onClick:p,type:"button",className:Jc(o,s),title:l.title??l["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)};Le.displayName="MenuItem";const Lm=({children:e})=>a.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);Lm.displayName="MenuItemBadge";Le.Badge=Lm;const Nn=({children:e,className:t="",onSelect:n,style:i,onClose:o})=>{const s=K(`menu ${t}`).trim(),r=m.useRef(null),l=m.useCallback(()=>r.current?Array.from(r.current.querySelectorAll("button.menu-item:not([disabled])")):[],[]),u=m.useCallback(c=>{var f,h,x,b;const d=l();if(d.length===0)return;const p=d.findIndex(g=>g===document.activeElement);switch(c.key){case"ArrowDown":{c.preventDefault();const g=p<d.length-1?p+1:0;(f=d[g])==null||f.focus();break}case"ArrowUp":{c.preventDefault();const g=p>0?p-1:d.length-1;(h=d[g])==null||h.focus();break}case"Home":{c.preventDefault(),(x=d[0])==null||x.focus();break}case"End":{c.preventDefault(),(b=d[d.length-1])==null||b.focus();break}case"Escape":{c.preventDefault(),o==null||o();break}case"Enter":case" ":{p>=0&&d[p]&&(c.preventDefault(),d[p].click());break}}},[l,o]);return m.useEffect(()=>{const c=l();c.length>0&&requestAnimationFrame(()=>{var d;(d=c[0])==null||d.focus()})},[l]),a.jsxDEV(or.Provider,{value:{onSelect:n},children:a.jsxDEV("div",{className:s,style:i,"data-testid":"menu",onKeyDown:u,ref:r,role:"menu",children:a.jsxDEV(Ye,{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)};Nn.displayName="Menu";const Om=()=>{const e=ft(),{t}=_e();return a.jsxDEV(Le,{"data-testid":"save-button","data-track":"toolbar_click_menu_save",onSelect:()=>{bd(e)},icon:a.jsxDEV(ud,{},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)};Om.displayName="SaveToFile";const Fm=()=>{const e=ft(),t=gm(),{t:n}=_e(),i=(o,s,r)=>{e.children=o,e.viewport=s||{zoom:1},e.theme={themeColorMode:Jn.default},t.update(e.children,{board:e,parent:e,parentG:z.getElementHost(e)}),be.fitViewport(e)};return a.jsxDEV(Le,{"data-testid":"open-button","data-track":"toolbar_click_menu_open",onSelect:()=>{Tg(e).then(o=>{o&&i(o.elements,o.viewport)})},icon:a.jsxDEV(Vg,{},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)};Fm.displayName="OpenFile";const Bm=()=>{const e=ft(),t=m.useContext(or),{t:n}=_e();return a.jsxDEV(Le,{icon:a.jsxDEV(Ug,{},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:()=>{rs(e,!0)},submenu:a.jsxDEV(Nn,{onSelect:()=>{var o;const i=new CustomEvent(Pa.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});(o=t.onSelect)==null||o.call(t,i)},children:[a.jsxDEV(Le,{"data-track":"toolbar_click_menu_export_png",onSelect:()=>{rs(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),a.jsxDEV(Le,{"data-track":"toolbar_click_menu_export_jpg",onSelect:()=>{rs(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)};Bm.displayName="SaveAsImage";const Hm=()=>{const{appState:e,setAppState:t}=Lt(),{t:n}=_e();return a.jsxDEV(Le,{icon:a.jsxDEV(bs,{},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)};Hm.displayName="CleanBoard";const Wm=({onOpenBackupRestore:e})=>{const{t}=_e();return a.jsxDEV(Le,{icon:a.jsxDEV(qg,{},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)};Wm.displayName="BackupRestore";const $m=({onOpenCloudSync:e})=>{const{t}=_e();return a.jsxDEV(Le,{icon:a.jsxDEV(Mg,{},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)};$m.displayName="CloudSync";const Gm=()=>{const{t:e}=_e();return a.jsxDEV(Le,{icon:a.jsxDEV(Ag,{},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)};Gm.displayName="DebugPanel";const Ym=()=>{const{appState:e,setAppState:t}=Lt(),{t:n}=_e();return a.jsxDEV(Le,{icon:a.jsxDEV(Rg,{},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)};Ym.displayName="Settings";const Xm=()=>{const{appState:e,setAppState:t}=Lt(),{t:n}=_e();return a.jsxDEV(Le,{icon:a.jsxDEV(zg,{},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)};Xm.displayName="QuickCommands";const Km=()=>{const{t:e}=_e();return a.jsxDEV(Le,{icon:a.jsxDEV(Lg,{},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)};Km.displayName="UserManual";const Zm=()=>{var n;const{t:e}=_e(),t=((n=document.querySelector('meta[name="app-version"]'))==null?void 0:n.getAttribute("content"))||"0.0.0";return a.jsxDEV(Le,{"data-track":"toolbar_click_menu_version",onSelect:()=>{},"aria-label":e("menu.version"),children:a.jsxDEV("span",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[a.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),a.jsxDEV("span",{style:{display:"flex",alignItems:"center",gap:"12px"},children:[a.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),a.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)};Zm.displayName="VersionInfo";async function Ev(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 Jm=()=>{const e=ft(),{t}=_e(),[n,i]=m.useState(!1),o=m.useCallback(async()=>{if(n)return;i(!0);const s=se.loading(t("menu.cleanInvalidLinks.scanning"),0);try{const r=[];for(let c=0;c<e.children.length;c++){const d=e.children[c],p=d.url;if(!p||typeof p!="string")continue;const f=B.isDrawElement(d)&&B.isImage(d),h=pn(d);(f||h)&&r.push({element:d,index:c,url:p})}const l=[];if(await Promise.all(r.map(async({element:c,index:d,url:p})=>{await Ev(p)||l.push({element:c,index:d})})),s.then(c=>{var d;return(d=c==null?void 0:c.close)==null?void 0:d.call(c)}),l.length===0){se.success(t("menu.cleanInvalidLinks.noInvalid")),i(!1);return}l.sort((c,d)=>d.index-c.index);for(const{index:c}of l)ce.removeNode(e,[c]);const u=t("menu.cleanInvalidLinks.success").replace("{count}",String(l.length));se.success(u)}catch(r){s.then(l=>{var u;return(u=l==null?void 0:l.close)==null?void 0:u.call(l)}),se.error(t("menu.cleanInvalidLinks.error")),console.error("[CleanInvalidLinks] Error:",r)}finally{i(!1)}},[e,t,n]);return a.jsxDEV(Le,{icon:a.jsxDEV(Ig,{},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:o,"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)};Jm.displayName="CleanInvalidLinks";const Qm=()=>{const{language:e,setLanguage:t,t:n}=_e(),i=m.useContext(or);return a.jsxDEV(Le,{icon:a.jsxDEV(xd,{},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:a.jsxDEV(Nn,{onSelect:()=>{var s;const o=new CustomEvent(Pa.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});(s=i.onSelect)==null||s.call(i,o)},children:[a.jsxDEV(Le,{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),a.jsxDEV(Le,{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)};Qm.displayName="LanguageSwitcherMenu";const Vo=()=>a.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);Vo.displayName="MenuSeparator";const sa=({children:e,buttonId:t,isVisible:n,visibleIndex:i=-1,disabled:o=!1})=>{const{t:s}=_e(),{hideButton:r,showButton:l,resetToDefault:u,visibleButtons:c,reorderButton:d}=Xs(),[p,f]=m.useState(!1),[h,x]=m.useState({x:0,y:0}),b=m.useRef(null),g=m.useRef(null);m.useEffect(()=>{const U=g.current;if(!U)return;const M=T=>{T.button===2&&T.stopPropagation()};return U.addEventListener("pointerdown",M,!0),()=>{U.removeEventListener("pointerdown",M,!0)}},[]);const w=m.useCallback(U=>{o||(U.preventDefault(),U.stopPropagation(),x({x:U.clientX,y:U.clientY}),f(!0))},[o]),N=m.useCallback(()=>{f(!1)},[]),y=m.useCallback(()=>{n?r(t):l(t),N()},[n,t,r,l,N]),D=m.useCallback(()=>{i>0&&d(i,i-1,!0),N()},[i,d,N]),j=m.useCallback(()=>{i>=0&&i<c.length-1&&d(i,i+1,!0),N()},[i,c.length,d,N]),k=m.useCallback(()=>{i>0&&d(i,0,!0),N()},[i,d,N]),E=m.useCallback(()=>{i>=0&&i<c.length-1&&d(i,c.length-1,!0),N()},[i,c.length,d,N]),I=m.useCallback(()=>{u(),N()},[u,N]);m.useEffect(()=>{if(!p)return;const U=T=>{b.current&&!b.current.contains(T.target)&&N()},M=T=>{T.key==="Escape"&&N()};return document.addEventListener("mousedown",U),document.addEventListener("keydown",M),()=>{document.removeEventListener("mousedown",U),document.removeEventListener("keydown",M)}},[p,N]),m.useEffect(()=>{if(!p||!b.current)return;const M=b.current.getBoundingClientRect(),T=window.innerWidth,_=window.innerHeight;let P=h.x,A=h.y;h.x+M.width>T&&(P=T-M.width-8),h.y+M.height>_&&(A=_-M.height-8),(P!==h.x||A!==h.y)&&x({x:P,y:A})},[p,h]);const q=n&&i>0,W=n&&i>=0&&i<c.length-1;return a.jsxDEV(a.Fragment,{children:[a.jsxDEV("div",{ref:g,onContextMenu:w,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),p&&Ws.createPortal(a.jsxDEV("div",{ref:b,className:"toolbar-context-menu",style:{position:"fixed",left:h.x,top:h.y,zIndex:Yt.DROPDOWN_PORTAL},children:a.jsxDEV(Nn,{children:[n&&a.jsxDEV(a.Fragment,{children:[a.jsxDEV(Le,{onSelect:D,disabled:!q,children:s("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),a.jsxDEV(Le,{onSelect:j,disabled:!W,children:s("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),a.jsxDEV(Le,{onSelect:k,disabled:!q,children:s("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),a.jsxDEV(Le,{onSelect:E,disabled:!W,children:s("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),a.jsxDEV(Vo,{},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),a.jsxDEV(Le,{onSelect:y,children:s(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),a.jsxDEV(Vo,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:226,columnNumber:15},void 0),a.jsxDEV(Le,{onSelect:I,children:s("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)},jv=({embedded:e=!1,iconMode:t=!1,onOpenBackupRestore:n,onOpenCloudSync:i})=>{const o=ft(),{t:s}=_e(),{isButtonVisible:r,visibleButtons:l}=Xs(),u=z.getBoardContainer(o),[c,d]=m.useState(!1),p=o.history.undos.length<=0,f=o.history.redos.length<=0,h=r("undo"),x=r("redo"),b=l.findIndex(N=>N.id==="undo"),g=l.findIndex(N=>N.id==="redo"),w=a.jsxDEV(ct.Row,{gap:1,children:[a.jsxDEV(it,{sideOffset:12,open:c,onOpenChange:N=>{d(N)},placement:e?"right-start":"bottom-start",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{type:"icon",visible:!0,selected:c,icon:a.jsxDEV(xd,{},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:c?void 0:s("general.menu"),tooltipPlacement:e?"right":"bottom","aria-label":s("general.menu"),"data-track":"toolbar_click_menu",onPointerDown:()=>{d(!c)}},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),a.jsxDEV(st,{container:u,style:{zIndex:Yt.POPOVER_APP},children:a.jsxDEV(Nn,{onSelect:()=>{d(!1)},onClose:()=>{d(!1)},children:[a.jsxDEV(Fm,{},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),a.jsxDEV(Om,{},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),a.jsxDEV(Bm,{},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),a.jsxDEV(Hm,{},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),a.jsxDEV(Jm,{},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),a.jsxDEV(Vo,{},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),a.jsxDEV(Qm,{},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),a.jsxDEV(Wm,{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),a.jsxDEV(Gm,{},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),a.jsxDEV($m,{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),a.jsxDEV(Ym,{},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),a.jsxDEV(Vo,{},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),a.jsxDEV(Xm,{},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),a.jsxDEV(Km,{},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),a.jsxDEV(Zm,{},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&&a.jsxDEV(sa,{buttonId:"undo",isVisible:!0,visibleIndex:b,children:a.jsxDEV(ie,{type:"icon",icon:a.jsxDEV(Nd,{},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:s("general.undo"),tooltipPlacement:e?"right":"bottom","aria-label":s("general.undo"),"data-track":"toolbar_click_undo",onPointerUp:()=>{o.undo()},disabled:p},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),x&&a.jsxDEV(sa,{buttonId:"redo",isVisible:!0,visibleIndex:g,children:a.jsxDEV(ie,{type:"icon",icon:a.jsxDEV(wd,{},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:s("general.redo"),tooltipPlacement:e?"right":"bottom","aria-label":s("general.redo"),"data-track":"toolbar_click_redo",onPointerUp:()=>{o.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?a.jsxDEV("div",{className:K("app-toolbar",{"app-toolbar--embedded":e,"app-toolbar--icon-only":t}),children:[w,a.jsxDEV(ie,{type:"icon",icon:a.jsxDEV(Og,{},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:s("menu.github"),tooltipPlacement:"right","aria-label":s("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):a.jsxDEV(Ye,{padding:1,className:K("app-toolbar",Pt,{"app-toolbar--embedded":e,"app-toolbar--icon-only":t}),children:w},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 Dv(e,t){return!e||e===On.solid?null:e===On.dashed?`${t*3},${t*2}`:e===On.dotted?`${t},${t*2}`:null}function Kn(e){return e!==void 0&&!isNaN(e[0])&&!isNaN(e[1])&&isFinite(e[0])&&isFinite(e[1])}class Sv extends yd{constructor(t){super(t)}canDraw(t){return t.anchors&&t.anchors.length>0}draw(t){const n=Va();n.classList.add("pen-path");const i=vd(t),o=t.cornerRadius||0,s=kd(i,t.closed,o),r=t.strokeWidth||2,l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",s),l.setAttribute("fill",Fg(t.fill)),l.setAttribute("stroke",t.strokeColor||"#000000"),l.setAttribute("stroke-width",String(r)),l.setAttribute("stroke-linecap","round"),l.setAttribute("stroke-linejoin","round");const u=Dv(t.strokeStyle,r);return u&&l.setAttribute("stroke-dasharray",u),n.appendChild(l),n}}function Cv(e,t){const n=e.point,i=Hg;if(e.type==="corner"){const o=document.createElementNS("http://www.w3.org/2000/svg","rect");return o.setAttribute("x",String(n[0]-i/2)),o.setAttribute("y",String(n[1]-i/2)),o.setAttribute("width",String(i)),o.setAttribute("height",String(i)),o.setAttribute("fill",t?"#1890ff":"#ffffff"),o.setAttribute("stroke","#1890ff"),o.setAttribute("stroke-width","1.5"),o.classList.add("pen-anchor"),o}else{const o=document.createElementNS("http://www.w3.org/2000/svg","circle");return o.setAttribute("cx",String(n[0])),o.setAttribute("cy",String(n[1])),o.setAttribute("r",String(i/2)),o.setAttribute("fill",t?"#1890ff":"#ffffff"),o.setAttribute("stroke","#1890ff"),o.setAttribute("stroke-width","1.5"),o.classList.add("pen-anchor"),o}}function Qc(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(Bg/2)),t.setAttribute("fill","#ffffff"),t.setAttribute("stroke","#1890ff"),t.setAttribute("stroke-width","1"),t.classList.add("pen-handle"),t}function eu(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 _v(e,t,n){const i="#ff4d4f";if(n.vertical&&n.verticalRefPoint){const s=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],s[1])-50)),r.setAttribute("x2",String(t[0])),r.setAttribute("y2",String(Math.max(t[1],s[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 l=document.createElementNS("http://www.w3.org/2000/svg","circle");l.setAttribute("cx",String(s[0])),l.setAttribute("cy",String(s[1])),l.setAttribute("r","3"),l.setAttribute("fill",i),l.setAttribute("opacity","0.6"),l.classList.add("pen-alignment-marker"),e.appendChild(l)}if(n.horizontal&&n.horizontalRefPoint){const s=n.horizontalRefPoint,r=document.createElementNS("http://www.w3.org/2000/svg","line");if(r.setAttribute("x1",String(Math.min(t[0],s[0])-50)),r.setAttribute("y1",String(t[1])),r.setAttribute("x2",String(Math.max(t[0],s[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 l=document.createElementNS("http://www.w3.org/2000/svg","circle");l.setAttribute("cx",String(s[0])),l.setAttribute("cy",String(s[1])),l.setAttribute("r","3"),l.setAttribute("fill",i),l.setAttribute("opacity","0.6"),l.classList.add("pen-alignment-marker"),e.appendChild(l)}}}function Pv(e,t,n="#1890ff",i=2,o){const s=Va();if(s.classList.add("pen-preview"),e.length===0)return s;if(t&&Kn(t)&&o&&(o.horizontal||o.vertical)&&_v(s,t,o),e.length>0){const r=kd(e,!1),l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",r),l.setAttribute("fill","none"),l.setAttribute("stroke",n),l.setAttribute("stroke-width",String(i)),l.setAttribute("stroke-linecap","round"),l.setAttribute("stroke-linejoin","round"),s.appendChild(l)}if(t&&Kn(t)&&e.length>0){const r=e[e.length-1];if(Kn(r.point)){const l=document.createElementNS("http://www.w3.org/2000/svg","line"),u=r.handleOut&&Kn(r.handleOut)?r.handleOut:r.point;l.setAttribute("x1",String(u[0])),l.setAttribute("y1",String(u[1])),l.setAttribute("x2",String(t[0])),l.setAttribute("y2",String(t[1])),l.setAttribute("stroke",n),l.setAttribute("stroke-width","1"),l.setAttribute("stroke-dasharray","5,5"),l.setAttribute("opacity","0.6"),s.appendChild(l)}}for(let r=0;r<e.length;r++){const l=e[r];if(!Kn(l.point))continue;if(l.handleIn&&Kn(l.handleIn)){const c=eu(l.point,l.handleIn);s.appendChild(c);const d=Qc(l.handleIn);s.appendChild(d)}if(l.handleOut&&Kn(l.handleOut)){const c=eu(l.point,l.handleOut);s.appendChild(c);const d=Qc(l.handleOut);s.appendChild(d)}const u=Cv(l,r===e.length-1);s.appendChild(u)}return s}const Vv=3,Tv=3,tu=8,ra=new WeakMap;function Rn(e){let t=ra.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}},ra.set(e,t)),t}function nu(e,t,n=!1){const i={horizontal:!1,vertical:!1,horizontalRefPoint:null,verticalRefPoint:null,referencePoint:null},o=[...e],s=n&&t.length>1?t.slice(0,-1):t;if(s.length===0)return{snappedPoint:e,alignment:i};let r=tu,l=null,u=null,c=tu,d=null,p=null;for(const f of s){const h=Math.abs(e[0]-f.point[0]),x=Math.abs(e[1]-f.point[1]);h<r&&(r=h,l=f.point[0],u=f.point),x<c&&(c=x,d=f.point[1],p=f.point)}return l!==null&&(o[0]=l,i.vertical=!0,i.verticalRefPoint=u),d!==null&&(o[1]=d,i.horizontal=!0,i.horizontalRefPoint=p),i.referencePoint=i.verticalRefPoint||i.horizontalRefPoint,{snappedPoint:o,alignment:i}}function Ii(e){const t=Rn(e);t.previewG&&t.previewG.remove(),ep(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 ep(e){z.getElementHost(e).querySelectorAll(".pen-preview").forEach(i=>i.remove())}function Zi(e){const t=Rn(e),n=z.getElementHost(e);t.previewG&&t.previewG.remove(),t.previewG=Pv(t.anchors,t.currentPoint,"#1890ff",2,t.alignment),n.appendChild(t.previewG)}function Cs(e,t=!1){const n=Rn(e),i=[...n.anchors];if(n.previewG&&(n.previewG.remove(),n.previewG=null),ep(e),i.length>=2){const o=Wg(e,i,t);n.isCreating=!1,n.anchors=[],n.isDraggingHandle=!1,n.dragStartPoint=null,n.currentPoint=null,ce.insertNode(e,o,[e.children.length]),t?(Hn(e),ci(e,o)):Hn(e)}else Ii(e)}function ro(e){return z.getPointer(e)===Pn.pen}function Uv(e){const t=Rn(e);t.isCreating&&(ro(e)||(t.anchors.length>=2?Cs(e,!1):Ii(e)))}const Iv=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o,keyDown:s,globalKeyDown:r}=e,l=c=>c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLElement&&c.isContentEditable,u=c=>{if(c.defaultPrevented||!ro(e)||l(c.target))return!1;const d=Rn(e);return d.isCreating?c.key==="Enter"?(Cs(e,!1),c.preventDefault(),!0):c.key==="Escape"?(Ii(e),c.preventDefault(),!0):Qe.isHotkey(["mod+z"],{byKey:!0})(c)||c.key==="Backspace"||c.key==="Delete"?(d.anchors.length>0&&(d.anchors.pop(),Zi(e)),d.anchors.length===0&&Ii(e),c.preventDefault(),!0):!1:!1};return e.pointerDown=c=>{if(Uv(e),!ro(e)){t(c);return}const d=Rn(e);let p=Mt(e,Rt(e,c.x,c.y));if(d.isCreating&&d.anchors.length>=Tv){const b={anchors:d.anchors};if($g(b,p)){Cs(e,!0);return}}if(d.anchors.length>0){const{snappedPoint:b}=nu(p,d.anchors,!1);p=b}d.isCreating=!0,d.isDraggingHandle=!0,d.dragStartPoint=p;const h=Or(e).defaultAnchorType,x={point:p,type:h};d.anchors.push(x),d.alignment={horizontal:!1,vertical:!1,horizontalRefPoint:null,verticalRefPoint:null,referencePoint:null},Zi(e)},e.pointerMove=c=>{if(!ro(e)){n(c);return}const d=Rn(e);let p=Mt(e,Rt(e,c.x,c.y));const f=d.isDraggingHandle,{snappedPoint:h,alignment:x}=nu(p,d.anchors,f);if(d.currentPoint=h,d.alignment=x,d.isDraggingHandle&&d.dragStartPoint&&d.anchors.length>0&&Gg(d.dragStartPoint,p)>Vv){const g=d.anchors.length-1,w=d.anchors[g];if(w.type!=="corner"){if(w.type==="smooth"||w.type==="symmetric"){const N=Yg(w.point,p);d.anchors[g]={...w,handleIn:N.handleIn,handleOut:N.handleOut}}}}d.isCreating&&Ta(e,"pen-preview",()=>{Zi(e)}),n(c)},e.pointerUp=c=>{if(!ro(e)){i(c);return}const d=Rn(e);d.isDraggingHandle=!1,d.dragStartPoint=null,Zi(e),i(c)},e.globalPointerUp=c=>{o(c)},e.globalKeyDown=c=>{u(c)||r(c)},e.keyDown=c=>{u(c)||s(c)},e};function wn(e){const t=ra.get(e);t!=null&&t.isCreating&&(t.anchors.length>=2?Cs(e,!1):Ii(e))}const Qa=[{icon:a.jsxDEV(Bi,{},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:nt.feltTipPen,titleKey:"toolbar.pen"},{icon:a.jsxDEV(Xg,{},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:Pn.pen,titleKey:"toolbar.vectorPen"},{icon:a.jsxDEV(Kg,{},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:nt.eraser,titleKey:"toolbar.eraser"},{icon:a.jsxDEV(Zg,{},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:nt.laserPointer,titleKey:"toolbar.laserPointer"}],qv=Ed(Qa,5),el=({onPointerUp:e})=>{const{t}=_e(),n=ft();return a.jsxDEV(Ye,{padding:1,children:a.jsxDEV(ct.Row,{gap:1,align:"center",children:a.jsxDEV(ct.Row,{gap:1,children:qv.map((i,o)=>i.map((s,r)=>a.jsxDEV(ie,{className:K({fillable:!1}),selected:n.pointer===s.pointer,type:"icon",size:"small",visible:!0,icon:s.icon,tooltip:t(s.titleKey),"aria-label":t(s.titleKey),onPointerDown:()=>{s.pointer!==Pn.pen&&wn(n),at(n,yt.dnd),be.updatePointerType(n,s.pointer)},onPointerUp:()=>{at(n,yt.drawing),e(s.pointer)}},`${o}-${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)},Av=[{icon:a.jsxDEV(jd,{},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:Ve.rectangle},{icon:a.jsxDEV(Dd,{},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:Ve.ellipse},{icon:a.jsxDEV(Sd,{},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:Ve.triangle},{icon:a.jsxDEV(Cd,{},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:Ua.terminal},{icon:a.jsxDEV(_d,{},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:Ve.diamond},{icon:a.jsxDEV(Pd,{},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:Ve.parallelogram},{icon:a.jsxDEV(Vd,{},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:Ve.roundRectangle}],Mv=Ed(Av,5),tl=({onPointerUp:e})=>{const t=ft();return a.jsxDEV(Ye,{padding:1,children:a.jsxDEV(ct.Col,{gap:1,children:Mv.map((n,i)=>a.jsxDEV(ct.Row,{gap:1,children:n.map((o,s)=>a.jsxDEV(ie,{className:K({fillable:!1}),type:"icon",size:"small",visible:!0,icon:o.icon,tooltip:o.title,"aria-label":o.title,onPointerDown:()=>{wn(t),at(t,yt.dnd),be.updatePointerType(t,o.pointer)},onPointerUp:()=>{at(t,yt.drawing),e(o.pointer)}},s,!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)},Rv=[{icon:a.jsxDEV(Jg,{},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:xn.straight},{icon:a.jsxDEV(Qg,{},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:xn.elbow},{icon:a.jsxDEV(eb,{},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:xn.curve}],nl=({onPointerUp:e})=>{const t=ft();return a.jsxDEV(Ye,{padding:1,children:a.jsxDEV(ct.Row,{gap:1,children:Rv.map((n,i)=>a.jsxDEV(ie,{className:K({fillable:!1}),type:"icon",size:"small",visible:!0,icon:n.icon,tooltip:n.title,"aria-label":n.title,onPointerDown:()=>{wn(t),at(t,yt.drawing),be.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)},tp=[{value:Jn.default,labelKey:"theme.default"},{value:Jn.colorful,labelKey:"theme.colorful"},{value:Jn.soft,labelKey:"theme.soft"},{value:Jn.retro,labelKey:"theme.retro"},{value:Jn.dark,labelKey:"theme.dark"},{value:Jn.starry,labelKey:"theme.starry"}],np=a.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:a.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),ms=e=>e===wt.hand||e===wt.selection||e===Eo,ip=a.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),iu={hand:{icon:a.jsxDEV(zd,{},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:wt.hand},selection:{icon:a.jsxDEV(Rd,{},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:wt.selection},lasso:{icon:a.jsxDEV(Md,{},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:Eo},mind:{icon:a.jsxDEV(xs,{},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:ui.mind},text:{icon:a.jsxDEV(Ra,{},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:Ve.text},freehand:{icon:a.jsxDEV(Bi,{},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:nt.feltTipPen,hasPopup:!0,popupKey:"freehand"},arrow:{icon:a.jsxDEV(Ma,{},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:xn.straight,hasPopup:!0,popupKey:"arrow"},shape:{icon:a.jsxDEV(Aa,{},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:Ve.rectangle,hasPopup:!0,popupKey:"shape"},image:{icon:a.jsxDEV(Hs,{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:a.jsxDEV(Bs,{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:a.jsxDEV($s,{},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:a.jsxDEV(Gs,{},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:a.jsxDEV(Ad,{},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:a.jsxDEV(qd,{},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:a.jsxDEV(Id,{},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:a.jsxDEV(Nd,{},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:a.jsxDEV(wd,{},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"}},zv=({embedded:e=!1})=>{const{t}=_e(),n=ft(),i=z.getBoardContainer(n),{hiddenButtons:o,showButton:s}=Xs(),[r,l]=m.useState(!1),[u,c]=m.useState(!1),d=m.useRef(null),p=m.useRef(null),f=m.useCallback(()=>{d.current&&(clearTimeout(d.current),d.current=null),p.current&&(clearTimeout(p.current),p.current=null)},[]),h=m.useCallback(()=>"ontouchstart"in window||navigator.maxTouchPoints>0,[]),x=m.useCallback(()=>{h()||(f(),c(!0),d.current=setTimeout(()=>{l(!0)},200))},[f,h]),b=m.useCallback(()=>{h()||(d.current&&(clearTimeout(d.current),d.current=null),p.current=setTimeout(()=>{c(!1),l(!1)},150))},[h]),g=m.useCallback(()=>{h()&&(l(y=>!y),c(!1))},[h]),w=m.useCallback(()=>{f(),c(!0)},[f]),N=m.useCallback(()=>{p.current=setTimeout(()=>{c(!1),l(!1)},150)},[]);return a.jsxDEV(it,{open:r,onOpenChange:y=>{!y&&(h()||!u)&&l(!1)},placement:e?"right-start":"bottom",sideOffset:12,children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("div",{onMouseEnter:x,onMouseLeave:b,onClick:g,children:a.jsxDEV(ie,{type:"icon",icon:a.jsxDEV(tb,{},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),a.jsxDEV(st,{container:i,style:{zIndex:Yt.POPOVER},onMouseEnter:w,onMouseLeave:N,children:a.jsxDEV(Lv,{hiddenButtons:o,showButton:s},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)},Lv=({hiddenButtons:e,showButton:t})=>{const{t:n}=_e(),i=ft(),o=z.getBoardContainer(i),{openDialog:s}=Lt(),r=Ia(),[l,u]=m.useState(null),[c,d]=m.useState(null),p=m.useRef({}),[f,h]=m.useState(null),x=m.useRef(null),[b,g]=m.useState(nt.feltTipPen),w=m.useCallback(()=>{u(null),d(null),Object.values(p.current).forEach(V=>{V&&clearTimeout(V)})},[]),N=m.useCallback(V=>{if(Object.values(p.current).forEach($=>{$&&clearTimeout($)}),c===V){d(null);return}l===V&&!c?u(null):(d(null),u(V))},[l,c]),y=m.useCallback(V=>{l&&!c||(p.current[V]&&clearTimeout(p.current[V]),Object.entries(p.current).forEach(([$,ue])=>{$!==V&&ue&&(clearTimeout(ue),p.current[$]=null)}),c&&c!==V?(u(V),d(V)):l||(p.current[V]=setTimeout(()=>{u(V),d(V)},300)))},[c,l]),D=m.useCallback(V=>{p.current[V]&&(clearTimeout(p.current[V]),p.current[V]=null),c===V&&(p.current[V]=setTimeout(()=>{u(null),d(null)},400))},[c]),j=m.useCallback(V=>{p.current[V]&&(clearTimeout(p.current[V]),p.current[V]=null)},[]),k=m.useCallback(V=>{c===V&&(u(null),d(null))},[c]),E=m.useCallback(V=>{wn(i),V===Ve.text?at(i,null):at(i,yt.dnd),be.updatePointerType(i,V),r(V)},[i,r]),I=m.useCallback(V=>{V!==Ve.text&&at(i,yt.drawing)},[i]),q=m.useCallback(V=>{const $=iu[V];if($){if($.hasPopup&&$.popupKey){N($.popupKey);return}switch(w(),wn(i),$.pointer&&(ms($.pointer)?(be.updatePointerType(i,$.pointer),r($.pointer)):(E($.pointer),I($.pointer))),V){case"image":Ks(i);break;case"ai-image":s($t.aiImageGeneration);break;case"ai-video":s($t.aiVideoGeneration);break;case"mermaid-to-drawnix":s($t.mermaidToDrawnix);break;case"markdown-to-drawnix":s($t.markdownToDrawnix);break;case"undo":i.undo();break;case"redo":i.redo();break}}},[i,s,E,I,w,r,N]),W=m.useCallback((V,$)=>{V.preventDefault(),V.stopPropagation(),h({buttonId:$,x:V.clientX,y:V.clientY})},[]),U=m.useCallback(()=>{h(null)},[]),M=m.useCallback(()=>{f&&(t(f.buttonId),U())},[f,t,U]);yn.useEffect(()=>{if(!f)return;const V=ue=>{x.current&&!x.current.contains(ue.target)&&U()},$=ue=>{ue.key==="Escape"&&U()};return document.addEventListener("mousedown",V),document.addEventListener("keydown",$),()=>{document.removeEventListener("mousedown",V),document.removeEventListener("keydown",$)}},[f,U]);const T=m.useCallback(V=>{switch(V){case"freehand":return a.jsxDEV(el,{onPointerUp:$=>{w(),r($),g($)}},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 a.jsxDEV(tl,{onPointerUp:$=>{w(),r($)}},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 a.jsxDEV(nl,{onPointerUp:$=>{w(),r($)}},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 a.jsxDEV(Nn,{children:tp.map($=>{const ue=i.theme.themeColorMode===$.value;return a.jsxDEV(Le,{icon:ue?np:ip,"data-track":`toolbar_click_theme_${$.value}`,onSelect:()=>{be.updateThemeColor(i,$.value),w()},"aria-label":n($.labelKey),selected:ue,children:n($.labelKey)},$.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,w,r,n]),_=m.useMemo(()=>{const V=Qa.find($=>$.pointer===b);return(V==null?void 0:V.icon)||a.jsxDEV(Bi,{},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]),[P,A]=m.useState(!1),Q=m.useCallback(()=>{var V;return a.jsxDEV("div",{className:"more-tools-panel__zoom-row",onContextMenu:$=>W($,"zoom"),children:a.jsxDEV(ct.Row,{gap:1,children:[a.jsxDEV(ie,{type:"button",icon:a.jsxDEV(Td,{},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:()=>{be.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),a.jsxDEV(it,{sideOffset:12,open:P,onOpenChange:$=>{A($)},placement:"right-start",children:[a.jsxDEV(Et,{content:n("zoom.fit"),showArrow:!1,children:a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("div",{"aria-label":n("zoom.fit"),"data-track":"toolbar_click_zoom_menu",className:`zoom-menu-trigger ${P?"active":""}`,onPointerUp:()=>{A(!P)},children:[Number(((((V=i==null?void 0:i.viewport)==null?void 0:V.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),a.jsxDEV(st,{container:o,style:{zIndex:Yt.POPOVER+1},children:a.jsxDEV(Nn,{onSelect:()=>{A(!1)},children:[a.jsxDEV(Le,{"data-track":"toolbar_click_zoom_fit",onSelect:()=>{be.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),a.jsxDEV(Le,{"data-track":"toolbar_click_zoom_fit_frame",onSelect:()=>{qa(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),a.jsxDEV(Le,{"data-track":"toolbar_click_zoom_100",onSelect:()=>{be.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),a.jsxDEV(ie,{type:"button",icon:a.jsxDEV(Ud,{},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:()=>{be.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,o,W,n,P]),Ee=m.useCallback(V=>{var ye,ze,R,fe;if(V==="zoom")return Q();const $=iu[V];if(!$)return null;const ue=n($.titleKey),Y=V==="freehand"?_:$.icon,ae=V==="undo"&&(((ze=(ye=i.history)==null?void 0:ye.undos)==null?void 0:ze.length)??0)<=0,ne=V==="redo"&&(((fe=(R=i.history)==null?void 0:R.redos)==null?void 0:fe.length)??0)<=0,ge=ae||ne;if($.hasPopup&&$.popupKey){const Ae=$.popupKey;return a.jsxDEV("div",{className:"more-tools-panel__item",onContextMenu:Fe=>W(Fe,V),children:a.jsxDEV(it,{open:l===Ae,sideOffset:2,onOpenChange:Fe=>{Fe||w()},placement:"right-start",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("div",{onMouseEnter:()=>y(Ae),onMouseLeave:()=>D(Ae),children:a.jsxDEV(ie,{type:"icon",icon:Y,tooltip:ue,tooltipPlacement:"left","aria-label":ue,visible:!0,selected:l===Ae,"data-track":`toolbar_click_${V}`,onPointerUp:()=>q(V)},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),a.jsxDEV(st,{container:o,style:{zIndex:Yt.POPOVER+1},onMouseEnter:()=>j(Ae),onMouseLeave:()=>k(Ae),children:T(Ae)},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)},V,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:667,columnNumber:9},void 0)}return a.jsxDEV("div",{className:"more-tools-panel__item",onContextMenu:Ae=>W(Ae,V),children:a.jsxDEV(ie,{type:"icon",icon:Y,tooltip:ue,tooltipPlacement:"right","aria-label":ue,visible:!0,selected:!1,disabled:ge,"data-track":`toolbar_click_${V}`,onPointerUp:()=>q(V)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:720,columnNumber:9},void 0)},V,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:715,columnNumber:7},void 0)},[n,i,o,l,_,q,W,y,D,j,k,T,w,Q]);return e.length===0?a.jsxDEV("div",{className:"more-tools-panel",children:[a.jsxDEV("div",{className:"more-tools-panel__header",children:a.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),a.jsxDEV("div",{className:"more-tools-panel__empty",children:a.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):a.jsxDEV(a.Fragment,{children:[a.jsxDEV("div",{className:"more-tools-panel",children:[a.jsxDEV("div",{className:"more-tools-panel__header",children:a.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),a.jsxDEV("div",{className:"more-tools-panel__content",children:e.map(V=>Ee(V.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),a.jsxDEV("div",{className:"more-tools-panel__footer",children:a.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&&Ws.createPortal(a.jsxDEV("div",{ref:x,className:"toolbar-context-menu",style:{position:"fixed",left:f.x,top:f.y,zIndex:Yt.DROPDOWN_PORTAL},children:a.jsxDEV(Nn,{children:a.jsxDEV(Le,{onSelect:M,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)},Ov=m.lazy(()=>qe(()=>import("./tool-windows-BEnZdJqF.js").then(e=>e.px),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),Fv=m.lazy(()=>qe(()=>import("./tool-windows-BEnZdJqF.js").then(e=>e.pz),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MinimizedToolsBar})));var op=(e=>(e.shape="shape",e.arrow="arrow",e.freehand="freehand",e.theme="theme",e))(op||{});const ou=[{icon:a.jsxDEV(zd,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:123,columnNumber:11},void 0),pointer:wt.hand,titleKey:"toolbar.hand",visibilityKey:"hand"},{icon:a.jsxDEV(Rd,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:129,columnNumber:11},void 0),pointer:wt.selection,titleKey:"toolbar.selection",visibilityKey:"selection"},{icon:a.jsxDEV(Md,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:135,columnNumber:11},void 0),pointer:Eo,titleKey:"toolbar.lasso",visibilityKey:"lasso"},{icon:a.jsxDEV(xs,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:141,columnNumber:11},void 0),pointer:ui.mind,titleKey:"toolbar.mind",visibilityKey:"mind"},{icon:a.jsxDEV(Ra,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:147,columnNumber:11},void 0),pointer:Ve.text,titleKey:"toolbar.text",visibilityKey:"text"},{icon:a.jsxDEV(Hs,{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:a.jsxDEV(Bs,{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:a.jsxDEV($s,{},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:a.jsxDEV(Gs,{},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:a.jsxDEV(xs,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:177,columnNumber:11},void 0),pointer:ui.mind,titleKey:"toolbar.mind",visibilityKey:"mind"},{icon:a.jsxDEV(Bi,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:183,columnNumber:11},void 0),pointer:nt.feltTipPen,titleKey:"toolbar.pen",key:"freehand",visibilityKey:"freehand"},{icon:a.jsxDEV(Ma,{},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:xn.straight,visibilityKey:"arrow"},{icon:a.jsxDEV(Aa,{},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:Ve.rectangle,visibilityKey:"shape"},{icon:a.jsxDEV(Ad,{},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:a.jsxDEV(qd,{},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:a.jsxDEV(Id,{},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"}],Bv=e=>Object.keys(xn).includes(e.pointer),Hv=e=>Object.keys(Ve).includes(e.pointer)||Object.keys(Ua).includes(e.pointer),Wv=({embedded:e=!1,iconMode:t=!1,onOpenMediaLibrary:n,minimizedToolsBarEnabled:i=!1,onEnableToolWindows:o})=>{const s=ft(),{appState:r,openDialog:l}=Lt(),{t:u}=_e(),c=Ia(),d=z.getBoardContainer(s),{visibleButtons:p,loading:f,reorderButton:h}=Xs(),{getDragProps:x}=nb({items:p,getId:v=>v.id,onReorder:(v,H)=>{h(v,H,!0)},enabled:e}),[b,g]=m.useState({freehand:!1,arrow:!1,shape:!1,theme:!1}),[w,N]=m.useState(null),y=m.useRef({freehand:null,arrow:null,shape:null,theme:null}),[D,j]=m.useState(ou.find(v=>v.key==="freehand")),[k,E]=m.useState(!1),I=m.useCallback(async v=>{try{v.type===Cn.IMAGE?await _a(s,v.url):v.type===Cn.VIDEO?await Ld(s,v.url):v.type===Cn.AUDIO&&await wa(s,v.url,{title:v.name,duration:v.duration,previewImageUrl:v.thumbnail,prompt:v.prompt,mv:v.modelName,clipId:v.clipId,providerTaskId:v.providerTaskId}),se.success("素材已插入到画板")}catch(H){console.error("Failed to insert asset:",H),se.error("插入素材失败")}},[s]),q=m.useCallback(()=>{if(n){n({mode:Bn.SELECT,onSelect:I,selectButtonText:"插入"});return}E(!0)},[I,n]),W=m.useCallback(()=>{E(!1)},[]),U=()=>{g({freehand:!1,arrow:!1,shape:!1,theme:!1}),N(null),Object.values(y.current).forEach(v=>{v&&clearTimeout(v)})},M=v=>{N(null),Object.values(y.current).forEach(H=>{H&&clearTimeout(H)}),g({freehand:!1,arrow:!1,shape:!1,theme:!1,[v]:!0})},T=v=>{y.current[v]&&clearTimeout(y.current[v]),Object.entries(y.current).forEach(([H,O])=>{H!==v&&O&&(clearTimeout(O),y.current[H]=null)}),w&&w!==v?(g(H=>({...H,[w]:!1,[v]:!0})),N(v)):b[v]||(y.current[v]=setTimeout(()=>{g(H=>({...H,[v]:!0})),N(v)},300))},_=v=>{y.current[v]&&(clearTimeout(y.current[v]),y.current[v]=null),w===v&&(y.current[v]=setTimeout(()=>{g(H=>({...H,[v]:!1})),N(null)},200))},P=v=>{y.current[v]&&(clearTimeout(y.current[v]),y.current[v]=null)},A=v=>{w===v&&(g(H=>({...H,[v]:!1})),N(null))},Q=v=>{wn(s),v===Ve.text?(at(s,null),be.updatePointerType(s,v),c(v)):(at(s,yt.dnd),be.updatePointerType(s,v),c(v))},Ee=v=>{v!==Ve.text&&at(s,yt.drawing)},V=()=>Object.values(b).some(v=>v),$=v=>z.isPointer(s,v.pointer)&&!V(),ue=v=>z.isInPointer(v,[nt.feltTipPen,nt.eraser,nt.laserPointer,Pn.pen]),Y=v=>{U(),wn(s),v.pointer&&!ms(v.pointer)?Ee(v.pointer):v.pointer&&ms(v.pointer)&&(be.updatePointerType(s,v.pointer),c(v.pointer)),v.key==="image"?Ks(s):v.key==="media-library"?q():v.key==="ai-image"?l($t.aiImageGeneration):v.key==="ai-video"?l($t.aiVideoGeneration):v.key==="mermaid-to-drawnix"?l($t.mermaidToDrawnix):v.key==="markdown-to-drawnix"&&l($t.markdownToDrawnix)},ae=(v,H,O)=>{const pe=()=>{switch(O){case"freehand":return a.jsxDEV(el,{onPointerUp:F=>{U(),c(F),j(Qa.find(G=>G.pointer===F))}},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 a.jsxDEV(tl,{onPointerUp:F=>{U(),c(F)}},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 a.jsxDEV(nl,{onPointerUp:F=>{U(),c(F)}},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 a.jsxDEV(Nn,{children:tp.map(F=>{const G=s.theme.themeColorMode===F.value;return a.jsxDEV(Le,{icon:G?np:ip,"data-track":`toolbar_click_theme_${F.value}`,onSelect:()=>{be.updateThemeColor(s,F.value),U()},"aria-label":u(F.labelKey),selected:G,children:u(F.labelKey)},F.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)}},me=()=>{const F=b[O],G=Object.entries(b).some(([J,ee])=>J!==O&&ee);switch(O){case"freehand":return F||ue(s)&&!G;case"shape":return F||Hv(s)&&!z.isPointer(s,Ve.text);case"arrow":return F||Bv(s);default:return F}},C=O==="freehand"?D.icon:v.icon,L=O==="freehand"?D.titleKey?u(D.titleKey):"Freehand":v.titleKey?u(v.titleKey):"";return a.jsxDEV(it,{open:b[O],sideOffset:12,onOpenChange:F=>{F||U()},placement:e?"right-start":"bottom",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("div",{onMouseEnter:()=>T(O),onMouseLeave:()=>_(O),children:a.jsxDEV(ie,{type:"icon",visible:!0,selected:me(),icon:C,tooltip:L,"aria-label":L,"data-track":`toolbar_click_${O}`,onPointerDown:()=>{M(O),O==="freehand"&&D.pointer&&Q(D.pointer)},onPointerUp:()=>{O==="freehand"&&Ee()}},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),a.jsxDEV(st,{container:d,style:{zIndex:Yt.POPOVER},onMouseEnter:()=>P(O),onMouseLeave:()=>A(O),children:pe()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:652,columnNumber:9},void 0)]},H,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:611,columnNumber:7},void 0)},ne=(v,H)=>a.jsxDEV(ie,{type:"radio",icon:v.icon,checked:$(v),tooltip:v.titleKey?u(v.titleKey):"",tooltipPlacement:e?"right":"bottom","aria-label":v.titleKey?u(v.titleKey):"","data-track":`toolbar_click_${v.pointer||v.key}`,onPointerDown:()=>{v.pointer&&!ms(v.pointer)&&Q(v.pointer)},onPointerUp:()=>{Y(v)}},H,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:667,columnNumber:7},void 0),ge=m.useMemo(()=>{const v=new Map;return ou.forEach(H=>{H.visibilityKey&&v.set(H.visibilityKey,H)}),v},[]),[ye,ze]=m.useState(!1),R=m.useCallback(v=>{var O;const H=e?ct.Col:ct.Row;return a.jsxDEV("div",{className:K("creation-toolbar__zoom-inline",{"creation-toolbar__zoom-inline--vertical":e}),children:a.jsxDEV(H,{gap:0,children:[a.jsxDEV(ie,{type:"button",icon:a.jsxDEV(Td,{},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:u("zoom.out"),tooltipPlacement:e?"right":"bottom","aria-label":u("zoom.out"),"data-track":"toolbar_click_zoom_out",onPointerUp:()=>{be.updateZoom(s,s.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),a.jsxDEV(it,{sideOffset:12,open:ye,onOpenChange:pe=>{ze(pe)},placement:e?"right-start":"bottom",children:[a.jsxDEV(Et,{content:u("zoom.fit"),showArrow:!1,children:a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("div",{"aria-label":u("zoom.fit"),"data-track":"toolbar_click_zoom_menu",className:K("zoom-menu-trigger",{active:ye}),onPointerUp:()=>{ze(!ye)},children:[Number(((((O=s==null?void 0:s.viewport)==null?void 0:O.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),a.jsxDEV(st,{container:d,style:{zIndex:Yt.POPOVER},children:a.jsxDEV(Nn,{onSelect:()=>{ze(!1)},children:[a.jsxDEV(Le,{"data-track":"toolbar_click_zoom_fit",onSelect:()=>{be.fitViewport(s)},"aria-label":u("zoom.fit"),shortcut:"Cmd+Shift+=",children:u("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),a.jsxDEV(Le,{"data-track":"toolbar_click_zoom_fit_frame",onSelect:()=>{qa(s)},"aria-label":u("zoom.fitFrame"),children:u("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),a.jsxDEV(Le,{"data-track":"toolbar_click_zoom_100",onSelect:()=>{be.updateZoom(s,1)},"aria-label":u("zoom.100"),shortcut:"Cmd+0",children:u("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),a.jsxDEV(ie,{type:"button",icon:a.jsxDEV(Ud,{},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:u("zoom.in"),tooltipPlacement:e?"right":"bottom","aria-label":u("zoom.in"),"data-track":"toolbar_click_zoom_in",onPointerUp:()=>{be.updateZoom(s,s.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-${v}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:712,columnNumber:9},void 0)},[s,d,e,u,ye]),fe=m.useCallback((v,H)=>{if(v==="zoom")return R(H);const O=ge.get(v);return!O||r.isMobile&&O.pointer===wt.hand?null:O.key&&Object.values(op).includes(O.key)?ae(O,H,O.key):ne(O,H)},[ge,r.isMobile,ae,ne,R]),Ae=m.useCallback((v,H,O=!0,pe=-1)=>{const me=fe(v,H);if(!me)return null;const C=x(v,H);return a.jsxDEV(sa,{buttonId:v,isVisible:O,visibleIndex:pe,children:a.jsxDEV("div",{className:K("toolbar-button-wrapper",{"toolbar-button-wrapper--dragging":C["data-dragging"],"toolbar-button-wrapper--drag-over":C["data-drag-over"],"toolbar-button-wrapper--drag-before":C["data-drag-position"]==="before","toolbar-button-wrapper--drag-after":C["data-drag-position"]==="after"}),"data-button-id":v,...C,children:me},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:873,columnNumber:11},void 0)},`ctx-${v}-${H}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:867,columnNumber:9},void 0)},[fe,x]),Fe=a.jsxDEV(ct.Row,{gap:1,children:[!f&&p.map((v,H)=>e?Ae(v.id,H,!0,H):fe(v.id,H)),a.jsxDEV(zv,{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&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(Fv,{ensureToolWindowsEnabled:o},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),X=k?a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(Ov,{isOpen:k,onClose:W,mode:Bn.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?a.jsxDEV(a.Fragment,{children:[a.jsxDEV("div",{className:K("draw-toolbar",{"draw-toolbar--embedded":e,"draw-toolbar--icon-only":t}),children:Fe},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:928,columnNumber:9},void 0),X]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:927,columnNumber:7},void 0):a.jsxDEV(a.Fragment,{children:[a.jsxDEV(Ye,{padding:1,className:K("draw-toolbar",Pt,{"draw-toolbar--embedded":e,"draw-toolbar--icon-only":t}),children:Fe},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:943,columnNumber:7},void 0),X]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:942,columnNumber:5},void 0)},su="https://tuziai.oss-cn-shenzhen.aliyuncs.com/aitu/AiTu.png",$v="https://tuziai.oss-cn-shenzhen.aliyuncs.com/linkme.png",Gv=()=>{const e=ft(),t=z.getBoardContainer(e),[n,i]=m.useState(!1);return m.useEffect(()=>{const o=new Image;o.src=su;const s=new Image;s.src=$v},[]),a.jsxDEV(it,{placement:"right-end",sideOffset:12,open:n,onOpenChange:i,children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{type:"icon",icon:a.jsxDEV(ib,{},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:o=>{o.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),a.jsxDEV(st,{container:t,style:{zIndex:Yt.POPOVER_FEEDBACK},children:a.jsxDEV("div",{className:"feedback-qrcode-content",children:a.jsxDEV("div",{className:"feedback-qrcode-grid",children:a.jsxDEV("div",{className:"feedback-qrcode-item",children:[a.jsxDEV("img",{src:su,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),a.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)},sp="aitu-task-queue-failed-ack-at";function Yv(){if(typeof window>"u")return 0;try{const e=Number(window.localStorage.getItem(sp));return Number.isFinite(e)?e:0}catch{return 0}}function Xv(e){typeof window>"u"||window.localStorage.setItem(sp,String(e))}function Kv(e){return e.completedAt||e.updatedAt||e.createdAt||0}const Zv=({projectDrawerOpen:e,onProjectDrawerToggle:t,toolboxDrawerOpen:n=!1,onToolboxDrawerToggle:i,taskPanelExpanded:o,onTaskPanelToggle:s})=>{const{activeTasks:r,completedTasks:l,failedTasks:u}=ob(),[c,d]=m.useState(Yv),p=m.useMemo(()=>u.reduce((b,g)=>Math.max(b,Kv(g)),0),[u]),f=p>c;m.useEffect(()=>{if(!(!o||p<=c)){d(p);try{Xv(p)}catch{}}},[c,p,o]);const x=r.length+l.length+u.length>0?`任务队列 (生成中: ${r.length}, 已完成: ${l.length}, 失败: ${u.length})`:"任务队列 (暂无任务)";return a.jsxDEV("div",{className:"bottom-actions-section",children:[a.jsxDEV(Gv,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:106,columnNumber:7},void 0),a.jsxDEV(ie,{type:"icon",icon:a.jsxDEV(sb,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:111,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:b=>{b.event.stopPropagation()},onClick:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:109,columnNumber:7},void 0),i&&a.jsxDEV(ie,{type:"icon",icon:a.jsxDEV(rb,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:129,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:b=>{b.event.stopPropagation()},onClick:i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:127,columnNumber:9},void 0),a.jsxDEV("div",{className:"bottom-actions-section__task-wrapper",children:[a.jsxDEV(ab,{count:r.length>0?r.length:0,showZero:!1,offset:[6,-6],children:a.jsxDEV(ie,{type:"icon",icon:a.jsxDEV(lb,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:153,columnNumber:19},void 0),"aria-label":"任务队列",tooltip:x,tooltipPlacement:"right",selected:o,visible:!0,"data-track":"toolbar_click_tasks","data-testid":"toolbar-tasks",onPointerDown:b=>{b.event.stopPropagation()},onClick:s},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:151,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:146,columnNumber:9},void 0),r.length>0&&a.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:170,columnNumber:11},void 0),f&&r.length===0&&a.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:173,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:145,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:104,columnNumber:5},void 0)},Jv=m.lazy(()=>qe(()=>import("./TaskQueuePanel-BLD1r7_I.js"),__vite__mapDeps([0,2,3]),import.meta.url).then(e=>({default:e.TaskQueuePanel}))),Qv=460,e0=["ai-image","ai-video"],rp="aitu-toolbar-left",Dn=0,t0=8,n0=0,To=58;function aa(e,t=To){const n=typeof window>"u"?t:window.innerWidth,i=Math.max(Dn,n-t-n0);return Math.round(Math.max(Dn,Math.min(e,i)))}function i0(e,t=To){return typeof window>"u"?"left":e+t/2>window.innerWidth/2?"right":"left"}function o0(){if(typeof window>"u")return Dn;try{const e=window.localStorage.getItem(rp);if(!e)return Dn;const t=Number(e);return Number.isFinite(t)?aa(t):Dn}catch{return Dn}}function ru(e){if(!(typeof window>"u"))try{window.localStorage.setItem(rp,String(e))}catch{}}function au(e,t){if(typeof document>"u")return;const n=t==null?void 0:t.getBoundingClientRect(),i=n&&n.width>0?n.width:To,o=typeof window>"u"?e+i:window.innerWidth,s=Math.round(e+i),r=i0(e,i),l=r==="right"?Math.max(0,o-e):0,u=r==="right"?e:Math.max(0,o-s),c=document.documentElement.style;c.setProperty("--aitu-toolbar-left",`${e}px`),c.setProperty("--aitu-toolbar-right-edge",`${s}px`),c.setProperty("--aitu-toolbar-right-dock-width",`${Math.round(l)}px`),c.setProperty("--aitu-toolbar-right-avoidance",`${Math.round(l?l+12:0)}px`),c.setProperty("--aitu-toolbar-side-panel-max-width",`${Math.max(0,Math.round(u))}px`);const d=document.documentElement;d.classList.toggle("aitu-toolbar-dock-right",r==="right"),d.classList.toggle("aitu-toolbar-dock-left",r==="left"),t==null||t.style.setProperty("--aitu-toolbar-left",`${e}px`)}const s0=yn.memo(({className:e,projectDrawerOpen:t=!1,onProjectDrawerToggle:n,toolboxDrawerOpen:i=!1,onToolboxDrawerToggle:o,taskPanelExpanded:s=!1,onTaskPanelToggle:r,onOpenBackupRestore:l,onOpenCloudSync:u,onOpenMediaLibrary:c,deferredFeaturesEnabled:d=!1,minimizedToolsBarEnabled:p=!1,onEnableToolWindows:f})=>{const[h,x]=m.useState(!1),[b,g]=m.useState(!0),[w,N]=m.useState(o0),[y,D]=m.useState(!1),[j,k]=m.useState(!1),E=m.useRef(!1),I=m.useRef(null),q=m.useRef(null),W=m.useRef(!1),U=m.useRef(w),M=m.useRef(null),{isMobile:T,isTablet:_}=cb(),P=T||_,A=P?t0:w;Zs(I,{enablePositionTracking:!1,enableScaleCompensation:!0}),m.useEffect(()=>{U.current=A,au(A,I.current)},[A]),m.useEffect(()=>()=>{document.documentElement.classList.remove("aitu-toolbar-dock-left","aitu-toolbar-dock-right")},[]),m.useEffect(()=>{if(typeof document>"u")return;const R=document.documentElement;return R.classList.toggle("aitu-toolbar-dragging",y),()=>{R.classList.remove("aitu-toolbar-dragging")}},[y]),m.useEffect(()=>{if(P)return;const R=()=>{var Ae;const fe=((Ae=I.current)==null?void 0:Ae.getBoundingClientRect().width)||To;N(Fe=>aa(Fe,fe))};return window.addEventListener("resize",R),()=>{window.removeEventListener("resize",R)}},[P]),m.useEffect(()=>{if(!s){k(!1);return}if(!E.current)return;const R=requestAnimationFrame(()=>{k(!0)});return()=>{cancelAnimationFrame(R)}},[s]);const Q=m.useCallback(R=>{P||R.button!==0||(R.preventDefault(),R.stopPropagation(),M.current={pointerId:R.pointerId,startX:R.clientX,startLeft:U.current},document.documentElement.classList.add("aitu-toolbar-dragging"),R.currentTarget.setPointerCapture(R.pointerId),D(!0))},[P]),Ee=m.useCallback(R=>{var X;const fe=M.current;if(!fe||fe.pointerId!==R.pointerId)return;R.preventDefault();const Ae=((X=I.current)==null?void 0:X.getBoundingClientRect().width)||To,Fe=aa(fe.startLeft+R.clientX-fe.startX,Ae);U.current=Fe,au(Fe,I.current)},[]),V=m.useCallback(R=>{const fe=M.current;!fe||fe.pointerId!==R.pointerId||(M.current=null,document.documentElement.classList.remove("aitu-toolbar-dragging"),D(!1),N(U.current),ru(U.current),R.currentTarget.hasPointerCapture(R.pointerId)&&R.currentTarget.releasePointerCapture(R.pointerId))},[]),$=m.useCallback(R=>{P||(R.preventDefault(),R.stopPropagation(),U.current=Dn,N(Dn),ru(Dn))},[P]),ue=m.useCallback(R=>{if(R[0]){const fe=R[0].contentRect.height;x(fe<Qv)}},[]);m.useEffect(()=>{const R=I.current;if(!R)return;const fe=new ResizeObserver(ue);return fe.observe(R),()=>{fe.disconnect()}},[ue]),m.useEffect(()=>{if(W.current)return;const R=q.current;if(!R)return;const fe=()=>{W.current=!0;let Fe=null;for(const O of e0){const pe=R.querySelector(`[data-button-id="${O}"]`);if(pe){Fe=pe;break}}if(!Fe)return;const X=R.getBoundingClientRect(),v=Fe.getBoundingClientRect();if(!(v.bottom<=X.bottom&&v.top>=X.top)&&X.height>0){const O=v.top-X.top;R.scrollTop+=O}},Ae=setTimeout(()=>{requestAnimationFrame(fe)},100);return()=>{clearTimeout(Ae)}},[]);const Y=m.useCallback(()=>{!s&&!E.current&&(E.current=!0),s||k(!1),r==null||r()},[s,r]),ae=m.useCallback(()=>{s&&(k(!1),r==null||r())},[s,r]),ne=m.useCallback(()=>{g(R=>!R)},[]),{openDialog:ge}=Lt(),ye=m.useCallback(()=>{ge($t.aiImageGeneration)},[ge]),ze=m.useCallback(()=>{ge($t.aiVideoGeneration)},[ge]);return a.jsxDEV(a.Fragment,{children:[E.current&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(Jv,{expanded:s&&j,onClose:ae},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:453,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:452,columnNumber:11},void 0),a.jsxDEV(Ye,{ref:I,className:K("unified-toolbar",Pt,{"unified-toolbar--icon-only":h||P,"unified-toolbar--mobile-collapsed":P&&b,"unified-toolbar--dragging":y},e),style:{"--aitu-toolbar-left":`${A}px`},padding:0,"data-testid":"unified-toolbar",children:[!P&&a.jsxDEV("button",{type:"button",className:"unified-toolbar__drag-handle","aria-label":"拖动工具栏位置",title:"拖动工具栏位置,双击复位","data-testid":"toolbar-drag-handle",onPointerDown:Q,onPointerMove:Ee,onPointerUp:V,onPointerCancel:V,onDoubleClick:$},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:482,columnNumber:13},void 0),P&&b&&a.jsxDEV("div",{className:"unified-toolbar__collapsed-shortcuts",children:[a.jsxDEV("button",{className:"unified-toolbar__collapsed-btn unified-toolbar__collapsed-btn--toggle",onClick:ne,"aria-label":"展开工具栏",children:a.jsxDEV(rd,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:505,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:500,columnNumber:15},void 0),a.jsxDEV("button",{className:"unified-toolbar__collapsed-btn",onClick:ye,"aria-label":"AI 图片生成",children:a.jsxDEV($s,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:513,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:508,columnNumber:15},void 0),a.jsxDEV("button",{className:"unified-toolbar__collapsed-btn",onClick:ze,"aria-label":"AI 视频生成",children:a.jsxDEV(Gs,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:521,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:516,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:498,columnNumber:13},void 0),P&&!b&&a.jsxDEV("button",{className:"unified-toolbar__mobile-toggle unified-toolbar__mobile-toggle--expanded",onClick:ne,"aria-label":"收起工具栏",children:a.jsxDEV(ka,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:533,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:528,columnNumber:13},void 0),a.jsxDEV("div",{className:"unified-toolbar__section unified-toolbar__section--fixed-top",children:a.jsxDEV(jv,{embedded:!0,iconMode:h||P,onOpenBackupRestore:l,onOpenCloudSync:u},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:539,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:538,columnNumber:11},void 0),a.jsxDEV("div",{ref:q,className:"unified-toolbar__scrollable",children:a.jsxDEV("div",{className:"unified-toolbar__section",children:a.jsxDEV(Wv,{embedded:!0,iconMode:h||P,onOpenMediaLibrary:c,deferredFeaturesEnabled:d,minimizedToolsBarEnabled:p,onEnableToolWindows:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:551,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:550,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:548,columnNumber:11},void 0),a.jsxDEV("div",{className:"unified-toolbar__section unified-toolbar__section--fixed-bottom",children:a.jsxDEV(Zv,{projectDrawerOpen:t,onProjectDrawerToggle:n||(()=>{}),toolboxDrawerOpen:i,onToolboxDrawerToggle:o,taskPanelExpanded:s,onTaskPanelToggle:Y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:564,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:563,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:460,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:449,columnNumber:7},void 0)}),r0=e=>n=>{const{globalKeyDown:i,keyDown:o}=n;return n.globalKeyDown=s=>{const r=s.target instanceof HTMLInputElement||s.target instanceof HTMLTextAreaElement||s.target instanceof HTMLElement&&s.target.isContentEditable;if(!r){if(Qe.isHotkey(["mod+k"])(s)){e({openCommandPalette:!0}),s.preventDefault();return}if(Qe.isHotkey(["mod+f"])(s)){e({openCanvasSearch:!0}),s.preventDefault();return}}if(!r&&(z.getMovingPointInBoard(n)||z.isMovingPointInBoard(n))&&!z.hasBeenTextEditing(n)){if(Qe.isHotkey(["mod+shift+e"],{byKey:!0})(s)){rs(n,!0),s.preventDefault();return}if(Qe.isHotkey(["mod+s"],{byKey:!0})(s)){bd(n),s.preventDefault();return}if(Qe.isHotkey(["mod+backspace"])(s)||Qe.isHotkey(["mod+delete"])(s)){e({openCleanConfirm:!0}),s.preventDefault();return}if(Qe.isHotkey(["mod+u"])(s)&&Ks(n),Oe(n).length>1){if(Qe.isHotkey(["alt+a"])(s)){nn.alignLeft(n),s.preventDefault();return}if(Qe.isHotkey(["alt+h"])(s)){nn.alignCenter(n),s.preventDefault();return}if(Qe.isHotkey(["alt+d"])(s)){nn.alignRight(n),s.preventDefault();return}if(Qe.isHotkey(["alt+w"])(s)){nn.alignTop(n),s.preventDefault();return}if(Qe.isHotkey(["alt+v"])(s)){nn.alignMiddle(n),s.preventDefault();return}if(Qe.isHotkey(["alt+s"])(s)){nn.alignBottom(n),s.preventDefault();return}if(Qe.isHotkey(["shift+h"])(s)){Vi.distributeHorizontal(n),s.preventDefault();return}if(Qe.isHotkey(["shift+v"])(s)){Vi.distributeVertical(n),s.preventDefault();return}if(Qe.isHotkey(["shift+a"])(s)){Vi.autoArrange(n),s.preventDefault();return}if(Qe.isHotkey(["alt+shift+u"])(s)){hn.union(n,"zh"),s.preventDefault();return}if(Qe.isHotkey(["alt+shift+s"])(s)){hn.subtract(n,"zh"),s.preventDefault();return}if(Qe.isHotkey(["alt+shift+i"])(s)){hn.intersect(n,"zh"),s.preventDefault();return}if(Qe.isHotkey(["alt+shift+e"])(s)){hn.exclude(n,"zh"),s.preventDefault();return}if(Qe.isHotkey(["alt+shift+f"])(s)){hn.flatten(n,"zh"),s.preventDefault();return}}if(!s.altKey&&!s.metaKey&&!s.ctrlKey&&Qe.isHotkey(["shift+p"],{byKey:!0})(s)){at(n,yt.drawing),be.updatePointerType(n,Pn.pen),e({pointer:Pn.pen}),s.preventDefault();return}if(!s.altKey&&!s.metaKey&&!s.ctrlKey&&!s.shiftKey){if(s.key==="l"){at(n,yt.drawing),be.updatePointerType(n,nt.laserPointer),e({pointer:nt.laserPointer}),s.preventDefault();return}if(s.key==="Escape"&&z.isPointer(n,nt.laserPointer)){be.updatePointerType(n,wt.selection),e({pointer:wt.selection}),s.preventDefault();return}if(s.key==="h"&&(be.updatePointerType(n,wt.hand),e({pointer:wt.hand})),s.key==="v"&&(be.updatePointerType(n,wt.selection),e({pointer:wt.selection})),s.key==="q"&&(be.updatePointerType(n,Eo),e({pointer:Eo})),s.key==="m"&&(at(n,yt.dnd),be.updatePointerType(n,ui.mind),e({pointer:ui.mind})),s.key==="e"&&(at(n,yt.drawing),be.updatePointerType(n,nt.eraser),e({pointer:nt.eraser})),s.key==="p"&&(at(n,yt.drawing),be.updatePointerType(n,nt.feltTipPen),e({pointer:nt.feltTipPen})),s.key==="a"&&!Qe.isHotkey(["mod+a"])(s)&&Oe(n).length===0&&(at(n,yt.drawing),be.updatePointerType(n,xn.straight),e({pointer:xn.straight})),s.key==="f"&&(at(n,yt.drawing),be.updatePointerType(n,Fl),e({pointer:Fl})),s.key==="r"||s.key==="o"||s.key==="t"){const u={r:Ve.rectangle,o:Ve.ellipse,t:Ve.text};u[s.key]===Ve.text?at(n,null):at(n,yt.drawing),be.updatePointerType(n,u[s.key]),e({pointer:u[s.key]})}s.preventDefault();return}}i(s)},n.keyDown=s=>{if(Qe.isHotkey(["mod+z"],{byKey:!0})(s)){n.undo(),s.preventDefault();return}if(Qe.isHotkey(["mod+shift+z"],{byKey:!0})(s)){n.redo(),s.preventDefault();return}o(s)},n};function il(e){return e===qt.square?"square":"round"}function ol(e,t){const n=Math.min(t/50,1),i=.2+n*.1,o=6-n*4,s=i+e*(o-i);return Math.max(.5,t*s)}function a0(e,t,n,i,o,s){const r=document.createElementNS("http://www.w3.org/2000/svg","g"),l=il(s);if(e.length<2){if(e.length===1){const f=ol(t[0]??.5,n);if(s===qt.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 u=za(e,1,3);if(o===mn.double){const f=n*.8,h=n*.4,[x,b]=c0(u,t,h,f);if(x){const g=document.createElementNS("http://www.w3.org/2000/svg","path");g.setAttribute("d",x),g.setAttribute("fill",i),g.setAttribute("stroke","none"),r.appendChild(g)}if(b){const g=document.createElementNS("http://www.w3.org/2000/svg","path");g.setAttribute("d",b),g.setAttribute("fill",i),g.setAttribute("stroke","none"),r.appendChild(g)}return r}const c=Od(o,n),d=o!==On.solid&&c?c.join(" "):"",p=u0(u,t,n);if(p.length>0){const f=document.createElementNS("http://www.w3.org/2000/svg","path");f.setAttribute("d",p),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",l),f.setAttribute("stroke-linejoin",l==="square"?"miter":"round")),r.appendChild(f)}return r}function l0(e,t,n,i){const o=document.createElementNS("http://www.w3.org/2000/svg","g"),s=il(i);if(e.length<2){if(e.length===1){const b=t*.8,g=t*.4;if(i===qt.square){const w=document.createElementNS("http://www.w3.org/2000/svg","rect");w.setAttribute("x",String(e[0][0]-g/2)),w.setAttribute("y",String(e[0][1]-b/2-g/2)),w.setAttribute("width",String(g)),w.setAttribute("height",String(g)),w.setAttribute("fill",n),o.appendChild(w);const N=document.createElementNS("http://www.w3.org/2000/svg","rect");N.setAttribute("x",String(e[0][0]-g/2)),N.setAttribute("y",String(e[0][1]+b/2-g/2)),N.setAttribute("width",String(g)),N.setAttribute("height",String(g)),N.setAttribute("fill",n),o.appendChild(N)}else{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(g/2)),w.setAttribute("fill",n),o.appendChild(w);const N=document.createElementNS("http://www.w3.org/2000/svg","circle");N.setAttribute("cx",String(e[0][0])),N.setAttribute("cy",String(e[0][1]+b/2)),N.setAttribute("r",String(g/2)),N.setAttribute("fill",n),o.appendChild(N)}}return o}const r=za(e,1,3),l=t*.8,u=t*.4,c=[],d=[];for(let b=0;b<r.length;b++){let g,w;b===0?(g=r[1][0]-r[0][0],w=r[1][1]-r[0][1]):b===r.length-1?(g=r[b][0]-r[b-1][0],w=r[b][1]-r[b-1][1]):(g=r[b+1][0]-r[b-1][0],w=r[b+1][1]-r[b-1][1]);const N=Math.sqrt(g*g+w*w);if(N>0){const y=-w/N,D=g/N,j=l/2;c.push([r[b][0]+y*j,r[b][1]+D*j]),d.push([r[b][0]-y*j,r[b][1]-D*j])}else c.push(r[b]),d.push(r[b])}const p=document.createElementNS("http://www.w3.org/2000/svg","path");let f=`M ${c[0][0]} ${c[0][1]}`;for(let b=1;b<c.length;b++){const g=c[b-1],w=c[b],N=(g[0]+w[0])/2,y=(g[1]+w[1])/2;f+=` Q ${g[0]} ${g[1]} ${N} ${y}`}f+=` L ${c[c.length-1][0]} ${c[c.length-1][1]}`,p.setAttribute("d",f),p.setAttribute("fill","none"),p.setAttribute("stroke",n),p.setAttribute("stroke-width",String(u)),p.setAttribute("stroke-linecap",s),p.setAttribute("stroke-linejoin",s==="square"?"miter":"round"),o.appendChild(p);const h=document.createElementNS("http://www.w3.org/2000/svg","path");let x=`M ${d[0][0]} ${d[0][1]}`;for(let b=1;b<d.length;b++){const g=d[b-1],w=d[b],N=(g[0]+w[0])/2,y=(g[1]+w[1])/2;x+=` Q ${g[0]} ${g[1]} ${N} ${y}`}return x+=` L ${d[d.length-1][0]} ${d[d.length-1][1]}`,h.setAttribute("d",x),h.setAttribute("fill","none"),h.setAttribute("stroke",n),h.setAttribute("stroke-width",String(u)),h.setAttribute("stroke-linecap",s),h.setAttribute("stroke-linejoin",s==="square"?"miter":"round"),o.appendChild(h),o}function c0(e,t,n,i){if(e.length<2)return["",""];const o=[],s=[];for(let u=0;u<e.length;u++){let c,d;u===0?(c=e[1][0]-e[0][0],d=e[1][1]-e[0][1]):u===e.length-1?(c=e[u][0]-e[u-1][0],d=e[u][1]-e[u-1][1]):(c=e[u+1][0]-e[u-1][0],d=e[u+1][1]-e[u-1][1]);const p=Math.sqrt(c*c+d*d);if(p>0){const f=-d/p,h=c/p,x=i/2;o.push([e[u][0]+f*x,e[u][1]+h*x]),s.push([e[u][0]-f*x,e[u][1]-h*x])}else o.push(e[u]),s.push(e[u])}const r=lu(o,t,n),l=lu(s,t,n);return[r,l]}function lu(e,t,n){if(e.length<2)return"";const i=[],o=[];for(let r=0;r<e.length;r++){const l=t[r]??.5,c=ol(l,n)/2;let d,p;r===0?(d=e[1][0]-e[0][0],p=e[1][1]-e[0][1]):r===e.length-1?(d=e[r][0]-e[r-1][0],p=e[r][1]-e[r-1][1]):(d=e[r+1][0]-e[r-1][0],p=e[r+1][1]-e[r-1][1]);const f=Math.sqrt(d*d+p*p);if(f>0){const h=-p/f,x=d/f;i.push([e[r][0]+h*c,e[r][1]+x*c]),o.push([e[r][0]-h*c,e[r][1]-x*c])}else i.push(e[r]),o.push(e[r])}let s=`M ${i[0][0]} ${i[0][1]}`;for(let r=1;r<i.length;r++){const l=i[r-1],u=i[r],c=(l[0]+u[0])/2,d=(l[1]+u[1])/2;s+=` Q ${l[0]} ${l[1]} ${c} ${d}`}s+=` L ${i[i.length-1][0]} ${i[i.length-1][1]}`,s+=` L ${o[o.length-1][0]} ${o[o.length-1][1]}`;for(let r=o.length-2;r>=0;r--){const l=o[r+1],u=o[r],c=(l[0]+u[0])/2,d=(l[1]+u[1])/2;s+=` Q ${l[0]} ${l[1]} ${c} ${d}`}return s+=` L ${o[0][0]} ${o[0][1]}`,s+=" Z",s}function u0(e,t,n){if(e.length<2)return"";const i=[],o=[];for(let r=0;r<e.length;r++){const l=t[r]??.5,c=ol(l,n)/2;let d,p;r===0?(d=e[1][0]-e[0][0],p=e[1][1]-e[0][1]):r===e.length-1?(d=e[r][0]-e[r-1][0],p=e[r][1]-e[r-1][1]):(d=e[r+1][0]-e[r-1][0],p=e[r+1][1]-e[r-1][1]);const f=Math.sqrt(d*d+p*p);if(f>0){const h=-p/f,x=d/f;i.push([e[r][0]+h*c,e[r][1]+x*c]),o.push([e[r][0]-h*c,e[r][1]-x*c])}else i.push(e[r]),o.push(e[r])}let s=`M ${i[0][0]} ${i[0][1]}`;for(let r=1;r<i.length;r++){const l=i[r-1],u=i[r],c=(l[0]+u[0])/2,d=(l[1]+u[1])/2;s+=` Q ${l[0]} ${l[1]} ${c} ${d}`}s+=` L ${i[i.length-1][0]} ${i[i.length-1][1]}`,s+=` L ${o[o.length-1][0]} ${o[o.length-1][1]}`;for(let r=o.length-2;r>=0;r--){const l=o[r+1],u=o[r],c=(l[0]+u[0])/2,d=(l[1]+u[1])/2;s+=` Q ${l[0]} ${l[1]} ${c} ${d}`}return s+=` L ${o[0][0]} ${o[0][1]}`,s+=" Z",s}class sl extends yd{draw(t){const n=ub(t),i=gd(this.board,t),o=db(this.board,t),s=mb(this.board,t),r=Od(s,n),l=t.brushShape,u=il(l);if(t.pressures&&t.pressures.length>0)return a0(t.points,t.pressures,n,i,s,l);if(s===mn.double)return l0(t.points,n,i,l);const c={strokeWidth:n,stroke:i,fill:o,fillStyle:"solid",strokeLineDash:s!==On.solid?r:void 0},d=z.getRoughSVG(this.board).curve(za(t.points,1,3),c);return pb(d,u),d}canDraw(t){return!0}}class d0 extends La{constructor(){super()}initializeGenerator(){this.activeGenerator=Fd(this.board,{getRectangle:t=>Js(t),getStrokeWidth:()=>Bd,getStrokeOpacity:()=>1,hasResizeHandle:()=>Hd(this.board,this.element)}),this.generator=new sl(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,z.getActiveHost(this.board),{selected:this.selected})):i&&t.selected?this.activeGenerator.processDrawing(this.element,z.getActiveHost(this.board),{selected:this.selected}):(t.selected!==n.selected||t.selected)&&this.activeGenerator.processDrawing(this.element,z.getActiveHost(this.board),{selected:this.selected})}destroy(){var t;super.destroy(),(t=this.activeGenerator)==null||t.destroy()}}class ap{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 u={point:t,timestamp:i,...n};return this.points.push(u),this.lastProcessedTime=i,t}if(i-this.lastProcessedTime<this.options.samplingRate&&i-this.lastProcessedTime<2)return null;const o={point:t,timestamp:i,...n};if(!this.checkDistance(t)&&this.points.length>1&&i-this.lastProcessedTime<32)return null;this.updatePoints(o);const r=this.calculateDynamicParameters(o),l=this.smooth(t,r);return this.lastProcessedTime=i,l}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 o=this.options.minDistance;if(this.movingAverageVelocity.length>0){const s=this.getAverageVelocity();o*=Math.max(.5,Math.min(1.5,s/200))}return i>=o}calculateDynamicParameters(t){const n=this.calculateVelocity(t);this.updateMovingAverage(n);const i=this.getAverageVelocity(),o={...this.options};if(t.pressure!==void 0){const r=Math.pow(t.pressure,1.2);o.smoothing*=1-r*o.pressureSensitivity*.8}const s=Math.min(i/o.velocityThreshold,1);if(o.velocityWeight=.2+s*.3,o.smoothing*=1+s*.2,t.tiltX!==void 0&&t.tiltY!==void 0){const r=Math.sqrt(t.tiltX**2+t.tiltY**2)/90;o.smoothing*=1+r*o.tiltSensitivity*.7}return o}smooth(t,n){if(this.points.length<2)return t;const i=this.calculateWeights(n),o=i.reduce((r,l)=>r+l,0);if(o===0)return t;const s=[0,0];for(let r=0;r<this.points.length;r++){const l=i[r]/o;s[0]+=this.points[r].point[0]*l,s[1]+=this.points[r].point[1]*l}return s}calculateWeights(t){const n=[],i=this.points.length-1;for(let o=0;o<this.points.length;o++){let s=Math.pow(t.smoothing,(i-o)*.8);if(o<i){const r=this.getPointVelocity(o);s*=1+r*t.velocityWeight*.8}if(o>0&&o<i){const r=this.getPointCurvature(o);s*=1+r*t.curvatureWeight*.7}n.push(s)}return n}getDistance(t,n){return gs(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),o=t.timestamp-n.timestamp;return o>0?i/o: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],o=this.getDistance(n.point,i.point),s=i.timestamp-n.timestamp;return s>0?o/s: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,o=this.points[t+1].point,s=this.getDistance(n,i),r=this.getDistance(i,o),l=this.getDistance(n,o),u=(s+r+l)/2;return 4*Math.sqrt(Math.max(0,u*(u-s)*(u-r)*(u-l)))/(s*r*l+1e-4)}}const m0=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e;let s=!1,r=!1,l=[],u=[],c=null;const d=new sl(e),p=new ap({smoothing:.7,pressureSensitivity:.6});let f=null,h=null,x=null,b=0;const g=(y=!1)=>{if(!h||y){const D=Wn(e);h={strokeWidth:D.strokeWidth,strokeColor:D.strokeColor,strokeStyle:D.strokeStyle,pencilShape:D.pencilShape,pressureEnabled:D.pressureEnabled}}return h},w=(y,D)=>{if(!D)return 1;if(y.pointerType==="pen"&&y.pressure>0&&y.pressure!==.5)return y.pressure;const k=[y.x,y.y],E=performance.now();if(x&&b>0){const I=k[0]-x[0],q=k[1]-x[1],W=Math.sqrt(I*I+q*q),U=E-b;if(U>0){const M=W/U,T=.2,_=1,A=Math.min(M/1.5,1),Q=_-A*(_-T);return x=k,b=E,Q}}return x=k,b=E,.6},N=y=>{if(s){const D=z.getPointer(e);r&&(l.push(l[0]),u.length>0&&u.push(u[0]));const j=g();f=Fr(D,l,{strokeWidth:j.strokeWidth,strokeColor:j.strokeColor,strokeStyle:j.strokeStyle,brushShape:j.pencilShape,pressures:j.pressureEnabled?u:void 0})}f&&!y&&ce.insertNode(e,f,[e.children.length]),d==null||d.destroy(),f=null,s=!1,l=[],u=[],x=null,b=0,h=null,p.reset()};return e.pointerDown=y=>{const D=Oa();if(z.isInPointer(e,D)&&Fa(e)){s=!0;const k=g(!0);c=[y.x,y.y];const E=p.process(c);if(E){const I=Mt(e,Rt(e,E[0],E[1]));l.push(I),u.push(w(y,k.pressureEnabled))}}t(y)},e.pointerMove=y=>{if(s){const D=[y.x,y.y];c&&gs(c[0],c[1],D[0],D[1])<8?r=!0:r=!1;const j=p.process(D);if(j){d==null||d.destroy();const k=Mt(e,Rt(e,j[0],j[1]));l.push(k);const E=g();u.push(w(y,E.pressureEnabled));const I=z.getPointer(e);f=Fr(I,l,{strokeWidth:E.strokeWidth,strokeColor:E.strokeColor,strokeStyle:E.strokeStyle,brushShape:E.pencilShape,pressures:E.pressureEnabled?u:void 0}),d.processDrawing(f,z.getElementTopHost(e))}return}n(y)},e.pointerUp=y=>{N(),i(y)},e.globalPointerUp=y=>{N(!0),o(y)},e},p0=e=>{const t=e,{getDeletedFragment:n,buildFragment:i,insertFragment:o}=t;return t.getDeletedFragment=s=>{const r=Bl(t);return r.length&&s.push(...r),n(s)},t.buildFragment=(s,r,l,u)=>{const c=Bl(t);if(c.length){const d=Wd(t,c,r?[r.x,r.y]:[0,0]);s=$d(s,{text:"",type:Gd.elements,elements:d})}return i(s,r,l,u)},t.insertFragment=(s,r,l)=>{var c;const u=(c=s==null?void 0:s.elements)==null?void 0:c.filter(d=>Ge.isFreehand(d));u&&u.length>0&&Yd(t,u,r),o(s,r,l)},t};function f0(e,t,n,i=0){const o=he.getCenterPoint(t),s=mi(t,Yn);if(i){const r=h0(n,o,-i);let l=s.find(u=>he.isHit(he.getRectangleByPoints([r,r]),u.rectangle));return l&&(l.cursorClass=Qs(l.cursorClass,i)),l}else return s.find(r=>he.isHit(he.getRectangleByPoints([n,n]),r.rectangle))}function h0(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],l=e[1]-t[1];return[t[0]+r*o-l*s,t[1]+r*s+l*o]}function lp(e){const t=Oe(e);return t.length===1&&Ge.isFreehand(t[0])?t[0]:null}function g0(e){return lp(e)!==null}function b0(e,t){const n=lp(e);if(!n)return null;const i=Js(n),o=n.angle||0,s=f0(e,i,t,o);return s?{element:n,rectangle:i,handle:s.handle,cursorClass:s.cursorClass}:null}function x0(e,t,n){const i=n.width/t.width,o=n.height/t.height;return e.map(s=>{const r=s[0]-t.x,l=s[1]-t.y;return[n.x+r*i,n.y+l*o]})}function N0(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:l}=n;if(!o)return;const u=l[0]-r[0],c=l[1]-r[1],d=Hi(o,s,u,c,zo(),10),p=x0(i.points,o,d),f=e.children.findIndex(h=>h.id===i.id);f>=0&&ce.setNode(e,{points:p},[f])}const w0=e=>di(e,{key:"freehand",canResize:()=>g0(e),hitTest:(t=>b0(e,t)),onResize:(t,n)=>N0(e,t,n)});function y0(e){return e.type==="video"}const Uo=1e3;async function rl(){const e=await qe(()=>import("./clipper-NoHaeWV4.js").then(t=>t.c),__vite__mapDeps([0]),import.meta.url);return e.default||e}function Io(e){return e.map(t=>({X:Math.round(t[0]*Uo),Y:Math.round(t[1]*Uo)}))}function cp(e){return e.map(t=>[t.X/Uo,t.Y/Uo])}async function v0(e,t,n=Hl.circle){if(e.length<2)return[];const i=await rl(),o=Io(e),s=new i.ClipperOffset;n===Hl.square?s.AddPath(o,i.JoinType.jtMiter,i.EndType.etOpenSquare):s.AddPath(o,i.JoinType.jtRound,i.EndType.etOpenRound);const r=[];return s.Execute(r,t/2*Uo),r.length===0?[]:cp(r[0])}function al(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 k0(e,t=20){if(Ze.isPenPath(e)){if(!e.closed)return null;const n=vd(e);return fb(n,!0,t)}if(Ge.isFreehand(e)){const n=e.points;return!n||n.length<3||!al(e)?null:n}return B.isDrawElement(e)&&B.isShapeElement(e)?B.isImage(e)||B.isText(e)?null:E0(e,t):null}function E0(e,t=20){const n=e.points;if(!n||n.length<2)return[];const[i,o]=n,s=Math.min(i[0],o[0]),r=Math.min(i[1],o[1]),l=Math.abs(o[0]-i[0]),u=Math.abs(o[1]-i[1]),c=e.shape;if(c==="ellipse"||c==="circle"){const d=s+l/2,p=r+u/2,f=l/2,h=u/2,x=[],b=Math.PI*(3*(f+h)-Math.sqrt((3*f+h)*(f+3*h))),g=Math.max(180,Math.ceil(b/2));for(let w=0;w<g;w++){const N=2*Math.PI*w/g;x.push([d+f*Math.cos(N),p+h*Math.sin(N)])}return x}return[[s,r],[s+l,r],[s+l,r+u],[s,r+u]]}function j0(e,t,n,i){if(e.length<3)throw new Error("Polygon must have at least 3 points");let o=1/0,s=1/0,r=-1/0,l=-1/0;for(const p of e)o=Math.min(o,p[0]),s=Math.min(s,p[1]),r=Math.max(r,p[0]),l=Math.max(l,p[1]);const u=[o,s],c=e.map(p=>({point:[p[0]-u[0],p[1]-u[1]],type:"corner"}));return{id:hb(),type:Xd,shape:Pn.pen,points:[u,[r,l]],anchors:c,closed:!0,strokeColor:t,fill:n,strokeWidth:i}}function D0(e){let t="#333333",n="#FFFFFF",i=2;return Ze.isPenPath(e)?(t=e.strokeColor||t,n=e.fill||n,i=e.strokeWidth||i):Ge.isFreehand(e)?(t=e.strokeColor||t,i=e.strokeWidth||i):B.isDrawElement(e)&&(t=e.strokeColor||t,n=e.fill||n,i=e.strokeWidth||i),{strokeColor:t,fill:n,strokeWidth:i}}async function S0(e,t){const n=await rl(),i=new n.Clipper,o=[];return i.AddPath(Io(e),n.PolyType.ptSubject,!0),i.AddPath(Io(t),n.PolyType.ptClip,!0),i.Execute(n.ClipType.ctIntersection,o,n.PolyFillType.pftNonZero,n.PolyFillType.pftNonZero),o.length>0}async function C0(e,t,n){const i=k0(t);if(!i||i.length<3||!await S0(i,n))return null;const s=await rl(),r=new s.Clipper,l=[];if(r.AddPath(Io(i),s.PolyType.ptSubject,!0),r.AddPath(Io(n),s.PolyType.ptClip,!0),!r.Execute(s.ClipType.ctDifference,l,s.PolyFillType.pftNonZero,s.PolyFillType.pftNonZero))return null;const{strokeColor:c,fill:d,strokeWidth:p}=D0(t),f=[];for(const N of l)if(N.length>=3){let y=0;for(let D=0;D<N.length;D++){const j=(D+1)%N.length;y+=N[D].X*N[j].Y,y-=N[j].X*N[D].Y}y=y/2,f.push({path:N,signedArea:y,absArea:Math.abs(y)})}if(f.length===0)return[];const h=[...f].sort((N,y)=>y.absArea-N.absArea),x=h[0],b=h.slice(1);let g;b.length>0?g=_0(x.path,b.map(N=>N.path)):g=x.path;const w=cp(g);try{return[j0(w,c,d,p)]}catch{return[]}}function _0(e,t){let n=[...e];for(const i of t){let o=1/0,s=0,r=0;for(let u=0;u<n.length;u++)for(let c=0;c<i.length;c++){const d=n[u].X-i[c].X,p=n[u].Y-i[c].Y,f=d*d+p*p;f<o&&(o=f,s=u,r=c)}const l=[];for(let u=0;u<=s;u++)l.push(n[u]);for(let u=0;u<i.length;u++){const c=(r+u)%i.length;l.push(i[c])}l.push(i[r]);for(let u=s;u<n.length;u++)l.push(n[u]);n=l}return n}function up(e){if(Ge.isFreehand(e)){const o=e.points;if(!o||o.length<2)return null;const s=he.getRectangleByPoints(o),r=e.strokeWidth??2,l=r/2;return{x:s.x-l,y:s.y-l,width:s.width+r,height:s.height+r}}if(Ze.isPenPath(e)){const o=e.points;if(!o||o.length<2)return null;const[s,r]=o;return{x:Math.min(s[0],r[0]),y:Math.min(s[1],r[1]),width:Math.abs(r[0]-s[0]),height:Math.abs(r[1]-s[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 P0(e,t,n){if(t.length<2)return[];let i=1/0,o=1/0,s=-1/0,r=-1/0;for(const u of t)i=Math.min(i,u[0]-n),o=Math.min(o,u[1]-n),s=Math.max(s,u[0]+n),r=Math.max(r,u[1]+n);const l=[];for(const u of e.children){if(!V0(u))continue;const c=up(u);if(!c)continue;const{x:d,y:p,width:f,height:h}=c;d+f>=i&&d<=s&&p+h>=o&&p<=r&&l.push(u)}return l}function V0(e){return Ze.isPenPath(e)?e.closed:Ge.isFreehand(e)?al(e):B.isDrawElement(e)?B.isImage(e)||B.isText(e)||B.isArrowLine(e)||B.isVectorLine(e)?!1:B.isShapeElement(e):!1}function T0(e){if(Ze.isPenPath(e))return e.closed?null:"openPath";if(Ge.isFreehand(e))return al(e)?null:"openPath";if(B.isDrawElement(e)){if(B.isImage(e))return"image";if(B.isText(e))return"text";if(B.isArrowLine(e))return"arrowLine";if(B.isVectorLine(e))return"vectorLine";if(B.isShapeElement(e))return null}return"unsupported"}function U0(e,t,n){if(t.length<2)return[];let i=1/0,o=1/0,s=-1/0,r=-1/0;for(const u of t)i=Math.min(i,u[0]-n),o=Math.min(o,u[1]-n),s=Math.max(s,u[0]+n),r=Math.max(r,u[1]+n);const l=[];for(const u of e.children){const c=up(u);if(!c)continue;const{x:d,y:p,width:f,height:h}=c;d+f>=i&&d<=s&&p+h>=o&&p<=r&&T0(u)&&l.push(u)}return l}async function I0(e,t,n,i,o){if(o.length===0)return;const s=await v0(t,n,i);if(s.length<3)return;const r=[],l=[];for(const u of o){const c=await C0(e,u,s);c!==null&&(r.push(u),l.push(...c))}r.length>0&&Br.removeElements(e,r);for(const u of l)ce.insertNode(e,u,[e.children.length])}const q0=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e;let s=!1;const r=new Set;let l=[];const u=p=>{const f=Mt(e,Rt(e,p[0],p[1])),x=Wn(e).eraserWidth/2;e.children.filter(g=>Ge.isFreehand(g)).forEach(g=>{!r.has(g.id)&&gb(e,g,f,x)&&(Ci.getElementG(g).style.opacity="0.2",r.add(g.id))})},c=()=>{if(r.size>0){const p=e.children.filter(f=>r.has(f.id));p.length>0&&Br.removeElements(e,p)}},d=async()=>{if(s){if(c(),l.length>=2){const p=Wn(e),f=P0(e,l,p.eraserWidth).filter(x=>!Ge.isFreehand(x));if(f.length>0)try{await I0(e,l,p.eraserWidth,p.eraserShape,f)}catch(x){console.error("Precise erase error:",x)}const h=U0(e,l,p.eraserWidth).filter(x=>!Ge.isFreehand(x)&&!Ht(x)&&!y0(x)&&!(B.isDrawElement(x)&&B.isImage(x)));h.length>0&&Br.removeElements(e,h)}s=!1,r.clear(),l=[]}};return e.pointerDown=p=>{if(z.isInPointer(e,[nt.eraser])&&Fa(e)){s=!0,r.clear(),l=[];const h=[p.x,p.y],x=Mt(e,Rt(e,h[0],h[1]));l.push(x),u(h);return}t(p)},e.pointerMove=p=>{if(s){Ta(e,"with-freehand-erase",()=>{const f=[p.x,p.y],h=Mt(e,Rt(e,f[0],f[1]));l.push(h),u(f)});return}n(p)},e.pointerUp=p=>{if(s){d();return}i(p)},e.globalPointerUp=p=>{if(s){d();return}o(p)},e},A0="#e91e63",M0=3,cu=2e3,R0=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e;let s=!1,r=[];const l=new sl(e),u=new ap({smoothing:.7,pressureSensitivity:0});let c=null;const d=[],p=()=>z.isPointer(e,nt.laserPointer),f=()=>{if(!s)return;s=!1;const x=l.g;x?(l.g=void 0,h(x)):l.destroy(),c=null,r=[],u.reset()},h=x=>{x.style.transition=`opacity ${cu}ms ease-out`,x.style.opacity="1",x.getBoundingClientRect(),x.style.opacity="0";const b=window.setTimeout(()=>{x.remove();const g=d.findIndex(w=>w.g===x);g>=0&&d.splice(g,1)},cu);d.push({g:x,timer:b})};return e.pointerDown=x=>{if(p()&&Fa(e)){s=!0;const b=[x.x,x.y],g=u.process(b);if(g){const w=Mt(e,Rt(e,g[0],g[1]));r.push(w)}return}t(x)},e.pointerMove=x=>{if(s){const b=[x.x,x.y],g=u.process(b);if(g){l.destroy();const w=Mt(e,Rt(e,g[0],g[1]));r.push(w),c=Fr(nt.laserPointer,r,{strokeWidth:M0,strokeColor:A0}),l.processDrawing(c,z.getElementTopHost(e))}return}n(x)},e.pointerUp=x=>{s&&f(),i(x)},e.globalPointerUp=x=>{s&&f(),o(x)},e},z0=e=>{const{getRectangle:t,drawElement:n,isHit:i,isRectangleHit:o,getOneHitElement:s,isMovable:r,isAlign:l}=e;return e.drawElement=u=>Ge.isFreehand(u.element)?d0:n(u),e.getRectangle=u=>Ge.isFreehand(u)?Js(u):t(u),e.isRectangleHit=(u,c)=>Ge.isFreehand(u)?bb(e,u,c):o(u,c),e.isHit=(u,c,d)=>Ge.isFreehand(u)?xb(e,u,c):i(u,c,d),e.getOneHitElement=u=>u.every(d=>Ge.isFreehand(d))?Kd(e,u):s(u),e.isMovable=u=>Ge.isFreehand(u)?!0:r(u),e.isAlign=u=>Ge.isFreehand(u)?!0:l(u),e.setPluginOptions(Zd,{customGeometryTypes:[Nb]}),R0(w0(q0(p0(m0(e)))))};class L0 extends La{constructor(){super()}initializeGenerator(){this.activeGenerator=Fd(this.board,{getRectangle:t=>er(t),getStrokeWidth:()=>Bd,getStrokeOpacity:()=>1,hasResizeHandle:()=>Hd(this.board,this.element)}),this.generator=new Sv(this.board)}initialize(){super.initialize(),this.initializeGenerator(),this.generator.processDrawing(this.element,this.getElementG()),this.selected&&this.activeGenerator.processDrawing(this.element,z.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,z.getActiveHost(this.board),{selected:this.selected})):i&&t.selected?this.activeGenerator.processDrawing(this.element,z.getActiveHost(this.board),{selected:this.selected}):(t.selected!==n.selected||t.selected)&&this.activeGenerator.processDrawing(this.element,z.getActiveHost(this.board),{selected:this.selected})}destroy(){var t;super.destroy(),(t=this.activeGenerator)==null||t.destroy()}}const O0=e=>e,F0=e=>{const t=e,{getDeletedFragment:n,buildFragment:i,insertFragment:o}=t;return t.getDeletedFragment=s=>{const r=Wl(t);return r.length&&s.push(...r),n(s)},t.buildFragment=(s,r,l,u)=>{const c=Wl(t);if(c.length){const d=Wd(t,c,r?[r.x,r.y]:[0,0]);s=$d(s,{text:"",type:Gd.elements,elements:d})}return i(s,r,l,u)},t.insertFragment=(s,r,l)=>{var c;const u=(c=s==null?void 0:s.elements)==null?void 0:c.filter(d=>Ze.isPenPath(d));u&&u.length>0&&Yd(t,u,r),o(s,r,l)},t};function B0(e,t,n,i=0){const o=he.getCenterPoint(t),s=mi(t,Yn);if(i){const r=H0(n,o,-i);let l=s.find(u=>he.isHit(he.getRectangleByPoints([r,r]),u.rectangle));return l&&(l.cursorClass=Qs(l.cursorClass,i)),l}else return s.find(r=>he.isHit(he.getRectangleByPoints([n,n]),r.rectangle))}function H0(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],l=e[1]-t[1];return[t[0]+r*o-l*s,t[1]+r*s+l*o]}function dp(e){const t=Oe(e);return t.length===1&&Ze.isPenPath(t[0])?t[0]:null}function W0(e){return dp(e)!==null}function $0(e,t){const n=dp(e);if(!n)return null;const i=er(n),o=n.angle||0,s=B0(e,i,t,o);return s?{element:n,rectangle:i,handle:s.handle,cursorClass:s.cursorClass}:null}function G0(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 Y0(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:l}=n;if(!o)return;const u=l[0]-r[0],c=l[1]-r[1],d=Hi(o,s,u,c,zo(),10),p=d.width/o.width,f=d.height/o.height,h=G0(i.anchors,p,f),b=[[d.x,d.y],[d.x+d.width,d.y+d.height]],g=e.children.findIndex(w=>w.id===i.id);g>=0&&ce.setNode(e,{points:b,anchors:h},[g])}const X0=e=>di(e,{key:"pen-path",canResize:()=>W0(e),hitTest:(t=>$0(e,t)),onResize:(t,n)=>Y0(e,t,n)}),K0=e=>{const{getRectangle:t,drawElement:n,isHit:i,isRectangleHit:o,getOneHitElement:s,isMovable:r,isAlign:l}=e;return e.drawElement=u=>Ze.isPenPath(u.element)?L0:n(u),e.getRectangle=u=>Ze.isPenPath(u)?er(u):t(u),e.isRectangleHit=(u,c)=>Ze.isPenPath(u)?wb(e,u,c):o(u,c),e.isHit=(u,c,d)=>Ze.isPenPath(u)?yb(e,u,c):i(u,c,d),e.getOneHitElement=u=>u.every(d=>Ze.isPenPath(d))?Kd(e,u):s(u),e.isMovable=u=>Ze.isPenPath(u)?!0:r(u),e.isAlign=u=>Ze.isPenPath(u)?!0:l(u),e.setPluginOptions(Zd,{customGeometryTypes:[Xd]}),X0(F0(O0(Iv(e))))},mp=new WeakMap,uu=e=>!!mp.get(e),pp=(e,t)=>{mp.set(e,t)},Z0=e=>n=>{const{pointerDown:i}=n;return n.pointerDown=o=>{$l(o)&&!uu(n)&&(pp(n,!0),e({isPencilMode:!0})),!(uu(n)&&!$l(o))&&i(o)},n},J0=()=>{const e=ft(),{appState:t,setAppState:n}=Lt();return a.jsxDEV(a.Fragment,{children:t.isPencilMode&&a.jsxDEV("div",{className:"pencil-mode-toolbar",children:a.jsxDEV(ie,{type:"button",visible:!0,tooltip:"X Pencil","aria-label":"Arrow",label:"Pencil X",onPointerDown:()=>{n({...t,isPencilMode:!1}),pp(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)},Q0="#f5f5f5";function ek(e,t){const n=Math.max(4,Math.min(256,t)),i=n+4,o=i/2,s=n/2,r=`<svg width="${i}" height="${i}" viewBox="0 0 ${i} ${i}" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
34
|
+
<circle cx="${o}" cy="${o}" r="${s}" fill="${e}" stroke="#fff" stroke-width="1"/>
|
|
35
|
+
<circle cx="${o}" cy="${o}" r="${s}" fill="none" stroke="#333" stroke-width="0.5" stroke-opacity="0.5"/>
|
|
36
|
+
</svg>`;return`url('data:image/svg+xml;base64,${btoa(r)}') ${o} ${o}, crosshair`}function tk(e,t){const n=Math.max(4,Math.min(256,t)),i=n+4,o=i/2,s=n/2,r=`<svg width="${i}" height="${i}" viewBox="0 0 ${i} ${i}" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
37
|
+
<rect x="${o-s}" y="${o-s}" width="${n}" height="${n}" fill="${e}" stroke="#fff" stroke-width="1"/>
|
|
38
|
+
<rect x="${o-s}" y="${o-s}" width="${n}" height="${n}" fill="none" stroke="#333" stroke-width="0.5" stroke-opacity="0.5"/>
|
|
39
|
+
</svg>`;return`url('data:image/svg+xml;base64,${btoa(r)}') ${o} ${o}, crosshair`}function du(e,t,n=qt.circle){return n===qt.square?tk(e,t):ek(e,t)}function fp(e){return Oa().includes(e)&&e!==nt.eraser}function hp(e){return e===nt.eraser}function go(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 o=Wn(e),s=((r=e.viewport)==null?void 0:r.zoom)||1;if(fp(t)){const l=o.strokeWidth*s,u=du(o.strokeColor,l,o.pencilShape);i.style.cursor=u}else if(hp(t)){const l=o.eraserWidth*s,u=du(Q0,l,o.eraserShape);i.style.cursor=u}else t===Ve.text?i.style.cursor="crosshair":i.style.cursor=""}function nk({board:e,pointer:t}){const n=m.useRef(1),i=m.useRef(null);return m.useEffect(()=>{var r;if(!e)return;go(e,t),n.current=((r=e.viewport)==null?void 0:r.zoom)||1;let s=null;return(fp(t)||hp(t))&&(s=setInterval(()=>{var u;const l=((u=e.viewport)==null?void 0:u.zoom)||1;Math.abs(l-n.current)>.01&&(n.current=l,go(e,t))},100)),()=>{s&&clearInterval(s),i.current&&cancelAnimationFrame(i.current);const l=document.querySelector(".plait-board-container"),u=l==null?void 0:l.querySelector(".board-host-svg");u&&(u.style.cursor="")}},[e,t]),{updateCursor:m.useCallback(()=>{e&&go(e,t)},[e,t])}}function ts(e,t){go(e,t)}function mu(e){go(e,nt.eraser)}const ik=({color:e,size:t,zoom:n,shape:i=qt.circle})=>{const o=t*n,s=Math.max(4,Math.min(256,o)),r=i===qt.circle?"50%":"0";return a.jsxDEV("div",{className:"cursor-preview-dot",style:{width:s,height:s,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:56,columnNumber:5},void 0)},ok=()=>{var Ee;const e=ft(),{appState:t}=Lt(),{t:n}=_e(),i=m.useRef(null);Zs(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const o=Wn(e),[s,r]=m.useState(o.strokeWidth),[l,u]=m.useState(o.strokeColor),[c,d]=m.useState(o.strokeStyle),[p,f]=m.useState(o.pencilShape),[h,x]=m.useState(o.pressureEnabled),[b,g]=m.useState(!1),[w,N]=m.useState(!1),[y,D]=m.useState(String(o.strokeWidth)),[j,k]=m.useState(!1),I=Oa().includes(t.pointer)&&t.pointer!==nt.eraser;m.useEffect(()=>{const V=Wn(e);r(V.strokeWidth),u(V.strokeColor),d(V.strokeStyle),f(V.pencilShape),x(V.pressureEnabled),D(String(V.strokeWidth))},[e,t.pointer]);const q=m.useCallback(V=>{D(V.target.value)},[]),W=m.useCallback(()=>{const V=parseInt(y,10);!isNaN(V)&&V>=1&&V<=100?(V!==s&>.trackUIInteraction({area:"canvas_tool_settings",action:"pencil_stroke_width_changed",control:"stroke_width_input",value:V,source:"pencil_settings_toolbar",metadata:{previousValue:s}}),r(V),Gl(e,V),ts(e,t.pointer)):D(String(s))},[e,y,s,t.pointer]),U=m.useCallback(V=>{V.key==="Enter"?(W(),V.target.blur()):V.key==="Escape"&&(D(String(s)),V.target.blur())},[W,s]),M=m.useCallback(V=>{V!==l&>.trackUIInteraction({area:"canvas_tool_settings",action:"pencil_color_changed",control:"stroke_color_picker",value:"custom",source:"pencil_settings_toolbar",metadata:{hasColor:!!V}}),u(V),vb(e,V),ts(e,t.pointer)},[e,t.pointer,l]),T=m.useCallback(V=>{V!==c&>.trackUIInteraction({area:"canvas_tool_settings",action:"pencil_stroke_style_changed",control:"stroke_style_button",value:V,source:"pencil_settings_toolbar"}),d(V),kb(e,V)},[e,c]),_=m.useCallback(V=>{V!==p&>.trackUIInteraction({area:"canvas_tool_settings",action:"pencil_shape_changed",control:"brush_shape_button",value:V,source:"pencil_settings_toolbar"}),f(V),Eb(e,V),ts(e,t.pointer)},[e,t.pointer,p]),P=m.useCallback(V=>{V!==h&>.trackUIInteraction({area:"canvas_tool_settings",action:"pencil_pressure_changed",control:"pressure_switch",value:V,source:"pencil_settings_toolbar"}),x(V),jb(e,V)},[e,h]);if(!I)return null;const A=z.getBoardContainer(e),Q=((Ee=e.viewport)==null?void 0:Ee.zoom)??1;return a.jsxDEV("div",{className:"pencil-settings-toolbar",onMouseEnter:()=>k(!0),onMouseLeave:()=>k(!1),children:[j&&a.jsxDEV(ik,{color:l||Yl,size:s,zoom:Q,shape:p},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:255,columnNumber:9},void 0),a.jsxDEV(Ye,{ref:i,padding:1,children:a.jsxDEV(ct.Row,{gap:0,align:"center",children:[a.jsxDEV(it,{sideOffset:12,open:b,onOpenChange:g,placement:"bottom",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:"pencil-color-button",type:"button",visible:!0,tooltip:n("toolbar.strokeColor"),"aria-label":n("toolbar.strokeColor"),onPointerUp:()=>g(!b),children:a.jsxDEV("div",{className:"pencil-color-preview",style:{backgroundColor:l||Yl}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:280,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:272,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:271,columnNumber:13},void 0),a.jsxDEV(st,{container:A,children:a.jsxDEV(Ye,{padding:4,className:K("stroke-setting"),children:a.jsxDEV(li,{value:l,onChange:M},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:288,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:287,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:286,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:265,columnNumber:11},void 0),a.jsxDEV("div",{className:"pencil-stroke-style-picker",children:[a.jsxDEV(ie,{className:K("pencil-stroke-style-button",{active:c===mn.solid}),type:"button",visible:!0,icon:a.jsxDEV(ed,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:304,columnNumber:21},void 0),tooltip:"实线","aria-label":"实线",onPointerUp:()=>T(mn.solid)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:298,columnNumber:13},void 0),a.jsxDEV(ie,{className:K("pencil-stroke-style-button",{active:c===mn.dashed}),type:"button",visible:!0,icon:a.jsxDEV(td,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:317,columnNumber:21},void 0),tooltip:"虚线","aria-label":"虚线",onPointerUp:()=>T(mn.dashed)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:311,columnNumber:13},void 0),a.jsxDEV(ie,{className:K("pencil-stroke-style-button",{active:c===mn.dotted}),type:"button",visible:!0,icon:a.jsxDEV(nd,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:330,columnNumber:21},void 0),tooltip:"点线","aria-label":"点线",onPointerUp:()=>T(mn.dotted)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:324,columnNumber:13},void 0),a.jsxDEV(ie,{className:K("pencil-stroke-style-button",{active:c===mn.double}),type:"button",visible:!0,icon:a.jsxDEV(Db,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:343,columnNumber:21},void 0),tooltip:"双层线","aria-label":"双层线",onPointerUp:()=>T(mn.double)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:337,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:297,columnNumber:11},void 0),a.jsxDEV("div",{className:"pencil-shape-picker",children:[a.jsxDEV(Et,{content:n("toolbar.pencilShape.circle"),children:a.jsxDEV(Ns,{variant:"text",size:"small",className:`pencil-shape-button ${p===qt.circle?"active":""}`,onClick:()=>_(qt.circle),children:a.jsxDEV(Jd,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:363,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:355,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:354,columnNumber:13},void 0),a.jsxDEV(Et,{content:n("toolbar.pencilShape.square"),children:a.jsxDEV(Ns,{variant:"text",size:"small",className:`pencil-shape-button ${p===qt.square?"active":""}`,onClick:()=>_(qt.square),children:a.jsxDEV(Qd,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:375,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:367,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:366,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:353,columnNumber:11},void 0),a.jsxDEV(it,{sideOffset:12,open:w,onOpenChange:N,placement:"bottom",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:"pencil-width-button",type:"button",visible:!0,tooltip:n("toolbar.strokeWidth"),"aria-label":n("toolbar.strokeWidth"),onPointerUp:()=>N(!w),children:a.jsxDEV("svg",{className:"pencil-width-icon",viewBox:"0 0 24 24",children:[a.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:397,columnNumber:19},void 0),a.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:405,columnNumber:19},void 0),a.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:413,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:396,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:388,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:387,columnNumber:13},void 0),a.jsxDEV(st,{container:A,children:a.jsxDEV(Ye,{padding:4,className:K("stroke-width-picker"),children:a.jsxDEV(ct.Row,{gap:3,align:"center",style:{padding:"4px 8px"},children:[a.jsxDEV("div",{className:"stroke-width-value",style:{minWidth:"40px",fontSize:"13px",fontWeight:500,color:"var(--color-on-surface)"},children:[s,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:431,columnNumber:19},void 0),a.jsxDEV("div",{className:"stroke-width-slider-wrapper",style:{flex:1,minWidth:"160px"},children:a.jsxDEV(Ls,{value:s,min:1,max:100,step:1,onChange:V=>{const $=V;r($),D(String($)),Gl(e,$),ts(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:446,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:442,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:426,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:425,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:424,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:381,columnNumber:11},void 0),a.jsxDEV("div",{className:"pencil-width-input-wrapper",children:[a.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:y,onChange:q,onBlur:W,onKeyDown:U,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:468,columnNumber:13},void 0),a.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:478,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:467,columnNumber:11},void 0),a.jsxDEV(Et,{content:"压力感应:支持压感笔;鼠标/触控板使用速度模拟(慢=粗,快=细)",children:a.jsxDEV("div",{className:"pencil-pressure-switch",children:a.jsxDEV(Sb,{size:"small",value:h,onChange:P},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:484,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:483,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:482,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:263,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:262,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:248,columnNumber:5},void 0)},sk=({color:e,size:t,zoom:n,shape:i=qt.circle})=>{const o=t*n,s=Math.max(4,Math.min(256,o)),r=i===qt.circle?"50%":"0";return a.jsxDEV("div",{className:"cursor-preview-dot",style:{width:s,height:s,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)},rk=()=>a.jsxDEV("svg",{className:"size-picker-icon",viewBox:"0 0 24 24",children:[a.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:38,columnNumber:5},void 0),a.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:39,columnNumber:5},void 0),a.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:40,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:37,columnNumber:3},void 0),ak=({size:e,onSizeChange:t,onSizeCommit:n,presets:i,previewColor:o,title:s,container:r,icon:l})=>{const{t:u}=_e(),[c,d]=m.useState(!1),[p,f]=m.useState(String(e)),[h,x]=m.useState(e);yn.useEffect(()=>{f(String(e))},[e]),yn.useEffect(()=>{c||x(e)},[c,e]);const b=m.useCallback(y=>{y!==h&&(n==null||n(y),x(y))},[h,n]),g=m.useCallback(y=>{f(y.target.value)},[]),w=m.useCallback(()=>{const y=parseInt(p,10);!isNaN(y)&&y>=1?(t(y),b(y)):f(String(e))},[b,p,e,t]),N=m.useCallback(y=>{y.key==="Enter"?(w(),y.target.blur()):y.key==="Escape"&&(f(String(e)),y.target.blur())},[w,e]);return a.jsxDEV(a.Fragment,{children:[a.jsxDEV(it,{sideOffset:12,open:c,onOpenChange:y=>{y||b(e),d(y)},placement:"bottom",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV(ie,{className:"size-picker-button",type:"button",visible:!0,tooltip:s,"aria-label":s,onPointerUp:()=>d(!c),children:l||a.jsxDEV(rk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:127,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:119,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:118,columnNumber:9},void 0),a.jsxDEV(st,{container:r,children:a.jsxDEV(Ye,{padding:4,className:K("size-picker-popover"),children:a.jsxDEV(ct.Row,{gap:3,align:"center",style:{padding:"4px 8px"},children:[a.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:136,columnNumber:15},void 0),a.jsxDEV("div",{className:"size-picker-slider-wrapper",style:{flex:1,minWidth:"160px"},children:a.jsxDEV(Ls,{value:e,min:1,max:Math.max(256,...i),step:1,onChange:y=>{const D=y;f(String(D)),t(D)},label:!1},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:140,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:139,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:135,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:131,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:130,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:107,columnNumber:7},void 0),a.jsxDEV("div",{className:"size-picker-input-wrapper",children:[a.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:p,onChange:g,onBlur:w,onKeyDown:N,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:160,columnNumber:9},void 0),a.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:170,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:159,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:105,columnNumber:5},void 0)},lk=[16,32,48,64,96,128,192,256],ck="#f5f5f5",uk=()=>{var w;const e=ft(),{appState:t}=Lt(),{t:n}=_e(),i=m.useRef(null);Zs(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const o=Wn(e),[s,r]=m.useState(o.eraserWidth),[l,u]=m.useState(o.eraserShape),[c,d]=m.useState(!1),p=t.pointer===nt.eraser;m.useEffect(()=>{const N=Wn(e);r(N.eraserWidth),u(N.eraserShape)},[e,t.pointer]);const f=m.useCallback(N=>{r(N),Cb(e,N),mu(e)},[e]),h=m.useCallback(N=>{gt.trackUIInteraction({area:"canvas_tool_settings",action:"eraser_size_changed",control:"eraser_size_picker",value:N,source:"eraser_settings_toolbar"})},[]),x=m.useCallback(N=>{N!==l&>.trackUIInteraction({area:"canvas_tool_settings",action:"eraser_shape_changed",control:"eraser_shape_button",value:N,source:"eraser_settings_toolbar"}),u(N),_b(e,N),mu(e)},[e,l]);if(!p)return null;const b=z.getBoardContainer(e),g=((w=e.viewport)==null?void 0:w.zoom)??1;return a.jsxDEV("div",{className:"pencil-settings-toolbar eraser-settings-toolbar",onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),children:[c&&a.jsxDEV(sk,{color:ck,size:s,zoom:g,shape:l},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:129,columnNumber:9},void 0),a.jsxDEV(Ye,{ref:i,padding:1,children:a.jsxDEV(ct.Row,{gap:1,align:"center",children:[a.jsxDEV(ak,{size:s,onSizeChange:f,onSizeCommit:h,presets:lk,previewColor:"#999",title:n("toolbar.eraserSize"),container:b},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:138,columnNumber:11},void 0),a.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:148,columnNumber:11},void 0),a.jsxDEV("div",{className:"eraser-shape-picker",children:[a.jsxDEV(Et,{content:n("toolbar.eraserShape.circle"),children:a.jsxDEV(Ns,{variant:"text",size:"small",className:`eraser-shape-button ${l===qt.circle?"active":""}`,onClick:()=>x(qt.circle),children:a.jsxDEV(Jd,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:160,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:152,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:151,columnNumber:13},void 0),a.jsxDEV(Et,{content:n("toolbar.eraserShape.square"),children:a.jsxDEV(Ns,{variant:"text",size:"small",className:`eraser-shape-button ${l===qt.square?"active":""}`,onClick:()=>x(qt.square),children:a.jsxDEV(Qd,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:172,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:164,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:163,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:150,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:137,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:136,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:122,columnNumber:5},void 0)},dk=[{icon:a.jsxDEV(Vb,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:38,columnNumber:11},void 0),type:"corner",titleKey:"toolbar.anchorCorner"},{icon:a.jsxDEV(Tb,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:43,columnNumber:11},void 0),type:"smooth",titleKey:"toolbar.anchorSmooth"},{icon:a.jsxDEV(Ub,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:48,columnNumber:11},void 0),type:"symmetric",titleKey:"toolbar.anchorSymmetric"}],mk=()=>{const e=ft(),{appState:t}=Lt(),{t:n}=_e(),i=m.useRef(null);Zs(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const o=Or(e),[s,r]=m.useState(o.defaultAnchorType),l=t.pointer===Pn.pen&&e.pointer===Pn.pen;m.useEffect(()=>{const c=Or(e);r(c.defaultAnchorType)},[e,t.pointer,e.pointer]);const u=m.useCallback(c=>{c!==s&>.trackUIInteraction({area:"canvas_tool_settings",action:"pen_anchor_type_changed",control:"anchor_type_button",value:c,source:"pen_settings_toolbar"}),r(c),Pb(e,c)},[s,e]);return l?a.jsxDEV("div",{className:"pen-settings-toolbar",children:a.jsxDEV(Ye,{ref:i,padding:1,children:a.jsxDEV(ct.Row,{gap:0,align:"center",children:a.jsxDEV("div",{className:"pen-anchor-type-picker",children:dk.map(c=>a.jsxDEV(ie,{className:K("pen-anchor-type-button",{active:s===c.type}),type:"button",visible:!0,icon:c.icon,tooltip:n(c.titleKey),"aria-label":n(c.titleKey),onPointerUp:()=>u(c.type)},c.type,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:111,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:109,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:107,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:103,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:102,columnNumber:5},void 0):null},pk=({container:e})=>{const{appState:t,setAppState:n}=Lt(),{t:i}=_e(),o=ft();return a.jsxDEV(Ib,{open:t.openCleanConfirm,container:e,title:i("cleanConfirm.title"),description:i("cleanConfirm.description"),confirmText:i("cleanConfirm.ok"),cancelText:i("cleanConfirm.cancel"),danger:!0,onOpenChange:s=>{n({...t,openCleanConfirm:s})},onConfirm:()=>{o.deleteFragment(o.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)},pu=e=>{const{appState:t}=e;return t&&t.linkState&&t.linkState.isHovering},fu=e=>{const{appState:t}=e;return t&&t.linkState&&t.linkState.isEditing},fk=e=>n=>{const{pointerMove:i}=n;let o=null,s=null;return n.pointerMove=r=>{(z.isPointer(n,wt.selection)||z.isPointer(n,wt.hand))&&!ko(n)&&!Ku(n)&&!pu(n)&&!fu(n)&&Ta(n,"with-text-link",()=>{const l=r.target.closest(".plait-board-link");if(l&&l!==o){const u=l.closest(".plait-text-container"),c=gn.toSlateNode(void 0,u),d=gn.toSlateNode(void 0,l);o=l,e({linkState:{targetDom:l,targetElement:d,editor:c,isEditing:!1,isHovering:!1,isHoveringOrigin:!0}}),clearTimeout(s)}else!l&&o&&(s=setTimeout(()=>{!pu(n)&&!fu(n)&&e({linkState:null})},300),o=null)}),i(r)},n},hk=()=>{var g,w,N,y;const[e,t]=m.useState(""),{appState:n,setAppState:i}=Lt(),o=ft(),{refs:s,floatingStyles:r}=ja({placement:"top",middleware:[Da(20),Sa()]}),l=n.linkState,u=((g=n.linkState)==null?void 0:g.targetDom)||null,c=((w=n.linkState)==null?void 0:w.isEditing)||!1,d=((N=n.linkState)==null?void 0:N.isHoveringOrigin)||!1,p=((y=n.linkState)==null?void 0:y.isHovering)||!1,f=c||d||p,h=m.useRef(n.linkState);m.useEffect(()=>{h.current=n.linkState,n.linkState?t(n.linkState.targetElement.url):t("")},[n.linkState]),m.useEffect(()=>{if(u){const D=u.getBoundingClientRect();s.setPositionReference({getBoundingClientRect(){return{x:D.x,y:D.y,width:D.width,height:D.height,top:D.y,left:D.x,right:D.x+D.width,bottom:D.y+D.height}}})}},[o.viewport,u,s]);const x=m.useRef();x.current=D=>{if(s.floating.current&&!s.floating.current.contains(D.target)){if(h.current){const j=Pi.getLinkElement(h.current.editor);j&&!j[0].url.trim()&&Pi.unwrapLink(h.current.editor)}i({...n,linkState:null})}},m.useEffect(()=>{const D=j=>{var k;(k=x.current)==null||k.call(x,j)};return document.addEventListener("mousedown",D),()=>{document.removeEventListener("mousedown",D)}},[]);const b=()=>{if(!l)return;if(e!==l.targetElement.url){const j=l.editor,k=l.targetElement,E=gn.findPath(j,k);fr.setNodes(j,{url:e},{at:E})}const D=Pi.getLinkElement(l.editor);D&&i({...n,linkState:{...n.linkState,targetElement:D[0],isEditing:!1,isHoveringOrigin:!0}})};return f&&a.jsxDEV(Ye,{ref:s.setFloating,style:r,padding:1,className:K("link-popup"),onPointerEnter:()=>{!p&&n.linkState&&i({...n,linkState:{...n.linkState,isHovering:!0}})},onPointerLeave:()=>{!c&&n.linkState&&i({...n,linkState:{...n.linkState,isHovering:!1}})},children:a.jsxDEV(ct.Row,{gap:1,align:"center",children:c?a.jsxDEV(a.Fragment,{children:[a.jsxDEV("input",{type:"text",value:e,onChange:D=>{t(D.target.value)},onKeyDown:D=>{D.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),a.jsxDEV(ie,{type:"icon",visible:!0,icon:a.jsxDEV(bs,{},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(!l)return;const D=l.editor,j=l.targetElement,k=gn.findPath(D,j);fr.unwrapNodes(D,{at:k}),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):a.jsxDEV(a.Fragment,{children:[a.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),a.jsxDEV(ie,{className:"link-popup__edit",type:"icon",visible:!0,icon:a.jsxDEV(Bi,{},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:D})=>{D.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),a.jsxDEV(ie,{type:"icon",visible:!0,icon:a.jsxDEV(bs,{},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(!l)return;const D=l.editor,j=l.targetElement,k=gn.findPath(D,j);fr.unwrapNodes(D,{at:k}),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)},ao={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 gk(){return"0.6.80"}function hu(e){return{...ao,...e,retryPolicy:{...ao.retryPolicy,...e.retryPolicy||{}},cacheConfig:{...ao.cacheConfig,...e.cacheConfig||{}},batchConfig:{...ao.batchConfig,...e.batchConfig||{}}}}class bk{isAvailable(){return gt.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{gt.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(o){n.push({success:!1,error:o})}return n}getSDKInfo(){return{available:this.isAvailable(),version:this.isAvailable()?"PostHog JS":void 0}}}const gu=new bk;class xk{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 gu.trackBatch(t),i=n.filter(o=>!o.success);if(i.length>0){console.error(`Batch upload: ${i.length}/${t.length} events failed`);const o=t.filter((s,r)=>!n[r].success);this.requeueFailedEvents(o)}}catch(n){console.error("Batch upload failed:",n),this.requeueFailedEvents(t)}finally{this.uploading=!1}}async uploadImmediate(t){try{await gu.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 Nk{constructor(t=500){this.debounceMap=new WeakMap,this.globalDebounceMap=new Map,this.globalDebounceTime=200,this.debounceTime=t}shouldTrack(t,n,i=!1){const o=Date.now(),s=this.globalDebounceMap.get(n);if(s&&o-s<this.globalDebounceTime)return i&&console.warn(`[Tracking] 🚫 Global debounce: ${n} (${o-s}ms ago)`),!1;const r=this.debounceMap.get(t);if(!r){const u=new Map;return u.set(n,o),this.debounceMap.set(t,u),this.globalDebounceMap.set(n,o),!0}const l=r.get(n);return!l||o-l>this.debounceTime?(r.set(n,o),this.globalDebounceMap.set(n,o),!0):(i&&console.warn(`[Tracking] 🚫 Element debounce: ${n} (${o-l}ms ago)`),!1)}clear(t){this.debounceMap.delete(t)}setDebounceTime(t){this.debounceTime=t}}const wk=["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 yk(e,t){if(!e.matches(wk))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 vk(e,t="click"){var l;const n=`auto_${t}_`;if(e.id)return`${n}${e.id}`;const i=e.getAttribute("aria-label");if(i)return`${n}${bu(i)}`;const o=(l=e.textContent)==null?void 0:l.trim();if(o&&o.length>0){const u=bu(o.substring(0,20));return`${n}${u}`}const s=e.tagName.toLowerCase(),r=e.className?`.${e.className.split(" ")[0]}`:"";return`${n}${s}${r}`}function bu(e){return e.toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"").substring(0,50)}function kk(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 o=n.className.split(" ").filter(Boolean);o.length>0&&(i+=`.${o[0]}`)}t.unshift(i),n=n.parentElement}return t.join(" > ")}function Dr(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 gp(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function Ek(){if(typeof window>"u")return"server-side";const e="tracking_session_id";let t=sessionStorage.getItem(e);return t||(t=gp(),sessionStorage.setItem(e,t)),t}function jk(){return typeof window>"u"?{width:0,height:0}:{width:window.innerWidth||0,height:window.innerHeight||0}}class Dk{constructor(t={}){this.state$=new qb({initialized:!1,config:ao,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=hu(t),this.batchService=new xk(this.config.batchConfig),this.debouncer=new Nk(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 o=i.getAttribute("data-track");if(o){if(this.isElementExcluded(i))return;this.trackClick(i,o);return}}if(this.config.autoTrack&&yk(n,this.config.excludedSelectors)){if(this.isElementExcluded(n))return;const o=vk(n,"click");this.trackClick(n,o)}},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 o=Dr(t),s=this.createTrackEvent(n,o,"hover",t);this.track(s)};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 o=Dr(t),s=this.createTrackEvent(n,o,"focus",t);this.track(s)};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 o=i;o.hasAttribute("track-hover")&&this.attachHoverListener(o),o.hasAttribute("track-focus")&&this.attachFocusListener(o),o.querySelectorAll("[track-hover]").forEach(l=>this.attachHoverListener(l)),o.querySelectorAll("[track-focus]").forEach(l=>this.attachFocusListener(l))}})})}),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=Dr(t),o=this.createTrackEvent(n,i,"click",t);this.track(o)}createTrackEvent(t,n,i,o){const s={timestamp:Date.now(),url:typeof window<"u"?window.location.href:"",version:gk(),sessionId:Ek(),userAgent:typeof navigator<"u"?navigator.userAgent:void 0,viewport:jk(),eventType:i},r={eventName:t,params:n||void 0,metadata:s,id:gp(),createdAt:Date.now()};return this.config.devMode&&this.log("debug",`Event created: ${t}`,{params:n,element:o?kk(o):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=hu({...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 En=null;function Sk(){En&&(En.destroy(),En=null)}function Ck(e,t){return En||(En=new Dk(t),typeof window<"u"&&setTimeout(()=>{En==null||En.initialize()},0),typeof module<"u"&&module.hot&&module.hot.dispose(()=>{Sk()})),e.trackingService=En,e}class _k extends La{initialize(){super.initialize()}}const Pk=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.`),_k}},e};function Vk(e,t,n,i=0){const o=he.getCenterPoint(t),s=mi(t,Yn);if(i){const r=Tk(n,o,-i);let l=s.find(u=>he.isHit(he.getRectangleByPoints([r,r]),u.rectangle));return l&&(l.cursorClass=Qs(l.cursorClass,i)),l}else return s.find(r=>he.isHit(he.getRectangleByPoints([n,n]),r.rectangle))}function Tk(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],l=e[1]-t[1];return[t[0]+r*o-l*s,t[1]+r*s+l*o]}function Uk(e){const t=Oe(e);return t.length!==1?!1:Ca(t[0])}function Ik(e,t){const n=Oe(e);if(n.length!==1||!Ca(n[0]))return null;const i=n[0],o=he.getRectangleByPoints(i.points),s=i.angle||0,r=Vk(e,o,t,s);return r?{element:i,rectangle:o,handle:r.handle,cursorClass:r.cursorClass}:null}function qk(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:l}=n;if(!o){console.warn("startRectangle is undefined");return}const u=l[0]-r[0],c=l[1]-r[1],d=Hi(o,s,u,c,zo(),100),p=[[d.x,d.y],[d.x+d.width,d.y+d.height]],f=e.children.findIndex(h=>h.id===i.id);f>=0&&ce.setNode(e,{points:p},[f])}const Ak=e=>di(e,{key:"tool-elements",canResize:()=>Uk(e),hitTest:(t=>Ik(e,t)),onResize:(t,n)=>qk(e,t,n)});let _s=null;function Mk(e,t){return Ge.isFreehand(t)?Js(t):Ze.isPenPath(t)?er(t):e.getRectangle(t)}function Rk(e,t){return mi(e,Yn).find(i=>he.isHit(he.getRectangleByPoints([t,t]),i.rectangle))}function ll(e){return e.some(t=>Ge.isFreehand(t)||Ze.isPenPath(t)||B.isText(t))}function zk(e){return e.some(t=>B.isText(t))}function bp(e){const t=Oe(e);if(t.length<2||!ll(t))return null;try{const n=It(e,t,!1);return{elements:t,rectangle:n}}catch{return null}}function Lk(e){return bp(e)!==null}function Ok(e,t){const n=bp(e);if(!n)return null;const i=Rk(n.rectangle,t);if(i){_s=new Map;for(const o of n.elements){const s=Mk(e,o);s&&_s.set(o.id,{element:JSON.parse(JSON.stringify(o)),rectangle:{...s}})}return{element:n.elements,rectangle:n.rectangle,handle:i.handle,cursorClass:i.cursorClass}}return null}function Fk(e,t,n,i,o,s){const r=s.width/o.width,l=s.height/o.height,u=i.x-o.x,c=i.y-o.y,d=s.x+u*r,p=s.y+c*l,f=n.points.map(x=>{const b=x[0]-i.x,g=x[1]-i.y,w=b*r,N=g*l;return[d+w,p+N]}),h=e.children.findIndex(x=>x.id===t);h>=0&&ce.setNode(e,{points:f},[h])}function Bk(e,t,n,i,o,s){const r=s.width/o.width,l=s.height/o.height,u=i.x-o.x,c=i.y-o.y,d=s.x+u*r,p=s.y+c*l,f=n.anchors.map(N=>({...N,point:[N.point[0]*r,N.point[1]*l],handleIn:N.handleIn?[N.handleIn[0]*r,N.handleIn[1]*l]:void 0,handleOut:N.handleOut?[N.handleOut[0]*r,N.handleOut[1]*l]:void 0})),h=i.width*r,x=i.height*l,g=[[d,p],[d+h,p+x]],w=e.children.findIndex(N=>N.id===t);w>=0&&ce.setNode(e,{points:g,anchors:f},[w])}const xp=14;function Np(e,t){const n={...e};if("text"in e&&typeof e.text=="string"){const i=e["font-size"]?parseFloat(e["font-size"]):xp,o=Math.max(1,Math.round(i*t*10)/10);n["font-size"]=`${o}`}return Array.isArray(e.children)&&(n.children=e.children.map(i=>Np(i,t))),n}function Hk(e,t,n,i,o,s){const r=s.width/o.width,l=s.height/o.height,u=i.x-o.x,c=i.y-o.y,d=s.x+u*r,p=s.y+c*l,f=i.width*r,h=i.height*l,x=[[d,p],[d+f,p+h]],b=e.children.findIndex(g=>g.id===t);if(b>=0)if(B.isDrawElement(n)&&B.isImage(n))ce.setNode(e,{points:x,width:f,height:h},[b]);else if(B.isText(n)){const g=n,w=Np(g.text,r),N=g.textHeight||xp*1.4;ce.setNode(e,{points:x,text:w,textHeight:N*r,autoSize:!1},[b])}else ce.setNode(e,{points:x},[b])}function Wk(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:l}=n;if(!o||!Array.isArray(i)||!_s)return;const u=l[0]-r[0],c=l[1]-r[1],d=zo()||zk(i),p=Hi(o,s,u,c,d);for(const f of i){const h=_s.get(f.id);if(!h)continue;const{element:x,rectangle:b}=h;Ge.isFreehand(x)?Fk(e,f.id,x,b,o,p):Ze.isPenPath(x)?Bk(e,f.id,x,b,o,p):Hk(e,f.id,x,b,o,p)}}function $k(e){const t=Oe(e);if(t.length<2||!ll(t))return null;try{const n=Va(),i=It(e,t,!1),o=Ab(e,i);return he.getCornerPoints(o).forEach(r=>{const l=Mb(e,r);n.append(l)}),n}catch{return null}}const Gk=e=>{const{afterChange:t}=e;let n=null;return e.afterChange=()=>{t(),n&&(n.remove(),n=null);const i=Oe(e);i.length>1&&ll(i)&&!wo(e)&&(n=$k(e),n&&z.getActiveHost(e).append(n))},di(e,{key:"multi-resize",canResize:()=>Lk(e),hitTest:(i=>Ok(e,i)),onResize:(i,o)=>Wk(e,i,o)})},wp=14;let ps=null,la=null;function Yk(e,t){return mi(e,Yn).find(i=>he.isHit(he.getRectangleByPoints([t,t]),i.rectangle))}function yp(e,t){const n={...e};if("text"in e&&typeof e.text=="string"){const i=e["font-size"]?parseFloat(e["font-size"]):wp,o=Math.max(1,Math.round(i*t*10)/10);n["font-size"]=`${o}`}return Array.isArray(e.children)&&(n.children=e.children.map(i=>yp(i,t))),n}function Xk(e){const t=Oe(e);return t.length!==1?!1:B.isText(t[0])}function Kk(e,t){const n=Oe(e);if(n.length!==1||!B.isText(n[0]))return null;const i=n[0],o=he.getRectangleByPoints(i.points),s=Yk(o,t);return s?(ps=JSON.parse(JSON.stringify(i)),la={...o},{element:i,rectangle:o,handle:s.handle,cursorClass:s.cursorClass}):null}function Zk(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:l}=n;if(!o||!ps||!la)return;const u=l[0]-r[0],c=l[1]-r[1],d=Hi(o,s,u,c,!0,20),p=d.width/la.width;if(p<=0)return;const f=yp(ps.text,p),x=(ps.textHeight||wp*1.4)*p,b=[[d.x,d.y],[d.x+d.width,d.y+d.height]],g=e.children.findIndex(w=>w.id===i.id);g>=0&&ce.setNode(e,{points:b,text:f,textHeight:x,autoSize:!1},[g])}const Jk=e=>di(e,{key:"text-resize",canResize:()=>Xk(e),hitTest:t=>Kk(e,t),onResize:(t,n)=>Zk(e,t,n)});function Qk(e){return e.some(n=>Ge.isFreehand(n)||Ze.isPenPath(n))}function eE(e){const t=Oe(e);if(t.length<2||!Qk(t))return null;try{return It(e,t,!1)}catch{return null}}const tE=()=>{const e=ft(),[t,n]=m.useState([]),[i,o]=m.useState(!1),[s,r]=m.useState(!1),l=m.useRef(!1),u=m.useCallback(()=>{const p=yo(e)||ko(e)||wo(e);if(r(p),p)return;Oe(e);const f=eE(e);if(!f){o(!1);return}const x=[{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 g=oo(e,[b.x,b.y]);return{x:g[0],y:g[1],cursor:b.cursor}});n(x),o(!0)},[e]);if(m.useEffect(()=>{l.current=s},[s]),m.useEffect(()=>{u();let p,f=JSON.stringify(e.viewport),h=JSON.stringify(e.selection),x=e.children.length;const b=()=>{const g=JSON.stringify(e.viewport),w=JSON.stringify(e.selection),N=e.children.length,y=yo(e)||ko(e)||wo(e);(g!==f||w!==h||N!==x||y!==l.current)&&(f=g,h=w,x=N,u()),p=requestAnimationFrame(b)};return p=requestAnimationFrame(b),()=>{cancelAnimationFrame(p)}},[e,u]),!i||t.length===0||s)return null;const c=Yn,d=c/2;return a.jsxDEV("div",{className:K("multi-selection-handles",Pt),children:t.map((p,f)=>a.jsxDEV("div",{className:"multi-selection-handle",style:{left:p.x-d,top:p.y-d,width:c,height:c,cursor:p.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)},vp=m.createContext(null),nE=typeof window<"u"?Math.max(375,window.innerWidth*.5):600,iE=({children:e})=>{const t=m.useRef(null),n=m.useRef(null),[i,o]=m.useState([]),[s,r]=m.useState(!1),[l,u]=m.useState(nE),c=m.useCallback(p=>{n.current=p},[]),d=m.useCallback(async(p,f)=>{n.current?await n.current(p,f):console.warn("[ChatDrawerContext] No retry handler registered")},[]);return a.jsxDEV(vp.Provider,{value:{chatDrawerRef:t,registerRetryHandler:c,executeRetry:d,selectedContent:i,setSelectedContent:o,isDrawerOpen:s,setIsDrawerOpen:r,drawerWidth:l,setDrawerWidth:u},children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/contexts/ChatDrawerContext.tsx",lineNumber:79,columnNumber:5},void 0)};function kp(){const e=m.useContext(vp);if(!e)throw new Error("useChatDrawer must be used within a ChatDrawerProvider");return e}function oE(){const{chatDrawerRef:e,registerRetryHandler:t,executeRetry:n,selectedContent:i,setSelectedContent:o,isDrawerOpen:s,setIsDrawerOpen:r,drawerWidth:l,setDrawerWidth:u}=kp();return{openChatDrawer:()=>{var c;(c=e.current)==null||c.open()},closeChatDrawer:()=>{var c;(c=e.current)==null||c.close()},toggleChatDrawer:()=>{var c;(c=e.current)==null||c.toggle()},sendMessageToChatDrawer:async c=>{var d;await((d=e.current)==null?void 0:d.sendMessage(c))},sendWorkflowMessage:async c=>{var d;await((d=e.current)==null?void 0:d.sendWorkflowMessage(c))},updateWorkflowMessage:c=>{var d;(d=e.current)==null||d.updateWorkflowMessage(c)},appendAgentLog:c=>{var d;(d=e.current)==null||d.appendAgentLog(c)},updateThinkingContent:c=>{var d;(d=e.current)==null||d.updateThinkingContent(c)},isChatDrawerOpen:()=>{var c;return((c=e.current)==null?void 0:c.isOpen())??!1},isDrawerOpen:s,setIsDrawerOpen:r,drawerWidth:l,setDrawerWidth:u,registerRetryHandler:t,retryWorkflowFromStep:async(c,d)=>{await n(c,d)},selectedContent:i,setSelectedContent:o}}class sE{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=$o.getToolById("banana-prompt");if(!n){console.error('❌ Tool "banana-prompt" not found');return}hi.insertTool(t,n.id,n.url,[100,100],{width:n.defaultWidth||gi.defaultWidth,height:n.defaultHeight||gi.defaultHeight},{name:n.name,category:n.category,permissions:n.permissions})}insertXiaohongshuTool(){const t=this.getBoard();if(!t)return;const n=$o.getToolById("xiaohongshu-tool");if(!n){console.error('❌ Tool "xiaohongshu-tool" not found');return}hi.insertTool(t,n.id,n.url,[300,300],{width:n.defaultWidth||gi.defaultWidth,height:n.defaultHeight||gi.defaultHeight},{name:n.name,category:n.category,permissions:n.permissions})}insertToolById(t,n=200,i=200){const o=this.getBoard();if(!o)return;const s=$o.getToolById(t);if(!s){console.error(`❌ Tool "${t}" not found`);return}hi.insertTool(o,s.id,s.url,[n,i],{width:s.defaultWidth||gi.defaultWidth,height:s.defaultHeight||gi.defaultHeight},{name:s.name,category:s.category,permissions:s.permissions})}listAllTools(){$o.getAvailableTools().forEach((n,i)=>{})}getAllToolElements(){const t=this.getBoard();if(!t)return;hi.getAllTools(t).forEach((i,o)=>{})}removeAllTools(){const t=this.getBoard();if(!t)return;hi.getAllTools(t).forEach(i=>{hi.removeTool(t,i.id)})}help(){}}const Ep=new sE;typeof window<"u"&&(window.testToolbox=Ep);const rE={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)"},aE={autoHideDelay:3e3},lE=e=>{if(!e)return null;const[t,n]=e.trim().split(/[\s,]+/).map(i=>Number(i));return!Number.isFinite(t)||!Number.isFinite(n)?null:{x:t,y:n}},cE=e=>{const t=e.viewport.zoom;if(!Number.isFinite(t)||t<=0)return null;try{const n=z.getViewportContainer(e),i=z.getHost(e),o=lE(i.getAttribute("viewBox"));return o?[n.scrollLeft/t+o.x,n.scrollTop/t+o.y]:null}catch{return null}},jp=e=>{const t=cE(e);return t||Ao(e)||e.viewport.origination||[0,0]},uE=e=>{const[t,n]=jp(e);return{zoom:e.viewport.zoom,originX:t,originY:n}},dE=({board:e,config:t,className:n,displayMode:i="auto",autoTriggerConfig:o})=>{const s=m.useRef(null),r=m.useRef(null);m.useRef(null);const l={...rE,...t},u={...aE,...o},[c,d]=m.useState(()=>({expanded:i==="always"?!0:l.defaultExpanded,dragging:!1,autoMode:i==="auto",manuallyExpanded:!1})),p=m.useRef({isDragging:!1,startPoint:null}),f=m.useRef(null),[h,x]=m.useState(null),b=m.useRef(null),[g,w]=m.useState(!1),N=120,y=m.useRef(0),D=m.useRef(null),j=m.useCallback(()=>{if(!e||!e.children)return[];const X=[];return e.children.forEach(v=>{try{let H=null;v.points&&Array.isArray(v.points)?H=he.getRectangleByPoints(v.points):v.x!==void 0&&v.y!==void 0&&(H={x:v.x,y:v.y,width:v.width||100,height:v.height||100}),H&&H.width>0&&H.height>0&&X.push({id:v.id,bounds:H,type:v.type})}catch(H){console.warn("Failed to get bounds for element:",v.id,H)}}),X},[e]),k=m.useCallback(()=>{const v=z.getBoardContainer(e).getBoundingClientRect(),H=e.viewport.zoom,O=jp(e),pe=O[0],me=O[1],C=v.width/H,L=v.height/H;return{x:pe,y:me,width:C,height:L}},[e]),E=m.useRef(c.expanded);E.current=c.expanded;const I=m.useRef(null),q=m.useRef(1);m.useEffect(()=>{if(i==="always"){E.current||d(v=>({...v,expanded:!0}));return}if(i!=="auto")return;const X=setInterval(()=>{const v=uE(e),H=D.current;if(!H){D.current=v;return}const O=Math.abs(v.zoom-H.zoom)>.001,pe=Math.abs(v.originX-H.originX)>.5||Math.abs(v.originY-H.originY)>.5;(O||pe)&&(D.current=v,y.current=Date.now(),E.current||d(C=>({...C,expanded:!0,manuallyExpanded:!1})))},100);return()=>{clearInterval(X)}},[i,e]),m.useEffect(()=>{if(i!=="auto"||!c.expanded||c.manuallyExpanded||c.dragging)return;const X=setTimeout(()=>{d(v=>!v.autoMode||v.manuallyExpanded||v.dragging?v:{...v,expanded:!1})},u.autoHideDelay);return()=>{clearTimeout(X)}},[i,c.expanded,c.manuallyExpanded,c.dragging,u.autoHideDelay]);const W=m.useCallback((X,v)=>{if(X.length===0)return{x:v.x-200,y:v.y-200,width:v.width+400,height:v.height+400};let H=v.x,O=v.y,pe=v.x+v.width,me=v.y+v.height;X.forEach(L=>{const{x:F,y:G,width:J,height:ee}=L.bounds;H=Math.min(H,F),O=Math.min(O,G),pe=Math.max(pe,F+J),me=Math.max(me,G+ee)});const C=100;return{x:H-C,y:O-C,width:pe-H+C*2,height:me-O+C*2}},[]),U=m.useCallback(X=>{const H=(l.width-20)/X.width,O=(l.height-20)/X.height;return Math.min(H,O)},[l.width,l.height]),M=m.useCallback((X,v,H,O)=>{const me=(X-H.x)*O+10,C=(v-H.y)*O+10;return[me,C]},[]),T=m.useCallback((X,v,H,O)=>{const me=(X-10)/O+H.x,C=(v-10)/O+H.y;return[me,C]},[]),_=m.useCallback((X,v,H)=>{if(100*H<5)return;X.strokeStyle="rgba(0, 0, 0, 0.05)",X.lineWidth=.5;const me=Math.floor(v.x/100)*100,C=Math.floor(v.y/100)*100,L=v.x+v.width,F=v.y+v.height;for(let G=me;G<=L;G+=100){const[J]=M(G,0,v,H);X.beginPath(),X.moveTo(J,0),X.lineTo(J,l.height),X.stroke()}for(let G=C;G<=F;G+=100){const[,J]=M(0,G,v,H);X.beginPath(),X.moveTo(0,J),X.lineTo(l.width,J),X.stroke()}},[M,l.width,l.height]),P=m.useCallback(()=>{const X=s.current;if(!X)return;const v=X.getContext("2d");if(!v)return;v.clearRect(0,0,l.width,l.height);const H=j(),O=k();if(H.length===0&&!O){v.fillStyle="#999",v.font="12px sans-serif",v.textAlign="center",v.textBaseline="middle",v.fillText("空画布",l.width/2,l.height/2);return}const pe=W(H,O),me=U(pe);I.current=pe,q.current=me,_(v,pe,me),v.fillStyle=l.elementColor,v.strokeStyle="rgba(0, 0, 0, 0.1)",v.lineWidth=.5,H.forEach(Z=>{const{x:te,y:le,width:Me,height:$e}=Z.bounds,[oe,Ce]=M(te,le,pe,me),ke=Me*me,Ne=$e*me;v.fillRect(oe,Ce,ke,Ne),v.strokeRect(oe,Ce,ke,Ne)});const[C,L]=M(O.x,O.y,pe,me),F=O.width*me,G=O.height*me;v.fillStyle=l.viewportColor,v.fillRect(C,L,F,G),v.strokeStyle=l.viewportColor.replace("0.3","1"),v.lineWidth=2,v.strokeRect(C,L,F,G);const J=8;v.fillStyle=l.viewportColor.replace("0.3","0.8"),v.fillRect(C,L,J,2),v.fillRect(C,L,2,J),v.fillRect(C+F-J,L,J,2),v.fillRect(C+F-2,L,2,J),v.fillRect(C,L+G-2,J,2),v.fillRect(C,L+G-J,2,J),v.fillRect(C+F-J,L+G-2,J,2),v.fillRect(C+F-2,L+G-J,2,J);const ee=b.current;if(ee){const Z=ee.x-F/2,te=ee.y-G/2;v.fillStyle="rgba(243, 156, 18, 0.15)",v.fillRect(Z,te,F,G),v.strokeStyle="rgba(243, 156, 18, 0.8)",v.lineWidth=2,v.strokeRect(Z,te,F,G)}},[e,l,j,k,W,U,M,_]),A=m.useCallback(X=>{X.preventDefault(),X.stopPropagation();const v=s.current;if(!v||!I.current)return;const H=v.getBoundingClientRect(),O=X.clientX-H.left,pe=X.clientY-H.top;gt.track("minimap_navigate",{action:"click",displayMode:i});const[me,C]=T(O,pe,I.current,q.current);p.current={isDragging:!0,startPoint:[O,pe]},d(L=>({...L,dragging:!0})),Q(me,C)},[T,e]),Q=m.useCallback((X,v)=>{const O=z.getBoardContainer(e).getBoundingClientRect(),pe=e.viewport.zoom,me=X-O.width/(2*pe),C=v-O.height/(2*pe);be.updateViewport(e,[me,C],pe),requestAnimationFrame(()=>P())},[e,P]),Ee=m.useCallback(X=>{if(!p.current.isDragging||!I.current)return;X.preventDefault(),X.stopPropagation();const v=s.current;if(!v)return;const H=v.getBoundingClientRect(),O=X.clientX-H.left,pe=X.clientY-H.top,[me,C]=T(O,pe,I.current,q.current);Q(me,C)},[T,Q]),V=m.useCallback(()=>{p.current.isDragging&>.track("minimap_navigate",{action:"drag",displayMode:i}),p.current={isDragging:!1,startPoint:null},d(X=>({...X,dragging:!1}))},[i]),$=m.useCallback((X,v)=>{const H=f.current;if(!H||!I.current)return;const O=H.getContext("2d");if(!O)return;const[pe,me]=T(X,v,I.current,q.current),C=k(),L=C.width,F=C.height,G=L,J=F;O.clearRect(0,0,N,N),O.fillStyle="#fff",O.fillRect(0,0,N,N);const ee=pe-G/2,Z=me-J/2,te=N/G,le=N/J,Me=Math.min(te,le),$e=(N-G*Me)/2,oe=(N-J*Me)/2;j().forEach(ke=>{const{bounds:Ne}=ke;if(Ne.x+Ne.width>=ee&&Ne.x<=ee+G&&Ne.y+Ne.height>=Z&&Ne.y<=Z+J){const bt=(Ne.x-ee)*Me+$e,Vt=(Ne.y-Z)*Me+oe,jt=Ne.width*Me,kt=Ne.height*Me;O.fillStyle="rgba(0, 0, 0, 0.6)",O.fillRect(bt,Vt,jt,kt)}}),O.strokeStyle="rgba(90, 79, 207, 0.6)",O.lineWidth=1,O.setLineDash([4,4]),O.beginPath(),O.moveTo(0,N/2),O.lineTo(N,N/2),O.stroke(),O.beginPath(),O.moveTo(N/2,0),O.lineTo(N/2,N),O.stroke(),O.setLineDash([]),O.strokeStyle="rgba(90, 79, 207, 0.3)",O.lineWidth=2,O.strokeRect(0,0,N,N)},[j,k,T]),ue=m.useCallback(()=>{c.dragging||w(!0)},[c.dragging]),Y=m.useCallback(()=>{w(!1),x(null),b.current=null},[]),ae=m.useCallback(X=>{if(c.dragging){w(!1),b.current=null;return}const v=s.current;if(!v)return;const H=v.getBoundingClientRect(),O=X.clientX-H.left,pe=X.clientY-H.top,me={x:O,y:pe};x(me),b.current=me,w(!0),$(O,pe),P()},[c.dragging,$,P]),ne=m.useRef(!1),ge=m.useCallback(X=>{ne.current=!0;const v=s.current;if(!v)return;const H=X.touches[0],O=v.getBoundingClientRect(),pe=H.clientX-O.left,me=H.clientY-O.top,C={x:pe,y:me};x(C),b.current=C,w(!0),$(pe,me),P()},[$,P]),ye=m.useCallback(X=>{const v=s.current;if(!v)return;const H=X.touches[0],O=v.getBoundingClientRect(),pe=H.clientX-O.left,me=H.clientY-O.top,C={x:pe,y:me};x(C),b.current=C,w(!0),$(pe,me),P()},[$,P]),ze=m.useCallback(()=>{ne.current=!1,setTimeout(()=>{ne.current||(w(!1),x(null),b.current=null,P())},500)},[P]);m.useEffect(()=>{if(!c.expanded)return;P();const X=setInterval(()=>{P()},100);return()=>{clearInterval(X)}},[e,c.expanded,P]);const R=m.useCallback(()=>{d(X=>{const v=!X.expanded;return{...X,expanded:v,manuallyExpanded:v}})},[]),fe={bottom:l.position.includes("bottom")?l.margin:void 0,top:l.position.includes("top")?l.margin:void 0,right:l.position.includes("right")?l.margin:void 0,left:l.position.includes("left")?l.margin:void 0},Ae=g&&(ne.current||!c.dragging),Fe=h?{position:"absolute",right:l.width+8,top:Math.max(0,Math.min(h.y-N/2,l.height-N)),width:N,height:N,opacity:Ae?1:0,pointerEvents:"none",transition:"opacity 0.15s ease-out, top 0.1s ease-out"}:{display:"none"};return a.jsxDEV("div",{ref:r,className:`minimap ${c.expanded?"minimap--expanded":"minimap--collapsed"} ${i==="auto"?"minimap--auto":""} ${n||""}`,style:{...fe,zIndex:Yt.MINIMAP},"data-track":"minimap_container",children:[c.expanded&&a.jsxDEV("div",{className:"minimap__content",children:[a.jsxDEV("canvas",{ref:s,width:l.width,height:l.height,className:"minimap__canvas",onPointerDown:A,onPointerMove:Ee,onPointerUp:V,onPointerLeave:V,onMouseEnter:ue,onMouseLeave:Y,onMouseMove:ae,onTouchStart:ge,onTouchMove:ye,onTouchEnd:ze,style:{cursor:c.dragging?"grabbing":"pointer"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:868,columnNumber:11},void 0),a.jsxDEV("div",{className:"minimap__preview",style:Fe,children:a.jsxDEV("canvas",{ref:f,width:N,height:N,className:"minimap__preview-canvas"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:890,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:889,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:867,columnNumber:9},void 0),l.collapsible&&a.jsxDEV("button",{className:`minimap__toggle ${c.expanded?"minimap__toggle--expanded":""}`,onClick:R,title:c.expanded?"折叠小地图":"展开小地图","data-track":"minimap_click_toggle",children:a.jsxDEV(Rb,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:907,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:901,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:858,columnNumber:5},void 0)},Sr=10,mE=3e3,pE=e=>{var n;const t=e?Ao(e)||e.viewport.origination:void 0;return{zoom:((n=e==null?void 0:e.viewport)==null?void 0:n.zoom)||1,originX:(t==null?void 0:t[0])||0,originY:(t==null?void 0:t[1])||0}},fE=({showMinimap:e=!0,container:t})=>{var I;const n=ft(),{t:i}=_e(),{isDrawerOpen:o,drawerWidth:s}=oE(),[r,l]=m.useState(!1),[u,c]=m.useState(!0),[d,p]=m.useState(!1),f=m.useRef(null),h=m.useRef(null),x=m.useRef(null),b=m.useMemo(()=>{if(o)return`calc(var(--aitu-toolbar-right-dock-width, 0px) + ${s+Sr}px)`;const q="var(--aitu-toolbar-right-avoidance, 0px)";return typeof CSS<"u"&&CSS.supports("right","max(1px, 2px)")?`max(${Sr}px, ${q})`:Sr},[o,s]),g=m.useCallback(()=>{be.updateZoom(n,n.viewport.zoom-.1)},[n]),w=m.useCallback(()=>{be.updateZoom(n,n.viewport.zoom+.1)},[n]),N=m.useCallback(()=>{be.fitViewport(n),l(!1)},[n]),y=m.useCallback(()=>{be.updateZoom(n,1),l(!1)},[n]),D=m.useCallback(()=>{qa(n),l(!1)},[n]),j=m.useCallback(()=>{c(q=>{const W=!q;return p(W),W})},[]);m.useEffect(()=>{if(!u||!n)return;const q=z.getBoardContainer(n);if(!q)return;const W=U=>{var T;const M=U.target;(T=f.current)!=null&&T.contains(M)||(c(!1),p(!1))};return q.addEventListener("mousedown",W),()=>{q.removeEventListener("mousedown",W)}},[u,n]),m.useEffect(()=>{if(!e||!n)return;const q=setInterval(()=>{const W=pE(n),U=h.current;if(!U){h.current=W;return}const M=Math.abs(W.zoom-U.zoom)>.001,T=Math.abs(W.originX-U.originX)>.5||Math.abs(W.originY-U.originY)>.5;(M||T)&&(h.current=W,u||(c(!0),p(!1)),x.current&&clearTimeout(x.current))},100);return()=>{clearInterval(q)}},[e,n,u]),m.useEffect(()=>{if(!(!u||d))return x.current=setTimeout(()=>{c(!1)},mE),()=>{x.current&&clearTimeout(x.current)}},[u,d]);const k=m.useCallback(()=>{l(q=>!q)},[]),E=Math.round((((I=n==null?void 0:n.viewport)==null?void 0:I.zoom)||1)*100);return a.jsxDEV("div",{className:"view-navigation",style:{right:b,zIndex:Yt.VIEW_NAVIGATION},ref:f,"data-testid":"view-navigation",children:[a.jsxDEV("div",{className:"view-navigation__zoom",children:[a.jsxDEV(Et,{content:i("zoom.out"),showArrow:!1,children:a.jsxDEV("button",{className:"view-navigation__zoom-btn",onClick:g,"aria-label":i("zoom.out"),"data-track":"view_nav_zoom_out","data-testid":"zoom-out",children:a.jsxDEV(zb,{},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:218,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:217,columnNumber:9},void 0),a.jsxDEV(it,{sideOffset:8,open:r,onOpenChange:l,placement:"bottom",children:[a.jsxDEV(Et,{content:i("zoom.fit"),showArrow:!1,children:a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("button",{className:"view-navigation__zoom-percent",onClick:k,"aria-label":i("zoom.fit"),"data-track":"view_nav_zoom_menu","data-testid":"zoom-display",children:[E,"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:237,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:236,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:235,columnNumber:11},void 0),a.jsxDEV(st,{container:t,style:{zIndex:Yt.POPOVER},children:a.jsxDEV("div",{className:"view-navigation-zoom-menu",children:[a.jsxDEV("button",{className:"zoom-menu-item",onClick:N,"data-track":"view_nav_zoom_fit",children:[a.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:255,columnNumber:17},void 0),a.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:256,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:250,columnNumber:15},void 0),a.jsxDEV("button",{className:"zoom-menu-item",onClick:D,"data-track":"view_nav_zoom_fit_frame",children:a.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:263,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:258,columnNumber:15},void 0),a.jsxDEV("button",{className:"zoom-menu-item",onClick:y,"data-track":"view_nav_zoom_100",children:[a.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:270,columnNumber:17},void 0),a.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:271,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:265,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:249,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:248,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:229,columnNumber:9},void 0),a.jsxDEV(Et,{content:i("zoom.in"),showArrow:!1,children:a.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:a.jsxDEV(Lb,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:285,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:278,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:277,columnNumber:9},void 0),e&&a.jsxDEV(Et,{content:u?"折叠小地图":"展开小地图",showArrow:!1,children:a.jsxDEV("button",{className:`view-navigation__minimap-toggle ${u?"view-navigation__minimap-toggle--expanded":""}`,onClick:j,"aria-label":u?"折叠小地图":"展开小地图","data-track":"view_nav_minimap_toggle",children:a.jsxDEV(Ob,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:301,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:295,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:291,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:216,columnNumber:7},void 0),e&&u&&a.jsxDEV("div",{className:"view-navigation__minimap",children:a.jsxDEV(dE,{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:310,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:309,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:206,columnNumber:5},void 0)},hE=m.lazy(()=>qe(()=>import("./tool-windows-BEnZdJqF.js").then(e=>e.px),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),gE=({position:e,visible:t,onClose:n,onOpenMediaLibrary:i})=>{const o=ft(),{t:s}=_e(),r=Ia(),l=z.getBoardContainer(o),[u,c]=m.useState({freehand:!1,arrow:!1,shape:!1}),[d,p]=m.useState(!1),{refs:f,floatingStyles:h}=ja({placement:"bottom",middleware:[Da(12),cd({padding:16}),Sa({fallbackPlacements:["top","right","left"]})]});m.useEffect(()=>{if(e&&t){const[U,M]=e;f.setPositionReference({getBoundingClientRect(){return{width:1,height:1,x:U,y:M,top:M,left:U,right:U+1,bottom:M+1}}})}},[e,t,f]),m.useEffect(()=>{if(!t)return;const U=T=>{const _=T.target,P=_.closest(".quick-creation-toolbar"),A=_.closest(".quick-toolbar-popover")||_.closest("[data-radix-popper-content-wrapper]")||_.closest(".plait-popover")||_.closest(".shape-picker")||_.closest(".arrow-picker")||_.closest(".freehand-panel"),Q=_.closest(".media-library-modal");!P&&!A&&!Q&&n()},M=setTimeout(()=>{document.addEventListener("mousedown",U)},100);return()=>{clearTimeout(M),document.removeEventListener("mousedown",U)}},[t,n]);const x=()=>{c({freehand:!1,arrow:!1,shape:!1})},b=U=>{c({freehand:!1,arrow:!1,shape:!1,[U]:!0})},g=()=>{x(),wn(o),at(o,null),be.updatePointerType(o,Ve.text),r(Ve.text),n()},w=()=>{x(),wn(o),at(o,yt.dnd),be.updatePointerType(o,ui.mind),r(ui.mind),n()},N=()=>{x(),Ks(o),n()},y=async U=>{try{U.type===Cn.IMAGE?await _a(o,U.url):U.type===Cn.VIDEO?await Ld(o,U.url):U.type===Cn.AUDIO&&await wa(o,U.url,{title:U.name,duration:U.duration,previewImageUrl:U.thumbnail,prompt:U.prompt,mv:U.modelName,clipId:U.clipId,providerTaskId:U.providerTaskId}),se.success(s("toolbar.assetInserted")||"素材已插入到画板"),p(!1),n()}catch(M){console.error("Failed to insert asset:",M),se.error(s("toolbar.assetInsertFailed")||"插入素材失败")}},D=()=>{if(x(),i){i({mode:Bn.SELECT,onSelect:y,selectButtonText:s("toolbar.insert")||"插入"}),n();return}p(!0)},[j,k]=m.useState(nt.feltTipPen),E=300,I=m.useRef(null),q=m.useCallback(()=>{I.current&&(clearTimeout(I.current),I.current=null)},[]);m.useEffect(()=>()=>{q()},[q]);const W=(U,M,T,_)=>a.jsxDEV(it,{open:u[M],sideOffset:12,onOpenChange:P=>{P||x()},placement:"bottom",children:[a.jsxDEV(ot,{asChild:!0,children:a.jsxDEV("div",{onPointerEnter:()=>{q(),I.current=setTimeout(()=>{b(M)},E)},onPointerLeave:()=>{q()},children:a.jsxDEV(ie,{type:"icon",visible:!0,selected:u[M],icon:U,"aria-label":T,"data-track":`quick_toolbar_click_${M}`,onPointerDown:()=>{q(),b(M),wn(o),M==="freehand"&&(at(o,yt.dnd),be.updatePointerType(o,j),r(j))},onPointerUp:()=>{M==="freehand"&&at(o,yt.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),a.jsxDEV(st,{container:l,style:{zIndex:Yt.POPOVER},className:"quick-toolbar-popover",children:_},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?a.jsxDEV(a.Fragment,{children:[a.jsxDEV(Ye,{padding:1,className:`quick-creation-toolbar ${Pt}`,ref:f.setFloating,style:h,children:a.jsxDEV(ct.Row,{gap:1,children:[a.jsxDEV(ie,{type:"icon",visible:!0,icon:a.jsxDEV(Ra,{},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":s("toolbar.text"),"data-track":"quick_toolbar_click_text",onPointerUp:g},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),a.jsxDEV(ie,{type:"icon",visible:!0,icon:a.jsxDEV(Hs,{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":s("toolbar.image"),"data-track":"quick_toolbar_click_image",onPointerUp:N},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),a.jsxDEV(ie,{type:"icon",visible:!0,icon:a.jsxDEV(Bs,{},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":s("toolbar.mediaLibrary"),"data-track":"quick_toolbar_click_media_library",onPointerUp:D},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),W(a.jsxDEV(Bi,{},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",s("toolbar.pen"),a.jsxDEV(el,{onPointerUp:U=>{x(),k(U),be.updatePointerType(o,U),r(U),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)),W(a.jsxDEV(Ma,{},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",s("toolbar.arrow"),a.jsxDEV(nl,{onPointerUp:U=>{x(),be.updatePointerType(o,U),r(U),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)),W(a.jsxDEV(Aa,{},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",s("toolbar.shape"),a.jsxDEV(tl,{onPointerUp:U=>{x(),be.updatePointerType(o,U),r(U),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)),a.jsxDEV(ie,{type:"icon",visible:!0,icon:a.jsxDEV(xs,{},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":s("toolbar.mind"),"data-track":"quick_toolbar_click_mind",onPointerUp:w},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&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(hE,{isOpen:d,onClose:()=>{p(!1)},mode:Bn.SELECT,onSelect:y,selectButtonText:s("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},bE=({children:e,onOpenMediaLibrary:t})=>{const[n,i]=m.useState(!1),{confirm:o,confirmDialog:s}=Fs(),r=m.useCallback(()=>{n||(i(!0),o({title:"缓存空间已满",description:"图片缓存空间已满,无法继续缓存新图片。是否打开素材库清理缓存?",confirmText:"打开素材库",cancelText:"稍后处理",confirmTheme:"warning"}).then(l=>{i(!1),l&&(t==null||t())}))},[o,n,t]);return Fb(r),a.jsxDEV(a.Fragment,{children:[e,s]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/cache-quota-provider/CacheQuotaProvider.tsx",lineNumber:52,columnNumber:5},void 0)},Ps={visible:!1,position:{x:0,y:0},sourceElement:null,currentShape:null,hitIndex:-1,hitPoint:null,mode:"hover",arrowLineElement:null,arrowLineEndPoint:null},Dp=new WeakMap,ca=new WeakMap;function Vs(e){return Dp.get(e)||Ps}function lo(e,t){Dp.set(e,t);const n=ca.get(e);n&&n(t)}function xE(e,t){return ca.set(e,t),()=>{ca.delete(e)}}function cl(e){lo(e,Ps)}const Ji=100;function NE(e,t,n,i,o){const s=Yb(n),r=he.getRectangleByPoints(t.points),l=r.width,u=r.height,c=r.x+l/2,d=r.y+u/2,f=he.getEdgeCenterPoints(r)[n];let h,x;switch(s){case lt.right:h=c+l/2+Ji+l/2,x=d;break;case lt.bottom:h=c,x=d+u/2+Ji+u/2;break;case lt.left:h=c-l/2-Ji-l/2,x=d;break;case lt.top:h=c,x=d-u/2-Ji-u/2;break;default:h=c+l/2+Ji+l/2,x=d}const b=[[h-l/2,x-u/2],[h+l/2,x+u/2]],g=Ba(e,b,o);if(g.fill="#ffffff",B.isShapeElement(t)&&!B.isText(t)){const U=t;U.angle!==void 0&&(g.angle=U.angle),U.fill&&U.fill!=="none"&&(g.fill=U.fill),U.strokeColor!==void 0&&(g.strokeColor=U.strokeColor),U.strokeStyle!==void 0&&(g.strokeStyle=U.strokeStyle),U.strokeWidth!==void 0&&(g.strokeWidth=U.strokeWidth)}const w=ws(f,t)||f,N=B.isShapeElement(t)?jo(e,w,t):void 0;let y;switch(s){case lt.right:y=3;break;case lt.bottom:y=0;break;case lt.left:y=1;break;case lt.top:y=2;break;default:y=3}const D=he.getRectangleByPoints(g.points),k=he.getEdgeCenterPoints(D)[y],E=ws(k,g)||k,I=jo(e,E,g),q=nm(xn.straight,[w,E],{marker:Do.none,connection:N,boundId:t.id},{marker:Do.arrow,connection:I,boundId:g.id},[],{});ce.insertNode(e,q,[e.children.length]),tm(e,g),cl(e);const W=g.id;setTimeout(()=>{const U=e.children.findIndex(T=>T.id===W),M=U>=0?e.children[U]:null;M&&(Hn(e),ci(e,M),be.updatePointerType(e,wt.selection),ce.setNode(e,{_forceRender:Date.now()},[U]),ce.setNode(e,{_forceRender:void 0},[U]))},50)}function wE(e,t,n,i){var x;let o=100,s=100;const r=t,l=(x=r.source)==null?void 0:x.boundId;if(l){const b=e.children.find(g=>g.id===l);if(b&&B.isShapeElement(b)){const g=he.getRectangleByPoints(b.points);o=g.width,s=g.height}}const u=[[n[0]-o/2,n[1]-s/2],[n[0]+o/2,n[1]+s/2]],c=Ba(e,u,i);c.fill="#ffffff";const d=he.getRectangleByPoints(c.points),p=he.getEdgeCenterPoints(d),f=r.points||[];if(f.length>=2){const b=f[0],g=f[f.length-1],w=g[0]-b[0],N=g[1]-b[1];let y;Math.abs(w)>Math.abs(N)?y=w>0?3:1:y=N>0?0:2;const D=p[y],j=jo(e,D,c),k=e.children.findIndex(E=>E.id===t.id);k!==-1&&ce.setNode(e,{target:{marker:Do.arrow,connection:j,boundId:c.id},points:[b,D]},[k])}tm(e,c),cl(e);const h=c.id;setTimeout(()=>{const b=e.children.findIndex(w=>w.id===h),g=b>=0?e.children[b]:null;g&&(Hn(e),ci(e,g),be.updatePointerType(e,wt.selection),ce.setNode(e,{_forceRender:Date.now()},[b]),ce.setNode(e,{_forceRender:void 0},[b]))},50)}const yE=e=>{const{pointerMove:t,pointerLeave:n,globalPointerUp:i}=e;let o=null,s=-1,r=e.children.length,l={x:0,y:0};return e.pointerMove=u=>{var D;l={x:u.clientX,y:u.clientY},o&&(clearTimeout(o),o=null);const c=em(e),d=c.length===1&&c[0],p=Vs(e);if(!d||!B.isShapeElement(d)||B.isText(d)){if(p.visible&&p.mode==="hover"&&lo(e,{...Ps}),s=-1,d&&B.isShapeElement(d)&&!Ci.getElementRef(d))return;t(u);return}if(!Ci.getElementRef(d)){s=-1;return}const h=Bb(e,u.x,u.y),x=Hb(e,d,!0),b=Wb(e,h,d,!0)||h,g=$b(b,x),w=x[g];if(w){if(g!==s||!p.visible){s=g;const j=u.clientX,k=u.clientY;o=setTimeout(()=>{const E=B.isImage(d)?Ve.rectangle:d.shape||Ve.rectangle;lo(e,{visible:!0,position:{x:j-140,y:k+20},sourceElement:d,currentShape:E,hitIndex:g,hitPoint:w,mode:"hover"})},50)}}else s=-1,p.visible&&p.mode==="hover"&&(o=setTimeout(()=>{const j=Vs(e);j.visible&&j.mode==="hover"&&lo(e,{...Ps})},300));const N=Ci.getElementRef(d);(D=N==null?void 0:N.getGenerator)!=null&&D.call(N,Gb.key)&&t(u)},e.pointerLeave=u=>{o&&(clearTimeout(o),o=null),n(u)},e.globalPointerUp=u=>{var d;i(u);const c=e.children.length;if(c>r){const p=e.children[c-1];if(B.isArrowLine(p)){const f=p;if(!((d=f.target)==null?void 0:d.boundId)){const x=f.points||[];if(x.length>=2){const b=x[x.length-1];setTimeout(()=>{lo(e,{visible:!0,position:{x:l.x-140,y:l.y+20},sourceElement:null,currentShape:Ve.rectangle,hitIndex:-1,hitPoint:null,mode:"arrowLine",arrowLineElement:p,arrowLineEndPoint:b})},50)}}}}r=e.children.length},e},Qi=100;function vE(e){switch(e){case"ArrowRight":return lt.right;case"ArrowDown":return lt.bottom;case"ArrowLeft":return lt.left;case"ArrowUp":return lt.top;default:return null}}function kE(e){switch(e){case lt.top:return 0;case lt.right:return 1;case lt.bottom:return 2;case lt.left:return 3;default:return 1}}function EE(e){return(e+2)%4}function jE(e,t,n,i,o,s){const r={x:t-i/2,y:n-o/2,width:i,height:o};for(const l of e.children)if(l.id!==s&&B.isDrawElement(l)&&!B.isArrowLine(l))try{const u=he.getRectangleByPoints(l.points);if(r.x<u.x+u.width&&r.x+r.width>u.x&&r.y<u.y+u.height&&r.y+r.height>u.y)return!0}catch{}return!1}function DE(e,t,n){const i=he.getRectangleByPoints(t.points),o=i.width,s=i.height,r=i.x+o/2,l=i.y+s/2;let u,c;switch(n){case lt.right:u=r+o/2+Qi+o/2,c=l;break;case lt.bottom:u=r,c=l+s/2+Qi+s/2;break;case lt.left:u=r-o/2-Qi-o/2,c=l;break;case lt.top:u=r,c=l-s/2-Qi-s/2;break;default:u=r+o/2+Qi+o/2,c=l}let d=0;const p=n===lt.right||n===lt.left?s+20:o+20;for(;jE(e,u,c,o,s,t.id)&&(d+=p,n===lt.right||n===lt.left?c=l+d:u=r+d,!(d>1e3)););const f=[[u-o/2,c-s/2],[u+o/2,c+s/2]],x=t.shape||"rectangle",b=Ba(e,f,x);if(b.fill="#ffffff",B.isShapeElement(t)&&!B.isText(t)){const T=t;T.fill&&T.fill!=="none"&&(b.fill=T.fill),T.strokeColor!==void 0&&(b.strokeColor=T.strokeColor),T.strokeWidth!==void 0&&(b.strokeWidth=T.strokeWidth)}const g=kE(n),w=EE(g),y=he.getEdgeCenterPoints(i)[g],D=ws(y,t)||y,j=B.isShapeElement(t)?jo(e,D,t):void 0,k=he.getRectangleByPoints(b.points),I=he.getEdgeCenterPoints(k)[w],q=ws(I,b)||I,W=jo(e,q,b),U=nm(xn.elbow,[D,q],{marker:Do.none,connection:j,boundId:t.id},{marker:Do.arrow,connection:W,boundId:b.id},[],{});ce.insertNode(e,U,[e.children.length]),ce.insertNode(e,b,[e.children.length]);const M=b.id;setTimeout(()=>{const T=e.children.find(_=>_.id===M);T&&(Hn(e),ci(e,T),be.updatePointerType(e,wt.selection),im(e,[u,c]))},50)}function SE(e,t){var o,s,r,l;const n=[],i=[];for(const u of e.children){if(!B.isArrowLine(u))continue;const c=u;if(((o=c.source)==null?void 0:o.boundId)===t.id&&((s=c.target)!=null&&s.boundId)){const d=e.children.find(p=>p.id===c.target.boundId);d&&i.push(d)}if(((r=c.target)==null?void 0:r.boundId)===t.id&&((l=c.source)!=null&&l.boundId)){const d=e.children.find(p=>p.id===c.source.boundId);d&&n.push(d)}}return{incoming:n,outgoing:i}}function CE(e,t,n){const{incoming:i,outgoing:o}=SE(e,t),s=n?[...o,...i]:[...i,...o];if(s.length===0)return!1;const r=s[0];Hn(e),ci(e,r);try{const l=It(e,[r],!1),u=l.x+l.width/2,c=l.y+l.height/2;im(e,[u,c])}catch{}return!0}const _E=e=>{const{keyDown:t}=e;return e.keyDown=n=>{if(!n.altKey&&!n.metaKey&&!n.ctrlKey){if(!n.shiftKey){const i=vE(n.key);if(i!==null){const o=em(e);if(o.length===1){const s=o[0];if(B.isShapeElement(s)&&!B.isText(s)&&!B.isImage(s)){DE(e,s,i),n.preventDefault();return}}}}if(n.key==="Tab"){const i=Oe(e);if(i.length===1){const o=i[0];if(B.isDrawElement(o)&&B.isShapeElement(o)&&CE(e,o,!n.shiftKey)){n.preventDefault();return}}}}t(n)},e},PE=240,VE=new Set(["5","7"]);function TE(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],l=e[1]-t[1];return[t[0]+r*o-l*s,t[1]+r*s+l*o]}function UE(e,t,n=0){const i=he.getCenterPoint(e),s=mi(e,Yn).filter(r=>VE.has(String(r.handle)));if(n){const r=TE(t,i,-n),l=s.find(u=>he.isHit(he.getRectangleByPoints([r,r]),u.rectangle));return l&&(l.cursorClass=Qs(l.cursorClass,n)),l}return s.find(r=>he.isHit(he.getRectangleByPoints([t,t]),r.rectangle))}function IE(e){const t=Oe(e);return t.length===1&&An(t[0])}function qE(e,t){const n=Oe(e);if(n.length!==1||!An(n[0]))return null;const i=n[0],o=he.getRectangleByPoints(i.points),s=UE(o,t,0);return s?{element:i,rectangle:o,handle:s.handle,cursorClass:s.cursorClass}:null}function AE(e,t,n,i){const o=e.width/e.height,s=t==="7",r=s?-n:n,l=Math.max(PE,e.width+r),u=l/o,c=(e.height-u)/2;return{x:s?e.x+(e.width-l):e.x,y:e.y+c,width:l,height:u}}function ME(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:l}=n;if(!o)return;const u=l[0]-r[0];l[1]-r[1];const c=AE(o,s,u),d=[[c.x,c.y],[c.x+c.width,c.y+c.height]],p=e.children.findIndex(f=>f.id===i.id);p>=0&&ce.setNode(e,{points:d},[p])}const RE=e=>di(e,{key:"audio-nodes",canResize:()=>IE(e),hitTest:(t=>qE(e,t)),onResize:(t,n)=>ME(e,t,n)}),zE=[{icon:a.jsxDEV(jd,{},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:Ve.rectangle},{icon:a.jsxDEV(Dd,{},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:Ve.ellipse},{icon:a.jsxDEV(Sd,{},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:Ve.triangle},{icon:a.jsxDEV(Cd,{},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:Ua.terminal},{icon:a.jsxDEV(_d,{},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:Ve.diamond},{icon:a.jsxDEV(Pd,{},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:Ve.parallelogram},{icon:a.jsxDEV(Vd,{},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:Ve.roundRectangle}],LE=({visible:e,position:t,currentShape:n,onSelectShape:i,onClose:o,container:s})=>{const r=m.useRef(null);m.useEffect(()=>{if(!e)return;const f=b=>{r.current&&!r.current.contains(b.target)&&o()},h=b=>{b.key==="Escape"&&o()},x=setTimeout(()=>{document.addEventListener("mousedown",f),document.addEventListener("keydown",h)},50);return()=>{clearTimeout(x),document.removeEventListener("mousedown",f),document.removeEventListener("keydown",h)}},[e,o]);const l=m.useCallback(f=>{i(f)},[i]);if(!e)return null;const u={x:isNaN(t.x)?0:t.x,y:isNaN(t.y)?0:t.y},c=200,d=80;typeof window<"u"&&(u.x+c>window.innerWidth&&(u.x=window.innerWidth-c-10),u.y+d>window.innerHeight&&(u.y=t.y-d-20));const p=a.jsxDEV("div",{ref:r,className:K("auto-complete-shape-picker",Pt),style:{left:u.x,top:u.y},children:a.jsxDEV(Ye,{padding:1,children:a.jsxDEV(ct.Col,{gap:1,children:a.jsxDEV(ct.Row,{gap:1,children:zE.map((f,h)=>a.jsxDEV(ie,{className:K("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:x})=>{x.stopPropagation(),l(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 s?Ws.createPortal(p,s):p},OE={visible:!1,position:{x:0,y:0},sourceElement:null,currentShape:null,hitIndex:-1,hitPoint:null,mode:"hover"};function FE(e){const[t,n]=m.useState(OE);m.useEffect(()=>{if(!e)return;n(Vs(e));const s=xE(e,r=>{n(r)});return()=>{s()}},[e]);const i=m.useCallback(s=>{if(!e)return;const r=Vs(e);r.mode==="arrowLine"?r.arrowLineElement&&r.arrowLineEndPoint&&wE(e,r.arrowLineElement,r.arrowLineEndPoint,s):r.sourceElement&&r.hitPoint&&r.hitIndex>=0&&NE(e,r.sourceElement,r.hitIndex,r.hitPoint,s)},[e]),o=m.useCallback(()=>{e&&cl(e)},[e]);return{state:t,selectShape:i,closePicker:o}}const BE="#ffffff",HE=[Ve.rectangle,Ve.ellipse,Ve.triangle,Ve.diamond,Ve.parallelogram,Ve.roundRectangle];function xu(e){if(!B.isGeometry(e)||B.isText(e)||B.isImage(e))return!1;const t=e;return!(!t.shape||!HE.includes(t.shape)||t.fill&&t.fill!=="none")}const WE=e=>{const{afterChange:t}=e,n=new Set;return e.afterChange=()=>{t();const i=[];e.children.forEach((o,s)=>{xu(o)&&!n.has(o.id)&&(i.push({path:[s],element:o}),n.add(o.id))}),i.length>0&&setTimeout(()=>{i.forEach(({path:o})=>{const s=e.children[o[0]];s&&xu(s)&&ce.setNode(e,{fill:BE},o)})},0)},e},Ts=new WeakMap;let Cr=null,kn=null;function Sp(e,t){try{const n=Ci.getElementG(t);if(n)return n}catch{}if(t!=null&&t.id){const n=z.getElementHost(e);if(n){const i=n.querySelector(`g[id="${t.id}"]`);if(i)return i}}return null}function Cp(e){return e.querySelector("path, rect, ellipse, polygon, circle")}function _p(e){let t=e.querySelector("defs");return t||(t=Xb(),e.insertBefore(t,e.firstChild)),t}function $E(e,t){const n=Ts.get(t);if(n){const i=e.querySelector(`#${n}`);i&&i.remove()}}function Us(e,t,n){const i=Sp(e,t);if(!i)return;const o=Cp(i);if(!o)return;const s=i.closest("svg");if(!s)return;const r=It(e,[t],!1),l=(r==null?void 0:r.width)||100,u=(r==null?void 0:r.height)||100,c=om(n,t.id,l,u),d=_p(s);if(c.defElement){const p=c.defElement.id,f=d.querySelector(`#${p}`);f?f.replaceWith(c.defElement):d.appendChild(c.defElement),o.setAttribute("fill",c.fillValue),Ts.set(t,p);const h=Ts.get(t);if(h&&h!==p){const x=d.querySelector(`#${h}`);x&&x.remove()}}else o.setAttribute("fill",c.fillValue),$E(s,t)}function fs(e,t){return e.children.find(n=>n.id===t)||null}function Sn(e){const t=e.fillConfig;return t&&_n(t)?t:e.fill&&_n(e.fill)?e.fill:null}function Pp(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=Sn(t);if(n&&(n.type==="gradient"||n.type==="image"))return!0}return!1}function GE(e){if(!kn)return;const t=new Set;e.forEach(n=>{if(n.type==="attributes"&&n.attributeName==="fill"){const i=n.target,o=i.getAttribute("fill"),s=i.closest("g[id]");if(s){const r=s.getAttribute("id");if(r){const l=fs(kn,r),u=l?Sn(l):null;l&&u&&sn(kn,l)&&Pp(o,l)&&t.add(l)}}}n.type==="childList"&&n.addedNodes.forEach(i=>{if(i instanceof SVGGElement&&i.hasAttribute("id")){const o=i.getAttribute("id");if(o){const s=fs(kn,o),r=s?Sn(s):null;s&&r&&sn(kn,s)&&t.add(s)}}if(i instanceof Element){const o=i.closest("g[id]");if(o){const s=o.getAttribute("id");if(s){const r=fs(kn,s),l=r?Sn(r):null;r&&l&&sn(kn,r)&&t.add(r)}}}})}),t.size>0&&t.forEach(n=>{const i=Sn(n);i&&Us(kn,n,i)})}function YE(e){if(Cr)return;const t=z.getElementHost(e);t&&(kn=e,Cr=new MutationObserver(GE),Cr.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["fill"]}))}function XE(e){const t=z.getElementHost(e);if(!t)return;t.querySelectorAll("path[fill], rect[fill], ellipse[fill], polygon[fill], circle[fill]").forEach(i=>{const o=i.getAttribute("fill"),s=i.closest("g[id]");if(s){const r=s.getAttribute("id");if(r){const l=fs(e,r),u=l?Sn(l):null;l&&u&&sn(e,l)&&Pp(o,l)&&Us(e,l,u)}}})}function ua(e,t=!1){e.children.forEach(n=>{const i=Sn(n);i&&sn(e,n)&&(t?Us(e,n,i):requestAnimationFrame(()=>{Us(e,n,i)}))}),t&&XE(e)}let Nu=!0;const wu=new WeakSet;function Vp(e){const t=z.getElementHost(e);if(!t)return;const n=t.closest("svg")||t.querySelector("svg");n&&e.children.forEach(i=>{const o=Sn(i);if(o&&(o.type==="gradient"||o.type==="image")&&sn(e,i)){const s=It(e,[i],!1),r=(s==null?void 0:s.width)||100,l=(s==null?void 0:s.height)||100,u=om(o,i.id,r,l);if(u.defElement){const c=_p(n);c.querySelector(`#${u.defElement.id}`)||(c.appendChild(u.defElement),Ts.set(i,u.defElement.id))}}})}function KE(e){let t=0;return e.children.forEach(n=>{const i=Sn(n);if(i&&(i.type==="gradient"||i.type==="image")&&sn(e,n)){const o=Sp(e,n);(o?Cp(o):null)||t++}}),t}function ZE(e){if(wu.has(e))return;wu.add(e);const t=15,n=16;let i=0;const o=()=>{i++;try{if(!z.getElementHost(e))return;if(Vp(e),ua(e,!0),KE(e)>0&&i<t){const l=Math.min(n*Math.pow(1.5,i),500);setTimeout(o,l)}}catch{}};requestAnimationFrame(()=>{o(),setTimeout(o,0)})}const JE=e=>{const{afterChange:t}=e;return e.afterChange=()=>{t(),YE(e),Vp(e),Nu?(Nu=!1,ua(e,!0),ZE(e)):ua(e,!0)},e};function QE(e,t){return mi(e,Yn).find(i=>he.isHit(he.getRectangleByPoints([t,t]),i.rectangle))}function e1(e){const t=Oe(e);return t.length!==1?!1:Ht(t[0])}function t1(e,t){const n=Oe(e);if(n.length!==1||!Ht(n[0]))return null;const i=n[0],o=he.getRectangleByPoints(i.points),s=QE(o,t);return s?{element:i,rectangle:o,handle:s.handle,cursorClass:s.cursorClass}:null}function n1(e,t,n){const{element:i,rectangle:o,handle:s}=t;if(!o)return;const{startPoint:r,endPoint:l}=n,u=l[0]-r[0],c=l[1]-r[1],d=Hi(o,s,u,c,zo(),60),p=[[d.x,d.y],[d.x+d.width,d.y+d.height]],f=e.children.findIndex(h=>h.id===i.id);f>=0&&ce.setNode(e,{points:p},[f])}function i1(e,t){const{element:n}=t,i=e.children.find(o=>o.id===n.id);i&&Kb.updateFrameMembers(e,i)}const o1=e=>di(e,{key:"frame-elements",canResize:()=>e1(e),hitTest:t=>t1(e,t),onResize:(t,n)=>n1(e,t,n),afterResize:t=>i1(e,t)});function _r(e){return!!e.locked}const s1=e=>{const{isHit:t,isRectangleHit:n,isMovable:i}=e;return e.isHit=(o,s,r)=>_r(o)?!1:t(o,s,r),e.isRectangleHit=(o,s)=>_r(o)?!1:n(o,s),e.isMovable=o=>_r(o)?!1:i(o),e},da="aitu-tab-sync-version",r1=500,ma=`tab-${Date.now()}-${Math.random().toString(36).substr(2,9)}`;function Tp({onSyncNeeded:e,enabled:t=!0,currentBoardId:n}){const i=m.useRef(-1),o=m.useRef();m.useEffect(()=>{if(!t)return;const s=localStorage.getItem(da);if(s)try{const r=JSON.parse(s);i.current=r.version}catch{i.current=parseInt(s,10)||Date.now()}else i.current=Date.now()},[t]),m.useEffect(()=>{if(!t)return;const s=()=>{const l=localStorage.getItem(da);if(l)try{const u=JSON.parse(l);if(u.version>i.current&&u.tabId!==ma){const c=n&&u.boardId&&u.boardId===n;i.current=u.version,c&&e()}else u.version>i.current&&u.tabId===ma&&(i.current=u.version)}catch{const u=parseInt(l,10);u>i.current&&(i.current=u)}};o.current=setInterval(()=>{document.hidden||s()},r1);const r=()=>{document.hidden||s()};return document.addEventListener("visibilitychange",r),()=>{o.current&&clearInterval(o.current),document.removeEventListener("visibilitychange",r)}},[t,e,n])}function Up(e){try{const n={version:Date.now(),tabId:ma,boardId:e};localStorage.setItem(da,JSON.stringify(n))}catch{}}const lD=Object.freeze(Object.defineProperty({__proto__:null,markTabSyncVersion:Up,useTabSync:Tp},Symbol.toStringTag,{value:"Module"})),pa=new Set,yu=4,vu=1e3;function ku(e){e.forEach(t=>pa.delete(t))}function Eu(){const e=typeof navigator<"u"?navigator.connection:void 0;return e?e.saveData?!1:e.effectiveType!=="slow-2g"&&e.effectiveType!=="2g":!0}function Ip(e){if(typeof window>"u"||!("serviceWorker"in navigator)||e.length===0||!Eu()){e.length,Eu();return}const t=e.filter(s=>pa.has(s)?!1:(pa.add(s),!0));if(t.length===0)return;const n={type:"SW_PREFETCH_GROUPS",groups:t},i=(s=1)=>{const r=navigator.serviceWorker.controller;if(r){r.postMessage(n);return}navigator.serviceWorker.ready.then(l=>{if(l.active){l.active.postMessage(n);return}if(s>=yu){ku(t),console.warn("[StartupPrefetch] idle prefetch request dropped: no active service worker",{groups:t,attempt:s});return}window.setTimeout(()=>i(s+1),vu)}).catch(l=>{if(s>=yu){ku(t),console.warn("[StartupPrefetch] idle prefetch request failed after retries",{groups:t,attempt:s,error:l});return}window.setTimeout(()=>i(s+1),vu)})},o=window.requestIdleCallback;typeof o=="function"?o(()=>i(),{timeout:1500}):window.setTimeout(i,400)}const a1=m.lazy(()=>qe(()=>import("./DeferredAIInputBar-D99l6sBS.js"),__vite__mapDeps([0,4,5,6]),import.meta.url).then(e=>({default:e.DeferredAIInputBar}))),l1=m.lazy(()=>qe(()=>import("./index-C8c9icsH.js"),__vite__mapDeps([0,4,7]),import.meta.url).then(e=>({default:e.ChatDrawer}))),tn=["tool-windows","runtime-static-assets"],c1=m.lazy(()=>qe(()=>import("./DrawnixDeferredFeatures-78cIu-ev.js"),__vite__mapDeps([0,8]),import.meta.url).then(e=>({default:e.DrawnixDeferredFeatures}))),u1=m.lazy(()=>qe(()=>import("./tool-windows-BEnZdJqF.js").then(e=>e.pA),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.DrawnixDeferredRuntime}))),d1=m.lazy(()=>qe(()=>import("./ttd-dialog-BJzXAZ0l.js"),__vite__mapDeps([0,5,2,3,9,10]),import.meta.url).then(e=>({default:e.TTDDialog}))),m1=m.lazy(()=>qe(()=>import("./settings-dialog-BFuWTeQR.js"),__vite__mapDeps([0,11]),import.meta.url).then(e=>({default:e.SettingsDialog}))),p1=m.lazy(()=>qe(()=>import("./tool-windows-BEnZdJqF.js").then(e=>e.pu),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.UnifiedMediaViewer}))),f1=m.lazy(()=>qe(()=>import("./CanvasAudioPlayer-CSFENxi6.js"),__vite__mapDeps([0,12]),import.meta.url).then(e=>({default:e.CanvasAudioPlayer}))),h1=[],g1="project-drawer-active-tab",b1="frames",x1=()=>{try{return localStorage.getItem(g1)===b1}catch{return!1}},hs=()=>!Ha(Wa.project),N1=()=>hs()&&!x1(),wi=()=>!Ha(Wa.toolbox),yi=()=>!Ha(Wa.task);function w1(){var i,o;if(typeof window>"u")return!1;const e=((i=window.matchMedia)==null?void 0:i.call(window,"(pointer: coarse)").matches)??!1,t=((o=window.matchMedia)==null?void 0:o.call(window,"(max-width: 768px)").matches)??!1,n=navigator.maxTouchPoints>0||"ontouchstart"in window;return t||e&&n}const y1=({value:e,viewport:t,theme:n,onChange:i,onSelectionChange:o,onViewportChange:s,onThemeChange:r,onValueChange:l,afterInit:u,onBoardSwitch:c,onTabSyncNeeded:d,isDataReady:p=!1,currentBoardId:f})=>{const h={readonly:!1,hideScrollbar:!1,disabledScrollOnNonFocus:!1,themeColors:bx},[x,b]=m.useState(()=>({pointer:wt.hand,isMobile:w1(),isPencilMode:!1,openDialogTypes:new Set,dialogInitialData:null,dialogInitialDataByType:{},openCleanConfirm:!1,openSettings:!1})),[g,w]=m.useState(null),[N,y]=m.useState(!1),[D,j]=m.useState(!1),[k,E]=m.useState(!1),[I,q]=m.useState(!1),[W,U]=m.useState({mode:Bn.BROWSE}),[M,T]=m.useState(!1),[_,P]=m.useState(!1),[A,Q]=m.useState(!1),[Ee,V]=m.useState(!1),[$,ue]=m.useState(!1),[Y,ae]=m.useState(!1),[ne,ge]=m.useState(!1),ye=m.useRef(null),ze=m.useCallback(()=>{hs()&&y(!1),wi()&&j(!1),yi()&&E(!1),q(!1)},[]),R=m.useCallback((oe=h1)=>{Ip(oe),Q(!0)},[]),fe=m.useCallback((oe=tn)=>{R(oe),ge(!0),ae(!0)},[R]),Ae=m.useCallback(()=>{fe(tn),Promise.all([qe(()=>import("./tool-windows-BEnZdJqF.js").then(oe=>oe.pk),__vite__mapDeps([0]),import.meta.url),qe(()=>import("./tool-windows-BEnZdJqF.js").then(oe=>oe.pj),__vite__mapDeps([0]),import.meta.url)]).then(([{toolWindowService:oe},{BUILT_IN_TOOLS:Ce}])=>{const ke=Ce.find(bt=>bt.id==="knowledge-base");if(!ke)return;const Ne=oe.getToolState(ke.id);Ne&&Ne.status==="open"?oe.closeTool(ke.id):oe.openTool(ke)})},[fe]);m.useEffect(()=>{const oe=Ce=>{const{noteId:ke}=Ce.detail;fe(tn),Promise.all([qe(()=>import("./tool-windows-BEnZdJqF.js").then(Ne=>Ne.pk),__vite__mapDeps([0]),import.meta.url),qe(()=>import("./tool-windows-BEnZdJqF.js").then(Ne=>Ne.pj),__vite__mapDeps([0]),import.meta.url)]).then(([{toolWindowService:Ne},{BUILT_IN_TOOLS:bt}])=>{const Vt=bt.find(kt=>kt.id==="knowledge-base");if(!Vt)return;const jt=Ne.isToolOpen(Vt.id);Ne.openTool(Vt,{componentProps:ke?{initialNoteId:ke}:{}}),jt&&ke&&window.setTimeout(()=>{window.dispatchEvent(new CustomEvent("kb:open-note",{detail:{noteId:ke}}))},50)})};return window.addEventListener("kb:open",oe),()=>window.removeEventListener("kb:open",oe)},[fe]);const Fe=m.useCallback(()=>{if(fe(tn),N){y(!1);return}wi()&&j(!1),yi()&&E(!1),q(!1),y(!0)},[fe,N]);m.useEffect(()=>{const oe=()=>{fe(tn),wi()&&j(!1),yi()&&E(!1),q(!1),y(!0)};return window.addEventListener(Xl,oe),()=>window.removeEventListener(Xl,oe)},[fe]);const X=m.useCallback(()=>{if(fe(tn),D){j(!1);return}hs()&&y(!1),yi()&&E(!1),q(!1),j(!0)},[fe,D]),v=m.useCallback(()=>{if(R(tn),k){E(!1);return}hs()&&y(!1),wi()&&j(!1),q(!1),E(!0)},[R,k]),H=m.useCallback(oe=>{fe(tn);const{keepProjectDrawerOpen:Ce,...ke}=oe||{};Ce?(wi()&&j(!1),yi()&&E(!1),q(!1)):ze(),U({mode:Bn.BROWSE,...ke}),q(!0)},[ze,fe]),O=m.useCallback(()=>{R(tn),T(!0)},[R]),pe=m.useCallback(()=>{R(tn),P(!0)},[R]),me=m.useCallback(oe=>{b(oe)},[]),C=m.useCallback(oe=>{b(Ce=>({...Ce,...oe}))},[]);m.useEffect(()=>{g&&(g.appState=x,g.__setAppState=me,ye.current=g)},[g,x,me]),m.useEffect(()=>{if(new URLSearchParams(window.location.search).has("tool")){fe(tn);return}},[fe]),m.useEffect(()=>{if(typeof window>"u"||!("serviceWorker"in navigator))return;let oe=!1;const Ce=window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1",ke=jt=>{var kt;((kt=jt.data)==null?void 0:kt.type)==="SW_IDLE_PREFETCH_STATUS"&&tn.every(In=>{var zt;return(zt=jt.data.completedGroups)==null?void 0:zt.includes(In)})&&(oe=!0,ge(!0))};navigator.serviceWorker.addEventListener("message",ke);const Ne={type:"SW_IDLE_PREFETCH_STATUS_GET"},bt=navigator.serviceWorker.controller;bt?bt.postMessage(Ne):navigator.serviceWorker.ready.then(jt=>{var kt;(kt=jt.active)==null||kt.postMessage(Ne)}).catch(()=>{});const Vt=window.setTimeout(()=>{oe||ne||(Ce||console.warn("[Drawnix] SW idle prefetch status unresolved, enabling minimized tools bar fallback"),ge(!0))},2200);return()=>{window.clearTimeout(Vt),navigator.serviceWorker.removeEventListener("message",ke)}},[ne]),m.useEffect(()=>{const oe=window.requestIdleCallback;let Ce;const ke=window.setTimeout(()=>{const Ne=()=>{V(!0),ue(!0)};if(typeof oe=="function"){Ce=oe(Ne,{timeout:2500});return}Ne()},5e3);return()=>{var Ne;window.clearTimeout(ke),typeof Ce=="number"&&((Ne=window.cancelIdleCallback)==null||Ne.call(window,Ce))}},[]),m.useEffect(()=>{const oe=Ce=>{const ke=Ce,{message:Ne}=ke.detail;se.error({content:"API Key 无效或已过期,请重新配置",duration:5e3}),console.error("[Drawnix] API auth error:",Ne),b(bt=>({...bt,openSettings:!0}))};return window.addEventListener(Kl,oe),()=>{window.removeEventListener(Kl,oe)}},[]);const L=[ox,sx,rx,PN,bw,r0(C),z0,K0,Jk,Gk,Z0(C),fk(C),ax,lx,Ak,cx,ux,dx,yE,_E,mx,o1,px,fx,hx,RE,WE,JE,gx,s1,Ck,Pk],F=m.useRef(null),{saveBoard:G,createBoard:J,switchBoard:ee}=Zb(),Z=m.useCallback(async()=>{if(i&&ye.current){const oe={children:ye.current.children||[],viewport:ye.current.viewport,theme:ye.current.theme};await G(oe)}},[i,G]),te=m.useCallback(async()=>{await Z();const oe=await J({name:"新画布"});oe&&(await ee(oe.id),setTimeout(()=>{So()},500))},[Z,J,ee]),le=m.useCallback(oe=>{const Ce=ye.current;if(Ce&&oe){const Ne=Oe(Ce).map(bt=>bt.id).filter(Boolean);C({lastSelectedElementIds:Ne})}o&&o(oe)},[o,C]),Me=m.useMemo(()=>({appState:x,setAppState:me,board:g}),[x,me,g]),$e=Ee||$||Y||x.openCommandPalette||x.openCanvasSearch||N||D||I||M||_;return a.jsxDEV(Jb,{children:a.jsxDEV(Qb,{children:a.jsxDEV(ex,{children:a.jsxDEV(tx,{children:a.jsxDEV(nx,{children:a.jsxDEV(bE,{onOpenMediaLibrary:H,children:a.jsxDEV(iE,{children:a.jsxDEV(ix.Provider,{value:Me,children:a.jsxDEV(v1,{value:e,viewport:t,theme:n,options:h,plugins:L,containerRef:F,appState:x,board:g,setBoard:w,projectDrawerOpen:N,toolboxDrawerOpen:D,taskPanelExpanded:k,mediaLibraryOpen:I,mediaLibraryConfig:W,backupRestoreOpen:M,onChange:i,onSelectionChange:le,onViewportChange:s,onThemeChange:r,onValueChange:l,afterInit:u,onBoardSwitch:c,onTabSyncNeeded:d,handleProjectDrawerToggle:Fe,handleToolboxDrawerToggle:X,handleKnowledgeBaseToggle:Ae,handleTaskPanelToggle:v,handleOpenMediaLibrary:H,handleOpenBackupRestore:O,handleOpenCloudSync:pe,setProjectDrawerOpen:y,setToolboxDrawerOpen:j,setTaskPanelExpanded:E,setMediaLibraryOpen:q,setBackupRestoreOpen:T,cloudSyncOpen:_,setCloudSyncOpen:P,handleBeforeSwitch:Z,isDataReady:p,onCreateProjectForMemory:te,currentBoardId:f,deferredRuntimeEnabled:A,shouldRenderDeferredFeatures:$e,versionUpdateEnabled:Ee,performancePanelEnabled:$,toolWindowManagerEnabled:Y,minimizedToolsBarEnabled:ne,enableToolWindows:fe},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:814,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:813,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:812,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:811,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:810,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:809,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:808,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:807,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:806,columnNumber:5},void 0)},v1=({value:e,viewport:t,theme:n,options:i,plugins:o,containerRef:s,appState:r,board:l,setBoard:u,projectDrawerOpen:c,toolboxDrawerOpen:d,taskPanelExpanded:p,mediaLibraryOpen:f,mediaLibraryConfig:h,backupRestoreOpen:x,deferredRuntimeEnabled:b,shouldRenderDeferredFeatures:g,versionUpdateEnabled:w,performancePanelEnabled:N,toolWindowManagerEnabled:y,minimizedToolsBarEnabled:D,enableToolWindows:j,cloudSyncOpen:k,onChange:E,onSelectionChange:I,onViewportChange:q,onThemeChange:W,onValueChange:U,afterInit:M,onBoardSwitch:T,onTabSyncNeeded:_,handleProjectDrawerToggle:P,handleToolboxDrawerToggle:A,handleKnowledgeBaseToggle:Q,handleTaskPanelToggle:Ee,handleOpenMediaLibrary:V,handleOpenBackupRestore:$,handleOpenCloudSync:ue,setProjectDrawerOpen:Y,setToolboxDrawerOpen:ae,setTaskPanelExpanded:ne,setMediaLibraryOpen:ge,setBackupRestoreOpen:ye,setCloudSyncOpen:ze,handleBeforeSwitch:R,isDataReady:fe,onCreateProjectForMemory:Ae,currentBoardId:Fe})=>{const{setAppState:X}=Lt(),{chatDrawerRef:v}=kp(),{language:H}=_e(),O=Zl(je=>je.error),pe=Zl(je=>je.playing||!!je.activeAudioUrl||!!je.activeReadingSourceId),me=m.useRef(void 0),[C,L]=m.useState(pe);nk({board:l,pointer:r.pointer}),Tp({onSyncNeeded:m.useCallback(()=>{_?_():So()},[_]),enabled:!0,currentBoardId:Fe});const[F,G]=m.useState(!1),[J,ee]=m.useState(null),[Z,te]=m.useState(null),le=m.useRef(null),[Me,$e]=m.useState(!1),[oe,Ce]=m.useState([]),[ke,Ne]=m.useState(0);m.useEffect(()=>{if(!O){me.current=void 0;return}O!==me.current&&(me.current=O,se.error(O))},[O]),m.useEffect(()=>{pe&&L(!0)},[pe]),m.useEffect(()=>{hr.setCanvasQueue(Lr(e))},[e]),m.useEffect(()=>()=>{hr.stopAndClear()},[]);const bt=m.useCallback(()=>{if(!l||!l.children)return{items:[],elementIds:[]};const je=[],Be=[];for(const we of l.children){const Te=we.url;if(!Te||typeof Te!="string"||gr(we))continue;const tt=B.isDrawElement(we)&&B.isImage(we),He=pn(we);(tt||He)&&(je.push({id:we.id,url:Te,type:He?"video":"image",title:we.name||void 0}),Be.push(we.id))}return{items:je,elementIds:Be}},[l]),Vt=m.useCallback(je=>{const{items:Be,elementIds:we}=bt();if(Be.length===0)return;const Te=we.indexOf(je);Te!==-1&&(Ce(Be),Ne(Te),$e(!0))},[bt]),jt=m.useCallback(()=>{$e(!1)},[]),kt=m.useCallback(async(je,Be)=>{const we=Be.id;if(!(!we||!l))try{const{unifiedCacheService:Te}=await qe(async()=>{const{unifiedCacheService:rt}=await import("./tool-windows-BEnZdJqF.js").then(rn=>rn.pb);return{unifiedCacheService:rt}},__vite__mapDeps([0]),import.meta.url),{Transforms:tt}=await qe(async()=>{const{Transforms:rt}=await import("./tool-windows-BEnZdJqF.js").then(rn=>rn.p9);return{Transforms:rt}},__vite__mapDeps([0]),import.meta.url),He=`edited-image-${Date.now()}`,Re=`/__aitu_cache__/image/${He}.png`,dt=await(await fetch(je)).blob();await Te.cacheMediaFromBlob(Re,dt,"image",{taskId:He});const Dt=new Image;await new Promise((rt,rn)=>{Dt.onload=()=>rt(),Dt.onerror=()=>rn(new Error("Failed to load edited image")),Dt.src=je});const Tt=l.children.findIndex(rt=>rt.id===we);if(Tt>=0){const rt=l.children[Tt],{newPoints:rn}=await pd({url:rt.url,width:rt.width,height:rt.height,points:rt.points||[[0,0],[0,0]]},Dt.naturalWidth,Dt.naturalHeight);tt.setNode(l,{url:Re,width:Dt.naturalWidth,height:Dt.naturalHeight,points:rn},[Tt])}}catch(Te){console.error("Failed to update image:",Te),se.error("更新失败")}},[l]),In=m.useCallback(async je=>{if(l)try{const{unifiedCacheService:Be}=await qe(async()=>{const{unifiedCacheService:Tt}=await import("./tool-windows-BEnZdJqF.js").then(rt=>rt.pb);return{unifiedCacheService:Tt}},__vite__mapDeps([0]),import.meta.url),{insertImageFromUrl:we}=await qe(async()=>{const{insertImageFromUrl:Tt}=await import("./tool-windows-BEnZdJqF.js").then(rt=>rt.pf);return{insertImageFromUrl:Tt}},__vite__mapDeps([0]),import.meta.url),Te=`edited-image-${Date.now()}`,tt=`/__aitu_cache__/image/${Te}.png`,Re=await(await fetch(je)).blob();await Be.cacheMediaFromBlob(tt,Re,"image",{taskId:Te});const ut=new Image;await new Promise((Tt,rt)=>{ut.onload=()=>Tt(),ut.onerror=()=>rt(new Error("Failed to load edited image")),ut.src=je});const dt=Ao(l),Dt=[((dt==null?void 0:dt[0])??0)+100,((dt==null?void 0:dt[1])??0)+100];await we(l,tt,Dt,!1,{width:ut.naturalWidth,height:ut.naturalHeight},!1,!0)}catch(Be){console.error("Failed to insert image:",Be),se.error("插入失败")}},[l]),{state:zt,selectShape:Zt,closePicker:Xn}=FE(l);m.useEffect(()=>{Z&&le.current&&le.current.focus()},[Z]);const Jt=m.useCallback(()=>{if(!l||!Z||!le.current){te(null);return}const je=le.current.innerText||"";je.trim()&&(zs.insertText(l,Z.worldPoint,je),requestAnimationFrame(()=>{const Be=l.children[l.children.length-1];if(B.isText(Be)){const we=Be;if(!isFinite(we.textHeight)){const Te=he.getRectangleByPoints(we.points);ce.setNode(l,{textHeight:Te.height},[l.children.length-1])}}})),te(null),be.updatePointerType(l,wt.selection),X(Be=>({...Be,pointer:wt.selection}))},[l,Z,X]);return m.useEffect(()=>{if(!l)return;const je=we=>{const Te=we.target;if(!(Te.closest(".board-host-svg")||Te.closest(".plait-board-container")))return;const He=Mt(l,Rt(l,we.clientX,we.clientY)),Re=zr(l,He);if(Re&&Ct(Re)){Vm(l,Re,H),we.preventDefault(),we.stopPropagation();return}if(Re){if(gr(Re)){we.preventDefault(),we.stopPropagation();return}const dt=Re.url;if(dt&&typeof dt=="string"){const Dt=B.isDrawElement(Re)&&B.isImage(Re),Tt=pn(Re);if(Dt||Tt){Vt(Re.id),we.preventDefault(),we.stopPropagation();return}}}const ut=Te.closest(".plait-tool-container")||Te.closest(".plait-workzone-container")||Te.closest("foreignObject");if(!Re&&!ut){const dt=[we.clientX,we.clientY];ee(dt),G(!0)}},Be=s.current;return Be&&Be.addEventListener("dblclick",je),()=>{Be&&Be.removeEventListener("dblclick",je)}},[l,s,Vt,H]),m.useEffect(()=>{if(!l)return;const je=we=>{const Te=we.target;if(Te.closest(".side-drawer")||Te.closest(".project-drawer")||!(Te.closest(".board-host-svg")||Te.closest(".plait-board-container")))return;const He=Mt(l,Rt(l,we.clientX,we.clientY)),Re=zr(l,He);if(Re&&gr(Re)&&!An(Re)){L(!0);const ut=xx(Re);if(ut){we.preventDefault(),we.stopPropagation(),hr.togglePlaybackInQueue(ut,Lr(l.children),{queueSource:"canvas",queueId:md,queueName:dd}).catch(()=>{});return}}if(z.isPointer(l,Ve.text)&&!(Te.closest(".plait-tool-container")||Te.closest(".plait-workzone-container")||Te.closest("foreignObject"))&&!Re){te({screenX:we.clientX,screenY:we.clientY,worldPoint:He,zoom:l.viewport.zoom}),we.preventDefault(),we.stopPropagation();return}c&&N1()&&Y(!1),d&&wi()&&ae(!1),p&&yi()&&ne(!1)},Be=s.current;return Be&&Be.addEventListener("click",je),()=>{Be&&Be.removeEventListener("click",je)}},[l,s,c,d,p,Y,ae,ne]),a.jsxDEV("div",{className:K("drawnix",{"drawnix--mobile":r.isMobile}),ref:s,children:a.jsxDEV("div",{className:"drawnix__main",children:[a.jsxDEV(gN,{value:e,viewport:t,theme:n,options:i,plugins:o,onChange:je=>{E&&E(je)},onSelectionChange:I,onViewportChange:q,onThemeChange:W,onValueChange:U,children:[a.jsxDEV(mN,{afterInit:je=>{u(je),window.__drawnixBoard=je,Ep.setBoard(je),M&&M(je),je.afterChange&&je.afterChange()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1514,columnNumber:11},void 0),a.jsxDEV(tE,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1535,columnNumber:11},void 0),a.jsxDEV(s0,{projectDrawerOpen:c,onProjectDrawerToggle:P,toolboxDrawerOpen:d,onToolboxDrawerToggle:A,taskPanelExpanded:p,onTaskPanelToggle:Ee,onOpenBackupRestore:$,onOpenCloudSync:ue,onKnowledgeBaseToggle:Q,onOpenMediaLibrary:V,deferredFeaturesEnabled:y,minimizedToolsBarEnabled:D,onEnableToolWindows:j},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1537,columnNumber:11},void 0),C&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(f1,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1554,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1553,columnNumber:13},void 0),a.jsxDEV(hv,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1558,columnNumber:11},void 0),a.jsxDEV(hk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1559,columnNumber:11},void 0),a.jsxDEV(J0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1560,columnNumber:11},void 0),a.jsxDEV(ok,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1561,columnNumber:11},void 0),a.jsxDEV(mk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1562,columnNumber:11},void 0),a.jsxDEV(uk,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1563,columnNumber:11},void 0),r.openDialogTypes.size>0&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(d1,{container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1566,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1565,columnNumber:13},void 0),r.openSettings&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(m1,{container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1571,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1570,columnNumber:13},void 0),a.jsxDEV(pk,{container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1574,columnNumber:11},void 0),a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(a1,{isDataReady:fe,activationKey:0,onEnableToolWindows:j},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1576,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1575,columnNumber:11},void 0),a.jsxDEV(gE,{position:J,visible:F,onClose:()=>G(!1),onOpenMediaLibrary:V},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1583,columnNumber:11},void 0),Z&&a.jsxDEV("div",{ref:le,contentEditable:!0,suppressContentEditableWarning:!0,style:{position:"fixed",left:Z.screenX,top:Z.screenY-14*Z.zoom/2,minWidth:"2px",minHeight:"1.5em",outline:"none",border:"none",background:"transparent",fontSize:`${14*Z.zoom}px`,lineHeight:"1.5",color:"#333",caretColor:"#333",zIndex:1e4,whiteSpace:"pre-wrap",fontFamily:"inherit"},onBlur:Jt,onKeyDown:je=>{je.key==="Escape"&&te(null),je.stopPropagation()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1591,columnNumber:13},void 0),Me&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(p1,{visible:Me,items:oe,initialIndex:ke,onClose:jt,showThumbnails:!0,useBuiltInEditor:!0,showEditOverwrite:!0,onEditOverwrite:kt,onEditInsert:In},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1624,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1623,columnNumber:13},void 0),a.jsxDEV(LE,{visible:zt.visible,position:zt.position,currentShape:zt.currentShape||void 0,onSelectShape:Zt,onClose:Xn,container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1638,columnNumber:11},void 0),a.jsxDEV(fE,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1647,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1500,columnNumber:9},void 0),a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(l1,{ref:v},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1650,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1649,columnNumber:9},void 0),b&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(u1,{board:l,value:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1654,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1653,columnNumber:11},void 0),g&&a.jsxDEV(m.Suspense,{fallback:null,children:a.jsxDEV(c1,{board:l,value:e,containerRef:s,versionUpdateEnabled:w,performancePanelEnabled:N,toolWindowManagerEnabled:y,projectDrawerOpen:c,toolboxDrawerOpen:d,mediaLibraryOpen:f,mediaLibraryConfig:h,backupRestoreOpen:x,cloudSyncOpen:k,onBoardSwitch:T,setProjectDrawerOpen:Y,setToolboxDrawerOpen:ae,setMediaLibraryOpen:ge,setBackupRestoreOpen:ye,setCloudSyncOpen:ze,handleOpenMediaLibrary:V,handleBeforeSwitch:R,onCreateProjectForMemory:Ae},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1659,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1658,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1499,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1493,columnNumber:5},void 0)},k1="Opentu",E1="Opentu - AI应用平台";function Is(e){e&&e.trim()?document.title=`${k1} - ${e.trim()}`:document.title=E1}function j1(e){if(!e){Is();return}const t=sm.getBoard(e);Is(t==null?void 0:t.name)}function D1(e,t){return m.useEffect(()=>{j1(e)},[e,t]),m.useEffect(()=>{const i=sm.observeEvents().subscribe(o=>{if(o.type==="boardUpdated"){const s=o.payload;s&&s.id===e&&Is(s.name)}});return()=>{i.unsubscribe()}},[e]),{updateTitle:m.useCallback(i=>{Is(i)},[])}}const qp="main_board_content",Ap=ss.createInstance({name:"Drawnix",storeName:Nx,driver:[ss.INDEXEDDB,ss.LOCALSTORAGE]});async function Mp(){try{const e=await Hr.loadState();return(e==null?void 0:e.migrationCompleted)===!0}catch(e){return console.error("[WorkspaceMigration] Failed to check migration status:",e),!1}}async function ju(){try{const e=await Hr.loadState();e.migrationCompleted=!0,await Hr.saveState(e)}catch(e){console.error("[WorkspaceMigration] Failed to mark migration completed:",e)}}async function S1(){try{const e=await Ap.getItem(qp);if(e&&e.children&&e.children.length>0)return e;const t=localStorage.getItem(rm);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 C1(){try{if(await Mp())return null;const t=await S1();if(!t||!t.children||t.children.length===0)return await ju(),null;const n=dn.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 ju(),await _1(),i.id):(console.error("[WorkspaceMigration] Failed to create board"),null)}catch(e){return console.error("[WorkspaceMigration] Migration failed:",e),null}}async function _1(){try{await Ap.removeItem(qp),localStorage.removeItem(rm)}catch(e){console.error("[WorkspaceMigration] Failed to clear legacy data:",e)}}function eo(e){if(!gt.isAnalyticsEnabled())return;const t=P1(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(()=>{gt.track("$web_vitals",i)},0)}function P1(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 V1(){try{const e=await qe(()=>import("./web-vitals-DcvjKPr-.js"),[],import.meta.url),{onCLS:t,onFCP:n,onLCP:i,onTTFB:o,onINP:s}=e;t(eo),n(eo),i(eo),o(eo),s(eo)}catch(e){console.error("[Web Vitals] Failed to initialize monitoring:",e)}}const qo="page_report",T1="app_page_view";let Du=!1,Su="";function U1(){const e=window.innerWidth;return e<768?"mobile":e<1024?"tablet":"desktop"}const Cu=200;function I1(){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:U1(),user_agent:e.length>Cu?e.slice(0,Cu):e,language:navigator.language,timestamp:Date.now()}}function q1(){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 Pr(){if(!gt.isAnalyticsEnabled())return;const e=I1();e.page_url!==Su&&(Su=e.page_url,gt.track(T1,{category:qo,...e}))}function _u(){if(!gt.isAnalyticsEnabled())return;const e=q1();if(!e){console.warn("[Page Report] Performance data not available");return}gt.track("page_performance",{category:qo,...e})}function A1(){if(!gt.isAnalyticsEnabled())return;const e=Math.round(performance.now());gt.track("page_unload",{category:qo,page_url:window.location.href,page_path:window.location.pathname,time_on_page:e,timestamp:Date.now()})}function M1(){try{if(Du)return;Du=!0,Pr(),document.readyState==="complete"?_u():window.addEventListener("load",()=>{setTimeout(()=>{_u()},0)}),window.addEventListener("beforeunload",()=>{A1()}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?gt.track("page_hidden",{category:qo,page_url:window.location.href,page_path:window.location.pathname,timestamp:Date.now()}):document.visibilityState==="visible"&>.track("page_visible",{category:qo,page_url:window.location.href,page_path:window.location.pathname,timestamp:Date.now()})}),window.addEventListener("popstate",()=>{setTimeout(()=>{Pr()},100)});const e=history.pushState;history.pushState=function(...t){e.apply(this,t),setTimeout(()=>{Pr()},100)}}catch(e){console.error("[Page Report] Failed to initialize monitoring:",e)}}function Pu(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 Vu(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 R1(){if(typeof window>"u")return()=>{};const e=i=>{if(i.touches.length>1){const o=i.target;if(Pu(o))return;Vu(o)&&(i.preventDefault(),i.stopPropagation())}},t=i=>{const o=i.target;Pu(o)||Vu(o)&&(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 fa=tr.DB_CLEANUP_DONE;function Rp(){let e=0;for(const t of am)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 zp(){localStorage.getItem(fa)||(Rp(),localStorage.setItem(fa,Date.now().toString()))}function z1(){localStorage.removeItem(fa)}typeof window<"u"&&(window.__dbCleanup={run:zp,reset:z1,cleanupLS:Rp,LS_KEYS_DEPRECATED:am});const ul=[{lsKey:St.PROMPT_HISTORY,idbKey:St.PROMPT_HISTORY,deleteAfterMigration:!0},{lsKey:St.VIDEO_PROMPT_HISTORY,idbKey:St.VIDEO_PROMPT_HISTORY,deleteAfterMigration:!0},{lsKey:St.PRESET_SETTINGS,idbKey:St.PRESET_SETTINGS,deleteAfterMigration:!0},{lsKey:St.BATCH_IMAGE_CACHE,idbKey:St.BATCH_IMAGE_CACHE,deleteAfterMigration:!0},{lsKey:St.RECENT_TEXT_COLORS,idbKey:St.RECENT_TEXT_COLORS,deleteAfterMigration:!0},{lsKey:St.CUSTOM_GRADIENTS,idbKey:St.CUSTOM_GRADIENTS,deleteAfterMigration:!0},{lsKey:St.CUSTOM_FONTS,idbKey:St.CUSTOM_FONTS,deleteAfterMigration:!0},{lsKey:St.TOOLBAR_CONFIG,idbKey:St.TOOLBAR_CONFIG,deleteAfterMigration:!0}];function dl(){try{return localStorage.getItem(tr.LS_TO_IDB_MIGRATION_DONE)!==null}catch{return!1}}function L1(){try{localStorage.setItem(tr.LS_TO_IDB_MIGRATION_DONE,Date.now().toString())}catch(e){console.error("[StorageMigration] Failed to mark migration done:",e)}}function O1(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 Tu(e){try{localStorage.removeItem(e)}catch(t){console.warn(`[StorageMigration] Failed to delete ${e} from LocalStorage:`,t)}}async function F1(e){const{lsKey:t,idbKey:n,deleteAfterMigration:i}=e;try{const o=O1(t);return o===null?{key:t,success:!0}:await bn.get(n)!==null?(i&&Tu(t),{key:t,success:!0}):(await bn.set(n,o),await bn.get(n)===null?{key:t,success:!1,error:"Verification failed: data not found after write"}:(i&&Tu(t),{key:t,success:!0}))}catch(o){const s=o instanceof Error?o.message:String(o);return console.error(`[StorageMigration] Failed to migrate ${t}:`,o),{key:t,success:!1,error:s}}}async function Lp(){if(!bn.isAvailable())return console.warn("[StorageMigration] IndexedDB not available, skipping migration"),[];if(dl())return[];const e=[];for(const n of ul){const i=await F1(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&&L1(),e}function Op(){try{localStorage.removeItem(tr.LS_TO_IDB_MIGRATION_DONE)}catch(e){console.error("[StorageMigration] Failed to reset migration status:",e)}}const B1={isMigrationDone:dl,runMigration:Lp,resetMigration:Op,MIGRATION_CONFIGS:ul};typeof window<"u"&&(window.__storageMigration={run:Lp,reset:Op,isDone:dl,configs:ul});const Ft={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 H1{constructor(){this.state={crashDetected:!1,crashCount:0,isSafeMode:!1,crashHistory:[]}}markLoadingStart(){try{localStorage.getItem(Ft.LOADING_STATE)==="loading"&&(this.state.crashDetected=!0,this.incrementCrashCount(),this.recordCrash()),localStorage.setItem(Ft.LOADING_STATE,"loading"),this.state.isSafeMode=localStorage.getItem(Ft.SAFE_MODE)==="true",this.loadCrashHistory()}catch(t){console.warn("[CrashRecovery] Failed to mark loading start:",t)}}markLoadingComplete(){try{localStorage.setItem(Ft.LOADING_STATE,"complete"),localStorage.setItem(Ft.LAST_SUCCESS_LOAD,Date.now().toString()),this.state.isSafeMode||(localStorage.setItem(Ft.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(Ft.CRASH_COUNT)||"0",10);this.state.crashCount=t+1,localStorage.setItem(Ft.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(Ft.CRASH_HISTORY);t&&(this.state.crashHistory=JSON.parse(t))}catch{this.state.crashHistory=[]}}saveCrashHistory(){try{localStorage.setItem(Ft.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(Ft.SAFE_MODE,"true"),this.state.isSafeMode=!0}catch{}}disableSafeMode(){try{localStorage.removeItem(Ft.SAFE_MODE),this.state.isSafeMode=!1,localStorage.setItem(Ft.CRASH_COUNT,"0"),this.state.crashCount=0}catch{}}clearCrashState(){try{localStorage.setItem(Ft.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 Bt=new H1,W1=3e4,$1=800,G1=.6,Y1=3,ml="aitu_last_snapshot",X1=50,bo=[],K1=20,Z1=2e3;let xo=null;const Uu=3e3,J1=1e4,Q1=200,ej=5e3,tj=10,nj=5e3,ij=30,oj=20,Iu=20,sj=100,rj=30,aj=240;let qu=null,Au=!1,Mu=null,Ru=null,Vr=null,Tr=0,ii=60,co=!1,Ur=!1;const si=[],ri=[],fn=[];function lj(e){const t=At(),n=Date.now();return()=>{const i=At();if(!t||!i)return;const o=(i.usedJSHeapSize-t.usedJSHeapSize)/(1024*1024),s=Date.now()-n;if(Math.abs(o)>=X1){const r=o>=0?"+":"";console.warn(`[MemoryLog] ${e}: ${r}${o.toFixed(0)} MB (${s}ms)`)}}}function ln(e){if(e)return e.slice(0,aj)}function cj(){return"0.6.80"}function uj(){if(typeof navigator>"u"||typeof window>"u"||!("serviceWorker"in navigator))return{supported:!1,readyState:document.readyState,visibilityState:document.visibilityState};const e=navigator.serviceWorker.controller;return{supported:!0,controller:e?{scriptURL:ln(e.scriptURL),state:e.state}:null,readyState:document.readyState,visibilityState:document.visibilityState}}function dj(){const e=Array.from(document.scripts).map(i=>ln(Fn(i.src))).filter(Boolean).slice(-8),t=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).map(i=>ln(Fn(i.href))).filter(Boolean).slice(-8),n=Array.from(document.querySelectorAll('link[rel="modulepreload"]')).map(i=>ln(Fn(i.href))).filter(Boolean).slice(-8);return{scripts:e,stylesheets:t,modulePreloads:n}}function Fp(e){if(!(e instanceof HTMLElement))return;const t=e;return{tagName:e.tagName.toLowerCase(),id:ln(e.id||void 0),className:typeof e.className=="string"?ln(e.className):void 0,src:ln(t.currentSrc||t.src?Fn(t.currentSrc||t.src||""):void 0),href:ln(t.href?Fn(t.href):void 0),rel:ln(t.rel),crossOrigin:ln(t.crossOrigin||void 0)}}function ha(e){return{appVersion:cj(),recentActions:si.slice(-10),recentErrors:ri.slice(-5),recentNetworkErrors:fn.slice(-5),serviceWorker:uj(),loadedResources:dj(),...e}}function At(){if(typeof performance<"u"&&"memory"in performance){const e=performance.memory;return{usedJSHeapSize:e.usedJSHeapSize,totalJSHeapSize:e.totalJSHeapSize,jsHeapSizeLimit:e.jsHeapSizeLimit}}}function Li(){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 Bp(){if(!pt.isInitialized()||bo.length===0)return;const e=bo.splice(0,bo.length);for(const t of e)pt.reportCrashSnapshot(t).catch(()=>{});xo&&(clearInterval(xo),xo=null)}function mj(){xo||(xo=setInterval(()=>{pt.isInitialized()&&Bp()},Z1))}function Xt(e){try{pt.isInitialized()?(Bp(),pt.reportCrashSnapshot(e).catch(()=>{})):bo.length<K1&&(bo.push(e),mj())}catch(t){console.warn("[MemoryLog] Failed to send snapshot to SW:",t)}}function pj(e){try{localStorage.setItem(ml,JSON.stringify(e))}catch{}}function fj(){try{const e=localStorage.getItem(ml);if(e)return JSON.parse(e)}catch{}return null}function hj(){try{localStorage.removeItem(ml)}catch{}}function gj(){const e={id:`startup-${Date.now()}`,timestamp:Date.now(),type:"startup",userAgent:navigator.userAgent,url:location.href,memory:At()};Xt(e)}function bj(){if(qu!==null)return;let e=0;qu=window.setInterval(()=>{const t=At();if(!t)return;const n=t.usedJSHeapSize/(1024*1024),i=t.jsHeapSizeLimit/(1024*1024),o=n/i;if(n>$1||o>G1){e++;const l=e>=Y1?Li():void 0,u={id:`periodic-${Date.now()}`,timestamp:Date.now(),type:"periodic",memory:t,pageStats:l,userAgent:navigator.userAgent,url:location.href};Xt(u)}else e=0},W1)}function xj(){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:At(),userAgent:navigator.userAgent,url:location.href,customData:ha({filename:e.filename,lineno:e.lineno,colno:e.colno,eventTarget:Fp(e.target)})};Xt(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")||i.includes("posthog"))return;const o={id:`rejection-${Date.now()}`,timestamp:Date.now(),type:"error",error:{message:n||"Unhandled Promise rejection",stack:i,type:"unhandledRejection"},memory:At(),userAgent:navigator.userAgent,url:location.href,customData:ha()};Xt(o),console.error("[MemoryLog] Unhandled rejection captured:",t)}),window.addEventListener("beforeunload",()=>{const e=At();if(e){const t={id:`beforeunload-${Date.now()}`,timestamp:Date.now(),type:"beforeunload",memory:e,userAgent:navigator.userAgent,url:location.href};pj(t),Xt(t)}})}function Nj(){if(Mu!==null)return;let e=Date.now();document.addEventListener("visibilitychange",()=>{document.hidden?Ur=!0:(e=Date.now(),setTimeout(()=>{Ur=!1},Uu+100))}),Mu=window.setInterval(()=>{const t=Date.now(),n=t-e;if(n>J1&&!Ur&&!document.hidden){const i={id:`freeze-${Date.now()}`,timestamp:Date.now(),type:"freeze",memory:At(),pageStats:Li(),performance:{freezeDuration:n,lastHeartbeat:e,fps:ii},userAgent:navigator.userAgent,url:location.href,customData:{recentActions:si.slice(-10),recentErrors:ri.slice(-5),recentNetworkErrors:fn.slice(-5)}};Xt(i)}e=t,pt.isInitialized()&&pt.sendHeartbeat(t).catch(()=>{})},Uu)}function wj(){if(Vr===null&&!(typeof PerformanceObserver>"u"))try{Vr=new PerformanceObserver(e=>{for(const t of e.getEntries())if(t.duration>Q1){const i=t.attribution;let o;if(i&&i.length>0){const r=i[0];o={name:r.name,containerType:r.containerType,containerSrc:r.containerSrc,containerId:r.containerId,containerName:r.containerName}}const s={id:`longtask-${Date.now()}`,timestamp:Date.now(),type:"longtask",memory:At(),performance:{longTaskDuration:t.duration,fps:ii},userAgent:navigator.userAgent,url:location.href,customData:{taskName:t.name,startTime:t.startTime,attribution:o,debugTip:"Use Chrome DevTools Performance panel to record and analyze the call stack"}};Xt(s)}}),Vr.observe({entryTypes:["longtask"]})}catch{}}function yj(){if(Ru!==null)return;let e=0;const t=()=>{if(e++,e>=rj){const n=performance.now(),i=n-Tr;i>0&&(ii=Math.round(e*1e3/i)),e=0,Tr=n}requestAnimationFrame(t)};Tr=performance.now(),requestAnimationFrame(t),Ru=window.setInterval(()=>{if(ii<tj&&ii>0){const n={id:`lowfps-${Date.now()}`,timestamp:Date.now(),type:"freeze",memory:At(),performance:{fps:ii},userAgent:navigator.userAgent,url:location.href};Xt(n)}},ej)}function vj(){setTimeout(()=>{zu()},nj),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&!co&&setTimeout(zu,1e3)})}function zu(){if(co)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){co=!0;const o={id:`whitescreen-${Date.now()}`,timestamp:Date.now(),type:"whitescreen",memory:At(),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}};Xt(o),console.error("[MemoryLog] 白屏检测: React 未渲染内容")}t&&!i&&location.pathname==="/"&&setTimeout(()=>{if(!document.querySelector(".plait-board-container")&&!co){co=!0;const o={id:`whitescreen-noboard-${Date.now()}`,timestamp:Date.now(),type:"whitescreen",memory:At(),pageStats:Li(),userAgent:navigator.userAgent,url:location.href,customData:{reason:"画板未加载",rootChildCount:(e==null?void 0:e.children.length)||0}};Xt(o),console.error("[MemoryLog] 白屏检测: 画板组件未加载")}},5e3)}function uo(e,t,n){si.push({time:Date.now(),action:e,target:t,detail:n}),si.length>ij&&si.shift()}function kj(){let e=0;document.addEventListener("click",t=>{const n=Date.now();if(n-e<sj)return;e=n;const i=t.target;if(!i)return;const o=()=>{var l,u,c,d,p,f,h,x,b,g,w,N,y,D,j;let s="";const r=(u=(l=i.closest)==null?void 0:l.call(i,"[data-track]"))==null?void 0:u.getAttribute("data-track");if(r)s=r;else if(i.tagName==="BUTTON"||(c=i.closest)!=null&&c.call(i,"button")){const k=((d=i.closest)==null?void 0:d.call(i,"button"))||i,E=(p=k.textContent)==null?void 0:p.trim().slice(0,20),I=(b=(x=(h=(f=k.className)==null?void 0:f.split)==null?void 0:h.call(f," "))==null?void 0:x[0])==null?void 0:b.slice(0,20);s=`btn:${E||I||"unknown"}`}else if(i.tagName==="A")s=`link:${((g=i.pathname)==null?void 0:g.slice(0,30))||""}`;else if(i.tagName==="INPUT"||i.tagName==="TEXTAREA"){const k=i;s=`input:${k.name||k.type||((w=k.placeholder)==null?void 0:w.slice(0,15))||""}`}else if(i.id)s=`#${i.id}`;else{const k=(D=(y=(N=i.className)==null?void 0:N.split)==null?void 0:y.call(N," "))==null?void 0:D[0];s=k?`.${k.slice(0,20)}`:((j=i.tagName)==null?void 0:j.toLowerCase())||"unknown"}uo("click",s)};"requestIdleCallback"in window?window.requestIdleCallback(o,{timeout:100}):setTimeout(o,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),uo("shortcut",n.join("+"))}},{capture:!0,passive:!0}),window.addEventListener("popstate",()=>{uo("navigate",location.pathname)}),window.addEventListener("hashchange",()=>{uo("navigate",location.hash)})}function Ej(){const e=window.fetch;window.fetch=async function(t,n){const i=Date.now();try{const o=await e.call(this,t,n);if(!o.ok){const s=typeof t=="string"?t:t.url,r=Date.now()-i,l=Fn(s).slice(0,300);fn.push({time:Date.now(),url:l,method:(n==null?void 0:n.method)||"GET",status:o.status,statusText:o.statusText,duration:r}),fn.length>Iu&&fn.shift()}return o}catch(o){const s=typeof t=="string"?t:t.url,r=Date.now()-i,l=Fn(s).slice(0,300);throw fn.push({time:Date.now(),url:l,method:(n==null?void 0:n.method)||"GET",error:o.message,duration:r}),fn.length>Iu&&fn.shift(),o}}}function jj(){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,o=(n=t.tagName)==null?void 0:n.toLowerCase();uo("resource_error",o,i==null?void 0:i.slice(0,100));const s={id:`resource-error-${Date.now()}`,timestamp:Date.now(),type:"error",error:{message:`Resource load failed: ${o||"unknown"}`,type:"resourceError"},memory:At(),userAgent:navigator.userAgent,url:location.href,customData:ha({resourceUrl:ln(i?Fn(i):void 0),eventTarget:Fp(t)})};Xt(s)}},{capture:!0})}function Dj(){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 o="",s;for(let l=0;l<Math.min(i.length,5);l++){const u=i[l];if(typeof u=="string")o+=u+" ";else if(typeof u=="number"||typeof u=="boolean")o+=String(u)+" ";else if(u instanceof Error)o+=`Error: ${u.message} `,s=u.stack;else if(u&&typeof u=="object")try{const d=Object.keys(u).slice(0,5).map(p=>{const f=u[p];return`${p}:${typeof f=="string"?f.slice(0,20):typeof f}`}).join(",");o+=`{${d}} `}catch{o+=`[${((r=u.constructor)==null?void 0:r.name)||"Object"}] `}}ri.push({time:Date.now(),message:o.trim().slice(0,500),stack:s}),ri.length>oj&&ri.shift()},0)}}function Hp(){return{userActions:[...si],consoleErrors:[...ri],networkErrors:[...fn],memory:At(),pageStats:Li(),fps:ii}}function Sj(){typeof window>"u"||(window.__memoryLog={getMemory:()=>{const e=At();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:lj,diagnose:()=>{const e=At(),t=Li();return t.imageCount>50&&console.warn("图片较多,考虑懒加载"),t.domNodeCount>5e3&&console.warn("DOM 节点较多"),{memory:e,pageStats:t}},snapshot:()=>{const e={id:`manual-${Date.now()}`,timestamp:Date.now(),type:"periodic",memory:At(),pageStats:Li(),userAgent:navigator.userAgent,url:location.href};Xt(e)},getDiagnostics:Hp,getActions:()=>si,getNetworkErrors:()=>fn,getConsoleErrors:()=>ri})}function Cj(){if(Au)return;Au=!0,gj(),xj(),bj(),Nj(),wj(),yj(),vj(),kj(),Ej(),jj(),Dj(),Sj();const e=fj();e&&(e.customData={...e.customData,recovered:!0,recoveredAt:Date.now()},Xt(e),hj())}function ga(e,t){try{const n=_j(e,t),i=JSON.stringify(n,null,2),o=new Blob([i],{type:"application/json"}),s=URL.createObjectURL(o),r=new Date().toISOString().replace(/[:.]/g,"-").slice(0,19),l=document.createElement("a");l.href=s,l.download=`opentu-error-log-${r}.json`,l.style.display="none",document.body.appendChild(l),l.click(),setTimeout(()=>{document.body.removeChild(l),URL.revokeObjectURL(s)},100)}catch(n){console.error("[ErrorLogExporter] Failed to export:",n)}}function _j(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:Bt.getState(),diagnostics:Hp(),unifiedLogs:wx.getMemoryLogs()};return e&&(n.currentError={message:e.message,stack:e.stack,componentStack:(t==null?void 0:t.componentStack)??void 0}),n}const Pj="aitu:lazy-chunk-retry",Vj="_lazy_chunk_retry",Tj="_t",Uj=[/Failed to fetch dynamically imported module/i,/Importing a module script failed/i,/Loading chunk [\w-]+ failed/i,/ChunkLoadError/i];function Ij(){var e;return typeof document>"u"?"unknown":((e=document.querySelector('meta[name="app-version"]'))==null?void 0:e.getAttribute("content"))||"unknown"}function Wp(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(`
|
|
40
|
+
`)}return String(e??"")}function qj(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 Aj(e){const t=Wp(e);return Uj.some(n=>n.test(t))}function Mj(e){if(typeof window>"u"||typeof sessionStorage>"u"||!Aj(e))return!1;const t=Wp(e),n=`${Pj}:${Ij()}:${qj(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(Vj,"1"),i.searchParams.set(Tj,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 Rj extends m.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=Mj(t);this.setState({errorInfo:n,recoveringFromChunkError:i}),!i&&console.error("[ErrorBoundary] React render error:",t,n)}render(){var t,n,i,o,s,r;return this.state.hasError?this.state.recoveringFromChunkError?a.jsxDEV(As,{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:()=>ga(this.state.error,this.state.errorInfo),onSafeModeReload:ba,onGoToDebug:qs},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:153,columnNumber:9},this):a.jsxDEV(As,{variant:"error",errorMessage:((o=this.state.error)==null?void 0:o.message)||"未知错误",errorStack:(s=this.state.error)==null?void 0:s.stack,componentStack:((r=this.state.errorInfo)==null?void 0:r.componentStack)??void 0,onExportLog:()=>ga(this.state.error,this.state.errorInfo),onSafeModeReload:ba,onGoToDebug:qs},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:170,columnNumber:7},this):this.props.children}}function ba(){try{localStorage.setItem("aitu_safe_mode","true")}catch{}window.location.reload()}function qs(){const e="/sw-debug.html";window.location.href=e}const zj={crash:{iconBg:"#FFF3E0",iconStroke:"#F57C00",iconPath:a.jsxDEV(a.Fragment,{children:[a.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),a.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),a.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:a.jsxDEV(a.Fragment,{children:[a.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),a.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),a.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:"页面遇到了意外错误,可能是画布数据异常或浏览器内存不足。"}},As=e=>{const{variant:t,crashCount:n,memoryInfo:i,onIgnore:o,title:s,description:r,errorMessage:l,errorStack:u,componentStack:c,onExportLog:d,onSafeModeReload:p,onGoToDebug:f}=e,[h,x]=yn.useState(!1),b=zj[t],g=s||b.defaultTitle,w=r||b.defaultDesc;return a.jsxDEV("div",{style:xt.overlay,children:a.jsxDEV("div",{style:xt.card,children:[a.jsxDEV("div",{style:{...xt.iconWrap,backgroundColor:b.iconBg},children:a.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),a.jsxDEV("h2",{style:xt.title,children:g},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&&a.jsxDEV("p",{style:xt.desc,children:["页面已连续 ",n," 次未能正常加载,可能是因为:",a.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:290,columnNumber:13},void 0),"• 画布元素过多导致内存不足",a.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:291,columnNumber:13},void 0),"• 浏览器内存限制",a.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:292,columnNumber:13},void 0),a.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"&&w&&a.jsxDEV("p",{style:xt.desc,children:w},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:299,columnNumber:11},void 0),i&&a.jsxDEV(Lj,{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"&&l&&a.jsxDEV("div",{style:xt.errorBox,children:[a.jsxDEV("div",{style:xt.errorMsg,children:l},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:308,columnNumber:13},void 0),(u||c)&&a.jsxDEV("button",{onClick:()=>x(N=>!N),style:xt.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&&a.jsxDEV("pre",{style:xt.errorDetail,children:[u,c&&`
|
|
41
|
+
|
|
42
|
+
Component Stack:${c}`]},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),a.jsxDEV("div",{style:xt.btnRow,children:[t==="crash"&&o&&a.jsxDEV(ns,{label:"继续加载",onClick:o,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&&a.jsxDEV(ns,{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),a.jsxDEV(ns,{label:"安全模式",onClick:p,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),a.jsxDEV("div",{style:xt.divider},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:339,columnNumber:9},void 0),a.jsxDEV("div",{style:xt.helpSection,children:a.jsxDEV("div",{style:xt.helpRow,children:[a.jsxDEV("img",{src:"https://nav.ourzhishi.top/api/dynamic-image/qr-code",alt:"企业微信二维码",style:xt.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),a.jsxDEV("div",{style:xt.helpText,children:[a.jsxDEV("p",{style:xt.helpTitle,children:"需要帮助?"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:350,columnNumber:15},void 0),a.jsxDEV("p",{style:xt.helpDesc,children:"扫码联系客服,或前往调试页面导出完整日志与备份数据"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:351,columnNumber:15},void 0),a.jsxDEV(ns,{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)},Lj=({info:e})=>{const t=e.percent>75?"#E53935":e.percent>50?"#FB8C00":"#43A047";return a.jsxDEV("div",{style:xt.memoryBox,children:[a.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),a.jsxDEV("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[a.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),a.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),a.jsxDEV("div",{style:{height:4,backgroundColor:"#e0e0e0",borderRadius:2,marginTop:8,overflow:"hidden"},children:a.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)},ns=({label:e,onClick:t,bg:n,bgHover:i,color:o,small:s})=>{const[r,l]=yn.useState(!1),u=s?{...xt.btnSmall,backgroundColor:r?i:n,color:o}:{...xt.btn,backgroundColor:r?i:n,color:o};return a.jsxDEV("button",{onClick:t,onMouseOver:()=>l(!0),onMouseOut:()=>l(!1),style:u,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:392,columnNumber:5},void 0)},xt={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}},Oj=500,xa="board",pl="aitu_board_close_snapshot_v1";let Ir=!1;function Fj(){if(!(typeof window>"u"))return window.__OPENTU_BOOT__}function Lu(){return new URLSearchParams(window.location.search).get(xa)}function Ou(e,t=!1){const n=new URL(window.location.href);e?n.searchParams.set(xa,e):n.searchParams.delete(xa),t?window.history.replaceState({boardId:e},"",n.toString()):window.history.pushState({boardId:e},"",n.toString())}function Bj(e){try{localStorage.setItem(pl,JSON.stringify(e))}catch(t){console.warn("[App] Failed to save board close snapshot:",t)}}function $p(){try{const e=localStorage.getItem(pl);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 is(e){try{const t=$p();if(!t)return;(!e||t.boardId===e)&&localStorage.removeItem(pl)}catch(t){console.warn("[App] Failed to clear board close snapshot:",t)}}function Hj(){const[e,t]=m.useState(!0),[n,i]=m.useState(!1),o=m.useRef(!1),[s,r]=m.useState(!1),[l,u]=m.useState(null),[c,d]=m.useState({children:[]}),[p,f]=m.useState(null),h=m.useRef(null),x=m.useRef(),b=m.useRef(null),g=m.useRef(null),w=m.useRef(!1),N=m.useRef(null),y=m.useRef(!1),D=m.useRef(!1),j=m.useRef(!1);D1(p),m.useEffect(()=>{h.current=p},[p]);const k=m.useCallback((T,_,P=Date.now())=>{x.current=_.viewport,b.current={boardId:T,children:_.children,viewport:_.viewport,theme:_.theme,updatedAt:P}},[]),E=m.useCallback(T=>{const _=b.current,P=h.current;if(!_||!P||_.boardId!==P||!j.current)return;Bj({..._,updatedAt:Date.now()}),dn.getInstance().saveCurrentBoard({children:_.children,viewport:_.viewport,theme:_.theme}).catch(Q=>{console.warn(`[App] Failed to flush board on ${T}:`,Q)})},[]);m.useEffect(()=>{const T=Fj();T&&(s||l||!e)&&T.markReady()},[l,e,s]),m.useEffect(()=>{s||l||e||Ip(["offline-static-assets"])},[l,e,s]),m.useEffect(()=>{(async()=>{if(Bt.shouldShowSafeModePrompt()&&!Bt.isSafeMode()){r(!0),t(!1);return}if(Ir){const _=dn.getInstance();t(!1),await _.waitForInitialization();const P=_.getState().currentBoardId;if(P&&_.getBoardMetadata(P)){const A=await _.switchBoard(P),Q={children:A.elements||[],viewport:A.viewport,theme:A.theme};k(A.id,Q,A.updatedAt),j.current=!1,d(Q)}t(!1),Bt.markLoadingComplete();return}Ir=!0;try{const _=dn.getInstance();if(t(!1),await _.initialize(),await Mp()||await C1(),Bt.isSafeMode()){const ue=_.getAllBoards().find(ne=>ne.name.startsWith("安全模式")&&(!ne.elements||ne.elements.length===0));if(ue)await _.switchBoard(ue.id),f(ue.id);else{const ne=new Date().toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"),ge=await _.createBoard({name:`安全模式 ${ne}`,elements:[]});ge&&(await _.switchBoard(ge.id),f(ge.id))}const Y={children:[]},ae=(ue==null?void 0:ue.id)||h.current||"safe-mode";k(ae,Y,Date.now()),d(Y),o.current=!0,i(!0),t(!1),Bt.markLoadingComplete(),Bt.disableSafeMode(),setTimeout(()=>{se.warning({content:"当前处于安全模式,已创建空白画布。可从侧边栏切换到其他画布。",duration:8e3,closeBtn:!0})},500);return}let A=null;const Q=Lu(),Ee=_.getState().currentBoardId;let V=null;if(Q&&_.getBoardMetadata(Q)?V=Q:Ee&&_.getBoardMetadata(Ee)&&(V=Ee),V)A=await _.switchBoard(V);else if(_.hasBoards()){const $=_.getTree(),ue=Gp($);ue&&(A=await _.switchBoard(ue.id))}else{const $=await _.createBoard({name:"我的画板1",elements:[]});$&&(A=await _.switchBoard($.id))}if(A&&(Ou(A.id,!0),f(A.id),_.persistCurrentBoardId(A.id),j.current=!1),A){const $=$p();let ue={children:A.elements||[],viewport:A.viewport,theme:A.theme};if($&&$.boardId===A.id&&$.updatedAt>A.updatedAt){ue={children:$.children,viewport:$.viewport,theme:$.theme},A={...A,...ue,updatedAt:$.updatedAt};const Y=A.id;_.saveBoard(Y,ue).then(()=>{j.current=!1,is(Y)}).catch(ae=>{console.warn("[App] Failed to rehydrate board from close snapshot:",ae)}),se.warning({content:"检测到上次关闭前的未落盘画布,已自动恢复",duration:5e3,closeBtn:!0})}else $&&$.boardId&&!_.getBoardMetadata($.boardId)&&is($.boardId);k(A.id,ue,A.updatedAt),j.current=!1,d(ue),qr(ue.children).then(Y=>{if(Y!==ue.children){const ae={...ue,children:Y};k(A.id,ae,Date.now()),d(ae)}}).catch(Y=>{console.error("[App] Video URL recovery failed:",Y)})}}catch(_){console.error("[App] Initialization failed:",_),u(_ instanceof Error?_:new Error(String(_)))}finally{o.current=!0,i(!0),t(!1),Bt.markLoadingComplete()}})()},[k]);const I=m.useCallback(async(T,_=!1)=>{try{_||(Ou(T.id),dn.getInstance().persistCurrentBoardId(T.id)),f(T.id),D.current=!1,j.current=!1;const A={children:await qr(T.elements||[]),viewport:T.viewport,theme:T.theme};k(T.id,A,T.updatedAt),d(A),setTimeout(()=>{N.current&&(Mo(N.current),Xu(N.current),Ro(N.current))},0)}catch(P){console.error("[App] Board switch failed:",P),se.error({content:`切换画板失败: ${P instanceof Error?P.message:"未知错误"}`,duration:5e3,closeBtn:!0})}},[k]);m.useEffect(()=>{const T=async()=>{if(!w.current){w.current=!0;try{const _=Lu();if(_&&_!==p){const P=dn.getInstance(),A=await P.switchBoard(_);A&&(await I(A,!0),P.persistCurrentBoardId(A.id))}}catch(_){console.error("[App] Failed to handle browser navigation:",_)}finally{w.current=!1}}};return window.addEventListener("popstate",T),()=>{window.removeEventListener("popstate",T)}},[p,I]);const q=m.useCallback(async()=>{y.current=!0;try{const T=dn.getInstance();let _=T.getCurrentBoard();if(!_){const A=T.getState().currentBoardId;if(!A){console.warn("[App] handleTabSyncNeeded: no current board ID");return}if(!T.getBoardMetadata(A)){console.warn("[App] handleTabSyncNeeded: board not found",A);return}try{_=await T.switchBoard(A)}catch(Q){console.error("[App] handleTabSyncNeeded: failed to load board",Q);return}}const P=await T.reloadBoard(_.id);if(P){const Q={children:await qr(P.elements||[]),viewport:P.viewport,theme:P.theme};k(P.id,Q,P.updatedAt),j.current=!1,d(Q)}}catch(T){console.error("[App] Failed to sync board data:",T),So()}finally{setTimeout(()=>{y.current=!1},100)}},[k]),W=m.useCallback(T=>{if(d(T),x.current=T.viewport,!o.current||y.current)return;D.current=!0,j.current=!0;const _=dn.getInstance(),P=_.getCurrentBoard();if(!P){console.warn("[App] handleBoardChange: board not fully loaded, skipping save");return}k(P.id,T),_.saveCurrentBoard(T).then(()=>{j.current=!1,is(P.id),Up(P.id)}).catch(A=>{console.error("[App] Failed to save board:",A)})},[k]),U=m.useCallback(T=>{x.current=T;const _=b.current;_&&(b.current={..._,viewport:T,updatedAt:Date.now()}),!y.current&&(j.current=!0,g.current&&clearTimeout(g.current),g.current=setTimeout(()=>{if(y.current)return;const P=dn.getInstance(),A=P.getCurrentBoard();A&&P.saveCurrentBoard({children:A.elements,viewport:T,theme:A.theme}).then(()=>{j.current=!1,is(A.id)}).catch(Q=>{console.error("[App] Failed to save viewport:",Q)})},Oj))},[k]);m.useEffect(()=>{const T=Q=>{if(g.current&&(clearTimeout(g.current),g.current=null),y.current)return;const V=dn.getInstance().getCurrentBoard(),$=b.current,ue=x.current,Y=h.current;V&&Y&&(!$||$.boardId!==Y)&&k(V.id,{children:V.elements,viewport:ue??V.viewport,theme:V.theme},Date.now()),!(Q==="visibilitychange"&&!D.current)&&E(Q)},_=()=>{T("beforeunload")},P=()=>{document.visibilityState==="hidden"&&T("visibilitychange")},A=()=>{T("pagehide")};return window.addEventListener("beforeunload",_),window.addEventListener("pagehide",A),document.addEventListener("visibilitychange",P),()=>{window.removeEventListener("beforeunload",_),window.removeEventListener("pagehide",A),document.removeEventListener("visibilitychange",P),g.current&&clearTimeout(g.current)}},[E,k]);const M=m.useCallback(T=>{r(!1),T?Bt.enableSafeMode():Bt.clearCrashState(),t(!0),Ir=!1,setTimeout(()=>{So()},100)},[]);return s?a.jsxDEV(As,{variant:"crash",crashCount:Bt.getCrashCount(),memoryInfo:Bt.getMemoryInfo(),onIgnore:()=>M(!1),onSafeModeReload:()=>M(!0),onGoToDebug:qs},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:873,columnNumber:7},this):l?a.jsxDEV(As,{variant:"error",title:"应用初始化失败",description:"无法加载画板数据,可能是存储损坏或浏览器限制。",errorMessage:l.message,errorStack:l.stack,onExportLog:()=>ga(l),onSafeModeReload:ba,onGoToDebug:qs},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:887,columnNumber:7},this):e?a.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:902,columnNumber:7},this):a.jsxDEV("div",{style:{height:"100vh"},children:a.jsxDEV(y1,{value:c.children,viewport:c.viewport,theme:c.theme,onChange:W,onViewportChange:U,onBoardSwitch:I,onTabSyncNeeded:q,isDataReady:n,currentBoardId:p,afterInit:T=>{N.current=T,window.__drawnix__web__console=_=>{Wj(T,_)}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:917,columnNumber:7},this)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:916,columnNumber:5},this)}const Wj=(e,t)=>{const n=z.getBoardContainer(e).closest(".drawnix");let i=n.querySelector(".drawnix-console");i||(i=document.createElement("div"),i.classList.add("drawnix-console"),n.append(i));const o=document.createElement("div");o.innerHTML=t,i.append(o)};async function qr(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 o=n.substring(i+1),s=o.indexOf("#",1),l=`/__aitu_cache__/video/${s>0?o.substring(0,s):o}.mp4`;return{...t,url:l}}}return t})}function Gp(e){for(const t of e){if(t.type==="board")return t.data;if(t.type==="folder"&&t.children){const n=Gp(t.children);if(n)return n}}return null}const Fu=window.addEventListener.bind(window),$j=window.removeEventListener.bind(window);let fl=null;window.addEventListener=function(e,t,n){if(e==="unload"){console.warn("[Permissions Policy] Blocked unload event listener");return}return e==="beforeunload"&&(fl=t),Fu.call(window,e,t,n)};window.removeEventListener=function(e,t,n){return e==="beforeunload"&&(fl=null),$j.call(window,e,t,n)};window.__checkBeforeUnload=()=>!!fl;let Bu=!1;const Yp="sw-debug-enabled";function Gj(){try{return sessionStorage.getItem(Yp)==="true"}catch{return!1}}function Hu(e){try{sessionStorage.setItem(Yp,e===!0?"true":"false")}catch{}}let to=Gj();const ti=[];let qi=null,zn=0;const Ms=15e3,Yj=200,no={error:console.error,warn:console.warn,info:console.info,log:console.log,debug:console.debug};function Zn(e,t,n){if(t.includes("[SW]")||t.includes("[SWTaskQueue]")||t.includes("[SWChannelManager]")||t.includes("[SWChannelClient]")||t.includes("[ServiceWorkerChannel]")||t.includes("Invalid message structure")||t.includes("posthog.com")||n&&n.includes("posthog"))return;const i=()=>{pt.isInitialized()&&pt.reportConsoleLog(e,[{message:t,stack:n||"",source:window.location.href}],Date.now()).catch(()=>{})},o=()=>{for(;ti.length>0&&pt.isInitialized();){const r=ti.shift();r&&pt.reportConsoleLog(r.level,[{message:r.message,stack:r.stack||"",source:window.location.href}],Date.now()).catch(()=>{})}},s=()=>{const r=Date.now();qi||r<zn||(qi=pt.initialize().then(l=>{if(!l){zn=Date.now()+Ms;return}zn=0,o()}).catch(()=>{zn=Date.now()+Ms}).finally(()=>{qi=null}))};pt.isInitialized()?i():(ti.length>=Yj&&ti.shift(),ti.push({level:e,message:t,stack:n}),s())}function io(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 Wu(e){for(const t of e)if(t instanceof Error&&t.stack)return t.stack;return""}function Xj(){if(Bu||!("serviceWorker"in navigator))return;Bu=!0;const e=()=>{if(pt.isInitialized())pt.subscribeToEvent("debug:statusChanged",t=>{const n=t,i=n.enabled??n.debugModeEnabled??!1;to=i,Hu(i)}),pt.getDebugStatus().then(t=>{const n=t.enabled??t.debugModeEnabled??!1;to=n,Hu(n)});else{const t=Date.now();!qi&&t>=zn&&(qi=pt.initialize().then(n=>{if(!n){zn=Date.now()+Ms;return}for(zn=0;ti.length>0&&pt.isInitialized();){const i=ti.shift();i&&pt.reportConsoleLog(i.level,[{message:i.message,stack:i.stack||"",source:window.location.href}],Date.now()).catch(()=>{})}}).catch(()=>{zn=Date.now()+Ms}).finally(()=>{qi=null})),setTimeout(e,500)}};e(),console.error=function(...t){no.error.apply(console,t),Zn("error",io(t),Wu(t))},console.warn=function(...t){no.warn.apply(console,t),Zn("warn",io(t),Wu(t))},console.log=function(...t){no.log.apply(console,t),to&&Zn("log",io(t),"")},console.info=function(...t){no.info.apply(console,t),to&&Zn("info",io(t),"")},console.debug=function(...t){no.debug.apply(console,t),to&&Zn("debug",io(t),"")},window.addEventListener("error",t=>{var i;const n=`${t.message} at ${t.filename}:${t.lineno}:${t.colno}`;Zn("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)}`,o=n instanceof Error&&n.stack||"";Zn("error",i,o)})}const Kj=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),Zj=typeof window<"u"?new URLSearchParams(window.location.search).get("sw"):null,Xp=Zj==="0",Kp=typeof navigator<"u"&&"serviceWorker"in navigator,Zp=Kp&&!Xp;Zp&&Xj();Bt.markLoadingStart();Bt.checkUrlSafeMode();Cj();const Jj="0.6.80",Qj=yx(),$u="_lazy_chunk_retry",eD="_t";function tD(){if(typeof window>"u")return;const e=new URL(window.location.href);if(e.searchParams.has($u)){e.searchParams.delete($u),e.searchParams.delete(eD);try{window.history.replaceState(window.history.state,"",e.toString())}catch{}}}tD();function Jp(e){return e==="jsdelivr"||e==="unpkg"||e==="local"}function nD(){return window.__OPENTU_BOOT__||null}function Si(e){var t,n;(n=(t=nD())==null?void 0:t.setProgress)==null||n.call(t,e==null?void 0:e.progress,e)}function iD(){const e=window.__OPENTU_CDN__||window.__AITU_CDN__;return!e||!Jp(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 Gu(e){const t=iD();if(!t)return;const n={type:"SW_CDN_SET_PREFERENCE",...t,version:Jj},i=new Set,o=[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 o)s&&i.add(s);i.forEach(s=>{s.postMessage(n)})}function Yu(e){Gu(e);const t=window.__OPENTU_CDN_API__||window.__AITU_CDN_API__;t!=null&&t.selectBestCDN&&t.selectBestCDN().then(n=>{n&&Jp(n.cdn)&&(window.__OPENTU_CDN__=n),Gu(e)}).catch(n=>{console.warn("[Main] Failed to sync CDN preference to Service Worker:",n)})}function oD(){navigator.serviceWorker.getRegistration().then(e=>e==null?void 0:e.unregister()).catch(e=>{console.warn("[Main] Disabled service worker cleanup failed:",e)})}function os(e,t={}){if(typeof window>"u")return;const{delay:n=0,timeout:i=2e3}=t,o=()=>{const r=window.requestIdleCallback;if(typeof r=="function"){r(e,{timeout:i});return}window.setTimeout(e,Math.min(i,500))},s=()=>{if(n>0){window.setTimeout(o,n);return}o()};window.requestAnimationFrame(()=>{window.requestAnimationFrame(s)})}Si({tip:"正在初始化启动服务...",source:"phase",progress:12});if(typeof window<"u"){R1();const e=()=>{if(window.posthog){Ex(Qj),M1();return}setTimeout(e,300)};os(e,{delay:0,timeout:1e3}),os(()=>{zp().catch(n=>{console.warn("[Main] Database cleanup failed:",n)}),B1.runMigration().then(()=>Promise.all([vx(),kx.initializeAsync()])).catch(n=>{console.warn("[Main] Storage migration/init failed:",n)})},{delay:400,timeout:2500}),os(()=>{Jl.start(),Jl.logMemoryStatus()},{delay:5e3,timeout:2500});const t=()=>{window.posthog?V1():setTimeout(t,500)};os(t,{delay:1500,timeout:3e3})}Kp&&Xp&&oD();if(Zp){const e=Kj;let t=null,n=!1,i=!1,o=null,s=null;const r=b=>{o!==b&&(o=b,window.dispatchEvent(new CustomEvent("sw-update-available",{detail:{version:b}})))},l=b=>{if(b.pendingVersion&&b.pendingVersion!==b.committedVersion&&(b.upgradeState==="ready"||b.upgradeState==="committing")){r(b.pendingVersion);return}b.pendingVersion||(o=null)},u=b=>{const g=b||t||(s==null?void 0:s.waiting)||navigator.serviceWorker.controller||(s==null?void 0:s.active)||null;g&&g.postMessage({type:"GET_VERSION_STATE"})},c=b=>{navigator.serviceWorker.controller||!(b!=null&&b.active)||b.active.postMessage({type:"CLAIM_CLIENTS"})},d=b=>{!n||i||(i=!0,setTimeout(()=>{So()},1e3))},p=async()=>{const b=[t,s==null?void 0:s.waiting];try{const g=await navigator.serviceWorker.getRegistration()||null;g&&(s=g,b.push(g.waiting))}catch(g){console.warn("[Main] Failed to get live service worker registration:",g)}try{const g=await navigator.serviceWorker.ready;b.push(g.waiting)}catch(g){console.warn("[Main] Failed to inspect ready service worker registration:",g)}for(const g of b)if(!(!g||g.state==="redundant")&&g!==navigator.serviceWorker.controller)return t=g,g;return null},f=window.__OPENTU_SW_REGISTRATION_PROMISE__||navigator.serviceWorker.register("./sw.js").catch(b=>(console.warn("[Main] Service worker registration failed:",b),null));window.__OPENTU_SW_REGISTRATION_PROMISE__=f,f.then(b=>{if(!b){Si({tip:"离线加速未启用,正在直接启动工作台...",source:"phase",progress:70});return}s=b,c(b),navigator.serviceWorker.ready.then(c).catch(g=>{console.warn("[Main] Service worker ready check failed:",g)}),Si({tip:"启动缓存服务已连接,正在准备资源清单...",source:"phase",progress:72}),Yu(b),e?(b.update().catch(g=>console.warn("Forced update check failed:",g)),b.waiting&&b.waiting.postMessage({type:"FORCE_UPGRADE"})):b.waiting&&navigator.serviceWorker.controller&&(t=b.waiting,u(b.waiting)),b.addEventListener("updatefound",()=>{const g=b.installing;g&&g.addEventListener("statechange",()=>{g.state==="installed"&&navigator.serviceWorker.controller&&(t=g,e?g.postMessage({type:"FORCE_UPGRADE"}):(u(g),setTimeout(()=>u(g),5e3)))})}),b.active&&!b.installing&&!b.waiting&&Si({tip:"启动缓存服务已就绪,正在恢复工作台状态...",source:"phase",progress:78}),u(),setInterval(()=>{b.update().catch(g=>{console.warn("Update check failed:",g)})},300*1e3),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&u()})}).catch(b=>{Si({tip:"离线加速未启用,正在直接启动工作台...",source:"phase",progress:70})});const h=()=>{if(!pt.isInitialized()){setTimeout(h,500);return}pt.setEventHandlers({onSWUpdated:b=>{u()},onSWNewVersionReady:b=>{r(b.version),u()},onSWActivated:b=>{if(n){d();return}t=null,u()}}),s!=null&&s.waiting&&navigator.serviceWorker.controller&&(t=s.waiting,u(s.waiting))};setTimeout(h,1e3);const x=async()=>{if(!pt.isInitialized()){setTimeout(x,500);return}pt.registerVideoThumbnailHandler(async(b,g)=>{try{const{generateVideoThumbnailFromBlob:w}=await qe(async()=>{const{generateVideoThumbnailFromBlob:E}=await import("./tool-windows-BEnZdJqF.js").then(I=>I.pa);return{generateVideoThumbnailFromBlob:E}},__vite__mapDeps([0]),import.meta.url);let N=null;const D=await(await caches.open("drawnix-images")).match(b);if(D&&(N=await D.blob()),!N&&(b.startsWith("http://")||b.startsWith("https://")))try{const E=await fetch(b);E.ok&&(N=await E.blob())}catch{N=null}if(!N)return{error:"Video not found in cache or network"};const j=await w(N,g||400);return{thumbnailUrl:await new Promise((E,I)=>{const q=new FileReader;q.onloadend=()=>E(q.result),q.onerror=I,q.readAsDataURL(j)})}}catch(w){return{error:w instanceof Error?w.message:String(w)}}})};x(),navigator.serviceWorker.addEventListener("message",b=>{var g;((g=b.data)==null?void 0:g.type)==="SW_VERSION_STATE"&&l(b.data)}),navigator.serviceWorker.addEventListener("controllerchange",()=>{Yu(s),u(),d()}),window.addEventListener("user-confirmed-upgrade",()=>{(async()=>{const b=await p();if(!b){console.warn("[Main] No waiting service worker available for COMMIT_UPGRADE"),u(),s==null||s.update().catch(g=>{console.warn("[Main] Update check after missing waiting worker failed:",g)});return}n=!0,b.postMessage({type:"COMMIT_UPGRADE"})})()})}Si({tip:"正在挂载工作台界面...",source:"phase",progress:88});const sD=Rs.createRoot(document.getElementById("root"));sD.render(a.jsxDEV(m.StrictMode,{children:a.jsxDEV(Rj,{children:a.jsxDEV(Hj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:754,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:753,columnNumber:5},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:752,columnNumber:3},void 0));const cD=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{mN as B,gN as W,kp as a,aD as b,ft as c,zy as d,lD as e,cD as f,y0 as i,Ry as m,oE as u,bw as w};
|