aitu-app 0.6.71 → 0.6.72
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-BxZowfRq.js → CanvasAudioPlayer-C4pqPNnG.js} +1 -1
- package/assets/{ChatDrawer-BGK5A7Rf.js → ChatDrawer-9XDg_01o.js} +2 -2
- package/assets/{ChatMessagesArea-CuPP1K-H.js → ChatMessagesArea-MrSlzXfd.js} +2 -2
- package/assets/{DeferredAIInputBar-jZEz3pqU.js → DeferredAIInputBar-rlzvr9H5.js} +2 -2
- package/assets/{DrawnixDeferredFeatures-DRggo5l2.js → DrawnixDeferredFeatures-6BN6HsXW.js} +1 -1
- package/assets/{KnowledgeBaseContent-C1xFBdX9.js → KnowledgeBaseContent-DJnJZh6i.js} +3 -3
- package/assets/{MVCreator-D3rDT4pv.js → MVCreator-BVXIEkng.js} +1 -1
- package/assets/{ModelBenchmarkWorkbench-DrHfXMOC.js → ModelBenchmarkWorkbench-DV6h0r-O.js} +1 -1
- package/assets/{ModelDropdown-CErXiJel.js → ModelDropdown-iU3c5Z_N.js} +1 -1
- package/assets/{MusicAnalyzer-DNVsOB04.js → MusicAnalyzer-D9rIcu4x.js} +1 -1
- package/assets/{MusicAnalyzer-q0eIxKqJ.js → MusicAnalyzer-ghn7zFIt.js} +1 -1
- package/assets/{ResizableDivider-XFJLfAwc.js → ResizableDivider-C6Z5EQJ_.js} +1 -1
- package/assets/{TaskQueuePanel-zmK3r_Sy.js → TaskQueuePanel-NAYUh8lN.js} +1 -1
- package/assets/{VideoAnalyzer-IiMRyspL.js → VideoAnalyzer-VjFOqpZU.js} +1 -1
- package/assets/{ai-generation-preferences-service-DheS7yb2.js → ai-generation-preferences-service-BuQhsO32.js} +1 -1
- package/assets/{arc-AunKa7Be.js → arc-CCorIawr.js} +1 -1
- package/assets/{arc-CxS0h6XE.js → arc-OsezXT79.js} +1 -1
- package/assets/{batch-image-generation-BTo-Hh2f.js → batch-image-generation-BM3dGGpo.js} +1 -1
- package/assets/{blockDiagram-38ab4fdb-BOwTTQqR.js → blockDiagram-38ab4fdb-DUFnN1Ei.js} +1 -1
- package/assets/{blockDiagram-38ab4fdb-B9BxtRcE.js → blockDiagram-38ab4fdb-DWGlT04d.js} +1 -1
- package/assets/{browser-CK6xKVG3.js → browser-BlDolpRT.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-l1vuEfws.js → c4Diagram-3d4e48cf-D4FViX2F.js} +1 -1
- package/assets/{c4Diagram-3d4e48cf-B7o3_NGM.js → c4Diagram-3d4e48cf-D6HbI2bj.js} +1 -1
- package/assets/{canvas-insertion-6qsJRfKC.js → canvas-insertion-BZAyMFnR.js} +1 -1
- package/assets/channel-DHHHwu9d.js +1 -0
- package/assets/channel-DbaY041U.js +1 -0
- package/assets/{classDiagram-70f12bd4-BxdM_ZFq.js → classDiagram-70f12bd4-BJiXLgfR.js} +1 -1
- package/assets/{classDiagram-70f12bd4-C5PI5m3K.js → classDiagram-70f12bd4-P5-MZZHm.js} +1 -1
- package/assets/{classDiagram-v2-f2320105-D2WGupMF.js → classDiagram-v2-f2320105-BckUVKrQ.js} +1 -1
- package/assets/{classDiagram-v2-f2320105-CRLBLeIT.js → classDiagram-v2-f2320105-BlMVbuKh.js} +1 -1
- package/assets/{clipper-D9tfnKC1.js → clipper-BkGBD2Ma.js} +1 -1
- package/assets/clone-B9352qPQ.js +1 -0
- package/assets/{createText-2e5e7dd3-B8mv8HgF.js → createText-2e5e7dd3-BLEzJgyq.js} +1 -1
- package/assets/{createText-2e5e7dd3-CWQBEaI7.js → createText-2e5e7dd3-_0asARpb.js} +1 -1
- package/assets/{edges-e0da2a9e-CW611sej.js → edges-e0da2a9e-BvNEeRN2.js} +1 -1
- package/assets/{edges-e0da2a9e-CiSIgajX.js → edges-e0da2a9e-Su9We6Oe.js} +1 -1
- package/assets/{erDiagram-9861fffd-B60hPtiy.js → erDiagram-9861fffd-B-TnweRY.js} +1 -1
- package/assets/{erDiagram-9861fffd-Bq-lh9QY.js → erDiagram-9861fffd-ChF_4VVA.js} +1 -1
- package/assets/{flowDb-956e92f1-Bz6i22S1.js → flowDb-956e92f1-BklqjU-F.js} +1 -1
- package/assets/{flowDb-956e92f1-CVT7Imrs.js → flowDb-956e92f1-CpHT5-s-.js} +1 -1
- package/assets/{flowDiagram-66a62f08-e10-kMn8.js → flowDiagram-66a62f08-BW0lq2iO.js} +1 -1
- package/assets/{flowDiagram-66a62f08-CRiWeGax.js → flowDiagram-66a62f08-CM-ufoRy.js} +1 -1
- package/assets/flowDiagram-v2-96b9c2cf-CXd4cAmC.js +1 -0
- package/assets/flowDiagram-v2-96b9c2cf-WaERXGrn.js +1 -0
- package/assets/{flowchart-elk-definition-4a651766-CBnyqo_M.js → flowchart-elk-definition-4a651766-BHXMQM8F.js} +1 -1
- package/assets/{flowchart-elk-definition-4a651766-DKGRcOAx.js → flowchart-elk-definition-4a651766-BNNCQnvT.js} +1 -1
- package/assets/{ganttDiagram-c361ad54-mhde3_of.js → ganttDiagram-c361ad54-BMznP5js.js} +1 -1
- package/assets/{ganttDiagram-c361ad54-D19CTSCa.js → ganttDiagram-c361ad54-Cn_w4SQu.js} +1 -1
- package/assets/{gitGraphDiagram-72cf32ee-BTRFRUeL.js → gitGraphDiagram-72cf32ee-CcqxYifa.js} +1 -1
- package/assets/{gitGraphDiagram-72cf32ee-BPmLlXIw.js → gitGraphDiagram-72cf32ee-HNSkomMm.js} +1 -1
- package/assets/{graph-DIg8rY1E.js → graph-2O9SKVX0.js} +1 -1
- package/assets/{graph-B1ieZuJT.js → graph-D24U5F9b.js} +1 -1
- package/assets/{index-3862675e-CAW4PMyX.js → index-3862675e-kPXP30L6.js} +1 -1
- package/assets/{index-3862675e-BFVjQZrI.js → index-3862675e-wtTLssRq.js} +1 -1
- package/assets/{index-o4MkHJtB.js → index-7Yy5taJZ.js} +1 -1
- package/assets/{index-D0pBPzvH.js → index-9lQYp-F3.js} +1 -1
- package/assets/{index-cFN27HDb.js → index-BCZHTjCF.js} +1 -1
- package/assets/{index-zNq6WR1M.js → index-BELf2XK1.js} +1 -1
- package/assets/{index-CAmlVCIf.js → index-BJiKHIU5.js} +1 -1
- package/assets/{index-sZWFW1o8.js → index-BfJrMjzE.js} +1 -1
- package/assets/{index-Dszi0QdY.js → index-BgTSdPjs.js} +1 -1
- package/assets/{index-A3FZLzj3.js → index-BnBH1zrC.js} +1 -1
- package/assets/{index-Byg7B0_b.js → index-BnuBC6-d.js} +1 -1
- package/assets/{index-DLYbtrPe.js → index-BvjfhvDI.js} +1 -1
- package/assets/{index-BVd4ZdJq.js → index-C66Oc7kp.js} +1 -1
- package/assets/{index-B5h3vVYf.js → index-C8BMcDy_.js} +1 -1
- package/assets/{index-O1yzWoAv.js → index-CD0uXSEJ.js} +1 -1
- package/assets/{index-Dsn0zIY5.js → index-CDI7kJJr.js} +1 -1
- package/assets/{index-Cxhc7DpJ.js → index-CHYWTMjD.js} +1 -1
- package/assets/{index-BnOaEPvW.js → index-CIR5517N.js} +1 -1
- package/assets/{index-DsQmr35F.js → index-CSh9cI-m.js} +1 -1
- package/assets/{index-sq_FndL-.js → index-Cdm1s3zH.js} +1 -1
- package/assets/{index-Cs7bP6R-.js → index-Ce_zjJd0.js} +1 -1
- package/assets/{index-DXVriIPX.js → index-Cf-6nhZx.js} +3 -3
- package/assets/{index-DCn6TEiD.js → index-CszzzzlU.js} +3 -3
- package/assets/{index-LfJyON59.js → index-D057A5AW.js} +1 -1
- package/assets/{index-BwMXzWpM.js → index-D0nupp1L.js} +1 -1
- package/assets/{index-BYfSEJIM.js → index-D5ni4ZMT.js} +2 -2
- package/assets/{index-BRccxBUA.js → index-DKZkufa4.js} +1 -1
- package/assets/{index-WDtJA1fY.js → index-Duz4qBVw.js} +1 -1
- package/assets/{index-Dtw21-1a.js → index-DxlqWfyM.js} +1 -1
- package/assets/{index-DUi1yiuN.js → index-DzSyiFE3.js} +1 -1
- package/assets/{index-Cgt6J1qz.js → index-ESZ1UttR.js} +1 -1
- package/assets/{index-CysE-UTz.js → index-oiyTGfuR.js} +1 -1
- package/assets/{index-u7vr_P_s.js → index-q9Vudaup.js} +1 -1
- package/assets/{index-C3HRC3b5.js → index-te4VWNfY.js} +1 -1
- package/assets/{infoDiagram-f8f76790-Dmv1egEN.js → infoDiagram-f8f76790-CQWNDm6d.js} +1 -1
- package/assets/{infoDiagram-f8f76790-C9LQ9jd5.js → infoDiagram-f8f76790-D4GOLEO3.js} +1 -1
- package/assets/{journeyDiagram-49397b02-8CnesQvB.js → journeyDiagram-49397b02-2ir0vod-.js} +1 -1
- package/assets/{journeyDiagram-49397b02-LV1k8ByA.js → journeyDiagram-49397b02-BIR-UXT9.js} +1 -1
- package/assets/{layout-3nkAix10.js → layout-CYzCl7YP.js} +1 -1
- package/assets/{layout-BW8C-Xw4.js → layout-Cjlcubqs.js} +1 -1
- package/assets/{line-DDWqaSCo.js → line-B6TatEZ8.js} +1 -1
- package/assets/{line-U1joDaO1.js → line-qfwz7WRO.js} +1 -1
- package/assets/{linear-D8frs5RT.js → linear-GuBoF0OP.js} +1 -1
- package/assets/{linear-3k1Xl9ve.js → linear-ssbBIRl5.js} +1 -1
- package/assets/{main-hjIskWwz.js → main-B6qbLicq.js} +8 -8
- package/assets/{mermaid.core-BlObAm7H.js → mermaid.core-DOJyKoHR.js} +3 -3
- package/assets/{mindmap-definition-fc14e90a-go-0aDNp.js → mindmap-definition-fc14e90a-BN4fqdNM.js} +1 -1
- package/assets/{mindmap-definition-fc14e90a-DRTqIBGi.js → mindmap-definition-fc14e90a-qPR072_x.js} +1 -1
- package/assets/{model-benchmark-launcher-Dhybe1Ps.js → model-benchmark-launcher-CUPxnAZr.js} +1 -1
- package/assets/{model-benchmark-service-BlgtfJ25.js → model-benchmark-service-C3taFBGp.js} +1 -1
- package/assets/{model-selection-C9DVcl8A.js → model-selection-Da4xzp54.js} +1 -1
- package/assets/{photo-wall-splitter-BSRMMrLk.js → photo-wall-splitter-DN8Hms8E.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-OgnCNkdZ.js → pieDiagram-8a3498a8-6gjBTuiK.js} +1 -1
- package/assets/{pieDiagram-8a3498a8-DsU04FDA.js → pieDiagram-8a3498a8-B_B-oMBm.js} +1 -1
- package/assets/{quadrantDiagram-120e2f19-CAKix819.js → quadrantDiagram-120e2f19-CGIYsVeK.js} +1 -1
- package/assets/{quadrantDiagram-120e2f19-B-qdqCsc.js → quadrantDiagram-120e2f19-DQlP5fyR.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-BFiAHorQ.js → requirementDiagram-deff3bca-BhadGJas.js} +1 -1
- package/assets/{requirementDiagram-deff3bca-DCvuwhP4.js → requirementDiagram-deff3bca-CZrZs6WH.js} +1 -1
- package/assets/{sankeyDiagram-04a897e0-CW0FxDIH.js → sankeyDiagram-04a897e0-CYbsYQIC.js} +1 -1
- package/assets/{sankeyDiagram-04a897e0-DynB_N5t.js → sankeyDiagram-04a897e0-DLMtKqV7.js} +1 -1
- package/assets/{sequenceDiagram-704730f1-C3kzvK6i.js → sequenceDiagram-704730f1-CnMi1-vV.js} +1 -1
- package/assets/{sequenceDiagram-704730f1-iLPkDpBi.js → sequenceDiagram-704730f1-D5_Tbq78.js} +1 -1
- package/assets/{settings-dialog-CcLfJFr_.js → settings-dialog-BVG80WDy.js} +1 -1
- package/assets/{skill-dsl-parser-DrFEUbDY.js → skill-dsl-parser-C252Shcy.js} +1 -1
- package/assets/{stateDiagram-587899a1-fLTDppNO.js → stateDiagram-587899a1-BStwFkNh.js} +1 -1
- package/assets/{stateDiagram-587899a1-DbwUO5DV.js → stateDiagram-587899a1-DYdXq59h.js} +1 -1
- package/assets/{stateDiagram-v2-d93cdb3a-DzR2PasK.js → stateDiagram-v2-d93cdb3a--y2o64Ew.js} +1 -1
- package/assets/{stateDiagram-v2-d93cdb3a-aZJTxhK8.js → stateDiagram-v2-d93cdb3a-IdPKDi36.js} +1 -1
- package/assets/{styles-6aaf32cf-C_VEAaHX.js → styles-6aaf32cf-4WFibVVF.js} +1 -1
- package/assets/{styles-6aaf32cf-C5JfMGYv.js → styles-6aaf32cf-Cm63YNOe.js} +1 -1
- package/assets/{styles-9a916d00-BYSJ54L0.js → styles-9a916d00-B49ieQxk.js} +1 -1
- package/assets/{styles-9a916d00-C3gY_lFJ.js → styles-9a916d00-D3LwlgPD.js} +1 -1
- package/assets/{styles-c10674c1-ANPmaoE9.js → styles-c10674c1-DJhcCs3x.js} +1 -1
- package/assets/{styles-c10674c1-DXxQEnvg.js → styles-c10674c1-cbwmIB4x.js} +1 -1
- package/assets/{svgDrawCommon-08f97a94-c2dOJxSO.js → svgDrawCommon-08f97a94-C5ek8a-c.js} +1 -1
- package/assets/{svgDrawCommon-08f97a94-BVjA84-b.js → svgDrawCommon-08f97a94-c77e0hhb.js} +1 -1
- package/assets/{timeline-definition-85554ec2-6QIdYNFS.js → timeline-definition-85554ec2-7ZMOJP7x.js} +1 -1
- package/assets/{timeline-definition-85554ec2-BST8-Dw9.js → timeline-definition-85554ec2-BIhOlyVe.js} +1 -1
- package/assets/{tool-windows-Bd5iqcJh.js → tool-windows-BTXOQvEU.js} +10 -10
- package/assets/{ttd-dialog-Chz4Dc5q.js → ttd-dialog-CMzq1PeM.js} +4 -4
- package/assets/{use-runtime-models-NPMCne8X.js → use-runtime-models-C_YMetmY.js} +1 -1
- package/assets/{useCharacters-Yt_yZunw.js → useCharacters-6F7LfBD2.js} +1 -1
- package/assets/{useWorkflowSubmission-DNz90nBd.js → useWorkflowSubmission-B-0oH5Q6.js} +2 -2
- package/assets/{video-analyze-cG43kQp7.js → video-analyze-gJnLIFVx.js} +1 -1
- package/assets/{video-generation-CY32Hcvy.js → video-generation-D0RudPQ8.js} +1 -1
- package/assets/{video-recovery-service-DqRVY2GL.js → video-recovery-service-CRZVLLWA.js} +1 -1
- package/assets/{workflow-generation-utils-CqQgPCFy.js → workflow-generation-utils-5aqKk8qR.js} +2 -2
- package/assets/{workflow-submission-service-C55NPNuz.js → workflow-submission-service-C9Ph3Y2w.js} +1 -1
- package/assets/{xychartDiagram-e933f94c-DY34Q03N.js → xychartDiagram-e933f94c-9bdjNrcG.js} +1 -1
- package/assets/{xychartDiagram-e933f94c-DD9JQg-b.js → xychartDiagram-e933f94c-D6a2PcvQ.js} +1 -1
- package/changelog.json +15 -0
- package/idle-prefetch-manifest.json +302 -302
- package/manifest.json +3 -3
- package/package.json +1 -1
- package/precache-manifest.json +6 -6
- package/sw.js +5 -5
- package/version.json +6 -3
- package/assets/channel-Dx9ePqRL.js +0 -1
- package/assets/channel-YfSSwDXj.js +0 -1
- package/assets/clone-DSiLnhfM.js +0 -1
- package/assets/flowDiagram-v2-96b9c2cf-Bqr3L3y4.js +0 -1
- package/assets/flowDiagram-v2-96b9c2cf-gCWf76DS.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./tool-windows-Cos6lOhr.css","./MediaLibrarySidebar-CNCXXhfY.css","./useCharacters-BJLEgDAP.css","./character-Bo9jcTNu.css","./use-runtime-models-BgWWl4Ng.css","./index-I7GscWS1.css","./ModelDropdown-CQTTHEI7.css","./ai-generation-preferences-service-CeFIqZqn.css","./prompt-optimize-dialog-DLdL2_a1.css","./DeferredAIInputBar-BmPgFhXr.css","./ChatDrawer-0jNvKIoI.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{r as p,B as eu,P as F,a as vb,h as Eb,s as tu,W as ha,t as Ot,b as Ft,g as Sb,d as $a,i as Ep,c as Qo,u as sr,e as kb,f as Tb,k as Db,l as fe,Z as _b,m as nu,n as iu,I as ou,o as su,p as jb,q as ru,K as au,v as Pb,w as Xa,x as Ka,y as l,z as Y,H as Cb,A as Ab,C as Mb,D as Ib,E as Pr,T as lu,R as En,F as cu,G as Cr,J as rr,M as Vb,L as Ub,N as Bi,O as Rb,Q as qb,S as Sp,U as Be,V as Ji,X as uu,Y as Bb,$ as Lb,a0 as Ob,a1 as Fb,a2 as Hb,a3 as zb,a4 as Gb,a5 as Wb,a6 as $b,a7 as Xb,a8 as Kb,a9 as Yb,aa as Zb,ab as Qb,ac as Jb,ad as e0,ae as ga,af as Es,ag as t0,ah as n0,ai as ge,aj as i0,ak as o0,al as re,am as s0,an as du,ao as mu,ap as r0,aq as pu,ar as a0,as as In,at as Ni,au as l0,av as c0,aw as Ol,ax as u0,ay as d0,az as kp,aA as Jo,aB as es,aC as Ya,aD as nn,aE as m0,aF as p0,aG as f0,aH as Ar,aI as Fn,aJ as Hn,aK as zn,aL as cn,aM as Tp,aN as ao,aO as Fl,aP as ue,aQ as Hl,aR as bo,aS as xo,aT as Pt,aU as h0,aV as Ti,aW as Dp,aX as _p,aY as Jn,aZ as kt,a_ as Ct,a$ as Ee,b0 as eo,b1 as Vn,b2 as at,b3 as lt,b4 as ne,b5 as ct,b6 as Di,b7 as At,b8 as Se,b9 as _n,ba as Mr,bb as ei,bc as jp,bd as Pp,be as Cp,bf as g0,bg as b0,bh as Ap,bi as Mp,bj as zs,bk as Ir,bl as fu,bm as Vr,bn as Sn,bo as jt,_ as Me,bp as Ip,bq as x0,br as N0,bs as y0,bt as Ur,bu as Rr,bv as Vp,bw as zl,bx as ii,by as Up,bz as ts,bA as w0,bB as v0,bC as Je,bD as qr,bE as Lt,bF as E0,bG as S0,bH as k0,bI as vi,bJ as H,bK as $e,bL as Gt,bM as T0,bN as to,bO as D0,bP as Li,bQ as _0,bR as j0,bS as Gl,bT as hu,bU as P0,bV as Tt,bW as C0,bX as A0,bY as M0,bZ as I0,b_ as V0,b$ as U0,c0 as R0,c1 as q0,c2 as rn,c3 as B0,c4 as L0,c5 as O0,c6 as F0,c7 as H0,c8 as z0,c9 as G0,ca as no,cb as W0,cc as $0,cd as X0,ce as K0,cf as vn,cg as Y0,ch as Z0,ci as Q0,cj as J0,ck as ex,cl as tx,cm as nx,cn as gu,co as bu,cp as Ss,cq as ix,cr as ox,cs as ks,ct as Rp,cu as sx,cv as rx,cw as ax,cx as lx,cy as cx,cz as Wl,cA as $l,cB as qp,cC as Xl,cD as wn,cE as Kl,cF as Kn,cG as xu,cH as Ts,cI as Bo,cJ as ns,cK as ux,cL as dx,cM as Nu,cN as mx,cO as px,cP as fx,cQ as hx,cR as gx,cS as bx,cT as yu,cU as Bp,cV as xx,cW as wu,cX as ln,cY as Br,cZ as Lr,c_ as Nx,c$ as yx,d0 as wx,d1 as vx,d2 as Ex,d3 as Sx,d4 as kx,d5 as Tx,d6 as Dx,d7 as oi,d8 as _i,d9 as _x,da as vu,db as Za,dc as Lp,dd as Op,de as jx,df as Px,dg as Cx,dh as Ax,di as ar,dj as Yl,dk as Fp,dl as Mx,dm as Ix,dn as Hp,dp as Vx,dq as zp,dr as Ux,ds as Or,dt as Gp,du as Rx,dv as qx,dw as Zl,dx as Bx,dy as Lx,dz as Wp,dA as Gs,dB as Ox,dC as Fx,dD as Hx,dE as zx,dF as Gx,dG as Wx,dH as $x,dI as Xx,dJ as hi,dK as $p,dL as Fr,dM as en,dN as Xp,dO as Kp,dP as Kx,dQ as Yp,dR as Ql,dS as Zp,dT as Qp,dU as Yx,dV as Zx,dW as Qx,dX as Jx,dY as eN,dZ as Qa,d_ as tN,d$ as nN,e0 as Jl,e1 as Bn,e2 as tt,e3 as rt,e4 as No,e5 as iN,e6 as oN,e7 as sN,e8 as Jp,e9 as mt,ea as St,eb as De,ec,ed as ef,ee as tf,ef as nf,eg as of,eh as sf,ei as rf,ej as af,ek as kn,el as rN,em as aN,en as lN,eo as vt,ep as is,eq as ji,er as cN,es as tc,et as Hr,eu as lf,ev as nc,ew as cf,ex as uf,ey as df,ez as mf,eA as ic,eB as oc,eC as sc,eD as lr,eE as pf,eF as ff,eG as hf,eH as uN,eI as gf,eJ as dN,eK as mN,eL as pN,eM as fN,eN as hN,eO as gN,eP as bN,eQ as zr,eR as Eu,eS as xN,eT as NN,eU as yN,eV as bf,eW as yn,eX as rc,eY as wN,eZ as Rt,e_ as ac,e$ as xf,f0 as Nf,f1 as yf,f2 as Gr,f3 as lc,f4 as cc,f5 as Ja,f6 as si,f7 as Su,f8 as wf,f9 as vf,fa as Ef,fb as Sf,fc as Mi,fd as yo,fe as Ii,ff as Wr,fg as gs,fh as ui,fi as ku,fj as el,fk as vN,fl as EN,fm as kf,fn as SN,fo as kN,fp as TN,fq as Tf,fr as Df,fs as DN,ft as $r,fu as Tu,fv as _N,fw as jN,fx as Du,fy as _u,fz as PN,fA as CN,fB as AN,fC as MN,fD as ju,fE as IN,fF as cr,fG as _f,fH as jf,fI as VN,fJ as UN,fK as RN,fL as qN,fM as BN,fN as LN,fO as ON,fP as FN,fQ as ba,fR as Yt,fS as HN,fT as zN,fU as GN,fV as Ds,fW as Oi,fX as Fi,fY as WN,fZ as $N,f_ as XN,f$ as KN,g0 as Pf,g1 as YN,g2 as ZN,g3 as QN,g4 as JN,g5 as ey,g6 as uc,g7 as os,g8 as ss,g9 as Cf,ga as ty,gb as pt,gc as ur,gd as Af,ge as Mf,gf as If,gg as ny,gh as iy,gi as Pu,gj as oy,gk as Ei,gl as sy,gm as ry,gn as ay,go as ly,gp as cy,gq as uy,gr as dy,gs as my,gt as py,gu as fy,gv as hy,gw as gy,gx as by,gy as xy,gz as Ny,gA as yy,gB as wy,gC as vy,gD as Ey,gE as Sy,gF as Cu,gG as xa,gH as Na,gI as ky,gJ as Vf,gK as Ty,gL as tl,gM as Nn,gN as Uf,gO as Rf,gP as Xr,gQ as bt,gR as Un,gS as Dy,gT as _y,gU as Hi,gV as jy,gW as Py,gX as Au,gY as Cy}from"./tool-windows-
|
|
2
|
+
import{r as p,B as eu,P as F,a as vb,h as Eb,s as tu,W as ha,t as Ot,b as Ft,g as Sb,d as $a,i as Ep,c as Qo,u as sr,e as kb,f as Tb,k as Db,l as fe,Z as _b,m as nu,n as iu,I as ou,o as su,p as jb,q as ru,K as au,v as Pb,w as Xa,x as Ka,y as l,z as Y,H as Cb,A as Ab,C as Mb,D as Ib,E as Pr,T as lu,R as En,F as cu,G as Cr,J as rr,M as Vb,L as Ub,N as Bi,O as Rb,Q as qb,S as Sp,U as Be,V as Ji,X as uu,Y as Bb,$ as Lb,a0 as Ob,a1 as Fb,a2 as Hb,a3 as zb,a4 as Gb,a5 as Wb,a6 as $b,a7 as Xb,a8 as Kb,a9 as Yb,aa as Zb,ab as Qb,ac as Jb,ad as e0,ae as ga,af as Es,ag as t0,ah as n0,ai as ge,aj as i0,ak as o0,al as re,am as s0,an as du,ao as mu,ap as r0,aq as pu,ar as a0,as as In,at as Ni,au as l0,av as c0,aw as Ol,ax as u0,ay as d0,az as kp,aA as Jo,aB as es,aC as Ya,aD as nn,aE as m0,aF as p0,aG as f0,aH as Ar,aI as Fn,aJ as Hn,aK as zn,aL as cn,aM as Tp,aN as ao,aO as Fl,aP as ue,aQ as Hl,aR as bo,aS as xo,aT as Pt,aU as h0,aV as Ti,aW as Dp,aX as _p,aY as Jn,aZ as kt,a_ as Ct,a$ as Ee,b0 as eo,b1 as Vn,b2 as at,b3 as lt,b4 as ne,b5 as ct,b6 as Di,b7 as At,b8 as Se,b9 as _n,ba as Mr,bb as ei,bc as jp,bd as Pp,be as Cp,bf as g0,bg as b0,bh as Ap,bi as Mp,bj as zs,bk as Ir,bl as fu,bm as Vr,bn as Sn,bo as jt,_ as Me,bp as Ip,bq as x0,br as N0,bs as y0,bt as Ur,bu as Rr,bv as Vp,bw as zl,bx as ii,by as Up,bz as ts,bA as w0,bB as v0,bC as Je,bD as qr,bE as Lt,bF as E0,bG as S0,bH as k0,bI as vi,bJ as H,bK as $e,bL as Gt,bM as T0,bN as to,bO as D0,bP as Li,bQ as _0,bR as j0,bS as Gl,bT as hu,bU as P0,bV as Tt,bW as C0,bX as A0,bY as M0,bZ as I0,b_ as V0,b$ as U0,c0 as R0,c1 as q0,c2 as rn,c3 as B0,c4 as L0,c5 as O0,c6 as F0,c7 as H0,c8 as z0,c9 as G0,ca as no,cb as W0,cc as $0,cd as X0,ce as K0,cf as vn,cg as Y0,ch as Z0,ci as Q0,cj as J0,ck as ex,cl as tx,cm as nx,cn as gu,co as bu,cp as Ss,cq as ix,cr as ox,cs as ks,ct as Rp,cu as sx,cv as rx,cw as ax,cx as lx,cy as cx,cz as Wl,cA as $l,cB as qp,cC as Xl,cD as wn,cE as Kl,cF as Kn,cG as xu,cH as Ts,cI as Bo,cJ as ns,cK as ux,cL as dx,cM as Nu,cN as mx,cO as px,cP as fx,cQ as hx,cR as gx,cS as bx,cT as yu,cU as Bp,cV as xx,cW as wu,cX as ln,cY as Br,cZ as Lr,c_ as Nx,c$ as yx,d0 as wx,d1 as vx,d2 as Ex,d3 as Sx,d4 as kx,d5 as Tx,d6 as Dx,d7 as oi,d8 as _i,d9 as _x,da as vu,db as Za,dc as Lp,dd as Op,de as jx,df as Px,dg as Cx,dh as Ax,di as ar,dj as Yl,dk as Fp,dl as Mx,dm as Ix,dn as Hp,dp as Vx,dq as zp,dr as Ux,ds as Or,dt as Gp,du as Rx,dv as qx,dw as Zl,dx as Bx,dy as Lx,dz as Wp,dA as Gs,dB as Ox,dC as Fx,dD as Hx,dE as zx,dF as Gx,dG as Wx,dH as $x,dI as Xx,dJ as hi,dK as $p,dL as Fr,dM as en,dN as Xp,dO as Kp,dP as Kx,dQ as Yp,dR as Ql,dS as Zp,dT as Qp,dU as Yx,dV as Zx,dW as Qx,dX as Jx,dY as eN,dZ as Qa,d_ as tN,d$ as nN,e0 as Jl,e1 as Bn,e2 as tt,e3 as rt,e4 as No,e5 as iN,e6 as oN,e7 as sN,e8 as Jp,e9 as mt,ea as St,eb as De,ec,ed as ef,ee as tf,ef as nf,eg as of,eh as sf,ei as rf,ej as af,ek as kn,el as rN,em as aN,en as lN,eo as vt,ep as is,eq as ji,er as cN,es as tc,et as Hr,eu as lf,ev as nc,ew as cf,ex as uf,ey as df,ez as mf,eA as ic,eB as oc,eC as sc,eD as lr,eE as pf,eF as ff,eG as hf,eH as uN,eI as gf,eJ as dN,eK as mN,eL as pN,eM as fN,eN as hN,eO as gN,eP as bN,eQ as zr,eR as Eu,eS as xN,eT as NN,eU as yN,eV as bf,eW as yn,eX as rc,eY as wN,eZ as Rt,e_ as ac,e$ as xf,f0 as Nf,f1 as yf,f2 as Gr,f3 as lc,f4 as cc,f5 as Ja,f6 as si,f7 as Su,f8 as wf,f9 as vf,fa as Ef,fb as Sf,fc as Mi,fd as yo,fe as Ii,ff as Wr,fg as gs,fh as ui,fi as ku,fj as el,fk as vN,fl as EN,fm as kf,fn as SN,fo as kN,fp as TN,fq as Tf,fr as Df,fs as DN,ft as $r,fu as Tu,fv as _N,fw as jN,fx as Du,fy as _u,fz as PN,fA as CN,fB as AN,fC as MN,fD as ju,fE as IN,fF as cr,fG as _f,fH as jf,fI as VN,fJ as UN,fK as RN,fL as qN,fM as BN,fN as LN,fO as ON,fP as FN,fQ as ba,fR as Yt,fS as HN,fT as zN,fU as GN,fV as Ds,fW as Oi,fX as Fi,fY as WN,fZ as $N,f_ as XN,f$ as KN,g0 as Pf,g1 as YN,g2 as ZN,g3 as QN,g4 as JN,g5 as ey,g6 as uc,g7 as os,g8 as ss,g9 as Cf,ga as ty,gb as pt,gc as ur,gd as Af,ge as Mf,gf as If,gg as ny,gh as iy,gi as Pu,gj as oy,gk as Ei,gl as sy,gm as ry,gn as ay,go as ly,gp as cy,gq as uy,gr as dy,gs as my,gt as py,gu as fy,gv as hy,gw as gy,gx as by,gy as xy,gz as Ny,gA as yy,gB as wy,gC as vy,gD as Ey,gE as Sy,gF as Cu,gG as xa,gH as Na,gI as ky,gJ as Vf,gK as Ty,gL as tl,gM as Nn,gN as Uf,gO as Rf,gP as Xr,gQ as bt,gR as Un,gS as Dy,gT as _y,gU as Hi,gV as jy,gW as Py,gX as Au,gY as Cy}from"./tool-windows-BTXOQvEU.js";const ke=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__,Xe=globalThis,Si="10.33.0";function Kr(){return Yr(Xe),Xe}function Yr(e){const t=e.__SENTRY__=e.__SENTRY__||{};return t.version=t.version||Si,t[Si]=t[Si]||{}}function wo(e,t,n=Xe){const i=n.__SENTRY__=n.__SENTRY__||{},o=i[Si]=i[Si]||{};return o[e]||(o[e]=t())}const Ay=["debug","info","warn","error","log","assert","trace"],My="Sentry Logger ",dr={};function vo(e){if(!("console"in Xe))return e();const t=Xe.console,n={},i=Object.keys(dr);i.forEach(o=>{const s=dr[o];n[o]=t[o],t[o]=s});try{return e()}finally{i.forEach(o=>{t[o]=n[o]})}}function Iy(){mc().enabled=!0}function Vy(){mc().enabled=!1}function qf(){return mc().enabled}function Uy(...e){dc("log",...e)}function Ry(...e){dc("warn",...e)}function qy(...e){dc("error",...e)}function dc(e,...t){ke&&qf()&&vo(()=>{Xe.console[e](`${My}[${e}]:`,...t)})}function mc(){return ke?wo("loggerSettings",()=>({enabled:!1})):{enabled:!1}}const me={enable:Iy,disable:Vy,isEnabled:qf,log:Uy,warn:Ry,error:qy},Bf=50,Pi="?",Mu=/\(error: (.*)\)/,Iu=/captureMessage|captureException/;function Lf(...e){const t=e.sort((n,i)=>n[0]-i[0]).map(n=>n[1]);return(n,i=0,o=0)=>{const s=[],r=n.split(`
|
|
3
3
|
`);for(let a=i;a<r.length;a++){let c=r[a];c.length>1024&&(c=c.slice(0,1024));const u=Mu.test(c)?c.replace(Mu,"$1"):c;if(!u.match(/\S*Error: /)){for(const d of t){const m=d(u);if(m){s.push(m);break}}if(s.length>=Bf+o)break}}return Ly(s.slice(o))}}function By(e){return Array.isArray(e)?Lf(...e):e}function Ly(e){if(!e.length)return[];const t=Array.from(e);return/sentryWrapped/.test(_s(t).function||"")&&t.pop(),t.reverse(),Iu.test(_s(t).function||"")&&(t.pop(),Iu.test(_s(t).function||"")&&t.pop()),t.slice(0,Bf).map(n=>({...n,filename:n.filename||_s(t).filename,function:n.function||Pi}))}function _s(e){return e[e.length-1]||{}}const ya="<anonymous>";function ri(e){try{return!e||typeof e!="function"?ya:e.name||ya}catch{return ya}}function Vu(e){const t=e.exception;if(t){const n=[];try{return t.values.forEach(i=>{i.stacktrace.frames&&n.push(...i.stacktrace.frames)}),n}catch{return}}}function Of(e){return"__v_isVNode"in e&&e.__v_isVNode?"[VueVNode]":"[VueViewModel]"}const Ws={},Uu={};function Vi(e,t){Ws[e]=Ws[e]||[],Ws[e].push(t)}function Ui(e,t){if(!Uu[e]){Uu[e]=!0;try{t()}catch(n){ke&&me.error(`Error while instrumenting ${e}`,n)}}}function bn(e,t){const n=e&&Ws[e];if(n)for(const i of n)try{i(t)}catch(o){ke&&me.error(`Error while triggering instrumentation handler.
|
|
4
4
|
Type: ${e}
|
|
5
5
|
Name: ${ri(i)}
|
|
@@ -24,7 +24,7 @@ Url: ${pr(e)}`),!0}return!1}function g1(e,t){return t!=null&&t.length?bh(e).some
|
|
|
24
24
|
*/function xk(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ld(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,Hh(i.key),i)}}function Nk(e,t,n){return t&&Ld(e.prototype,t),n&&Ld(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function yk(e,t,n){return(t=Hh(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Od(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 Pc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Od(Object(n),!0).forEach(function(i){yk(e,i,n[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Od(Object(n)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})}return e}function wk(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 Hh(e){var t=wk(e,"string");return typeof t=="symbol"?t:t+""}function vl(e){"@babel/helpers - typeof";return vl=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},vl(e)}var Fd={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},vk='<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>',sa=typeof window<"u"&&typeof window.document<"u",On=sa?window:{},io=sa&&On.document.documentElement?"ontouchstart"in On.document.documentElement:!1,Cc=sa?"PointerEvent"in On:!1,Te="viewer",Js="move",zh="switch",Oo="zoom",Is="".concat(Te,"-active"),Ek="".concat(Te,"-close"),er="".concat(Te,"-fade"),El="".concat(Te,"-fixed"),Sk="".concat(Te,"-fullscreen"),Hd="".concat(Te,"-fullscreen-exit"),xi="".concat(Te,"-hide"),kk="".concat(Te,"-hide-md-down"),Tk="".concat(Te,"-hide-sm-down"),Dk="".concat(Te,"-hide-xs-down"),sn="".concat(Te,"-in"),$o="".concat(Te,"-invisible"),oo="".concat(Te,"-loading"),_k="".concat(Te,"-move"),zd="".concat(Te,"-open"),Gi="".concat(Te,"-show"),Nt="".concat(Te,"-transition"),po="click",Sl="dblclick",Gd="dragstart",Wd="focusin",$d="keydown",an="load",ki="error",jk=io?"touchend touchcancel":"mouseup",Pk=io?"touchmove":"mousemove",Ck=io?"touchstart":"mousedown",Xd=Cc?"pointerdown":Ck,Kd=Cc?"pointermove":Pk,Yd=Cc?"pointerup pointercancel":jk,Zd="resize",pn="transitionend",Qd="wheel",Jd="ready",em="show",tm="shown",nm="hide",im="hidden",om="view",cs="viewed",sm="move",rm="moved",am="rotate",lm="rotated",cm="scale",um="scaled",dm="zoom",mm="zoomed",pm="play",fm="stop",xr="".concat(Te,"Action"),Ac=/\s\s*/,Vs=["zoom-in","zoom-out","one-to-one","reset","prev","play","next","rotate-left","rotate-right","flip-horizontal","flip-vertical"];function us(e){return typeof e=="string"}var Ak=Number.isNaN||On.isNaN;function gt(e){return typeof e=="number"&&!Ak(e)}function Xi(e){return typeof e>"u"}function fo(e){return vl(e)==="object"&&e!==null}var Mk=Object.prototype.hasOwnProperty;function Ki(e){if(!fo(e))return!1;try{var t=e.constructor,n=t.prototype;return t&&n&&Mk.call(n,"isPrototypeOf")}catch{return!1}}function Ze(e){return typeof e=="function"}function nt(e,t){if(e&&Ze(t))if(Array.isArray(e)||gt(e.length)){var n=e.length,i;for(i=0;i<n&&t.call(e,e[i],i,e)!==!1;i+=1);}else fo(e)&&Object.keys(e).forEach(function(o){t.call(e,e[o],o,e)});return e}var Jt=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 fo(t)&&i.length>0&&i.forEach(function(s){fo(s)&&Object.keys(s).forEach(function(r){t[r]=s[r]})}),t},Ik=/^(?:width|height|left|top|marginLeft|marginTop)$/;function gn(e,t){var n=e.style;nt(t,function(i,o){Ik.test(o)&>(i)&&(i+="px"),n[o]=i})}function Vk(e){return us(e)?e.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">"):e}function $i(e,t){return!e||!t?!1:e.classList?e.classList.contains(t):e.className.indexOf(t)>-1}function ye(e,t){if(!(!e||!t)){if(gt(e.length)){nt(e,function(i){ye(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 Ge(e,t){if(!(!e||!t)){if(gt(e.length)){nt(e,function(n){Ge(n,t)});return}if(e.classList){e.classList.remove(t);return}e.className.indexOf(t)>=0&&(e.className=e.className.replace(t,""))}}function ds(e,t,n){if(t){if(gt(e.length)){nt(e,function(i){ds(i,t,n)});return}n?ye(e,t):Ge(e,t)}}var Uk=/([a-z\d])([A-Z])/g;function Mc(e){return e.replace(Uk,"$1-$2").toLowerCase()}function Yi(e,t){return fo(e[t])?e[t]:e.dataset?e.dataset[t]:e.getAttribute("data-".concat(Mc(t)))}function kl(e,t,n){fo(n)?e[t]=n:e.dataset?e.dataset[t]=n:e.setAttribute("data-".concat(Mc(t)),n)}var Gh=(function(){var e=!1;if(sa){var t=!1,n=function(){},i=Object.defineProperty({},"once",{get:function(){return e=!0,t},set:function(s){t=s}});On.addEventListener("test",n,i),On.removeEventListener("test",n,i)}return e})();function Qe(e,t,n){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},o=n;t.trim().split(Ac).forEach(function(s){if(!Gh){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 ve(e,t,n){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},o=n;t.trim().split(Ac).forEach(function(s){if(i.once&&!Gh){var r=e.listeners,a=r===void 0?{}:r;o=function(){delete a[s][n],e.removeEventListener(s,o,i);for(var u=arguments.length,d=new Array(u),m=0;m<u;m++)d[m]=arguments[m];n.apply(e,d)},a[s]||(a[s]={}),a[s][n]&&e.removeEventListener(s,a[s][n],i),a[s][n]=o,e.listeners=a}e.addEventListener(s,o,i)})}function wt(e,t,n,i){var o;return Ze(Event)&&Ze(CustomEvent)?o=new CustomEvent(t,Pc({bubbles:!0,cancelable:!0,detail:n},i)):(o=document.createEvent("CustomEvent"),o.initCustomEvent(t,!0,!0,n)),e.dispatchEvent(o)}function Rk(e){var t=e.getBoundingClientRect();return{left:t.left+(window.pageXOffset-document.documentElement.clientLeft),top:t.top+(window.pageYOffset-document.documentElement.clientTop)}}function tr(e){var t=e.rotate,n=e.scaleX,i=e.scaleY,o=e.translateX,s=e.translateY,r=[];gt(o)&&o!==0&&r.push("translateX(".concat(o,"px)")),gt(s)&&s!==0&&r.push("translateY(".concat(s,"px)")),gt(t)&&t!==0&&r.push("rotate(".concat(t,"deg)")),gt(n)&&n!==1&&r.push("scaleX(".concat(n,")")),gt(i)&&i!==1&&r.push("scaleY(".concat(i,")"));var a=r.length?r.join(" "):"none";return{WebkitTransform:a,msTransform:a,transform:a}}function qk(e){return us(e)?decodeURIComponent(e.replace(/^.*\//,"").replace(/[?&#].*$/,"")):""}var Ca=On.navigator&&/Version\/\d+(\.\d+)+?\s+Safari/i.test(On.navigator.userAgent);function Wh(e,t,n){var i=document.createElement("img");if(e.naturalWidth&&!Ca)return n(e.naturalWidth,e.naturalHeight),i;var o=document.body||document.documentElement;return i.onload=function(){n(i.width,i.height),Ca||o.removeChild(i)},nt(t.inheritedAttributes,function(s){var r=e.getAttribute(s);r!==null&&i.setAttribute(s,r)}),i.src=e.src,Ca||(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 Us(e){switch(e){case 2:return Dk;case 3:return Tk;case 4:return kk;default:return""}}function Bk(e){var t=Pc({},e),n=[];return nt(e,function(i,o){delete t[o],nt(t,function(s){var r=Math.abs(i.startX-s.startX),a=Math.abs(i.startY-s.startY),c=Math.abs(i.endX-s.endX),u=Math.abs(i.endY-s.endY),d=Math.sqrt(r*r+a*a),m=Math.sqrt(c*c+u*u),f=(m-d)/d;n.push(f)})}),n.sort(function(i,o){return Math.abs(i)<Math.abs(o)}),n[0]}function Rs(e,t){var n=e.pageX,i=e.pageY,o={endX:n,endY:i};return t?o:Pc({timeStamp:Date.now(),startX:n,startY:i},o)}function Lk(e){var t=0,n=0,i=0;return nt(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 Ok={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=Jt({},i)},renderViewer:function(){this.options.inline&&!this.fulled&&gn(this.viewer,this.viewerData)},initList:function(){var t=this,n=this.element,i=this.options,o=this.list,s=[];o.innerHTML="",nt(this.images,function(r,a){var c=r.src,u=r.alt||qk(c),d=t.getImageURL(r);if(c||d){var m=document.createElement("li"),f=document.createElement("img");nt(i.inheritedAttributes,function(h){var g=r.getAttribute(h);g!==null&&f.setAttribute(h,g)}),i.navbar&&(f.src=c||d),f.alt=u,f.setAttribute("data-original-url",d||c),m.setAttribute("data-index",a),m.setAttribute("data-viewer-action","view"),m.setAttribute("role","button"),i.keyboard&&m.setAttribute("tabindex",0),m.appendChild(f),o.appendChild(m),s.push(m)}}),this.items=s,nt(s,function(r){var a=r.firstElementChild,c,u;kl(a,"filled",!0),i.loading&&ye(r,oo),ve(a,an,c=function(m){Qe(a,ki,u),i.loading&&Ge(r,oo),t.loadImage(m)},{once:!0}),ve(a,ki,u=function(){Qe(a,an,c),i.loading&&Ge(r,oo)},{once:!0})}),i.transition&&ve(n,cs,function(){ye(o,Nt)},{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;gn(this.list,Jt({width:r*this.length-o},tr({translateX:(this.viewerData.width-s)/2-r*t})))}},resetList:function(){var t=this.list;t.innerHTML="",Ge(t,Nt),gn(t,tr({translateX:0}))},initImage:function(t){var n=this,i=this.options,o=this.image,s=this.viewerData,r=this.footer.offsetHeight,a=s.width,c=Math.max(s.height-r,r),u=this.imageData||{},d;this.imageInitializing={abort:function(){d.onload=null}},d=Wh(o,i,function(m,f){var h=m/f,g=Math.max(0,Math.min(1,i.initialCoverage)),x=a,b=c;n.imageInitializing=!1,c*h>a?b=a/h:x=c*h,g=gt(g)?g:.9,x=Math.min(x*g,m),b=Math.min(b*g,f);var y=(a-x)/2,N=(c-b)/2,w={left:y,top:N,x:y,y:N,width:x,height:b,oldRatio:1,ratio:x/m,aspectRatio:h,naturalWidth:m,naturalHeight:f},T=Jt({},w);i.rotatable&&(w.rotate=u.rotate||0,T.rotate=0),i.scalable&&(w.scaleX=u.scaleX||1,w.scaleY=u.scaleY||1,T.scaleX=1,T.scaleY=1),n.imageData=w,n.initialImageData=T,t&&t()})},renderImage:function(t){var n=this,i=this.image,o=this.imageData;if(gn(i,Jt({width:o.width,height:o.height,marginLeft:o.x,marginTop:o.y},tr(o))),t)if((this.viewing||this.moving||this.rotating||this.scaling||this.zooming)&&this.options.transition&&$i(i,Nt)){var s=function(){n.imageRendering=!1,t()};this.imageRendering={abort:function(){Qe(i,pn,s)}},ve(i,pn,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="")}},Fk={bind:function(){var t=this.options,n=this.viewer,i=this.canvas,o=this.element.ownerDocument;ve(n,po,this.onClick=this.click.bind(this)),ve(n,Gd,this.onDragStart=this.dragstart.bind(this)),ve(i,Xd,this.onPointerDown=this.pointerdown.bind(this)),ve(o,Kd,this.onPointerMove=this.pointermove.bind(this)),ve(o,Yd,this.onPointerUp=this.pointerup.bind(this)),ve(o,$d,this.onKeyDown=this.keydown.bind(this)),ve(window,Zd,this.onResize=this.resize.bind(this)),t.zoomable&&t.zoomOnWheel&&ve(n,Qd,this.onWheel=this.wheel.bind(this),{passive:!1,capture:!0}),t.toggleOnDblclick&&ve(i,Sl,this.onDblclick=this.dblclick.bind(this))},unbind:function(){var t=this.options,n=this.viewer,i=this.canvas,o=this.element.ownerDocument;Qe(n,po,this.onClick),Qe(n,Gd,this.onDragStart),Qe(i,Xd,this.onPointerDown),Qe(o,Kd,this.onPointerMove),Qe(o,Yd,this.onPointerUp),Qe(o,$d,this.onKeyDown),Qe(window,Zd,this.onResize),t.zoomable&&t.zoomOnWheel&&Qe(n,Qd,this.onWheel,{passive:!1,capture:!0}),t.toggleOnDblclick&&Qe(i,Sl,this.onDblclick)}},Hk={click:function(t){var n=this.options,i=this.imageData,o=t.target,s=Yi(o,xr);switch(!s&&o.localName==="img"&&o.parentElement.localName==="li"&&(o=o.parentElement,s=Yi(o,xr)),io&&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(Yi(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&&(io&&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;Ge(o,$o),i.loading&&Ge(this.canvas,oo),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(){ds(o,_k,i.movable),ds(o,Nt,i.transition),t.renderImage(function(){t.viewed=!0,t.viewing=!1,Ze(i.viewed)&&ve(n,cs,i.viewed,{once:!0}),wt(n,cs,{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=!!Yi(n,"filled");Wh(n,this.options,function(a,c){var u=a/c,d=o,m=s;s*u>o?r?d=s*u:m=o/u:r?m=o/u:d=s*u,gn(n,Jt({width:d,height:m},tr({translateX:(o-d)/2,translateY:(s-m)/2})))})},keydown:function(t){var n=this.options;if(n.keyboard){var i=t.keyCode||t.which||t.charCode;switch(i){case 13:this.viewer.contains(t.target)&&this.click(t);break}if(this.fulled)switch(i){case 27:this.played?this.stop():n.inline?this.fulled&&this.exit():this.hide();break;case 32:this.played&&this.stop();break;case 37:this.played&&this.playing?this.playing.prev():this.prev(n.loop);break;case 38:t.preventDefault(),this.zoom(n.zoomRatio,!0);break;case 39:this.played&&this.playing?this.playing.next():this.next(n.loop);break;case 40:t.preventDefault(),this.zoom(-n.zoomRatio,!0);break;case 48:case 49:t.ctrlKey&&(t.preventDefault(),this.toggle());break}}},dragstart:function(t){t.target.localName==="img"&&t.preventDefault()},pointerdown:function(t){var n=this.options,i=this.pointers,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")&&(gt(o)&&o!==1||gt(s)&&s!==0||t.ctrlKey))){t.preventDefault(),t.changedTouches?nt(t.changedTouches,function(a){i[a.identifier]=Rs(a)}):i[t.pointerId||0]=Rs(t);var r=n.movable?Js:!1;n.zoomOnTouch&&n.zoomable&&Object.keys(i).length>1?r=Oo:n.slideOnTouch&&(t.pointerType==="touch"||t.type==="touchstart")&&this.isSwitchable()&&(r=zh),n.transition&&(r===Js||r===Oo)&&Ge(this.image,Nt),this.action=r}},pointermove:function(t){var n=this.pointers,i=this.action;!this.viewed||!i||(t.preventDefault(),t.changedTouches?nt(t.changedTouches,function(o){Jt(n[o.identifier]||{},Rs(o,!0))}):Jt(n[t.pointerId||0]||{},Rs(t,!0)),this.change(t))},pointerup:function(t){var n=this,i=this.options,o=this.action,s=this.pointers,r;t.changedTouches?nt(t.changedTouches,function(a){r=s[a.identifier],delete s[a.identifier]}):(r=s[t.pointerId||0],delete s[t.pointerId||0]),o&&(t.preventDefault(),i.transition&&(o===Js||o===Oo)&&ye(this.image,Nt),this.action=!1,io&&o!==Oo&&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(){wt(n.image,Sl,{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(){wt(n.canvas,po,{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}nt(this.player.getElementsByTagName("img"),function(n){ve(n,an,t.loadImage.bind(t),{once:!0}),wt(n,an)})}},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)}}},zk={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(Ze(i.show)&&ve(n,em,i.show,{once:!0}),wt(n,em)===!1||!this.ready)return this;this.hiding&&this.transitioning.abort(),this.showing=!0,this.open();var o=this.viewer;if(Ge(o,xi),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(){Qe(o,pn,s),Ge(o,sn)}},ye(o,Nt),o.initialOffsetWidth=o.offsetWidth,ve(o,pn,s,{once:!0}),ye(o,sn)}else ye(o,sn),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(Ze(o.hide)&&ve(i,nm,o.hide,{once:!0}),wt(i,nm)===!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,a=function(){Ge(s,sn),t.hidden()};if(o.transition&&!n){var c=function(m){m&&m.target===s&&(Qe(s,pn,c),t.hidden())},u=function(){$i(s,Nt)?(ve(s,pn,c),Ge(s,sn)):a()};this.transitioning={abort:function(){t.viewed&&$i(r,Nt)?Qe(r,pn,u):$i(s,Nt)&&Qe(s,pn,c)}},this.viewed&&$i(r,Nt)?(ve(r,pn,u,{once:!0}),this.zoomTo(0,!1,null,null,!0)):u()}else a();return this},view:function(){var t=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.options.initialViewIndex;if(n=Number(n)||0,this.hiding||this.played||n<0||n>=this.length||this.viewed&&n===this.index)return this;if(!this.isShown)return this.index=n,this.show();this.viewing&&this.viewing.abort();var i=this.element,o=this.options,s=this.title,r=this.canvas,a=this.items[n],c=a.querySelector("img"),u=Yi(c,"originalUrl"),d=c.getAttribute("alt"),m=document.createElement("img");if(nt(o.inheritedAttributes,function(b){var y=c.getAttribute(b);y!==null&&m.setAttribute(b,y)}),m.src=u,m.alt=d,Ze(o.view)&&ve(i,om,o.view,{once:!0}),wt(i,om,{originalImage:this.images[n],index:n,image:m})===!1||!this.isShown||this.hiding||this.played)return this;var f=this.items[this.index];f&&(Ge(f,Is),f.removeAttribute("aria-selected")),ye(a,Is),a.setAttribute("aria-selected",!0),o.focus&&a.focus(),this.image=m,this.viewed=!1,this.index=n,this.imageData={},ye(m,$o),o.loading&&ye(r,oo),r.innerHTML="",r.appendChild(m),this.renderList(),s.innerHTML="";var h=function(){var y=t.imageData,N=Array.isArray(o.title)?o.title[1]:o.title;s.innerHTML=Vk(Ze(N)?N.call(t,m,y):"".concat(d," (").concat(y.naturalWidth," × ").concat(y.naturalHeight,")"))},g,x;return ve(i,cs,h,{once:!0}),this.viewing={abort:function(){Qe(i,cs,h),m.complete?t.imageRendering?t.imageRendering.abort():t.imageInitializing&&t.imageInitializing.abort():(m.src="",Qe(m,an,g),t.timeout&&clearTimeout(t.timeout))}},m.complete?this.load():(ve(m,an,g=function(){Qe(m,ki,x),t.load()},{once:!0}),ve(m,ki,x=function(){Qe(m,an,g),t.timeout&&(clearTimeout(t.timeout),t.timeout=!1),Ge(m,$o),o.loading&&Ge(t.canvas,oo)},{once:!0}),this.timeout&&clearTimeout(this.timeout),this.timeout=setTimeout(function(){Ge(m,$o),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(Xi(t)?t:i.x+Number(t),Xi(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,a=this.imageData;if(t=Number(t),i=Number(i),this.viewed&&!this.played&&r.movable){var c=a.x,u=a.y,d=!1;if(gt(t)?d=!0:t=c,gt(i)?d=!0:i=u,d){if(Ze(r.move)&&ve(s,sm,r.move,{once:!0}),wt(s,sm,{x:t,y:i,oldX:c,oldY:u,originalEvent:o})===!1)return this;a.x=t,a.y=i,a.left=t,a.top=i,this.moving=!0,this.renderImage(function(){n.moving=!1,Ze(r.moved)&&ve(s,rm,r.moved,{once:!0}),wt(s,rm,{x:t,y:i,oldX:c,oldY:u,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),gt(t)&&this.viewed&&!this.played&&o.rotatable){var r=s.rotate;if(Ze(o.rotate)&&ve(i,am,o.rotate,{once:!0}),wt(i,am,{degree:t,oldDegree:r})===!1)return this;s.rotate=t,this.rotating=!0,this.renderImage(function(){n.rotating=!1,Ze(o.rotated)&&ve(i,lm,o.rotated,{once:!0}),wt(i,lm,{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 a=r.scaleX,c=r.scaleY,u=!1;if(gt(t)?u=!0:t=a,gt(i)?u=!0:i=c,u){if(Ze(s.scale)&&ve(o,cm,s.scale,{once:!0}),wt(o,cm,{scaleX:t,scaleY:i,oldScaleX:a,oldScaleY:c})===!1)return this;r.scaleX=t,r.scaleY=i,this.scaling=!0,this.renderImage(function(){n.scaling=!1,Ze(s.scaled)&&ve(o,um,s.scaled,{once:!0}),wt(o,um,{scaleX:t,scaleY:i,oldScaleX:a,oldScaleY:c},{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,a=this.element,c=this.options,u=this.pointers,d=this.imageData,m=d.x,f=d.y,h=d.width,g=d.height,x=d.naturalWidth,b=d.naturalHeight;if(t=Math.max(0,t),gt(t)&&this.viewed&&!this.played&&(r||c.zoomable)){if(!r){var y=Math.max(.01,c.minZoomRatio),N=Math.min(100,c.maxZoomRatio);t=Math.min(Math.max(t,y),N)}if(s)switch(s.type){case"wheel":c.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 w=x*t,T=b*t,S=w-h,v=T-g,E=d.ratio;if(Ze(c.zoom)&&ve(a,dm,c.zoom,{once:!0}),wt(a,dm,{ratio:t,oldRatio:E,originalEvent:s})===!1)return this;if(this.zooming=!0,s){var R=Rk(this.viewer),q=u&&Object.keys(u).length>0?Lk(u):{pageX:s.pageX,pageY:s.pageY};d.x-=S*((q.pageX-R.left-m)/h),d.y-=v*((q.pageY-R.top-f)/g)}else Ki(o)&>(o.x)&>(o.y)?(d.x-=S*((o.x-m)/h),d.y-=v*((o.y-f)/g)):(d.x-=S/2,d.y-=v/2);d.left=d.x,d.top=d.y,d.width=w,d.height=T,d.oldRatio=E,d.ratio=t,this.renderImage(function(){n.zooming=!1,Ze(c.zoomed)&&ve(a,mm,c.zoomed,{once:!0}),wt(a,mm,{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(Ze(o.play)&&ve(i,pm,o.play,{once:!0}),wt(i,pm)===!1)return this;var s=this.player,r=this.loadImage.bind(this),a=[],c=0,u=0;if(this.played=!0,this.onLoadWhenPlay=r,n&&this.requestFullscreen(n),ye(s,Gi),nt(this.items,function(f,h){var g=f.querySelector("img"),x=document.createElement("img");x.src=Yi(g,"originalUrl"),x.alt=g.getAttribute("alt"),x.referrerPolicy=g.referrerPolicy,c+=1,ye(x,er),ds(x,Nt,o.transition),$i(f,Is)&&(ye(x,sn),u=h),a.push(x),ve(x,an,r,{once:!0}),s.appendChild(x)}),gt(o.interval)&&o.interval>0){var d=function(){clearTimeout(t.playing.timeout),Ge(a[u],sn),u-=1,u=u>=0?u:c-1,ye(a[u],sn),t.playing.timeout=setTimeout(d,o.interval)},m=function(){clearTimeout(t.playing.timeout),Ge(a[u],sn),u+=1,u=u<c?u:0,ye(a[u],sn),t.playing.timeout=setTimeout(m,o.interval)};c>1&&(this.playing={prev:d,next:m,timeout:setTimeout(m,o.interval)})}return this},stop:function(){var t=this;if(!this.played)return this;var n=this.element,i=this.options;if(Ze(i.stop)&&ve(n,fm,i.stop,{once:!0}),wt(n,fm)===!1)return this;var o=this.player;return clearTimeout(this.playing.timeout),this.playing=!1,this.played=!1,nt(o.getElementsByTagName("img"),function(s){Qe(s,an,t.onLoadWhenPlay)}),Ge(o,Gi),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(),ye(this.button,Hd),n.transition&&(Ge(s,Nt),this.viewed&&Ge(o,Nt)),ye(i,El),i.setAttribute("role","dialog"),i.setAttribute("aria-labelledby",this.title.id),i.setAttribute("aria-modal",!0),i.removeAttribute("style"),gn(i,{zIndex:n.zIndex}),n.focus&&this.enforceFocus(),this.initContainer(),this.viewerData=Jt({},this.containerData),this.renderList(),this.viewed&&this.initImage(function(){t.renderImage(function(){n.transition&&setTimeout(function(){ye(o,Nt),ye(s,Nt)},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(),Ge(this.button,Hd),n.transition&&(Ge(s,Nt),this.viewed&&Ge(o,Nt)),n.focus&&this.clearEnforceFocus(),i.removeAttribute("role"),i.removeAttribute("aria-labelledby"),i.removeAttribute("aria-modal"),Ge(i,El),gn(i,{zIndex:n.zIndexInline}),this.viewerData=Jt({},this.parentData),this.renderViewer(),this.renderList(),this.viewed&&this.initImage(function(){t.renderImage(function(){n.transition&&setTimeout(function(){ye(o,Nt),ye(s,Nt)},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&&wt(i,pn),ye(i,Gi),ye(i,er),ye(i,Nt),i.removeAttribute("aria-hidden"),i.initialOffsetWidth=i.offsetWidth,ye(i,sn)):(ye(i,Gi),i.removeAttribute("aria-hidden")),this.tooltipping=setTimeout(function(){n.transition?(ve(i,pn,function(){Ge(i,Gi),Ge(i,er),Ge(i,Nt),i.setAttribute("aria-hidden",!0),t.fading=!1},{once:!0}),Ge(i,sn),t.fading=!0):(Ge(i,Gi),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=Jt({},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(nt(o?[n]:n.querySelectorAll("img"),function(u){Ze(i.filter)?i.filter.call(t,u)&&s.push(u):t.getImageURL(u)&&s.push(u)}),!s.length)return this;if(this.images=s,this.length=s.length,this.ready){var r=[];if(nt(this.items,function(u,d){var m=u.querySelector("img"),f=s[d];f&&m?(f.src!==m.src||f.alt!==m.alt)&&r.push(d):r.push(d)}),gn(this.list,{width:"auto"}),this.initList(),this.isShown)if(this.length){if(this.viewed){var a=r.indexOf(this.index);if(a>=0)this.viewed=!1,this.view(Math.max(Math.min(this.index-a,this.length-1),0));else{var c=this.items[this.index];ye(c,Is),c.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[Te]?(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||Qe(t,po,this.onStart),t[Te]=void 0,this):this}},Gk={getImageURL:function(t){var n=this.options.url;return us(n)?n=t.getAttribute(n):Ze(n)?n=n.call(this,t):n="",n},enforceFocus:function(){var t=this;this.clearEnforceFocus(),ve(document,Wd,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&&(Qe(document,Wd,this.onFocusin),this.onFocusin=null)},open:function(){var t=this.body;ye(t,zd),this.scrollbarWidth>0&&(t.style.paddingRight="".concat(this.scrollbarWidth+(parseFloat(this.initialBodyComputedPaddingRight)||0),"px"))},close:function(){var t=this.body;Ge(t,zd),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()),Ze(n.shown)&&ve(t,tm,n.shown,{once:!0}),wt(t,tm)!==!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(),ye(i,xi),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||(Ze(n.hidden)&&ve(t,im,n.hidden,{once:!0}),wt(t,im,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?Ki(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 Js:(s!==0||r!==0)&&(this.pointerMoved=!0,this.move(s,r,t));break;case Oo:this.zoom(Bk(i),!1,null,t);break;case zh:{this.action="switched";var a=Math.abs(s);a>1&&a>Math.abs(r)&&(this.pointers={},s>1?this.prev(n.loop):s<-1&&this.next(n.loop));break}}nt(i,function(c){c.startX=c.endX,c.startY=c.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}},Wk=On.Viewer,$k=(function(e){return function(){return e+=1,e}})(-1),$h=(function(){function e(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(xk(this,e),!t||t.nodeType!==1)throw new Error("The first argument is required and must be an element.");this.element=t,this.options=Jt({},Fd,Ki(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=$k(),this.init()}return Nk(e,[{key:"init",value:function(){var n=this,i=this.element,o=this.options;if(!i[Te]){i[Te]=this,o.focus&&!o.keyboard&&(o.focus=!1);var s=i.localName==="img",r=[];if(nt(s?[i]:i.querySelectorAll("img"),function(u){Ze(o.filter)?o.filter.call(n,u)&&r.push(u):n.getImageURL(u)&&r.push(u)}),this.isImg=s,this.length=r.length,this.images=r,this.initBody(),Xi(document.createElement(Te).style.transition)&&(o.transition=!1),o.inline){var a=0,c=function(){if(a+=1,a===n.length){var d;n.initializing=!1,n.delaying={abort:function(){clearTimeout(d)}},d=setTimeout(function(){n.delaying=!1,n.build()},0)}};this.initializing={abort:function(){nt(r,function(d){d.complete||(Qe(d,an,c),Qe(d,ki,c))})}},nt(r,function(u){if(u.complete)c();else{var d,m;ve(u,an,d=function(){Qe(u,ki,m),c()},{once:!0}),ve(u,ki,m=function(){Qe(u,an,d),c()},{once:!0})}})}else ve(i,po,this.onStart=function(u){var d=u.target;d.localName==="img"&&(!Ze(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=vk;var r=s.querySelector(".".concat(Te,"-container")),a=r.querySelector(".".concat(Te,"-title")),c=r.querySelector(".".concat(Te,"-toolbar")),u=r.querySelector(".".concat(Te,"-navbar")),d=r.querySelector(".".concat(Te,"-button")),m=r.querySelector(".".concat(Te,"-canvas"));if(this.parent=o,this.viewer=r,this.title=a,this.toolbar=c,this.navbar=u,this.button=d,this.canvas=m,this.footer=r.querySelector(".".concat(Te,"-footer")),this.tooltipBox=r.querySelector(".".concat(Te,"-tooltip")),this.player=r.querySelector(".".concat(Te,"-player")),this.list=r.querySelector(".".concat(Te,"-list")),r.id="".concat(Te).concat(this.id),a.id="".concat(Te,"Title").concat(this.id),ye(a,i.title?Us(Array.isArray(i.title)?i.title[0]:i.title):xi),ye(u,i.navbar?Us(i.navbar):xi),ds(d,xi,!i.button),i.keyboard&&d.setAttribute("tabindex",0),i.backdrop&&(ye(r,"".concat(Te,"-backdrop")),!i.inline&&i.backdrop!=="static"&&kl(m,xr,"hide")),us(i.className)&&i.className&&i.className.split(Ac).forEach(function(w){ye(r,w)}),i.toolbar){var f=document.createElement("ul"),h=Ki(i.toolbar),g=Vs.slice(0,3),x=Vs.slice(7,9),b=Vs.slice(9);h||ye(c,Us(i.toolbar)),nt(h?i.toolbar:Vs,function(w,T){var S=h&&Ki(w),v=h?Mc(T):w,E=S&&!Xi(w.show)?w.show:w;if(!(!E||!i.zoomable&&g.indexOf(v)!==-1||!i.rotatable&&x.indexOf(v)!==-1||!i.scalable&&b.indexOf(v)!==-1)){var R=S&&!Xi(w.size)?w.size:w,q=S&&!Xi(w.click)?w.click:w,$=document.createElement("li");i.keyboard&&$.setAttribute("tabindex",0),$.setAttribute("role","button"),ye($,"".concat(Te,"-").concat(v)),Ze(q)||kl($,xr,v),gt(E)&&ye($,Us(E)),["small","large"].indexOf(R)!==-1?ye($,"".concat(Te,"-").concat(R)):v==="play"&&ye($,"".concat(Te,"-large")),Ze(q)&&ve($,po,q),f.appendChild($)}}),c.appendChild(f)}else ye(c,xi);if(!i.rotatable){var y=c.querySelectorAll('li[class*="rotate"]');ye(y,$o),nt(y,function(w){c.appendChild(w)})}if(i.inline)ye(d,Sk),gn(r,{zIndex:i.zIndexInline}),window.getComputedStyle(o).position==="static"&&gn(o,{position:"relative"}),o.insertBefore(r,n.nextSibling);else{ye(d,Ek),ye(r,El),ye(r,er),ye(r,xi),gn(r,{zIndex:i.zIndex});var N=i.container;us(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,Ze(i.ready)&&ve(n,Jd,i.ready,{once:!0}),wt(n,Jd)===!1){this.ready=!1;return}this.ready&&i.inline&&this.view(this.index)}}}],[{key:"noConflict",value:function(){return window.Viewer=Wk,e}},{key:"setDefaults",value:function(n){Jt(Fd,Ki(n)&&n)}}])})();Jt($h.prototype,Ok,Fk,Hk,zk,Gk);const Xk=()=>window.innerWidth<=768||/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);class Kk{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=Xk(),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 $h(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 Yk(e){const t=e.getData("text/uri-list");if(t){const o=t.split(`
|
|
25
25
|
`).filter(s=>s&&!s.startsWith("#"));if(o.length>0&&hm(o[0]))return o[0].trim()}const n=e.getData("text/plain");if(n&&hm(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 hm(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 Zk=e=>{const t=e,{insertFragment:n,drop:i,pointerUp:o}=t,s=new Kk({zoomStep:.3,minZoom:.1,maxZoom:5,enableKeyboard:!0});return t.insertFragment=(r,a,c)=>{var u;if((u=r==null?void 0:r.files)!=null&&u.length&&du(r.files[0].type)){const d=r.files[0];mu(e,d,a,!1);return}n(r,a,c)},t.drop=r=>{var a,c;if((c=(a=r.dataTransfer)==null?void 0:a.files)!=null&&c.length){const u=r.dataTransfer.files[0];if(du(u.type)){const d=Ot(e,Ft(e,r.x,r.y));return mu(e,u,d,!0),!0}if(r0(u.type)){const d=Ot(e,Ft(e,r.x,r.y));return(async()=>{try{const m=u.name.replace(/\.[^.]+$/,"");await pu.initialize();const f=await pu.addAsset({type:In.AUDIO,source:a0.LOCAL,name:u.name,blob:u,mimeType:u.type});await Ni.updateCachedMedia(f.url,{metadata:{name:m}});const[h,g]=await Promise.all([l0(u),c0(u)]);let x;if(g){const b=`/__aitu_cache__/image/${f.id}-cover.png`;await Ni.cacheMediaFromBlob(b,g,"image",{taskId:`${f.id}-cover`,name:`${m}-cover`}),x=b}await Ol(e,f.url,{title:m,duration:h,previewImageUrl:x},d,!0)}catch(m){console.error("[withImagePlugin] Failed to insert audio from drop:",m)}})(),!0}}if(r.dataTransfer){const u=Yk(r.dataTransfer);if(u){const d=Ot(e,Ft(e,r.x,r.y));return u0(e,u,d).catch(m=>{console.error("[withImagePlugin] Failed to insert image from URL:",m)}),!0}}return i(r)},t.pointerUp=r=>{const a=d0(e);if(a&&!kp(e)&&!Jo(e)&&!es(e)){const c=Ot(e,Ft(e,r.x,r.y)),u=Ya(e,c);u&&nn.isMindElement(e,u)&&nn.hasImage(u)&&m0(e,u,c)&&a===u&&s.open(u.data.image.url)}o(r)},t},jo={MAX_CHARS_PER_LINE:50};function Qk(e){const t=e.split(`
|
|
26
26
|
`),n=[];for(const i of t)if(i.length<=jo.MAX_CHARS_PER_LINE)n.push(i);else{let o=i;for(;o.length>0;){let s=jo.MAX_CHARS_PER_LINE;if(o.length>jo.MAX_CHARS_PER_LINE){const r=o.lastIndexOf(" ",jo.MAX_CHARS_PER_LINE);r>jo.MAX_CHARS_PER_LINE*.7&&(s=r)}n.push(o.substring(0,s).trim()),o=o.substring(s).trim()}}return n.join(`
|
|
27
|
-
`)}function Jk(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 eT(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 tT=e=>{const{insertFragment:t}=e;return e.insertFragment=(n,i,o)=>{if(Jk(n)){const s=eT(n);if(s&&s.trim()){const r=s.trim(),a=p0(r);if(a&&a.length>0){const u=Math.round(window.innerWidth*.5);f0(e,a,i,u);return}const c=Qk(r);Ar.insertText(e,i,c);return}}t(n,i,o)},e},nT=e=>{const t=e;return t.renderImage=(n,i)=>{const o=Pr.createRoot(n);o.render(l.jsxDEV(Bd,{...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:a=>{s={...s,...a},o.render(l.jsxDEV(Bd,{...s},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/with-common.tsx",lineNumber:30,columnNumber:21},void 0))}}},tT(Zk(t))},iT=p.forwardRef(({children:e,gap:t,align:n,justifyContent:i,className:o,style:s},r)=>l.jsxDEV("div",{className:Y("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)),oT=p.forwardRef(({children:e,gap:t,align:n,justifyContent:i,className:o,style:s},r)=>l.jsxDEV("div",{className:Y("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)),ft={Row:iT,Col:oT},Ye=Fn.forwardRef(({children:e,padding:t,className:n,style:i,...o},s)=>l.jsxDEV("div",{className:Y("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)),Xh=e=>e?typeof e=="string"?e:Vn(e)&&e.type==="solid"&&e.solid?e.solid.color:null:null,sT=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(e,n))return;const o=n.fill,s=Xh(o)||Tp(e,n);if(!h0(s))return;const r=Ti(s),a=bo(t)?r:xo(r,t);ue.setNode(e,{fill:a},i)}})},rT=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(e,n))return;const o=n.fill,s=Xh(o)||Tp(e,n),r=typeof s=="string"?ao(s):void 0;Fl(t)?ue.setNode(e,{fill:"none"},i):Hl(r)||bo(r)?ue.setNode(e,{fill:t},i):ue.setNode(e,{fill:xo(t,r)},i)}})},aT=(e,t)=>{Hn.setStrokeColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{const o=_p(e,n),s=Ti(o),r=bo(t)?s:xo(s,t);ue.setNode(e,{strokeColor:r},i)}})},lT=(e,t)=>{Hn.setStrokeColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{const o=_p(e,n),s=ao(o);Fl(t)?ue.setNode(e,{strokeColor:"none"},i):Hl(s)||bo(s)?ue.setNode(e,{strokeColor:t},i):ue.setNode(e,{strokeColor:xo(t,s)},i)}})},cT=(e,t)=>{Hn.setStrokeStyle(e,t,{getMemorizeKey:zn,callback:(n,i)=>{ue.setNode(e,{strokeStyle:t},i)}})},gm=(e,t)=>{Hn.setStrokeWidth(e,t,{getMemorizeKey:zn,callback:(n,i)=>{ue.setNode(e,{strokeWidth:t},i)}})},uT=(e,t,n)=>{const i=ao(t);Fl(n)?Jn.setTextColor(e,null):Hl(i)||bo(i)?Jn.setTextColor(e,n):Jn.setTextColor(e,xo(n,i))},dT=(e,t,n)=>{const i=Ti(t),o=bo(n)?i:xo(i,n);Jn.setTextColor(e,o)},Kh=(e,t)=>{try{Jn.setFontSize(e,t,16)}catch{const i=kt(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)}})}},mT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),Ee.addMark(i,"font-family",t)}catch(o){console.error("Failed to set font family:",o)}})},Aa=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"text-shadow",t):Ee.removeMark(i,"text-shadow")}catch(o){console.error("Failed to set text shadow:",o)}})},bm=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"text-gradient",t):Ee.removeMark(i,"text-gradient")}catch(o){console.error("Failed to set text gradient:",o)}})},Yh=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),Ee.addMark(i,"font-weight",String(t))}catch(o){console.error("Failed to set font weight:",o)}})},pT=(e,t)=>{try{let n;t==="left"?n=eo.left:t==="center"?n=eo.center:n=eo.right,Jn.setTextAlign(e,n)}catch(n){console.error("Failed to set text align:",n)}},fT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),Ee.addMark(i,"line-height",String(t))}catch(o){console.error("Failed to set line height:",o)}})},hT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i);const o=typeof t=="number"?`${t}px`:t;Ee.addMark(i,"letter-spacing",o)}catch(o){console.error("Failed to set letter spacing:",o)}})},gT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.bold:!1)?Ee.removeMark(n,"bold"):Ee.addMark(n,"bold",!0)}catch(i){console.error("Failed to toggle bold:",i)}})},bT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.italic:!1)?Ee.removeMark(n,"italic"):Ee.addMark(n,"italic",!0)}catch(i){console.error("Failed to toggle italic:",i)}})},xT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.underlined:!1)?Ee.removeMark(n,"underlined"):Ee.addMark(n,"underlined",!0)}catch(i){console.error("Failed to toggle underline:",i)}})},NT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.strikethrough:!1)?Ee.removeMark(n,"strikethrough"):Ee.addMark(n,"strikethrough",!0)}catch(i){console.error("Failed to toggle strikethrough:",i)}})},yT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.superscript:!1)?Ee.removeMark(n,"superscript"):(Ee.removeMark(n,"subscript"),Ee.addMark(n,"superscript",!0))}catch(i){console.error("Failed to toggle superscript:",i)}})},wT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.subscript:!1)?Ee.removeMark(n,"subscript"):(Ee.removeMark(n,"superscript"),Ee.addMark(n,"subscript",!0))}catch(i){console.error("Failed to toggle subscript:",i)}})},vT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"background-color",t):Ee.removeMark(i,"background-color")}catch(o){console.error("Failed to set background color:",o)}})},ET=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t&&t!=="none"?Ee.addMark(i,"text-transform",t):Ee.removeMark(i,"text-transform")}catch(o){console.error("Failed to set text transform:",o)}})},ST=(e,t,n)=>{const i=kt(e);i&&i.length>0&&i.forEach(o=>{try{Ct(o),t&&t>0?(Ee.addMark(o,"text-stroke",t),n&&Ee.addMark(o,"text-stroke-color",n)):(Ee.removeMark(o,"text-stroke"),Ee.removeMark(o,"text-stroke-color"))}catch(s){console.error("Failed to set text stroke:",s)}})},kT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"text-decoration-style",t):Ee.removeMark(i,"text-decoration-style")}catch(o){console.error("Failed to set text decoration style:",o)}})},TT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"text-decoration-color",t):Ee.removeMark(i,"text-decoration-color")}catch(o){console.error("Failed to set text decoration color:",o)}})},DT=e=>{const t=kt(e);if(t&&t.length>0){const n=t[0];try{return Ct(n),Ee.marks(n)||{}}catch(i){return console.error("Failed to get text marks:",i),{}}}return{}},_T=e=>{const t=kt(e);if(t&&t.length>0){const n=t[0];try{const{selection:i}=n;if(i){const o=Array.from(Ee.nodes(n,{at:i,match:s=>{const r=s.type==="paragraph",a="align"in s;return Ee.isBlock(n,s)&&(r||a)}}));if(o.length>0){const[s]=o[0],r=s.align;if(r===eo.right||r==="right")return"right";if(r===eo.center||r==="center")return"center";if(r===eo.left||r==="left")return"left"}}}catch(i){console.error("Failed to get text align:",i)}}return"left"},jT=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(e,n))return;const o=Dp(t),s={type:"gradient",gradient:t,fallbackColor:o};ue.setNode(e,{fill:o,fillConfig:s},i)}})},xm=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(e,n))return;const o="#FFFFFF",s={type:"image",image:t,fallbackColor:o};ue.setNode(e,{fill:o,fillConfig:s},i)}})},PT=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(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),ue.setNode(e,{fill:r,fillConfig:void 0},i);break}case"gradient":{const r={type:"linear",angle:90,stops:[{offset:0,color:"#FFFFFF"},{offset:1,color:"#000000"}]},a=(o==null?void 0:o.gradient)||r,c=Dp(a),u={type:"gradient",gradient:a,fallbackColor:c};ue.setNode(e,{fill:c,fillConfig:u},i);break}case"image":{const r={imageUrl:"",mode:"stretch",scale:1,offsetX:0,offsetY:0,rotation:0},a="#FFFFFF",c={type:"image",image:(o==null?void 0:o.image)||r,fallbackColor:a};ue.setNode(e,{fill:a,fillConfig:c},i);break}default:return}}})},CT=(e,t)=>{const n=Be(e);for(const i of n)if(Pt(i)){const o=e.children.findIndex(s=>s.id===i.id);o!==-1&&ue.setNode(e,{fillColor:t},[o])}},AT=({board:e,currentColor:t,fontColorIcon:n,title:i})=>{const[o,s]=p.useState(!1),r=F.getBoardContainer(e),a=p.useCallback(u=>{uT(e,t||u,u)},[e,t]),c=p.useCallback(u=>{t&&dT(e,t,u)},[e,t]);return l.jsxDEV(at,{sideOffset:12,open:o,onOpenChange:u=>{s(u)},placement:"top",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("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),l.jsxDEV(ct,{container:r,children:l.jsxDEV(Ye,{padding:4,className:Y(`${At}`),children:l.jsxDEV(Di,{value:t,onChange:a,onOpacityChange:c},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)},Tl=[{key:"title",labelZh:"标题",labelEn:"Title",previewSize:26,..._n.title},{key:"subtitle",labelZh:"副标题",labelEn:"Subtitle",previewSize:22,..._n.subtitle},{key:"h1",labelZh:"标题 1",labelEn:"Heading 1",previewSize:20,..._n.h1,divider:!0},{key:"h2",labelZh:"标题 2",labelEn:"Heading 2",previewSize:18,..._n.h2},{key:"h3",labelZh:"标题 3",labelEn:"Heading 3",previewSize:16,..._n.h3},{key:"h4",labelZh:"标题 4",labelEn:"Heading 4",previewSize:15,..._n.h4},{key:"body",labelZh:"正文",labelEn:"Body",previewSize:14,..._n.body,divider:!0},{key:"caption",labelZh:"注释",labelEn:"Caption",previewSize:13,..._n.caption},{key:"footnote",labelZh:"脚注",labelEn:"Footnote",previewSize:12,..._n.footnote}],MT=e=>{if(!e)return null;const t=parseInt(e,10);if(isNaN(t))return null;for(const n of Tl)if(n.fontSize===t)return n.key;return null},IT=({board:e,currentFontSize:t,title:n})=>{const[i,o]=p.useState(!1),{language:s}=Se(),r=F.getBoardContainer(e),a=MT(t),c=p.useCallback(d=>{Kh(e,String(d.fontSize)),Yh(e,d.fontWeight),Jn.setTextColor(e,d.color),o(!1)},[e]),u=(()=>{if(a){const d=Tl.find(m=>m.key===a);if(d)return s==="zh"?d.labelZh:d.labelEn}return t||"16"})();return l.jsxDEV(at,{sideOffset:12,open:i,onOpenChange:o,placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button"),selected:i,visible:!0,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>o(!i),children:l.jsxDEV("div",{style:{fontSize:"12px",fontWeight:"bold",minWidth:"20px"},children:u},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:97,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:88,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:87,columnNumber:7},void 0),l.jsxDEV(ct,{container:r,children:l.jsxDEV(Ye,{padding:4,className:Y(`${At}`),children:l.jsxDEV(ft.Col,{gap:0,style:{minWidth:"200px"},children:[l.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),l.jsxDEV("div",{style:{maxHeight:"320px",overflowY:"auto"},children:Tl.map(d=>{const m=a===d.key;return l.jsxDEV(Fn.Fragment,{children:[d.divider&&l.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),l.jsxDEV("div",{onClick:()=>c(d),style:{padding:"6px 10px",cursor:"pointer",backgroundColor:m?"#f0f7ff":"transparent",borderLeft:m?"3px solid #0052d9":"3px solid transparent",borderRadius:"2px",transition:"background-color 0.15s",display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"8px"},onMouseEnter:f=>{m||(f.currentTarget.style.backgroundColor="#f5f5f5")},onMouseLeave:f=>{m||(f.currentTarget.style.backgroundColor="transparent")},children:[l.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),l.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)},VT=({board:e,currentColor:t,title:n,hasStrokeStyle:i,hasStrokeWidth:o,currentStrokeWidth:s,children:r})=>{const[a,c]=p.useState(!1),[u,d]=p.useState(String(s||2)),m=t&&Ti(t),f=t?ao(t):100,h=F.getBoardContainer(e);Fn.useEffect(()=>{d(String(s||2))},[s]);const g=Ap(f)?g0:Mp(m)?b0:void 0,x=g?l.jsxDEV(g,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:67,columnNumber:32},void 0):void 0,b=E=>{cT(e,E)},y=p.useCallback(E=>{lT(e,E)},[e]),N=p.useCallback(E=>{aT(e,E)},[e]),w=p.useCallback(E=>{gm(e,E),d(String(E))},[e]),T=p.useCallback(E=>{d(E.target.value)},[]),S=p.useCallback(()=>{const E=parseInt(u,10);!isNaN(E)&&E>=1&&E<=100?gm(e,E):d(String(s||2))},[e,u,s]),v=p.useCallback(E=>{E.key==="Enter"?(S(),E.target.blur()):E.key==="Escape"&&(d(String(s||2)),E.target.blur())},[S,s]);return l.jsxDEV(at,{sideOffset:12,crossAxisOffset:40,open:a,onOpenChange:E=>{c(E)},placement:"left",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button"),visible:!0,icon:x,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>{c(!a)},children:!x&&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),l.jsxDEV(ct,{container:h,children:l.jsxDEV(Ye,{padding:4,className:Y(`${At}`,"stroke-setting",{"has-stroke-style":i}),children:l.jsxDEV(ft.Col,{children:[o&&l.jsxDEV("div",{className:"stroke-width-section",style:{marginBottom:"8px"},children:l.jsxDEV(ft.Row,{gap:2,align:"center",children:[l.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),l.jsxDEV("div",{style:{flex:1,minWidth:"100px"},children:l.jsxDEV(Mr,{value:s||2,min:1,max:100,step:1,onChange:E=>w(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),l.jsxDEV("div",{className:"stroke-width-input-wrapper",children:[l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:u,onChange:T,onBlur:S,onKeyDown:v,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),l.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&&l.jsxDEV("div",{className:"stroke-style-section",children:[l.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),l.jsxDEV(ft.Row,{className:Y("stroke-style-picker"),children:[l.jsxDEV(ne,{visible:!0,icon:l.jsxDEV(jp,{},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:()=>b(ei.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),l.jsxDEV(ne,{visible:!0,icon:l.jsxDEV(Pp,{},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:()=>b(ei.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),l.jsxDEV(ne,{visible:!0,icon:l.jsxDEV(Cp,{},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:()=>b(ei.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),l.jsxDEV(Di,{value:t,onChange:y,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)},UT="drawnix-color-history",Nm=24,ym=12,wm=zs.createInstance({name:"drawnix",storeName:UT});let Pe=null;function Dl(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 RT(e,t){return Dl(e)===Dl(t)}class qT{constructor(){this.initialized=!1}async initialize(){if(!this.initialized)try{Pe=await wm.getItem("history")||{colors:[],gradients:[]},this.initialized=!0}catch(t){console.error("[ColorHistoryService] Failed to initialize:",t),Pe={colors:[],gradients:[]},this.initialized=!0}}async saveData(){if(Pe)try{await wm.setItem("history",Pe)}catch(t){console.error("[ColorHistoryService] Failed to save data:",t)}}async addColor(t){if(await this.initialize(),!Pe)return;const n=t.toUpperCase(),i=Pe.colors.findIndex(o=>o.color.toUpperCase()===n);if(i>=0){Pe.colors[i].lastUsedAt=Date.now(),Pe.colors[i].useCount+=1;const[o]=Pe.colors.splice(i,1);Pe.colors.unshift(o)}else Pe.colors.unshift({color:n,lastUsedAt:Date.now(),useCount:1}),Pe.colors.length>Nm&&(Pe.colors=Pe.colors.slice(0,Nm));await this.saveData()}async addGradient(t){if(await this.initialize(),!Pe)return;const n=Dl(t),i=Pe.gradients.findIndex(o=>RT(o.config,t));if(i>=0){Pe.gradients[i].lastUsedAt=Date.now(),Pe.gradients[i].useCount+=1;const[o]=Pe.gradients.splice(i,1);Pe.gradients.unshift(o)}else Pe.gradients.unshift({id:n,config:{...t},lastUsedAt:Date.now(),useCount:1}),Pe.gradients.length>ym&&(Pe.gradients=Pe.gradients.slice(0,ym));await this.saveData()}async getColors(){return await this.initialize(),(Pe==null?void 0:Pe.colors)||[]}async getGradients(){return await this.initialize(),(Pe==null?void 0:Pe.gradients)||[]}async removeColor(t){if(await this.initialize(),!Pe)return;const n=t.toUpperCase();Pe.colors=Pe.colors.filter(i=>i.color.toUpperCase()!==n),await this.saveData()}async removeGradient(t){await this.initialize(),Pe&&(Pe.gradients=Pe.gradients.filter(n=>n.id!==t),await this.saveData())}async clearAll(){Pe={colors:[],gradients:[]},await this.saveData()}resetCache(){Pe=null,this.initialized=!1}}const xn=new qT;function BT(){const[e,t]=p.useState([]),[n,i]=p.useState([]),[o,s]=p.useState(!0),r=p.useCallback(async()=>{try{const[m,f]=await Promise.all([xn.getColors(),xn.getGradients()]);t(m),i(f)}catch(m){console.error("[useColorHistory] Failed to load data:",m)}finally{s(!1)}},[]);p.useEffect(()=>{r()},[r]);const a=p.useCallback(async m=>{await xn.addColor(m);const f=await xn.getColors();t(f)},[]),c=p.useCallback(async m=>{await xn.addGradient(m);const f=await xn.getGradients();i(f)},[]),u=p.useCallback(async m=>{await xn.removeColor(m);const f=await xn.getColors();t(f)},[]),d=p.useCallback(async m=>{await xn.removeGradient(m);const f=await xn.getGradients();i(f)},[]);return{colors:e,gradients:n,isLoading:o,addColor:a,addGradient:c,removeColor:u,removeGradient:d,refresh:r}}function yi(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 LT(e){const t=e.match(/linear-gradient\((\d+)deg,\s*(.+)\)/);if(t){const i=parseInt(t[1],10),o=t[2],s=vm(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=vm(s);return{type:"radial",centerX:i,centerY:o,stops:r.length>=2?r:[{color:"#FF6B6B",offset:0},{color:"#4ECDC4",offset:1}]}}return Ir}function vm(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 Em=[{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}],Zh=({value:e,onChange:t,showPresets:n=!0,showHistory:i=!0,presetCategories:o,customPresets:s,compact:r=!1,inline:a=!1,onSavePreset:c,onDeletePreset:u})=>{const{language:d}=Se(),{addGradient:m}=BT(),[f,h]=p.useState(e||Ir),[g,x]=p.useState(0),[b,y]=p.useState(null),[N,w]=p.useState(!1),T=p.useRef(null);p.useEffect(()=>{e&&h(e)},[e]);const S=p.useCallback(X=>{h(X),t==null||t(X),m(X)},[t,m]),v=p.useCallback(X=>{S(X.config)},[S]),E=p.useCallback(X=>{const ae={...f,...X};S(ae)},[f,S]),R=p.useCallback(X=>{if(f.type!==X)if(X==="linear"){const ae={type:"linear",angle:90,stops:f.stops};S(ae)}else{const ae={type:"radial",centerX:.5,centerY:.5,stops:f.stops};S(ae)}},[f,S]),q=p.useCallback((X,ae)=>{const le=[...f.stops];le[X]={...le[X],...ae},le.sort((we,Fe)=>we.offset-Fe.offset);const be=le.findIndex(we=>we.color===(ae.color??f.stops[X].color));be!==-1&&be!==g&&x(be),E({stops:le})},[f.stops,g,E]),$=p.useCallback(()=>{if(f.stops.length>=8)return;const X=.5,le=[...f.stops,{color:"#888888",offset:X}].sort((be,we)=>be.offset-we.offset);E({stops:le}),x(le.findIndex(be=>be.offset===X))},[f.stops,E]),V=p.useCallback(X=>{if(f.stops.length<=2)return;const ae=f.stops.filter((le,be)=>be!==X);E({stops:ae}),x(Math.min(g,ae.length-1))},[f.stops,g,E]),U=p.useCallback((X,ae)=>{if(!T.current)return;const le=T.current.getBoundingClientRect(),we=Math.max(0,Math.min(X.clientX-le.left,le.width))/le.width;q(ae,{offset:we})},[q]),A=p.useCallback((X,ae)=>{X.preventDefault(),X.stopPropagation(),x(ae);const le=X.clientX,be=X.clientY;let we=!1;const Fe=3,K=We=>{const it=Math.abs(We.clientX-le),Ke=Math.abs(We.clientY-be);(it>Fe||Ke>Fe)&&(we=!0,w(!0),U(We,ae))},Ce=()=>{document.removeEventListener("mousemove",K),document.removeEventListener("mouseup",Ce),we||y(ae),setTimeout(()=>{w(!1)},0)};document.addEventListener("mousemove",K),document.addEventListener("mouseup",Ce)},[U]),_=p.useCallback(X=>{if(N||f.stops.length>=8||X.target!==T.current||!T.current)return;const le=T.current.getBoundingClientRect(),be=X.clientX-le.left,we=Math.max(0,Math.min(be/le.width,1)),Fe=[...f.stops].sort((Ke,D)=>Ke.offset-D.offset);let K=Fe[0];for(let Ke=0;Ke<Fe.length-1;Ke++)if(Fe[Ke].offset<=we&&Fe[Ke+1].offset>=we){K=Fe[Ke];break}const Ce=K.color,We=[...f.stops,{color:Ce,offset:we}].sort((Ke,D)=>Ke.offset-D.offset);E({stops:We});const it=We.findIndex(Ke=>Ke.offset===we);x(it)},[N,f.stops,E]);p.useMemo(()=>yi(f),[f]),p.useMemo(()=>{const X=[{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?X.filter(ae=>o.includes(ae.key)):X},[d,o]);const M=p.useMemo(()=>s?s.length>0&&typeof s[0]=="string"?s.map((X,ae)=>({id:`custom-${ae}`,name:`Custom ${ae+1}`,nameZh:`自定义 ${ae+1}`,category:"custom",config:LT(X),css:X})):s:fu,[s]),P=p.useCallback(()=>{var le;if(f.type!=="radial")return null;const{centerX:X,centerY:ae}=f;return(le=Em.find(be=>Math.abs(be.x-X)<.01&&Math.abs(be.y-ae)<.01))==null?void 0:le.key},[f]),Z=p.useMemo(()=>s&&s.length>0&&typeof s[0]=="string",[s]),pe=p.useMemo(()=>yi(f),[f]),I=p.useCallback(X=>pe===X,[pe]),G=()=>{const X=fu.slice(0,10),ae=Z?M:[];return l.jsxDEV("div",{className:"ge-quick-presets",children:[l.jsxDEV("div",{className:"ge-quick-presets-header",children:l.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),l.jsxDEV("div",{className:"ge-quick-presets-grid",children:[ae.map((le,be)=>{const we=le.css||yi(le.config);return l.jsxDEV("button",{className:Y("ge-quick-preset-item ge-quick-preset-item--custom",{"ge-quick-preset-item--selected":I(we)}),onClick:()=>v(le),title:d==="zh"?le.nameZh:le.name,children:[l.jsxDEV("div",{className:"ge-quick-preset-preview",style:{background:we}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:453,columnNumber:17},void 0),u&&l.jsxDEV("button",{className:"ge-quick-preset-delete",onClick:Fe=>{Fe.stopPropagation(),u(be)},children:"×"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:458,columnNumber:19},void 0)]},le.id,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:445,columnNumber:15},void 0)}),X.map(le=>{const be=yi(le.config);return l.jsxDEV("button",{className:Y("ge-quick-preset-item",{"ge-quick-preset-item--selected":I(be)}),onClick:()=>v(le),title:d==="zh"?le.nameZh:le.name,children:l.jsxDEV("div",{className:"ge-quick-preset-preview",style:{background:be}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:483,columnNumber:17},void 0)},le.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)},ce=()=>l.jsxDEV("div",{className:Y("ge-custom-editor",{"ge-custom-editor--inline":a}),children:[l.jsxDEV("div",{className:"ge-type-section",children:l.jsxDEV("div",{className:"ge-type-buttons",children:[l.jsxDEV("button",{className:Y("ge-type-btn",{active:f.type==="linear"}),onClick:()=>R("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),l.jsxDEV("button",{className:Y("ge-type-btn",{active:f.type==="radial"}),onClick:()=>R("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),l.jsxDEV("div",{className:"ge-color-section",children:[l.jsxDEV("div",{className:"ge-section-header",children:[l.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),l.jsxDEV("div",{className:"ge-stop-actions",children:[l.jsxDEV("button",{className:"ge-action-btn",onClick:$,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),l.jsxDEV("button",{className:"ge-action-btn",onClick:()=>V(g),disabled:f.stops.length<=2,title:d==="zh"?"删除色标":"Remove stop",children:"−"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:531,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:522,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:518,columnNumber:9},void 0),l.jsxDEV("div",{className:"ge-gradient-bar-wrapper",children:l.jsxDEV("div",{ref:T,className:"ge-gradient-bar",style:{background:`linear-gradient(90deg, ${f.stops.map(X=>`${X.color} ${Math.round(X.offset*100)}%`).join(", ")})`},onClick:_,children:f.stops.map((X,ae)=>l.jsxDEV(at,{open:b===ae,onOpenChange:le=>y(le?ae:null),children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("button",{className:Y("ge-stop-handle",{selected:g===ae}),style:{left:`${X.offset*100}%`,backgroundColor:X.color},onMouseDown:le=>{A(le,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),l.jsxDEV(ct,{children:l.jsxDEV(Ye,{padding:4,className:"ge-color-picker-popover "+At,children:l.jsxDEV(Di,{value:X.color,onChange:le=>q(ae,{color:le}),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"&&l.jsxDEV("div",{className:"ge-origin-section",children:[l.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),l.jsxDEV("div",{className:"ge-origin-buttons",children:Em.map(X=>l.jsxDEV("button",{className:Y("ge-origin-btn",{active:P()===X.key}),onClick:()=>E({centerX:X.x,centerY:X.y}),children:d==="zh"?X.labelZh:X.labelEn},X.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"&&l.jsxDEV("div",{className:"ge-angle-section",children:[l.jsxDEV("div",{className:"ge-section-header",children:[l.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),l.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),l.jsxDEV("input",{type:"range",min:0,max:360,value:f.angle,onChange:X=>E({angle:Number(X.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),c&&l.jsxDEV("div",{className:"ge-save-section",children:l.jsxDEV("button",{className:"ge-save-btn",onClick:c,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),G()]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:497,columnNumber:5},void 0);return r||a?l.jsxDEV("div",{className:Y("gradient-editor",{"gradient-editor--compact":r,"gradient-editor--inline":a}),children:ce()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:657,columnNumber:7},void 0):l.jsxDEV("div",{className:"gradient-editor",children:ce()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:669,columnNumber:5},void 0)},Ma=jt.CUSTOM_GRADIENTS,OT=({value:e,onChange:t,inline:n=!1})=>{const{language:i}=Se(),{confirm:o,confirmDialog:s}=Vr(),[r,a]=p.useState([]),[c,u]=p.useState(e||Ir);p.useEffect(()=>{let h=!0;return Sn.get(Ma).then(g=>{h&&g&&a(g)}).catch(g=>{console.warn("Failed to load gradient data:",g)}),()=>{h=!1}},[]),p.useEffect(()=>{e&&u(e)},[e]);const d=p.useCallback(h=>{u(h),t==null||t(h)},[t]),m=p.useCallback(()=>{const h=yi(c),x=[{id:`custom-${Date.now()}`,css:h},...r].slice(0,8);a(x),Sn.set(Ma,x).catch(b=>{console.warn("Failed to save custom gradients:",b)})},[c,r]),f=p.useCallback(async h=>{const g=r[h];if(!g||!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 b=r.filter(y=>y.id!==g.id);a(b),Sn.set(Ma,b).catch(y=>{console.warn("Failed to save custom gradients:",y)})},[o,r,i]);return l.jsxDEV(l.Fragment,{children:[l.jsxDEV(Zh,{value:c,onChange:d,showPresets:!0,showHistory:!0,inline:n,customPresets:r.map(h=>h.css),onSavePreset:m,onDeletePreset:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/GradientFillPanel.tsx",lineNumber:110,columnNumber:7},void 0),s]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/GradientFillPanel.tsx",lineNumber:109,columnNumber:5},void 0)},FT=p.lazy(()=>Me(()=>import("./tool-windows-Bd5iqcJh.js").then(e=>e.p2),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),HT=[{value:"stretch",labelZh:"拉伸",labelEn:"Stretch",icon:"⬌"},{value:"tile",labelZh:"平铺",labelEn:"Tile",icon:"⊞"},{value:"fit",labelZh:"适应",labelEn:"Fit",icon:"⊡"}],zT=({value:e,onChange:t,onOpenMediaLibrary:n,externalMediaLibraryControl:i=!1})=>{const{language:o}=Se(),[s,r]=p.useState(e||Ip),[a,c]=p.useState(!1),[u,d]=p.useState(!1),m=p.useRef(null);p.useEffect(()=>{e&&r(e)},[e]);const f=p.useCallback(S=>{const v={...s,...S};r(v),t==null||t(v)},[s,t]),h=p.useMemo(()=>x0(S=>{t==null||t(S)},300),[t]),g=p.useCallback(S=>{const v={...s,...S};r(v),h(v)},[s,h]),x=p.useCallback((S,v,E,R,q=1)=>{const $=parseFloat(v);if(isNaN($))return;const V=Math.max(E,Math.min(R,$)),U=q===1?V:V/q;f({[S]:U})},[f]),b=p.useCallback(S=>{f({imageUrl:S.url}),c(!1)},[f]),y=p.useCallback(async S=>{var q;const v=(q=S.target.files)==null?void 0:q[0];if(!v)return;if(!v.type.startsWith("image/")){re.warning(o==="zh"?"请选择图片文件":"Please select an image file");return}if(v.size>25*1024*1024){re.warning(o==="zh"?"图片大小不能超过 25MB":"Image size cannot exceed 25MB");return}let E=v;if(v.size>10*1024*1024){const $=N0(v.size/1048576),V=re.loading({content:o==="zh"?`正在压缩图片 (${(v.size/1024/1024).toFixed(1)}MB)...`:`Compressing image (${(v.size/1024/1024).toFixed(1)}MB)...`,duration:0,placement:"top"});try{E=await y0(v,$.targetSizeMB),re.close(V),re.success({content:o==="zh"?`压缩完成: ${(v.size/1024/1024).toFixed(1)}MB → ${(E.size/1024/1024).toFixed(1)}MB`:`Compressed: ${(v.size/1024/1024).toFixed(1)}MB → ${(E.size/1024/1024).toFixed(1)}MB`,duration:2})}catch(U){re.close(V),console.error("[ImageFillPanel] Compression failed:",U),re.warning(o==="zh"?"图片压缩失败":"Image compression failed");return}}const R=new FileReader;R.onload=$=>{var U;const V=(U=$.target)==null?void 0:U.result;f({imageUrl:V})},R.readAsDataURL(E),S.target.value=""},[o,f]),N=p.useCallback(()=>{var S;(S=m.current)==null||S.click()},[]),w=p.useCallback(()=>{i&&n?n():c(!0)},[i,n]),T=()=>s.imageUrl?l.jsxDEV("div",{className:"ifp-image-preview",children:[l.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),l.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):l.jsxDEV("div",{className:"ifp-image-placeholder",children:[l.jsxDEV(Up,{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),l.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 l.jsxDEV("div",{className:"image-fill-panel",children:[l.jsxDEV("input",{ref:m,type:"file",accept:"image/*",style:{display:"none"},onChange:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:240,columnNumber:7},void 0),l.jsxDEV("div",{className:"ifp-image-section",children:[l.jsxDEV("div",{className:"ifp-image-container",onClick:()=>!s.imageUrl&&w(),children:T()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:250,columnNumber:9},void 0),l.jsxDEV("div",{className:"ifp-image-actions",children:[l.jsxDEV("button",{className:"ifp-action-btn ifp-action-btn--primary",onClick:w,children:[l.jsxDEV(Ur,{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),l.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),l.jsxDEV("button",{className:"ifp-action-btn",onClick:N,children:[l.jsxDEV(Rr,{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),l.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&&l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{className:"ifp-control-section",children:[l.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),l.jsxDEV("div",{className:"ifp-mode-buttons",children:HT.map(S=>l.jsxDEV("button",{className:Y("ifp-mode-btn",{active:s.mode===S.value}),onClick:()=>f({mode:S.value}),title:o==="zh"?S.labelZh:S.labelEn,children:[l.jsxDEV("span",{className:"ifp-mode-icon",children:S.icon},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:282,columnNumber:19},void 0),l.jsxDEV("span",{className:"ifp-mode-label",children:o==="zh"?S.labelZh:S.labelEn},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:283,columnNumber:19},void 0)]},S.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),l.jsxDEV("div",{className:"ifp-advanced-section",children:[l.jsxDEV("button",{className:"ifp-advanced-toggle",onClick:()=>d(!u),children:[l.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),u?l.jsxDEV(Vp,{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):l.jsxDEV(zl,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:298,columnNumber:57},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:293,columnNumber:13},void 0),u&&l.jsxDEV("div",{className:"ifp-advanced-content",children:[l.jsxDEV("div",{className:"ifp-control-row",children:[l.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),l.jsxDEV("div",{className:"ifp-control-input",children:[l.jsxDEV("input",{type:"range",min:50,max:200,value:(s.scale??1)*100,onChange:S=>g({scale:Number(S.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),l.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[l.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((s.scale??1)*100),min:50,max:200,onChange:S=>x("scale",S.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),l.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),l.jsxDEV("div",{className:"ifp-control-row",children:[l.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),l.jsxDEV("div",{className:"ifp-control-input",children:[l.jsxDEV("input",{type:"range",min:-100,max:100,value:(s.offsetX??0)*100,onChange:S=>g({offsetX:Number(S.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),l.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[l.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((s.offsetX??0)*100),min:-100,max:100,onChange:S=>x("offsetX",S.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),l.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),l.jsxDEV("div",{className:"ifp-control-row",children:[l.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),l.jsxDEV("div",{className:"ifp-control-input",children:[l.jsxDEV("input",{type:"range",min:-100,max:100,value:(s.offsetY??0)*100,onChange:S=>g({offsetY:Number(S.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),l.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[l.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((s.offsetY??0)*100),min:-100,max:100,onChange:S=>x("offsetY",S.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),l.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),l.jsxDEV("div",{className:"ifp-control-row",children:[l.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),l.jsxDEV("div",{className:"ifp-control-input",children:[l.jsxDEV("input",{type:"range",min:0,max:360,value:s.rotation??0,onChange:S=>g({rotation:Number(S.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),l.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[l.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:s.rotation??0,min:0,max:360,onChange:S=>x("rotation",S.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),l.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),l.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&&a&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(FT,{isOpen:a,onClose:()=>c(!1),mode:ii.SELECT,filterType:In.IMAGE,onSelect:b,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)},GT=[{value:"solid",labelZh:"纯色",labelEn:"Solid"},{value:"gradient",labelZh:"渐变",labelEn:"Gradient"},{value:"image",labelZh:"图片",labelEn:"Image"}],WT=({value:e,onSolidChange:t,onOpacityChange:n,onGradientChange:i,onImageChange:o,onFillTypeChange:s,showClose:r=!1,onClose:a,onOpenMediaLibrary:c})=>{const{language:u}=Se(),d=p.useMemo(()=>e?ts(e)?w0(e):Vn(e)?e:{type:"solid",solid:{color:"#FFFFFF"}}:{type:"solid",solid:{color:"#FFFFFF"}},[e]),[m,f]=p.useState(d.type);p.useEffect(()=>{f(d.type)},[d.type]);const[h,g]=p.useState(d.gradient||Ir),[x,b]=p.useState(d.image||Ip);p.useEffect(()=>{d.gradient&&g(d.gradient)},[d.gradient]),p.useEffect(()=>{d.image&&b(d.image)},[d.image]);const y=p.useCallback(v=>{f(v)},[]),N=p.useCallback(v=>{s==null||s("solid"),t==null||t(v)},[t,s]),w=p.useCallback(v=>{g(v),s==null||s("gradient"),i==null||i(v)},[i,s]),T=p.useCallback(v=>{b(v),s==null||s("image"),o==null||o(v)},[o,s]),S=p.useMemo(()=>ts(e)?e:Vn(e)&&e.solid?e.solid.color:"#FFFFFF",[e]);return l.jsxDEV("div",{className:"fill-panel",children:[l.jsxDEV("div",{className:"fill-panel__header",children:[l.jsxDEV("span",{className:"fill-panel__title",children:u==="zh"?"填充":"Fill"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:160,columnNumber:9},void 0),r&&l.jsxDEV("button",{className:"fill-panel__close",onClick:a,children:"×"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:164,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:159,columnNumber:7},void 0),l.jsxDEV("div",{className:"fill-panel__tabs",children:GT.map(v=>l.jsxDEV("button",{className:Y("fill-panel__tab",{active:m===v.value}),onClick:()=>y(v.value),children:u==="zh"?v.labelZh:v.labelEn},v.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),l.jsxDEV("div",{className:"fill-panel__content",children:[m==="solid"&&l.jsxDEV("div",{className:"fill-panel__solid",children:l.jsxDEV(Di,{value:S,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),m==="gradient"&&l.jsxDEV(OT,{value:h,onChange:w},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:196,columnNumber:11},void 0),m==="image"&&l.jsxDEV(zT,{value:x,onChange:T,onOpenMediaLibrary:c,externalMediaLibraryControl:!!c},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)},$T=p.lazy(()=>Me(()=>import("./index-o4MkHJtB.js"),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),XT=({board:e,currentColor:t,title:n,children:i})=>{const{language:o}=Se(),[s,r]=p.useState(!1),[a,c]=p.useState(!1),{hexColor:u,opacity:d}=p.useMemo(()=>{var T;if(!t)return{hexColor:void 0,opacity:100};if(ts(t)){const S=Ti(t),v=ao(t);return{hexColor:S,opacity:v}}if(Vn(t))switch(t.type){case"solid":if(t.solid){const S=Ti(t.solid.color),v=ao(t.solid.color);return{hexColor:S,opacity:v}}break;case"gradient":if((T=t.gradient)!=null&&T.stops[0])return{hexColor:t.gradient.stops[0].color,opacity:100};break;case"image":return{hexColor:"#888888",opacity:100}}return{hexColor:void 0,opacity:100}},[t]),m=!u||Ap(d)?l.jsxDEV(v0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:96,columnNumber:48},void 0):void 0,f=p.useCallback(T=>{rT(e,T),CT(e,T)},[e]),h=p.useCallback(T=>{sT(e,T)},[e]),g=p.useCallback(T=>{jT(e,T)},[e]),x=p.useCallback(T=>{xm(e,T)},[e]),b=p.useCallback(T=>{PT(e,T)},[e]),y=p.useCallback(()=>{r(!1)},[]),N=p.useCallback(()=>{c(!0)},[]),w=p.useCallback(T=>{xm(e,{imageUrl:T.url,mode:"stretch",scale:1,offsetX:0,offsetY:0,rotation:0}),c(!1)},[e]);return l.jsxDEV(at,{sideOffset:12,crossAxisOffset:40,open:s,onOpenChange:T=>{!T&&a||r(T)},placement:"left",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button"),visible:!0,icon:m,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>{r(!s)},children:!m&&i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:182,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:181,columnNumber:7},void 0),l.jsxDEV(ct,{children:l.jsxDEV(Ye,{padding:0,className:Y(`${At}`,"fill-setting"),children:l.jsxDEV(WT,{value:t,onSolidChange:f,onOpacityChange:h,onGradientChange:g,onImageChange:x,onFillTypeChange:b,showClose:!0,onClose:y,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),a&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV($T,{isOpen:a,onClose:()=>c(!1),mode:ii.SELECT,filterType:In.IMAGE,onSelect:w,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)},KT=({board:e,currentRadius:t,title:n,selectionRect:i})=>{const[o,s]=p.useState(!1),[r,a]=p.useState({top:0,left:0}),[c,u]=p.useState(""),d=p.useRef(null),m=p.useRef(null),f=F.getBoardContainer(e),{t:h}=Se(),g=n||h("toolbar.cornerRadius")||"圆角",x=t??0;p.useEffect(()=>{u(String(x))},[x]),p.useEffect(()=>{if(o&&d.current){const v=d.current.getBoundingClientRect(),E=220,R=8;let q=v.left+v.width/2-E/2,$=v.bottom+R;const V=window.innerWidth,U=window.innerHeight;q+E>V-16&&(q=V-E-16),q<16&&(q=16),$+40>U-16&&($=v.top-40-R),a({left:q,top:$})}},[o]),p.useEffect(()=>{if(!o)return;const v=R=>{const q=R.target;m.current&&m.current.contains(q)||d.current&&d.current.contains(q)||q.closest(".popup-toolbar")!==null||s(!1)},E=setTimeout(()=>{document.addEventListener("mousedown",v)},100);return()=>{clearTimeout(E),document.removeEventListener("mousedown",v)}},[o]);const b=p.useCallback(v=>{const E=Math.max(0,Math.min(100,v));Be(e).filter(q=>Je.isPenPath(q)).forEach(q=>{const $=e.children.findIndex(V=>V.id===q.id);$>=0&&ue.setNode(e,{cornerRadius:E},[$])})},[e]),y=p.useCallback(v=>{u(String(v)),b(v)},[b]),N=p.useCallback(v=>{u(v.target.value)},[]),w=p.useCallback(()=>{const v=parseInt(c,10);if(isNaN(v))u(String(x));else{const E=Math.max(0,Math.min(100,v));u(String(E)),b(E)}},[c,x,b]),T=p.useCallback(v=>{v.key==="Enter"&&v.target.blur()},[]),S=p.useCallback(()=>{s(!o)},[o]);return l.jsxDEV(l.Fragment,{children:[l.jsxDEV(ne,{ref:d,className:Y("property-button","corner-radius-button",{"is-active":o}),visible:!0,type:"button",tooltip:g,"aria-label":g,onPointerUp:S,children:l.jsxDEV("svg",{viewBox:"0 0 24 24",width:"18",height:"18",children:l.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&&qr.createPortal(l.jsxDEV("div",{ref:m,className:Y(At,"corner-radius-panel"),style:{position:"fixed",top:r.top,left:r.left,zIndex:5e3},onPointerDown:v=>v.stopPropagation(),onMouseDown:v=>v.stopPropagation(),children:l.jsxDEV(Ye,{padding:2,className:"corner-radius-setting-compact",children:l.jsxDEV("div",{className:"corner-radius-row",children:[l.jsxDEV("span",{className:"corner-radius-label",children:g},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:204,columnNumber:15},void 0),l.jsxDEV("div",{className:"corner-radius-slider",children:l.jsxDEV(Mr,{value:x,min:0,max:100,step:1,onChange:v=>y(v),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),l.jsxDEV("input",{type:"text",className:"corner-radius-input",value:c,onChange:N,onBlur:w,onKeyDown:T},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),l.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)},YT=(e,t)=>{try{return Lt(e,[t],!1)}catch{return null}},Sm=(e,t,n,i,o,s)=>{const r=e.children.findIndex(g=>g.id===t.id);if(r<0)return;const a=YT(e,t);if(!a)return;const c=(a.x-n.x)/n.width,u=(a.y-n.y)/n.height,d=i.x+c*i.width,m=i.y+u*i.height,f=a.width*o,h=a.height*s;if(vi(t)){const g=[[d,m],[d+f,m+h]];ue.setNode(e,{points:g},[r])}else if(H.isDrawElement(t)){const g=[[d,m],[d+f,m+h]];ue.setNode(e,{points:g},[r])}else if(nn.isMindElement(e,t)){const g=[[d,m],[d+f,m+h]];ue.setNode(e,{points:g},[r])}else if($e.isFreehand(t)){const x=t.points.map(b=>{const y=(b[0]-n.x)/n.width,N=(b[1]-n.y)/n.height;return[i.x+y*i.width,i.y+N*i.height]});ue.setNode(e,{points:x},[r])}else if(Je.isPenPath(t)){const x=t.anchors.map(y=>{const N=[y.point[0]*o,y.point[1]*s],w=y.handleIn?[y.handleIn[0]*o,y.handleIn[1]*s]:void 0,T=y.handleOut?[y.handleOut[0]*o,y.handleOut[1]*s]:void 0;return{...y,point:N,handleIn:w,handleOut:T}}),b=[d,m];ue.setNode(e,{points:[b,b],anchors:x},[r])}},ZT=({board:e})=>{const{language:t}=Se(),n=t==="zh",i=Be(e),[o,s]=p.useState(!0),[r,a]=p.useState(""),[c,u]=p.useState(""),[d,m]=p.useState(1),[f,h]=p.useState(!1),g=p.useRef(null),x=F.getBoardContainer(e),b=i.length>0?Lt(e,i,!1):null;p.useEffect(()=>{b&&(g.current?(a(Math.round(g.current.width).toString()),u(Math.round(g.current.height).toString()),g.current=null):(a(Math.round(b.width).toString()),u(Math.round(b.height).toString())),m(b.width/b.height))},[b==null?void 0:b.width,b==null?void 0:b.height]);const y=p.useCallback(v=>{const E=v.target.value;if(a(E),o&&b){const R=parseFloat(E);if(!isNaN(R)&&R>0){const q=Math.round(R/d);u(q.toString())}}},[o,d,b]),N=p.useCallback(v=>{const E=v.target.value;if(u(E),o&&b){const R=parseFloat(E);if(!isNaN(R)&&R>0){const q=Math.round(R*d);a(q.toString())}}},[o,d,b]),w=p.useCallback(()=>{if(!b||i.length===0)return;const v=parseFloat(r),E=parseFloat(c);if(isNaN(v)||isNaN(E)||v<=0||E<=0){a(Math.round(b.width).toString()),u(Math.round(b.height).toString());return}if(Math.abs(v-b.width)<.5&&Math.abs(E-b.height)<.5)return;g.current={width:v,height:E};const R=v/b.width,q=E/b.height,$={x:b.x,y:b.y,width:v,height:E};i.forEach(V=>{Sm(e,V,b,$,R,q)})},[e,i,b,r,c]),T=p.useCallback(v=>{if(!b||i.length===0)return;const E=v.width,R=v.height;a(E.toString()),u(R.toString()),g.current={width:E,height:R};const q=E/b.width,$=R/b.height,V={x:b.x,y:b.y,width:E,height:R};i.forEach(U=>{Sm(e,U,b,V,q,$)}),m(E/R),h(!1)},[e,i,b]),S=p.useCallback(v=>{v.key==="Enter"?(w(),v.target.blur()):v.key==="Escape"&&(b&&(a(Math.round(b.width).toString()),u(Math.round(b.height).toString())),v.target.blur())},[w,b]);return b?l.jsxDEV("div",{className:"size-input-container",children:[l.jsxDEV("div",{className:"size-input-group",children:[l.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),l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"size-input",value:r,onChange:y,onBlur:w,onKeyDown:S},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),l.jsxDEV("button",{className:`size-lock-button ${o?"locked":""}`,onClick:()=>s(!o),title:o?"解锁比例":"锁定比例",children:o?l.jsxDEV(E0,{},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):l.jsxDEV(S0,{},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),l.jsxDEV("div",{className:"size-input-group",children:[l.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),l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"size-input",value:c,onChange:N,onBlur:w,onKeyDown:S},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),l.jsxDEV(at,{open:f,onOpenChange:h,placement:"bottom-end",sideOffset:8,children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("button",{className:`size-preset-button ${f?"active":""}`,title:n?"常用尺寸":"Preset Sizes",onClick:()=>h(!f),children:l.jsxDEV(zl,{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),l.jsxDEV(ct,{container:x,children:l.jsxDEV("div",{className:"size-preset-panel",children:k0.map(v=>l.jsxDEV("div",{className:"size-preset-category",children:[l.jsxDEV("div",{className:"size-preset-category-label",children:n?v.category:v.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),v.items.map(E=>l.jsxDEV("button",{className:"size-preset-item",onClick:()=>T(E),children:[l.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),l.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))]},v.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},QT=({board:e,title:t})=>{const{appState:n,setAppState:i}=Gt();return l.jsxDEV(ne,{className:Y("property-button"),visible:!0,icon:l.jsxDEV(D0,{},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=Be(e)[0],s=T0(o);to.getLinkElement(s)||to.wrapLink(s,"链接",""),setTimeout(()=>{const c=to.getLinkElement(s)[0],u=En.toDOMNode(s,c);i({...n,linkState:{editor:s,targetDom:u,targetElement:c,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)},Qh={zh:[`一张写实的半身人像,一位身穿水蓝色连身裙的年轻韩国亚洲女人走进旅馆大厅,女人脸上带着温暖的微笑,左手拿着白色棒球帽,右手拉着黄色行李箱。
|
|
27
|
+
`)}function Jk(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 eT(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 tT=e=>{const{insertFragment:t}=e;return e.insertFragment=(n,i,o)=>{if(Jk(n)){const s=eT(n);if(s&&s.trim()){const r=s.trim(),a=p0(r);if(a&&a.length>0){const u=Math.round(window.innerWidth*.5);f0(e,a,i,u);return}const c=Qk(r);Ar.insertText(e,i,c);return}}t(n,i,o)},e},nT=e=>{const t=e;return t.renderImage=(n,i)=>{const o=Pr.createRoot(n);o.render(l.jsxDEV(Bd,{...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:a=>{s={...s,...a},o.render(l.jsxDEV(Bd,{...s},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/plugins/with-common.tsx",lineNumber:30,columnNumber:21},void 0))}}},tT(Zk(t))},iT=p.forwardRef(({children:e,gap:t,align:n,justifyContent:i,className:o,style:s},r)=>l.jsxDEV("div",{className:Y("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)),oT=p.forwardRef(({children:e,gap:t,align:n,justifyContent:i,className:o,style:s},r)=>l.jsxDEV("div",{className:Y("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)),ft={Row:iT,Col:oT},Ye=Fn.forwardRef(({children:e,padding:t,className:n,style:i,...o},s)=>l.jsxDEV("div",{className:Y("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)),Xh=e=>e?typeof e=="string"?e:Vn(e)&&e.type==="solid"&&e.solid?e.solid.color:null:null,sT=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(e,n))return;const o=n.fill,s=Xh(o)||Tp(e,n);if(!h0(s))return;const r=Ti(s),a=bo(t)?r:xo(r,t);ue.setNode(e,{fill:a},i)}})},rT=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(e,n))return;const o=n.fill,s=Xh(o)||Tp(e,n),r=typeof s=="string"?ao(s):void 0;Fl(t)?ue.setNode(e,{fill:"none"},i):Hl(r)||bo(r)?ue.setNode(e,{fill:t},i):ue.setNode(e,{fill:xo(t,r)},i)}})},aT=(e,t)=>{Hn.setStrokeColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{const o=_p(e,n),s=Ti(o),r=bo(t)?s:xo(s,t);ue.setNode(e,{strokeColor:r},i)}})},lT=(e,t)=>{Hn.setStrokeColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{const o=_p(e,n),s=ao(o);Fl(t)?ue.setNode(e,{strokeColor:"none"},i):Hl(s)||bo(s)?ue.setNode(e,{strokeColor:t},i):ue.setNode(e,{strokeColor:xo(t,s)},i)}})},cT=(e,t)=>{Hn.setStrokeStyle(e,t,{getMemorizeKey:zn,callback:(n,i)=>{ue.setNode(e,{strokeStyle:t},i)}})},gm=(e,t)=>{Hn.setStrokeWidth(e,t,{getMemorizeKey:zn,callback:(n,i)=>{ue.setNode(e,{strokeWidth:t},i)}})},uT=(e,t,n)=>{const i=ao(t);Fl(n)?Jn.setTextColor(e,null):Hl(i)||bo(i)?Jn.setTextColor(e,n):Jn.setTextColor(e,xo(n,i))},dT=(e,t,n)=>{const i=Ti(t),o=bo(n)?i:xo(i,n);Jn.setTextColor(e,o)},Kh=(e,t)=>{try{Jn.setFontSize(e,t,16)}catch{const i=kt(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)}})}},mT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),Ee.addMark(i,"font-family",t)}catch(o){console.error("Failed to set font family:",o)}})},Aa=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"text-shadow",t):Ee.removeMark(i,"text-shadow")}catch(o){console.error("Failed to set text shadow:",o)}})},bm=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"text-gradient",t):Ee.removeMark(i,"text-gradient")}catch(o){console.error("Failed to set text gradient:",o)}})},Yh=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),Ee.addMark(i,"font-weight",String(t))}catch(o){console.error("Failed to set font weight:",o)}})},pT=(e,t)=>{try{let n;t==="left"?n=eo.left:t==="center"?n=eo.center:n=eo.right,Jn.setTextAlign(e,n)}catch(n){console.error("Failed to set text align:",n)}},fT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),Ee.addMark(i,"line-height",String(t))}catch(o){console.error("Failed to set line height:",o)}})},hT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i);const o=typeof t=="number"?`${t}px`:t;Ee.addMark(i,"letter-spacing",o)}catch(o){console.error("Failed to set letter spacing:",o)}})},gT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.bold:!1)?Ee.removeMark(n,"bold"):Ee.addMark(n,"bold",!0)}catch(i){console.error("Failed to toggle bold:",i)}})},bT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.italic:!1)?Ee.removeMark(n,"italic"):Ee.addMark(n,"italic",!0)}catch(i){console.error("Failed to toggle italic:",i)}})},xT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.underlined:!1)?Ee.removeMark(n,"underlined"):Ee.addMark(n,"underlined",!0)}catch(i){console.error("Failed to toggle underline:",i)}})},NT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.strikethrough:!1)?Ee.removeMark(n,"strikethrough"):Ee.addMark(n,"strikethrough",!0)}catch(i){console.error("Failed to toggle strikethrough:",i)}})},yT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.superscript:!1)?Ee.removeMark(n,"superscript"):(Ee.removeMark(n,"subscript"),Ee.addMark(n,"superscript",!0))}catch(i){console.error("Failed to toggle superscript:",i)}})},wT=e=>{const t=kt(e);t&&t.length>0&&t.forEach(n=>{try{Ct(n);const i=Ee.marks(n);(i?!!i.subscript:!1)?Ee.removeMark(n,"subscript"):(Ee.removeMark(n,"superscript"),Ee.addMark(n,"subscript",!0))}catch(i){console.error("Failed to toggle subscript:",i)}})},vT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"background-color",t):Ee.removeMark(i,"background-color")}catch(o){console.error("Failed to set background color:",o)}})},ET=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t&&t!=="none"?Ee.addMark(i,"text-transform",t):Ee.removeMark(i,"text-transform")}catch(o){console.error("Failed to set text transform:",o)}})},ST=(e,t,n)=>{const i=kt(e);i&&i.length>0&&i.forEach(o=>{try{Ct(o),t&&t>0?(Ee.addMark(o,"text-stroke",t),n&&Ee.addMark(o,"text-stroke-color",n)):(Ee.removeMark(o,"text-stroke"),Ee.removeMark(o,"text-stroke-color"))}catch(s){console.error("Failed to set text stroke:",s)}})},kT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"text-decoration-style",t):Ee.removeMark(i,"text-decoration-style")}catch(o){console.error("Failed to set text decoration style:",o)}})},TT=(e,t)=>{const n=kt(e);n&&n.length>0&&n.forEach(i=>{try{Ct(i),t?Ee.addMark(i,"text-decoration-color",t):Ee.removeMark(i,"text-decoration-color")}catch(o){console.error("Failed to set text decoration color:",o)}})},DT=e=>{const t=kt(e);if(t&&t.length>0){const n=t[0];try{return Ct(n),Ee.marks(n)||{}}catch(i){return console.error("Failed to get text marks:",i),{}}}return{}},_T=e=>{const t=kt(e);if(t&&t.length>0){const n=t[0];try{const{selection:i}=n;if(i){const o=Array.from(Ee.nodes(n,{at:i,match:s=>{const r=s.type==="paragraph",a="align"in s;return Ee.isBlock(n,s)&&(r||a)}}));if(o.length>0){const[s]=o[0],r=s.align;if(r===eo.right||r==="right")return"right";if(r===eo.center||r==="center")return"center";if(r===eo.left||r==="left")return"left"}}}catch(i){console.error("Failed to get text align:",i)}}return"left"},jT=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(e,n))return;const o=Dp(t),s={type:"gradient",gradient:t,fallbackColor:o};ue.setNode(e,{fill:o,fillConfig:s},i)}})},xm=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(e,n))return;const o="#FFFFFF",s={type:"image",image:t,fallbackColor:o};ue.setNode(e,{fill:o,fillConfig:s},i)}})},PT=(e,t)=>{Hn.setFillColor(e,null,{getMemorizeKey:zn,callback:(n,i)=>{if(!cn(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),ue.setNode(e,{fill:r,fillConfig:void 0},i);break}case"gradient":{const r={type:"linear",angle:90,stops:[{offset:0,color:"#FFFFFF"},{offset:1,color:"#000000"}]},a=(o==null?void 0:o.gradient)||r,c=Dp(a),u={type:"gradient",gradient:a,fallbackColor:c};ue.setNode(e,{fill:c,fillConfig:u},i);break}case"image":{const r={imageUrl:"",mode:"stretch",scale:1,offsetX:0,offsetY:0,rotation:0},a="#FFFFFF",c={type:"image",image:(o==null?void 0:o.image)||r,fallbackColor:a};ue.setNode(e,{fill:a,fillConfig:c},i);break}default:return}}})},CT=(e,t)=>{const n=Be(e);for(const i of n)if(Pt(i)){const o=e.children.findIndex(s=>s.id===i.id);o!==-1&&ue.setNode(e,{fillColor:t},[o])}},AT=({board:e,currentColor:t,fontColorIcon:n,title:i})=>{const[o,s]=p.useState(!1),r=F.getBoardContainer(e),a=p.useCallback(u=>{uT(e,t||u,u)},[e,t]),c=p.useCallback(u=>{t&&dT(e,t,u)},[e,t]);return l.jsxDEV(at,{sideOffset:12,open:o,onOpenChange:u=>{s(u)},placement:"top",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("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),l.jsxDEV(ct,{container:r,children:l.jsxDEV(Ye,{padding:4,className:Y(`${At}`),children:l.jsxDEV(Di,{value:t,onChange:a,onOpacityChange:c},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)},Tl=[{key:"title",labelZh:"标题",labelEn:"Title",previewSize:26,..._n.title},{key:"subtitle",labelZh:"副标题",labelEn:"Subtitle",previewSize:22,..._n.subtitle},{key:"h1",labelZh:"标题 1",labelEn:"Heading 1",previewSize:20,..._n.h1,divider:!0},{key:"h2",labelZh:"标题 2",labelEn:"Heading 2",previewSize:18,..._n.h2},{key:"h3",labelZh:"标题 3",labelEn:"Heading 3",previewSize:16,..._n.h3},{key:"h4",labelZh:"标题 4",labelEn:"Heading 4",previewSize:15,..._n.h4},{key:"body",labelZh:"正文",labelEn:"Body",previewSize:14,..._n.body,divider:!0},{key:"caption",labelZh:"注释",labelEn:"Caption",previewSize:13,..._n.caption},{key:"footnote",labelZh:"脚注",labelEn:"Footnote",previewSize:12,..._n.footnote}],MT=e=>{if(!e)return null;const t=parseInt(e,10);if(isNaN(t))return null;for(const n of Tl)if(n.fontSize===t)return n.key;return null},IT=({board:e,currentFontSize:t,title:n})=>{const[i,o]=p.useState(!1),{language:s}=Se(),r=F.getBoardContainer(e),a=MT(t),c=p.useCallback(d=>{Kh(e,String(d.fontSize)),Yh(e,d.fontWeight),Jn.setTextColor(e,d.color),o(!1)},[e]),u=(()=>{if(a){const d=Tl.find(m=>m.key===a);if(d)return s==="zh"?d.labelZh:d.labelEn}return t||"16"})();return l.jsxDEV(at,{sideOffset:12,open:i,onOpenChange:o,placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button"),selected:i,visible:!0,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>o(!i),children:l.jsxDEV("div",{style:{fontSize:"12px",fontWeight:"bold",minWidth:"20px"},children:u},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:97,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:88,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/font-size-button.tsx",lineNumber:87,columnNumber:7},void 0),l.jsxDEV(ct,{container:r,children:l.jsxDEV(Ye,{padding:4,className:Y(`${At}`),children:l.jsxDEV(ft.Col,{gap:0,style:{minWidth:"200px"},children:[l.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),l.jsxDEV("div",{style:{maxHeight:"320px",overflowY:"auto"},children:Tl.map(d=>{const m=a===d.key;return l.jsxDEV(Fn.Fragment,{children:[d.divider&&l.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),l.jsxDEV("div",{onClick:()=>c(d),style:{padding:"6px 10px",cursor:"pointer",backgroundColor:m?"#f0f7ff":"transparent",borderLeft:m?"3px solid #0052d9":"3px solid transparent",borderRadius:"2px",transition:"background-color 0.15s",display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"8px"},onMouseEnter:f=>{m||(f.currentTarget.style.backgroundColor="#f5f5f5")},onMouseLeave:f=>{m||(f.currentTarget.style.backgroundColor="transparent")},children:[l.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),l.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)},VT=({board:e,currentColor:t,title:n,hasStrokeStyle:i,hasStrokeWidth:o,currentStrokeWidth:s,children:r})=>{const[a,c]=p.useState(!1),[u,d]=p.useState(String(s||2)),m=t&&Ti(t),f=t?ao(t):100,h=F.getBoardContainer(e);Fn.useEffect(()=>{d(String(s||2))},[s]);const g=Ap(f)?g0:Mp(m)?b0:void 0,x=g?l.jsxDEV(g,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/stroke-button.tsx",lineNumber:67,columnNumber:32},void 0):void 0,b=E=>{cT(e,E)},y=p.useCallback(E=>{lT(e,E)},[e]),N=p.useCallback(E=>{aT(e,E)},[e]),w=p.useCallback(E=>{gm(e,E),d(String(E))},[e]),T=p.useCallback(E=>{d(E.target.value)},[]),S=p.useCallback(()=>{const E=parseInt(u,10);!isNaN(E)&&E>=1&&E<=100?gm(e,E):d(String(s||2))},[e,u,s]),v=p.useCallback(E=>{E.key==="Enter"?(S(),E.target.blur()):E.key==="Escape"&&(d(String(s||2)),E.target.blur())},[S,s]);return l.jsxDEV(at,{sideOffset:12,crossAxisOffset:40,open:a,onOpenChange:E=>{c(E)},placement:"left",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button"),visible:!0,icon:x,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>{c(!a)},children:!x&&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),l.jsxDEV(ct,{container:h,children:l.jsxDEV(Ye,{padding:4,className:Y(`${At}`,"stroke-setting",{"has-stroke-style":i}),children:l.jsxDEV(ft.Col,{children:[o&&l.jsxDEV("div",{className:"stroke-width-section",style:{marginBottom:"8px"},children:l.jsxDEV(ft.Row,{gap:2,align:"center",children:[l.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),l.jsxDEV("div",{style:{flex:1,minWidth:"100px"},children:l.jsxDEV(Mr,{value:s||2,min:1,max:100,step:1,onChange:E=>w(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),l.jsxDEV("div",{className:"stroke-width-input-wrapper",children:[l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:u,onChange:T,onBlur:S,onKeyDown:v,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),l.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&&l.jsxDEV("div",{className:"stroke-style-section",children:[l.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),l.jsxDEV(ft.Row,{className:Y("stroke-style-picker"),children:[l.jsxDEV(ne,{visible:!0,icon:l.jsxDEV(jp,{},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:()=>b(ei.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),l.jsxDEV(ne,{visible:!0,icon:l.jsxDEV(Pp,{},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:()=>b(ei.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),l.jsxDEV(ne,{visible:!0,icon:l.jsxDEV(Cp,{},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:()=>b(ei.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),l.jsxDEV(Di,{value:t,onChange:y,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)},UT="drawnix-color-history",Nm=24,ym=12,wm=zs.createInstance({name:"drawnix",storeName:UT});let Pe=null;function Dl(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 RT(e,t){return Dl(e)===Dl(t)}class qT{constructor(){this.initialized=!1}async initialize(){if(!this.initialized)try{Pe=await wm.getItem("history")||{colors:[],gradients:[]},this.initialized=!0}catch(t){console.error("[ColorHistoryService] Failed to initialize:",t),Pe={colors:[],gradients:[]},this.initialized=!0}}async saveData(){if(Pe)try{await wm.setItem("history",Pe)}catch(t){console.error("[ColorHistoryService] Failed to save data:",t)}}async addColor(t){if(await this.initialize(),!Pe)return;const n=t.toUpperCase(),i=Pe.colors.findIndex(o=>o.color.toUpperCase()===n);if(i>=0){Pe.colors[i].lastUsedAt=Date.now(),Pe.colors[i].useCount+=1;const[o]=Pe.colors.splice(i,1);Pe.colors.unshift(o)}else Pe.colors.unshift({color:n,lastUsedAt:Date.now(),useCount:1}),Pe.colors.length>Nm&&(Pe.colors=Pe.colors.slice(0,Nm));await this.saveData()}async addGradient(t){if(await this.initialize(),!Pe)return;const n=Dl(t),i=Pe.gradients.findIndex(o=>RT(o.config,t));if(i>=0){Pe.gradients[i].lastUsedAt=Date.now(),Pe.gradients[i].useCount+=1;const[o]=Pe.gradients.splice(i,1);Pe.gradients.unshift(o)}else Pe.gradients.unshift({id:n,config:{...t},lastUsedAt:Date.now(),useCount:1}),Pe.gradients.length>ym&&(Pe.gradients=Pe.gradients.slice(0,ym));await this.saveData()}async getColors(){return await this.initialize(),(Pe==null?void 0:Pe.colors)||[]}async getGradients(){return await this.initialize(),(Pe==null?void 0:Pe.gradients)||[]}async removeColor(t){if(await this.initialize(),!Pe)return;const n=t.toUpperCase();Pe.colors=Pe.colors.filter(i=>i.color.toUpperCase()!==n),await this.saveData()}async removeGradient(t){await this.initialize(),Pe&&(Pe.gradients=Pe.gradients.filter(n=>n.id!==t),await this.saveData())}async clearAll(){Pe={colors:[],gradients:[]},await this.saveData()}resetCache(){Pe=null,this.initialized=!1}}const xn=new qT;function BT(){const[e,t]=p.useState([]),[n,i]=p.useState([]),[o,s]=p.useState(!0),r=p.useCallback(async()=>{try{const[m,f]=await Promise.all([xn.getColors(),xn.getGradients()]);t(m),i(f)}catch(m){console.error("[useColorHistory] Failed to load data:",m)}finally{s(!1)}},[]);p.useEffect(()=>{r()},[r]);const a=p.useCallback(async m=>{await xn.addColor(m);const f=await xn.getColors();t(f)},[]),c=p.useCallback(async m=>{await xn.addGradient(m);const f=await xn.getGradients();i(f)},[]),u=p.useCallback(async m=>{await xn.removeColor(m);const f=await xn.getColors();t(f)},[]),d=p.useCallback(async m=>{await xn.removeGradient(m);const f=await xn.getGradients();i(f)},[]);return{colors:e,gradients:n,isLoading:o,addColor:a,addGradient:c,removeColor:u,removeGradient:d,refresh:r}}function yi(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 LT(e){const t=e.match(/linear-gradient\((\d+)deg,\s*(.+)\)/);if(t){const i=parseInt(t[1],10),o=t[2],s=vm(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=vm(s);return{type:"radial",centerX:i,centerY:o,stops:r.length>=2?r:[{color:"#FF6B6B",offset:0},{color:"#4ECDC4",offset:1}]}}return Ir}function vm(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 Em=[{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}],Zh=({value:e,onChange:t,showPresets:n=!0,showHistory:i=!0,presetCategories:o,customPresets:s,compact:r=!1,inline:a=!1,onSavePreset:c,onDeletePreset:u})=>{const{language:d}=Se(),{addGradient:m}=BT(),[f,h]=p.useState(e||Ir),[g,x]=p.useState(0),[b,y]=p.useState(null),[N,w]=p.useState(!1),T=p.useRef(null);p.useEffect(()=>{e&&h(e)},[e]);const S=p.useCallback(X=>{h(X),t==null||t(X),m(X)},[t,m]),v=p.useCallback(X=>{S(X.config)},[S]),E=p.useCallback(X=>{const ae={...f,...X};S(ae)},[f,S]),R=p.useCallback(X=>{if(f.type!==X)if(X==="linear"){const ae={type:"linear",angle:90,stops:f.stops};S(ae)}else{const ae={type:"radial",centerX:.5,centerY:.5,stops:f.stops};S(ae)}},[f,S]),q=p.useCallback((X,ae)=>{const le=[...f.stops];le[X]={...le[X],...ae},le.sort((we,Fe)=>we.offset-Fe.offset);const be=le.findIndex(we=>we.color===(ae.color??f.stops[X].color));be!==-1&&be!==g&&x(be),E({stops:le})},[f.stops,g,E]),$=p.useCallback(()=>{if(f.stops.length>=8)return;const X=.5,le=[...f.stops,{color:"#888888",offset:X}].sort((be,we)=>be.offset-we.offset);E({stops:le}),x(le.findIndex(be=>be.offset===X))},[f.stops,E]),V=p.useCallback(X=>{if(f.stops.length<=2)return;const ae=f.stops.filter((le,be)=>be!==X);E({stops:ae}),x(Math.min(g,ae.length-1))},[f.stops,g,E]),U=p.useCallback((X,ae)=>{if(!T.current)return;const le=T.current.getBoundingClientRect(),we=Math.max(0,Math.min(X.clientX-le.left,le.width))/le.width;q(ae,{offset:we})},[q]),A=p.useCallback((X,ae)=>{X.preventDefault(),X.stopPropagation(),x(ae);const le=X.clientX,be=X.clientY;let we=!1;const Fe=3,K=We=>{const it=Math.abs(We.clientX-le),Ke=Math.abs(We.clientY-be);(it>Fe||Ke>Fe)&&(we=!0,w(!0),U(We,ae))},Ce=()=>{document.removeEventListener("mousemove",K),document.removeEventListener("mouseup",Ce),we||y(ae),setTimeout(()=>{w(!1)},0)};document.addEventListener("mousemove",K),document.addEventListener("mouseup",Ce)},[U]),_=p.useCallback(X=>{if(N||f.stops.length>=8||X.target!==T.current||!T.current)return;const le=T.current.getBoundingClientRect(),be=X.clientX-le.left,we=Math.max(0,Math.min(be/le.width,1)),Fe=[...f.stops].sort((Ke,D)=>Ke.offset-D.offset);let K=Fe[0];for(let Ke=0;Ke<Fe.length-1;Ke++)if(Fe[Ke].offset<=we&&Fe[Ke+1].offset>=we){K=Fe[Ke];break}const Ce=K.color,We=[...f.stops,{color:Ce,offset:we}].sort((Ke,D)=>Ke.offset-D.offset);E({stops:We});const it=We.findIndex(Ke=>Ke.offset===we);x(it)},[N,f.stops,E]);p.useMemo(()=>yi(f),[f]),p.useMemo(()=>{const X=[{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?X.filter(ae=>o.includes(ae.key)):X},[d,o]);const M=p.useMemo(()=>s?s.length>0&&typeof s[0]=="string"?s.map((X,ae)=>({id:`custom-${ae}`,name:`Custom ${ae+1}`,nameZh:`自定义 ${ae+1}`,category:"custom",config:LT(X),css:X})):s:fu,[s]),P=p.useCallback(()=>{var le;if(f.type!=="radial")return null;const{centerX:X,centerY:ae}=f;return(le=Em.find(be=>Math.abs(be.x-X)<.01&&Math.abs(be.y-ae)<.01))==null?void 0:le.key},[f]),Z=p.useMemo(()=>s&&s.length>0&&typeof s[0]=="string",[s]),pe=p.useMemo(()=>yi(f),[f]),I=p.useCallback(X=>pe===X,[pe]),G=()=>{const X=fu.slice(0,10),ae=Z?M:[];return l.jsxDEV("div",{className:"ge-quick-presets",children:[l.jsxDEV("div",{className:"ge-quick-presets-header",children:l.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),l.jsxDEV("div",{className:"ge-quick-presets-grid",children:[ae.map((le,be)=>{const we=le.css||yi(le.config);return l.jsxDEV("button",{className:Y("ge-quick-preset-item ge-quick-preset-item--custom",{"ge-quick-preset-item--selected":I(we)}),onClick:()=>v(le),title:d==="zh"?le.nameZh:le.name,children:[l.jsxDEV("div",{className:"ge-quick-preset-preview",style:{background:we}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:453,columnNumber:17},void 0),u&&l.jsxDEV("button",{className:"ge-quick-preset-delete",onClick:Fe=>{Fe.stopPropagation(),u(be)},children:"×"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:458,columnNumber:19},void 0)]},le.id,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:445,columnNumber:15},void 0)}),X.map(le=>{const be=yi(le.config);return l.jsxDEV("button",{className:Y("ge-quick-preset-item",{"ge-quick-preset-item--selected":I(be)}),onClick:()=>v(le),title:d==="zh"?le.nameZh:le.name,children:l.jsxDEV("div",{className:"ge-quick-preset-preview",style:{background:be}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:483,columnNumber:17},void 0)},le.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)},ce=()=>l.jsxDEV("div",{className:Y("ge-custom-editor",{"ge-custom-editor--inline":a}),children:[l.jsxDEV("div",{className:"ge-type-section",children:l.jsxDEV("div",{className:"ge-type-buttons",children:[l.jsxDEV("button",{className:Y("ge-type-btn",{active:f.type==="linear"}),onClick:()=>R("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),l.jsxDEV("button",{className:Y("ge-type-btn",{active:f.type==="radial"}),onClick:()=>R("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),l.jsxDEV("div",{className:"ge-color-section",children:[l.jsxDEV("div",{className:"ge-section-header",children:[l.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),l.jsxDEV("div",{className:"ge-stop-actions",children:[l.jsxDEV("button",{className:"ge-action-btn",onClick:$,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),l.jsxDEV("button",{className:"ge-action-btn",onClick:()=>V(g),disabled:f.stops.length<=2,title:d==="zh"?"删除色标":"Remove stop",children:"−"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:531,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:522,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:518,columnNumber:9},void 0),l.jsxDEV("div",{className:"ge-gradient-bar-wrapper",children:l.jsxDEV("div",{ref:T,className:"ge-gradient-bar",style:{background:`linear-gradient(90deg, ${f.stops.map(X=>`${X.color} ${Math.round(X.offset*100)}%`).join(", ")})`},onClick:_,children:f.stops.map((X,ae)=>l.jsxDEV(at,{open:b===ae,onOpenChange:le=>y(le?ae:null),children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("button",{className:Y("ge-stop-handle",{selected:g===ae}),style:{left:`${X.offset*100}%`,backgroundColor:X.color},onMouseDown:le=>{A(le,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),l.jsxDEV(ct,{children:l.jsxDEV(Ye,{padding:4,className:"ge-color-picker-popover "+At,children:l.jsxDEV(Di,{value:X.color,onChange:le=>q(ae,{color:le}),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"&&l.jsxDEV("div",{className:"ge-origin-section",children:[l.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),l.jsxDEV("div",{className:"ge-origin-buttons",children:Em.map(X=>l.jsxDEV("button",{className:Y("ge-origin-btn",{active:P()===X.key}),onClick:()=>E({centerX:X.x,centerY:X.y}),children:d==="zh"?X.labelZh:X.labelEn},X.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"&&l.jsxDEV("div",{className:"ge-angle-section",children:[l.jsxDEV("div",{className:"ge-section-header",children:[l.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),l.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),l.jsxDEV("input",{type:"range",min:0,max:360,value:f.angle,onChange:X=>E({angle:Number(X.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),c&&l.jsxDEV("div",{className:"ge-save-section",children:l.jsxDEV("button",{className:"ge-save-btn",onClick:c,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),G()]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:497,columnNumber:5},void 0);return r||a?l.jsxDEV("div",{className:Y("gradient-editor",{"gradient-editor--compact":r,"gradient-editor--inline":a}),children:ce()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:657,columnNumber:7},void 0):l.jsxDEV("div",{className:"gradient-editor",children:ce()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/gradient-editor/GradientEditor.tsx",lineNumber:669,columnNumber:5},void 0)},Ma=jt.CUSTOM_GRADIENTS,OT=({value:e,onChange:t,inline:n=!1})=>{const{language:i}=Se(),{confirm:o,confirmDialog:s}=Vr(),[r,a]=p.useState([]),[c,u]=p.useState(e||Ir);p.useEffect(()=>{let h=!0;return Sn.get(Ma).then(g=>{h&&g&&a(g)}).catch(g=>{console.warn("Failed to load gradient data:",g)}),()=>{h=!1}},[]),p.useEffect(()=>{e&&u(e)},[e]);const d=p.useCallback(h=>{u(h),t==null||t(h)},[t]),m=p.useCallback(()=>{const h=yi(c),x=[{id:`custom-${Date.now()}`,css:h},...r].slice(0,8);a(x),Sn.set(Ma,x).catch(b=>{console.warn("Failed to save custom gradients:",b)})},[c,r]),f=p.useCallback(async h=>{const g=r[h];if(!g||!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 b=r.filter(y=>y.id!==g.id);a(b),Sn.set(Ma,b).catch(y=>{console.warn("Failed to save custom gradients:",y)})},[o,r,i]);return l.jsxDEV(l.Fragment,{children:[l.jsxDEV(Zh,{value:c,onChange:d,showPresets:!0,showHistory:!0,inline:n,customPresets:r.map(h=>h.css),onSavePreset:m,onDeletePreset:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/GradientFillPanel.tsx",lineNumber:110,columnNumber:7},void 0),s]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/GradientFillPanel.tsx",lineNumber:109,columnNumber:5},void 0)},FT=p.lazy(()=>Me(()=>import("./tool-windows-BTXOQvEU.js").then(e=>e.p2),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),HT=[{value:"stretch",labelZh:"拉伸",labelEn:"Stretch",icon:"⬌"},{value:"tile",labelZh:"平铺",labelEn:"Tile",icon:"⊞"},{value:"fit",labelZh:"适应",labelEn:"Fit",icon:"⊡"}],zT=({value:e,onChange:t,onOpenMediaLibrary:n,externalMediaLibraryControl:i=!1})=>{const{language:o}=Se(),[s,r]=p.useState(e||Ip),[a,c]=p.useState(!1),[u,d]=p.useState(!1),m=p.useRef(null);p.useEffect(()=>{e&&r(e)},[e]);const f=p.useCallback(S=>{const v={...s,...S};r(v),t==null||t(v)},[s,t]),h=p.useMemo(()=>x0(S=>{t==null||t(S)},300),[t]),g=p.useCallback(S=>{const v={...s,...S};r(v),h(v)},[s,h]),x=p.useCallback((S,v,E,R,q=1)=>{const $=parseFloat(v);if(isNaN($))return;const V=Math.max(E,Math.min(R,$)),U=q===1?V:V/q;f({[S]:U})},[f]),b=p.useCallback(S=>{f({imageUrl:S.url}),c(!1)},[f]),y=p.useCallback(async S=>{var q;const v=(q=S.target.files)==null?void 0:q[0];if(!v)return;if(!v.type.startsWith("image/")){re.warning(o==="zh"?"请选择图片文件":"Please select an image file");return}if(v.size>25*1024*1024){re.warning(o==="zh"?"图片大小不能超过 25MB":"Image size cannot exceed 25MB");return}let E=v;if(v.size>10*1024*1024){const $=N0(v.size/1048576),V=re.loading({content:o==="zh"?`正在压缩图片 (${(v.size/1024/1024).toFixed(1)}MB)...`:`Compressing image (${(v.size/1024/1024).toFixed(1)}MB)...`,duration:0,placement:"top"});try{E=await y0(v,$.targetSizeMB),re.close(V),re.success({content:o==="zh"?`压缩完成: ${(v.size/1024/1024).toFixed(1)}MB → ${(E.size/1024/1024).toFixed(1)}MB`:`Compressed: ${(v.size/1024/1024).toFixed(1)}MB → ${(E.size/1024/1024).toFixed(1)}MB`,duration:2})}catch(U){re.close(V),console.error("[ImageFillPanel] Compression failed:",U),re.warning(o==="zh"?"图片压缩失败":"Image compression failed");return}}const R=new FileReader;R.onload=$=>{var U;const V=(U=$.target)==null?void 0:U.result;f({imageUrl:V})},R.readAsDataURL(E),S.target.value=""},[o,f]),N=p.useCallback(()=>{var S;(S=m.current)==null||S.click()},[]),w=p.useCallback(()=>{i&&n?n():c(!0)},[i,n]),T=()=>s.imageUrl?l.jsxDEV("div",{className:"ifp-image-preview",children:[l.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),l.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):l.jsxDEV("div",{className:"ifp-image-placeholder",children:[l.jsxDEV(Up,{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),l.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 l.jsxDEV("div",{className:"image-fill-panel",children:[l.jsxDEV("input",{ref:m,type:"file",accept:"image/*",style:{display:"none"},onChange:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:240,columnNumber:7},void 0),l.jsxDEV("div",{className:"ifp-image-section",children:[l.jsxDEV("div",{className:"ifp-image-container",onClick:()=>!s.imageUrl&&w(),children:T()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:250,columnNumber:9},void 0),l.jsxDEV("div",{className:"ifp-image-actions",children:[l.jsxDEV("button",{className:"ifp-action-btn ifp-action-btn--primary",onClick:w,children:[l.jsxDEV(Ur,{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),l.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),l.jsxDEV("button",{className:"ifp-action-btn",onClick:N,children:[l.jsxDEV(Rr,{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),l.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&&l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{className:"ifp-control-section",children:[l.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),l.jsxDEV("div",{className:"ifp-mode-buttons",children:HT.map(S=>l.jsxDEV("button",{className:Y("ifp-mode-btn",{active:s.mode===S.value}),onClick:()=>f({mode:S.value}),title:o==="zh"?S.labelZh:S.labelEn,children:[l.jsxDEV("span",{className:"ifp-mode-icon",children:S.icon},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:282,columnNumber:19},void 0),l.jsxDEV("span",{className:"ifp-mode-label",children:o==="zh"?S.labelZh:S.labelEn},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:283,columnNumber:19},void 0)]},S.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),l.jsxDEV("div",{className:"ifp-advanced-section",children:[l.jsxDEV("button",{className:"ifp-advanced-toggle",onClick:()=>d(!u),children:[l.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),u?l.jsxDEV(Vp,{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):l.jsxDEV(zl,{size:14},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:298,columnNumber:57},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/ImageFillPanel.tsx",lineNumber:293,columnNumber:13},void 0),u&&l.jsxDEV("div",{className:"ifp-advanced-content",children:[l.jsxDEV("div",{className:"ifp-control-row",children:[l.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),l.jsxDEV("div",{className:"ifp-control-input",children:[l.jsxDEV("input",{type:"range",min:50,max:200,value:(s.scale??1)*100,onChange:S=>g({scale:Number(S.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),l.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[l.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((s.scale??1)*100),min:50,max:200,onChange:S=>x("scale",S.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),l.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),l.jsxDEV("div",{className:"ifp-control-row",children:[l.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),l.jsxDEV("div",{className:"ifp-control-input",children:[l.jsxDEV("input",{type:"range",min:-100,max:100,value:(s.offsetX??0)*100,onChange:S=>g({offsetX:Number(S.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),l.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[l.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((s.offsetX??0)*100),min:-100,max:100,onChange:S=>x("offsetX",S.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),l.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),l.jsxDEV("div",{className:"ifp-control-row",children:[l.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),l.jsxDEV("div",{className:"ifp-control-input",children:[l.jsxDEV("input",{type:"range",min:-100,max:100,value:(s.offsetY??0)*100,onChange:S=>g({offsetY:Number(S.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),l.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[l.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:Math.round((s.offsetY??0)*100),min:-100,max:100,onChange:S=>x("offsetY",S.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),l.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),l.jsxDEV("div",{className:"ifp-control-row",children:[l.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),l.jsxDEV("div",{className:"ifp-control-input",children:[l.jsxDEV("input",{type:"range",min:0,max:360,value:s.rotation??0,onChange:S=>g({rotation:Number(S.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),l.jsxDEV("div",{className:"ifp-control-value-wrapper",children:[l.jsxDEV("input",{type:"number",className:"ifp-control-value-input",value:s.rotation??0,min:0,max:360,onChange:S=>x("rotation",S.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),l.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),l.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&&a&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(FT,{isOpen:a,onClose:()=>c(!1),mode:ii.SELECT,filterType:In.IMAGE,onSelect:b,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)},GT=[{value:"solid",labelZh:"纯色",labelEn:"Solid"},{value:"gradient",labelZh:"渐变",labelEn:"Gradient"},{value:"image",labelZh:"图片",labelEn:"Image"}],WT=({value:e,onSolidChange:t,onOpacityChange:n,onGradientChange:i,onImageChange:o,onFillTypeChange:s,showClose:r=!1,onClose:a,onOpenMediaLibrary:c})=>{const{language:u}=Se(),d=p.useMemo(()=>e?ts(e)?w0(e):Vn(e)?e:{type:"solid",solid:{color:"#FFFFFF"}}:{type:"solid",solid:{color:"#FFFFFF"}},[e]),[m,f]=p.useState(d.type);p.useEffect(()=>{f(d.type)},[d.type]);const[h,g]=p.useState(d.gradient||Ir),[x,b]=p.useState(d.image||Ip);p.useEffect(()=>{d.gradient&&g(d.gradient)},[d.gradient]),p.useEffect(()=>{d.image&&b(d.image)},[d.image]);const y=p.useCallback(v=>{f(v)},[]),N=p.useCallback(v=>{s==null||s("solid"),t==null||t(v)},[t,s]),w=p.useCallback(v=>{g(v),s==null||s("gradient"),i==null||i(v)},[i,s]),T=p.useCallback(v=>{b(v),s==null||s("image"),o==null||o(v)},[o,s]),S=p.useMemo(()=>ts(e)?e:Vn(e)&&e.solid?e.solid.color:"#FFFFFF",[e]);return l.jsxDEV("div",{className:"fill-panel",children:[l.jsxDEV("div",{className:"fill-panel__header",children:[l.jsxDEV("span",{className:"fill-panel__title",children:u==="zh"?"填充":"Fill"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:160,columnNumber:9},void 0),r&&l.jsxDEV("button",{className:"fill-panel__close",onClick:a,children:"×"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:164,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:159,columnNumber:7},void 0),l.jsxDEV("div",{className:"fill-panel__tabs",children:GT.map(v=>l.jsxDEV("button",{className:Y("fill-panel__tab",{active:m===v.value}),onClick:()=>y(v.value),children:u==="zh"?v.labelZh:v.labelEn},v.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),l.jsxDEV("div",{className:"fill-panel__content",children:[m==="solid"&&l.jsxDEV("div",{className:"fill-panel__solid",children:l.jsxDEV(Di,{value:S,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),m==="gradient"&&l.jsxDEV(OT,{value:h,onChange:w},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/fill-panel/FillPanel.tsx",lineNumber:196,columnNumber:11},void 0),m==="image"&&l.jsxDEV(zT,{value:x,onChange:T,onOpenMediaLibrary:c,externalMediaLibraryControl:!!c},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)},$T=p.lazy(()=>Me(()=>import("./index-7Yy5taJZ.js"),__vite__mapDeps([0,1]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),XT=({board:e,currentColor:t,title:n,children:i})=>{const{language:o}=Se(),[s,r]=p.useState(!1),[a,c]=p.useState(!1),{hexColor:u,opacity:d}=p.useMemo(()=>{var T;if(!t)return{hexColor:void 0,opacity:100};if(ts(t)){const S=Ti(t),v=ao(t);return{hexColor:S,opacity:v}}if(Vn(t))switch(t.type){case"solid":if(t.solid){const S=Ti(t.solid.color),v=ao(t.solid.color);return{hexColor:S,opacity:v}}break;case"gradient":if((T=t.gradient)!=null&&T.stops[0])return{hexColor:t.gradient.stops[0].color,opacity:100};break;case"image":return{hexColor:"#888888",opacity:100}}return{hexColor:void 0,opacity:100}},[t]),m=!u||Ap(d)?l.jsxDEV(v0,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:96,columnNumber:48},void 0):void 0,f=p.useCallback(T=>{rT(e,T),CT(e,T)},[e]),h=p.useCallback(T=>{sT(e,T)},[e]),g=p.useCallback(T=>{jT(e,T)},[e]),x=p.useCallback(T=>{xm(e,T)},[e]),b=p.useCallback(T=>{PT(e,T)},[e]),y=p.useCallback(()=>{r(!1)},[]),N=p.useCallback(()=>{c(!0)},[]),w=p.useCallback(T=>{xm(e,{imageUrl:T.url,mode:"stretch",scale:1,offsetX:0,offsetY:0,rotation:0}),c(!1)},[e]);return l.jsxDEV(at,{sideOffset:12,crossAxisOffset:40,open:s,onOpenChange:T=>{!T&&a||r(T)},placement:"left",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button"),visible:!0,icon:m,type:"button",tooltip:n,"aria-label":n,onPointerUp:()=>{r(!s)},children:!m&&i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:182,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/fill-button.tsx",lineNumber:181,columnNumber:7},void 0),l.jsxDEV(ct,{children:l.jsxDEV(Ye,{padding:0,className:Y(`${At}`,"fill-setting"),children:l.jsxDEV(WT,{value:t,onSolidChange:f,onOpacityChange:h,onGradientChange:g,onImageChange:x,onFillTypeChange:b,showClose:!0,onClose:y,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),a&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV($T,{isOpen:a,onClose:()=>c(!1),mode:ii.SELECT,filterType:In.IMAGE,onSelect:w,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)},KT=({board:e,currentRadius:t,title:n,selectionRect:i})=>{const[o,s]=p.useState(!1),[r,a]=p.useState({top:0,left:0}),[c,u]=p.useState(""),d=p.useRef(null),m=p.useRef(null),f=F.getBoardContainer(e),{t:h}=Se(),g=n||h("toolbar.cornerRadius")||"圆角",x=t??0;p.useEffect(()=>{u(String(x))},[x]),p.useEffect(()=>{if(o&&d.current){const v=d.current.getBoundingClientRect(),E=220,R=8;let q=v.left+v.width/2-E/2,$=v.bottom+R;const V=window.innerWidth,U=window.innerHeight;q+E>V-16&&(q=V-E-16),q<16&&(q=16),$+40>U-16&&($=v.top-40-R),a({left:q,top:$})}},[o]),p.useEffect(()=>{if(!o)return;const v=R=>{const q=R.target;m.current&&m.current.contains(q)||d.current&&d.current.contains(q)||q.closest(".popup-toolbar")!==null||s(!1)},E=setTimeout(()=>{document.addEventListener("mousedown",v)},100);return()=>{clearTimeout(E),document.removeEventListener("mousedown",v)}},[o]);const b=p.useCallback(v=>{const E=Math.max(0,Math.min(100,v));Be(e).filter(q=>Je.isPenPath(q)).forEach(q=>{const $=e.children.findIndex(V=>V.id===q.id);$>=0&&ue.setNode(e,{cornerRadius:E},[$])})},[e]),y=p.useCallback(v=>{u(String(v)),b(v)},[b]),N=p.useCallback(v=>{u(v.target.value)},[]),w=p.useCallback(()=>{const v=parseInt(c,10);if(isNaN(v))u(String(x));else{const E=Math.max(0,Math.min(100,v));u(String(E)),b(E)}},[c,x,b]),T=p.useCallback(v=>{v.key==="Enter"&&v.target.blur()},[]),S=p.useCallback(()=>{s(!o)},[o]);return l.jsxDEV(l.Fragment,{children:[l.jsxDEV(ne,{ref:d,className:Y("property-button","corner-radius-button",{"is-active":o}),visible:!0,type:"button",tooltip:g,"aria-label":g,onPointerUp:S,children:l.jsxDEV("svg",{viewBox:"0 0 24 24",width:"18",height:"18",children:l.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&&qr.createPortal(l.jsxDEV("div",{ref:m,className:Y(At,"corner-radius-panel"),style:{position:"fixed",top:r.top,left:r.left,zIndex:5e3},onPointerDown:v=>v.stopPropagation(),onMouseDown:v=>v.stopPropagation(),children:l.jsxDEV(Ye,{padding:2,className:"corner-radius-setting-compact",children:l.jsxDEV("div",{className:"corner-radius-row",children:[l.jsxDEV("span",{className:"corner-radius-label",children:g},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/corner-radius-button.tsx",lineNumber:204,columnNumber:15},void 0),l.jsxDEV("div",{className:"corner-radius-slider",children:l.jsxDEV(Mr,{value:x,min:0,max:100,step:1,onChange:v=>y(v),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),l.jsxDEV("input",{type:"text",className:"corner-radius-input",value:c,onChange:N,onBlur:w,onKeyDown:T},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),l.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)},YT=(e,t)=>{try{return Lt(e,[t],!1)}catch{return null}},Sm=(e,t,n,i,o,s)=>{const r=e.children.findIndex(g=>g.id===t.id);if(r<0)return;const a=YT(e,t);if(!a)return;const c=(a.x-n.x)/n.width,u=(a.y-n.y)/n.height,d=i.x+c*i.width,m=i.y+u*i.height,f=a.width*o,h=a.height*s;if(vi(t)){const g=[[d,m],[d+f,m+h]];ue.setNode(e,{points:g},[r])}else if(H.isDrawElement(t)){const g=[[d,m],[d+f,m+h]];ue.setNode(e,{points:g},[r])}else if(nn.isMindElement(e,t)){const g=[[d,m],[d+f,m+h]];ue.setNode(e,{points:g},[r])}else if($e.isFreehand(t)){const x=t.points.map(b=>{const y=(b[0]-n.x)/n.width,N=(b[1]-n.y)/n.height;return[i.x+y*i.width,i.y+N*i.height]});ue.setNode(e,{points:x},[r])}else if(Je.isPenPath(t)){const x=t.anchors.map(y=>{const N=[y.point[0]*o,y.point[1]*s],w=y.handleIn?[y.handleIn[0]*o,y.handleIn[1]*s]:void 0,T=y.handleOut?[y.handleOut[0]*o,y.handleOut[1]*s]:void 0;return{...y,point:N,handleIn:w,handleOut:T}}),b=[d,m];ue.setNode(e,{points:[b,b],anchors:x},[r])}},ZT=({board:e})=>{const{language:t}=Se(),n=t==="zh",i=Be(e),[o,s]=p.useState(!0),[r,a]=p.useState(""),[c,u]=p.useState(""),[d,m]=p.useState(1),[f,h]=p.useState(!1),g=p.useRef(null),x=F.getBoardContainer(e),b=i.length>0?Lt(e,i,!1):null;p.useEffect(()=>{b&&(g.current?(a(Math.round(g.current.width).toString()),u(Math.round(g.current.height).toString()),g.current=null):(a(Math.round(b.width).toString()),u(Math.round(b.height).toString())),m(b.width/b.height))},[b==null?void 0:b.width,b==null?void 0:b.height]);const y=p.useCallback(v=>{const E=v.target.value;if(a(E),o&&b){const R=parseFloat(E);if(!isNaN(R)&&R>0){const q=Math.round(R/d);u(q.toString())}}},[o,d,b]),N=p.useCallback(v=>{const E=v.target.value;if(u(E),o&&b){const R=parseFloat(E);if(!isNaN(R)&&R>0){const q=Math.round(R*d);a(q.toString())}}},[o,d,b]),w=p.useCallback(()=>{if(!b||i.length===0)return;const v=parseFloat(r),E=parseFloat(c);if(isNaN(v)||isNaN(E)||v<=0||E<=0){a(Math.round(b.width).toString()),u(Math.round(b.height).toString());return}if(Math.abs(v-b.width)<.5&&Math.abs(E-b.height)<.5)return;g.current={width:v,height:E};const R=v/b.width,q=E/b.height,$={x:b.x,y:b.y,width:v,height:E};i.forEach(V=>{Sm(e,V,b,$,R,q)})},[e,i,b,r,c]),T=p.useCallback(v=>{if(!b||i.length===0)return;const E=v.width,R=v.height;a(E.toString()),u(R.toString()),g.current={width:E,height:R};const q=E/b.width,$=R/b.height,V={x:b.x,y:b.y,width:E,height:R};i.forEach(U=>{Sm(e,U,b,V,q,$)}),m(E/R),h(!1)},[e,i,b]),S=p.useCallback(v=>{v.key==="Enter"?(w(),v.target.blur()):v.key==="Escape"&&(b&&(a(Math.round(b.width).toString()),u(Math.round(b.height).toString())),v.target.blur())},[w,b]);return b?l.jsxDEV("div",{className:"size-input-container",children:[l.jsxDEV("div",{className:"size-input-group",children:[l.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),l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"size-input",value:r,onChange:y,onBlur:w,onKeyDown:S},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),l.jsxDEV("button",{className:`size-lock-button ${o?"locked":""}`,onClick:()=>s(!o),title:o?"解锁比例":"锁定比例",children:o?l.jsxDEV(E0,{},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):l.jsxDEV(S0,{},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),l.jsxDEV("div",{className:"size-input-group",children:[l.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),l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",className:"size-input",value:c,onChange:N,onBlur:w,onKeyDown:S},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),l.jsxDEV(at,{open:f,onOpenChange:h,placement:"bottom-end",sideOffset:8,children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("button",{className:`size-preset-button ${f?"active":""}`,title:n?"常用尺寸":"Preset Sizes",onClick:()=>h(!f),children:l.jsxDEV(zl,{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),l.jsxDEV(ct,{container:x,children:l.jsxDEV("div",{className:"size-preset-panel",children:k0.map(v=>l.jsxDEV("div",{className:"size-preset-category",children:[l.jsxDEV("div",{className:"size-preset-category-label",children:n?v.category:v.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),v.items.map(E=>l.jsxDEV("button",{className:"size-preset-item",onClick:()=>T(E),children:[l.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),l.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))]},v.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},QT=({board:e,title:t})=>{const{appState:n,setAppState:i}=Gt();return l.jsxDEV(ne,{className:Y("property-button"),visible:!0,icon:l.jsxDEV(D0,{},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=Be(e)[0],s=T0(o);to.getLinkElement(s)||to.wrapLink(s,"链接",""),setTimeout(()=>{const c=to.getLinkElement(s)[0],u=En.toDOMNode(s,c);i({...n,linkState:{editor:s,targetDom:u,targetElement:c,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)},Qh={zh:[`一张写实的半身人像,一位身穿水蓝色连身裙的年轻韩国亚洲女人走进旅馆大厅,女人脸上带着温暖的微笑,左手拿着白色棒球帽,右手拉着黄色行李箱。
|
|
28
28
|
场景在济州岛度假感的旅馆大厅里,柔和的光线从窗外洒入室内柔和的打在女人的身上,凸显了女人的脸部表情。
|
|
29
29
|
使用 50mm 人像镜头拍摄,女人在画面中央,背景呈现柔和的模糊(散景)。
|
|
30
30
|
氛围是日系杂志的色调并充满放松度假感。直式人像构图,比例1:1。`,"一只可爱的小猫坐在窗台上,阳光透过窗户洒在它的毛发上","美丽的山水风景,青山绿水,云雾缭绕","现代简约风格的室内设计,明亮宽敞","夜晚的城市天际线,霓虹灯闪烁","春天的樱花盛开,粉色花瓣飘落","科幻风格的太空站,星空背景","温馨的咖啡厅,暖色调灯光","抽象艺术风格,色彩丰富的几何图形"],en:[`young Korean woman in a light blue dress holding a white baseball cap and pulling a yellow suitcase, photography,
|
|
@@ -39,10 +39,10 @@ Action: The princesses smile at each other, then begin singing in harmony, then
|
|
|
39
39
|
Audio: Soft orchestral music with uplifting strings and choir, ambient sounds of rustling leaves and distant birds, dialogue: "Together, we believe tomorrow will be brighter."
|
|
40
40
|
Style: Disney-style animation, vibrant colors, dreamy lighting.`,"a beautiful sunrise scene where the sun slowly rises from behind mountains with clouds gently floating","a forest scene with leaves gently swaying in the breeze and dappled sunlight","a seaside scene with waves gently lapping the shore and seagulls circling overhead","a garden scene with flowers swaying in the breeze and butterflies dancing","a post-rain scene with water drops slowly dripping from leaves and a rainbow appearing in the sky","a winter scene with snowflakes gently falling","a starry night scene with twinkling stars and clouds slowly drifting across the moon","a stream scene with clear water flowing gently between stones and fish swimming by"]},eD={zh:[{content:"灵感图:咖啡文化,16图",scene:"灵感图",tips:"调用1次文本模型 + 1次生图模型,一张图排布n张子图(最多16张)",modelType:"agent"},{content:"宫格图:可爱猫咪表情包,16宫格",scene:"宫格图",tips:"调用1次文本模型 + 1次生图模型,一张图排布n张正方形子图(最多16张)",modelType:"agent"},{content:"创作一个视频:樱花树下的少女,微风吹过,花瓣飘落",scene:"视频创作",tips:"调用1次文本模型 + 1次生视频模型",modelType:"video"},{content:"画一个AI工作流的流程图",scene:"mermaid图",tips:"调用1次文本模型,支持流程图、泳道图、",modelType:"agent"},{content:"大模型发展趋势的思维导图",scene:"知识梳理",tips:"调用1次文本模型",modelType:"agent"},{content:"矢量图:一个简约风格的火箭作为公司logo",scene:"SVG矢量图",tips:"调用1次文本模型生成SVG图标,可无损缩放",modelType:"agent"},{content:"生成一份关于人工智能发展的PPT",scene:"PPT演示",tips:"调用1次文本模型生成大纲 + 自动布局为多页PPT幻灯片",modelType:"agent"}],en:[{content:"inspiration board: Coffee culture mood board, beans, latte art, cafe scenes",scene:"Inspiration board",tips:"1 text model + 1 image model",modelType:"agent"},{content:"grid image: Cute cat emoji pack, 4x4 scattered layout",scene:"Grid image",tips:"1 text model + 1 image model",modelType:"agent"},{content:"a video: A girl under cherry blossom tree, petals falling in the breeze",scene:"Video creation",tips:"1 text model + 1 video model",modelType:"video"},{content:"Draw a flowchart of AI workflow",scene:"Tech docs",tips:"1 text model",modelType:"agent"},{content:"Draw a mind map of LLM development trends",scene:"Knowledge organization",tips:"1 text model",modelType:"agent"},{content:"SVG: A minimalist rocket icon",scene:"SVG vector",tips:"1 text model to generate SVG code, scalable and lossless",modelType:"agent"},{content:"Generate a PPT about artificial intelligence development",scene:"PPT slides",tips:"1 text model for outline + auto layout into multi-page PPT slides",modelType:"agent"}]},bA=e=>Qh[e],xA=e=>JT[e];function tD(e={}){const{language:t="zh",deduplicateWithPresets:n=!0,customPresetContents:i}=e,[o,s]=p.useState([]),r=p.useMemo(()=>{if(!n)return new Set;if(i&&i.length>0)return new Set(i.map(g=>g.trim().toLowerCase()));const h=eD[t]||[];return new Set(h.map(g=>g.content.trim().toLowerCase()))},[t,n,i]),a=p.useMemo(()=>!n||r.size===0?o:o.filter(h=>!r.has(h.content.trim().toLowerCase())),[o,r,n]),c=p.useCallback(()=>{const h=Li.getHistory();s(h)},[]);p.useEffect(()=>{let h=!0;return(async()=>{await Li.waitForInit(),h&&c()})(),()=>{h=!1}},[c]);const u=p.useCallback((h,g,x)=>{Li.addHistory(h,g,x),c()},[c]),d=p.useCallback(h=>{Li.removeHistory(h),c()},[c]),m=p.useCallback(()=>{Li.clearHistory(),c()},[c]),f=p.useCallback(h=>{Li.togglePin(h),c()},[c]);return{history:a,addHistory:u,removeHistory:d,clearHistory:m,refreshHistory:c,togglePinHistory:f}}const Po=8,nD=60,iD=600,km=24,oD='16px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif';let Ia=null,qs=null;function sD(){if(Ia||(Ia=document.createElement("canvas"),qs=Ia.getContext("2d")),!qs)throw new Error("Failed to get canvas context");return qs.font=oD,qs}function Va(e){return sD().measureText(e).width}function rD(e){const t=e.split(`
|
|
41
41
|
`);let n=0;for(const a of t){const c=Va(a);n=Math.max(n,c)}const i=Math.min(iD-Po*2,Math.max(nD-Po*2,n)),o=i+Po*2;let s=0;for(const a of t){if(a.length===0){s+=1;continue}if(Va(a)<=i)s+=1;else{let u=0,d=1;for(const m of a){const f=Va(m);u+f>i?(d++,u=f):u+=f}s+=d}}const r=Math.max(km+Po*2,s*km+Po*2);return{width:o,height:r}}function aD(e){switch(e){case"ai-input":return l.jsxDEV(M0,{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 l.jsxDEV(Up,{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 l.jsxDEV(A0,{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 lD(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 cD=({board:e,language:t,title:n})=>{const[i,o]=p.useState(!1),[s,r]=p.useState(0),{history:a,addHistory:c,removeHistory:u}=tD({deduplicateWithPresets:!1}),{confirm:d,confirmDialog:m}=Vr({container:e?F.getBoardContainer(e):null}),f=p.useRef(null),[h,g]=p.useState([]),[x,b]=p.useState([]);p.useEffect(()=>{i&&(g(_0()),b(j0()))},[i]);const y=p.useMemo(()=>{const E=Qh[t].map((M,P)=>({id:`preset_${P}`,content:M,source:"preset"})),R=a.map(M=>({id:M.id,content:M.content,source:"ai-input",timestamp:M.timestamp})),q=h.map(M=>({id:M.id,content:M.content,source:"image",timestamp:M.timestamp})),$=x.map(M=>({id:M.id,content:M.content,source:"video",timestamp:M.timestamp})),V=[...R,...q,...$];V.sort((M,P)=>(P.timestamp||0)-(M.timestamp||0));const U=new Set,A=[];for(const M of V){const P=M.content.trim();U.has(P)||(U.add(P),A.push(M))}const _=E.filter(M=>!U.has(M.content.trim()));return[...A,..._]},[t,a,h,x]),{historyPrompts:N,presetPrompts:w}=p.useMemo(()=>{const E=y.filter(q=>q.source!=="preset"),R=y.filter(q=>q.source==="preset");return{historyPrompts:E,presetPrompts:R}},[y]),T=p.useCallback((E,R)=>E==="history"?R:N.length+R,[N.length]);p.useEffect(()=>{i&&r(0)},[i]);const S=p.useCallback(E=>{c(E.content),o(!1);const R=Be(e);if(R.length===0)return;const q=U=>({type:"paragraph",children:[{text:U}]}),{width:$,height:V}=rD(E.content);for(const U of R){const A=e.children.findIndex(M=>M.id===U.id);if(A<0)continue;const _={};if(nn.isMindElement(e,U)){const M=[q(E.content)];ue.setNode(e,{data:M},[A]);continue}if(H.isText&&H.isText(U)){if(_.text=q(E.content),"points"in U&&Array.isArray(U.points)&&U.points.length>=2){const M=U.points,[P]=M,Z=[P,[P[0]+$,P[1]+V]];_.points=Z}ue.setNode(e,_,[A]);continue}if(H.isDrawElement(U)&&Gl([U])){if("text"in U&&U.text){if(_.text=q(E.content),"points"in U&&Array.isArray(U.points)&&U.points.length>=2){const M=U.points,[P]=M,Z=[P,[P[0]+$,P[1]+V]];_.points=Z}ue.setNode(e,_,[A]);continue}if("data"in U&&Array.isArray(U.data)){if(_.data=[q(E.content)],"points"in U&&Array.isArray(U.points)&&U.points.length>=2){const M=U.points,[P]=M,Z=[P,[P[0]+$,P[1]+V]];_.points=Z}ue.setNode(e,_,[A]);continue}}if("text"in U&&U.text){if(_.text=q(E.content),"points"in U&&Array.isArray(U.points)&&U.points.length>=2){const M=U.points,[P]=M,Z=[P,[P[0]+$,P[1]+V]];_.points=Z}ue.setNode(e,_,[A]);continue}"textContent"in U&&ue.setNode(e,{textContent:E.content},[A])}},[e,c]),v=p.useCallback(async(E,R)=>{E.stopPropagation(),await d({title:t==="zh"?"确认删除提示词":"Delete Prompt",description:t==="zh"?"确定要删除这条历史提示词吗?此操作不可撤销。":"Are you sure you want to delete this prompt history item? This action cannot be undone.",confirmText:t==="zh"?"删除":"Delete",cancelText:t==="zh"?"取消":"Cancel",danger:!0})&&u(R)},[d,t,u]);return p.useEffect(()=>{if(!i)return;const E=R=>{if(y.length===0){R.key==="Escape"&&(R.preventDefault(),o(!1));return}switch(R.key){case"ArrowUp":R.preventDefault(),r(q=>q<=0?y.length-1:q-1);break;case"ArrowDown":R.preventDefault(),r(q=>q>=y.length-1?0:q+1);break;case"Enter":R.preventDefault(),y[s]&&S(y[s]);break;case"Escape":R.preventDefault(),o(!1);break}};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[i,y,s,S]),p.useEffect(()=>{var R;if(!i||y.length===0)return;const E=(R=f.current)==null?void 0:R.querySelector(".popup-prompt-panel__item--highlighted");E&&E.scrollIntoView({block:"nearest",behavior:"smooth"})},[s,i,y.length]),l.jsxDEV(at,{open:i,onOpenChange:o,placement:"top",sideOffset:8,children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:"prompt-button",type:"icon",icon:l.jsxDEV(hu,{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),l.jsxDEV(ct,{className:`popup-prompt-panel ${At}`,onMouseDown:E=>E.preventDefault(),children:l.jsxDEV("div",{ref:f,className:"popup-prompt-panel__content",children:[N.length>0&&l.jsxDEV("div",{className:"popup-prompt-panel__section",children:[l.jsxDEV("div",{className:"popup-prompt-panel__section-header",children:[l.jsxDEV(P0,{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),l.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),l.jsxDEV("div",{className:"popup-prompt-panel__list",children:N.map((E,R)=>l.jsxDEV("div",{className:`popup-prompt-panel__item popup-prompt-panel__item--history ${T("history",R)===s?"popup-prompt-panel__item--highlighted":""}`,onClick:()=>S(E),onMouseEnter:()=>r(T("history",R)),children:[l.jsxDEV("div",{className:"popup-prompt-panel__item-content",children:[l.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),l.jsxDEV("span",{className:`popup-prompt-panel__item-source popup-prompt-panel__item-source--${E.source}`,children:[aD(E.source),l.jsxDEV("span",{children:lD(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"&&l.jsxDEV(Tt,{content:t==="zh"?"删除":"Delete",showArrow:!1,children:l.jsxDEV("button",{className:"popup-prompt-panel__item-delete",onClick:q=>v(q,E.id),children:l.jsxDEV(C0,{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),w.length>0&&l.jsxDEV("div",{className:"popup-prompt-panel__section",children:[l.jsxDEV("div",{className:"popup-prompt-panel__section-header",children:[l.jsxDEV(hu,{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),l.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),l.jsxDEV("div",{className:"popup-prompt-panel__list",children:w.map((E,R)=>l.jsxDEV("div",{className:`popup-prompt-panel__item ${T("preset",R)===s?"popup-prompt-panel__item--highlighted":""}`,onClick:()=>S(E),onMouseEnter:()=>r(T("preset",R)),children:l.jsxDEV("span",{className:"popup-prompt-panel__item-text",children:E.content},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:569,columnNumber:21},void 0)},E.id,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:559,columnNumber:19},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:557,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:552,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:500,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:496,columnNumber:7},void 0),m]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/prompt-button.tsx",lineNumber:484,columnNumber:5},void 0)},Co={bringToFront(e){const t=Be(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&&ue.moveNode(e,[s],[n])},bringForward(e){const t=Be(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&&ue.moveNode(e,[s],[s+2])},sendBackward(e){const t=Be(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&&ue.moveNode(e,[o],[o-1])},sendToBack(e){const t=Be(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&&ue.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}}},uD=({board:e,title:t})=>{const{language:n}=Se(),[i,o]=p.useState(!1),[s,r]=p.useState(0),a=F.getBoardContainer(e),c=p.useMemo(()=>{const x=Be(e);if(x.length===0)return null;const b=x[0];return Co.getLayerInfo(e,b.id)},[e,s]),u=p.useCallback(()=>{Co.bringToFront(e),r(x=>x+1)},[e]),d=p.useCallback(()=>{Co.bringForward(e),r(x=>x+1)},[e]),m=p.useCallback(()=>{Co.sendBackward(e),r(x=>x+1)},[e]),f=p.useCallback(()=>{Co.sendToBack(e),r(x=>x+1)},[e]),h=(c==null?void 0:c.canMoveUp)??!1,g=(c==null?void 0:c.canMoveDown)??!1;return l.jsxDEV(at,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:o,placement:"top-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button","layer-control-button"),selected:i,visible:!0,icon:l.jsxDEV(I0,{},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),l.jsxDEV(ct,{container:a,children:l.jsxDEV(Ye,{padding:1,className:Y(At,"layer-control-panel"),children:l.jsxDEV("div",{className:"layer-actions",children:[l.jsxDEV(Tt,{content:n==="zh"?"置顶":"Bring to Front",showArrow:!1,children:l.jsxDEV("button",{className:Y("layer-action-btn",{disabled:!h}),onClick:u,disabled:!h,children:[l.jsxDEV(V0,{},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),l.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),l.jsxDEV(Tt,{content:n==="zh"?"上移一层":"Bring Forward",showArrow:!1,children:l.jsxDEV("button",{className:Y("layer-action-btn",{disabled:!h}),onClick:d,disabled:!h,children:[l.jsxDEV(U0,{},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),l.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),l.jsxDEV(Tt,{content:n==="zh"?"下移一层":"Send Backward",showArrow:!1,children:l.jsxDEV("button",{className:Y("layer-action-btn",{disabled:!g}),onClick:m,disabled:!g,children:[l.jsxDEV(R0,{},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),l.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),l.jsxDEV(Tt,{content:n==="zh"?"置底":"Send to Back",showArrow:!1,children:l.jsxDEV("button",{className:Y("layer-action-btn",{disabled:!g}),onClick:f,disabled:!g,children:[l.jsxDEV(q0,{},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),l.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),c&&l.jsxDEV("span",{className:"layer-info",children:[c.index+1,"/",c.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)},dD=({board:e,title:t})=>{const{language:n}=Se(),[i,o]=p.useState(!1),s=F.getBoardContainer(e),r=p.useCallback(()=>{rn.alignLeft(e)},[e]),a=p.useCallback(()=>{rn.alignCenter(e)},[e]),c=p.useCallback(()=>{rn.alignRight(e)},[e]),u=p.useCallback(()=>{rn.alignTop(e)},[e]),d=p.useCallback(()=>{rn.alignMiddle(e)},[e]),m=p.useCallback(()=>{rn.alignBottom(e)},[e]),f=[{key:"left",icon:l.jsxDEV(L0,{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:l.jsxDEV(O0,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:74,columnNumber:13},void 0),label:n==="zh"?"水平居中":"Align Center",shortcut:"⌥ H",handler:a},{key:"right",icon:l.jsxDEV(F0,{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:c},{key:"top",icon:l.jsxDEV(H0,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:88,columnNumber:13},void 0),label:n==="zh"?"顶部对齐":"Align Top",shortcut:"⌥ W",handler:u},{key:"middle",icon:l.jsxDEV(z0,{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:l.jsxDEV(G0,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/alignment-button.tsx",lineNumber:102,columnNumber:13},void 0),label:n==="zh"?"底部对齐":"Align Bottom",shortcut:"⌥ S",handler:m}];return l.jsxDEV(at,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:o,placement:"top-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button","alignment-button"),selected:i,visible:!0,icon:l.jsxDEV(B0,{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),l.jsxDEV(ct,{container:s,children:l.jsxDEV(Ye,{padding:1,className:Y(At,"alignment-panel"),children:l.jsxDEV("div",{className:"alignment-actions",children:f.map(h=>l.jsxDEV(Tt,{content:h.label,showArrow:!1,children:l.jsxDEV("button",{className:"alignment-action-btn",onClick:h.handler,children:[h.icon,l.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),l.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)},mD=({board:e,title:t})=>{const{language:n}=Se(),[i,o]=p.useState(!1),s=F.getBoardContainer(e),r=p.useCallback(()=>{no.distributeHorizontal(e)},[e]),a=p.useCallback(()=>{no.distributeVertical(e)},[e]),c=p.useCallback(()=>{no.autoArrange(e)},[e]),u=[{key:"horizontal",icon:l.jsxDEV($0,{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:l.jsxDEV(X0,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/distribute-button.tsx",lineNumber:59,columnNumber:13},void 0),label:n==="zh"?"垂直间距":"Vertical Spacing",shortcut:"⇧ V",handler:a},{key:"auto",icon:l.jsxDEV(K0,{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:c}];return l.jsxDEV(at,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:o,placement:"top-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button","distribute-button"),selected:i,visible:!0,icon:l.jsxDEV(W0,{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),l.jsxDEV(ct,{container:s,children:l.jsxDEV(Ye,{padding:1,className:Y(At,"distribute-panel"),children:l.jsxDEV("div",{className:"distribute-actions",children:u.map(d=>l.jsxDEV(Tt,{content:d.label,showArrow:!1,children:l.jsxDEV("button",{className:"distribute-action-btn",onClick:d.handler,children:[d.icon,l.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),l.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)},pD=({board:e,title:t})=>{const{language:n}=Se(),[i,o]=p.useState(!1),s=F.getBoardContainer(e),r=p.useCallback(()=>{vn.union(e,n),o(!1)},[e,n]),a=p.useCallback(()=>{vn.subtract(e,n)},[e,n]),c=p.useCallback(()=>{vn.intersect(e,n)},[e,n]),u=p.useCallback(()=>{vn.exclude(e,n)},[e,n]),d=p.useCallback(()=>{vn.flatten(e,n)},[e,n]),m=[{key:"union",icon:l.jsxDEV(Z0,{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:l.jsxDEV(Q0,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:70,columnNumber:13},void 0),label:n==="zh"?"减去":"Subtract",shortcut:"⌥⇧S",handler:a},{key:"intersect",icon:l.jsxDEV(J0,{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:c},{key:"exclude",icon:l.jsxDEV(ex,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/boolean-button.tsx",lineNumber:84,columnNumber:13},void 0),label:n==="zh"?"排除":"Exclude",shortcut:"⌥⇧E",handler:u},{key:"flatten",icon:l.jsxDEV(tx,{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 l.jsxDEV(at,{sideOffset:12,crossAxisOffset:-100,open:i,onOpenChange:o,placement:"top-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:Y("property-button","boolean-button"),selected:i,visible:!0,icon:l.jsxDEV(Y0,{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),l.jsxDEV(ct,{container:s,children:l.jsxDEV(Ye,{padding:1,className:Y(At,"boolean-panel"),children:l.jsxDEV("div",{className:"boolean-actions",children:m.map(f=>l.jsxDEV(Tt,{content:f.label,showArrow:!1,children:l.jsxDEV("button",{className:"boolean-action-btn",onClick:f.handler,children:[f.icon,l.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),l.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 fD(e){return e.sort((t,n)=>t.position-n.position).map(t=>`${t.color} ${t.position}%`).join(", ")}function hD(e){const t=fD(e.stops);return e.type==="linear"?`linear-gradient(${e.angle}deg, ${t})`:`radial-gradient(circle, ${t})`}function Ua(e){return e.enabled?`${e.offsetX}px ${e.offsetY}px ${e.blur}px ${e.color}`:""}const Ra=jt.CUSTOM_GRADIENTS,gD=({board:e,isOpen:t,onClose:n,currentFontSize:i,currentFontFamily:o,currentColor:s,toolbarRect:r,selectionRect:a})=>{var Qc,Jc;const{t:c,language:u}=Se(),{confirm:d,confirmDialog:m}=Vr({container:F.getBoardContainer(e)}),f=p.useRef(null),[h,g]=p.useState({top:0,left:0}),[x,b]=p.useState(i||"16"),[y,N]=p.useState(!1),[w,T]=p.useState(o||"PingFang SC"),[S,v]=p.useState(new Set),[E,R]=p.useState(400),[q,$]=p.useState("left"),[V,U]=p.useState(1.5),[A,_]=p.useState(0),[M,P]=p.useState(!1),[Z,pe]=p.useState(!1),[I,G]=p.useState(!1),[ce,X]=p.useState(!1),[ae,le]=p.useState(!1),[be,we]=p.useState(!1),[Fe,K]=p.useState(null),[Ce,We]=p.useState(null),[it,Ke]=p.useState(0),[D,j]=p.useState("#000000"),[W,Q]=p.useState(null),[C,B]=p.useState(null),[L,z]=p.useState(!1),[te,ee]=p.useState(null),[O,J]=p.useState({color:"rgba(0, 0, 0, 0.5)",offsetX:2,offsetY:2,blur:4}),[oe,Ie]=p.useState(!1),[ut,Re]=p.useState(null),[ie,Ae]=p.useState({type:"linear",angle:135,stops:[{color:"#FF6B6B",offset:0},{color:"#4ECDC4",offset:1}]}),[Ue,_e]=p.useState([]),[Le,Mt]=p.useState(s||"#000000"),[Dt,It]=p.useState(!1);p.useEffect(()=>{let k=!0;return Sn.get(Ra).then(de=>{k&&de&&_e(de)}).catch(de=>{console.warn("Failed to load gradient data:",de)}),()=>{k=!1}},[]),p.useEffect(()=>{if(t){const k=DT(e);if(k["text-gradient"]){Ie(!0);const je=nx.find(et=>hD(et.config)===k["text-gradient"]);Re(je?je.id:null)}else Ie(!1),Re(null);if(k["text-shadow"]){z(!0);const je=k["text-shadow"];let et=null;for(const[on,Wn]of Object.entries(gu.textShadow))if(Ua(Wn)===je){et=on;break}ee(et||null)}else z(!1),ee(null);if(k["font-family"]&&T(k["font-family"]),k["font-weight"]&&R(Number(k["font-weight"])),k["line-height"]&&U(Number(k["line-height"])),k["letter-spacing"]){const je=String(k["letter-spacing"]).replace("px","");_(Number(je))}const de=_T(e);$(de),P(!!k.bold),pe(!!k.italic),G(!!k.underlined),X(!!k.strikethrough),le(!!k.superscript),we(!!k.subscript),K(k["background-color"]||null),We(k["text-transform"]||null),Ke(k["text-stroke"]||0),j(k["text-stroke-color"]||"#000000"),Q(k["text-decoration-style"]||null),B(k["text-decoration-color"]||null)}},[t,e]),p.useEffect(()=>{if(t&&!y){const k=setTimeout(()=>{bu.forEach(de=>{Ss.isFontLoaded(de.family)||Ss.loadGoogleFont(de.family).catch(je=>{console.warn(`Failed to preload font ${de.family}:`,je)})})},500);return()=>clearTimeout(k)}},[t,y]),p.useEffect(()=>{if(t&&r&&a){let et=a.right+12,on=r.top+r.height+8;const Wn=window.innerWidth,fa=window.innerHeight;et+320>Wn-16&&(et=a.left-320-12,et<16&&(et=Wn-320-16)),on+520>fa-16&&(on=Math.max(16,fa-520-16)),g({left:Math.max(16,et),top:Math.max(16,on)})}},[t,r,a]);const Bt=p.useCallback(k=>{const de=parseInt(k,10);!isNaN(de)&&de>=8&&de<=100&&(b(k),Kh(e,k))},[e]),Ht=p.useCallback(async k=>{if(T(k.family),N(!1),k.source==="google"&&!Ss.isFontLoaded(k.family)){v(de=>new Set(de).add(k.family));try{await Ss.loadGoogleFont(k.family)}catch(de){console.error("Failed to load Google font:",de)}finally{v(de=>{const je=new Set(de);return je.delete(k.family),je})}}mT(e,k.family)},[e]);p.useEffect(()=>{s&&Mt(s)},[s]);const mi=p.useCallback(k=>{Mt(k),Jn.setTextColor(e,k)},[e]),Gn=p.useCallback((k,de)=>{ee(k),z(!0),J({color:de.color,offsetX:de.offsetX,offsetY:de.offsetY,blur:de.blur});const je=Ua(de);Aa(e,je)},[e]),xe=p.useCallback((k,de)=>{const je={...O,[k]:de};J(je),ee(null);const et=`${je.offsetX}px ${je.offsetY}px ${je.blur}px ${je.color}`;Aa(e,et)},[e,O]),He=p.useCallback(k=>{Ae(k),Re(null);const de=yi(k);bm(e,de)},[e]),Ne=p.useCallback(()=>{const k=yi(ie),je=[{id:`custom-${Date.now()}`,css:k},...Ue].slice(0,8);_e(je),Sn.set(Ra,je).catch(et=>{console.warn("Failed to save custom gradients:",et)})},[ie,Ue]),Ve=p.useCallback(async k=>{if(!await d({title:u==="zh"?"确认删除渐变预设":"Delete Gradient Preset",description:u==="zh"?"确定要删除这个自定义渐变预设吗?":"Are you sure you want to delete this custom gradient preset?",confirmText:u==="zh"?"删除":"Delete",cancelText:u==="zh"?"取消":"Cancel",danger:!0}))return;const je=Ue.filter(et=>et.id!==k);_e(je),Sn.set(Ra,je).catch(et=>{console.warn("Failed to save custom gradients:",et)})},[d,Ue,u]),ot=p.useCallback(()=>{const k=!L;z(k),k||(Aa(e,null),ee(null))},[e,L]),ze=p.useCallback(()=>{const k=!oe;Ie(k),k||(bm(e,null),Re(null))},[e,oe]),Oe=p.useCallback(k=>{R(k),Yh(e,k)},[e]),st=p.useCallback(k=>{$(k),pT(e,k)},[e]),ht=p.useCallback(k=>{U(k),fT(e,k)},[e]),_t=p.useCallback(k=>{_(k),hT(e,k)},[e]),Vt=p.useCallback(()=>{P(!M),gT(e)},[e,M]),dt=p.useCallback(()=>{pe(!Z),bT(e)},[e,Z]),dn=p.useCallback(()=>{G(!I),xT(e)},[e,I]),la=p.useCallback(()=>{X(!ce),NT(e)},[e,ce]),ca=p.useCallback(()=>{const k=!ae;le(k),k&&we(!1),yT(e)},[e,ae]),ua=p.useCallback(()=>{const k=!be;we(k),k&&le(!1),wT(e)},[e,be]),se=p.useCallback(k=>{K(k),vT(e,k)},[e]),ko=p.useCallback(k=>{const de=k===Ce?null:k;We(de),ET(e,de)},[e,Ce]),qi=p.useCallback((k,de)=>{Ke(k),de&&j(de),ST(e,k>0?k:null,de||D)},[e,D]),xb=p.useCallback(k=>{Q(k),kT(e,k)},[e]),Yc=p.useCallback(k=>{B(k),TT(e,k)},[e]);p.useEffect(()=>{if(!t)return;const k=je=>{const et=je.target;f.current&&f.current.contains(et)||et.closest(".popup-toolbar")!==null||n()},de=setTimeout(()=>{document.addEventListener("mousedown",k)},100);return()=>{clearTimeout(de),document.removeEventListener("mousedown",k)}},[t,n]);const Nb=p.useCallback(k=>{k.target===k.currentTarget&&n()},[n]),[da,ma]=p.useState(!1),Zc=[{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:"黑体"}],yb=p.useCallback(k=>{const de=Zc.find(je=>je.value===k);return de?u==="zh"?de.labelZh:de.label:String(k)},[u]),pa=[...ix,...bu],wb=p.useCallback(k=>{const de=pa.find(je=>je.family===k);return(de==null?void 0:de.displayName)||k},[pa]);return t?l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{className:"text-property-panel-overlay",onClick:Nb,onPointerDown:k=>k.stopPropagation(),onMouseDown:k=>k.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),l.jsxDEV("div",{ref:f,className:Y("text-property-panel",{"is-open":t}),style:{top:h.top,left:h.left},onPointerDown:k=>k.stopPropagation(),onMouseDown:k=>k.stopPropagation(),onClick:k=>k.stopPropagation(),onPointerUp:k=>k.stopPropagation(),children:[l.jsxDEV("div",{className:"text-property-panel__header",children:[l.jsxDEV("span",{className:"text-property-panel__header-title",children:c("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),l.jsxDEV("button",{className:"text-property-panel__header-close",onClick:n,children:l.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:l.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),l.jsxDEV("div",{className:"text-property-panel__content",children:[l.jsxDEV("div",{className:"text-property-panel__section",children:l.jsxDEV("div",{className:"text-property-panel__section-content",children:[l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"字号":"Size"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:648,columnNumber:17},void 0),l.jsxDEV("div",{className:"inline-control__slider-group",children:[l.jsxDEV("input",{type:"range",className:"inline-control__slider",value:x,min:8,max:100,step:1,onChange:k=>{b(k.target.value),Bt(k.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),l.jsxDEV("span",{className:"inline-control__value",children:x},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),l.jsxDEV("div",{className:"inline-control inline-control--dropdown",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"字体":"Font"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:668,columnNumber:17},void 0),l.jsxDEV("div",{className:"custom-dropdown",children:[l.jsxDEV("div",{className:Y("custom-dropdown__trigger",{"is-expanded":y}),onClick:()=>{N(!y),ma(!1)},children:[l.jsxDEV("span",{className:"custom-dropdown__value",style:{fontFamily:`'${w}', sans-serif`},children:wb(w)},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),l.jsxDEV("svg",{className:"custom-dropdown__arrow",width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:l.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),l.jsxDEV("div",{className:Y("custom-dropdown__menu custom-dropdown__menu--font",{"is-open":y}),children:pa.map(k=>l.jsxDEV("div",{className:Y("custom-dropdown__item custom-dropdown__item--font",{"is-active":w===k.family}),onClick:()=>{Ht(k),N(!1)},children:[l.jsxDEV("span",{className:"custom-dropdown__item-label",children:k.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),l.jsxDEV("span",{className:"custom-dropdown__item-preview",style:{fontFamily:`'${k.family}', sans-serif`},children:k.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)]},k.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),l.jsxDEV("div",{className:"inline-control inline-control--dropdown",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"字重":"Weight"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:714,columnNumber:17},void 0),l.jsxDEV("div",{className:"custom-dropdown",children:[l.jsxDEV("div",{className:Y("custom-dropdown__trigger",{"is-expanded":da}),onClick:()=>{ma(!da),N(!1)},children:[l.jsxDEV("span",{className:"custom-dropdown__value",style:{fontWeight:E},children:yb(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),l.jsxDEV("svg",{className:"custom-dropdown__arrow",width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:l.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),l.jsxDEV("div",{className:Y("custom-dropdown__menu",{"is-open":da}),children:Zc.map(k=>l.jsxDEV("div",{className:Y("custom-dropdown__item",{"is-active":E===k.value}),onClick:()=>{Oe(k.value),ma(!1)},children:l.jsxDEV("span",{className:"custom-dropdown__item-label",style:{fontWeight:k.value},children:u==="zh"?k.labelZh:k.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)},k.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),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"对齐":"Align"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:756,columnNumber:17},void 0),l.jsxDEV("div",{className:"align-buttons align-buttons--compact",children:[l.jsxDEV("button",{className:Y("align-buttons__btn",{"is-active":q==="left"}),onClick:()=>st("left"),title:u==="zh"?"左对齐":"Align Left",children:l.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"currentColor",children:l.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),l.jsxDEV("button",{className:Y("align-buttons__btn",{"is-active":q==="center"}),onClick:()=>st("center"),title:u==="zh"?"居中对齐":"Align Center",children:l.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"currentColor",children:l.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),l.jsxDEV("button",{className:Y("align-buttons__btn",{"is-active":q==="right"}),onClick:()=>st("right"),title:u==="zh"?"右对齐":"Align Right",children:l.jsxDEV("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"currentColor",children:l.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),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"样式":"Style"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:790,columnNumber:17},void 0),l.jsxDEV("div",{className:"style-buttons",children:[l.jsxDEV("button",{className:Y("style-buttons__btn",{"is-active":M}),onClick:Vt,title:u==="zh"?"加粗":"Bold",children:l.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),l.jsxDEV("button",{className:Y("style-buttons__btn",{"is-active":Z}),onClick:dt,title:u==="zh"?"斜体":"Italic",children:l.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),l.jsxDEV("button",{className:Y("style-buttons__btn",{"is-active":I}),onClick:dn,title:u==="zh"?"下划线":"Underline",children:l.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),l.jsxDEV("button",{className:Y("style-buttons__btn",{"is-active":ce}),onClick:la,title:u==="zh"?"删除线":"Strikethrough",children:l.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),l.jsxDEV("button",{className:Y("style-buttons__btn",{"is-active":ae}),onClick:ca,title:u==="zh"?"上标":"Superscript",children:l.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--superscript",children:["X",l.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),l.jsxDEV("button",{className:Y("style-buttons__btn",{"is-active":be}),onClick:ua,title:u==="zh"?"下标":"Subscript",children:l.jsxDEV("span",{className:"style-buttons__icon style-buttons__icon--subscript",children:["X",l.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),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"大小写":"Case"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:839,columnNumber:17},void 0),l.jsxDEV("div",{className:"case-buttons",children:[l.jsxDEV("button",{className:Y("case-buttons__btn",{"is-active":Ce==="uppercase"}),onClick:()=>ko("uppercase"),title:u==="zh"?"全大写":"Uppercase",children:"AA"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:841,columnNumber:19},void 0),l.jsxDEV("button",{className:Y("case-buttons__btn",{"is-active":Ce==="lowercase"}),onClick:()=>ko("lowercase"),title:u==="zh"?"全小写":"Lowercase",children:"aa"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:848,columnNumber:19},void 0),l.jsxDEV("button",{className:Y("case-buttons__btn",{"is-active":Ce==="capitalize"}),onClick:()=>ko("capitalize"),title:u==="zh"?"首字母大写":"Capitalize",children:"Aa"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:855,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:840,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:838,columnNumber:15},void 0),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"行高":"Line"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:867,columnNumber:17},void 0),l.jsxDEV("div",{className:"inline-control__slider-group",children:[l.jsxDEV("input",{type:"range",className:"inline-control__slider",value:V,min:.8,max:3,step:.1,onChange:k=>ht(Number(k.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),l.jsxDEV("span",{className:"inline-control__value",children:V.toFixed(1)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:878,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:868,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:866,columnNumber:15},void 0),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"字距":"Spacing"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:884,columnNumber:17},void 0),l.jsxDEV("div",{className:"inline-control__slider-group",children:[l.jsxDEV("input",{type:"range",className:"inline-control__slider",value:A,min:-2,max:10,step:.5,onChange:k=>_t(Number(k.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),l.jsxDEV("span",{className:"inline-control__value",children:[A,"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),l.jsxDEV("div",{className:"text-property-panel__section",children:[l.jsxDEV("div",{className:"text-property-panel__section-title",children:c("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),l.jsxDEV("div",{className:"text-property-panel__section-content text-color-picker",children:l.jsxDEV(Di,{value:Le,onChange:mi,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),l.jsxDEV("div",{className:"text-property-panel__section",children:l.jsxDEV("div",{className:"text-property-panel__section-content",children:[l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"高亮":"Highlight"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:924,columnNumber:17},void 0),l.jsxDEV("div",{className:"highlight-colors",children:[l.jsxDEV("button",{className:Y("highlight-colors__btn highlight-colors__btn--none",{"is-active":!Fe}),onClick:()=>se(null),title:u==="zh"?"无":"None",children:l.jsxDEV("svg",{width:"12",height:"12",viewBox:"0 0 16 16",children:l.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(k=>l.jsxDEV("button",{className:Y("highlight-colors__btn",{"is-active":Fe===k}),style:{backgroundColor:k},onClick:()=>se(k),title:k},k,!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),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"描边":"Stroke"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:949,columnNumber:17},void 0),l.jsxDEV("div",{className:"inline-control__slider-group",children:[l.jsxDEV("input",{type:"range",className:"inline-control__slider",value:it,min:0,max:3,step:.5,onChange:k=>qi(Number(k.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),l.jsxDEV("span",{className:"inline-control__value",children:[it,"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),it>0&&l.jsxDEV("input",{type:"color",className:"inline-control__color-input",value:D,onChange:k=>qi(it,k.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),(I||ce)&&l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"线型":"Line Style"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:976,columnNumber:21},void 0),l.jsxDEV("div",{className:"decoration-style-buttons",children:["solid","double","dotted","dashed","wavy"].map(k=>l.jsxDEV("button",{className:Y("decoration-style-buttons__btn",{"is-active":W===k}),onClick:()=>xb(W===k?null:k),title:k,children:l.jsxDEV("span",{className:`decoration-preview decoration-preview--${k}`,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)},k,!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),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"线色":"Line Color"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:991,columnNumber:21},void 0),l.jsxDEV("div",{className:"highlight-colors",children:[l.jsxDEV("button",{className:Y("highlight-colors__btn highlight-colors__btn--none",{"is-active":!C}),onClick:()=>Yc(null),title:u==="zh"?"默认":"Default",children:l.jsxDEV("svg",{width:"12",height:"12",viewBox:"0 0 16 16",children:l.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(k=>l.jsxDEV("button",{className:Y("highlight-colors__btn",{"is-active":C===k}),style:{backgroundColor:k},onClick:()=>Yc(k),title:k},k,!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),l.jsxDEV("div",{className:"text-property-panel__section",children:l.jsxDEV("div",{className:"text-property-panel__section-content",children:[l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"阴影":"Shadow"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1023,columnNumber:17},void 0),l.jsxDEV("div",{className:Y("toggle-switch__control toggle-switch__control--inline",{"is-active":L}),onClick:ot},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&&l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{className:"effect-presets",children:Object.entries(gu.textShadow).map(([k,de])=>l.jsxDEV("div",{className:Y("effect-presets__item",{"is-active":te===k}),onClick:()=>Gn(k,de),title:k,children:l.jsxDEV("span",{style:{textShadow:Ua(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)},k,!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),l.jsxDEV("div",{className:"effect-config",children:[l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"颜色":"Color"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1052,columnNumber:23},void 0),l.jsxDEV("div",{className:"inline-control__color-group",children:[l.jsxDEV(at,{open:Dt,onOpenChange:It,placement:"bottom",sideOffset:8,children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("button",{className:"inline-control__color-trigger",style:{backgroundColor:O.color.startsWith("rgba")?`#${((Qc=O.color.match(/\d+/g))==null?void 0:Qc.slice(0,3).map(k=>parseInt(k).toString(16).padStart(2,"0")).join(""))||"000000"}`:O.color},onClick:()=>It(!Dt)},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),l.jsxDEV(ct,{children:l.jsxDEV(Ye,{padding:4,className:"color-picker-popover",children:l.jsxDEV(Di,{value:O.color.startsWith("rgba")?`#${((Jc=O.color.match(/\d+/g))==null?void 0:Jc.slice(0,3).map(k=>parseInt(k).toString(16).padStart(2,"0")).join(""))||"000000"}`:O.color,onChange:k=>{const de=parseInt(k.slice(1,3),16),je=parseInt(k.slice(3,5),16),et=parseInt(k.slice(5,7),16),on=O.color.match(/[\d.]+\)$/),Wn=on?parseFloat(on[0]):.5;xe("color",`rgba(${de}, ${je}, ${et}, ${Wn})`)},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),l.jsxDEV("input",{type:"range",className:"inline-control__slider inline-control__slider--short",value:(()=>{const k=O.color.match(/[\d.]+\)$/);return k?parseFloat(k[0])*100:50})(),min:0,max:100,step:5,title:u==="zh"?"透明度":"Opacity",onChange:k=>{const de=Number(k.target.value)/100,je=O.color.match(/\d+/g);if(je&&je.length>=3){const[et,on,Wn]=je.slice(0,3);xe("color",`rgba(${et}, ${on}, ${Wn}, ${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),l.jsxDEV("span",{className:"inline-control__value inline-control__value--narrow",children:[(()=>{const k=O.color.match(/[\d.]+\)$/);return k?Math.round(parseFloat(k[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),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"X偏移":"X"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1123,columnNumber:23},void 0),l.jsxDEV("div",{className:"inline-control__slider-group",children:[l.jsxDEV("input",{type:"range",className:"inline-control__slider",value:O.offsetX,min:-20,max:20,step:1,onChange:k=>xe("offsetX",Number(k.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),l.jsxDEV("span",{className:"inline-control__value",children:[O.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),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"Y偏移":"Y"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1138,columnNumber:23},void 0),l.jsxDEV("div",{className:"inline-control__slider-group",children:[l.jsxDEV("input",{type:"range",className:"inline-control__slider",value:O.offsetY,min:-20,max:20,step:1,onChange:k=>xe("offsetY",Number(k.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),l.jsxDEV("span",{className:"inline-control__value",children:[O.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),l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"模糊":"Blur"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1153,columnNumber:23},void 0),l.jsxDEV("div",{className:"inline-control__slider-group",children:[l.jsxDEV("input",{type:"range",className:"inline-control__slider",value:O.blur,min:0,max:30,step:1,onChange:k=>xe("blur",Number(k.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),l.jsxDEV("span",{className:"inline-control__value",children:[O.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),l.jsxDEV("div",{className:"text-property-panel__section",children:l.jsxDEV("div",{className:"text-property-panel__section-content",children:[l.jsxDEV("div",{className:"inline-control",children:[l.jsxDEV("label",{className:"inline-control__label",children:u==="zh"?"渐变":"Gradient"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1178,columnNumber:17},void 0),l.jsxDEV("div",{className:Y("toggle-switch__control toggle-switch__control--inline",{"is-active":oe}),onClick:ze},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),oe&&l.jsxDEV("div",{className:"gradient-editor-wrapper",children:l.jsxDEV(Zh,{value:ie,onChange:He,showPresets:!0,showHistory:!1,inline:!0,customPresets:Ue.map(k=>k.css),onSavePreset:Ne,onDeletePreset:k=>{const de=Ue[k];de&&Ve(de.id)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1187,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1186,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1175,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:1174,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:642,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:620,columnNumber:7},void 0),m]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/text-property-panel.tsx",lineNumber:610,columnNumber:5},void 0):null};let ci={x:0,y:0},ho=new Set,Nr=!1;const Jh=e=>{ci={x:e.clientX,y:e.clientY},ho.forEach(t=>t(ci))},eg=e=>{ci={x:e.clientX,y:e.clientY},ho.forEach(t=>t(ci))},tg=e=>{ci={x:e.clientX,y:e.clientY},ho.forEach(t=>t(ci))},bD=()=>{Nr||(document.addEventListener("mousemove",Jh,!0),document.addEventListener("mousedown",eg,!0),document.addEventListener("mouseup",tg,!0),Nr=!0)},xD=()=>{Nr&&ho.size===0&&(document.removeEventListener("mousemove",Jh,!0),document.removeEventListener("mousedown",eg,!0),document.removeEventListener("mouseup",tg,!0),Nr=!1)},ND=()=>{const[e,t]=p.useState(()=>ci),n=p.useRef();return p.useEffect(()=>(n.current=i=>{t(i)},ho.add(n.current),bD(),t(ci),()=>{n.current&&ho.delete(n.current),xD()}),[]),e},yD=({visible:e,videoUrl:t,onClose:n,onConfirm:i})=>{const{language:o}=Se(),s=p.useRef(null),r=p.useRef(null),a=p.useRef(null),[c,u]=p.useState(!0),[d,m]=p.useState(0),[f,h]=p.useState(0),[g,x]=p.useState(""),[b,y]=p.useState(!1),[N,w]=p.useState(!1);p.useEffect(()=>(e&&t&&(u(!0),x(""),y(!1),w(!1)),()=>{a.current!==null&&window.clearTimeout(a.current)}),[e,t]);const T=()=>{const _=s.current;_&&(m(_.duration),y(!0))},S=p.useCallback((_,M=!1)=>{const P=s.current;if(!P)return;a.current!==null&&(window.clearTimeout(a.current),a.current=null);const Z=()=>{if(P.readyState<2){console.warn("Video not ready for seeking, readyState:",P.readyState);const pe=()=>{P.currentTime=_,P.removeEventListener("canplay",pe)};P.addEventListener("canplay",pe);return}P.currentTime=_};M?Z():a.current=window.setTimeout(Z,150)},[]);p.useEffect(()=>{const _=s.current;if(b&&_&&d>0){const M=Math.max(0,d-.1);h(M),S(M,!0)}},[b,d,S]);const v=p.useCallback(()=>{const _=s.current,M=r.current;if(!_||!M)return;const P=M.getContext("2d");if(P)try{M.width=_.videoWidth,M.height=_.videoHeight,P.drawImage(_,0,0,M.width,M.height);const Z=M.toDataURL("image/png");x(Z)}catch(Z){console.warn("Failed to generate frame image (likely due to CORS):",Z);try{P.fillStyle="#000",P.fillRect(0,0,M.width,M.height),P.fillStyle="#fff",P.font="16px Arial",P.textAlign="center",P.fillText("视频帧预览不可用",M.width/2,M.height/2);const pe=M.toDataURL("image/png");x(pe)}catch(pe){console.error("Failed to create placeholder image:",pe),x("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==")}}},[]),E=p.useCallback(()=>{N||(v(),u(!1))},[N,v]),R=()=>{w(!0)},q=_=>{if(s.current&&d>0&&b){const P=_/100*d;h(P),S(P,!1)}},$=()=>{w(!1),u(!0),s.current&&b&&S(f,!0)},V=_=>{if(!s.current||d===0||!b)return;const P=parseFloat(_.target.value);if(isNaN(P))return;const Z=Math.max(0,Math.min(d,P));h(Z),S(Z,!0),u(!0)},U=()=>{g&&(i(g,f),n())},A=_=>{const M=Math.floor(_/60),P=(_%60).toFixed(1);return`${M}:${P.padStart(4,"0")}`};return l.jsxDEV(ox,{visible:e,onClose:n,header:o==="zh"?"选择视频帧":"Select Video Frame",width:600,destroyOnClose:!0,footer:!1,children:l.jsxDEV("div",{className:"video-frame-selector",children:[l.jsxDEV("video",{ref:s,src:t,style:{display:"none"},muted:!0,playsInline:!0,preload:"auto",crossOrigin:"anonymous",onLoadedMetadata:T,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),l.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),l.jsxDEV("div",{className:"frame-preview",children:c?l.jsxDEV("div",{className:"loading-placeholder",children:[l.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),l.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):l.jsxDEV("div",{className:"frame-image-container",children:l.jsxDEV("img",{src:g,alt:"Video frame",className:"frame-image"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:252,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:251,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/video-frame-selector/video-frame-selector.tsx",lineNumber:242,columnNumber:9},void 0),l.jsxDEV("div",{className:"time-controls",children:[l.jsxDEV("div",{className:"time-display",children:[l.jsxDEV("span",{className:"current-time",children:A(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),l.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),l.jsxDEV("span",{className:"total-time",children:A(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),l.jsxDEV("div",{className:"progress-container",children:l.jsxDEV("input",{type:"range",min:0,max:100,value:d>0?f/d*100:0,onChange:_=>q(Number(_.target.value)),onMouseDown:R,onMouseUp:$,onTouchStart:R,onTouchEnd:$,className:"progress-slider",disabled:c&&!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),l.jsxDEV("div",{className:"time-input-container",children:[l.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),l.jsxDEV("input",{type:"number",min:0,max:d,step:.1,value:f.toFixed(1),onChange:V,className:"time-input",disabled:c},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),l.jsxDEV("div",{className:"actions",children:[l.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),l.jsxDEV("button",{className:"action-button primary",onClick:U,disabled:c||!g,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)},wD=async(e,t,n,i)=>{if(!e||!t)throw new Error("Board and video element are required");try{const o=Lt(e,[t],!1),s=[o.x,o.y+o.height+20],r=new Image,a=await new Promise(u=>{r.onload=()=>{u({width:r.naturalWidth,height:r.naturalHeight})},r.onerror=()=>{u({width:o.width,height:o.height})},r.src=n}),c={url:n,width:a.width,height:a.height,isVideoFrame:!0,videoTimestamp:i,sourceVideoId:t.id||"unknown"};Ar.insertImage(e,c,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 vD(){if(typeof VideoDecoder>"u"||typeof VideoEncoder>"u")throw new Error(`当前浏览器不支持 WebCodecs API。
|
|
42
|
-
请使用 Chrome 94+ 或 Edge 94+ 浏览器。`)}function ED(){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 SD(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,w)=>{s.onloadedmetadata=()=>N(),s.onerror=()=>w(new Error("无法加载第一个视频"))}),i.width=s.videoWidth,i.height=s.videoHeight;const r=ED(),a=new AudioContext,c=a.createMediaStreamDestination(),u=i.captureStream(30),d=new MediaStream([...u.getVideoTracks(),...c.stream.getAudioTracks()]),m=new MediaRecorder(d,{mimeType:r.mimeType,videoBitsPerSecond:8e6,audioBitsPerSecond:128e3}),f=[];m.ondataavailable=N=>{N.data.size>0&&f.push(N.data)},m.start(),t==null||t(0,"encoding","开始录制视频...");const h=(n==null?void 0:n.transitions)||[],g=(n==null?void 0:n.transitionDuration)??.5;for(let N=0;N<e.length;N++){t==null||t(N/e.length*100,"encoding",`正在处理视频 ${N+1}/${e.length}...`);const w=document.createElement("video");w.crossOrigin="anonymous",w.src=e[N],w.volume=1,await new Promise((E,R)=>{w.onloadedmetadata=()=>E(),w.onerror=()=>R(new Error(`无法加载视频 ${N+1}`))});let T=null;try{T=a.createMediaElementSource(w),T.connect(c)}catch(E){console.warn(`[WebCodecs] Failed to connect audio from video ${N+1}:`,E)}const S=N<h.length?h[N]:"cut",v=S==="dissolve"||S==="fade_to_black";await new Promise(E=>{w.play().catch(q=>{console.warn(`[WebCodecs] Failed to play video ${N+1}:`,q)});const R=()=>{if(w.ended){E();return}let q=1;if(v&&w.duration>0){const $=w.duration-w.currentTime;$<g&&(q=Math.max(0,$/g))}S==="fade_to_black"&&q<1&&(o.fillStyle="#000",o.fillRect(0,0,i.width,i.height)),o.globalAlpha=q,o.drawImage(w,0,0,i.width,i.height),o.globalAlpha=1,requestAnimationFrame(R)};w.onended=()=>E(),R()}),T&&T.disconnect(),w.pause(),w.src="",w.load()}t==null||t(100,"finalizing","正在生成最终视频..."),await new Promise(N=>{m.onstop=()=>N(),m.stop()}),await a.close();const x=r.mimeType.split(";")[0],b=new Blob(f,{type:x}),y=e.length*8;try{const{unifiedCacheService:N}=await Me(async()=>{const{unifiedCacheService:v}=await import("./tool-windows-
|
|
42
|
+
请使用 Chrome 94+ 或 Edge 94+ 浏览器。`)}function ED(){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 SD(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,w)=>{s.onloadedmetadata=()=>N(),s.onerror=()=>w(new Error("无法加载第一个视频"))}),i.width=s.videoWidth,i.height=s.videoHeight;const r=ED(),a=new AudioContext,c=a.createMediaStreamDestination(),u=i.captureStream(30),d=new MediaStream([...u.getVideoTracks(),...c.stream.getAudioTracks()]),m=new MediaRecorder(d,{mimeType:r.mimeType,videoBitsPerSecond:8e6,audioBitsPerSecond:128e3}),f=[];m.ondataavailable=N=>{N.data.size>0&&f.push(N.data)},m.start(),t==null||t(0,"encoding","开始录制视频...");const h=(n==null?void 0:n.transitions)||[],g=(n==null?void 0:n.transitionDuration)??.5;for(let N=0;N<e.length;N++){t==null||t(N/e.length*100,"encoding",`正在处理视频 ${N+1}/${e.length}...`);const w=document.createElement("video");w.crossOrigin="anonymous",w.src=e[N],w.volume=1,await new Promise((E,R)=>{w.onloadedmetadata=()=>E(),w.onerror=()=>R(new Error(`无法加载视频 ${N+1}`))});let T=null;try{T=a.createMediaElementSource(w),T.connect(c)}catch(E){console.warn(`[WebCodecs] Failed to connect audio from video ${N+1}:`,E)}const S=N<h.length?h[N]:"cut",v=S==="dissolve"||S==="fade_to_black";await new Promise(E=>{w.play().catch(q=>{console.warn(`[WebCodecs] Failed to play video ${N+1}:`,q)});const R=()=>{if(w.ended){E();return}let q=1;if(v&&w.duration>0){const $=w.duration-w.currentTime;$<g&&(q=Math.max(0,$/g))}S==="fade_to_black"&&q<1&&(o.fillStyle="#000",o.fillRect(0,0,i.width,i.height)),o.globalAlpha=q,o.drawImage(w,0,0,i.width,i.height),o.globalAlpha=1,requestAnimationFrame(R)};w.onended=()=>E(),R()}),T&&T.disconnect(),w.pause(),w.src="",w.load()}t==null||t(100,"finalizing","正在生成最终视频..."),await new Promise(N=>{m.onstop=()=>N(),m.stop()}),await a.close();const x=r.mimeType.split(";")[0],b=new Blob(f,{type:x}),y=e.length*8;try{const{unifiedCacheService:N}=await Me(async()=>{const{unifiedCacheService:v}=await import("./tool-windows-BTXOQvEU.js").then(E=>E.oI);return{unifiedCacheService:v}},__vite__mapDeps([0]),import.meta.url),w=`merged-video-${Date.now()}`,T=`/__aitu_cache__/video/${w}.mp4`,S=T;return await N.cacheMediaFromBlob(S,b,"video",{taskId:w}),{blob:b,url:T,duration:y,taskId:w}}catch(N){console.warn("[WebCodecs] Failed to cache video, using blob URL:",N);const w=URL.createObjectURL(b);return{blob:b,url:w,duration:y}}}class Zi{constructor(){vD()}static getInstance(){return Zi.instance||(Zi.instance=new Zi),Zi.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 a=await(await fetch(t[s])).blob();o.push(a)}return await SD(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 kD=Zi.getInstance();async function TD(e,t,n){return kD.mergeVideos(e,t,n)}const Tm="笔记",DD="新笔记",_D=24;function jD(e){var t;return((t=e.title)==null?void 0:t.trim())||DD}function PD(e){return(e.body||"").trim()}async function CD(){const{knowledgeBaseService:e}=await Me(async()=>{const{knowledgeBaseService:o}=await import("./tool-windows-BTXOQvEU.js").then(s=>s.p1);return{knowledgeBaseService:o}},__vite__mapDeps([0]),import.meta.url);await e.initialize();const n=(await e.getAllDirectories()).find(o=>o.name===Tm);if(n)return{knowledgeBaseService:e,directory:n};const i=await e.createDirectory(Tm);return{knowledgeBaseService:e,directory:i}}function AD(e,t,n){const i=e.children.findIndex(o=>o.id===t);i<0||ue.setNode(e,{noteId:n},[i])}function MD(e){var n,i;if(Pt(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(`
|
|
43
43
|
|
|
44
44
|
`).trim()}const t=[];if("data"in e&&Array.isArray(e.data)){for(const o of e.data)if(ks.isNode(o)){const s=ks.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"&&ks.isNode(e.text)){const o=ks.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(`
|
|
45
|
-
`).trim()}function ID(e){return H.isDrawElement(e)&&H.isText(e)}function VD(e,t){return[...t].sort((n,i)=>{const o=Lt(e,[n],!1),s=Lt(e,[i],!1);return Math.abs(o.x-s.x)<=_D&&Math.abs(o.y-s.y)>.5?o.y-s.y:o.x-s.x})}async function ng(e,t,n="zh"){if(!t)return null;if(t.noteId)return t.noteId;try{const{knowledgeBaseService:i,directory:o}=await CD(),s=await i.createNote(jD(t),o.id),r=PD(t);return r&&await i.updateNote(s.id,{content:r}),AD(e,t.id,s.id),s.id}catch(i){return console.error("Failed to create note for card:",i),re.error(n==="zh"?"保存到知识库失败":"Failed to save to knowledge base"),null}}async function UD(e,t){const n=[...new Set(e.filter(Boolean))];if(n.length===0)return;const{knowledgeBaseService:i}=await Me(async()=>{const{knowledgeBaseService:s}=await import("./tool-windows-
|
|
45
|
+
`).trim()}function ID(e){return H.isDrawElement(e)&&H.isText(e)}function VD(e,t){return[...t].sort((n,i)=>{const o=Lt(e,[n],!1),s=Lt(e,[i],!1);return Math.abs(o.x-s.x)<=_D&&Math.abs(o.y-s.y)>.5?o.y-s.y:o.x-s.x})}async function ng(e,t,n="zh"){if(!t)return null;if(t.noteId)return t.noteId;try{const{knowledgeBaseService:i,directory:o}=await CD(),s=await i.createNote(jD(t),o.id),r=PD(t);return r&&await i.updateNote(s.id,{content:r}),AD(e,t.id,s.id),s.id}catch(i){return console.error("Failed to create note for card:",i),re.error(n==="zh"?"保存到知识库失败":"Failed to save to knowledge base"),null}}async function UD(e,t){const n=[...new Set(e.filter(Boolean))];if(n.length===0)return;const{knowledgeBaseService:i}=await Me(async()=>{const{knowledgeBaseService:s}=await import("./tool-windows-BTXOQvEU.js").then(r=>r.p1);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 ig=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 ng(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),re.error(n==="zh"?"无法打开知识库笔记":"Failed to open knowledge base note")}}};function Dm(e){return ax(e).replace(/\u00a0/g," ").replace(/[ \t]+\n/g,`
|
|
46
46
|
`).replace(/\n{3,}/g,`
|
|
47
47
|
|
|
48
48
|
`).trim()}function Yn(e){if(!e)return"";if(typeof e=="string")return e;if(Array.isArray(e))return e.map(i=>Yn(i)).filter(Boolean).join(`
|
|
@@ -53,17 +53,17 @@ Style: Disney-style animation, vibrant colors, dreamy lighting.`,"a beautiful su
|
|
|
53
53
|
|
|
54
54
|
`));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 og(e){return!e.text||!e.sourceId?null:Rp({elementId:e.sourceId,title:e.title,content:e.text,origin:e.origin||{kind:"card",id:e.sourceId}})}function LD(e,t){const n=og(t);if(!n)return[];if(!e.children||!t.origin||t.origin.kind!=="card")return[n];const i=sx(e,e.children.filter(Pt));return i.length<=1?[n]:i.map(o=>{var s;return o.id===((s=t.origin)==null?void 0:s.id)?n:Rp({elementId:`card:${o.id}`,title:o.title||"卡片朗读",content:[o.title,o.body].filter(Boolean).join(`
|
|
55
55
|
|
|
56
|
-
`),origin:{kind:"card",id:o.id}})}).filter(o=>!!o)}const OD=p.lazy(()=>Me(()=>import("./tool-windows-
|
|
56
|
+
`),origin:{kind:"card",id:o.id}})}).filter(o=>!!o)}const OD=p.lazy(()=>Me(()=>import("./tool-windows-BTXOQvEU.js").then(e=>e.p0),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.ImageEditor}))),FD=p.lazy(()=>Me(()=>import("./tool-windows-BTXOQvEU.js").then(e=>e.p3),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.FrameSlideshow}))),HD=()=>{var it,Ke,D,j,W,Q;const e=xt(),n=Be(e).filter(C=>!lx(C)),{openDialog:i}=Gt(),{language:o,t:s}=Se(),[r,a]=p.useState(!1),c=p.useRef(r),[u,d]=p.useState(!1),[m,f]=p.useState(null),[h,g]=p.useState(!1),[x,b]=p.useState(""),[y,N]=p.useState(null),[w,T]=p.useState(!1),S=p.useRef(!1),[v,E]=p.useState(!1),[R,q]=p.useState(),[$,V]=p.useState({text:"",title:"",source:null}),[U,A]=p.useState(),[_,M]=p.useState(),P=p.useRef(null);ND();const Z=cx(),pe=Z.mediaType==="reading"?Z.activeReadingSourceId:void 0,I=!!$.sourceId&&!!pe&&pe.startsWith($.sourceId),G=p.useMemo(()=>n.map(C=>C.id).sort().join("|"),[n]),ce=I?Z.playing?o==="zh"?"暂停朗读":"Pause reading":o==="zh"?"继续朗读":"Resume reading":o==="zh"?"语音朗读":"Read aloud";p.useEffect(()=>{if(n.length===0||r){V(B=>B.text||B.source?{text:"",title:"",source:null}:B);return}const C=()=>{const B=BD(e,n);V(L=>L.text===B.text&&L.source===B.source&&L.title===B.title&&L.sourceId===B.sourceId?L:B)};return C(),document.addEventListener("selectionchange",C),()=>{document.removeEventListener("selectionchange",C)}},[e,G,r]);const X=n.length>0&&!Jo(e),{viewport:ae,selection:le,children:be}=e,{refs:we,floatingStyles:Fe}=Wl({placement:"top",middleware:[$l(12),qp({padding:16}),Xl({fallbackPlacements:["bottom","right","left"]})]});let K={fill:"red"};if(X&&!r){const C=n.some(se=>WD(e,se))&&!F.hasBeenTextEditing(e),B=n.some(se=>XD(e,se)),L=n.length>0&&n.every(se=>H.isDrawElement(se)&&H.isText(se)),z=n.some(se=>cg(e,se))&&!F.hasBeenTextEditing(e),te=n.some(se=>$D(e,se))&&!F.hasBeenTextEditing(e),ee=n.some(se=>wn(se)),O=n.some(se=>Kl(se)),J=n.some(se=>Pt(se)),oe=n.length>1&&n.every(se=>Pt(se)||ID(se)),Ie=n.length>0&&!ee&&!O&&!J&&n.some(se=>H.isDrawElement(se)&&H.isImage(se))&&!F.hasBeenTextEditing(e),ut=n.length===1&&wn(n[0])&&!F.hasBeenTextEditing(e),Re=!ee&&!O&&!J&&!F.hasBeenTextEditing(e),ie=n[0],Ae=H.isDrawElement(ie)&&H.isImage(ie)&&((it=ie.url)==null?void 0:it.startsWith("data:image/svg+xml")),Ue=n.length===1&&!ee&&!O&&H.isDrawElement(n[0])&&H.isImage(n[0])&&!Ae&&!F.hasBeenTextEditing(e),_e=Ue,Le=Ue,Mt=n.length>0&&!O&&n.some(se=>H.isDrawElement(se)&&H.isImage(se)||wn(se)||Kn(se))&&!F.hasBeenTextEditing(e),Dt=n.length>1&&!oe&&!ee&&!O&&n.every(se=>H.isDrawElement(se)&&H.isImage(se)||H.isDrawElement(se)&&Gl([se])||H.isDrawElement(se)&&H.isShapeElement(se)&&!H.isImage(se)||H.isDrawElement(se)&&H.isArrowLine(se)||H.isDrawElement(se)&&H.isVectorLine(se)||H.isDrawElement(se)&&H.isTable(se)||$e.isFreehand(se)||Je.isPenPath(se)||nn.isMindElement(e,se))&&!F.hasBeenTextEditing(e),Bt=n.filter(se=>wn(se)).length>1&&!F.hasBeenTextEditing(e),Ht=n.filter(se=>Je.isPenPath(se)),mi=Ht.length>0&&!F.hasBeenTextEditing(e);let Gn;if(Ht.length>0){const se=Ht[0].cornerRadius??0;Gn=Ht.every(qi=>(qi.cornerRadius??0)===se)?se:void 0}const xe=n.filter(se=>$e.isFreehand(se)),He=(Ht.length>0||xe.length>0)&&!F.hasBeenTextEditing(e);let Ne;const Ve=[...Ht.map(se=>se.strokeWidth??2),...xe.map(se=>se.strokeWidth??2)];if(Ve.length>0){const se=Ve[0];Ne=Ve.every(qi=>qi===se)?se:void 0}const ot=n.length>0&&!O&&!F.hasBeenTextEditing(e),ze=n.length>0&&n.every(se=>nn.isMindElement(e,se)),Oe=n.length>1&&!ze&&!F.hasBeenTextEditing(e),st=n.length>1&&!ze&&!F.hasBeenTextEditing(e),ht=n.length>1&&!F.hasBeenTextEditing(e)&&n.every(se=>KD(e,se)),_t=n.length>0&&!F.hasBeenTextEditing(e)&&!!xu(e,n),Vt=n.length===1&&Pt(n[0])&&!!n[0].noteId&&!F.hasBeenTextEditing(e),dt=n.length===1&&Pt(n[0])&&!n[0].noteId&&!F.hasBeenTextEditing(e),dn=oe&&!F.hasBeenTextEditing(e),la=n.length===1&&vi(n[0])&&!F.hasBeenTextEditing(e),ca=n.length===1&&Kn(n[0])&&!F.hasBeenTextEditing(e),ua=typeof window<"u"&&"speechSynthesis"in window&&!F.hasBeenTextEditing(e)&&$.text.length>0;K={...zD(e),hasFill:C,hasFontColor:B,hasFontSize:B,hasStroke:z,hasStrokeStyle:te,hasStrokeWidth:He,strokeWidth:Ne,hasText:B,isTextOnly:L,hasAIImage:Re,hasAIVideo:Ie,hasVideoFrame:ut,hasSplitImage:_e,hasImageEdit:Le,hasDownloadable:Mt,hasMergeable:Dt,hasVideoMergeable:Bt,hasCornerRadius:mi,cornerRadius:Gn,hasSizeInput:ot,hasAlignment:Oe,hasDistribute:st,hasBoolean:ht,hasMindmapToPPT:_t,hasCardEdit:Vt,hasCardSave:dt,hasContentMerge:dn,hasFramePlay:la,hasAudioPlayer:ca,hasTextToSpeech:ua}}const Ce=async(C,B)=>{if(!C)return;const L=C.title?`# ${C.title}
|
|
57
57
|
|
|
58
58
|
`:"",z=C.body||"",te=`${L}${z}`.trim();try{console.info("[CardCopy] Copy text from card",{source:B,id:C.id}),await Vx(te),re.success(o==="zh"?"已复制到剪贴板":"Copied to clipboard",2e3)}catch{re.error(o==="zh"?"复制失败":"Copy failed",2e3)}},We=async()=>{const C=VD(e,n);if(C.length<2)return;const B=C[0],L=C.map((te,ee)=>ee===0&&Pt(B)&&Pt(te)?(te.body||"").trim():MD(te)).filter(Boolean).join(`
|
|
59
59
|
|
|
60
|
-
`).trim();if(!L){re.warning(o==="zh"?"没有可合并的内容":"No content to merge");return}const z=C.flatMap(te=>Pt(te)&&te.noteId?[te.noteId]:[]);try{const te=await UD(z,L),ee=C.slice(1).map(J=>e.children.findIndex(oe=>oe.id===J.id)).filter(J=>J>=0).sort((J,oe)=>oe-J);for(const J of ee)ue.removeNode(e,[J]);let O;if(Pt(B)){const J=e.children.findIndex(Ie=>Ie.id===B.id);if(J<0)throw new Error(o==="zh"?"合并目标不存在":"Merge target missing");const oe={body:L};te&&(oe.noteId=te),ue.setNode(e,oe,[J]),O=e.children[J]}else{const J=Lt(e,[B],!1),oe=e.children.findIndex(ie=>ie.id===B.id);if(oe<0)throw new Error(o==="zh"?"合并目标不存在":"Merge target missing");const Ie=Math.max(J.width,320),ut=Math.max(J.height,180),Re={type:"card",id:`card-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`,body:L,fillColor:"#FA8C16",points:[[J.x,J.y],[J.x+Ie,J.y+ut]],children:[],...te?{noteId:te}:{}};ue.insertNode(e,Re,[oe]),ue.removeNode(e,[oe+1]),O=e.children[oe]}oi(e),O&&_i(e,O),re.success(o==="zh"?`已合并 ${C.length} 个元素`:`Merged ${C.length} elements`)}catch(te){console.error("[PopupToolbar] Failed to merge content:",te),re.error((te==null?void 0:te.message)||(o==="zh"?"合并内容失败":"Failed to merge content"))}};return p.useEffect(()=>{if(X){const C=n.length>0;if(!r&&C){let B,L;const z=Be(e),te=Lt(e,z,!1),[ee,O]=ge.getPoints(te),J=Ts(e,Bo(e,ee)),oe=Ts(e,Bo(e,O));B=J[0]+(oe[0]-J[0])/2,L=J[1],we.setPositionReference({getBoundingClientRect(){return{width:1,height:1,x:B,y:L,top:L,left:B,right:B+1,bottom:L+1}}})}}},[ae,le,be,r]),p.useEffect(()=>{if(X&&!r&&P.current){const C=P.current.getBoundingClientRect();A({top:C.top,left:C.left,width:C.width,height:C.height});const B=Be(e);if(B.length>0){const L=Lt(e,B,!1),[z,te]=ge.getPoints(L),ee=Ts(e,Bo(e,z)),O=Ts(e,Bo(e,te));M({top:ee[1],left:ee[0],right:O[0],bottom:O[1],width:O[0]-ee[0],height:O[1]-ee[1]})}}},[X,r,Fe,e]),p.useEffect(()=>{S.current=w},[w]),p.useEffect(()=>{if(n.length===0&&!r){const C=setTimeout(()=>{T(!1)},50);return()=>clearTimeout(C)}},[n.length,r]),p.useEffect(()=>{c.current=r},[r]),p.useEffect(()=>{const{pointerUp:C,pointerMove:B}=e;return e.pointerMove=L=>{(ns(e)||es(e))&&!c.current&&a(!0),B(L)},e.pointerUp=L=>{c.current&&(ns(e)||es(e))&&a(!1),C(L)},()=>{e.pointerUp=C,e.pointerMove=B}},[e]),l.jsxDEV(l.Fragment,{children:[X&&!r&&l.jsxDEV(Ye,{padding:1,className:Y("popup-toolbar",At),ref:C=>{we.setFloating(C),P.current=C},style:Fe,"data-testid":"popup-toolbar",children:l.jsxDEV(ft.Row,{gap:1,children:[K.hasFill&&l.jsxDEV(XT,{board:e,currentColor:K.fill,title:s("toolbar.fillColor"),children:l.jsxDEV("label",{className:Y("fill-label","color-label",{"color-white":K.fill&&ts(K.fill)&&Mp(Ti(K.fill)),"color-mixed":K.fill===void 0,"color-gradient":K.fill&&Vn(K.fill)&&K.fill.type==="gradient","color-image":K.fill&&Vn(K.fill)&&K.fill.type==="image"}),style:K.fill===void 0?void 0:{background:ts(K.fill)?K.fill:Vn(K.fill)?K.fill.type==="gradient"&&K.fill.gradient?ux(K.fill.gradient):K.fill.type==="solid"&&K.fill.solid?K.fill.solid.color:K.fill.type==="image"&&((Ke=K.fill.image)!=null&&Ke.imageUrl)?`url(${K.fill.image.imageUrl}) center/cover no-repeat`:void 0:void 0}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:782,columnNumber:17},void 0)},3,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:776,columnNumber:15},void 0),K.hasStroke&&l.jsxDEV(VT,{board:e,currentColor:K.strokeColor,title:s("toolbar.stroke"),hasStrokeStyle:K.hasStrokeStyle||!1,hasStrokeWidth:K.hasStrokeWidth||!1,currentStrokeWidth:K.strokeWidth,children:l.jsxDEV("label",{className:Y("stroke-label","color-label",{"color-mixed":K.strokeColor===void 0}),style:{borderColor:K.strokeColor}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:822,columnNumber:17},void 0)},2,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:813,columnNumber:15},void 0),K.hasFontColor&&l.jsxDEV(AT,{board:e,currentColor:(D=K.marks)==null?void 0:D.color,title:s("toolbar.fontColor"),fontColorIcon:l.jsxDEV(dx,{currentColor:(j=K.marks)==null?void 0:j.color},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:837,columnNumber:19},void 0)},0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:831,columnNumber:15},void 0),K.hasFontSize&&l.jsxDEV(IT,{board:e,currentFontSize:K.fontSize,title:s("toolbar.fontSize")},1,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:842,columnNumber:15},void 0),K.hasCornerRadius&&l.jsxDEV(KT,{board:e,currentRadius:K.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:852,columnNumber:15},void 0),K.hasText&&l.jsxDEV(QT,{board:e,title:"Link"},4,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:861,columnNumber:15},void 0),K.isTextOnly&&l.jsxDEV(cD,{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:868,columnNumber:15},void 0),K.hasTextToSpeech&&l.jsxDEV(ne,{className:"text-to-speech",type:"icon",icon:I&&Z.playing?l.jsxDEV(fx,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:882,columnNumber:21},void 0):l.jsxDEV(hx,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:884,columnNumber:21},void 0),visible:!0,selected:I&&Z.playing,title:ce,"aria-label":ce,"data-track":"toolbar_click_text_to_speech",onPointerUp:()=>{if(!$.text)return;const C=og($);if(!C)return;const B=LD(e,$);if(I){Z.playing?Z.pausePlayback():Z.resumePlayback();return}Nu({source:C,queue:B.length>0?B:[C],queueTab:{queueId:px,queueName:mx}})}},"text-to-speech",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:876,columnNumber:15},void 0),K.hasText&&l.jsxDEV(ne,{className:"property-settings",type:"icon",icon:l.jsxDEV(gx,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:924,columnNumber:23},void 0),visible:!0,selected:w,title:s("propertyPanel.title"),"aria-label":s("propertyPanel.title"),"data-track":"toolbar_click_property_settings",onPointerUp:()=>{T(!w)}},"property-settings",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:920,columnNumber:15},void 0),K.hasAlignment&&l.jsxDEV(dD,{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:937,columnNumber:15},void 0),K.hasDistribute&&l.jsxDEV(mD,{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:945,columnNumber:15},void 0),K.hasBoolean&&l.jsxDEV(pD,{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:953,columnNumber:15},void 0),K.hasMindmapToPPT&&l.jsxDEV(ne,{className:"mindmap-to-ppt",type:"icon",icon:l.jsxDEV(bx,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:965,columnNumber:23},void 0),visible:!0,title: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=xu(e,n);if(!C)return;const B=re.loading(o==="zh"?"正在转换为PPT...":"Converting to PPT...",0);try{const{generatePPTFromMindmap:L}=await Me(async()=>{const{generatePPTFromMindmap:te}=await import("./tool-windows-Bd5iqcJh.js").then(ee=>ee.oK);return{generatePPTFromMindmap:te}},__vite__mapDeps([0]),import.meta.url),z=await L(e,C);re.close(B),z.success?re.success(o==="zh"?`已生成 ${z.pageCount} 页PPT`:`Generated ${z.pageCount} PPT slides`):re.error(z.error||(o==="zh"?"转换失败":"Conversion failed"))}catch(L){re.close(B),re.error(L.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:961,columnNumber:15},void 0),K.hasCardEdit&&l.jsxDEV(ne,{className:"card-edit",type:"icon",icon:l.jsxDEV(yu,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1007,columnNumber:23},void 0),visible:!0,title: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 ig(e,C,o)}},"card-edit",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1003,columnNumber:15},void 0),K.hasCardSave&&l.jsxDEV(ne,{className:"card-save",type:"icon",icon:l.jsxDEV(Bp,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1024,columnNumber:23},void 0),visible:!0,title: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 ng(e,C,o)&&re.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:1020,columnNumber:15},void 0),(K.hasCardEdit||K.hasCardSave)&&l.jsxDEV(ne,{className:"card-copy",type:"icon",icon:l.jsxDEV(xx,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1045,columnNumber:23},void 0),visible:!0,title: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 Ce(n[0],"card-copy")}},"card-copy",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1041,columnNumber:15},void 0),K.hasContentMerge&&l.jsxDEV(ne,{className:"content-merge",type:"icon",icon:l.jsxDEV(wu,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1063,columnNumber:23},void 0),visible:!0,title:o==="zh"?"合并内容":"Merge Content","aria-label":o==="zh"?"合并内容":"Merge Content","data-track":"toolbar_click_content_merge",onPointerUp:()=>{We()}},"content-merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1059,columnNumber:15},void 0),K.hasAIImage&&l.jsxDEV(ne,{className:"ai-image",type:"icon",icon:l.jsxDEV(Br,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1078,columnNumber:23},void 0),visible:!0,title:o==="zh"?"AI图片生成":"AI Image Generation","aria-label":o==="zh"?"AI图片生成":"AI Image Generation","data-track":"toolbar_click_ai_image",onPointerUp:()=>{i(ln.aiImageGeneration)}},5,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1074,columnNumber:15},void 0),K.hasAIVideo&&l.jsxDEV(ne,{className:"ai-video",type:"icon",icon:l.jsxDEV(Lr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1093,columnNumber:23},void 0),visible:!0,title:o==="zh"?"AI视频生成":"AI Video Generation","aria-label":o==="zh"?"AI视频生成":"AI Video Generation","data-track":"toolbar_click_ai_video",onPointerUp:()=>{i(ln.aiVideoGeneration)}},6,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1089,columnNumber:15},void 0),K.hasVideoFrame&&l.jsxDEV(ne,{className:"video-frame",type:"icon",icon:l.jsxDEV(Nx,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1108,columnNumber:23},void 0),visible:!0,title:o==="zh"?"视频帧选择":"Video Frame Selection","aria-label":o==="zh"?"视频帧选择":"Video Frame Selection","data-track":"toolbar_click_video_frame",onPointerUp:()=>{const C=n.find(B=>wn(B));C&&(f(C),d(!0))}},7,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1104,columnNumber:15},void 0),K.hasSplitImage&&l.jsxDEV(ne,{className:"split-image",type:"icon",icon:l.jsxDEV(wx,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1128,columnNumber:23},void 0),visible:!0,title:o==="zh"?"智能拆图":"Smart Split","aria-label":o==="zh"?"智能拆图":"Smart Split","data-track":"toolbar_click_split_image",onPointerUp:async()=>{const C=n[0];if(H.isImage(C)&&C.url){const B=re.loading(o==="zh"?"正在分析图片...":"Analyzing image...",0);try{const L=Lt(e,[C],!1),z=await yx(e,C.url,{sourceRect:{x:L.x,y:L.y,width:L.width,height:L.height},scrollToResult:!0});re.close(B),z.success?re.success(o==="zh"?`成功拆分为 ${z.count} 张图片`:`Split into ${z.count} images`):re.warning(z.error||(o==="zh"?"拆图失败":"Split failed"))}catch(L){re.close(B),re.error(L.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:1124,columnNumber:15},void 0),K.hasImageEdit&&l.jsxDEV(ne,{className:"image-edit",type:"icon",icon:l.jsxDEV(yu,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1173,columnNumber:23},void 0),visible:!0,title:o==="zh"?"编辑图片":"Edit Image","aria-label":o==="zh"?"编辑图片":"Edit Image","data-track":"toolbar_click_image_edit",onPointerUp:()=>{const C=n[0];H.isImage(C)&&C.url&&(b(C.url),N(C),g(!0))}},"image-edit",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1169,columnNumber:15},void 0),K.hasDownloadable&&l.jsxDEV(ne,{className:"download",type:"icon",icon:l.jsxDEV(Sx,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1193,columnNumber:23},void 0),visible:!0,title:o==="zh"?"下载":"Download","aria-label":o==="zh"?"下载":"Download","data-track":"toolbar_click_download",onPointerUp:async()=>{const C=[];for(const z of n)H.isDrawElement(z)&&H.isImage(z)&&z.url?C.push({url:z.url,type:"image"}):wn(z)&&z.url?C.push({url:z.url,type:"video"}):Kn(z)&&z.audioUrl&&C.push({url:z.audioUrl,type:"audio",filename:vx(z.title,"audio","mp3"),audioMetadata:{title:z.title,prompt:z.prompt,tags:z.tags,coverUrl:z.previewImageUrl,artist:z.modelVersion||"Aitu",album:"Aitu Generated"}});if(C.length===0){re.warning(o==="zh"?"没有可下载的内容":"No downloadable content");return}const B=C.length>1?o==="zh"?"正在打包下载...":"Packaging download...":o==="zh"?"正在下载...":"Downloading...",L=re.loading(B,0);try{const{unifiedCacheService:z}=await Me(async()=>{const{unifiedCacheService:J}=await import("./tool-windows-Bd5iqcJh.js").then(oe=>oe.oI);return{unifiedCacheService:J}},__vite__mapDeps([0]),import.meta.url),{downloadFromBlob:te}=await Me(async()=>{const{downloadFromBlob:J}=await import("./tool-windows-Bd5iqcJh.js").then(oe=>oe.oH);return{downloadFromBlob:J}},__vite__mapDeps([0]),import.meta.url),ee=[];for(const J of C)if(J.url.startsWith("blob:")){const oe=J.url.indexOf("#"),Ie=oe>0?J.url.substring(oe+1):null;if(Ie&&Ie.startsWith("merged-video-")){const ut=await z.getCachedBlob(Ie);if(ut){const Re=ut.type||"video/webm",ie=Re.startsWith("video/mp4")?"mp4":Re.startsWith("video/webm")?"webm":"bin",Ae=`merged-video-${Date.now()}.${ie}`;te(ut,Ae);continue}else console.warn("[Download] Cache not found for taskId:",Ie)}try{const Re=await(await fetch(J.url)).blob(),ie=Re.type.startsWith("video/mp4")?"mp4":Re.type.startsWith("video/webm")?"webm":Re.type.startsWith("image/")?"png":"bin",Ae=`${J.type}_${Date.now()}.${ie}`;te(Re,Ae)}catch(ut){throw console.error("[Download] Failed to fetch blob URL:",ut),new Error(`Failed to download ${J.type}: Blob URL inaccessible`)}}else ee.push(J);let O;ee.length>0&&(O=await Ex(ee)),re.close(L),O!=null&&O.openedCount&&O.downloadedCount===0?re.success(o==="zh"?O.openedCount>1?`已打开 ${O.openedCount} 个链接,请在新标签页下载`:"资源不支持直接下载,已打开链接":O.openedCount>1?`Opened ${O.openedCount} links for download`:"Opened link for download"):re.success(C.length>1?o==="zh"?`已下载 ${C.length} 个文件`:`Downloaded ${C.length} files`:o==="zh"?"下载成功":"Download complete")}catch(z){re.close(L),re.error(z.message||(o==="zh"?"下载失败":"Download failed"))}}},"download",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1189,columnNumber:15},void 0),K.hasMergeable&&l.jsxDEV(ne,{className:"merge",type:"icon",icon:l.jsxDEV(wu,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1324,columnNumber:23},void 0),visible:!0,title:o==="zh"?"合并为图片":"Merge to Image","aria-label":o==="zh"?"合并为图片":"Merge to Image","data-track":"toolbar_click_merge",onPointerUp:async()=>{const C=kx("图片合并"),B=re.loading(o==="zh"?"正在合并...":"Merging...",0);try{const L=n.filter(ot=>{const ze=ot.url||ot.imageUrl;if(!ze||ze.startsWith("/")||ze.startsWith("data:")||ze.startsWith("blob:"))return!1;try{return new URL(ze).origin!==location.origin}catch{return!1}});if(L.length>0){const ot=L.map(async st=>{const ht=st.url||st.imageUrl;try{const _t=new AbortController,Vt=setTimeout(()=>_t.abort(),3e3),dt=await fetch(ht,{method:"HEAD",mode:"cors",signal:_t.signal});return clearTimeout(Vt),dt.ok}catch{return!1}});if((await Promise.all(ot)).some(st=>!st)){re.close(B),re.warning(o==="zh"?"部分外部图片无法访问,请先下载到本地后再合并":"Some external images are inaccessible. Please download them locally first."),C();return}}const z=Lt(e,n,!1),te=[...n].sort((ot,ze)=>{const Oe=e.children.findIndex(ht=>ht.id===ot.id),st=e.children.findIndex(ht=>ht.id===ze.id);return Oe-st}),ee=await Tx(e,{elements:te,fillStyle:"transparent",inlineStyleClassNames:".extend,.emojis,.text",ratio:2});if(!ee)throw new Error(o==="zh"?"合并失败:无法生成图片":"Merge failed: Unable to generate image");const O=new Image;await new Promise((ot,ze)=>{O.onload=()=>ot(),O.onerror=()=>ze(new Error("Failed to load merged image")),O.src=ee});const J=document.createElement("canvas");J.width=O.width,J.height=O.height;const oe=J.getContext("2d");if(!oe)throw new Error("Failed to get canvas context");oe.drawImage(O,0,0);const Ie=Dx(J),{canvas:ut,left:Re,top:ie,trimmedWidth:Ae,trimmedHeight:Ue}=Ie,_e=await new Promise((ot,ze)=>{ut.toBlob(Oe=>{Oe?ot(Oe):ze(new Error("Failed to convert canvas to blob"))},"image/png")}),{unifiedCacheService:Le}=await Me(async()=>{const{unifiedCacheService:ot}=await import("./tool-windows-Bd5iqcJh.js").then(ze=>ze.oI);return{unifiedCacheService:ot}},__vite__mapDeps([0]),import.meta.url),Mt=`merged-image-${Date.now()}`,Dt=`/__aitu_cache__/image/${Mt}.png`,It=Dt;await Le.cacheMediaFromBlob(It,_e,"image",{taskId:Mt});const Bt=2,Ht=z.x+Re/Bt,mi=z.y+ie/Bt,Gn=Ae/Bt,xe=Ue/Bt;$a(e);const He=e.children.length,Ne={url:Dt,width:Gn,height:xe};Ar.insertImage(e,Ne,[Ht,mi]);const Ve=e.children[He];Ve&&(oi(e),_i(e,Ve)),re.close(B),C(),re.success(o==="zh"?`已将 ${n.length} 个元素合并为图片`:`Merged ${n.length} elements into image`)}catch(L){re.close(B),C(),re.error(L.message||(o==="zh"?"合并失败":"Merge failed"))}}},"merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1320,columnNumber:15},void 0),K.hasVideoMergeable&&l.jsxDEV(ne,{className:"video-merge",type:"icon",icon:l.jsxDEV(_x,{},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"?"合成视频":"Merge Videos","aria-label":o==="zh"?"合成视频":"Merge Videos","data-track":"toolbar_click_video_merge",onPointerUp:async()=>{const C=[];for(const L of n)wn(L)&&L.url&&C.push(L.url);if(C.length<2){re.warning(o==="zh"?"请选择至少2个视频":"Please select at least 2 videos");return}const B=re.loading(o==="zh"?"正在合成视频...":"Merging videos...",0);try{const L=await TD(C,(z,te)=>{const ee={downloading:o==="zh"?"下载视频...":"Downloading videos...",decoding:o==="zh"?"解码视频...":"Decoding videos...",encoding:o==="zh"?"编码视频...":"Encoding videos...",finalizing:o==="zh"?"生成文件中...":"Finalizing..."}});re.close(B);try{const{quickInsert:z}=await Me(async()=>{const{quickInsert:te}=await import("./canvas-insertion-6qsJRfKC.js");return{quickInsert:te}},__vite__mapDeps([0]),import.meta.url);await z("video",L.url),re.success(o==="zh"?`已合成并插入 ${C.length} 个视频`:`Merged and inserted ${C.length} videos`)}catch(z){console.error("[VideoMerge] Failed to insert video:",z);const te=L.blob.type||"video/webm",ee=te.startsWith("video/mp4")?"mp4":"webm",O=new Blob([L.blob],{type:te}),J=URL.createObjectURL(O),oe=document.createElement("a");oe.href=J,oe.download=`merged-video-${Date.now()}.${ee}`,document.body.appendChild(oe),oe.click(),document.body.removeChild(oe),setTimeout(()=>URL.revokeObjectURL(J),1e3),re.warning(o==="zh"?`视频已合成,但插入失败,已自动下载 (${ee.toUpperCase()})`:`Video merged but failed to insert, downloaded as ${ee.toUpperCase()}`)}}catch(L){re.close(B),re.error(L.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:1493,columnNumber:15},void 0),l.jsxDEV(uD,{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:1597,columnNumber:13},void 0),K.hasSizeInput&&l.jsxDEV(ZT,{board:e},"size-input",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1603,columnNumber:15},void 0),K.hasFramePlay&&l.jsxDEV(ne,{className:"frame-play",type:"icon",icon:l.jsxDEV(vu,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1614,columnNumber:23},void 0),visible:!0,title:o==="zh"?"播放幻灯片":"Play Slideshow","aria-label":o==="zh"?"播放幻灯片":"Play Slideshow","data-track":"toolbar_click_frame_play",onPointerUp:()=>{const C=n.find(B=>vi(B));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:1610,columnNumber:15},void 0),K.hasAudioPlayer&&l.jsxDEV(ne,{className:"audio-player-play",type:"icon",icon:l.jsxDEV(vu,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1633,columnNumber:23},void 0),visible:!0,title: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(B=>Kn(B));!C||!Kn(C)||Nu({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:Za(e.children),queueTab:{queueId:Op,queueName:Lp}})}},"audio-player-play",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1629,columnNumber:15},void 0),l.jsxDEV(ne,{className:"duplicate",type:"icon",icon:l.jsxDEV(Ax,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1668,columnNumber:21},void 0),visible:!0,title:s("general.duplicate"),"aria-label":s("general.duplicate"),"data-track":"toolbar_click_duplicate",onPointerUp:()=>{if(n.length===1&&vi(n[0])){const B=jx(e,n[0],o);B&&Px(e,B)}else Cx(e)}},8,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1664,columnNumber:13},void 0),l.jsxDEV(ne,{className:"trash",type:"icon",icon:l.jsxDEV(ar,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1697,columnNumber:21},void 0),visible:!0,title:s("general.delete"),"aria-label":s("general.delete"),"data-track":"toolbar_click_delete",onPointerUp:()=>{$a(e)}},9,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1693,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:773,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:763,columnNumber:9},void 0),u&&m&&l.jsxDEV(yD,{visible:u,videoUrl:m.url||"",onClose:()=>{d(!1),f(null)},onConfirm:async(C,B)=>{try{m&&await wD(e,m,C,B)}catch(L){console.error("Failed to insert video frame:",L)}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1712,columnNumber:9},void 0),h&&x&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(OD,{visible:h,imageUrl:x,showOverwrite:!!y,onClose:()=>{g(!1),b(""),N(null)},onOverwrite:async C=>{if(y)try{const{unifiedCacheService:B}=await Me(async()=>{const{unifiedCacheService:oe}=await import("./tool-windows-Bd5iqcJh.js").then(Ie=>Ie.oI);return{unifiedCacheService:oe}},__vite__mapDeps([0]),import.meta.url),L=`edited-image-${Date.now()}`,z=`/__aitu_cache__/image/${L}.png`,ee=await(await fetch(C)).blob();await B.cacheMediaFromBlob(z,ee,"image",{taskId:L});const O=new Image;await new Promise((oe,Ie)=>{O.onload=()=>oe(),O.onerror=()=>Ie(new Error("Failed to load edited image")),O.src=C});const J=e.children.findIndex(oe=>oe.id===y.id);if(J>=0){const oe=e.children[J],{newPoints:Ie}=await Fp({url:oe.url,width:oe.width,height:oe.height,points:oe.points||[[0,0],[0,0]]},O.naturalWidth,O.naturalHeight);ue.setNode(e,{url:z,width:O.naturalWidth,height:O.naturalHeight,points:Ie},[J])}}catch(B){console.error("Failed to update image:",B),re.error(o==="zh"?"更新失败":"Update failed")}},onInsert:async C=>{try{const{unifiedCacheService:B}=await Me(async()=>{const{unifiedCacheService:ie}=await import("./tool-windows-Bd5iqcJh.js").then(Ae=>Ae.oI);return{unifiedCacheService:ie}},__vite__mapDeps([0]),import.meta.url),L=`edited-image-${Date.now()}`,z=`/__aitu_cache__/image/${L}.png`,ee=await(await fetch(C)).blob();await B.cacheMediaFromBlob(z,ee,"image",{taskId:L});const O=new Image;await new Promise((ie,Ae)=>{O.onload=()=>ie(),O.onerror=()=>Ae(new Error("Failed to load edited image")),O.src=C});const J=Cr(e),oe=y?y.points[1][0]-y.points[0][0]+20:0,Ie=y?y.points[0][0]:J?J[0]+100:100,ut=y?y.points[0][1]:J?J[1]+100:100,Re=[Ie+oe,ut];await Yl(e,z,Re,!1,{width:O.naturalWidth,height:O.naturalHeight},!1,!0)}catch(B){console.error("Failed to insert image:",B),re.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:1735,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1734,columnNumber:9},void 0),K.hasText&&l.jsxDEV(gD,{board:e,isOpen:w,onClose:()=>T(!1),currentFontSize:K.fontSize,currentFontFamily:(W=K.marks)==null?void 0:W["font-family"],currentColor:(Q=K.marks)==null?void 0:Q.color,toolbarRect:U,selectionRect:_},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1845,columnNumber:9},void 0),v&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(FD,{visible:v,board:e,onClose:()=>{E(!1),q(void 0)},initialFrameId:R},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1860,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1859,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:761,columnNumber:5},void 0)},sg=(e,t)=>{const n=zp(t);return{fill:Or(t),strokeColor:Ux(e,t),fontSize:n["font-size"],marks:n}},rg=(e,t)=>{const n=zp(t);return{fill:Or(t),strokeColor:Rx(e,t),fontSize:n["font-size"],marks:n}},zD=e=>{const t=Be(e);if(t.length===0)return{fill:void 0,strokeColor:void 0};if(t.length===1){const n=t[0];return Pt(n)?{fill:n.fillColor,strokeColor:void 0}:nn.isMindElement(e,n)?sg(e,n):$e.isFreehand(n)?ag(e,n):Je.isPenPath(n)?lg(e,n):rg(e,n)}return GD(e,t)},GD=(e,t)=>{const n=t.map(a=>Pt(a)?{fill:a.fillColor,strokeColor:void 0}:nn.isMindElement(e,a)?sg(e,a):$e.isFreehand(a)?ag(e,a):Je.isPenPath(a)?lg(e,a):H.isDrawElement(a)?rg(e,a):{fill:void 0,strokeColor:void 0}),i=n.map(a=>a.fill),o=n.map(a=>a.strokeColor),s=i.every(a=>a===i[0]),r=o.every(a=>a===o[0]);return{fill:s?i[0]:void 0,strokeColor:r?o[0]:void 0}},ag=(e,t)=>({fill:Or(t),strokeColor:Gp(e,t)}),lg=(e,t)=>({fill:Or(t),strokeColor:t.strokeColor,cornerRadius:t.cornerRadius}),WD=(e,t)=>Pt(t)||nn.isMindElement(e,t)||Mx(e,t)?!0:$e.isFreehand(t)?Ix(t.points):Je.isPenPath(t)?t.closed:H.isDrawElement(t)?H.isShapeElement(t)&&!H.isImage(t)&&!H.isText(t)&&Hp(t):!1,cg=(e,t)=>nn.isMindElement(e,t)||$e.isFreehand(t)||Je.isPenPath(t)?!0:H.isDrawElement(t)?H.isShapeElement(t)&&!H.isImage(t)&&!H.isText(t)||H.isArrowLine(t)||H.isVectorLine(t)||H.isTable(t):!1,$D=(e,t)=>cg(e,t),XD=(e,t)=>nn.isMindElement(e,t)?!0:H.isDrawElement(t)?Gl([t]):!1,KD=(e,t)=>{if(Je.isPenPath(t))return t.closed;if($e.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 H.isDrawElement(t)?H.isImage(t)||H.isText(t)||H.isArrowLine(t)||H.isVectorLine(t)?!1:H.isShapeElement(t)&&Hp(t):(nn.isMindElement(e,t),!1)},ra=Fn.createContext({}),_m=(e="",t=!1)=>`menu-item menu-item-base ${e} ${t?"menu-item--active":""}`.trim(),YD=(e,t)=>{const n=p.useContext(ra);return qx(e,i=>{var s;const o=new CustomEvent(Zl.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});t==null||t(o),o.defaultPrevented||(s=n.onSelect)==null||s.call(n,o)})},ZD=({icon:e,shortcut:t,children:n})=>l.jsxDEV(l.Fragment,{children:[e&&l.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),l.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&&l.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),qe=({icon:e,onSelect:t,children:n,shortcut:i,className:o,selected:s,submenu:r,...a})=>{const[c,u]=p.useState(!1),d=p.useRef(),m=YD(a.onClick,t),f=l.jsxDEV(ZD,{icon:e,shortcut:i,children:n},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:32,columnNumber:5},void 0),h=()=>{d.current&&window.clearTimeout(d.current),u(!0)},g=()=>{d.current=window.setTimeout(()=>{u(!1)},100)};return r?l.jsxDEV(at,{open:c,onOpenChange:u,placement:"right-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("button",{...a,type:"button",className:_m(o,s||c),title:a.title??a["aria-label"],onClick:m,onMouseEnter:h,onMouseLeave:g,role:"menuitem","aria-haspopup":"true","aria-expanded":c,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),l.jsxDEV(ct,{onMouseEnter:h,onMouseLeave:g,children:r},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:73,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:52,columnNumber:7},void 0):l.jsxDEV("button",{...a,onClick:m,type:"button",className:_m(o,s),title:a.title??a["aria-label"],role:"menuitem",children:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:81,columnNumber:5},void 0)};qe.displayName="MenuItem";const ug=({children:e})=>l.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);ug.displayName="MenuItemBadge";qe.Badge=ug;const Tn=({children:e,className:t="",onSelect:n,style:i,onClose:o})=>{const s=Y(`menu ${t}`).trim(),r=p.useRef(null),a=p.useCallback(()=>r.current?Array.from(r.current.querySelectorAll("button.menu-item:not([disabled])")):[],[]),c=p.useCallback(u=>{var f,h,g,x;const d=a();if(d.length===0)return;const m=d.findIndex(b=>b===document.activeElement);switch(u.key){case"ArrowDown":{u.preventDefault();const b=m<d.length-1?m+1:0;(f=d[b])==null||f.focus();break}case"ArrowUp":{u.preventDefault();const b=m>0?m-1:d.length-1;(h=d[b])==null||h.focus();break}case"Home":{u.preventDefault(),(g=d[0])==null||g.focus();break}case"End":{u.preventDefault(),(x=d[d.length-1])==null||x.focus();break}case"Escape":{u.preventDefault(),o==null||o();break}case"Enter":case" ":{m>=0&&d[m]&&(u.preventDefault(),d[m].click());break}}},[a,o]);return p.useEffect(()=>{const u=a();u.length>0&&requestAnimationFrame(()=>{var d;(d=u[0])==null||d.focus()})},[a]),l.jsxDEV(ra.Provider,{value:{onSelect:n},children:l.jsxDEV("div",{className:s,style:i,"data-testid":"menu",onKeyDown:c,ref:r,role:"menu",children:l.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)};Tn.displayName="Menu";const dg=()=>{const e=xt(),{t}=Se();return l.jsxDEV(qe,{"data-testid":"save-button","data-track":"toolbar_click_menu_save",onSelect:()=>{Wp(e)},icon:l.jsxDEV(Bp,{},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)};dg.displayName="SaveToFile";const mg=()=>{const e=xt(),t=Fh(),{t:n}=Se(),i=(o,s,r)=>{e.children=o,e.viewport=s||{zoom:1},e.theme={themeColorMode:hi.default},t.update(e.children,{board:e,parent:e,parentG:F.getElementHost(e)}),fe.fitViewport(e)};return l.jsxDEV(qe,{"data-testid":"open-button","data-track":"toolbar_click_menu_open",onSelect:()=>{Lx(e).then(o=>{o&&i(o.elements,o.viewport)})},icon:l.jsxDEV(Bx,{},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)};mg.displayName="OpenFile";const pg=()=>{const e=xt(),t=p.useContext(ra),{t:n}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Ox,{},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:()=>{Gs(e,!0)},submenu:l.jsxDEV(Tn,{onSelect:()=>{var o;const i=new CustomEvent(Zl.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});(o=t.onSelect)==null||o.call(t,i)},children:[l.jsxDEV(qe,{"data-track":"toolbar_click_menu_export_png",onSelect:()=>{Gs(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),l.jsxDEV(qe,{"data-track":"toolbar_click_menu_export_jpg",onSelect:()=>{Gs(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)};pg.displayName="SaveAsImage";const fg=()=>{const{appState:e,setAppState:t}=Gt(),{t:n}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(ar,{},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)};fg.displayName="CleanBoard";const hg=({onOpenBackupRestore:e})=>{const{t}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Hx,{},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)};hg.displayName="BackupRestore";const gg=({onOpenCloudSync:e})=>{const{t}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Gx,{},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)};gg.displayName="CloudSync";const bg=()=>{const{t:e}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(zx,{},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)};bg.displayName="DebugPanel";const xg=()=>{const{appState:e,setAppState:t}=Gt(),{t:n}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Wx,{},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)};xg.displayName="Settings";const Ng=()=>{const{appState:e,setAppState:t}=Gt(),{t:n}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV($x,{},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)};Ng.displayName="QuickCommands";const yg=()=>{const{t:e}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Xx,{},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)};yg.displayName="UserManual";const wg=()=>{var n;const{t:e}=Se(),t=((n=document.querySelector('meta[name="app-version"]'))==null?void 0:n.getAttribute("content"))||"0.0.0";return l.jsxDEV(qe,{"data-track":"toolbar_click_menu_version",onSelect:()=>{},"aria-label":e("menu.version"),children:l.jsxDEV("span",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[l.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),l.jsxDEV("span",{style:{display:"flex",alignItems:"center",gap:"12px"},children:[l.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),l.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)};wg.displayName="VersionInfo";async function QD(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 vg=()=>{const e=xt(),{t}=Se(),[n,i]=p.useState(!1),o=p.useCallback(async()=>{if(n)return;i(!0);const s=re.loading(t("menu.cleanInvalidLinks.scanning"),0);try{const r=[];for(let u=0;u<e.children.length;u++){const d=e.children[u],m=d.url;if(!m||typeof m!="string")continue;const f=H.isDrawElement(d)&&H.isImage(d),h=wn(d);(f||h)&&r.push({element:d,index:u,url:m})}const a=[];if(await Promise.all(r.map(async({element:u,index:d,url:m})=>{await QD(m)||a.push({element:u,index:d})})),s.then(u=>{var d;return(d=u==null?void 0:u.close)==null?void 0:d.call(u)}),a.length===0){re.success(t("menu.cleanInvalidLinks.noInvalid")),i(!1);return}a.sort((u,d)=>d.index-u.index);for(const{index:u}of a)ue.removeNode(e,[u]);const c=t("menu.cleanInvalidLinks.success").replace("{count}",String(a.length));re.success(c)}catch(r){s.then(a=>{var c;return(c=a==null?void 0:a.close)==null?void 0:c.call(a)}),re.error(t("menu.cleanInvalidLinks.error")),console.error("[CleanInvalidLinks] Error:",r)}finally{i(!1)}},[e,t,n]);return l.jsxDEV(qe,{icon:l.jsxDEV(Fx,{},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)};vg.displayName="CleanInvalidLinks";const Eg=()=>{const{language:e,setLanguage:t,t:n}=Se(),i=p.useContext(ra);return l.jsxDEV(qe,{icon:l.jsxDEV($p,{},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:l.jsxDEV(Tn,{onSelect:()=>{var s;const o=new CustomEvent(Zl.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});(s=i.onSelect)==null||s.call(i,o)},children:[l.jsxDEV(qe,{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),l.jsxDEV(qe,{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)};Eg.displayName="LanguageSwitcherMenu";const ms=()=>l.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);ms.displayName="MenuSeparator";const _l=({children:e,buttonId:t,isVisible:n,visibleIndex:i=-1,disabled:o=!1})=>{const{t:s}=Se(),{hideButton:r,showButton:a,resetToDefault:c,visibleButtons:u,reorderButton:d}=Fr(),[m,f]=p.useState(!1),[h,g]=p.useState({x:0,y:0}),x=p.useRef(null),b=p.useRef(null);p.useEffect(()=>{const V=b.current;if(!V)return;const U=A=>{A.button===2&&A.stopPropagation()};return V.addEventListener("pointerdown",U,!0),()=>{V.removeEventListener("pointerdown",U,!0)}},[]);const y=p.useCallback(V=>{o||(V.preventDefault(),V.stopPropagation(),g({x:V.clientX,y:V.clientY}),f(!0))},[o]),N=p.useCallback(()=>{f(!1)},[]),w=p.useCallback(()=>{n?r(t):a(t),N()},[n,t,r,a,N]),T=p.useCallback(()=>{i>0&&d(i,i-1,!0),N()},[i,d,N]),S=p.useCallback(()=>{i>=0&&i<u.length-1&&d(i,i+1,!0),N()},[i,u.length,d,N]),v=p.useCallback(()=>{i>0&&d(i,0,!0),N()},[i,d,N]),E=p.useCallback(()=>{i>=0&&i<u.length-1&&d(i,u.length-1,!0),N()},[i,u.length,d,N]),R=p.useCallback(()=>{c(),N()},[c,N]);p.useEffect(()=>{if(!m)return;const V=A=>{x.current&&!x.current.contains(A.target)&&N()},U=A=>{A.key==="Escape"&&N()};return document.addEventListener("mousedown",V),document.addEventListener("keydown",U),()=>{document.removeEventListener("mousedown",V),document.removeEventListener("keydown",U)}},[m,N]),p.useEffect(()=>{if(!m||!x.current)return;const U=x.current.getBoundingClientRect(),A=window.innerWidth,_=window.innerHeight;let M=h.x,P=h.y;h.x+U.width>A&&(M=A-U.width-8),h.y+U.height>_&&(P=_-U.height-8),(M!==h.x||P!==h.y)&&g({x:M,y:P})},[m,h]);const q=n&&i>0,$=n&&i>=0&&i<u.length-1;return l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{ref:b,onContextMenu:y,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:192,columnNumber:7},void 0),m&&qr.createPortal(l.jsxDEV("div",{ref:x,className:"toolbar-context-menu",style:{position:"fixed",left:h.x,top:h.y,zIndex:en.DROPDOWN_PORTAL},children:l.jsxDEV(Tn,{children:[n&&l.jsxDEV(l.Fragment,{children:[l.jsxDEV(qe,{onSelect:T,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),l.jsxDEV(qe,{onSelect:S,disabled:!$,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),l.jsxDEV(qe,{onSelect:v,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),l.jsxDEV(qe,{onSelect:E,disabled:!$,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),l.jsxDEV(ms,{},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),l.jsxDEV(qe,{onSelect:w,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),l.jsxDEV(ms,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:226,columnNumber:15},void 0),l.jsxDEV(qe,{onSelect:R,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)},JD=({embedded:e=!1,iconMode:t=!1,onOpenBackupRestore:n,onOpenCloudSync:i})=>{const o=xt(),{t:s}=Se(),{isButtonVisible:r,visibleButtons:a}=Fr(),c=F.getBoardContainer(o),[u,d]=p.useState(!1),m=o.history.undos.length<=0,f=o.history.redos.length<=0,h=r("undo"),g=r("redo"),x=a.findIndex(N=>N.id==="undo"),b=a.findIndex(N=>N.id==="redo"),y=l.jsxDEV(ft.Row,{gap:1,children:[l.jsxDEV(at,{sideOffset:12,open:u,onOpenChange:N=>{d(N)},placement:e?"right-start":"bottom-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{type:"icon",visible:!0,selected:u,icon:l.jsxDEV($p,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:71,columnNumber:21},void 0),tooltip:u?void 0:s("general.menu"),tooltipPlacement:e?"right":"bottom","aria-label":s("general.menu"),"data-track":"toolbar_click_menu",onPointerDown:()=>{d(!u)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:67,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:66,columnNumber:11},void 0),l.jsxDEV(ct,{container:c,style:{zIndex:en.POPOVER_APP},children:l.jsxDEV(Tn,{onSelect:()=>{d(!1)},onClose:()=>{d(!1)},children:[l.jsxDEV(mg,{},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),l.jsxDEV(dg,{},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),l.jsxDEV(pg,{},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),l.jsxDEV(fg,{},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),l.jsxDEV(vg,{},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),l.jsxDEV(ms,{},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),l.jsxDEV(Eg,{},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),l.jsxDEV(hg,{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),l.jsxDEV(bg,{},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),l.jsxDEV(gg,{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),l.jsxDEV(xg,{},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),l.jsxDEV(ms,{},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),l.jsxDEV(Ng,{},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),l.jsxDEV(yg,{},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),l.jsxDEV(wg,{},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&&l.jsxDEV(_l,{buttonId:"undo",isVisible:!0,visibleIndex:x,children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(Xp,{},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:m},1,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:120,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:115,columnNumber:11},void 0),g&&l.jsxDEV(_l,{buttonId:"redo",isVisible:!0,visibleIndex:b,children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(Kp,{},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?l.jsxDEV("div",{className:Y("app-toolbar",{"app-toolbar--embedded":e,"app-toolbar--icon-only":t}),children:[y,l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(Kx,{},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):l.jsxDEV(Ye,{padding:1,className:Y("app-toolbar",At,{"app-toolbar--embedded":e,"app-toolbar--icon-only":t}),children:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:184,columnNumber:5},void 0)};function e_(e,t){return!e||e===ei.solid?null:e===ei.dashed?`${t*3},${t*2}`:e===ei.dotted?`${t},${t*2}`:null}function pi(e){return e!==void 0&&!isNaN(e[0])&&!isNaN(e[1])&&isFinite(e[0])&&isFinite(e[1])}class t_ extends Yp{constructor(t){super(t)}canDraw(t){return t.anchors&&t.anchors.length>0}draw(t){const n=Ql();n.classList.add("pen-path");const i=Zp(t),o=t.cornerRadius||0,s=Qp(i,t.closed,o),r=t.strokeWidth||2,a=document.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d",s),a.setAttribute("fill",Yx(t.fill)),a.setAttribute("stroke",t.strokeColor||"#000000"),a.setAttribute("stroke-width",String(r)),a.setAttribute("stroke-linecap","round"),a.setAttribute("stroke-linejoin","round");const c=e_(t.strokeStyle,r);return c&&a.setAttribute("stroke-dasharray",c),n.appendChild(a),n}}function n_(e,t){const n=e.point,i=Qx;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 jm(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(Zx/2)),t.setAttribute("fill","#ffffff"),t.setAttribute("stroke","#1890ff"),t.setAttribute("stroke-width","1"),t.classList.add("pen-handle"),t}function Pm(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 i_(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 a=document.createElementNS("http://www.w3.org/2000/svg","circle");a.setAttribute("cx",String(s[0])),a.setAttribute("cy",String(s[1])),a.setAttribute("r","3"),a.setAttribute("fill",i),a.setAttribute("opacity","0.6"),a.classList.add("pen-alignment-marker"),e.appendChild(a)}if(n.horizontal&&n.horizontalRefPoint){const 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 a=document.createElementNS("http://www.w3.org/2000/svg","circle");a.setAttribute("cx",String(s[0])),a.setAttribute("cy",String(s[1])),a.setAttribute("r","3"),a.setAttribute("fill",i),a.setAttribute("opacity","0.6"),a.classList.add("pen-alignment-marker"),e.appendChild(a)}}}function o_(e,t,n="#1890ff",i=2,o){const s=Ql();if(s.classList.add("pen-preview"),e.length===0)return s;if(t&&pi(t)&&o&&(o.horizontal||o.vertical)&&i_(s,t,o),e.length>0){const r=Qp(e,!1),a=document.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d",r),a.setAttribute("fill","none"),a.setAttribute("stroke",n),a.setAttribute("stroke-width",String(i)),a.setAttribute("stroke-linecap","round"),a.setAttribute("stroke-linejoin","round"),s.appendChild(a)}if(t&&pi(t)&&e.length>0){const r=e[e.length-1];if(pi(r.point)){const a=document.createElementNS("http://www.w3.org/2000/svg","line"),c=r.handleOut&&pi(r.handleOut)?r.handleOut:r.point;a.setAttribute("x1",String(c[0])),a.setAttribute("y1",String(c[1])),a.setAttribute("x2",String(t[0])),a.setAttribute("y2",String(t[1])),a.setAttribute("stroke",n),a.setAttribute("stroke-width","1"),a.setAttribute("stroke-dasharray","5,5"),a.setAttribute("opacity","0.6"),s.appendChild(a)}}for(let r=0;r<e.length;r++){const a=e[r];if(!pi(a.point))continue;if(a.handleIn&&pi(a.handleIn)){const u=Pm(a.point,a.handleIn);s.appendChild(u);const d=jm(a.handleIn);s.appendChild(d)}if(a.handleOut&&pi(a.handleOut)){const u=Pm(a.point,a.handleOut);s.appendChild(u);const d=jm(a.handleOut);s.appendChild(d)}const c=n_(a,r===e.length-1);s.appendChild(c)}return s}const s_=3,r_=3,Cm=8,jl=new WeakMap;function Zn(e){let t=jl.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}},jl.set(e,t)),t}function Am(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=Cm,a=null,c=null,u=Cm,d=null,m=null;for(const f of s){const h=Math.abs(e[0]-f.point[0]),g=Math.abs(e[1]-f.point[1]);h<r&&(r=h,a=f.point[0],c=f.point),g<u&&(u=g,d=f.point[1],m=f.point)}return a!==null&&(o[0]=a,i.vertical=!0,i.verticalRefPoint=c),d!==null&&(o[1]=d,i.horizontal=!0,i.horizontalRefPoint=m),i.referencePoint=i.verticalRefPoint||i.horizontalRefPoint,{snappedPoint:o,alignment:i}}function so(e){const t=Zn(e);t.previewG&&t.previewG.remove(),Sg(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 Sg(e){F.getElementHost(e).querySelectorAll(".pen-preview").forEach(i=>i.remove())}function Ao(e){const t=Zn(e),n=F.getElementHost(e);t.previewG&&t.previewG.remove(),t.previewG=o_(t.anchors,t.currentPoint,"#1890ff",2,t.alignment),n.appendChild(t.previewG)}function yr(e,t=!1){const n=Zn(e),i=[...n.anchors];if(n.previewG&&(n.previewG.remove(),n.previewG=null),Sg(e),i.length>=2){const o=Jx(e,i,t);n.isCreating=!1,n.anchors=[],n.isDraggingHandle=!1,n.dragStartPoint=null,n.currentPoint=null,ue.insertNode(e,o,[e.children.length]),t?(oi(e),_i(e,o)):oi(e)}else so(e)}function Fo(e){return F.getPointer(e)===Bn.pen}function a_(e){const t=Zn(e);t.isCreating&&(Fo(e)||(t.anchors.length>=2?yr(e,!1):so(e)))}const l_=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o,keyDown:s,globalKeyDown:r}=e,a=u=>u instanceof HTMLInputElement||u instanceof HTMLTextAreaElement||u instanceof HTMLElement&&u.isContentEditable,c=u=>{if(u.defaultPrevented||!Fo(e)||a(u.target))return!1;const d=Zn(e);return d.isCreating?u.key==="Enter"?(yr(e,!1),u.preventDefault(),!0):u.key==="Escape"?(so(e),u.preventDefault(),!0):tt.isHotkey(["mod+z"],{byKey:!0})(u)||u.key==="Backspace"||u.key==="Delete"?(d.anchors.length>0&&(d.anchors.pop(),Ao(e)),d.anchors.length===0&&so(e),u.preventDefault(),!0):!1:!1};return e.pointerDown=u=>{if(a_(e),!Fo(e)){t(u);return}const d=Zn(e);let m=Ot(e,Ft(e,u.x,u.y));if(d.isCreating&&d.anchors.length>=r_){const x={anchors:d.anchors};if(eN(x,m)){yr(e,!0);return}}if(d.anchors.length>0){const{snappedPoint:x}=Am(m,d.anchors,!1);m=x}d.isCreating=!0,d.isDraggingHandle=!0,d.dragStartPoint=m;const h=Qa(e).defaultAnchorType,g={point:m,type:h};d.anchors.push(g),d.alignment={horizontal:!1,vertical:!1,horizontalRefPoint:null,verticalRefPoint:null,referencePoint:null},Ao(e)},e.pointerMove=u=>{if(!Fo(e)){n(u);return}const d=Zn(e);let m=Ot(e,Ft(e,u.x,u.y));const f=d.isDraggingHandle,{snappedPoint:h,alignment:g}=Am(m,d.anchors,f);if(d.currentPoint=h,d.alignment=g,d.isDraggingHandle&&d.dragStartPoint&&d.anchors.length>0&&tN(d.dragStartPoint,m)>s_){const b=d.anchors.length-1,y=d.anchors[b];if(y.type!=="corner"){if(y.type==="smooth"||y.type==="symmetric"){const N=nN(y.point,m);d.anchors[b]={...y,handleIn:N.handleIn,handleOut:N.handleOut}}}}d.isCreating&&Jl(e,"pen-preview",()=>{Ao(e)}),n(u)},e.pointerUp=u=>{if(!Fo(e)){i(u);return}const d=Zn(e);d.isDraggingHandle=!1,d.dragStartPoint=null,Ao(e),i(u)},e.globalPointerUp=u=>{o(u)},e.globalKeyDown=u=>{c(u)||r(u)},e.keyDown=u=>{c(u)||s(u)},e};function Dn(e){const t=jl.get(e);t!=null&&t.isCreating&&(t.anchors.length>=2?yr(e,!1):so(e))}const Ic=[{icon:l.jsxDEV(No,{},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:rt.feltTipPen,titleKey:"toolbar.pen"},{icon:l.jsxDEV(iN,{},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:Bn.pen,titleKey:"toolbar.vectorPen"},{icon:l.jsxDEV(oN,{},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:rt.eraser,titleKey:"toolbar.eraser"},{icon:l.jsxDEV(sN,{},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:rt.laserPointer,titleKey:"toolbar.laserPointer"}],c_=Jp(Ic,5),Vc=({onPointerUp:e})=>{const{t}=Se(),n=xt();return l.jsxDEV(Ye,{padding:1,children:l.jsxDEV(ft.Row,{gap:1,align:"center",children:l.jsxDEV(ft.Row,{gap:1,children:c_.map((i,o)=>i.map((s,r)=>l.jsxDEV(ne,{className:Y({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!==Bn.pen&&Dn(n),mt(n,St.dnd),fe.updatePointerType(n,s.pointer)},onPointerUp:()=>{mt(n,St.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)},u_=[{icon:l.jsxDEV(ef,{},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:De.rectangle},{icon:l.jsxDEV(tf,{},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:De.ellipse},{icon:l.jsxDEV(nf,{},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:De.triangle},{icon:l.jsxDEV(of,{},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:ec.terminal},{icon:l.jsxDEV(sf,{},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:De.diamond},{icon:l.jsxDEV(rf,{},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:De.parallelogram},{icon:l.jsxDEV(af,{},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:De.roundRectangle}],d_=Jp(u_,5),Uc=({onPointerUp:e})=>{const t=xt();return l.jsxDEV(Ye,{padding:1,children:l.jsxDEV(ft.Col,{gap:1,children:d_.map((n,i)=>l.jsxDEV(ft.Row,{gap:1,children:n.map((o,s)=>l.jsxDEV(ne,{className:Y({fillable:!1}),type:"icon",size:"small",visible:!0,icon:o.icon,tooltip:o.title,"aria-label":o.title,onPointerDown:()=>{Dn(t),mt(t,St.dnd),fe.updatePointerType(t,o.pointer)},onPointerUp:()=>{mt(t,St.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)},m_=[{icon:l.jsxDEV(rN,{},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:kn.straight},{icon:l.jsxDEV(aN,{},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:kn.elbow},{icon:l.jsxDEV(lN,{},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:kn.curve}],Rc=({onPointerUp:e})=>{const t=xt();return l.jsxDEV(Ye,{padding:1,children:l.jsxDEV(ft.Row,{gap:1,children:m_.map((n,i)=>l.jsxDEV(ne,{className:Y({fillable:!1}),type:"icon",size:"small",visible:!0,icon:n.icon,tooltip:n.title,"aria-label":n.title,onPointerDown:()=>{Dn(t),mt(t,St.drawing),fe.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)},kg=[{value:hi.default,labelKey:"theme.default"},{value:hi.colorful,labelKey:"theme.colorful"},{value:hi.soft,labelKey:"theme.soft"},{value:hi.retro,labelKey:"theme.retro"},{value:hi.dark,labelKey:"theme.dark"},{value:hi.starry,labelKey:"theme.starry"}],Tg=l.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:l.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),nr=e=>e===vt.hand||e===vt.selection||e===is,Dg=l.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),Mm={hand:{icon:l.jsxDEV(hf,{},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:vt.hand},selection:{icon:l.jsxDEV(ff,{},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:vt.selection},lasso:{icon:l.jsxDEV(pf,{},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:is},mind:{icon:l.jsxDEV(lr,{},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:ji.mind},text:{icon:l.jsxDEV(sc,{},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:De.text},freehand:{icon:l.jsxDEV(No,{},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:rt.feltTipPen,hasPopup:!0,popupKey:"freehand"},arrow:{icon:l.jsxDEV(oc,{},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:kn.straight,hasPopup:!0,popupKey:"arrow"},shape:{icon:l.jsxDEV(ic,{},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:De.rectangle,hasPopup:!0,popupKey:"shape"},image:{icon:l.jsxDEV(Rr,{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:l.jsxDEV(Ur,{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:l.jsxDEV(Br,{},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:l.jsxDEV(Lr,{},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:l.jsxDEV(mf,{},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:l.jsxDEV(df,{},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:l.jsxDEV(uf,{},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:l.jsxDEV(Xp,{},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:l.jsxDEV(Kp,{},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"}},p_=({embedded:e=!1})=>{const{t}=Se(),n=xt(),i=F.getBoardContainer(n),{hiddenButtons:o,showButton:s}=Fr(),[r,a]=p.useState(!1),[c,u]=p.useState(!1),d=p.useRef(null),m=p.useRef(null),f=p.useCallback(()=>{d.current&&(clearTimeout(d.current),d.current=null),m.current&&(clearTimeout(m.current),m.current=null)},[]),h=p.useCallback(()=>"ontouchstart"in window||navigator.maxTouchPoints>0,[]),g=p.useCallback(()=>{h()||(f(),u(!0),d.current=setTimeout(()=>{a(!0)},200))},[f,h]),x=p.useCallback(()=>{h()||(d.current&&(clearTimeout(d.current),d.current=null),m.current=setTimeout(()=>{u(!1),a(!1)},150))},[h]),b=p.useCallback(()=>{h()&&(a(w=>!w),u(!1))},[h]),y=p.useCallback(()=>{f(),u(!0)},[f]),N=p.useCallback(()=>{m.current=setTimeout(()=>{u(!1),a(!1)},150)},[]);return l.jsxDEV(at,{open:r,onOpenChange:w=>{!w&&(h()||!c)&&a(!1)},placement:e?"right-start":"bottom",sideOffset:12,children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{onMouseEnter:g,onMouseLeave:x,onClick:b,children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(cN,{},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),l.jsxDEV(ct,{container:i,style:{zIndex:en.POPOVER},onMouseEnter:y,onMouseLeave:N,children:l.jsxDEV(f_,{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)},f_=({hiddenButtons:e,showButton:t})=>{const{t:n}=Se(),i=xt(),o=F.getBoardContainer(i),{openDialog:s}=Gt(),r=tc(),[a,c]=p.useState(null),[u,d]=p.useState(null),m=p.useRef({}),[f,h]=p.useState(null),g=p.useRef(null),[x,b]=p.useState(rt.feltTipPen),y=p.useCallback(()=>{c(null),d(null),Object.values(m.current).forEach(I=>{I&&clearTimeout(I)})},[]),N=p.useCallback(I=>{if(Object.values(m.current).forEach(G=>{G&&clearTimeout(G)}),u===I){d(null);return}a===I&&!u?c(null):(d(null),c(I))},[a,u]),w=p.useCallback(I=>{a&&!u||(m.current[I]&&clearTimeout(m.current[I]),Object.entries(m.current).forEach(([G,ce])=>{G!==I&&ce&&(clearTimeout(ce),m.current[G]=null)}),u&&u!==I?(c(I),d(I)):a||(m.current[I]=setTimeout(()=>{c(I),d(I)},300)))},[u,a]),T=p.useCallback(I=>{m.current[I]&&(clearTimeout(m.current[I]),m.current[I]=null),u===I&&(m.current[I]=setTimeout(()=>{c(null),d(null)},400))},[u]),S=p.useCallback(I=>{m.current[I]&&(clearTimeout(m.current[I]),m.current[I]=null)},[]),v=p.useCallback(I=>{u===I&&(c(null),d(null))},[u]),E=p.useCallback(I=>{Dn(i),I===De.text?mt(i,null):mt(i,St.dnd),fe.updatePointerType(i,I),r(I)},[i,r]),R=p.useCallback(I=>{I!==De.text&&mt(i,St.drawing)},[i]),q=p.useCallback(I=>{const G=Mm[I];if(G){if(G.hasPopup&&G.popupKey){N(G.popupKey);return}switch(y(),Dn(i),G.pointer&&(nr(G.pointer)?(fe.updatePointerType(i,G.pointer),r(G.pointer)):(E(G.pointer),R(G.pointer))),I){case"image":Hr(i);break;case"ai-image":s(ln.aiImageGeneration);break;case"ai-video":s(ln.aiVideoGeneration);break;case"mermaid-to-drawnix":s(ln.mermaidToDrawnix);break;case"markdown-to-drawnix":s(ln.markdownToDrawnix);break;case"undo":i.undo();break;case"redo":i.redo();break}}},[i,s,E,R,y,r,N]),$=p.useCallback((I,G)=>{I.preventDefault(),I.stopPropagation(),h({buttonId:G,x:I.clientX,y:I.clientY})},[]),V=p.useCallback(()=>{h(null)},[]),U=p.useCallback(()=>{f&&(t(f.buttonId),V())},[f,t,V]);Fn.useEffect(()=>{if(!f)return;const I=ce=>{g.current&&!g.current.contains(ce.target)&&V()},G=ce=>{ce.key==="Escape"&&V()};return document.addEventListener("mousedown",I),document.addEventListener("keydown",G),()=>{document.removeEventListener("mousedown",I),document.removeEventListener("keydown",G)}},[f,V]);const A=p.useCallback(I=>{switch(I){case"freehand":return l.jsxDEV(Vc,{onPointerUp:G=>{y(),r(G),b(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 l.jsxDEV(Uc,{onPointerUp:G=>{y(),r(G)}},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 l.jsxDEV(Rc,{onPointerUp:G=>{y(),r(G)}},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 l.jsxDEV(Tn,{children:kg.map(G=>{const ce=i.theme.themeColorMode===G.value;return l.jsxDEV(qe,{icon:ce?Tg:Dg,"data-track":`toolbar_click_theme_${G.value}`,onSelect:()=>{fe.updateThemeColor(i,G.value),y()},"aria-label":n(G.labelKey),selected:ce,children:n(G.labelKey)},G.value,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:521,columnNumber:17},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:517,columnNumber:11},void 0);default:return null}},[i,y,r,n]),_=p.useMemo(()=>{const I=Ic.find(G=>G.pointer===x);return(I==null?void 0:I.icon)||l.jsxDEV(No,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:547,columnNumber:30},void 0)},[x]),[M,P]=p.useState(!1),Z=p.useCallback(()=>{var I;return l.jsxDEV("div",{className:"more-tools-panel__zoom-row",onContextMenu:G=>$(G,"zoom"),children:l.jsxDEV(ft.Row,{gap:1,children:[l.jsxDEV(ne,{type:"button",icon:l.jsxDEV(lf,{},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:()=>{fe.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),l.jsxDEV(at,{sideOffset:12,open:M,onOpenChange:G=>{P(G)},placement:"right-start",children:[l.jsxDEV(Tt,{content:n("zoom.fit"),showArrow:!1,children:l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{"aria-label":n("zoom.fit"),"data-track":"toolbar_click_zoom_menu",className:`zoom-menu-trigger ${M?"active":""}`,onPointerUp:()=>{P(!M)},children:[Number(((((I=i==null?void 0:i.viewport)==null?void 0:I.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),l.jsxDEV(ct,{container:o,style:{zIndex:en.POPOVER+1},children:l.jsxDEV(Tn,{onSelect:()=>{P(!1)},children:[l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_fit",onSelect:()=>{fe.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),l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_fit_frame",onSelect:()=>{nc(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),l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_100",onSelect:()=>{fe.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),l.jsxDEV(ne,{type:"button",icon:l.jsxDEV(cf,{},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:()=>{fe.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,$,n,M]),pe=p.useCallback(I=>{var we,Fe,K,Ce;if(I==="zoom")return Z();const G=Mm[I];if(!G)return null;const ce=n(G.titleKey),X=I==="freehand"?_:G.icon,ae=I==="undo"&&(((Fe=(we=i.history)==null?void 0:we.undos)==null?void 0:Fe.length)??0)<=0,le=I==="redo"&&(((Ce=(K=i.history)==null?void 0:K.redos)==null?void 0:Ce.length)??0)<=0,be=ae||le;if(G.hasPopup&&G.popupKey){const We=G.popupKey;return l.jsxDEV("div",{className:"more-tools-panel__item",onContextMenu:it=>$(it,I),children:l.jsxDEV(at,{open:a===We,sideOffset:2,onOpenChange:it=>{it||y()},placement:"right-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{onMouseEnter:()=>w(We),onMouseLeave:()=>T(We),children:l.jsxDEV(ne,{type:"icon",icon:X,tooltip:ce,tooltipPlacement:"left","aria-label":ce,visible:!0,selected:a===We,"data-track":`toolbar_click_${I}`,onPointerUp:()=>q(I)},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),l.jsxDEV(ct,{container:o,style:{zIndex:en.POPOVER+1},onMouseEnter:()=>S(We),onMouseLeave:()=>v(We),children:A(We)},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)},I,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:667,columnNumber:9},void 0)}return l.jsxDEV("div",{className:"more-tools-panel__item",onContextMenu:We=>$(We,I),children:l.jsxDEV(ne,{type:"icon",icon:X,tooltip:ce,tooltipPlacement:"right","aria-label":ce,visible:!0,selected:!1,disabled:be,"data-track":`toolbar_click_${I}`,onPointerUp:()=>q(I)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:720,columnNumber:9},void 0)},I,!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,a,_,q,$,w,T,S,v,A,y,Z]);return e.length===0?l.jsxDEV("div",{className:"more-tools-panel",children:[l.jsxDEV("div",{className:"more-tools-panel__header",children:l.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),l.jsxDEV("div",{className:"more-tools-panel__empty",children:l.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):l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{className:"more-tools-panel",children:[l.jsxDEV("div",{className:"more-tools-panel__header",children:l.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),l.jsxDEV("div",{className:"more-tools-panel__content",children:e.map(I=>pe(I.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),l.jsxDEV("div",{className:"more-tools-panel__footer",children:l.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&&qr.createPortal(l.jsxDEV("div",{ref:g,className:"toolbar-context-menu",style:{position:"fixed",left:f.x,top:f.y,zIndex:en.DROPDOWN_PORTAL},children:l.jsxDEV(Tn,{children:l.jsxDEV(qe,{onSelect:U,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)},h_=p.lazy(()=>Me(()=>import("./tool-windows-Bd5iqcJh.js").then(e=>e.p2),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),g_=p.lazy(()=>Me(()=>import("./tool-windows-Bd5iqcJh.js").then(e=>e.p4),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MinimizedToolsBar})));var _g=(e=>(e.shape="shape",e.arrow="arrow",e.freehand="freehand",e.theme="theme",e))(_g||{});const Im=[{icon:l.jsxDEV(hf,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:123,columnNumber:11},void 0),pointer:vt.hand,titleKey:"toolbar.hand",visibilityKey:"hand"},{icon:l.jsxDEV(ff,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:129,columnNumber:11},void 0),pointer:vt.selection,titleKey:"toolbar.selection",visibilityKey:"selection"},{icon:l.jsxDEV(pf,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:135,columnNumber:11},void 0),pointer:is,titleKey:"toolbar.lasso",visibilityKey:"lasso"},{icon:l.jsxDEV(lr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:141,columnNumber:11},void 0),pointer:ji.mind,titleKey:"toolbar.mind",visibilityKey:"mind"},{icon:l.jsxDEV(sc,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:147,columnNumber:11},void 0),pointer:De.text,titleKey:"toolbar.text",visibilityKey:"text"},{icon:l.jsxDEV(Rr,{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:l.jsxDEV(Ur,{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:l.jsxDEV(Br,{},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:l.jsxDEV(Lr,{},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:l.jsxDEV(lr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:177,columnNumber:11},void 0),pointer:ji.mind,titleKey:"toolbar.mind",visibilityKey:"mind"},{icon:l.jsxDEV(No,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:183,columnNumber:11},void 0),pointer:rt.feltTipPen,titleKey:"toolbar.pen",key:"freehand",visibilityKey:"freehand"},{icon:l.jsxDEV(oc,{},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:kn.straight,visibilityKey:"arrow"},{icon:l.jsxDEV(ic,{},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:De.rectangle,visibilityKey:"shape"},{icon:l.jsxDEV(mf,{},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:l.jsxDEV(df,{},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:l.jsxDEV(uf,{},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"}],b_=e=>Object.keys(kn).includes(e.pointer),x_=e=>Object.keys(De).includes(e.pointer)||Object.keys(ec).includes(e.pointer),N_=({embedded:e=!1,iconMode:t=!1,onOpenMediaLibrary:n,minimizedToolsBarEnabled:i=!1,onEnableToolWindows:o})=>{const s=xt(),{appState:r,openDialog:a}=Gt(),{t:c}=Se(),u=tc(),d=F.getBoardContainer(s),{visibleButtons:m,loading:f,reorderButton:h}=Fr(),{getDragProps:g}=uN({items:m,getId:D=>D.id,onReorder:(D,j)=>{h(D,j,!0)},enabled:e}),[x,b]=p.useState({freehand:!1,arrow:!1,shape:!1,theme:!1}),[y,N]=p.useState(null),w=p.useRef({freehand:null,arrow:null,shape:null,theme:null}),[T,S]=p.useState(Im.find(D=>D.key==="freehand")),[v,E]=p.useState(!1),R=p.useCallback(async D=>{try{D.type===In.IMAGE?await Yl(s,D.url):D.type===In.VIDEO?await gf(s,D.url):D.type===In.AUDIO&&await Ol(s,D.url,{title:D.name,duration:D.duration,previewImageUrl:D.thumbnail,prompt:D.prompt,mv:D.modelName,clipId:D.clipId,providerTaskId:D.providerTaskId}),re.success("素材已插入到画板")}catch(j){console.error("Failed to insert asset:",j),re.error("插入素材失败")}},[s]),q=p.useCallback(()=>{if(n){n({mode:ii.SELECT,onSelect:R,selectButtonText:"插入"});return}E(!0)},[R,n]),$=p.useCallback(()=>{E(!1)},[]),V=()=>{b({freehand:!1,arrow:!1,shape:!1,theme:!1}),N(null),Object.values(w.current).forEach(D=>{D&&clearTimeout(D)})},U=D=>{N(null),Object.values(w.current).forEach(j=>{j&&clearTimeout(j)}),b({freehand:!1,arrow:!1,shape:!1,theme:!1,[D]:!0})},A=D=>{w.current[D]&&clearTimeout(w.current[D]),Object.entries(w.current).forEach(([j,W])=>{j!==D&&W&&(clearTimeout(W),w.current[j]=null)}),y&&y!==D?(b(j=>({...j,[y]:!1,[D]:!0})),N(D)):x[D]||(w.current[D]=setTimeout(()=>{b(j=>({...j,[D]:!0})),N(D)},300))},_=D=>{w.current[D]&&(clearTimeout(w.current[D]),w.current[D]=null),y===D&&(w.current[D]=setTimeout(()=>{b(j=>({...j,[D]:!1})),N(null)},200))},M=D=>{w.current[D]&&(clearTimeout(w.current[D]),w.current[D]=null)},P=D=>{y===D&&(b(j=>({...j,[D]:!1})),N(null))},Z=D=>{Dn(s),D===De.text?(mt(s,null),fe.updatePointerType(s,D),u(D)):(mt(s,St.dnd),fe.updatePointerType(s,D),u(D))},pe=D=>{D!==De.text&&mt(s,St.drawing)},I=()=>Object.values(x).some(D=>D),G=D=>F.isPointer(s,D.pointer)&&!I(),ce=D=>F.isInPointer(D,[rt.feltTipPen,rt.eraser,rt.laserPointer,Bn.pen]),X=D=>{V(),Dn(s),D.pointer&&!nr(D.pointer)?pe(D.pointer):D.pointer&&nr(D.pointer)&&(fe.updatePointerType(s,D.pointer),u(D.pointer)),D.key==="image"?Hr(s):D.key==="media-library"?q():D.key==="ai-image"?a(ln.aiImageGeneration):D.key==="ai-video"?a(ln.aiVideoGeneration):D.key==="mermaid-to-drawnix"?a(ln.mermaidToDrawnix):D.key==="markdown-to-drawnix"&&a(ln.markdownToDrawnix)},ae=(D,j,W)=>{const Q=()=>{switch(W){case"freehand":return l.jsxDEV(Vc,{onPointerUp:z=>{V(),u(z),S(Ic.find(te=>te.pointer===z))}},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 l.jsxDEV(Uc,{onPointerUp:z=>{V(),u(z)}},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 l.jsxDEV(Rc,{onPointerUp:z=>{V(),u(z)}},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 l.jsxDEV(Tn,{children:kg.map(z=>{const te=s.theme.themeColorMode===z.value;return l.jsxDEV(qe,{icon:te?Tg:Dg,"data-track":`toolbar_click_theme_${z.value}`,onSelect:()=>{fe.updateThemeColor(s,z.value),V()},"aria-label":c(z.labelKey),selected:te,children:c(z.labelKey)},z.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)}},C=()=>{const z=x[W],te=Object.entries(x).some(([ee,O])=>ee!==W&&O);switch(W){case"freehand":return z||ce(s)&&!te;case"shape":return z||x_(s)&&!F.isPointer(s,De.text);case"arrow":return z||b_(s);default:return z}},B=W==="freehand"?T.icon:D.icon,L=W==="freehand"?T.titleKey?c(T.titleKey):"Freehand":D.titleKey?c(D.titleKey):"";return l.jsxDEV(at,{open:x[W],sideOffset:12,onOpenChange:z=>{z||V()},placement:e?"right-start":"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{onMouseEnter:()=>A(W),onMouseLeave:()=>_(W),children:l.jsxDEV(ne,{type:"icon",visible:!0,selected:C(),icon:B,tooltip:L,"aria-label":L,"data-track":`toolbar_click_${W}`,onPointerDown:()=>{U(W),W==="freehand"&&T.pointer&&Z(T.pointer)},onPointerUp:()=>{W==="freehand"&&pe()}},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),l.jsxDEV(ct,{container:d,style:{zIndex:en.POPOVER},onMouseEnter:()=>M(W),onMouseLeave:()=>P(W),children:Q()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:652,columnNumber:9},void 0)]},j,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:611,columnNumber:7},void 0)},le=(D,j)=>l.jsxDEV(ne,{type:"radio",icon:D.icon,checked:G(D),tooltip:D.titleKey?c(D.titleKey):"",tooltipPlacement:e?"right":"bottom","aria-label":D.titleKey?c(D.titleKey):"","data-track":`toolbar_click_${D.pointer||D.key}`,onPointerDown:()=>{D.pointer&&!nr(D.pointer)&&Z(D.pointer)},onPointerUp:()=>{X(D)}},j,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:667,columnNumber:7},void 0),be=p.useMemo(()=>{const D=new Map;return Im.forEach(j=>{j.visibilityKey&&D.set(j.visibilityKey,j)}),D},[]),[we,Fe]=p.useState(!1),K=p.useCallback(D=>{var W;const j=e?ft.Col:ft.Row;return l.jsxDEV("div",{className:Y("creation-toolbar__zoom-inline",{"creation-toolbar__zoom-inline--vertical":e}),children:l.jsxDEV(j,{gap:0,children:[l.jsxDEV(ne,{type:"button",icon:l.jsxDEV(lf,{},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:c("zoom.out"),tooltipPlacement:e?"right":"bottom","aria-label":c("zoom.out"),"data-track":"toolbar_click_zoom_out",onPointerUp:()=>{fe.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),l.jsxDEV(at,{sideOffset:12,open:we,onOpenChange:Q=>{Fe(Q)},placement:e?"right-start":"bottom",children:[l.jsxDEV(Tt,{content:c("zoom.fit"),showArrow:!1,children:l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{"aria-label":c("zoom.fit"),"data-track":"toolbar_click_zoom_menu",className:Y("zoom-menu-trigger",{active:we}),onPointerUp:()=>{Fe(!we)},children:[Number(((((W=s==null?void 0:s.viewport)==null?void 0:W.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),l.jsxDEV(ct,{container:d,style:{zIndex:en.POPOVER},children:l.jsxDEV(Tn,{onSelect:()=>{Fe(!1)},children:[l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_fit",onSelect:()=>{fe.fitViewport(s)},"aria-label":c("zoom.fit"),shortcut:"Cmd+Shift+=",children:c("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),l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_fit_frame",onSelect:()=>{nc(s)},"aria-label":c("zoom.fitFrame"),children:c("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),l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_100",onSelect:()=>{fe.updateZoom(s,1)},"aria-label":c("zoom.100"),shortcut:"Cmd+0",children:c("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),l.jsxDEV(ne,{type:"button",icon:l.jsxDEV(cf,{},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:c("zoom.in"),tooltipPlacement:e?"right":"bottom","aria-label":c("zoom.in"),"data-track":"toolbar_click_zoom_in",onPointerUp:()=>{fe.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-${D}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:712,columnNumber:9},void 0)},[s,d,e,c,we]),Ce=p.useCallback((D,j)=>{if(D==="zoom")return K(j);const W=be.get(D);return!W||r.isMobile&&W.pointer===vt.hand?null:W.key&&Object.values(_g).includes(W.key)?ae(W,j,W.key):le(W,j)},[be,r.isMobile,ae,le,K]),We=p.useCallback((D,j,W=!0,Q=-1)=>{const C=Ce(D,j);if(!C)return null;const B=g(D,j);return l.jsxDEV(_l,{buttonId:D,isVisible:W,visibleIndex:Q,children:l.jsxDEV("div",{className:Y("toolbar-button-wrapper",{"toolbar-button-wrapper--dragging":B["data-dragging"],"toolbar-button-wrapper--drag-over":B["data-drag-over"],"toolbar-button-wrapper--drag-before":B["data-drag-position"]==="before","toolbar-button-wrapper--drag-after":B["data-drag-position"]==="after"}),"data-button-id":D,...B,children:C},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:873,columnNumber:11},void 0)},`ctx-${D}-${j}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:867,columnNumber:9},void 0)},[Ce,g]),it=l.jsxDEV(ft.Row,{gap:1,children:[!f&&m.map((D,j)=>e?We(D.id,j,!0,j):Ce(D.id,j)),l.jsxDEV(p_,{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&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(g_,{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),Ke=v?l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(h_,{isOpen:v,onClose:$,mode:ii.SELECT,onSelect:R,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?l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{className:Y("draw-toolbar",{"draw-toolbar--embedded":e,"draw-toolbar--icon-only":t}),children:it},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:928,columnNumber:9},void 0),Ke]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:927,columnNumber:7},void 0):l.jsxDEV(l.Fragment,{children:[l.jsxDEV(Ye,{padding:1,className:Y("draw-toolbar",At,{"draw-toolbar--embedded":e,"draw-toolbar--icon-only":t}),children:it},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:943,columnNumber:7},void 0),Ke]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:942,columnNumber:5},void 0)},Vm="https://tuziai.oss-cn-shenzhen.aliyuncs.com/aitu/AiTu.png",y_="https://tuziai.oss-cn-shenzhen.aliyuncs.com/linkme.png",w_=()=>{const e=xt(),t=F.getBoardContainer(e),[n,i]=p.useState(!1);return p.useEffect(()=>{const o=new Image;o.src=Vm;const s=new Image;s.src=y_},[]),l.jsxDEV(at,{placement:"right-end",sideOffset:12,open:n,onOpenChange:i,children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(dN,{},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),l.jsxDEV(ct,{container:t,style:{zIndex:en.POPOVER_FEEDBACK},children:l.jsxDEV("div",{className:"feedback-qrcode-content",children:l.jsxDEV("div",{className:"feedback-qrcode-grid",children:l.jsxDEV("div",{className:"feedback-qrcode-item",children:[l.jsxDEV("img",{src:Vm,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),l.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)},v_=({projectDrawerOpen:e,onProjectDrawerToggle:t,toolboxDrawerOpen:n=!1,onToolboxDrawerToggle:i,taskPanelExpanded:o,onTaskPanelToggle:s})=>{const{activeTasks:r,completedTasks:a,failedTasks:c}=mN(),d=r.length+a.length+c.length>0?`任务队列 (生成中: ${r.length}, 已完成: ${a.length}, 失败: ${c.length})`:"任务队列 (暂无任务)";return l.jsxDEV("div",{className:"bottom-actions-section",children:[l.jsxDEV(w_,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:50,columnNumber:7},void 0),l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(pN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:55,columnNumber:15},void 0),"aria-label":e?"关闭项目":"打开项目",tooltip:e?"关闭项目":"打开项目",tooltipPlacement:"right",selected:e,visible:!0,"data-track":"toolbar_click_project_drawer","data-testid":"toolbar-project",onPointerDown:m=>{m.event.stopPropagation()},onClick:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:53,columnNumber:7},void 0),i&&l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(fN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:73,columnNumber:17},void 0),"aria-label":n?"关闭工具箱":"打开工具箱",tooltip:n?"关闭工具箱":"打开工具箱",tooltipPlacement:"right",selected:n,visible:!0,"data-track":"toolbar_click_toolbox","data-testid":"toolbar-toolbox",onPointerDown:m=>{m.event.stopPropagation()},onClick:i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:71,columnNumber:9},void 0),l.jsxDEV("div",{className:"bottom-actions-section__task-wrapper",children:[l.jsxDEV(hN,{count:r.length>0?r.length:0,showZero:!1,offset:[6,-6],children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(gN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:98,columnNumber:19},void 0),"aria-label":"任务队列",tooltip:d,tooltipPlacement:"right",selected:o,visible:!0,"data-track":"toolbar_click_tasks","data-testid":"toolbar-tasks",onPointerDown:m=>{m.event.stopPropagation()},onClick:s},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:96,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:91,columnNumber:9},void 0),r.length>0&&l.jsxDEV("div",{className:"bottom-actions-section__status bottom-actions-section__status--active"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:115,columnNumber:11},void 0),c.length>0&&r.length===0&&l.jsxDEV("div",{className:"bottom-actions-section__status bottom-actions-section__status--failed"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:118,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:90,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:48,columnNumber:5},void 0)},E_=p.lazy(()=>Me(()=>import("./TaskQueuePanel-zmK3r_Sy.js"),__vite__mapDeps([0,2,3]),import.meta.url).then(e=>({default:e.TaskQueuePanel}))),S_=460,k_=["ai-image","ai-video"],T_=Fn.memo(({className:e,projectDrawerOpen:t=!1,onProjectDrawerToggle:n,toolboxDrawerOpen:i=!1,onToolboxDrawerToggle:o,taskPanelExpanded:s=!1,onTaskPanelToggle:r,onOpenBackupRestore:a,onOpenCloudSync:c,onOpenMediaLibrary:u,deferredFeaturesEnabled:d=!1,minimizedToolsBarEnabled:m=!1,onEnableToolWindows:f})=>{const[h,g]=p.useState(!1),[x,b]=p.useState(!0),y=p.useRef(!1),N=p.useRef(null),w=p.useRef(null),T=p.useRef(!1),{isMobile:S,isTablet:v}=bN(),E=S||v;zr(N,{enablePositionTracking:!0,enableScaleCompensation:!0});const R=p.useCallback(M=>{if(M[0]){const P=M[0].contentRect.height;g(P<S_)}},[]);p.useEffect(()=>{const M=N.current;if(!M)return;const P=new ResizeObserver(R);return P.observe(M),()=>{P.disconnect()}},[R]),p.useEffect(()=>{if(T.current)return;const M=w.current;if(!M)return;const P=()=>{T.current=!0;let pe=null;for(const X of k_){const ae=M.querySelector(`[data-button-id="${X}"]`);if(ae){pe=ae;break}}if(!pe)return;const I=M.getBoundingClientRect(),G=pe.getBoundingClientRect();if(!(G.bottom<=I.bottom&&G.top>=I.top)&&I.height>0){const X=G.top-I.top;M.scrollTop+=X}},Z=setTimeout(()=>{requestAnimationFrame(P)},100);return()=>{clearTimeout(Z)}},[]);const q=p.useCallback(()=>{!s&&!y.current&&(y.current=!0),r==null||r()},[s,r]),$=p.useCallback(()=>{s&&(r==null||r())},[s,r]),V=p.useCallback(()=>{b(M=>!M)},[]),{openDialog:U}=Gt(),A=p.useCallback(()=>{U(ln.aiImageGeneration)},[U]),_=p.useCallback(()=>{U(ln.aiVideoGeneration)},[U]);return l.jsxDEV(l.Fragment,{children:[y.current&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(E_,{expanded:s,onClose:$},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:191,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:190,columnNumber:11},void 0),l.jsxDEV(Ye,{ref:N,className:Y("unified-toolbar",At,{"unified-toolbar--icon-only":h||E,"unified-toolbar--mobile-collapsed":E&&x},e),padding:0,"data-testid":"unified-toolbar",children:[E&&x&&l.jsxDEV("div",{className:"unified-toolbar__collapsed-shortcuts",children:[l.jsxDEV("button",{className:"unified-toolbar__collapsed-btn unified-toolbar__collapsed-btn--toggle",onClick:V,"aria-label":"展开工具栏",children:l.jsxDEV(Vp,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:222,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:217,columnNumber:15},void 0),l.jsxDEV("button",{className:"unified-toolbar__collapsed-btn",onClick:A,"aria-label":"AI 图片生成",children:l.jsxDEV(Br,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:230,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:225,columnNumber:15},void 0),l.jsxDEV("button",{className:"unified-toolbar__collapsed-btn",onClick:_,"aria-label":"AI 视频生成",children:l.jsxDEV(Lr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:238,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:233,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:215,columnNumber:13},void 0),E&&!x&&l.jsxDEV("button",{className:"unified-toolbar__mobile-toggle unified-toolbar__mobile-toggle--expanded",onClick:V,"aria-label":"收起工具栏",children:l.jsxDEV(zl,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:250,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:245,columnNumber:13},void 0),l.jsxDEV("div",{className:"unified-toolbar__section unified-toolbar__section--fixed-top",children:l.jsxDEV(JD,{embedded:!0,iconMode:h||E,onOpenBackupRestore:a,onOpenCloudSync:c},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:256,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:255,columnNumber:11},void 0),l.jsxDEV("div",{ref:w,className:"unified-toolbar__scrollable",children:l.jsxDEV("div",{className:"unified-toolbar__section",children:l.jsxDEV(N_,{embedded:!0,iconMode:h||E,onOpenMediaLibrary:u,deferredFeaturesEnabled:d,minimizedToolsBarEnabled:m,onEnableToolWindows:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:268,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:267,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:265,columnNumber:11},void 0),l.jsxDEV("div",{className:"unified-toolbar__section unified-toolbar__section--fixed-bottom",children:l.jsxDEV(v_,{projectDrawerOpen:t,onProjectDrawerToggle:n||(()=>{}),toolboxDrawerOpen:i,onToolboxDrawerToggle:o,taskPanelExpanded:s,onTaskPanelToggle:q},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:281,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:280,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:198,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:187,columnNumber:7},void 0)}),D_=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(tt.isHotkey(["mod+k"])(s)){e({openCommandPalette:!0}),s.preventDefault();return}if(tt.isHotkey(["mod+f"])(s)){e({openCanvasSearch:!0}),s.preventDefault();return}}if(!r&&(F.getMovingPointInBoard(n)||F.isMovingPointInBoard(n))&&!F.hasBeenTextEditing(n)){if(tt.isHotkey(["mod+shift+e"],{byKey:!0})(s)){Gs(n,!0),s.preventDefault();return}if(tt.isHotkey(["mod+s"],{byKey:!0})(s)){Wp(n),s.preventDefault();return}if(tt.isHotkey(["mod+backspace"])(s)||tt.isHotkey(["mod+delete"])(s)){e({openCleanConfirm:!0}),s.preventDefault();return}if(tt.isHotkey(["mod+u"])(s)&&Hr(n),Be(n).length>1){if(tt.isHotkey(["alt+a"])(s)){rn.alignLeft(n),s.preventDefault();return}if(tt.isHotkey(["alt+h"])(s)){rn.alignCenter(n),s.preventDefault();return}if(tt.isHotkey(["alt+d"])(s)){rn.alignRight(n),s.preventDefault();return}if(tt.isHotkey(["alt+w"])(s)){rn.alignTop(n),s.preventDefault();return}if(tt.isHotkey(["alt+v"])(s)){rn.alignMiddle(n),s.preventDefault();return}if(tt.isHotkey(["alt+s"])(s)){rn.alignBottom(n),s.preventDefault();return}if(tt.isHotkey(["shift+h"])(s)){no.distributeHorizontal(n),s.preventDefault();return}if(tt.isHotkey(["shift+v"])(s)){no.distributeVertical(n),s.preventDefault();return}if(tt.isHotkey(["shift+a"])(s)){no.autoArrange(n),s.preventDefault();return}if(tt.isHotkey(["alt+shift+u"])(s)){vn.union(n,"zh"),s.preventDefault();return}if(tt.isHotkey(["alt+shift+s"])(s)){vn.subtract(n,"zh"),s.preventDefault();return}if(tt.isHotkey(["alt+shift+i"])(s)){vn.intersect(n,"zh"),s.preventDefault();return}if(tt.isHotkey(["alt+shift+e"])(s)){vn.exclude(n,"zh"),s.preventDefault();return}if(tt.isHotkey(["alt+shift+f"])(s)){vn.flatten(n,"zh"),s.preventDefault();return}}if(!s.altKey&&!s.metaKey&&!s.ctrlKey&&tt.isHotkey(["shift+p"],{byKey:!0})(s)){mt(n,St.drawing),fe.updatePointerType(n,Bn.pen),e({pointer:Bn.pen}),s.preventDefault();return}if(!s.altKey&&!s.metaKey&&!s.ctrlKey&&!s.shiftKey){if(s.key==="l"){mt(n,St.drawing),fe.updatePointerType(n,rt.laserPointer),e({pointer:rt.laserPointer}),s.preventDefault();return}if(s.key==="Escape"&&F.isPointer(n,rt.laserPointer)){fe.updatePointerType(n,vt.selection),e({pointer:vt.selection}),s.preventDefault();return}if(s.key==="h"&&(fe.updatePointerType(n,vt.hand),e({pointer:vt.hand})),s.key==="v"&&(fe.updatePointerType(n,vt.selection),e({pointer:vt.selection})),s.key==="q"&&(fe.updatePointerType(n,is),e({pointer:is})),s.key==="m"&&(mt(n,St.dnd),fe.updatePointerType(n,ji.mind),e({pointer:ji.mind})),s.key==="e"&&(mt(n,St.drawing),fe.updatePointerType(n,rt.eraser),e({pointer:rt.eraser})),s.key==="p"&&(mt(n,St.drawing),fe.updatePointerType(n,rt.feltTipPen),e({pointer:rt.feltTipPen})),s.key==="a"&&!tt.isHotkey(["mod+a"])(s)&&Be(n).length===0&&(mt(n,St.drawing),fe.updatePointerType(n,kn.straight),e({pointer:kn.straight})),s.key==="f"&&(mt(n,St.drawing),fe.updatePointerType(n,Eu),e({pointer:Eu})),s.key==="r"||s.key==="o"||s.key==="t"){const c={r:De.rectangle,o:De.ellipse,t:De.text};c[s.key]===De.text?mt(n,null):mt(n,St.drawing),fe.updatePointerType(n,c[s.key]),e({pointer:c[s.key]})}s.preventDefault();return}}i(s)},n.keyDown=s=>{if(tt.isHotkey(["mod+z"],{byKey:!0})(s)){n.undo(),s.preventDefault();return}if(tt.isHotkey(["mod+shift+z"],{byKey:!0})(s)){n.redo(),s.preventDefault();return}o(s)},n};function qc(e){return e===Rt.square?"square":"round"}function Bc(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 __(e,t,n,i,o,s){const r=document.createElementNS("http://www.w3.org/2000/svg","g"),a=qc(s);if(e.length<2){if(e.length===1){const f=Bc(t[0]??.5,n);if(s===Rt.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 c=rc(e,1,3);if(o===yn.double){const f=n*.8,h=n*.4,[g,x]=P_(c,t,h,f);if(g){const b=document.createElementNS("http://www.w3.org/2000/svg","path");b.setAttribute("d",g),b.setAttribute("fill",i),b.setAttribute("stroke","none"),r.appendChild(b)}if(x){const b=document.createElementNS("http://www.w3.org/2000/svg","path");b.setAttribute("d",x),b.setAttribute("fill",i),b.setAttribute("stroke","none"),r.appendChild(b)}return r}const u=bf(o,n),d=o!==ei.solid&&u?u.join(" "):"",m=C_(c,t,n);if(m.length>0){const f=document.createElementNS("http://www.w3.org/2000/svg","path");f.setAttribute("d",m),f.setAttribute("fill",i),f.setAttribute("stroke","none"),d&&(f.setAttribute("fill","none"),f.setAttribute("stroke",i),f.setAttribute("stroke-width",String(n)),f.setAttribute("stroke-dasharray",d),f.setAttribute("stroke-linecap",a),f.setAttribute("stroke-linejoin",a==="square"?"miter":"round")),r.appendChild(f)}return r}function j_(e,t,n,i){const o=document.createElementNS("http://www.w3.org/2000/svg","g"),s=qc(i);if(e.length<2){if(e.length===1){const x=t*.8,b=t*.4;if(i===Rt.square){const y=document.createElementNS("http://www.w3.org/2000/svg","rect");y.setAttribute("x",String(e[0][0]-b/2)),y.setAttribute("y",String(e[0][1]-x/2-b/2)),y.setAttribute("width",String(b)),y.setAttribute("height",String(b)),y.setAttribute("fill",n),o.appendChild(y);const N=document.createElementNS("http://www.w3.org/2000/svg","rect");N.setAttribute("x",String(e[0][0]-b/2)),N.setAttribute("y",String(e[0][1]+x/2-b/2)),N.setAttribute("width",String(b)),N.setAttribute("height",String(b)),N.setAttribute("fill",n),o.appendChild(N)}else{const y=document.createElementNS("http://www.w3.org/2000/svg","circle");y.setAttribute("cx",String(e[0][0])),y.setAttribute("cy",String(e[0][1]-x/2)),y.setAttribute("r",String(b/2)),y.setAttribute("fill",n),o.appendChild(y);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]+x/2)),N.setAttribute("r",String(b/2)),N.setAttribute("fill",n),o.appendChild(N)}}return o}const r=rc(e,1,3),a=t*.8,c=t*.4,u=[],d=[];for(let x=0;x<r.length;x++){let b,y;x===0?(b=r[1][0]-r[0][0],y=r[1][1]-r[0][1]):x===r.length-1?(b=r[x][0]-r[x-1][0],y=r[x][1]-r[x-1][1]):(b=r[x+1][0]-r[x-1][0],y=r[x+1][1]-r[x-1][1]);const N=Math.sqrt(b*b+y*y);if(N>0){const w=-y/N,T=b/N,S=a/2;u.push([r[x][0]+w*S,r[x][1]+T*S]),d.push([r[x][0]-w*S,r[x][1]-T*S])}else u.push(r[x]),d.push(r[x])}const m=document.createElementNS("http://www.w3.org/2000/svg","path");let f=`M ${u[0][0]} ${u[0][1]}`;for(let x=1;x<u.length;x++){const b=u[x-1],y=u[x],N=(b[0]+y[0])/2,w=(b[1]+y[1])/2;f+=` Q ${b[0]} ${b[1]} ${N} ${w}`}f+=` L ${u[u.length-1][0]} ${u[u.length-1][1]}`,m.setAttribute("d",f),m.setAttribute("fill","none"),m.setAttribute("stroke",n),m.setAttribute("stroke-width",String(c)),m.setAttribute("stroke-linecap",s),m.setAttribute("stroke-linejoin",s==="square"?"miter":"round"),o.appendChild(m);const h=document.createElementNS("http://www.w3.org/2000/svg","path");let g=`M ${d[0][0]} ${d[0][1]}`;for(let x=1;x<d.length;x++){const b=d[x-1],y=d[x],N=(b[0]+y[0])/2,w=(b[1]+y[1])/2;g+=` Q ${b[0]} ${b[1]} ${N} ${w}`}return g+=` L ${d[d.length-1][0]} ${d[d.length-1][1]}`,h.setAttribute("d",g),h.setAttribute("fill","none"),h.setAttribute("stroke",n),h.setAttribute("stroke-width",String(c)),h.setAttribute("stroke-linecap",s),h.setAttribute("stroke-linejoin",s==="square"?"miter":"round"),o.appendChild(h),o}function P_(e,t,n,i){if(e.length<2)return["",""];const o=[],s=[];for(let c=0;c<e.length;c++){let u,d;c===0?(u=e[1][0]-e[0][0],d=e[1][1]-e[0][1]):c===e.length-1?(u=e[c][0]-e[c-1][0],d=e[c][1]-e[c-1][1]):(u=e[c+1][0]-e[c-1][0],d=e[c+1][1]-e[c-1][1]);const m=Math.sqrt(u*u+d*d);if(m>0){const f=-d/m,h=u/m,g=i/2;o.push([e[c][0]+f*g,e[c][1]+h*g]),s.push([e[c][0]-f*g,e[c][1]-h*g])}else o.push(e[c]),s.push(e[c])}const r=Um(o,t,n),a=Um(s,t,n);return[r,a]}function Um(e,t,n){if(e.length<2)return"";const i=[],o=[];for(let r=0;r<e.length;r++){const a=t[r]??.5,u=Bc(a,n)/2;let d,m;r===0?(d=e[1][0]-e[0][0],m=e[1][1]-e[0][1]):r===e.length-1?(d=e[r][0]-e[r-1][0],m=e[r][1]-e[r-1][1]):(d=e[r+1][0]-e[r-1][0],m=e[r+1][1]-e[r-1][1]);const f=Math.sqrt(d*d+m*m);if(f>0){const h=-m/f,g=d/f;i.push([e[r][0]+h*u,e[r][1]+g*u]),o.push([e[r][0]-h*u,e[r][1]-g*u])}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 a=i[r-1],c=i[r],u=(a[0]+c[0])/2,d=(a[1]+c[1])/2;s+=` Q ${a[0]} ${a[1]} ${u} ${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 a=o[r+1],c=o[r],u=(a[0]+c[0])/2,d=(a[1]+c[1])/2;s+=` Q ${a[0]} ${a[1]} ${u} ${d}`}return s+=` L ${o[0][0]} ${o[0][1]}`,s+=" Z",s}function C_(e,t,n){if(e.length<2)return"";const i=[],o=[];for(let r=0;r<e.length;r++){const a=t[r]??.5,u=Bc(a,n)/2;let d,m;r===0?(d=e[1][0]-e[0][0],m=e[1][1]-e[0][1]):r===e.length-1?(d=e[r][0]-e[r-1][0],m=e[r][1]-e[r-1][1]):(d=e[r+1][0]-e[r-1][0],m=e[r+1][1]-e[r-1][1]);const f=Math.sqrt(d*d+m*m);if(f>0){const h=-m/f,g=d/f;i.push([e[r][0]+h*u,e[r][1]+g*u]),o.push([e[r][0]-h*u,e[r][1]-g*u])}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 a=i[r-1],c=i[r],u=(a[0]+c[0])/2,d=(a[1]+c[1])/2;s+=` Q ${a[0]} ${a[1]} ${u} ${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 a=o[r+1],c=o[r],u=(a[0]+c[0])/2,d=(a[1]+c[1])/2;s+=` Q ${a[0]} ${a[1]} ${u} ${d}`}return s+=` L ${o[0][0]} ${o[0][1]}`,s+=" Z",s}class Lc extends Yp{draw(t){const n=xN(t),i=Gp(this.board,t),o=NN(this.board,t),s=yN(this.board,t),r=bf(s,n),a=t.brushShape,c=qc(a);if(t.pressures&&t.pressures.length>0)return __(t.points,t.pressures,n,i,s,a);if(s===yn.double)return j_(t.points,n,i,a);const u={strokeWidth:n,stroke:i,fill:o,fillStyle:"solid",strokeLineDash:s!==ei.solid?r:void 0},d=F.getRoughSVG(this.board).curve(rc(t.points,1,3),u);return wN(d,c),d}canDraw(t){return!0}}class A_ extends ac{constructor(){super()}initializeGenerator(){this.activeGenerator=xf(this.board,{getRectangle:t=>Gr(t),getStrokeWidth:()=>Nf,getStrokeOpacity:()=>1,hasResizeHandle:()=>yf(this.board,this.element)}),this.generator=new Lc(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,F.getActiveHost(this.board),{selected:this.selected})):i&&t.selected?this.activeGenerator.processDrawing(this.element,F.getActiveHost(this.board),{selected:this.selected}):(t.selected!==n.selected||t.selected)&&this.activeGenerator.processDrawing(this.element,F.getActiveHost(this.board),{selected:this.selected})}destroy(){var t;super.destroy(),(t=this.activeGenerator)==null||t.destroy()}}class jg{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 c={point:t,timestamp:i,...n};return this.points.push(c),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),a=this.smooth(t,r);return this.lastProcessedTime=i,a}reset(){this.points=[],this.lastProcessedTime=0,this.movingAverageVelocity=[]}updatePoints(t){this.points.push(t),this.points.length>this.options.maxPoints&&this.points.shift()}checkDistance(t){if(this.points.length===0)return!0;const n=this.points[this.points.length-1].point,i=this.getDistance(n,t);let 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,a)=>r+a,0);if(o===0)return t;const s=[0,0];for(let r=0;r<this.points.length;r++){const a=i[r]/o;s[0]+=this.points[r].point[0]*a,s[1]+=this.points[r].point[1]*a}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 rr(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),a=this.getDistance(n,o),c=(s+r+a)/2;return 4*Math.sqrt(Math.max(0,c*(c-s)*(c-r)*(c-a)))/(s*r*a+1e-4)}}const M_=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e;let s=!1,r=!1,a=[],c=[],u=null;const d=new Lc(e),m=new jg({smoothing:.7,pressureSensitivity:.6});let f=null,h=null,g=null,x=0;const b=(w=!1)=>{if(!h||w){const T=si(e);h={strokeWidth:T.strokeWidth,strokeColor:T.strokeColor,strokeStyle:T.strokeStyle,pencilShape:T.pencilShape,pressureEnabled:T.pressureEnabled}}return h},y=(w,T)=>{if(!T)return 1;if(w.pointerType==="pen"&&w.pressure>0&&w.pressure!==.5)return w.pressure;const v=[w.x,w.y],E=performance.now();if(g&&x>0){const R=v[0]-g[0],q=v[1]-g[1],$=Math.sqrt(R*R+q*q),V=E-x;if(V>0){const U=$/V,A=.2,_=1,P=Math.min(U/1.5,1),Z=_-P*(_-A);return g=v,x=E,Z}}return g=v,x=E,.6},N=w=>{if(s){const T=F.getPointer(e);r&&(a.push(a[0]),c.length>0&&c.push(c[0]));const S=b();f=Ja(T,a,{strokeWidth:S.strokeWidth,strokeColor:S.strokeColor,strokeStyle:S.strokeStyle,brushShape:S.pencilShape,pressures:S.pressureEnabled?c:void 0})}f&&!w&&ue.insertNode(e,f,[e.children.length]),d==null||d.destroy(),f=null,s=!1,a=[],c=[],g=null,x=0,h=null,m.reset()};return e.pointerDown=w=>{const T=lc();if(F.isInPointer(e,T)&&cc(e)){s=!0;const v=b(!0);u=[w.x,w.y];const E=m.process(u);if(E){const R=Ot(e,Ft(e,E[0],E[1]));a.push(R),c.push(y(w,v.pressureEnabled))}}t(w)},e.pointerMove=w=>{if(s){const T=[w.x,w.y];u&&rr(u[0],u[1],T[0],T[1])<8?r=!0:r=!1;const S=m.process(T);if(S){d==null||d.destroy();const v=Ot(e,Ft(e,S[0],S[1]));a.push(v);const E=b();c.push(y(w,E.pressureEnabled));const R=F.getPointer(e);f=Ja(R,a,{strokeWidth:E.strokeWidth,strokeColor:E.strokeColor,strokeStyle:E.strokeStyle,brushShape:E.pencilShape,pressures:E.pressureEnabled?c:void 0}),d.processDrawing(f,F.getElementTopHost(e))}return}n(w)},e.pointerUp=w=>{N(),i(w)},e.globalPointerUp=w=>{N(!0),o(w)},e},I_=e=>{const t=e,{getDeletedFragment:n,buildFragment:i,insertFragment:o}=t;return t.getDeletedFragment=s=>{const r=Su(t);return r.length&&s.push(...r),n(s)},t.buildFragment=(s,r,a,c)=>{const u=Su(t);if(u.length){const d=wf(t,u,r?[r.x,r.y]:[0,0]);s=vf(s,{text:"",type:Ef.elements,elements:d})}return i(s,r,a,c)},t.insertFragment=(s,r,a)=>{var u;const c=(u=s==null?void 0:s.elements)==null?void 0:u.filter(d=>$e.isFreehand(d));c&&c.length>0&&Sf(t,c,r),o(s,r,a)},t};function V_(e,t,n,i=0){const o=ge.getCenterPoint(t),s=Ii(t,ui);if(i){const r=U_(n,o,-i);let a=s.find(c=>ge.isHit(ge.getRectangleByPoints([r,r]),c.rectangle));return a&&(a.cursorClass=Wr(a.cursorClass,i)),a}else return s.find(r=>ge.isHit(ge.getRectangleByPoints([n,n]),r.rectangle))}function U_(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*o-a*s,t[1]+r*s+a*o]}function Pg(e){const t=Be(e);return t.length===1&&$e.isFreehand(t[0])?t[0]:null}function R_(e){return Pg(e)!==null}function q_(e,t){const n=Pg(e);if(!n)return null;const i=Gr(n),o=n.angle||0,s=V_(e,i,t,o);return s?{element:n,rectangle:i,handle:s.handle,cursorClass:s.cursorClass}:null}function B_(e,t,n){const i=n.width/t.width,o=n.height/t.height;return e.map(s=>{const r=s[0]-t.x,a=s[1]-t.y;return[n.x+r*i,n.y+a*o]})}function L_(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o)return;const c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,gs(),10),m=B_(i.points,o,d),f=e.children.findIndex(h=>h.id===i.id);f>=0&&ue.setNode(e,{points:m},[f])}const O_=e=>Mi(e,{key:"freehand",canResize:()=>R_(e),hitTest:(t=>q_(e,t)),onResize:(t,n)=>L_(e,t,n)});function F_(e){return e.type==="video"}const ps=1e3;async function Oc(){const e=await Me(()=>import("./clipper-D9tfnKC1.js").then(t=>t.c),__vite__mapDeps([0]),import.meta.url);return e.default||e}function fs(e){return e.map(t=>({X:Math.round(t[0]*ps),Y:Math.round(t[1]*ps)}))}function Cg(e){return e.map(t=>[t.X/ps,t.Y/ps])}async function H_(e,t,n=ku.circle){if(e.length<2)return[];const i=await Oc(),o=fs(e),s=new i.ClipperOffset;n===ku.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*ps),r.length===0?[]:Cg(r[0])}function Fc(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 z_(e,t=20){if(Je.isPenPath(e)){if(!e.closed)return null;const n=Zp(e);return vN(n,!0,t)}if($e.isFreehand(e)){const n=e.points;return!n||n.length<3||!Fc(e)?null:n}return H.isDrawElement(e)&&H.isShapeElement(e)?H.isImage(e)||H.isText(e)?null:G_(e,t):null}function G_(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]),a=Math.abs(o[0]-i[0]),c=Math.abs(o[1]-i[1]),u=e.shape;if(u==="ellipse"||u==="circle"){const d=s+a/2,m=r+c/2,f=a/2,h=c/2,g=[],x=Math.PI*(3*(f+h)-Math.sqrt((3*f+h)*(f+3*h))),b=Math.max(180,Math.ceil(x/2));for(let y=0;y<b;y++){const N=2*Math.PI*y/b;g.push([d+f*Math.cos(N),m+h*Math.sin(N)])}return g}return[[s,r],[s+a,r],[s+a,r+c],[s,r+c]]}function W_(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,a=-1/0;for(const m of e)o=Math.min(o,m[0]),s=Math.min(s,m[1]),r=Math.max(r,m[0]),a=Math.max(a,m[1]);const c=[o,s],u=e.map(m=>({point:[m[0]-c[0],m[1]-c[1]],type:"corner"}));return{id:EN(),type:kf,shape:Bn.pen,points:[c,[r,a]],anchors:u,closed:!0,strokeColor:t,fill:n,strokeWidth:i}}function $_(e){let t="#333333",n="#FFFFFF",i=2;return Je.isPenPath(e)?(t=e.strokeColor||t,n=e.fill||n,i=e.strokeWidth||i):$e.isFreehand(e)?(t=e.strokeColor||t,i=e.strokeWidth||i):H.isDrawElement(e)&&(t=e.strokeColor||t,n=e.fill||n,i=e.strokeWidth||i),{strokeColor:t,fill:n,strokeWidth:i}}async function X_(e,t){const n=await Oc(),i=new n.Clipper,o=[];return i.AddPath(fs(e),n.PolyType.ptSubject,!0),i.AddPath(fs(t),n.PolyType.ptClip,!0),i.Execute(n.ClipType.ctIntersection,o,n.PolyFillType.pftNonZero,n.PolyFillType.pftNonZero),o.length>0}async function K_(e,t,n){const i=z_(t);if(!i||i.length<3||!await X_(i,n))return null;const s=await Oc(),r=new s.Clipper,a=[];if(r.AddPath(fs(i),s.PolyType.ptSubject,!0),r.AddPath(fs(n),s.PolyType.ptClip,!0),!r.Execute(s.ClipType.ctDifference,a,s.PolyFillType.pftNonZero,s.PolyFillType.pftNonZero))return null;const{strokeColor:u,fill:d,strokeWidth:m}=$_(t),f=[];for(const N of a)if(N.length>=3){let w=0;for(let T=0;T<N.length;T++){const S=(T+1)%N.length;w+=N[T].X*N[S].Y,w-=N[S].X*N[T].Y}w=w/2,f.push({path:N,signedArea:w,absArea:Math.abs(w)})}if(f.length===0)return[];const h=[...f].sort((N,w)=>w.absArea-N.absArea),g=h[0],x=h.slice(1);let b;x.length>0?b=Y_(g.path,x.map(N=>N.path)):b=g.path;const y=Cg(b);try{return[W_(y,u,d,m)]}catch{return[]}}function Y_(e,t){let n=[...e];for(const i of t){let o=1/0,s=0,r=0;for(let c=0;c<n.length;c++)for(let u=0;u<i.length;u++){const d=n[c].X-i[u].X,m=n[c].Y-i[u].Y,f=d*d+m*m;f<o&&(o=f,s=c,r=u)}const a=[];for(let c=0;c<=s;c++)a.push(n[c]);for(let c=0;c<i.length;c++){const u=(r+c)%i.length;a.push(i[u])}a.push(i[r]);for(let c=s;c<n.length;c++)a.push(n[c]);n=a}return n}function Ag(e){if($e.isFreehand(e)){const o=e.points;if(!o||o.length<2)return null;const s=ge.getRectangleByPoints(o),r=e.strokeWidth??2,a=r/2;return{x:s.x-a,y:s.y-a,width:s.width+r,height:s.height+r}}if(Je.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 Z_(e,t,n){if(t.length<2)return[];let i=1/0,o=1/0,s=-1/0,r=-1/0;for(const c of t)i=Math.min(i,c[0]-n),o=Math.min(o,c[1]-n),s=Math.max(s,c[0]+n),r=Math.max(r,c[1]+n);const a=[];for(const c of e.children){if(!Q_(c))continue;const u=Ag(c);if(!u)continue;const{x:d,y:m,width:f,height:h}=u;d+f>=i&&d<=s&&m+h>=o&&m<=r&&a.push(c)}return a}function Q_(e){return Je.isPenPath(e)?e.closed:$e.isFreehand(e)?Fc(e):H.isDrawElement(e)?H.isImage(e)||H.isText(e)||H.isArrowLine(e)||H.isVectorLine(e)?!1:H.isShapeElement(e):!1}function J_(e){if(Je.isPenPath(e))return e.closed?null:"openPath";if($e.isFreehand(e))return Fc(e)?null:"openPath";if(H.isDrawElement(e)){if(H.isImage(e))return"image";if(H.isText(e))return"text";if(H.isArrowLine(e))return"arrowLine";if(H.isVectorLine(e))return"vectorLine";if(H.isShapeElement(e))return null}return"unsupported"}function ej(e,t,n){if(t.length<2)return[];let i=1/0,o=1/0,s=-1/0,r=-1/0;for(const c of t)i=Math.min(i,c[0]-n),o=Math.min(o,c[1]-n),s=Math.max(s,c[0]+n),r=Math.max(r,c[1]+n);const a=[];for(const c of e.children){const u=Ag(c);if(!u)continue;const{x:d,y:m,width:f,height:h}=u;d+f>=i&&d<=s&&m+h>=o&&m<=r&&J_(c)&&a.push(c)}return a}async function tj(e,t,n,i,o){if(o.length===0)return;const s=await H_(t,n,i);if(s.length<3)return;const r=[],a=[];for(const c of o){const u=await K_(e,c,s);u!==null&&(r.push(c),a.push(...u))}r.length>0&&el.removeElements(e,r);for(const c of a)ue.insertNode(e,c,[e.children.length])}const nj=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e;let s=!1;const r=new Set;let a=[];const c=m=>{const f=Ot(e,Ft(e,m[0],m[1])),g=si(e).eraserWidth/2;e.children.filter(b=>$e.isFreehand(b)).forEach(b=>{!r.has(b.id)&&SN(e,b,f,g)&&(Ji.getElementG(b).style.opacity="0.2",r.add(b.id))})},u=()=>{if(r.size>0){const m=e.children.filter(f=>r.has(f.id));m.length>0&&el.removeElements(e,m)}},d=async()=>{if(s){if(u(),a.length>=2){const m=si(e),f=Z_(e,a,m.eraserWidth).filter(g=>!$e.isFreehand(g));if(f.length>0)try{await tj(e,a,m.eraserWidth,m.eraserShape,f)}catch(g){console.error("Precise erase error:",g)}const h=ej(e,a,m.eraserWidth).filter(g=>!$e.isFreehand(g)&&!vi(g)&&!F_(g)&&!(H.isDrawElement(g)&&H.isImage(g)));h.length>0&&el.removeElements(e,h)}s=!1,r.clear(),a=[]}};return e.pointerDown=m=>{if(F.isInPointer(e,[rt.eraser])&&cc(e)){s=!0,r.clear(),a=[];const h=[m.x,m.y],g=Ot(e,Ft(e,h[0],h[1]));a.push(g),c(h);return}t(m)},e.pointerMove=m=>{if(s){Jl(e,"with-freehand-erase",()=>{const f=[m.x,m.y],h=Ot(e,Ft(e,f[0],f[1]));a.push(h),c(f)});return}n(m)},e.pointerUp=m=>{if(s){d();return}i(m)},e.globalPointerUp=m=>{if(s){d();return}o(m)},e},ij="#e91e63",oj=3,Rm=2e3,sj=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e;let s=!1,r=[];const a=new Lc(e),c=new jg({smoothing:.7,pressureSensitivity:0});let u=null;const d=[],m=()=>F.isPointer(e,rt.laserPointer),f=()=>{if(!s)return;s=!1;const g=a.g;g?(a.g=void 0,h(g)):a.destroy(),u=null,r=[],c.reset()},h=g=>{g.style.transition=`opacity ${Rm}ms ease-out`,g.style.opacity="1",g.getBoundingClientRect(),g.style.opacity="0";const x=window.setTimeout(()=>{g.remove();const b=d.findIndex(y=>y.g===g);b>=0&&d.splice(b,1)},Rm);d.push({g,timer:x})};return e.pointerDown=g=>{if(m()&&cc(e)){s=!0;const x=[g.x,g.y],b=c.process(x);if(b){const y=Ot(e,Ft(e,b[0],b[1]));r.push(y)}return}t(g)},e.pointerMove=g=>{if(s){const x=[g.x,g.y],b=c.process(x);if(b){a.destroy();const y=Ot(e,Ft(e,b[0],b[1]));r.push(y),u=Ja(rt.laserPointer,r,{strokeWidth:oj,strokeColor:ij}),a.processDrawing(u,F.getElementTopHost(e))}return}n(g)},e.pointerUp=g=>{s&&f(),i(g)},e.globalPointerUp=g=>{s&&f(),o(g)},e},rj=e=>{const{getRectangle:t,drawElement:n,isHit:i,isRectangleHit:o,getOneHitElement:s,isMovable:r,isAlign:a}=e;return e.drawElement=c=>$e.isFreehand(c.element)?A_:n(c),e.getRectangle=c=>$e.isFreehand(c)?Gr(c):t(c),e.isRectangleHit=(c,u)=>$e.isFreehand(c)?kN(e,c,u):o(c,u),e.isHit=(c,u,d)=>$e.isFreehand(c)?TN(e,c,u):i(c,u,d),e.getOneHitElement=c=>c.every(d=>$e.isFreehand(d))?Tf(e,c):s(c),e.isMovable=c=>$e.isFreehand(c)?!0:r(c),e.isAlign=c=>$e.isFreehand(c)?!0:a(c),e.setPluginOptions(Df,{customGeometryTypes:[DN]}),sj(O_(nj(I_(M_(e)))))};class aj extends ac{constructor(){super()}initializeGenerator(){this.activeGenerator=xf(this.board,{getRectangle:t=>$r(t),getStrokeWidth:()=>Nf,getStrokeOpacity:()=>1,hasResizeHandle:()=>yf(this.board,this.element)}),this.generator=new t_(this.board)}initialize(){super.initialize(),this.initializeGenerator(),this.generator.processDrawing(this.element,this.getElementG()),this.selected&&this.activeGenerator.processDrawing(this.element,F.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,F.getActiveHost(this.board),{selected:this.selected})):i&&t.selected?this.activeGenerator.processDrawing(this.element,F.getActiveHost(this.board),{selected:this.selected}):(t.selected!==n.selected||t.selected)&&this.activeGenerator.processDrawing(this.element,F.getActiveHost(this.board),{selected:this.selected})}destroy(){var t;super.destroy(),(t=this.activeGenerator)==null||t.destroy()}}const lj=e=>e,cj=e=>{const t=e,{getDeletedFragment:n,buildFragment:i,insertFragment:o}=t;return t.getDeletedFragment=s=>{const r=Tu(t);return r.length&&s.push(...r),n(s)},t.buildFragment=(s,r,a,c)=>{const u=Tu(t);if(u.length){const d=wf(t,u,r?[r.x,r.y]:[0,0]);s=vf(s,{text:"",type:Ef.elements,elements:d})}return i(s,r,a,c)},t.insertFragment=(s,r,a)=>{var u;const c=(u=s==null?void 0:s.elements)==null?void 0:u.filter(d=>Je.isPenPath(d));c&&c.length>0&&Sf(t,c,r),o(s,r,a)},t};function uj(e,t,n,i=0){const o=ge.getCenterPoint(t),s=Ii(t,ui);if(i){const r=dj(n,o,-i);let a=s.find(c=>ge.isHit(ge.getRectangleByPoints([r,r]),c.rectangle));return a&&(a.cursorClass=Wr(a.cursorClass,i)),a}else return s.find(r=>ge.isHit(ge.getRectangleByPoints([n,n]),r.rectangle))}function dj(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*o-a*s,t[1]+r*s+a*o]}function Mg(e){const t=Be(e);return t.length===1&&Je.isPenPath(t[0])?t[0]:null}function mj(e){return Mg(e)!==null}function pj(e,t){const n=Mg(e);if(!n)return null;const i=$r(n),o=n.angle||0,s=uj(e,i,t,o);return s?{element:n,rectangle:i,handle:s.handle,cursorClass:s.cursorClass}:null}function fj(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 hj(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o)return;const c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,gs(),10),m=d.width/o.width,f=d.height/o.height,h=fj(i.anchors,m,f),x=[[d.x,d.y],[d.x+d.width,d.y+d.height]],b=e.children.findIndex(y=>y.id===i.id);b>=0&&ue.setNode(e,{points:x,anchors:h},[b])}const gj=e=>Mi(e,{key:"pen-path",canResize:()=>mj(e),hitTest:(t=>pj(e,t)),onResize:(t,n)=>hj(e,t,n)}),bj=e=>{const{getRectangle:t,drawElement:n,isHit:i,isRectangleHit:o,getOneHitElement:s,isMovable:r,isAlign:a}=e;return e.drawElement=c=>Je.isPenPath(c.element)?aj:n(c),e.getRectangle=c=>Je.isPenPath(c)?$r(c):t(c),e.isRectangleHit=(c,u)=>Je.isPenPath(c)?_N(e,c,u):o(c,u),e.isHit=(c,u,d)=>Je.isPenPath(c)?jN(e,c,u):i(c,u,d),e.getOneHitElement=c=>c.every(d=>Je.isPenPath(d))?Tf(e,c):s(c),e.isMovable=c=>Je.isPenPath(c)?!0:r(c),e.isAlign=c=>Je.isPenPath(c)?!0:a(c),e.setPluginOptions(Df,{customGeometryTypes:[kf]}),gj(cj(lj(l_(e))))},Ig=new WeakMap,qm=e=>!!Ig.get(e),Vg=(e,t)=>{Ig.set(e,t)},xj=e=>n=>{const{pointerDown:i}=n;return n.pointerDown=o=>{Du(o)&&!qm(n)&&(Vg(n,!0),e({isPencilMode:!0})),!(qm(n)&&!Du(o))&&i(o)},n},Nj=()=>{const e=xt(),{appState:t,setAppState:n}=Gt();return l.jsxDEV(l.Fragment,{children:t.isPencilMode&&l.jsxDEV("div",{className:"pencil-mode-toolbar",children:l.jsxDEV(ne,{type:"button",visible:!0,tooltip:"X Pencil","aria-label":"Arrow",label:"Pencil X",onPointerDown:()=>{n({...t,isPencilMode:!1}),Vg(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)},yj="#f5f5f5";function wj(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">
|
|
60
|
+
`).trim();if(!L){re.warning(o==="zh"?"没有可合并的内容":"No content to merge");return}const z=C.flatMap(te=>Pt(te)&&te.noteId?[te.noteId]:[]);try{const te=await UD(z,L),ee=C.slice(1).map(J=>e.children.findIndex(oe=>oe.id===J.id)).filter(J=>J>=0).sort((J,oe)=>oe-J);for(const J of ee)ue.removeNode(e,[J]);let O;if(Pt(B)){const J=e.children.findIndex(Ie=>Ie.id===B.id);if(J<0)throw new Error(o==="zh"?"合并目标不存在":"Merge target missing");const oe={body:L};te&&(oe.noteId=te),ue.setNode(e,oe,[J]),O=e.children[J]}else{const J=Lt(e,[B],!1),oe=e.children.findIndex(ie=>ie.id===B.id);if(oe<0)throw new Error(o==="zh"?"合并目标不存在":"Merge target missing");const Ie=Math.max(J.width,320),ut=Math.max(J.height,180),Re={type:"card",id:`card-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`,body:L,fillColor:"#FA8C16",points:[[J.x,J.y],[J.x+Ie,J.y+ut]],children:[],...te?{noteId:te}:{}};ue.insertNode(e,Re,[oe]),ue.removeNode(e,[oe+1]),O=e.children[oe]}oi(e),O&&_i(e,O),re.success(o==="zh"?`已合并 ${C.length} 个元素`:`Merged ${C.length} elements`)}catch(te){console.error("[PopupToolbar] Failed to merge content:",te),re.error((te==null?void 0:te.message)||(o==="zh"?"合并内容失败":"Failed to merge content"))}};return p.useEffect(()=>{if(X){const C=n.length>0;if(!r&&C){let B,L;const z=Be(e),te=Lt(e,z,!1),[ee,O]=ge.getPoints(te),J=Ts(e,Bo(e,ee)),oe=Ts(e,Bo(e,O));B=J[0]+(oe[0]-J[0])/2,L=J[1],we.setPositionReference({getBoundingClientRect(){return{width:1,height:1,x:B,y:L,top:L,left:B,right:B+1,bottom:L+1}}})}}},[ae,le,be,r]),p.useEffect(()=>{if(X&&!r&&P.current){const C=P.current.getBoundingClientRect();A({top:C.top,left:C.left,width:C.width,height:C.height});const B=Be(e);if(B.length>0){const L=Lt(e,B,!1),[z,te]=ge.getPoints(L),ee=Ts(e,Bo(e,z)),O=Ts(e,Bo(e,te));M({top:ee[1],left:ee[0],right:O[0],bottom:O[1],width:O[0]-ee[0],height:O[1]-ee[1]})}}},[X,r,Fe,e]),p.useEffect(()=>{S.current=w},[w]),p.useEffect(()=>{if(n.length===0&&!r){const C=setTimeout(()=>{T(!1)},50);return()=>clearTimeout(C)}},[n.length,r]),p.useEffect(()=>{c.current=r},[r]),p.useEffect(()=>{const{pointerUp:C,pointerMove:B}=e;return e.pointerMove=L=>{(ns(e)||es(e))&&!c.current&&a(!0),B(L)},e.pointerUp=L=>{c.current&&(ns(e)||es(e))&&a(!1),C(L)},()=>{e.pointerUp=C,e.pointerMove=B}},[e]),l.jsxDEV(l.Fragment,{children:[X&&!r&&l.jsxDEV(Ye,{padding:1,className:Y("popup-toolbar",At),ref:C=>{we.setFloating(C),P.current=C},style:Fe,"data-testid":"popup-toolbar",children:l.jsxDEV(ft.Row,{gap:1,children:[K.hasFill&&l.jsxDEV(XT,{board:e,currentColor:K.fill,title:s("toolbar.fillColor"),children:l.jsxDEV("label",{className:Y("fill-label","color-label",{"color-white":K.fill&&ts(K.fill)&&Mp(Ti(K.fill)),"color-mixed":K.fill===void 0,"color-gradient":K.fill&&Vn(K.fill)&&K.fill.type==="gradient","color-image":K.fill&&Vn(K.fill)&&K.fill.type==="image"}),style:K.fill===void 0?void 0:{background:ts(K.fill)?K.fill:Vn(K.fill)?K.fill.type==="gradient"&&K.fill.gradient?ux(K.fill.gradient):K.fill.type==="solid"&&K.fill.solid?K.fill.solid.color:K.fill.type==="image"&&((Ke=K.fill.image)!=null&&Ke.imageUrl)?`url(${K.fill.image.imageUrl}) center/cover no-repeat`:void 0:void 0}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:782,columnNumber:17},void 0)},3,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:776,columnNumber:15},void 0),K.hasStroke&&l.jsxDEV(VT,{board:e,currentColor:K.strokeColor,title:s("toolbar.stroke"),hasStrokeStyle:K.hasStrokeStyle||!1,hasStrokeWidth:K.hasStrokeWidth||!1,currentStrokeWidth:K.strokeWidth,children:l.jsxDEV("label",{className:Y("stroke-label","color-label",{"color-mixed":K.strokeColor===void 0}),style:{borderColor:K.strokeColor}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:822,columnNumber:17},void 0)},2,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:813,columnNumber:15},void 0),K.hasFontColor&&l.jsxDEV(AT,{board:e,currentColor:(D=K.marks)==null?void 0:D.color,title:s("toolbar.fontColor"),fontColorIcon:l.jsxDEV(dx,{currentColor:(j=K.marks)==null?void 0:j.color},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:837,columnNumber:19},void 0)},0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:831,columnNumber:15},void 0),K.hasFontSize&&l.jsxDEV(IT,{board:e,currentFontSize:K.fontSize,title:s("toolbar.fontSize")},1,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:842,columnNumber:15},void 0),K.hasCornerRadius&&l.jsxDEV(KT,{board:e,currentRadius:K.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:852,columnNumber:15},void 0),K.hasText&&l.jsxDEV(QT,{board:e,title:"Link"},4,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:861,columnNumber:15},void 0),K.isTextOnly&&l.jsxDEV(cD,{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:868,columnNumber:15},void 0),K.hasTextToSpeech&&l.jsxDEV(ne,{className:"text-to-speech",type:"icon",icon:I&&Z.playing?l.jsxDEV(fx,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:882,columnNumber:21},void 0):l.jsxDEV(hx,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:884,columnNumber:21},void 0),visible:!0,selected:I&&Z.playing,title:ce,"aria-label":ce,"data-track":"toolbar_click_text_to_speech",onPointerUp:()=>{if(!$.text)return;const C=og($);if(!C)return;const B=LD(e,$);if(I){Z.playing?Z.pausePlayback():Z.resumePlayback();return}Nu({source:C,queue:B.length>0?B:[C],queueTab:{queueId:px,queueName:mx}})}},"text-to-speech",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:876,columnNumber:15},void 0),K.hasText&&l.jsxDEV(ne,{className:"property-settings",type:"icon",icon:l.jsxDEV(gx,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:924,columnNumber:23},void 0),visible:!0,selected:w,title:s("propertyPanel.title"),"aria-label":s("propertyPanel.title"),"data-track":"toolbar_click_property_settings",onPointerUp:()=>{T(!w)}},"property-settings",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:920,columnNumber:15},void 0),K.hasAlignment&&l.jsxDEV(dD,{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:937,columnNumber:15},void 0),K.hasDistribute&&l.jsxDEV(mD,{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:945,columnNumber:15},void 0),K.hasBoolean&&l.jsxDEV(pD,{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:953,columnNumber:15},void 0),K.hasMindmapToPPT&&l.jsxDEV(ne,{className:"mindmap-to-ppt",type:"icon",icon:l.jsxDEV(bx,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:965,columnNumber:23},void 0),visible:!0,title: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=xu(e,n);if(!C)return;const B=re.loading(o==="zh"?"正在转换为PPT...":"Converting to PPT...",0);try{const{generatePPTFromMindmap:L}=await Me(async()=>{const{generatePPTFromMindmap:te}=await import("./tool-windows-BTXOQvEU.js").then(ee=>ee.oK);return{generatePPTFromMindmap:te}},__vite__mapDeps([0]),import.meta.url),z=await L(e,C);re.close(B),z.success?re.success(o==="zh"?`已生成 ${z.pageCount} 页PPT`:`Generated ${z.pageCount} PPT slides`):re.error(z.error||(o==="zh"?"转换失败":"Conversion failed"))}catch(L){re.close(B),re.error(L.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:961,columnNumber:15},void 0),K.hasCardEdit&&l.jsxDEV(ne,{className:"card-edit",type:"icon",icon:l.jsxDEV(yu,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1007,columnNumber:23},void 0),visible:!0,title: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 ig(e,C,o)}},"card-edit",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1003,columnNumber:15},void 0),K.hasCardSave&&l.jsxDEV(ne,{className:"card-save",type:"icon",icon:l.jsxDEV(Bp,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1024,columnNumber:23},void 0),visible:!0,title: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 ng(e,C,o)&&re.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:1020,columnNumber:15},void 0),(K.hasCardEdit||K.hasCardSave)&&l.jsxDEV(ne,{className:"card-copy",type:"icon",icon:l.jsxDEV(xx,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1045,columnNumber:23},void 0),visible:!0,title: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 Ce(n[0],"card-copy")}},"card-copy",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1041,columnNumber:15},void 0),K.hasContentMerge&&l.jsxDEV(ne,{className:"content-merge",type:"icon",icon:l.jsxDEV(wu,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1063,columnNumber:23},void 0),visible:!0,title:o==="zh"?"合并内容":"Merge Content","aria-label":o==="zh"?"合并内容":"Merge Content","data-track":"toolbar_click_content_merge",onPointerUp:()=>{We()}},"content-merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1059,columnNumber:15},void 0),K.hasAIImage&&l.jsxDEV(ne,{className:"ai-image",type:"icon",icon:l.jsxDEV(Br,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1078,columnNumber:23},void 0),visible:!0,title:o==="zh"?"AI图片生成":"AI Image Generation","aria-label":o==="zh"?"AI图片生成":"AI Image Generation","data-track":"toolbar_click_ai_image",onPointerUp:()=>{i(ln.aiImageGeneration)}},5,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1074,columnNumber:15},void 0),K.hasAIVideo&&l.jsxDEV(ne,{className:"ai-video",type:"icon",icon:l.jsxDEV(Lr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1093,columnNumber:23},void 0),visible:!0,title:o==="zh"?"AI视频生成":"AI Video Generation","aria-label":o==="zh"?"AI视频生成":"AI Video Generation","data-track":"toolbar_click_ai_video",onPointerUp:()=>{i(ln.aiVideoGeneration)}},6,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1089,columnNumber:15},void 0),K.hasVideoFrame&&l.jsxDEV(ne,{className:"video-frame",type:"icon",icon:l.jsxDEV(Nx,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1108,columnNumber:23},void 0),visible:!0,title:o==="zh"?"视频帧选择":"Video Frame Selection","aria-label":o==="zh"?"视频帧选择":"Video Frame Selection","data-track":"toolbar_click_video_frame",onPointerUp:()=>{const C=n.find(B=>wn(B));C&&(f(C),d(!0))}},7,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1104,columnNumber:15},void 0),K.hasSplitImage&&l.jsxDEV(ne,{className:"split-image",type:"icon",icon:l.jsxDEV(wx,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1128,columnNumber:23},void 0),visible:!0,title:o==="zh"?"智能拆图":"Smart Split","aria-label":o==="zh"?"智能拆图":"Smart Split","data-track":"toolbar_click_split_image",onPointerUp:async()=>{const C=n[0];if(H.isImage(C)&&C.url){const B=re.loading(o==="zh"?"正在分析图片...":"Analyzing image...",0);try{const L=Lt(e,[C],!1),z=await yx(e,C.url,{sourceRect:{x:L.x,y:L.y,width:L.width,height:L.height},scrollToResult:!0});re.close(B),z.success?re.success(o==="zh"?`成功拆分为 ${z.count} 张图片`:`Split into ${z.count} images`):re.warning(z.error||(o==="zh"?"拆图失败":"Split failed"))}catch(L){re.close(B),re.error(L.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:1124,columnNumber:15},void 0),K.hasImageEdit&&l.jsxDEV(ne,{className:"image-edit",type:"icon",icon:l.jsxDEV(yu,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1173,columnNumber:23},void 0),visible:!0,title:o==="zh"?"编辑图片":"Edit Image","aria-label":o==="zh"?"编辑图片":"Edit Image","data-track":"toolbar_click_image_edit",onPointerUp:()=>{const C=n[0];H.isImage(C)&&C.url&&(b(C.url),N(C),g(!0))}},"image-edit",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1169,columnNumber:15},void 0),K.hasDownloadable&&l.jsxDEV(ne,{className:"download",type:"icon",icon:l.jsxDEV(Sx,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1193,columnNumber:23},void 0),visible:!0,title:o==="zh"?"下载":"Download","aria-label":o==="zh"?"下载":"Download","data-track":"toolbar_click_download",onPointerUp:async()=>{const C=[];for(const z of n)H.isDrawElement(z)&&H.isImage(z)&&z.url?C.push({url:z.url,type:"image"}):wn(z)&&z.url?C.push({url:z.url,type:"video"}):Kn(z)&&z.audioUrl&&C.push({url:z.audioUrl,type:"audio",filename:vx(z.title,"audio","mp3"),audioMetadata:{title:z.title,prompt:z.prompt,tags:z.tags,coverUrl:z.previewImageUrl,artist:z.modelVersion||"Aitu",album:"Aitu Generated"}});if(C.length===0){re.warning(o==="zh"?"没有可下载的内容":"No downloadable content");return}const B=C.length>1?o==="zh"?"正在打包下载...":"Packaging download...":o==="zh"?"正在下载...":"Downloading...",L=re.loading(B,0);try{const{unifiedCacheService:z}=await Me(async()=>{const{unifiedCacheService:J}=await import("./tool-windows-BTXOQvEU.js").then(oe=>oe.oI);return{unifiedCacheService:J}},__vite__mapDeps([0]),import.meta.url),{downloadFromBlob:te}=await Me(async()=>{const{downloadFromBlob:J}=await import("./tool-windows-BTXOQvEU.js").then(oe=>oe.oH);return{downloadFromBlob:J}},__vite__mapDeps([0]),import.meta.url),ee=[];for(const J of C)if(J.url.startsWith("blob:")){const oe=J.url.indexOf("#"),Ie=oe>0?J.url.substring(oe+1):null;if(Ie&&Ie.startsWith("merged-video-")){const ut=await z.getCachedBlob(Ie);if(ut){const Re=ut.type||"video/webm",ie=Re.startsWith("video/mp4")?"mp4":Re.startsWith("video/webm")?"webm":"bin",Ae=`merged-video-${Date.now()}.${ie}`;te(ut,Ae);continue}else console.warn("[Download] Cache not found for taskId:",Ie)}try{const Re=await(await fetch(J.url)).blob(),ie=Re.type.startsWith("video/mp4")?"mp4":Re.type.startsWith("video/webm")?"webm":Re.type.startsWith("image/")?"png":"bin",Ae=`${J.type}_${Date.now()}.${ie}`;te(Re,Ae)}catch(ut){throw console.error("[Download] Failed to fetch blob URL:",ut),new Error(`Failed to download ${J.type}: Blob URL inaccessible`)}}else ee.push(J);let O;ee.length>0&&(O=await Ex(ee)),re.close(L),O!=null&&O.openedCount&&O.downloadedCount===0?re.success(o==="zh"?O.openedCount>1?`已打开 ${O.openedCount} 个链接,请在新标签页下载`:"资源不支持直接下载,已打开链接":O.openedCount>1?`Opened ${O.openedCount} links for download`:"Opened link for download"):re.success(C.length>1?o==="zh"?`已下载 ${C.length} 个文件`:`Downloaded ${C.length} files`:o==="zh"?"下载成功":"Download complete")}catch(z){re.close(L),re.error(z.message||(o==="zh"?"下载失败":"Download failed"))}}},"download",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1189,columnNumber:15},void 0),K.hasMergeable&&l.jsxDEV(ne,{className:"merge",type:"icon",icon:l.jsxDEV(wu,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1324,columnNumber:23},void 0),visible:!0,title:o==="zh"?"合并为图片":"Merge to Image","aria-label":o==="zh"?"合并为图片":"Merge to Image","data-track":"toolbar_click_merge",onPointerUp:async()=>{const C=kx("图片合并"),B=re.loading(o==="zh"?"正在合并...":"Merging...",0);try{const L=n.filter(ot=>{const ze=ot.url||ot.imageUrl;if(!ze||ze.startsWith("/")||ze.startsWith("data:")||ze.startsWith("blob:"))return!1;try{return new URL(ze).origin!==location.origin}catch{return!1}});if(L.length>0){const ot=L.map(async st=>{const ht=st.url||st.imageUrl;try{const _t=new AbortController,Vt=setTimeout(()=>_t.abort(),3e3),dt=await fetch(ht,{method:"HEAD",mode:"cors",signal:_t.signal});return clearTimeout(Vt),dt.ok}catch{return!1}});if((await Promise.all(ot)).some(st=>!st)){re.close(B),re.warning(o==="zh"?"部分外部图片无法访问,请先下载到本地后再合并":"Some external images are inaccessible. Please download them locally first."),C();return}}const z=Lt(e,n,!1),te=[...n].sort((ot,ze)=>{const Oe=e.children.findIndex(ht=>ht.id===ot.id),st=e.children.findIndex(ht=>ht.id===ze.id);return Oe-st}),ee=await Tx(e,{elements:te,fillStyle:"transparent",inlineStyleClassNames:".extend,.emojis,.text",ratio:2});if(!ee)throw new Error(o==="zh"?"合并失败:无法生成图片":"Merge failed: Unable to generate image");const O=new Image;await new Promise((ot,ze)=>{O.onload=()=>ot(),O.onerror=()=>ze(new Error("Failed to load merged image")),O.src=ee});const J=document.createElement("canvas");J.width=O.width,J.height=O.height;const oe=J.getContext("2d");if(!oe)throw new Error("Failed to get canvas context");oe.drawImage(O,0,0);const Ie=Dx(J),{canvas:ut,left:Re,top:ie,trimmedWidth:Ae,trimmedHeight:Ue}=Ie,_e=await new Promise((ot,ze)=>{ut.toBlob(Oe=>{Oe?ot(Oe):ze(new Error("Failed to convert canvas to blob"))},"image/png")}),{unifiedCacheService:Le}=await Me(async()=>{const{unifiedCacheService:ot}=await import("./tool-windows-BTXOQvEU.js").then(ze=>ze.oI);return{unifiedCacheService:ot}},__vite__mapDeps([0]),import.meta.url),Mt=`merged-image-${Date.now()}`,Dt=`/__aitu_cache__/image/${Mt}.png`,It=Dt;await Le.cacheMediaFromBlob(It,_e,"image",{taskId:Mt});const Bt=2,Ht=z.x+Re/Bt,mi=z.y+ie/Bt,Gn=Ae/Bt,xe=Ue/Bt;$a(e);const He=e.children.length,Ne={url:Dt,width:Gn,height:xe};Ar.insertImage(e,Ne,[Ht,mi]);const Ve=e.children[He];Ve&&(oi(e),_i(e,Ve)),re.close(B),C(),re.success(o==="zh"?`已将 ${n.length} 个元素合并为图片`:`Merged ${n.length} elements into image`)}catch(L){re.close(B),C(),re.error(L.message||(o==="zh"?"合并失败":"Merge failed"))}}},"merge",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1320,columnNumber:15},void 0),K.hasVideoMergeable&&l.jsxDEV(ne,{className:"video-merge",type:"icon",icon:l.jsxDEV(_x,{},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"?"合成视频":"Merge Videos","aria-label":o==="zh"?"合成视频":"Merge Videos","data-track":"toolbar_click_video_merge",onPointerUp:async()=>{const C=[];for(const L of n)wn(L)&&L.url&&C.push(L.url);if(C.length<2){re.warning(o==="zh"?"请选择至少2个视频":"Please select at least 2 videos");return}const B=re.loading(o==="zh"?"正在合成视频...":"Merging videos...",0);try{const L=await TD(C,(z,te)=>{const ee={downloading:o==="zh"?"下载视频...":"Downloading videos...",decoding:o==="zh"?"解码视频...":"Decoding videos...",encoding:o==="zh"?"编码视频...":"Encoding videos...",finalizing:o==="zh"?"生成文件中...":"Finalizing..."}});re.close(B);try{const{quickInsert:z}=await Me(async()=>{const{quickInsert:te}=await import("./canvas-insertion-BZAyMFnR.js");return{quickInsert:te}},__vite__mapDeps([0]),import.meta.url);await z("video",L.url),re.success(o==="zh"?`已合成并插入 ${C.length} 个视频`:`Merged and inserted ${C.length} videos`)}catch(z){console.error("[VideoMerge] Failed to insert video:",z);const te=L.blob.type||"video/webm",ee=te.startsWith("video/mp4")?"mp4":"webm",O=new Blob([L.blob],{type:te}),J=URL.createObjectURL(O),oe=document.createElement("a");oe.href=J,oe.download=`merged-video-${Date.now()}.${ee}`,document.body.appendChild(oe),oe.click(),document.body.removeChild(oe),setTimeout(()=>URL.revokeObjectURL(J),1e3),re.warning(o==="zh"?`视频已合成,但插入失败,已自动下载 (${ee.toUpperCase()})`:`Video merged but failed to insert, downloaded as ${ee.toUpperCase()}`)}}catch(L){re.close(B),re.error(L.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:1493,columnNumber:15},void 0),l.jsxDEV(uD,{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:1597,columnNumber:13},void 0),K.hasSizeInput&&l.jsxDEV(ZT,{board:e},"size-input",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1603,columnNumber:15},void 0),K.hasFramePlay&&l.jsxDEV(ne,{className:"frame-play",type:"icon",icon:l.jsxDEV(vu,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1614,columnNumber:23},void 0),visible:!0,title:o==="zh"?"播放幻灯片":"Play Slideshow","aria-label":o==="zh"?"播放幻灯片":"Play Slideshow","data-track":"toolbar_click_frame_play",onPointerUp:()=>{const C=n.find(B=>vi(B));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:1610,columnNumber:15},void 0),K.hasAudioPlayer&&l.jsxDEV(ne,{className:"audio-player-play",type:"icon",icon:l.jsxDEV(vu,{size:15},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1633,columnNumber:23},void 0),visible:!0,title: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(B=>Kn(B));!C||!Kn(C)||Nu({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:Za(e.children),queueTab:{queueId:Op,queueName:Lp}})}},"audio-player-play",!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1629,columnNumber:15},void 0),l.jsxDEV(ne,{className:"duplicate",type:"icon",icon:l.jsxDEV(Ax,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1668,columnNumber:21},void 0),visible:!0,title:s("general.duplicate"),"aria-label":s("general.duplicate"),"data-track":"toolbar_click_duplicate",onPointerUp:()=>{if(n.length===1&&vi(n[0])){const B=jx(e,n[0],o);B&&Px(e,B)}else Cx(e)}},8,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1664,columnNumber:13},void 0),l.jsxDEV(ne,{className:"trash",type:"icon",icon:l.jsxDEV(ar,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1697,columnNumber:21},void 0),visible:!0,title:s("general.delete"),"aria-label":s("general.delete"),"data-track":"toolbar_click_delete",onPointerUp:()=>{$a(e)}},9,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1693,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:773,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:763,columnNumber:9},void 0),u&&m&&l.jsxDEV(yD,{visible:u,videoUrl:m.url||"",onClose:()=>{d(!1),f(null)},onConfirm:async(C,B)=>{try{m&&await wD(e,m,C,B)}catch(L){console.error("Failed to insert video frame:",L)}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1712,columnNumber:9},void 0),h&&x&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(OD,{visible:h,imageUrl:x,showOverwrite:!!y,onClose:()=>{g(!1),b(""),N(null)},onOverwrite:async C=>{if(y)try{const{unifiedCacheService:B}=await Me(async()=>{const{unifiedCacheService:oe}=await import("./tool-windows-BTXOQvEU.js").then(Ie=>Ie.oI);return{unifiedCacheService:oe}},__vite__mapDeps([0]),import.meta.url),L=`edited-image-${Date.now()}`,z=`/__aitu_cache__/image/${L}.png`,ee=await(await fetch(C)).blob();await B.cacheMediaFromBlob(z,ee,"image",{taskId:L});const O=new Image;await new Promise((oe,Ie)=>{O.onload=()=>oe(),O.onerror=()=>Ie(new Error("Failed to load edited image")),O.src=C});const J=e.children.findIndex(oe=>oe.id===y.id);if(J>=0){const oe=e.children[J],{newPoints:Ie}=await Fp({url:oe.url,width:oe.width,height:oe.height,points:oe.points||[[0,0],[0,0]]},O.naturalWidth,O.naturalHeight);ue.setNode(e,{url:z,width:O.naturalWidth,height:O.naturalHeight,points:Ie},[J])}}catch(B){console.error("Failed to update image:",B),re.error(o==="zh"?"更新失败":"Update failed")}},onInsert:async C=>{try{const{unifiedCacheService:B}=await Me(async()=>{const{unifiedCacheService:ie}=await import("./tool-windows-BTXOQvEU.js").then(Ae=>Ae.oI);return{unifiedCacheService:ie}},__vite__mapDeps([0]),import.meta.url),L=`edited-image-${Date.now()}`,z=`/__aitu_cache__/image/${L}.png`,ee=await(await fetch(C)).blob();await B.cacheMediaFromBlob(z,ee,"image",{taskId:L});const O=new Image;await new Promise((ie,Ae)=>{O.onload=()=>ie(),O.onerror=()=>Ae(new Error("Failed to load edited image")),O.src=C});const J=Cr(e),oe=y?y.points[1][0]-y.points[0][0]+20:0,Ie=y?y.points[0][0]:J?J[0]+100:100,ut=y?y.points[0][1]:J?J[1]+100:100,Re=[Ie+oe,ut];await Yl(e,z,Re,!1,{width:O.naturalWidth,height:O.naturalHeight},!1,!0)}catch(B){console.error("Failed to insert image:",B),re.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:1735,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1734,columnNumber:9},void 0),K.hasText&&l.jsxDEV(gD,{board:e,isOpen:w,onClose:()=>T(!1),currentFontSize:K.fontSize,currentFontFamily:(W=K.marks)==null?void 0:W["font-family"],currentColor:(Q=K.marks)==null?void 0:Q.color,toolbarRect:U,selectionRect:_},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1845,columnNumber:9},void 0),v&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(FD,{visible:v,board:e,onClose:()=>{E(!1),q(void 0)},initialFrameId:R},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1860,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:1859,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/popup-toolbar/popup-toolbar.tsx",lineNumber:761,columnNumber:5},void 0)},sg=(e,t)=>{const n=zp(t);return{fill:Or(t),strokeColor:Ux(e,t),fontSize:n["font-size"],marks:n}},rg=(e,t)=>{const n=zp(t);return{fill:Or(t),strokeColor:Rx(e,t),fontSize:n["font-size"],marks:n}},zD=e=>{const t=Be(e);if(t.length===0)return{fill:void 0,strokeColor:void 0};if(t.length===1){const n=t[0];return Pt(n)?{fill:n.fillColor,strokeColor:void 0}:nn.isMindElement(e,n)?sg(e,n):$e.isFreehand(n)?ag(e,n):Je.isPenPath(n)?lg(e,n):rg(e,n)}return GD(e,t)},GD=(e,t)=>{const n=t.map(a=>Pt(a)?{fill:a.fillColor,strokeColor:void 0}:nn.isMindElement(e,a)?sg(e,a):$e.isFreehand(a)?ag(e,a):Je.isPenPath(a)?lg(e,a):H.isDrawElement(a)?rg(e,a):{fill:void 0,strokeColor:void 0}),i=n.map(a=>a.fill),o=n.map(a=>a.strokeColor),s=i.every(a=>a===i[0]),r=o.every(a=>a===o[0]);return{fill:s?i[0]:void 0,strokeColor:r?o[0]:void 0}},ag=(e,t)=>({fill:Or(t),strokeColor:Gp(e,t)}),lg=(e,t)=>({fill:Or(t),strokeColor:t.strokeColor,cornerRadius:t.cornerRadius}),WD=(e,t)=>Pt(t)||nn.isMindElement(e,t)||Mx(e,t)?!0:$e.isFreehand(t)?Ix(t.points):Je.isPenPath(t)?t.closed:H.isDrawElement(t)?H.isShapeElement(t)&&!H.isImage(t)&&!H.isText(t)&&Hp(t):!1,cg=(e,t)=>nn.isMindElement(e,t)||$e.isFreehand(t)||Je.isPenPath(t)?!0:H.isDrawElement(t)?H.isShapeElement(t)&&!H.isImage(t)&&!H.isText(t)||H.isArrowLine(t)||H.isVectorLine(t)||H.isTable(t):!1,$D=(e,t)=>cg(e,t),XD=(e,t)=>nn.isMindElement(e,t)?!0:H.isDrawElement(t)?Gl([t]):!1,KD=(e,t)=>{if(Je.isPenPath(t))return t.closed;if($e.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 H.isDrawElement(t)?H.isImage(t)||H.isText(t)||H.isArrowLine(t)||H.isVectorLine(t)?!1:H.isShapeElement(t)&&Hp(t):(nn.isMindElement(e,t),!1)},ra=Fn.createContext({}),_m=(e="",t=!1)=>`menu-item menu-item-base ${e} ${t?"menu-item--active":""}`.trim(),YD=(e,t)=>{const n=p.useContext(ra);return qx(e,i=>{var s;const o=new CustomEvent(Zl.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});t==null||t(o),o.defaultPrevented||(s=n.onSelect)==null||s.call(n,o)})},ZD=({icon:e,shortcut:t,children:n})=>l.jsxDEV(l.Fragment,{children:[e&&l.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),l.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&&l.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),qe=({icon:e,onSelect:t,children:n,shortcut:i,className:o,selected:s,submenu:r,...a})=>{const[c,u]=p.useState(!1),d=p.useRef(),m=YD(a.onClick,t),f=l.jsxDEV(ZD,{icon:e,shortcut:i,children:n},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:32,columnNumber:5},void 0),h=()=>{d.current&&window.clearTimeout(d.current),u(!0)},g=()=>{d.current=window.setTimeout(()=>{u(!1)},100)};return r?l.jsxDEV(at,{open:c,onOpenChange:u,placement:"right-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("button",{...a,type:"button",className:_m(o,s||c),title:a.title??a["aria-label"],onClick:m,onMouseEnter:h,onMouseLeave:g,role:"menuitem","aria-haspopup":"true","aria-expanded":c,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),l.jsxDEV(ct,{onMouseEnter:h,onMouseLeave:g,children:r},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:73,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:52,columnNumber:7},void 0):l.jsxDEV("button",{...a,onClick:m,type:"button",className:_m(o,s),title:a.title??a["aria-label"],role:"menuitem",children:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/menu/menu-item.tsx",lineNumber:81,columnNumber:5},void 0)};qe.displayName="MenuItem";const ug=({children:e})=>l.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);ug.displayName="MenuItemBadge";qe.Badge=ug;const Tn=({children:e,className:t="",onSelect:n,style:i,onClose:o})=>{const s=Y(`menu ${t}`).trim(),r=p.useRef(null),a=p.useCallback(()=>r.current?Array.from(r.current.querySelectorAll("button.menu-item:not([disabled])")):[],[]),c=p.useCallback(u=>{var f,h,g,x;const d=a();if(d.length===0)return;const m=d.findIndex(b=>b===document.activeElement);switch(u.key){case"ArrowDown":{u.preventDefault();const b=m<d.length-1?m+1:0;(f=d[b])==null||f.focus();break}case"ArrowUp":{u.preventDefault();const b=m>0?m-1:d.length-1;(h=d[b])==null||h.focus();break}case"Home":{u.preventDefault(),(g=d[0])==null||g.focus();break}case"End":{u.preventDefault(),(x=d[d.length-1])==null||x.focus();break}case"Escape":{u.preventDefault(),o==null||o();break}case"Enter":case" ":{m>=0&&d[m]&&(u.preventDefault(),d[m].click());break}}},[a,o]);return p.useEffect(()=>{const u=a();u.length>0&&requestAnimationFrame(()=>{var d;(d=u[0])==null||d.focus()})},[a]),l.jsxDEV(ra.Provider,{value:{onSelect:n},children:l.jsxDEV("div",{className:s,style:i,"data-testid":"menu",onKeyDown:c,ref:r,role:"menu",children:l.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)};Tn.displayName="Menu";const dg=()=>{const e=xt(),{t}=Se();return l.jsxDEV(qe,{"data-testid":"save-button","data-track":"toolbar_click_menu_save",onSelect:()=>{Wp(e)},icon:l.jsxDEV(Bp,{},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)};dg.displayName="SaveToFile";const mg=()=>{const e=xt(),t=Fh(),{t:n}=Se(),i=(o,s,r)=>{e.children=o,e.viewport=s||{zoom:1},e.theme={themeColorMode:hi.default},t.update(e.children,{board:e,parent:e,parentG:F.getElementHost(e)}),fe.fitViewport(e)};return l.jsxDEV(qe,{"data-testid":"open-button","data-track":"toolbar_click_menu_open",onSelect:()=>{Lx(e).then(o=>{o&&i(o.elements,o.viewport)})},icon:l.jsxDEV(Bx,{},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)};mg.displayName="OpenFile";const pg=()=>{const e=xt(),t=p.useContext(ra),{t:n}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Ox,{},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:()=>{Gs(e,!0)},submenu:l.jsxDEV(Tn,{onSelect:()=>{var o;const i=new CustomEvent(Zl.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});(o=t.onSelect)==null||o.call(t,i)},children:[l.jsxDEV(qe,{"data-track":"toolbar_click_menu_export_png",onSelect:()=>{Gs(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),l.jsxDEV(qe,{"data-track":"toolbar_click_menu_export_jpg",onSelect:()=>{Gs(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)};pg.displayName="SaveAsImage";const fg=()=>{const{appState:e,setAppState:t}=Gt(),{t:n}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(ar,{},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)};fg.displayName="CleanBoard";const hg=({onOpenBackupRestore:e})=>{const{t}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Hx,{},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)};hg.displayName="BackupRestore";const gg=({onOpenCloudSync:e})=>{const{t}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Gx,{},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)};gg.displayName="CloudSync";const bg=()=>{const{t:e}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(zx,{},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)};bg.displayName="DebugPanel";const xg=()=>{const{appState:e,setAppState:t}=Gt(),{t:n}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Wx,{},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)};xg.displayName="Settings";const Ng=()=>{const{appState:e,setAppState:t}=Gt(),{t:n}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV($x,{},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)};Ng.displayName="QuickCommands";const yg=()=>{const{t:e}=Se();return l.jsxDEV(qe,{icon:l.jsxDEV(Xx,{},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)};yg.displayName="UserManual";const wg=()=>{var n;const{t:e}=Se(),t=((n=document.querySelector('meta[name="app-version"]'))==null?void 0:n.getAttribute("content"))||"0.0.0";return l.jsxDEV(qe,{"data-track":"toolbar_click_menu_version",onSelect:()=>{},"aria-label":e("menu.version"),children:l.jsxDEV("span",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",width:"100%"},children:[l.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),l.jsxDEV("span",{style:{display:"flex",alignItems:"center",gap:"12px"},children:[l.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),l.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)};wg.displayName="VersionInfo";async function QD(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 vg=()=>{const e=xt(),{t}=Se(),[n,i]=p.useState(!1),o=p.useCallback(async()=>{if(n)return;i(!0);const s=re.loading(t("menu.cleanInvalidLinks.scanning"),0);try{const r=[];for(let u=0;u<e.children.length;u++){const d=e.children[u],m=d.url;if(!m||typeof m!="string")continue;const f=H.isDrawElement(d)&&H.isImage(d),h=wn(d);(f||h)&&r.push({element:d,index:u,url:m})}const a=[];if(await Promise.all(r.map(async({element:u,index:d,url:m})=>{await QD(m)||a.push({element:u,index:d})})),s.then(u=>{var d;return(d=u==null?void 0:u.close)==null?void 0:d.call(u)}),a.length===0){re.success(t("menu.cleanInvalidLinks.noInvalid")),i(!1);return}a.sort((u,d)=>d.index-u.index);for(const{index:u}of a)ue.removeNode(e,[u]);const c=t("menu.cleanInvalidLinks.success").replace("{count}",String(a.length));re.success(c)}catch(r){s.then(a=>{var c;return(c=a==null?void 0:a.close)==null?void 0:c.call(a)}),re.error(t("menu.cleanInvalidLinks.error")),console.error("[CleanInvalidLinks] Error:",r)}finally{i(!1)}},[e,t,n]);return l.jsxDEV(qe,{icon:l.jsxDEV(Fx,{},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)};vg.displayName="CleanInvalidLinks";const Eg=()=>{const{language:e,setLanguage:t,t:n}=Se(),i=p.useContext(ra);return l.jsxDEV(qe,{icon:l.jsxDEV($p,{},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:l.jsxDEV(Tn,{onSelect:()=>{var s;const o=new CustomEvent(Zl.MENU_ITEM_SELECT,{bubbles:!0,cancelable:!0});(s=i.onSelect)==null||s.call(i,o)},children:[l.jsxDEV(qe,{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),l.jsxDEV(qe,{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)};Eg.displayName="LanguageSwitcherMenu";const ms=()=>l.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);ms.displayName="MenuSeparator";const _l=({children:e,buttonId:t,isVisible:n,visibleIndex:i=-1,disabled:o=!1})=>{const{t:s}=Se(),{hideButton:r,showButton:a,resetToDefault:c,visibleButtons:u,reorderButton:d}=Fr(),[m,f]=p.useState(!1),[h,g]=p.useState({x:0,y:0}),x=p.useRef(null),b=p.useRef(null);p.useEffect(()=>{const V=b.current;if(!V)return;const U=A=>{A.button===2&&A.stopPropagation()};return V.addEventListener("pointerdown",U,!0),()=>{V.removeEventListener("pointerdown",U,!0)}},[]);const y=p.useCallback(V=>{o||(V.preventDefault(),V.stopPropagation(),g({x:V.clientX,y:V.clientY}),f(!0))},[o]),N=p.useCallback(()=>{f(!1)},[]),w=p.useCallback(()=>{n?r(t):a(t),N()},[n,t,r,a,N]),T=p.useCallback(()=>{i>0&&d(i,i-1,!0),N()},[i,d,N]),S=p.useCallback(()=>{i>=0&&i<u.length-1&&d(i,i+1,!0),N()},[i,u.length,d,N]),v=p.useCallback(()=>{i>0&&d(i,0,!0),N()},[i,d,N]),E=p.useCallback(()=>{i>=0&&i<u.length-1&&d(i,u.length-1,!0),N()},[i,u.length,d,N]),R=p.useCallback(()=>{c(),N()},[c,N]);p.useEffect(()=>{if(!m)return;const V=A=>{x.current&&!x.current.contains(A.target)&&N()},U=A=>{A.key==="Escape"&&N()};return document.addEventListener("mousedown",V),document.addEventListener("keydown",U),()=>{document.removeEventListener("mousedown",V),document.removeEventListener("keydown",U)}},[m,N]),p.useEffect(()=>{if(!m||!x.current)return;const U=x.current.getBoundingClientRect(),A=window.innerWidth,_=window.innerHeight;let M=h.x,P=h.y;h.x+U.width>A&&(M=A-U.width-8),h.y+U.height>_&&(P=_-U.height-8),(M!==h.x||P!==h.y)&&g({x:M,y:P})},[m,h]);const q=n&&i>0,$=n&&i>=0&&i<u.length-1;return l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{ref:b,onContextMenu:y,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:192,columnNumber:7},void 0),m&&qr.createPortal(l.jsxDEV("div",{ref:x,className:"toolbar-context-menu",style:{position:"fixed",left:h.x,top:h.y,zIndex:en.DROPDOWN_PORTAL},children:l.jsxDEV(Tn,{children:[n&&l.jsxDEV(l.Fragment,{children:[l.jsxDEV(qe,{onSelect:T,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),l.jsxDEV(qe,{onSelect:S,disabled:!$,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),l.jsxDEV(qe,{onSelect:v,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),l.jsxDEV(qe,{onSelect:E,disabled:!$,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),l.jsxDEV(ms,{},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),l.jsxDEV(qe,{onSelect:w,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),l.jsxDEV(ms,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/toolbar-context-menu.tsx",lineNumber:226,columnNumber:15},void 0),l.jsxDEV(qe,{onSelect:R,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)},JD=({embedded:e=!1,iconMode:t=!1,onOpenBackupRestore:n,onOpenCloudSync:i})=>{const o=xt(),{t:s}=Se(),{isButtonVisible:r,visibleButtons:a}=Fr(),c=F.getBoardContainer(o),[u,d]=p.useState(!1),m=o.history.undos.length<=0,f=o.history.redos.length<=0,h=r("undo"),g=r("redo"),x=a.findIndex(N=>N.id==="undo"),b=a.findIndex(N=>N.id==="redo"),y=l.jsxDEV(ft.Row,{gap:1,children:[l.jsxDEV(at,{sideOffset:12,open:u,onOpenChange:N=>{d(N)},placement:e?"right-start":"bottom-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{type:"icon",visible:!0,selected:u,icon:l.jsxDEV($p,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:71,columnNumber:21},void 0),tooltip:u?void 0:s("general.menu"),tooltipPlacement:e?"right":"bottom","aria-label":s("general.menu"),"data-track":"toolbar_click_menu",onPointerDown:()=>{d(!u)}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:67,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:66,columnNumber:11},void 0),l.jsxDEV(ct,{container:c,style:{zIndex:en.POPOVER_APP},children:l.jsxDEV(Tn,{onSelect:()=>{d(!1)},onClose:()=>{d(!1)},children:[l.jsxDEV(mg,{},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),l.jsxDEV(dg,{},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),l.jsxDEV(pg,{},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),l.jsxDEV(fg,{},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),l.jsxDEV(vg,{},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),l.jsxDEV(ms,{},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),l.jsxDEV(Eg,{},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),l.jsxDEV(hg,{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),l.jsxDEV(bg,{},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),l.jsxDEV(gg,{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),l.jsxDEV(xg,{},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),l.jsxDEV(ms,{},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),l.jsxDEV(Ng,{},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),l.jsxDEV(yg,{},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),l.jsxDEV(wg,{},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&&l.jsxDEV(_l,{buttonId:"undo",isVisible:!0,visibleIndex:x,children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(Xp,{},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:m},1,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:120,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:115,columnNumber:11},void 0),g&&l.jsxDEV(_l,{buttonId:"redo",isVisible:!0,visibleIndex:b,children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(Kp,{},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?l.jsxDEV("div",{className:Y("app-toolbar",{"app-toolbar--embedded":e,"app-toolbar--icon-only":t}),children:[y,l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(Kx,{},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):l.jsxDEV(Ye,{padding:1,className:Y("app-toolbar",At,{"app-toolbar--embedded":e,"app-toolbar--icon-only":t}),children:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/app-toolbar/app-toolbar.tsx",lineNumber:184,columnNumber:5},void 0)};function e_(e,t){return!e||e===ei.solid?null:e===ei.dashed?`${t*3},${t*2}`:e===ei.dotted?`${t},${t*2}`:null}function pi(e){return e!==void 0&&!isNaN(e[0])&&!isNaN(e[1])&&isFinite(e[0])&&isFinite(e[1])}class t_ extends Yp{constructor(t){super(t)}canDraw(t){return t.anchors&&t.anchors.length>0}draw(t){const n=Ql();n.classList.add("pen-path");const i=Zp(t),o=t.cornerRadius||0,s=Qp(i,t.closed,o),r=t.strokeWidth||2,a=document.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d",s),a.setAttribute("fill",Yx(t.fill)),a.setAttribute("stroke",t.strokeColor||"#000000"),a.setAttribute("stroke-width",String(r)),a.setAttribute("stroke-linecap","round"),a.setAttribute("stroke-linejoin","round");const c=e_(t.strokeStyle,r);return c&&a.setAttribute("stroke-dasharray",c),n.appendChild(a),n}}function n_(e,t){const n=e.point,i=Qx;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 jm(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(Zx/2)),t.setAttribute("fill","#ffffff"),t.setAttribute("stroke","#1890ff"),t.setAttribute("stroke-width","1"),t.classList.add("pen-handle"),t}function Pm(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 i_(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 a=document.createElementNS("http://www.w3.org/2000/svg","circle");a.setAttribute("cx",String(s[0])),a.setAttribute("cy",String(s[1])),a.setAttribute("r","3"),a.setAttribute("fill",i),a.setAttribute("opacity","0.6"),a.classList.add("pen-alignment-marker"),e.appendChild(a)}if(n.horizontal&&n.horizontalRefPoint){const 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 a=document.createElementNS("http://www.w3.org/2000/svg","circle");a.setAttribute("cx",String(s[0])),a.setAttribute("cy",String(s[1])),a.setAttribute("r","3"),a.setAttribute("fill",i),a.setAttribute("opacity","0.6"),a.classList.add("pen-alignment-marker"),e.appendChild(a)}}}function o_(e,t,n="#1890ff",i=2,o){const s=Ql();if(s.classList.add("pen-preview"),e.length===0)return s;if(t&&pi(t)&&o&&(o.horizontal||o.vertical)&&i_(s,t,o),e.length>0){const r=Qp(e,!1),a=document.createElementNS("http://www.w3.org/2000/svg","path");a.setAttribute("d",r),a.setAttribute("fill","none"),a.setAttribute("stroke",n),a.setAttribute("stroke-width",String(i)),a.setAttribute("stroke-linecap","round"),a.setAttribute("stroke-linejoin","round"),s.appendChild(a)}if(t&&pi(t)&&e.length>0){const r=e[e.length-1];if(pi(r.point)){const a=document.createElementNS("http://www.w3.org/2000/svg","line"),c=r.handleOut&&pi(r.handleOut)?r.handleOut:r.point;a.setAttribute("x1",String(c[0])),a.setAttribute("y1",String(c[1])),a.setAttribute("x2",String(t[0])),a.setAttribute("y2",String(t[1])),a.setAttribute("stroke",n),a.setAttribute("stroke-width","1"),a.setAttribute("stroke-dasharray","5,5"),a.setAttribute("opacity","0.6"),s.appendChild(a)}}for(let r=0;r<e.length;r++){const a=e[r];if(!pi(a.point))continue;if(a.handleIn&&pi(a.handleIn)){const u=Pm(a.point,a.handleIn);s.appendChild(u);const d=jm(a.handleIn);s.appendChild(d)}if(a.handleOut&&pi(a.handleOut)){const u=Pm(a.point,a.handleOut);s.appendChild(u);const d=jm(a.handleOut);s.appendChild(d)}const c=n_(a,r===e.length-1);s.appendChild(c)}return s}const s_=3,r_=3,Cm=8,jl=new WeakMap;function Zn(e){let t=jl.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}},jl.set(e,t)),t}function Am(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=Cm,a=null,c=null,u=Cm,d=null,m=null;for(const f of s){const h=Math.abs(e[0]-f.point[0]),g=Math.abs(e[1]-f.point[1]);h<r&&(r=h,a=f.point[0],c=f.point),g<u&&(u=g,d=f.point[1],m=f.point)}return a!==null&&(o[0]=a,i.vertical=!0,i.verticalRefPoint=c),d!==null&&(o[1]=d,i.horizontal=!0,i.horizontalRefPoint=m),i.referencePoint=i.verticalRefPoint||i.horizontalRefPoint,{snappedPoint:o,alignment:i}}function so(e){const t=Zn(e);t.previewG&&t.previewG.remove(),Sg(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 Sg(e){F.getElementHost(e).querySelectorAll(".pen-preview").forEach(i=>i.remove())}function Ao(e){const t=Zn(e),n=F.getElementHost(e);t.previewG&&t.previewG.remove(),t.previewG=o_(t.anchors,t.currentPoint,"#1890ff",2,t.alignment),n.appendChild(t.previewG)}function yr(e,t=!1){const n=Zn(e),i=[...n.anchors];if(n.previewG&&(n.previewG.remove(),n.previewG=null),Sg(e),i.length>=2){const o=Jx(e,i,t);n.isCreating=!1,n.anchors=[],n.isDraggingHandle=!1,n.dragStartPoint=null,n.currentPoint=null,ue.insertNode(e,o,[e.children.length]),t?(oi(e),_i(e,o)):oi(e)}else so(e)}function Fo(e){return F.getPointer(e)===Bn.pen}function a_(e){const t=Zn(e);t.isCreating&&(Fo(e)||(t.anchors.length>=2?yr(e,!1):so(e)))}const l_=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o,keyDown:s,globalKeyDown:r}=e,a=u=>u instanceof HTMLInputElement||u instanceof HTMLTextAreaElement||u instanceof HTMLElement&&u.isContentEditable,c=u=>{if(u.defaultPrevented||!Fo(e)||a(u.target))return!1;const d=Zn(e);return d.isCreating?u.key==="Enter"?(yr(e,!1),u.preventDefault(),!0):u.key==="Escape"?(so(e),u.preventDefault(),!0):tt.isHotkey(["mod+z"],{byKey:!0})(u)||u.key==="Backspace"||u.key==="Delete"?(d.anchors.length>0&&(d.anchors.pop(),Ao(e)),d.anchors.length===0&&so(e),u.preventDefault(),!0):!1:!1};return e.pointerDown=u=>{if(a_(e),!Fo(e)){t(u);return}const d=Zn(e);let m=Ot(e,Ft(e,u.x,u.y));if(d.isCreating&&d.anchors.length>=r_){const x={anchors:d.anchors};if(eN(x,m)){yr(e,!0);return}}if(d.anchors.length>0){const{snappedPoint:x}=Am(m,d.anchors,!1);m=x}d.isCreating=!0,d.isDraggingHandle=!0,d.dragStartPoint=m;const h=Qa(e).defaultAnchorType,g={point:m,type:h};d.anchors.push(g),d.alignment={horizontal:!1,vertical:!1,horizontalRefPoint:null,verticalRefPoint:null,referencePoint:null},Ao(e)},e.pointerMove=u=>{if(!Fo(e)){n(u);return}const d=Zn(e);let m=Ot(e,Ft(e,u.x,u.y));const f=d.isDraggingHandle,{snappedPoint:h,alignment:g}=Am(m,d.anchors,f);if(d.currentPoint=h,d.alignment=g,d.isDraggingHandle&&d.dragStartPoint&&d.anchors.length>0&&tN(d.dragStartPoint,m)>s_){const b=d.anchors.length-1,y=d.anchors[b];if(y.type!=="corner"){if(y.type==="smooth"||y.type==="symmetric"){const N=nN(y.point,m);d.anchors[b]={...y,handleIn:N.handleIn,handleOut:N.handleOut}}}}d.isCreating&&Jl(e,"pen-preview",()=>{Ao(e)}),n(u)},e.pointerUp=u=>{if(!Fo(e)){i(u);return}const d=Zn(e);d.isDraggingHandle=!1,d.dragStartPoint=null,Ao(e),i(u)},e.globalPointerUp=u=>{o(u)},e.globalKeyDown=u=>{c(u)||r(u)},e.keyDown=u=>{c(u)||s(u)},e};function Dn(e){const t=jl.get(e);t!=null&&t.isCreating&&(t.anchors.length>=2?yr(e,!1):so(e))}const Ic=[{icon:l.jsxDEV(No,{},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:rt.feltTipPen,titleKey:"toolbar.pen"},{icon:l.jsxDEV(iN,{},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:Bn.pen,titleKey:"toolbar.vectorPen"},{icon:l.jsxDEV(oN,{},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:rt.eraser,titleKey:"toolbar.eraser"},{icon:l.jsxDEV(sN,{},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:rt.laserPointer,titleKey:"toolbar.laserPointer"}],c_=Jp(Ic,5),Vc=({onPointerUp:e})=>{const{t}=Se(),n=xt();return l.jsxDEV(Ye,{padding:1,children:l.jsxDEV(ft.Row,{gap:1,align:"center",children:l.jsxDEV(ft.Row,{gap:1,children:c_.map((i,o)=>i.map((s,r)=>l.jsxDEV(ne,{className:Y({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!==Bn.pen&&Dn(n),mt(n,St.dnd),fe.updatePointerType(n,s.pointer)},onPointerUp:()=>{mt(n,St.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)},u_=[{icon:l.jsxDEV(ef,{},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:De.rectangle},{icon:l.jsxDEV(tf,{},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:De.ellipse},{icon:l.jsxDEV(nf,{},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:De.triangle},{icon:l.jsxDEV(of,{},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:ec.terminal},{icon:l.jsxDEV(sf,{},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:De.diamond},{icon:l.jsxDEV(rf,{},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:De.parallelogram},{icon:l.jsxDEV(af,{},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:De.roundRectangle}],d_=Jp(u_,5),Uc=({onPointerUp:e})=>{const t=xt();return l.jsxDEV(Ye,{padding:1,children:l.jsxDEV(ft.Col,{gap:1,children:d_.map((n,i)=>l.jsxDEV(ft.Row,{gap:1,children:n.map((o,s)=>l.jsxDEV(ne,{className:Y({fillable:!1}),type:"icon",size:"small",visible:!0,icon:o.icon,tooltip:o.title,"aria-label":o.title,onPointerDown:()=>{Dn(t),mt(t,St.dnd),fe.updatePointerType(t,o.pointer)},onPointerUp:()=>{mt(t,St.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)},m_=[{icon:l.jsxDEV(rN,{},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:kn.straight},{icon:l.jsxDEV(aN,{},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:kn.elbow},{icon:l.jsxDEV(lN,{},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:kn.curve}],Rc=({onPointerUp:e})=>{const t=xt();return l.jsxDEV(Ye,{padding:1,children:l.jsxDEV(ft.Row,{gap:1,children:m_.map((n,i)=>l.jsxDEV(ne,{className:Y({fillable:!1}),type:"icon",size:"small",visible:!0,icon:n.icon,tooltip:n.title,"aria-label":n.title,onPointerDown:()=>{Dn(t),mt(t,St.drawing),fe.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)},kg=[{value:hi.default,labelKey:"theme.default"},{value:hi.colorful,labelKey:"theme.colorful"},{value:hi.soft,labelKey:"theme.soft"},{value:hi.retro,labelKey:"theme.retro"},{value:hi.dark,labelKey:"theme.dark"},{value:hi.starry,labelKey:"theme.starry"}],Tg=l.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:l.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),nr=e=>e===vt.hand||e===vt.selection||e===is,Dg=l.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),Mm={hand:{icon:l.jsxDEV(hf,{},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:vt.hand},selection:{icon:l.jsxDEV(ff,{},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:vt.selection},lasso:{icon:l.jsxDEV(pf,{},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:is},mind:{icon:l.jsxDEV(lr,{},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:ji.mind},text:{icon:l.jsxDEV(sc,{},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:De.text},freehand:{icon:l.jsxDEV(No,{},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:rt.feltTipPen,hasPopup:!0,popupKey:"freehand"},arrow:{icon:l.jsxDEV(oc,{},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:kn.straight,hasPopup:!0,popupKey:"arrow"},shape:{icon:l.jsxDEV(ic,{},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:De.rectangle,hasPopup:!0,popupKey:"shape"},image:{icon:l.jsxDEV(Rr,{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:l.jsxDEV(Ur,{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:l.jsxDEV(Br,{},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:l.jsxDEV(Lr,{},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:l.jsxDEV(mf,{},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:l.jsxDEV(df,{},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:l.jsxDEV(uf,{},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:l.jsxDEV(Xp,{},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:l.jsxDEV(Kp,{},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"}},p_=({embedded:e=!1})=>{const{t}=Se(),n=xt(),i=F.getBoardContainer(n),{hiddenButtons:o,showButton:s}=Fr(),[r,a]=p.useState(!1),[c,u]=p.useState(!1),d=p.useRef(null),m=p.useRef(null),f=p.useCallback(()=>{d.current&&(clearTimeout(d.current),d.current=null),m.current&&(clearTimeout(m.current),m.current=null)},[]),h=p.useCallback(()=>"ontouchstart"in window||navigator.maxTouchPoints>0,[]),g=p.useCallback(()=>{h()||(f(),u(!0),d.current=setTimeout(()=>{a(!0)},200))},[f,h]),x=p.useCallback(()=>{h()||(d.current&&(clearTimeout(d.current),d.current=null),m.current=setTimeout(()=>{u(!1),a(!1)},150))},[h]),b=p.useCallback(()=>{h()&&(a(w=>!w),u(!1))},[h]),y=p.useCallback(()=>{f(),u(!0)},[f]),N=p.useCallback(()=>{m.current=setTimeout(()=>{u(!1),a(!1)},150)},[]);return l.jsxDEV(at,{open:r,onOpenChange:w=>{!w&&(h()||!c)&&a(!1)},placement:e?"right-start":"bottom",sideOffset:12,children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{onMouseEnter:g,onMouseLeave:x,onClick:b,children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(cN,{},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),l.jsxDEV(ct,{container:i,style:{zIndex:en.POPOVER},onMouseEnter:y,onMouseLeave:N,children:l.jsxDEV(f_,{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)},f_=({hiddenButtons:e,showButton:t})=>{const{t:n}=Se(),i=xt(),o=F.getBoardContainer(i),{openDialog:s}=Gt(),r=tc(),[a,c]=p.useState(null),[u,d]=p.useState(null),m=p.useRef({}),[f,h]=p.useState(null),g=p.useRef(null),[x,b]=p.useState(rt.feltTipPen),y=p.useCallback(()=>{c(null),d(null),Object.values(m.current).forEach(I=>{I&&clearTimeout(I)})},[]),N=p.useCallback(I=>{if(Object.values(m.current).forEach(G=>{G&&clearTimeout(G)}),u===I){d(null);return}a===I&&!u?c(null):(d(null),c(I))},[a,u]),w=p.useCallback(I=>{a&&!u||(m.current[I]&&clearTimeout(m.current[I]),Object.entries(m.current).forEach(([G,ce])=>{G!==I&&ce&&(clearTimeout(ce),m.current[G]=null)}),u&&u!==I?(c(I),d(I)):a||(m.current[I]=setTimeout(()=>{c(I),d(I)},300)))},[u,a]),T=p.useCallback(I=>{m.current[I]&&(clearTimeout(m.current[I]),m.current[I]=null),u===I&&(m.current[I]=setTimeout(()=>{c(null),d(null)},400))},[u]),S=p.useCallback(I=>{m.current[I]&&(clearTimeout(m.current[I]),m.current[I]=null)},[]),v=p.useCallback(I=>{u===I&&(c(null),d(null))},[u]),E=p.useCallback(I=>{Dn(i),I===De.text?mt(i,null):mt(i,St.dnd),fe.updatePointerType(i,I),r(I)},[i,r]),R=p.useCallback(I=>{I!==De.text&&mt(i,St.drawing)},[i]),q=p.useCallback(I=>{const G=Mm[I];if(G){if(G.hasPopup&&G.popupKey){N(G.popupKey);return}switch(y(),Dn(i),G.pointer&&(nr(G.pointer)?(fe.updatePointerType(i,G.pointer),r(G.pointer)):(E(G.pointer),R(G.pointer))),I){case"image":Hr(i);break;case"ai-image":s(ln.aiImageGeneration);break;case"ai-video":s(ln.aiVideoGeneration);break;case"mermaid-to-drawnix":s(ln.mermaidToDrawnix);break;case"markdown-to-drawnix":s(ln.markdownToDrawnix);break;case"undo":i.undo();break;case"redo":i.redo();break}}},[i,s,E,R,y,r,N]),$=p.useCallback((I,G)=>{I.preventDefault(),I.stopPropagation(),h({buttonId:G,x:I.clientX,y:I.clientY})},[]),V=p.useCallback(()=>{h(null)},[]),U=p.useCallback(()=>{f&&(t(f.buttonId),V())},[f,t,V]);Fn.useEffect(()=>{if(!f)return;const I=ce=>{g.current&&!g.current.contains(ce.target)&&V()},G=ce=>{ce.key==="Escape"&&V()};return document.addEventListener("mousedown",I),document.addEventListener("keydown",G),()=>{document.removeEventListener("mousedown",I),document.removeEventListener("keydown",G)}},[f,V]);const A=p.useCallback(I=>{switch(I){case"freehand":return l.jsxDEV(Vc,{onPointerUp:G=>{y(),r(G),b(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 l.jsxDEV(Uc,{onPointerUp:G=>{y(),r(G)}},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 l.jsxDEV(Rc,{onPointerUp:G=>{y(),r(G)}},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 l.jsxDEV(Tn,{children:kg.map(G=>{const ce=i.theme.themeColorMode===G.value;return l.jsxDEV(qe,{icon:ce?Tg:Dg,"data-track":`toolbar_click_theme_${G.value}`,onSelect:()=>{fe.updateThemeColor(i,G.value),y()},"aria-label":n(G.labelKey),selected:ce,children:n(G.labelKey)},G.value,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:521,columnNumber:17},void 0)})},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:517,columnNumber:11},void 0);default:return null}},[i,y,r,n]),_=p.useMemo(()=>{const I=Ic.find(G=>G.pointer===x);return(I==null?void 0:I.icon)||l.jsxDEV(No,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:547,columnNumber:30},void 0)},[x]),[M,P]=p.useState(!1),Z=p.useCallback(()=>{var I;return l.jsxDEV("div",{className:"more-tools-panel__zoom-row",onContextMenu:G=>$(G,"zoom"),children:l.jsxDEV(ft.Row,{gap:1,children:[l.jsxDEV(ne,{type:"button",icon:l.jsxDEV(lf,{},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:()=>{fe.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),l.jsxDEV(at,{sideOffset:12,open:M,onOpenChange:G=>{P(G)},placement:"right-start",children:[l.jsxDEV(Tt,{content:n("zoom.fit"),showArrow:!1,children:l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{"aria-label":n("zoom.fit"),"data-track":"toolbar_click_zoom_menu",className:`zoom-menu-trigger ${M?"active":""}`,onPointerUp:()=>{P(!M)},children:[Number(((((I=i==null?void 0:i.viewport)==null?void 0:I.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),l.jsxDEV(ct,{container:o,style:{zIndex:en.POPOVER+1},children:l.jsxDEV(Tn,{onSelect:()=>{P(!1)},children:[l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_fit",onSelect:()=>{fe.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),l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_fit_frame",onSelect:()=>{nc(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),l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_100",onSelect:()=>{fe.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),l.jsxDEV(ne,{type:"button",icon:l.jsxDEV(cf,{},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:()=>{fe.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,$,n,M]),pe=p.useCallback(I=>{var we,Fe,K,Ce;if(I==="zoom")return Z();const G=Mm[I];if(!G)return null;const ce=n(G.titleKey),X=I==="freehand"?_:G.icon,ae=I==="undo"&&(((Fe=(we=i.history)==null?void 0:we.undos)==null?void 0:Fe.length)??0)<=0,le=I==="redo"&&(((Ce=(K=i.history)==null?void 0:K.redos)==null?void 0:Ce.length)??0)<=0,be=ae||le;if(G.hasPopup&&G.popupKey){const We=G.popupKey;return l.jsxDEV("div",{className:"more-tools-panel__item",onContextMenu:it=>$(it,I),children:l.jsxDEV(at,{open:a===We,sideOffset:2,onOpenChange:it=>{it||y()},placement:"right-start",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{onMouseEnter:()=>w(We),onMouseLeave:()=>T(We),children:l.jsxDEV(ne,{type:"icon",icon:X,tooltip:ce,tooltipPlacement:"left","aria-label":ce,visible:!0,selected:a===We,"data-track":`toolbar_click_${I}`,onPointerUp:()=>q(I)},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),l.jsxDEV(ct,{container:o,style:{zIndex:en.POPOVER+1},onMouseEnter:()=>S(We),onMouseLeave:()=>v(We),children:A(We)},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)},I,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:667,columnNumber:9},void 0)}return l.jsxDEV("div",{className:"more-tools-panel__item",onContextMenu:We=>$(We,I),children:l.jsxDEV(ne,{type:"icon",icon:X,tooltip:ce,tooltipPlacement:"right","aria-label":ce,visible:!0,selected:!1,disabled:be,"data-track":`toolbar_click_${I}`,onPointerUp:()=>q(I)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/more-tools-button.tsx",lineNumber:720,columnNumber:9},void 0)},I,!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,a,_,q,$,w,T,S,v,A,y,Z]);return e.length===0?l.jsxDEV("div",{className:"more-tools-panel",children:[l.jsxDEV("div",{className:"more-tools-panel__header",children:l.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),l.jsxDEV("div",{className:"more-tools-panel__empty",children:l.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):l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{className:"more-tools-panel",children:[l.jsxDEV("div",{className:"more-tools-panel__header",children:l.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),l.jsxDEV("div",{className:"more-tools-panel__content",children:e.map(I=>pe(I.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),l.jsxDEV("div",{className:"more-tools-panel__footer",children:l.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&&qr.createPortal(l.jsxDEV("div",{ref:g,className:"toolbar-context-menu",style:{position:"fixed",left:f.x,top:f.y,zIndex:en.DROPDOWN_PORTAL},children:l.jsxDEV(Tn,{children:l.jsxDEV(qe,{onSelect:U,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)},h_=p.lazy(()=>Me(()=>import("./tool-windows-BTXOQvEU.js").then(e=>e.p2),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),g_=p.lazy(()=>Me(()=>import("./tool-windows-BTXOQvEU.js").then(e=>e.p4),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MinimizedToolsBar})));var _g=(e=>(e.shape="shape",e.arrow="arrow",e.freehand="freehand",e.theme="theme",e))(_g||{});const Im=[{icon:l.jsxDEV(hf,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:123,columnNumber:11},void 0),pointer:vt.hand,titleKey:"toolbar.hand",visibilityKey:"hand"},{icon:l.jsxDEV(ff,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:129,columnNumber:11},void 0),pointer:vt.selection,titleKey:"toolbar.selection",visibilityKey:"selection"},{icon:l.jsxDEV(pf,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:135,columnNumber:11},void 0),pointer:is,titleKey:"toolbar.lasso",visibilityKey:"lasso"},{icon:l.jsxDEV(lr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:141,columnNumber:11},void 0),pointer:ji.mind,titleKey:"toolbar.mind",visibilityKey:"mind"},{icon:l.jsxDEV(sc,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:147,columnNumber:11},void 0),pointer:De.text,titleKey:"toolbar.text",visibilityKey:"text"},{icon:l.jsxDEV(Rr,{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:l.jsxDEV(Ur,{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:l.jsxDEV(Br,{},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:l.jsxDEV(Lr,{},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:l.jsxDEV(lr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:177,columnNumber:11},void 0),pointer:ji.mind,titleKey:"toolbar.mind",visibilityKey:"mind"},{icon:l.jsxDEV(No,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:183,columnNumber:11},void 0),pointer:rt.feltTipPen,titleKey:"toolbar.pen",key:"freehand",visibilityKey:"freehand"},{icon:l.jsxDEV(oc,{},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:kn.straight,visibilityKey:"arrow"},{icon:l.jsxDEV(ic,{},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:De.rectangle,visibilityKey:"shape"},{icon:l.jsxDEV(mf,{},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:l.jsxDEV(df,{},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:l.jsxDEV(uf,{},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"}],b_=e=>Object.keys(kn).includes(e.pointer),x_=e=>Object.keys(De).includes(e.pointer)||Object.keys(ec).includes(e.pointer),N_=({embedded:e=!1,iconMode:t=!1,onOpenMediaLibrary:n,minimizedToolsBarEnabled:i=!1,onEnableToolWindows:o})=>{const s=xt(),{appState:r,openDialog:a}=Gt(),{t:c}=Se(),u=tc(),d=F.getBoardContainer(s),{visibleButtons:m,loading:f,reorderButton:h}=Fr(),{getDragProps:g}=uN({items:m,getId:D=>D.id,onReorder:(D,j)=>{h(D,j,!0)},enabled:e}),[x,b]=p.useState({freehand:!1,arrow:!1,shape:!1,theme:!1}),[y,N]=p.useState(null),w=p.useRef({freehand:null,arrow:null,shape:null,theme:null}),[T,S]=p.useState(Im.find(D=>D.key==="freehand")),[v,E]=p.useState(!1),R=p.useCallback(async D=>{try{D.type===In.IMAGE?await Yl(s,D.url):D.type===In.VIDEO?await gf(s,D.url):D.type===In.AUDIO&&await Ol(s,D.url,{title:D.name,duration:D.duration,previewImageUrl:D.thumbnail,prompt:D.prompt,mv:D.modelName,clipId:D.clipId,providerTaskId:D.providerTaskId}),re.success("素材已插入到画板")}catch(j){console.error("Failed to insert asset:",j),re.error("插入素材失败")}},[s]),q=p.useCallback(()=>{if(n){n({mode:ii.SELECT,onSelect:R,selectButtonText:"插入"});return}E(!0)},[R,n]),$=p.useCallback(()=>{E(!1)},[]),V=()=>{b({freehand:!1,arrow:!1,shape:!1,theme:!1}),N(null),Object.values(w.current).forEach(D=>{D&&clearTimeout(D)})},U=D=>{N(null),Object.values(w.current).forEach(j=>{j&&clearTimeout(j)}),b({freehand:!1,arrow:!1,shape:!1,theme:!1,[D]:!0})},A=D=>{w.current[D]&&clearTimeout(w.current[D]),Object.entries(w.current).forEach(([j,W])=>{j!==D&&W&&(clearTimeout(W),w.current[j]=null)}),y&&y!==D?(b(j=>({...j,[y]:!1,[D]:!0})),N(D)):x[D]||(w.current[D]=setTimeout(()=>{b(j=>({...j,[D]:!0})),N(D)},300))},_=D=>{w.current[D]&&(clearTimeout(w.current[D]),w.current[D]=null),y===D&&(w.current[D]=setTimeout(()=>{b(j=>({...j,[D]:!1})),N(null)},200))},M=D=>{w.current[D]&&(clearTimeout(w.current[D]),w.current[D]=null)},P=D=>{y===D&&(b(j=>({...j,[D]:!1})),N(null))},Z=D=>{Dn(s),D===De.text?(mt(s,null),fe.updatePointerType(s,D),u(D)):(mt(s,St.dnd),fe.updatePointerType(s,D),u(D))},pe=D=>{D!==De.text&&mt(s,St.drawing)},I=()=>Object.values(x).some(D=>D),G=D=>F.isPointer(s,D.pointer)&&!I(),ce=D=>F.isInPointer(D,[rt.feltTipPen,rt.eraser,rt.laserPointer,Bn.pen]),X=D=>{V(),Dn(s),D.pointer&&!nr(D.pointer)?pe(D.pointer):D.pointer&&nr(D.pointer)&&(fe.updatePointerType(s,D.pointer),u(D.pointer)),D.key==="image"?Hr(s):D.key==="media-library"?q():D.key==="ai-image"?a(ln.aiImageGeneration):D.key==="ai-video"?a(ln.aiVideoGeneration):D.key==="mermaid-to-drawnix"?a(ln.mermaidToDrawnix):D.key==="markdown-to-drawnix"&&a(ln.markdownToDrawnix)},ae=(D,j,W)=>{const Q=()=>{switch(W){case"freehand":return l.jsxDEV(Vc,{onPointerUp:z=>{V(),u(z),S(Ic.find(te=>te.pointer===z))}},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 l.jsxDEV(Uc,{onPointerUp:z=>{V(),u(z)}},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 l.jsxDEV(Rc,{onPointerUp:z=>{V(),u(z)}},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 l.jsxDEV(Tn,{children:kg.map(z=>{const te=s.theme.themeColorMode===z.value;return l.jsxDEV(qe,{icon:te?Tg:Dg,"data-track":`toolbar_click_theme_${z.value}`,onSelect:()=>{fe.updateThemeColor(s,z.value),V()},"aria-label":c(z.labelKey),selected:te,children:c(z.labelKey)},z.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)}},C=()=>{const z=x[W],te=Object.entries(x).some(([ee,O])=>ee!==W&&O);switch(W){case"freehand":return z||ce(s)&&!te;case"shape":return z||x_(s)&&!F.isPointer(s,De.text);case"arrow":return z||b_(s);default:return z}},B=W==="freehand"?T.icon:D.icon,L=W==="freehand"?T.titleKey?c(T.titleKey):"Freehand":D.titleKey?c(D.titleKey):"";return l.jsxDEV(at,{open:x[W],sideOffset:12,onOpenChange:z=>{z||V()},placement:e?"right-start":"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{onMouseEnter:()=>A(W),onMouseLeave:()=>_(W),children:l.jsxDEV(ne,{type:"icon",visible:!0,selected:C(),icon:B,tooltip:L,"aria-label":L,"data-track":`toolbar_click_${W}`,onPointerDown:()=>{U(W),W==="freehand"&&T.pointer&&Z(T.pointer)},onPointerUp:()=>{W==="freehand"&&pe()}},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),l.jsxDEV(ct,{container:d,style:{zIndex:en.POPOVER},onMouseEnter:()=>M(W),onMouseLeave:()=>P(W),children:Q()},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:652,columnNumber:9},void 0)]},j,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:611,columnNumber:7},void 0)},le=(D,j)=>l.jsxDEV(ne,{type:"radio",icon:D.icon,checked:G(D),tooltip:D.titleKey?c(D.titleKey):"",tooltipPlacement:e?"right":"bottom","aria-label":D.titleKey?c(D.titleKey):"","data-track":`toolbar_click_${D.pointer||D.key}`,onPointerDown:()=>{D.pointer&&!nr(D.pointer)&&Z(D.pointer)},onPointerUp:()=>{X(D)}},j,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:667,columnNumber:7},void 0),be=p.useMemo(()=>{const D=new Map;return Im.forEach(j=>{j.visibilityKey&&D.set(j.visibilityKey,j)}),D},[]),[we,Fe]=p.useState(!1),K=p.useCallback(D=>{var W;const j=e?ft.Col:ft.Row;return l.jsxDEV("div",{className:Y("creation-toolbar__zoom-inline",{"creation-toolbar__zoom-inline--vertical":e}),children:l.jsxDEV(j,{gap:0,children:[l.jsxDEV(ne,{type:"button",icon:l.jsxDEV(lf,{},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:c("zoom.out"),tooltipPlacement:e?"right":"bottom","aria-label":c("zoom.out"),"data-track":"toolbar_click_zoom_out",onPointerUp:()=>{fe.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),l.jsxDEV(at,{sideOffset:12,open:we,onOpenChange:Q=>{Fe(Q)},placement:e?"right-start":"bottom",children:[l.jsxDEV(Tt,{content:c("zoom.fit"),showArrow:!1,children:l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{"aria-label":c("zoom.fit"),"data-track":"toolbar_click_zoom_menu",className:Y("zoom-menu-trigger",{active:we}),onPointerUp:()=>{Fe(!we)},children:[Number(((((W=s==null?void 0:s.viewport)==null?void 0:W.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),l.jsxDEV(ct,{container:d,style:{zIndex:en.POPOVER},children:l.jsxDEV(Tn,{onSelect:()=>{Fe(!1)},children:[l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_fit",onSelect:()=>{fe.fitViewport(s)},"aria-label":c("zoom.fit"),shortcut:"Cmd+Shift+=",children:c("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),l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_fit_frame",onSelect:()=>{nc(s)},"aria-label":c("zoom.fitFrame"),children:c("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),l.jsxDEV(qe,{"data-track":"toolbar_click_zoom_100",onSelect:()=>{fe.updateZoom(s,1)},"aria-label":c("zoom.100"),shortcut:"Cmd+0",children:c("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),l.jsxDEV(ne,{type:"button",icon:l.jsxDEV(cf,{},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:c("zoom.in"),tooltipPlacement:e?"right":"bottom","aria-label":c("zoom.in"),"data-track":"toolbar_click_zoom_in",onPointerUp:()=>{fe.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-${D}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:712,columnNumber:9},void 0)},[s,d,e,c,we]),Ce=p.useCallback((D,j)=>{if(D==="zoom")return K(j);const W=be.get(D);return!W||r.isMobile&&W.pointer===vt.hand?null:W.key&&Object.values(_g).includes(W.key)?ae(W,j,W.key):le(W,j)},[be,r.isMobile,ae,le,K]),We=p.useCallback((D,j,W=!0,Q=-1)=>{const C=Ce(D,j);if(!C)return null;const B=g(D,j);return l.jsxDEV(_l,{buttonId:D,isVisible:W,visibleIndex:Q,children:l.jsxDEV("div",{className:Y("toolbar-button-wrapper",{"toolbar-button-wrapper--dragging":B["data-dragging"],"toolbar-button-wrapper--drag-over":B["data-drag-over"],"toolbar-button-wrapper--drag-before":B["data-drag-position"]==="before","toolbar-button-wrapper--drag-after":B["data-drag-position"]==="after"}),"data-button-id":D,...B,children:C},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:873,columnNumber:11},void 0)},`ctx-${D}-${j}`,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:867,columnNumber:9},void 0)},[Ce,g]),it=l.jsxDEV(ft.Row,{gap:1,children:[!f&&m.map((D,j)=>e?We(D.id,j,!0,j):Ce(D.id,j)),l.jsxDEV(p_,{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&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(g_,{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),Ke=v?l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(h_,{isOpen:v,onClose:$,mode:ii.SELECT,onSelect:R,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?l.jsxDEV(l.Fragment,{children:[l.jsxDEV("div",{className:Y("draw-toolbar",{"draw-toolbar--embedded":e,"draw-toolbar--icon-only":t}),children:it},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:928,columnNumber:9},void 0),Ke]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:927,columnNumber:7},void 0):l.jsxDEV(l.Fragment,{children:[l.jsxDEV(Ye,{padding:1,className:Y("draw-toolbar",At,{"draw-toolbar--embedded":e,"draw-toolbar--icon-only":t}),children:it},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:943,columnNumber:7},void 0),Ke]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/creation-toolbar.tsx",lineNumber:942,columnNumber:5},void 0)},Vm="https://tuziai.oss-cn-shenzhen.aliyuncs.com/aitu/AiTu.png",y_="https://tuziai.oss-cn-shenzhen.aliyuncs.com/linkme.png",w_=()=>{const e=xt(),t=F.getBoardContainer(e),[n,i]=p.useState(!1);return p.useEffect(()=>{const o=new Image;o.src=Vm;const s=new Image;s.src=y_},[]),l.jsxDEV(at,{placement:"right-end",sideOffset:12,open:n,onOpenChange:i,children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(dN,{},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),l.jsxDEV(ct,{container:t,style:{zIndex:en.POPOVER_FEEDBACK},children:l.jsxDEV("div",{className:"feedback-qrcode-content",children:l.jsxDEV("div",{className:"feedback-qrcode-grid",children:l.jsxDEV("div",{className:"feedback-qrcode-item",children:[l.jsxDEV("img",{src:Vm,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),l.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)},v_=({projectDrawerOpen:e,onProjectDrawerToggle:t,toolboxDrawerOpen:n=!1,onToolboxDrawerToggle:i,taskPanelExpanded:o,onTaskPanelToggle:s})=>{const{activeTasks:r,completedTasks:a,failedTasks:c}=mN(),d=r.length+a.length+c.length>0?`任务队列 (生成中: ${r.length}, 已完成: ${a.length}, 失败: ${c.length})`:"任务队列 (暂无任务)";return l.jsxDEV("div",{className:"bottom-actions-section",children:[l.jsxDEV(w_,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:50,columnNumber:7},void 0),l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(pN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:55,columnNumber:15},void 0),"aria-label":e?"关闭项目":"打开项目",tooltip:e?"关闭项目":"打开项目",tooltipPlacement:"right",selected:e,visible:!0,"data-track":"toolbar_click_project_drawer","data-testid":"toolbar-project",onPointerDown:m=>{m.event.stopPropagation()},onClick:t},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:53,columnNumber:7},void 0),i&&l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(fN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:73,columnNumber:17},void 0),"aria-label":n?"关闭工具箱":"打开工具箱",tooltip:n?"关闭工具箱":"打开工具箱",tooltipPlacement:"right",selected:n,visible:!0,"data-track":"toolbar_click_toolbox","data-testid":"toolbar-toolbox",onPointerDown:m=>{m.event.stopPropagation()},onClick:i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:71,columnNumber:9},void 0),l.jsxDEV("div",{className:"bottom-actions-section__task-wrapper",children:[l.jsxDEV(hN,{count:r.length>0?r.length:0,showZero:!1,offset:[6,-6],children:l.jsxDEV(ne,{type:"icon",icon:l.jsxDEV(gN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:98,columnNumber:19},void 0),"aria-label":"任务队列",tooltip:d,tooltipPlacement:"right",selected:o,visible:!0,"data-track":"toolbar_click_tasks","data-testid":"toolbar-tasks",onPointerDown:m=>{m.event.stopPropagation()},onClick:s},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:96,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:91,columnNumber:9},void 0),r.length>0&&l.jsxDEV("div",{className:"bottom-actions-section__status bottom-actions-section__status--active"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:115,columnNumber:11},void 0),c.length>0&&r.length===0&&l.jsxDEV("div",{className:"bottom-actions-section__status bottom-actions-section__status--failed"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:118,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:90,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/bottom-actions-section.tsx",lineNumber:48,columnNumber:5},void 0)},E_=p.lazy(()=>Me(()=>import("./TaskQueuePanel-NAYUh8lN.js"),__vite__mapDeps([0,2,3]),import.meta.url).then(e=>({default:e.TaskQueuePanel}))),S_=460,k_=["ai-image","ai-video"],T_=Fn.memo(({className:e,projectDrawerOpen:t=!1,onProjectDrawerToggle:n,toolboxDrawerOpen:i=!1,onToolboxDrawerToggle:o,taskPanelExpanded:s=!1,onTaskPanelToggle:r,onOpenBackupRestore:a,onOpenCloudSync:c,onOpenMediaLibrary:u,deferredFeaturesEnabled:d=!1,minimizedToolsBarEnabled:m=!1,onEnableToolWindows:f})=>{const[h,g]=p.useState(!1),[x,b]=p.useState(!0),y=p.useRef(!1),N=p.useRef(null),w=p.useRef(null),T=p.useRef(!1),{isMobile:S,isTablet:v}=bN(),E=S||v;zr(N,{enablePositionTracking:!0,enableScaleCompensation:!0});const R=p.useCallback(M=>{if(M[0]){const P=M[0].contentRect.height;g(P<S_)}},[]);p.useEffect(()=>{const M=N.current;if(!M)return;const P=new ResizeObserver(R);return P.observe(M),()=>{P.disconnect()}},[R]),p.useEffect(()=>{if(T.current)return;const M=w.current;if(!M)return;const P=()=>{T.current=!0;let pe=null;for(const X of k_){const ae=M.querySelector(`[data-button-id="${X}"]`);if(ae){pe=ae;break}}if(!pe)return;const I=M.getBoundingClientRect(),G=pe.getBoundingClientRect();if(!(G.bottom<=I.bottom&&G.top>=I.top)&&I.height>0){const X=G.top-I.top;M.scrollTop+=X}},Z=setTimeout(()=>{requestAnimationFrame(P)},100);return()=>{clearTimeout(Z)}},[]);const q=p.useCallback(()=>{!s&&!y.current&&(y.current=!0),r==null||r()},[s,r]),$=p.useCallback(()=>{s&&(r==null||r())},[s,r]),V=p.useCallback(()=>{b(M=>!M)},[]),{openDialog:U}=Gt(),A=p.useCallback(()=>{U(ln.aiImageGeneration)},[U]),_=p.useCallback(()=>{U(ln.aiVideoGeneration)},[U]);return l.jsxDEV(l.Fragment,{children:[y.current&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(E_,{expanded:s,onClose:$},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:191,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:190,columnNumber:11},void 0),l.jsxDEV(Ye,{ref:N,className:Y("unified-toolbar",At,{"unified-toolbar--icon-only":h||E,"unified-toolbar--mobile-collapsed":E&&x},e),padding:0,"data-testid":"unified-toolbar",children:[E&&x&&l.jsxDEV("div",{className:"unified-toolbar__collapsed-shortcuts",children:[l.jsxDEV("button",{className:"unified-toolbar__collapsed-btn unified-toolbar__collapsed-btn--toggle",onClick:V,"aria-label":"展开工具栏",children:l.jsxDEV(Vp,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:222,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:217,columnNumber:15},void 0),l.jsxDEV("button",{className:"unified-toolbar__collapsed-btn",onClick:A,"aria-label":"AI 图片生成",children:l.jsxDEV(Br,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:230,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:225,columnNumber:15},void 0),l.jsxDEV("button",{className:"unified-toolbar__collapsed-btn",onClick:_,"aria-label":"AI 视频生成",children:l.jsxDEV(Lr,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:238,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:233,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:215,columnNumber:13},void 0),E&&!x&&l.jsxDEV("button",{className:"unified-toolbar__mobile-toggle unified-toolbar__mobile-toggle--expanded",onClick:V,"aria-label":"收起工具栏",children:l.jsxDEV(zl,{size:18},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:250,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:245,columnNumber:13},void 0),l.jsxDEV("div",{className:"unified-toolbar__section unified-toolbar__section--fixed-top",children:l.jsxDEV(JD,{embedded:!0,iconMode:h||E,onOpenBackupRestore:a,onOpenCloudSync:c},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:256,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:255,columnNumber:11},void 0),l.jsxDEV("div",{ref:w,className:"unified-toolbar__scrollable",children:l.jsxDEV("div",{className:"unified-toolbar__section",children:l.jsxDEV(N_,{embedded:!0,iconMode:h||E,onOpenMediaLibrary:u,deferredFeaturesEnabled:d,minimizedToolsBarEnabled:m,onEnableToolWindows:f},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:268,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:267,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:265,columnNumber:11},void 0),l.jsxDEV("div",{className:"unified-toolbar__section unified-toolbar__section--fixed-bottom",children:l.jsxDEV(v_,{projectDrawerOpen:t,onProjectDrawerToggle:n||(()=>{}),toolboxDrawerOpen:i,onToolboxDrawerToggle:o,taskPanelExpanded:s,onTaskPanelToggle:q},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:281,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:280,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:198,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/unified-toolbar.tsx",lineNumber:187,columnNumber:7},void 0)}),D_=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(tt.isHotkey(["mod+k"])(s)){e({openCommandPalette:!0}),s.preventDefault();return}if(tt.isHotkey(["mod+f"])(s)){e({openCanvasSearch:!0}),s.preventDefault();return}}if(!r&&(F.getMovingPointInBoard(n)||F.isMovingPointInBoard(n))&&!F.hasBeenTextEditing(n)){if(tt.isHotkey(["mod+shift+e"],{byKey:!0})(s)){Gs(n,!0),s.preventDefault();return}if(tt.isHotkey(["mod+s"],{byKey:!0})(s)){Wp(n),s.preventDefault();return}if(tt.isHotkey(["mod+backspace"])(s)||tt.isHotkey(["mod+delete"])(s)){e({openCleanConfirm:!0}),s.preventDefault();return}if(tt.isHotkey(["mod+u"])(s)&&Hr(n),Be(n).length>1){if(tt.isHotkey(["alt+a"])(s)){rn.alignLeft(n),s.preventDefault();return}if(tt.isHotkey(["alt+h"])(s)){rn.alignCenter(n),s.preventDefault();return}if(tt.isHotkey(["alt+d"])(s)){rn.alignRight(n),s.preventDefault();return}if(tt.isHotkey(["alt+w"])(s)){rn.alignTop(n),s.preventDefault();return}if(tt.isHotkey(["alt+v"])(s)){rn.alignMiddle(n),s.preventDefault();return}if(tt.isHotkey(["alt+s"])(s)){rn.alignBottom(n),s.preventDefault();return}if(tt.isHotkey(["shift+h"])(s)){no.distributeHorizontal(n),s.preventDefault();return}if(tt.isHotkey(["shift+v"])(s)){no.distributeVertical(n),s.preventDefault();return}if(tt.isHotkey(["shift+a"])(s)){no.autoArrange(n),s.preventDefault();return}if(tt.isHotkey(["alt+shift+u"])(s)){vn.union(n,"zh"),s.preventDefault();return}if(tt.isHotkey(["alt+shift+s"])(s)){vn.subtract(n,"zh"),s.preventDefault();return}if(tt.isHotkey(["alt+shift+i"])(s)){vn.intersect(n,"zh"),s.preventDefault();return}if(tt.isHotkey(["alt+shift+e"])(s)){vn.exclude(n,"zh"),s.preventDefault();return}if(tt.isHotkey(["alt+shift+f"])(s)){vn.flatten(n,"zh"),s.preventDefault();return}}if(!s.altKey&&!s.metaKey&&!s.ctrlKey&&tt.isHotkey(["shift+p"],{byKey:!0})(s)){mt(n,St.drawing),fe.updatePointerType(n,Bn.pen),e({pointer:Bn.pen}),s.preventDefault();return}if(!s.altKey&&!s.metaKey&&!s.ctrlKey&&!s.shiftKey){if(s.key==="l"){mt(n,St.drawing),fe.updatePointerType(n,rt.laserPointer),e({pointer:rt.laserPointer}),s.preventDefault();return}if(s.key==="Escape"&&F.isPointer(n,rt.laserPointer)){fe.updatePointerType(n,vt.selection),e({pointer:vt.selection}),s.preventDefault();return}if(s.key==="h"&&(fe.updatePointerType(n,vt.hand),e({pointer:vt.hand})),s.key==="v"&&(fe.updatePointerType(n,vt.selection),e({pointer:vt.selection})),s.key==="q"&&(fe.updatePointerType(n,is),e({pointer:is})),s.key==="m"&&(mt(n,St.dnd),fe.updatePointerType(n,ji.mind),e({pointer:ji.mind})),s.key==="e"&&(mt(n,St.drawing),fe.updatePointerType(n,rt.eraser),e({pointer:rt.eraser})),s.key==="p"&&(mt(n,St.drawing),fe.updatePointerType(n,rt.feltTipPen),e({pointer:rt.feltTipPen})),s.key==="a"&&!tt.isHotkey(["mod+a"])(s)&&Be(n).length===0&&(mt(n,St.drawing),fe.updatePointerType(n,kn.straight),e({pointer:kn.straight})),s.key==="f"&&(mt(n,St.drawing),fe.updatePointerType(n,Eu),e({pointer:Eu})),s.key==="r"||s.key==="o"||s.key==="t"){const c={r:De.rectangle,o:De.ellipse,t:De.text};c[s.key]===De.text?mt(n,null):mt(n,St.drawing),fe.updatePointerType(n,c[s.key]),e({pointer:c[s.key]})}s.preventDefault();return}}i(s)},n.keyDown=s=>{if(tt.isHotkey(["mod+z"],{byKey:!0})(s)){n.undo(),s.preventDefault();return}if(tt.isHotkey(["mod+shift+z"],{byKey:!0})(s)){n.redo(),s.preventDefault();return}o(s)},n};function qc(e){return e===Rt.square?"square":"round"}function Bc(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 __(e,t,n,i,o,s){const r=document.createElementNS("http://www.w3.org/2000/svg","g"),a=qc(s);if(e.length<2){if(e.length===1){const f=Bc(t[0]??.5,n);if(s===Rt.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 c=rc(e,1,3);if(o===yn.double){const f=n*.8,h=n*.4,[g,x]=P_(c,t,h,f);if(g){const b=document.createElementNS("http://www.w3.org/2000/svg","path");b.setAttribute("d",g),b.setAttribute("fill",i),b.setAttribute("stroke","none"),r.appendChild(b)}if(x){const b=document.createElementNS("http://www.w3.org/2000/svg","path");b.setAttribute("d",x),b.setAttribute("fill",i),b.setAttribute("stroke","none"),r.appendChild(b)}return r}const u=bf(o,n),d=o!==ei.solid&&u?u.join(" "):"",m=C_(c,t,n);if(m.length>0){const f=document.createElementNS("http://www.w3.org/2000/svg","path");f.setAttribute("d",m),f.setAttribute("fill",i),f.setAttribute("stroke","none"),d&&(f.setAttribute("fill","none"),f.setAttribute("stroke",i),f.setAttribute("stroke-width",String(n)),f.setAttribute("stroke-dasharray",d),f.setAttribute("stroke-linecap",a),f.setAttribute("stroke-linejoin",a==="square"?"miter":"round")),r.appendChild(f)}return r}function j_(e,t,n,i){const o=document.createElementNS("http://www.w3.org/2000/svg","g"),s=qc(i);if(e.length<2){if(e.length===1){const x=t*.8,b=t*.4;if(i===Rt.square){const y=document.createElementNS("http://www.w3.org/2000/svg","rect");y.setAttribute("x",String(e[0][0]-b/2)),y.setAttribute("y",String(e[0][1]-x/2-b/2)),y.setAttribute("width",String(b)),y.setAttribute("height",String(b)),y.setAttribute("fill",n),o.appendChild(y);const N=document.createElementNS("http://www.w3.org/2000/svg","rect");N.setAttribute("x",String(e[0][0]-b/2)),N.setAttribute("y",String(e[0][1]+x/2-b/2)),N.setAttribute("width",String(b)),N.setAttribute("height",String(b)),N.setAttribute("fill",n),o.appendChild(N)}else{const y=document.createElementNS("http://www.w3.org/2000/svg","circle");y.setAttribute("cx",String(e[0][0])),y.setAttribute("cy",String(e[0][1]-x/2)),y.setAttribute("r",String(b/2)),y.setAttribute("fill",n),o.appendChild(y);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]+x/2)),N.setAttribute("r",String(b/2)),N.setAttribute("fill",n),o.appendChild(N)}}return o}const r=rc(e,1,3),a=t*.8,c=t*.4,u=[],d=[];for(let x=0;x<r.length;x++){let b,y;x===0?(b=r[1][0]-r[0][0],y=r[1][1]-r[0][1]):x===r.length-1?(b=r[x][0]-r[x-1][0],y=r[x][1]-r[x-1][1]):(b=r[x+1][0]-r[x-1][0],y=r[x+1][1]-r[x-1][1]);const N=Math.sqrt(b*b+y*y);if(N>0){const w=-y/N,T=b/N,S=a/2;u.push([r[x][0]+w*S,r[x][1]+T*S]),d.push([r[x][0]-w*S,r[x][1]-T*S])}else u.push(r[x]),d.push(r[x])}const m=document.createElementNS("http://www.w3.org/2000/svg","path");let f=`M ${u[0][0]} ${u[0][1]}`;for(let x=1;x<u.length;x++){const b=u[x-1],y=u[x],N=(b[0]+y[0])/2,w=(b[1]+y[1])/2;f+=` Q ${b[0]} ${b[1]} ${N} ${w}`}f+=` L ${u[u.length-1][0]} ${u[u.length-1][1]}`,m.setAttribute("d",f),m.setAttribute("fill","none"),m.setAttribute("stroke",n),m.setAttribute("stroke-width",String(c)),m.setAttribute("stroke-linecap",s),m.setAttribute("stroke-linejoin",s==="square"?"miter":"round"),o.appendChild(m);const h=document.createElementNS("http://www.w3.org/2000/svg","path");let g=`M ${d[0][0]} ${d[0][1]}`;for(let x=1;x<d.length;x++){const b=d[x-1],y=d[x],N=(b[0]+y[0])/2,w=(b[1]+y[1])/2;g+=` Q ${b[0]} ${b[1]} ${N} ${w}`}return g+=` L ${d[d.length-1][0]} ${d[d.length-1][1]}`,h.setAttribute("d",g),h.setAttribute("fill","none"),h.setAttribute("stroke",n),h.setAttribute("stroke-width",String(c)),h.setAttribute("stroke-linecap",s),h.setAttribute("stroke-linejoin",s==="square"?"miter":"round"),o.appendChild(h),o}function P_(e,t,n,i){if(e.length<2)return["",""];const o=[],s=[];for(let c=0;c<e.length;c++){let u,d;c===0?(u=e[1][0]-e[0][0],d=e[1][1]-e[0][1]):c===e.length-1?(u=e[c][0]-e[c-1][0],d=e[c][1]-e[c-1][1]):(u=e[c+1][0]-e[c-1][0],d=e[c+1][1]-e[c-1][1]);const m=Math.sqrt(u*u+d*d);if(m>0){const f=-d/m,h=u/m,g=i/2;o.push([e[c][0]+f*g,e[c][1]+h*g]),s.push([e[c][0]-f*g,e[c][1]-h*g])}else o.push(e[c]),s.push(e[c])}const r=Um(o,t,n),a=Um(s,t,n);return[r,a]}function Um(e,t,n){if(e.length<2)return"";const i=[],o=[];for(let r=0;r<e.length;r++){const a=t[r]??.5,u=Bc(a,n)/2;let d,m;r===0?(d=e[1][0]-e[0][0],m=e[1][1]-e[0][1]):r===e.length-1?(d=e[r][0]-e[r-1][0],m=e[r][1]-e[r-1][1]):(d=e[r+1][0]-e[r-1][0],m=e[r+1][1]-e[r-1][1]);const f=Math.sqrt(d*d+m*m);if(f>0){const h=-m/f,g=d/f;i.push([e[r][0]+h*u,e[r][1]+g*u]),o.push([e[r][0]-h*u,e[r][1]-g*u])}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 a=i[r-1],c=i[r],u=(a[0]+c[0])/2,d=(a[1]+c[1])/2;s+=` Q ${a[0]} ${a[1]} ${u} ${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 a=o[r+1],c=o[r],u=(a[0]+c[0])/2,d=(a[1]+c[1])/2;s+=` Q ${a[0]} ${a[1]} ${u} ${d}`}return s+=` L ${o[0][0]} ${o[0][1]}`,s+=" Z",s}function C_(e,t,n){if(e.length<2)return"";const i=[],o=[];for(let r=0;r<e.length;r++){const a=t[r]??.5,u=Bc(a,n)/2;let d,m;r===0?(d=e[1][0]-e[0][0],m=e[1][1]-e[0][1]):r===e.length-1?(d=e[r][0]-e[r-1][0],m=e[r][1]-e[r-1][1]):(d=e[r+1][0]-e[r-1][0],m=e[r+1][1]-e[r-1][1]);const f=Math.sqrt(d*d+m*m);if(f>0){const h=-m/f,g=d/f;i.push([e[r][0]+h*u,e[r][1]+g*u]),o.push([e[r][0]-h*u,e[r][1]-g*u])}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 a=i[r-1],c=i[r],u=(a[0]+c[0])/2,d=(a[1]+c[1])/2;s+=` Q ${a[0]} ${a[1]} ${u} ${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 a=o[r+1],c=o[r],u=(a[0]+c[0])/2,d=(a[1]+c[1])/2;s+=` Q ${a[0]} ${a[1]} ${u} ${d}`}return s+=` L ${o[0][0]} ${o[0][1]}`,s+=" Z",s}class Lc extends Yp{draw(t){const n=xN(t),i=Gp(this.board,t),o=NN(this.board,t),s=yN(this.board,t),r=bf(s,n),a=t.brushShape,c=qc(a);if(t.pressures&&t.pressures.length>0)return __(t.points,t.pressures,n,i,s,a);if(s===yn.double)return j_(t.points,n,i,a);const u={strokeWidth:n,stroke:i,fill:o,fillStyle:"solid",strokeLineDash:s!==ei.solid?r:void 0},d=F.getRoughSVG(this.board).curve(rc(t.points,1,3),u);return wN(d,c),d}canDraw(t){return!0}}class A_ extends ac{constructor(){super()}initializeGenerator(){this.activeGenerator=xf(this.board,{getRectangle:t=>Gr(t),getStrokeWidth:()=>Nf,getStrokeOpacity:()=>1,hasResizeHandle:()=>yf(this.board,this.element)}),this.generator=new Lc(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,F.getActiveHost(this.board),{selected:this.selected})):i&&t.selected?this.activeGenerator.processDrawing(this.element,F.getActiveHost(this.board),{selected:this.selected}):(t.selected!==n.selected||t.selected)&&this.activeGenerator.processDrawing(this.element,F.getActiveHost(this.board),{selected:this.selected})}destroy(){var t;super.destroy(),(t=this.activeGenerator)==null||t.destroy()}}class jg{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 c={point:t,timestamp:i,...n};return this.points.push(c),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),a=this.smooth(t,r);return this.lastProcessedTime=i,a}reset(){this.points=[],this.lastProcessedTime=0,this.movingAverageVelocity=[]}updatePoints(t){this.points.push(t),this.points.length>this.options.maxPoints&&this.points.shift()}checkDistance(t){if(this.points.length===0)return!0;const n=this.points[this.points.length-1].point,i=this.getDistance(n,t);let 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,a)=>r+a,0);if(o===0)return t;const s=[0,0];for(let r=0;r<this.points.length;r++){const a=i[r]/o;s[0]+=this.points[r].point[0]*a,s[1]+=this.points[r].point[1]*a}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 rr(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),a=this.getDistance(n,o),c=(s+r+a)/2;return 4*Math.sqrt(Math.max(0,c*(c-s)*(c-r)*(c-a)))/(s*r*a+1e-4)}}const M_=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e;let s=!1,r=!1,a=[],c=[],u=null;const d=new Lc(e),m=new jg({smoothing:.7,pressureSensitivity:.6});let f=null,h=null,g=null,x=0;const b=(w=!1)=>{if(!h||w){const T=si(e);h={strokeWidth:T.strokeWidth,strokeColor:T.strokeColor,strokeStyle:T.strokeStyle,pencilShape:T.pencilShape,pressureEnabled:T.pressureEnabled}}return h},y=(w,T)=>{if(!T)return 1;if(w.pointerType==="pen"&&w.pressure>0&&w.pressure!==.5)return w.pressure;const v=[w.x,w.y],E=performance.now();if(g&&x>0){const R=v[0]-g[0],q=v[1]-g[1],$=Math.sqrt(R*R+q*q),V=E-x;if(V>0){const U=$/V,A=.2,_=1,P=Math.min(U/1.5,1),Z=_-P*(_-A);return g=v,x=E,Z}}return g=v,x=E,.6},N=w=>{if(s){const T=F.getPointer(e);r&&(a.push(a[0]),c.length>0&&c.push(c[0]));const S=b();f=Ja(T,a,{strokeWidth:S.strokeWidth,strokeColor:S.strokeColor,strokeStyle:S.strokeStyle,brushShape:S.pencilShape,pressures:S.pressureEnabled?c:void 0})}f&&!w&&ue.insertNode(e,f,[e.children.length]),d==null||d.destroy(),f=null,s=!1,a=[],c=[],g=null,x=0,h=null,m.reset()};return e.pointerDown=w=>{const T=lc();if(F.isInPointer(e,T)&&cc(e)){s=!0;const v=b(!0);u=[w.x,w.y];const E=m.process(u);if(E){const R=Ot(e,Ft(e,E[0],E[1]));a.push(R),c.push(y(w,v.pressureEnabled))}}t(w)},e.pointerMove=w=>{if(s){const T=[w.x,w.y];u&&rr(u[0],u[1],T[0],T[1])<8?r=!0:r=!1;const S=m.process(T);if(S){d==null||d.destroy();const v=Ot(e,Ft(e,S[0],S[1]));a.push(v);const E=b();c.push(y(w,E.pressureEnabled));const R=F.getPointer(e);f=Ja(R,a,{strokeWidth:E.strokeWidth,strokeColor:E.strokeColor,strokeStyle:E.strokeStyle,brushShape:E.pencilShape,pressures:E.pressureEnabled?c:void 0}),d.processDrawing(f,F.getElementTopHost(e))}return}n(w)},e.pointerUp=w=>{N(),i(w)},e.globalPointerUp=w=>{N(!0),o(w)},e},I_=e=>{const t=e,{getDeletedFragment:n,buildFragment:i,insertFragment:o}=t;return t.getDeletedFragment=s=>{const r=Su(t);return r.length&&s.push(...r),n(s)},t.buildFragment=(s,r,a,c)=>{const u=Su(t);if(u.length){const d=wf(t,u,r?[r.x,r.y]:[0,0]);s=vf(s,{text:"",type:Ef.elements,elements:d})}return i(s,r,a,c)},t.insertFragment=(s,r,a)=>{var u;const c=(u=s==null?void 0:s.elements)==null?void 0:u.filter(d=>$e.isFreehand(d));c&&c.length>0&&Sf(t,c,r),o(s,r,a)},t};function V_(e,t,n,i=0){const o=ge.getCenterPoint(t),s=Ii(t,ui);if(i){const r=U_(n,o,-i);let a=s.find(c=>ge.isHit(ge.getRectangleByPoints([r,r]),c.rectangle));return a&&(a.cursorClass=Wr(a.cursorClass,i)),a}else return s.find(r=>ge.isHit(ge.getRectangleByPoints([n,n]),r.rectangle))}function U_(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*o-a*s,t[1]+r*s+a*o]}function Pg(e){const t=Be(e);return t.length===1&&$e.isFreehand(t[0])?t[0]:null}function R_(e){return Pg(e)!==null}function q_(e,t){const n=Pg(e);if(!n)return null;const i=Gr(n),o=n.angle||0,s=V_(e,i,t,o);return s?{element:n,rectangle:i,handle:s.handle,cursorClass:s.cursorClass}:null}function B_(e,t,n){const i=n.width/t.width,o=n.height/t.height;return e.map(s=>{const r=s[0]-t.x,a=s[1]-t.y;return[n.x+r*i,n.y+a*o]})}function L_(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o)return;const c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,gs(),10),m=B_(i.points,o,d),f=e.children.findIndex(h=>h.id===i.id);f>=0&&ue.setNode(e,{points:m},[f])}const O_=e=>Mi(e,{key:"freehand",canResize:()=>R_(e),hitTest:(t=>q_(e,t)),onResize:(t,n)=>L_(e,t,n)});function F_(e){return e.type==="video"}const ps=1e3;async function Oc(){const e=await Me(()=>import("./clipper-BkGBD2Ma.js").then(t=>t.c),__vite__mapDeps([0]),import.meta.url);return e.default||e}function fs(e){return e.map(t=>({X:Math.round(t[0]*ps),Y:Math.round(t[1]*ps)}))}function Cg(e){return e.map(t=>[t.X/ps,t.Y/ps])}async function H_(e,t,n=ku.circle){if(e.length<2)return[];const i=await Oc(),o=fs(e),s=new i.ClipperOffset;n===ku.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*ps),r.length===0?[]:Cg(r[0])}function Fc(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 z_(e,t=20){if(Je.isPenPath(e)){if(!e.closed)return null;const n=Zp(e);return vN(n,!0,t)}if($e.isFreehand(e)){const n=e.points;return!n||n.length<3||!Fc(e)?null:n}return H.isDrawElement(e)&&H.isShapeElement(e)?H.isImage(e)||H.isText(e)?null:G_(e,t):null}function G_(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]),a=Math.abs(o[0]-i[0]),c=Math.abs(o[1]-i[1]),u=e.shape;if(u==="ellipse"||u==="circle"){const d=s+a/2,m=r+c/2,f=a/2,h=c/2,g=[],x=Math.PI*(3*(f+h)-Math.sqrt((3*f+h)*(f+3*h))),b=Math.max(180,Math.ceil(x/2));for(let y=0;y<b;y++){const N=2*Math.PI*y/b;g.push([d+f*Math.cos(N),m+h*Math.sin(N)])}return g}return[[s,r],[s+a,r],[s+a,r+c],[s,r+c]]}function W_(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,a=-1/0;for(const m of e)o=Math.min(o,m[0]),s=Math.min(s,m[1]),r=Math.max(r,m[0]),a=Math.max(a,m[1]);const c=[o,s],u=e.map(m=>({point:[m[0]-c[0],m[1]-c[1]],type:"corner"}));return{id:EN(),type:kf,shape:Bn.pen,points:[c,[r,a]],anchors:u,closed:!0,strokeColor:t,fill:n,strokeWidth:i}}function $_(e){let t="#333333",n="#FFFFFF",i=2;return Je.isPenPath(e)?(t=e.strokeColor||t,n=e.fill||n,i=e.strokeWidth||i):$e.isFreehand(e)?(t=e.strokeColor||t,i=e.strokeWidth||i):H.isDrawElement(e)&&(t=e.strokeColor||t,n=e.fill||n,i=e.strokeWidth||i),{strokeColor:t,fill:n,strokeWidth:i}}async function X_(e,t){const n=await Oc(),i=new n.Clipper,o=[];return i.AddPath(fs(e),n.PolyType.ptSubject,!0),i.AddPath(fs(t),n.PolyType.ptClip,!0),i.Execute(n.ClipType.ctIntersection,o,n.PolyFillType.pftNonZero,n.PolyFillType.pftNonZero),o.length>0}async function K_(e,t,n){const i=z_(t);if(!i||i.length<3||!await X_(i,n))return null;const s=await Oc(),r=new s.Clipper,a=[];if(r.AddPath(fs(i),s.PolyType.ptSubject,!0),r.AddPath(fs(n),s.PolyType.ptClip,!0),!r.Execute(s.ClipType.ctDifference,a,s.PolyFillType.pftNonZero,s.PolyFillType.pftNonZero))return null;const{strokeColor:u,fill:d,strokeWidth:m}=$_(t),f=[];for(const N of a)if(N.length>=3){let w=0;for(let T=0;T<N.length;T++){const S=(T+1)%N.length;w+=N[T].X*N[S].Y,w-=N[S].X*N[T].Y}w=w/2,f.push({path:N,signedArea:w,absArea:Math.abs(w)})}if(f.length===0)return[];const h=[...f].sort((N,w)=>w.absArea-N.absArea),g=h[0],x=h.slice(1);let b;x.length>0?b=Y_(g.path,x.map(N=>N.path)):b=g.path;const y=Cg(b);try{return[W_(y,u,d,m)]}catch{return[]}}function Y_(e,t){let n=[...e];for(const i of t){let o=1/0,s=0,r=0;for(let c=0;c<n.length;c++)for(let u=0;u<i.length;u++){const d=n[c].X-i[u].X,m=n[c].Y-i[u].Y,f=d*d+m*m;f<o&&(o=f,s=c,r=u)}const a=[];for(let c=0;c<=s;c++)a.push(n[c]);for(let c=0;c<i.length;c++){const u=(r+c)%i.length;a.push(i[u])}a.push(i[r]);for(let c=s;c<n.length;c++)a.push(n[c]);n=a}return n}function Ag(e){if($e.isFreehand(e)){const o=e.points;if(!o||o.length<2)return null;const s=ge.getRectangleByPoints(o),r=e.strokeWidth??2,a=r/2;return{x:s.x-a,y:s.y-a,width:s.width+r,height:s.height+r}}if(Je.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 Z_(e,t,n){if(t.length<2)return[];let i=1/0,o=1/0,s=-1/0,r=-1/0;for(const c of t)i=Math.min(i,c[0]-n),o=Math.min(o,c[1]-n),s=Math.max(s,c[0]+n),r=Math.max(r,c[1]+n);const a=[];for(const c of e.children){if(!Q_(c))continue;const u=Ag(c);if(!u)continue;const{x:d,y:m,width:f,height:h}=u;d+f>=i&&d<=s&&m+h>=o&&m<=r&&a.push(c)}return a}function Q_(e){return Je.isPenPath(e)?e.closed:$e.isFreehand(e)?Fc(e):H.isDrawElement(e)?H.isImage(e)||H.isText(e)||H.isArrowLine(e)||H.isVectorLine(e)?!1:H.isShapeElement(e):!1}function J_(e){if(Je.isPenPath(e))return e.closed?null:"openPath";if($e.isFreehand(e))return Fc(e)?null:"openPath";if(H.isDrawElement(e)){if(H.isImage(e))return"image";if(H.isText(e))return"text";if(H.isArrowLine(e))return"arrowLine";if(H.isVectorLine(e))return"vectorLine";if(H.isShapeElement(e))return null}return"unsupported"}function ej(e,t,n){if(t.length<2)return[];let i=1/0,o=1/0,s=-1/0,r=-1/0;for(const c of t)i=Math.min(i,c[0]-n),o=Math.min(o,c[1]-n),s=Math.max(s,c[0]+n),r=Math.max(r,c[1]+n);const a=[];for(const c of e.children){const u=Ag(c);if(!u)continue;const{x:d,y:m,width:f,height:h}=u;d+f>=i&&d<=s&&m+h>=o&&m<=r&&J_(c)&&a.push(c)}return a}async function tj(e,t,n,i,o){if(o.length===0)return;const s=await H_(t,n,i);if(s.length<3)return;const r=[],a=[];for(const c of o){const u=await K_(e,c,s);u!==null&&(r.push(c),a.push(...u))}r.length>0&&el.removeElements(e,r);for(const c of a)ue.insertNode(e,c,[e.children.length])}const nj=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e;let s=!1;const r=new Set;let a=[];const c=m=>{const f=Ot(e,Ft(e,m[0],m[1])),g=si(e).eraserWidth/2;e.children.filter(b=>$e.isFreehand(b)).forEach(b=>{!r.has(b.id)&&SN(e,b,f,g)&&(Ji.getElementG(b).style.opacity="0.2",r.add(b.id))})},u=()=>{if(r.size>0){const m=e.children.filter(f=>r.has(f.id));m.length>0&&el.removeElements(e,m)}},d=async()=>{if(s){if(u(),a.length>=2){const m=si(e),f=Z_(e,a,m.eraserWidth).filter(g=>!$e.isFreehand(g));if(f.length>0)try{await tj(e,a,m.eraserWidth,m.eraserShape,f)}catch(g){console.error("Precise erase error:",g)}const h=ej(e,a,m.eraserWidth).filter(g=>!$e.isFreehand(g)&&!vi(g)&&!F_(g)&&!(H.isDrawElement(g)&&H.isImage(g)));h.length>0&&el.removeElements(e,h)}s=!1,r.clear(),a=[]}};return e.pointerDown=m=>{if(F.isInPointer(e,[rt.eraser])&&cc(e)){s=!0,r.clear(),a=[];const h=[m.x,m.y],g=Ot(e,Ft(e,h[0],h[1]));a.push(g),c(h);return}t(m)},e.pointerMove=m=>{if(s){Jl(e,"with-freehand-erase",()=>{const f=[m.x,m.y],h=Ot(e,Ft(e,f[0],f[1]));a.push(h),c(f)});return}n(m)},e.pointerUp=m=>{if(s){d();return}i(m)},e.globalPointerUp=m=>{if(s){d();return}o(m)},e},ij="#e91e63",oj=3,Rm=2e3,sj=e=>{const{pointerDown:t,pointerMove:n,pointerUp:i,globalPointerUp:o}=e;let s=!1,r=[];const a=new Lc(e),c=new jg({smoothing:.7,pressureSensitivity:0});let u=null;const d=[],m=()=>F.isPointer(e,rt.laserPointer),f=()=>{if(!s)return;s=!1;const g=a.g;g?(a.g=void 0,h(g)):a.destroy(),u=null,r=[],c.reset()},h=g=>{g.style.transition=`opacity ${Rm}ms ease-out`,g.style.opacity="1",g.getBoundingClientRect(),g.style.opacity="0";const x=window.setTimeout(()=>{g.remove();const b=d.findIndex(y=>y.g===g);b>=0&&d.splice(b,1)},Rm);d.push({g,timer:x})};return e.pointerDown=g=>{if(m()&&cc(e)){s=!0;const x=[g.x,g.y],b=c.process(x);if(b){const y=Ot(e,Ft(e,b[0],b[1]));r.push(y)}return}t(g)},e.pointerMove=g=>{if(s){const x=[g.x,g.y],b=c.process(x);if(b){a.destroy();const y=Ot(e,Ft(e,b[0],b[1]));r.push(y),u=Ja(rt.laserPointer,r,{strokeWidth:oj,strokeColor:ij}),a.processDrawing(u,F.getElementTopHost(e))}return}n(g)},e.pointerUp=g=>{s&&f(),i(g)},e.globalPointerUp=g=>{s&&f(),o(g)},e},rj=e=>{const{getRectangle:t,drawElement:n,isHit:i,isRectangleHit:o,getOneHitElement:s,isMovable:r,isAlign:a}=e;return e.drawElement=c=>$e.isFreehand(c.element)?A_:n(c),e.getRectangle=c=>$e.isFreehand(c)?Gr(c):t(c),e.isRectangleHit=(c,u)=>$e.isFreehand(c)?kN(e,c,u):o(c,u),e.isHit=(c,u,d)=>$e.isFreehand(c)?TN(e,c,u):i(c,u,d),e.getOneHitElement=c=>c.every(d=>$e.isFreehand(d))?Tf(e,c):s(c),e.isMovable=c=>$e.isFreehand(c)?!0:r(c),e.isAlign=c=>$e.isFreehand(c)?!0:a(c),e.setPluginOptions(Df,{customGeometryTypes:[DN]}),sj(O_(nj(I_(M_(e)))))};class aj extends ac{constructor(){super()}initializeGenerator(){this.activeGenerator=xf(this.board,{getRectangle:t=>$r(t),getStrokeWidth:()=>Nf,getStrokeOpacity:()=>1,hasResizeHandle:()=>yf(this.board,this.element)}),this.generator=new t_(this.board)}initialize(){super.initialize(),this.initializeGenerator(),this.generator.processDrawing(this.element,this.getElementG()),this.selected&&this.activeGenerator.processDrawing(this.element,F.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,F.getActiveHost(this.board),{selected:this.selected})):i&&t.selected?this.activeGenerator.processDrawing(this.element,F.getActiveHost(this.board),{selected:this.selected}):(t.selected!==n.selected||t.selected)&&this.activeGenerator.processDrawing(this.element,F.getActiveHost(this.board),{selected:this.selected})}destroy(){var t;super.destroy(),(t=this.activeGenerator)==null||t.destroy()}}const lj=e=>e,cj=e=>{const t=e,{getDeletedFragment:n,buildFragment:i,insertFragment:o}=t;return t.getDeletedFragment=s=>{const r=Tu(t);return r.length&&s.push(...r),n(s)},t.buildFragment=(s,r,a,c)=>{const u=Tu(t);if(u.length){const d=wf(t,u,r?[r.x,r.y]:[0,0]);s=vf(s,{text:"",type:Ef.elements,elements:d})}return i(s,r,a,c)},t.insertFragment=(s,r,a)=>{var u;const c=(u=s==null?void 0:s.elements)==null?void 0:u.filter(d=>Je.isPenPath(d));c&&c.length>0&&Sf(t,c,r),o(s,r,a)},t};function uj(e,t,n,i=0){const o=ge.getCenterPoint(t),s=Ii(t,ui);if(i){const r=dj(n,o,-i);let a=s.find(c=>ge.isHit(ge.getRectangleByPoints([r,r]),c.rectangle));return a&&(a.cursorClass=Wr(a.cursorClass,i)),a}else return s.find(r=>ge.isHit(ge.getRectangleByPoints([n,n]),r.rectangle))}function dj(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*o-a*s,t[1]+r*s+a*o]}function Mg(e){const t=Be(e);return t.length===1&&Je.isPenPath(t[0])?t[0]:null}function mj(e){return Mg(e)!==null}function pj(e,t){const n=Mg(e);if(!n)return null;const i=$r(n),o=n.angle||0,s=uj(e,i,t,o);return s?{element:n,rectangle:i,handle:s.handle,cursorClass:s.cursorClass}:null}function fj(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 hj(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o)return;const c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,gs(),10),m=d.width/o.width,f=d.height/o.height,h=fj(i.anchors,m,f),x=[[d.x,d.y],[d.x+d.width,d.y+d.height]],b=e.children.findIndex(y=>y.id===i.id);b>=0&&ue.setNode(e,{points:x,anchors:h},[b])}const gj=e=>Mi(e,{key:"pen-path",canResize:()=>mj(e),hitTest:(t=>pj(e,t)),onResize:(t,n)=>hj(e,t,n)}),bj=e=>{const{getRectangle:t,drawElement:n,isHit:i,isRectangleHit:o,getOneHitElement:s,isMovable:r,isAlign:a}=e;return e.drawElement=c=>Je.isPenPath(c.element)?aj:n(c),e.getRectangle=c=>Je.isPenPath(c)?$r(c):t(c),e.isRectangleHit=(c,u)=>Je.isPenPath(c)?_N(e,c,u):o(c,u),e.isHit=(c,u,d)=>Je.isPenPath(c)?jN(e,c,u):i(c,u,d),e.getOneHitElement=c=>c.every(d=>Je.isPenPath(d))?Tf(e,c):s(c),e.isMovable=c=>Je.isPenPath(c)?!0:r(c),e.isAlign=c=>Je.isPenPath(c)?!0:a(c),e.setPluginOptions(Df,{customGeometryTypes:[kf]}),gj(cj(lj(l_(e))))},Ig=new WeakMap,qm=e=>!!Ig.get(e),Vg=(e,t)=>{Ig.set(e,t)},xj=e=>n=>{const{pointerDown:i}=n;return n.pointerDown=o=>{Du(o)&&!qm(n)&&(Vg(n,!0),e({isPencilMode:!0})),!(qm(n)&&!Du(o))&&i(o)},n},Nj=()=>{const e=xt(),{appState:t,setAppState:n}=Gt();return l.jsxDEV(l.Fragment,{children:t.isPencilMode&&l.jsxDEV("div",{className:"pencil-mode-toolbar",children:l.jsxDEV(ne,{type:"button",visible:!0,tooltip:"X Pencil","aria-label":"Arrow",label:"Pencil X",onPointerDown:()=>{n({...t,isPencilMode:!1}),Vg(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)},yj="#f5f5f5";function wj(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">
|
|
61
61
|
<circle cx="${o}" cy="${o}" r="${s}" fill="${e}" stroke="#fff" stroke-width="1"/>
|
|
62
62
|
<circle cx="${o}" cy="${o}" r="${s}" fill="none" stroke="#333" stroke-width="0.5" stroke-opacity="0.5"/>
|
|
63
63
|
</svg>`;return`url('data:image/svg+xml;base64,${btoa(r)}') ${o} ${o}, crosshair`}function vj(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">
|
|
64
64
|
<rect x="${o-s}" y="${o-s}" width="${n}" height="${n}" fill="${e}" stroke="#fff" stroke-width="1"/>
|
|
65
65
|
<rect x="${o-s}" y="${o-s}" width="${n}" height="${n}" fill="none" stroke="#333" stroke-width="0.5" stroke-opacity="0.5"/>
|
|
66
|
-
</svg>`;return`url('data:image/svg+xml;base64,${btoa(r)}') ${o} ${o}, crosshair`}function Bm(e,t,n=Rt.circle){return n===Rt.square?vj(e,t):wj(e,t)}function Ug(e){return lc().includes(e)&&e!==rt.eraser}function Rg(e){return e===rt.eraser}function Xo(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=si(e),s=((r=e.viewport)==null?void 0:r.zoom)||1;if(Ug(t)){const a=o.strokeWidth*s,c=Bm(o.strokeColor,a,o.pencilShape);i.style.cursor=c}else if(Rg(t)){const a=o.eraserWidth*s,c=Bm(yj,a,o.eraserShape);i.style.cursor=c}else t===De.text?i.style.cursor="crosshair":i.style.cursor=""}function Ej({board:e,pointer:t}){const n=p.useRef(1),i=p.useRef(null);return p.useEffect(()=>{var r;if(!e)return;Xo(e,t),n.current=((r=e.viewport)==null?void 0:r.zoom)||1;let s=null;return(Ug(t)||Rg(t))&&(s=setInterval(()=>{var c;const a=((c=e.viewport)==null?void 0:c.zoom)||1;Math.abs(a-n.current)>.01&&(n.current=a,Xo(e,t))},100)),()=>{s&&clearInterval(s),i.current&&cancelAnimationFrame(i.current);const a=document.querySelector(".plait-board-container"),c=a==null?void 0:a.querySelector(".board-host-svg");c&&(c.style.cursor="")}},[e,t]),{updateCursor:p.useCallback(()=>{e&&Xo(e,t)},[e,t])}}function Bs(e,t){Xo(e,t)}function Lm(e){Xo(e,rt.eraser)}const Sj=({color:e,size:t,zoom:n,shape:i=Rt.circle})=>{const o=t*n,s=Math.max(4,Math.min(256,o)),r=i===Rt.circle?"50%":"0";return l.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:55,columnNumber:5},void 0)},kj=()=>{var pe;const e=xt(),{appState:t}=Gt(),{t:n}=Se(),i=p.useRef(null);zr(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const o=si(e),[s,r]=p.useState(o.strokeWidth),[a,c]=p.useState(o.strokeColor),[u,d]=p.useState(o.strokeStyle),[m,f]=p.useState(o.pencilShape),[h,g]=p.useState(o.pressureEnabled),[x,b]=p.useState(!1),[y,N]=p.useState(!1),[w,T]=p.useState(String(o.strokeWidth)),[S,v]=p.useState(!1),R=lc().includes(t.pointer)&&t.pointer!==rt.eraser;p.useEffect(()=>{const I=si(e);r(I.strokeWidth),c(I.strokeColor),d(I.strokeStyle),f(I.pencilShape),g(I.pressureEnabled),T(String(I.strokeWidth))},[e,t.pointer]);const q=p.useCallback(I=>{T(I.target.value)},[]),$=p.useCallback(()=>{const I=parseInt(w,10);!isNaN(I)&&I>=1&&I<=100?(r(I),_u(e,I),Bs(e,t.pointer)):T(String(s))},[e,w,s,t.pointer]),V=p.useCallback(I=>{I.key==="Enter"?($(),I.target.blur()):I.key==="Escape"&&(T(String(s)),I.target.blur())},[$,s]),U=p.useCallback(I=>{c(I),PN(e,I),Bs(e,t.pointer)},[e,t.pointer]),A=p.useCallback(I=>{d(I),CN(e,I)},[e]),_=p.useCallback(I=>{f(I),AN(e,I),Bs(e,t.pointer)},[e,t.pointer]),M=p.useCallback(I=>{g(I),MN(e,I)},[e]);if(!R)return null;const P=F.getBoardContainer(e),Z=((pe=e.viewport)==null?void 0:pe.zoom)??1;return l.jsxDEV("div",{className:"pencil-settings-toolbar",onMouseEnter:()=>v(!0),onMouseLeave:()=>v(!1),children:[S&&l.jsxDEV(Sj,{color:a||ju,size:s,zoom:Z,shape:m},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:207,columnNumber:9},void 0),l.jsxDEV(Ye,{ref:i,padding:1,children:l.jsxDEV(ft.Row,{gap:0,align:"center",children:[l.jsxDEV(at,{sideOffset:12,open:x,onOpenChange:b,placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:"pencil-color-button",type:"button",visible:!0,tooltip:n("toolbar.strokeColor"),"aria-label":n("toolbar.strokeColor"),onPointerUp:()=>b(!x),children:l.jsxDEV("div",{className:"pencil-color-preview",style:{backgroundColor:a||ju}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:232,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:224,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:223,columnNumber:13},void 0),l.jsxDEV(ct,{container:P,children:l.jsxDEV(Ye,{padding:4,className:Y("stroke-setting"),children:l.jsxDEV(Di,{value:a,onChange:U},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:240,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:239,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:238,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:217,columnNumber:11},void 0),l.jsxDEV("div",{className:"pencil-stroke-style-picker",children:[l.jsxDEV(ne,{className:Y("pencil-stroke-style-button",{active:u===yn.solid}),type:"button",visible:!0,icon:l.jsxDEV(jp,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:256,columnNumber:21},void 0),tooltip:"实线","aria-label":"实线",onPointerUp:()=>A(yn.solid)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:250,columnNumber:13},void 0),l.jsxDEV(ne,{className:Y("pencil-stroke-style-button",{active:u===yn.dashed}),type:"button",visible:!0,icon:l.jsxDEV(Pp,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:269,columnNumber:21},void 0),tooltip:"虚线","aria-label":"虚线",onPointerUp:()=>A(yn.dashed)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:263,columnNumber:13},void 0),l.jsxDEV(ne,{className:Y("pencil-stroke-style-button",{active:u===yn.dotted}),type:"button",visible:!0,icon:l.jsxDEV(Cp,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:282,columnNumber:21},void 0),tooltip:"点线","aria-label":"点线",onPointerUp:()=>A(yn.dotted)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:276,columnNumber:13},void 0),l.jsxDEV(ne,{className:Y("pencil-stroke-style-button",{active:u===yn.double}),type:"button",visible:!0,icon:l.jsxDEV(IN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:295,columnNumber:21},void 0),tooltip:"双层线","aria-label":"双层线",onPointerUp:()=>A(yn.double)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:289,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:249,columnNumber:11},void 0),l.jsxDEV("div",{className:"pencil-shape-picker",children:[l.jsxDEV(Tt,{content:n("toolbar.pencilShape.circle"),children:l.jsxDEV(cr,{variant:"text",size:"small",className:`pencil-shape-button ${m===Rt.circle?"active":""}`,onClick:()=>_(Rt.circle),children:l.jsxDEV(_f,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:315,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:307,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:306,columnNumber:13},void 0),l.jsxDEV(Tt,{content:n("toolbar.pencilShape.square"),children:l.jsxDEV(cr,{variant:"text",size:"small",className:`pencil-shape-button ${m===Rt.square?"active":""}`,onClick:()=>_(Rt.square),children:l.jsxDEV(jf,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:327,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:319,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:318,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:305,columnNumber:11},void 0),l.jsxDEV(at,{sideOffset:12,open:y,onOpenChange:N,placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:"pencil-width-button",type:"button",visible:!0,tooltip:n("toolbar.strokeWidth"),"aria-label":n("toolbar.strokeWidth"),onPointerUp:()=>N(!y),children:l.jsxDEV("svg",{className:"pencil-width-icon",viewBox:"0 0 24 24",children:[l.jsxDEV("line",{x1:"4",y1:"8",x2:"20",y2:"8",strokeWidth:"1",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:349,columnNumber:19},void 0),l.jsxDEV("line",{x1:"4",y1:"12",x2:"20",y2:"12",strokeWidth:"2",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:357,columnNumber:19},void 0),l.jsxDEV("line",{x1:"4",y1:"16",x2:"20",y2:"16",strokeWidth:"3",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:365,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:348,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:340,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:339,columnNumber:13},void 0),l.jsxDEV(ct,{container:P,children:l.jsxDEV(Ye,{padding:4,className:Y("stroke-width-picker"),children:l.jsxDEV(ft.Row,{gap:3,align:"center",style:{padding:"4px 8px"},children:[l.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:383,columnNumber:19},void 0),l.jsxDEV("div",{className:"stroke-width-slider-wrapper",style:{flex:1,minWidth:"160px"},children:l.jsxDEV(Mr,{value:s,min:1,max:100,step:1,onChange:I=>{const G=I;r(G),T(String(G)),_u(e,G),Bs(e,t.pointer)},label:!1},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:398,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:394,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:378,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:377,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:376,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:333,columnNumber:11},void 0),l.jsxDEV("div",{className:"pencil-width-input-wrapper",children:[l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:w,onChange:q,onBlur:$,onKeyDown:V,className:"pencil-width-input"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:420,columnNumber:13},void 0),l.jsxDEV("span",{className:"pencil-width-input-unit",children:"px"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:430,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:419,columnNumber:11},void 0),l.jsxDEV(Tt,{content:"压力感应:支持压感笔;鼠标/触控板使用速度模拟(慢=粗,快=细)",children:l.jsxDEV("div",{className:"pencil-pressure-switch",children:l.jsxDEV(VN,{size:"small",value:h,onChange:M},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:436,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:435,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:434,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:215,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:214,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:200,columnNumber:5},void 0)},Tj=({color:e,size:t,zoom:n,shape:i=Rt.circle})=>{const o=t*n,s=Math.max(4,Math.min(256,o)),r=i===Rt.circle?"50%":"0";return l.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)},Dj=()=>l.jsxDEV("svg",{className:"size-picker-icon",viewBox:"0 0 24 24",children:[l.jsxDEV("line",{x1:"4",y1:"8",x2:"20",y2:"8",strokeWidth:"1",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:36,columnNumber:5},void 0),l.jsxDEV("line",{x1:"4",y1:"12",x2:"20",y2:"12",strokeWidth:"2",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:37,columnNumber:5},void 0),l.jsxDEV("line",{x1:"4",y1:"16",x2:"20",y2:"16",strokeWidth:"3",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:38,columnNumber:5},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:35,columnNumber:3},void 0),_j=({size:e,onSizeChange:t,presets:n,previewColor:i,title:o,container:s,icon:r})=>{const{t:a}=Se(),[c,u]=p.useState(!1),[d,m]=p.useState(String(e));Fn.useEffect(()=>{m(String(e))},[e]);const f=p.useCallback(x=>{m(x.target.value)},[]),h=p.useCallback(()=>{const x=parseInt(d,10);!isNaN(x)&&x>=1?t(x):m(String(e))},[d,e,t]),g=p.useCallback(x=>{x.key==="Enter"?(h(),x.target.blur()):x.key==="Escape"&&(m(String(e)),x.target.blur())},[h,e]);return l.jsxDEV(l.Fragment,{children:[l.jsxDEV(at,{sideOffset:12,open:c,onOpenChange:u,placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:"size-picker-button",type:"button",visible:!0,tooltip:o,"aria-label":o,onPointerUp:()=>u(!c),children:r||l.jsxDEV(Dj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:104,columnNumber:22},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:96,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:95,columnNumber:9},void 0),l.jsxDEV(ct,{container:s,children:l.jsxDEV(Ye,{padding:4,className:Y("size-picker-popover"),children:l.jsxDEV(ft.Row,{gap:3,align:"center",style:{padding:"4px 8px"},children:[l.jsxDEV("div",{className:"size-picker-value",style:{minWidth:"40px",fontSize:"13px",fontWeight:500,color:"var(--color-on-surface)"},children:[e,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:113,columnNumber:15},void 0),l.jsxDEV("div",{className:"size-picker-slider-wrapper",style:{flex:1,minWidth:"160px"},children:l.jsxDEV(Mr,{value:e,min:1,max:Math.max(256,...n),step:1,onChange:x=>{const b=x;m(String(b)),t(b)},label:!1},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:117,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:116,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:112,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:108,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:107,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:89,columnNumber:7},void 0),l.jsxDEV("div",{className:"size-picker-input-wrapper",children:[l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:d,onChange:f,onBlur:h,onKeyDown:g,className:"size-picker-input"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:137,columnNumber:9},void 0),l.jsxDEV("span",{className:"size-picker-input-unit",children:"px"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:147,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:136,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:87,columnNumber:5},void 0)},jj=[16,32,48,64,96,128,192,256],Pj="#f5f5f5",Cj=()=>{var b;const e=xt(),{appState:t}=Gt(),{t:n}=Se(),i=p.useRef(null);zr(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const o=si(e),[s,r]=p.useState(o.eraserWidth),[a,c]=p.useState(o.eraserShape),[u,d]=p.useState(!1),m=t.pointer===rt.eraser;p.useEffect(()=>{const y=si(e);r(y.eraserWidth),c(y.eraserShape)},[e,t.pointer]);const f=p.useCallback(y=>{r(y),UN(e,y),Lm(e)},[e]),h=p.useCallback(y=>{c(y),RN(e,y),Lm(e)},[e]);if(!m)return null;const g=F.getBoardContainer(e),x=((b=e.viewport)==null?void 0:b.zoom)??1;return l.jsxDEV("div",{className:"pencil-settings-toolbar eraser-settings-toolbar",onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),children:[u&&l.jsxDEV(Tj,{color:Pj,size:s,zoom:x,shape:a},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:106,columnNumber:9},void 0),l.jsxDEV(Ye,{ref:i,padding:1,children:l.jsxDEV(ft.Row,{gap:1,align:"center",children:[l.jsxDEV(_j,{size:s,onSizeChange:f,presets:jj,previewColor:"#999",title:n("toolbar.eraserSize"),container:g},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:115,columnNumber:11},void 0),l.jsxDEV("div",{className:"toolbar-divider"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:124,columnNumber:11},void 0),l.jsxDEV("div",{className:"eraser-shape-picker",children:[l.jsxDEV(Tt,{content:n("toolbar.eraserShape.circle"),children:l.jsxDEV(cr,{variant:"text",size:"small",className:`eraser-shape-button ${a===Rt.circle?"active":""}`,onClick:()=>h(Rt.circle),children:l.jsxDEV(_f,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:136,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:128,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:127,columnNumber:13},void 0),l.jsxDEV(Tt,{content:n("toolbar.eraserShape.square"),children:l.jsxDEV(cr,{variant:"text",size:"small",className:`eraser-shape-button ${a===Rt.square?"active":""}`,onClick:()=>h(Rt.square),children:l.jsxDEV(jf,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:148,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:140,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:139,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:126,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:114,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:113,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:99,columnNumber:5},void 0)},Aj=[{icon:l.jsxDEV(BN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:37,columnNumber:11},void 0),type:"corner",titleKey:"toolbar.anchorCorner"},{icon:l.jsxDEV(LN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:42,columnNumber:11},void 0),type:"smooth",titleKey:"toolbar.anchorSmooth"},{icon:l.jsxDEV(ON,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:47,columnNumber:11},void 0),type:"symmetric",titleKey:"toolbar.anchorSymmetric"}],Mj=()=>{const e=xt(),{appState:t}=Gt(),{t:n}=Se(),i=p.useRef(null);zr(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const o=Qa(e),[s,r]=p.useState(o.defaultAnchorType),a=t.pointer===Bn.pen&&e.pointer===Bn.pen;p.useEffect(()=>{const u=Qa(e);r(u.defaultAnchorType)},[e,t.pointer,e.pointer]);const c=p.useCallback(u=>{r(u),qN(e,u)},[e]);return a?l.jsxDEV("div",{className:"pen-settings-toolbar",children:l.jsxDEV(Ye,{ref:i,padding:1,children:l.jsxDEV(ft.Row,{gap:0,align:"center",children:l.jsxDEV("div",{className:"pen-anchor-type-picker",children:Aj.map(u=>l.jsxDEV(ne,{className:Y("pen-anchor-type-button",{active:s===u.type}),type:"button",visible:!0,icon:u.icon,tooltip:n(u.titleKey),"aria-label":n(u.titleKey),onPointerUp:()=>c(u.type)},u.type,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:101,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:99,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:97,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:93,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:92,columnNumber:5},void 0):null},Ij=({container:e})=>{const{appState:t,setAppState:n}=Gt(),{t:i}=Se(),o=xt();return l.jsxDEV(FN,{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)},Om=e=>{const{appState:t}=e;return t&&t.linkState&&t.linkState.isHovering},Fm=e=>{const{appState:t}=e;return t&&t.linkState&&t.linkState.isEditing},Vj=e=>n=>{const{pointerMove:i}=n;let o=null,s=null;return n.pointerMove=r=>{(F.isPointer(n,vt.selection)||F.isPointer(n,vt.hand))&&!ns(n)&&!kp(n)&&!Om(n)&&!Fm(n)&&Jl(n,"with-text-link",()=>{const a=r.target.closest(".plait-board-link");if(a&&a!==o){const c=a.closest(".plait-text-container"),u=En.toSlateNode(void 0,c),d=En.toSlateNode(void 0,a);o=a,e({linkState:{targetDom:a,targetElement:d,editor:u,isEditing:!1,isHovering:!1,isHoveringOrigin:!0}}),clearTimeout(s)}else!a&&o&&(s=setTimeout(()=>{!Om(n)&&!Fm(n)&&e({linkState:null})},300),o=null)}),i(r)},n},Uj=()=>{var b,y,N,w;const[e,t]=p.useState(""),{appState:n,setAppState:i}=Gt(),o=xt(),{refs:s,floatingStyles:r}=Wl({placement:"top",middleware:[$l(20),Xl()]}),a=n.linkState,c=((b=n.linkState)==null?void 0:b.targetDom)||null,u=((y=n.linkState)==null?void 0:y.isEditing)||!1,d=((N=n.linkState)==null?void 0:N.isHoveringOrigin)||!1,m=((w=n.linkState)==null?void 0:w.isHovering)||!1,f=u||d||m,h=p.useRef(n.linkState);p.useEffect(()=>{h.current=n.linkState,n.linkState?t(n.linkState.targetElement.url):t("")},[n.linkState]),p.useEffect(()=>{if(c){const T=c.getBoundingClientRect();s.setPositionReference({getBoundingClientRect(){return{x:T.x,y:T.y,width:T.width,height:T.height,top:T.y,left:T.x,right:T.x+T.width,bottom:T.y+T.height}}})}},[o.viewport,c,s]);const g=p.useRef();g.current=T=>{if(s.floating.current&&!s.floating.current.contains(T.target)){if(h.current){const S=to.getLinkElement(h.current.editor);S&&!S[0].url.trim()&&to.unwrapLink(h.current.editor)}i({...n,linkState:null})}},p.useEffect(()=>{const T=S=>{var v;(v=g.current)==null||v.call(g,S)};return document.addEventListener("mousedown",T),()=>{document.removeEventListener("mousedown",T)}},[]);const x=()=>{if(!a)return;if(e!==a.targetElement.url){const S=a.editor,v=a.targetElement,E=En.findPath(S,v);ba.setNodes(S,{url:e},{at:E})}const T=to.getLinkElement(a.editor);T&&i({...n,linkState:{...n.linkState,targetElement:T[0],isEditing:!1,isHoveringOrigin:!0}})};return f&&l.jsxDEV(Ye,{ref:s.setFloating,style:r,padding:1,className:Y("link-popup"),onPointerEnter:()=>{!m&&n.linkState&&i({...n,linkState:{...n.linkState,isHovering:!0}})},onPointerLeave:()=>{!u&&n.linkState&&i({...n,linkState:{...n.linkState,isHovering:!1}})},children:l.jsxDEV(ft.Row,{gap:1,align:"center",children:u?l.jsxDEV(l.Fragment,{children:[l.jsxDEV("input",{type:"text",value:e,onChange:T=>{t(T.target.value)},onKeyDown:T=>{T.key==="Enter"&&x()},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),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(ar,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:168,columnNumber:23},void 0),tooltip:"Delete link","aria-label":"Delete link",onPointerDown:()=>{if(!a)return;const T=a.editor,S=a.targetElement,v=En.findPath(T,S);ba.unwrapNodes(T,{at:v}),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):l.jsxDEV(l.Fragment,{children:[l.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),l.jsxDEV(ne,{className:"link-popup__edit",type:"icon",visible:!0,icon:l.jsxDEV(No,{},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:T})=>{T.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),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(ar,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:218,columnNumber:23},void 0),tooltip:"Delete link","aria-label":"Delete link",onPointerDown:()=>{if(!a)return;const T=a.editor,S=a.targetElement,v=En.findPath(T,S);ba.unwrapNodes(T,{at:v}),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)},Ho={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 Rj(){return"0.6.71"}function Hm(e){return{...Ho,...e,retryPolicy:{...Ho.retryPolicy,...e.retryPolicy||{}},cacheConfig:{...Ho.cacheConfig,...e.cacheConfig||{}},batchConfig:{...Ho.batchConfig,...e.batchConfig||{}}}}class qj{isAvailable(){return Yt.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{Yt.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 zm=new qj;class Bj{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 zm.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 zm.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 Lj{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 c=new Map;return c.set(n,o),this.debounceMap.set(t,c),this.globalDebounceMap.set(n,o),!0}const a=r.get(n);return!a||o-a>this.debounceTime?(r.set(n,o),this.globalDebounceMap.set(n,o),!0):(i&&console.warn(`[Tracking] 🚫 Element debounce: ${n} (${o-a}ms ago)`),!1)}clear(t){this.debounceMap.delete(t)}setDebounceTime(t){this.debounceTime=t}}const Oj=["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 Fj(e,t){if(!e.matches(Oj))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 Hj(e,t="click"){var a;const n=`auto_${t}_`;if(e.id)return`${n}${e.id}`;const i=e.getAttribute("aria-label");if(i)return`${n}${Gm(i)}`;const o=(a=e.textContent)==null?void 0:a.trim();if(o&&o.length>0){const c=Gm(o.substring(0,20));return`${n}${c}`}const s=e.tagName.toLowerCase(),r=e.className?`.${e.className.split(" ")[0]}`:"";return`${n}${s}${r}`}function Gm(e){return e.toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"").substring(0,50)}function zj(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 qa(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 qg(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function Gj(){if(typeof window>"u")return"server-side";const e="tracking_session_id";let t=sessionStorage.getItem(e);return t||(t=qg(),sessionStorage.setItem(e,t)),t}function Wj(){return typeof window>"u"?{width:0,height:0}:{width:window.innerWidth||0,height:window.innerHeight||0}}class $j{constructor(t={}){this.state$=new HN({initialized:!1,config:Ho,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=Hm(t),this.batchService=new Bj(this.config.batchConfig),this.debouncer=new Lj(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&&Fj(n,this.config.excludedSelectors)){if(this.isElementExcluded(n))return;const o=Hj(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=qa(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=qa(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(a=>this.attachHoverListener(a)),o.querySelectorAll("[track-focus]").forEach(a=>this.attachFocusListener(a))}})})}),this.mutationObserver.observe(document.body,{childList:!0,subtree:!0}))}trackClick(t,n){if(!this.debouncer.shouldTrack(t,n,this.config.devMode)){this.incrementStat("debouncedEvents"),this.log("debug",`Event debounced: ${n}`);return}const i=qa(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:Rj(),sessionId:Gj(),userAgent:typeof navigator<"u"?navigator.userAgent:void 0,viewport:Wj(),eventType:i},r={eventName:t,params:n||void 0,metadata:s,id:qg(),createdAt:Date.now()};return this.config.devMode&&this.log("debug",`Event created: ${t}`,{params:n,element:o?zj(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=Hm({...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 An=null;function Xj(){An&&(An.destroy(),An=null)}function Kj(e,t){return An||(An=new $j(t),typeof window<"u"&&setTimeout(()=>{An==null||An.initialize()},0),typeof module<"u"&&module.hot&&module.hot.dispose(()=>{Xj()})),e.trackingService=An,e}class Yj extends ac{initialize(){super.initialize()}}const Zj=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.`),Yj}},e};function Qj(e,t,n,i=0){const o=ge.getCenterPoint(t),s=Ii(t,ui);if(i){const r=Jj(n,o,-i);let a=s.find(c=>ge.isHit(ge.getRectangleByPoints([r,r]),c.rectangle));return a&&(a.cursorClass=Wr(a.cursorClass,i)),a}else return s.find(r=>ge.isHit(ge.getRectangleByPoints([n,n]),r.rectangle))}function Jj(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*o-a*s,t[1]+r*s+a*o]}function eP(e){const t=Be(e);return t.length!==1?!1:Kl(t[0])}function tP(e,t){const n=Be(e);if(n.length!==1||!Kl(n[0]))return null;const i=n[0],o=ge.getRectangleByPoints(i.points),s=i.angle||0,r=Qj(e,o,t,s);return r?{element:i,rectangle:o,handle:r.handle,cursorClass:r.cursorClass}:null}function nP(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o){console.warn("startRectangle is undefined");return}const c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,gs(),100),m=[[d.x,d.y],[d.x+d.width,d.y+d.height]],f=e.children.findIndex(h=>h.id===i.id);f>=0&&ue.setNode(e,{points:m},[f])}const iP=e=>Mi(e,{key:"tool-elements",canResize:()=>eP(e),hitTest:(t=>tP(e,t)),onResize:(t,n)=>nP(e,t,n)});let wr=null;function oP(e,t){return $e.isFreehand(t)?Gr(t):Je.isPenPath(t)?$r(t):e.getRectangle(t)}function sP(e,t){return Ii(e,ui).find(i=>ge.isHit(ge.getRectangleByPoints([t,t]),i.rectangle))}function Hc(e){return e.some(t=>$e.isFreehand(t)||Je.isPenPath(t)||H.isText(t))}function rP(e){return e.some(t=>H.isText(t))}function Bg(e){const t=Be(e);if(t.length<2||!Hc(t))return null;try{const n=Lt(e,t,!1);return{elements:t,rectangle:n}}catch{return null}}function aP(e){return Bg(e)!==null}function lP(e,t){const n=Bg(e);if(!n)return null;const i=sP(n.rectangle,t);if(i){wr=new Map;for(const o of n.elements){const s=oP(e,o);s&&wr.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 cP(e,t,n,i,o,s){const r=s.width/o.width,a=s.height/o.height,c=i.x-o.x,u=i.y-o.y,d=s.x+c*r,m=s.y+u*a,f=n.points.map(g=>{const x=g[0]-i.x,b=g[1]-i.y,y=x*r,N=b*a;return[d+y,m+N]}),h=e.children.findIndex(g=>g.id===t);h>=0&&ue.setNode(e,{points:f},[h])}function uP(e,t,n,i,o,s){const r=s.width/o.width,a=s.height/o.height,c=i.x-o.x,u=i.y-o.y,d=s.x+c*r,m=s.y+u*a,f=n.anchors.map(N=>({...N,point:[N.point[0]*r,N.point[1]*a],handleIn:N.handleIn?[N.handleIn[0]*r,N.handleIn[1]*a]:void 0,handleOut:N.handleOut?[N.handleOut[0]*r,N.handleOut[1]*a]:void 0})),h=i.width*r,g=i.height*a,b=[[d,m],[d+h,m+g]],y=e.children.findIndex(N=>N.id===t);y>=0&&ue.setNode(e,{points:b,anchors:f},[y])}const Lg=14;function Og(e,t){const n={...e};if("text"in e&&typeof e.text=="string"){const i=e["font-size"]?parseFloat(e["font-size"]):Lg,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=>Og(i,t))),n}function dP(e,t,n,i,o,s){const r=s.width/o.width,a=s.height/o.height,c=i.x-o.x,u=i.y-o.y,d=s.x+c*r,m=s.y+u*a,f=i.width*r,h=i.height*a,g=[[d,m],[d+f,m+h]],x=e.children.findIndex(b=>b.id===t);if(x>=0)if(H.isDrawElement(n)&&H.isImage(n))ue.setNode(e,{points:g,width:f,height:h},[x]);else if(H.isText(n)){const b=n,y=Og(b.text,r),N=b.textHeight||Lg*1.4;ue.setNode(e,{points:g,text:y,textHeight:N*r,autoSize:!1},[x])}else ue.setNode(e,{points:g},[x])}function mP(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o||!Array.isArray(i)||!wr)return;const c=a[0]-r[0],u=a[1]-r[1],d=gs()||rP(i),m=yo(o,s,c,u,d);for(const f of i){const h=wr.get(f.id);if(!h)continue;const{element:g,rectangle:x}=h;$e.isFreehand(g)?cP(e,f.id,g,x,o,m):Je.isPenPath(g)?uP(e,f.id,g,x,o,m):dP(e,f.id,g,x,o,m)}}function pP(e){const t=Be(e);if(t.length<2||!Hc(t))return null;try{const n=Ql(),i=Lt(e,t,!1),o=zN(e,i);return ge.getCornerPoints(o).forEach(r=>{const a=GN(e,r);n.append(a)}),n}catch{return null}}const fP=e=>{const{afterChange:t}=e;let n=null;return e.afterChange=()=>{t(),n&&(n.remove(),n=null);const i=Be(e);i.length>1&&Hc(i)&&!Jo(e)&&(n=pP(e),n&&F.getActiveHost(e).append(n))},Mi(e,{key:"multi-resize",canResize:()=>aP(e),hitTest:(i=>lP(e,i)),onResize:(i,o)=>mP(e,i,o)})},Fg=14;let ir=null,Pl=null;function hP(e,t){return Ii(e,ui).find(i=>ge.isHit(ge.getRectangleByPoints([t,t]),i.rectangle))}function Hg(e,t){const n={...e};if("text"in e&&typeof e.text=="string"){const i=e["font-size"]?parseFloat(e["font-size"]):Fg,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=>Hg(i,t))),n}function gP(e){const t=Be(e);return t.length!==1?!1:H.isText(t[0])}function bP(e,t){const n=Be(e);if(n.length!==1||!H.isText(n[0]))return null;const i=n[0],o=ge.getRectangleByPoints(i.points),s=hP(o,t);return s?(ir=JSON.parse(JSON.stringify(i)),Pl={...o},{element:i,rectangle:o,handle:s.handle,cursorClass:s.cursorClass}):null}function xP(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o||!ir||!Pl)return;const c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,!0,20),m=d.width/Pl.width;if(m<=0)return;const f=Hg(ir.text,m),g=(ir.textHeight||Fg*1.4)*m,x=[[d.x,d.y],[d.x+d.width,d.y+d.height]],b=e.children.findIndex(y=>y.id===i.id);b>=0&&ue.setNode(e,{points:x,text:f,textHeight:g,autoSize:!1},[b])}const NP=e=>Mi(e,{key:"text-resize",canResize:()=>gP(e),hitTest:t=>bP(e,t),onResize:(t,n)=>xP(e,t,n)});function yP(e){return e.some(n=>$e.isFreehand(n)||Je.isPenPath(n))}function wP(e){const t=Be(e);if(t.length<2||!yP(t))return null;try{return Lt(e,t,!1)}catch{return null}}const vP=()=>{const e=xt(),[t,n]=p.useState([]),[i,o]=p.useState(!1),[s,r]=p.useState(!1),a=p.useRef(!1),c=p.useCallback(()=>{const m=es(e)||ns(e)||Jo(e);if(r(m),m)return;Be(e);const f=wP(e);if(!f){o(!1);return}const g=[{x:f.x,y:f.y,cursor:"nwse-resize"},{x:f.x+f.width,y:f.y,cursor:"nesw-resize"},{x:f.x+f.width,y:f.y+f.height,cursor:"nwse-resize"},{x:f.x,y:f.y+f.height,cursor:"nesw-resize"}].map(x=>{const b=Bo(e,[x.x,x.y]);return{x:b[0],y:b[1],cursor:x.cursor}});n(g),o(!0)},[e]);if(p.useEffect(()=>{a.current=s},[s]),p.useEffect(()=>{c();let m,f=JSON.stringify(e.viewport),h=JSON.stringify(e.selection),g=e.children.length;const x=()=>{const b=JSON.stringify(e.viewport),y=JSON.stringify(e.selection),N=e.children.length,w=es(e)||ns(e)||Jo(e);(b!==f||y!==h||N!==g||w!==a.current)&&(f=b,h=y,g=N,c()),m=requestAnimationFrame(x)};return m=requestAnimationFrame(x),()=>{cancelAnimationFrame(m)}},[e,c]),!i||t.length===0||s)return null;const u=ui,d=u/2;return l.jsxDEV("div",{className:Y("multi-selection-handles",At),children:t.map((m,f)=>l.jsxDEV("div",{className:"multi-selection-handle",style:{left:m.x-d,top:m.y-d,width:u,height:u,cursor:m.cursor}},f,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/multi-selection-handles/multi-selection-handles.tsx",lineNumber:169,columnNumber:9},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/multi-selection-handles/multi-selection-handles.tsx",lineNumber:167,columnNumber:5},void 0)},zg=p.createContext(null),EP=typeof window<"u"?Math.max(375,window.innerWidth*.5):600,SP=({children:e})=>{const t=p.useRef(null),n=p.useRef(null),[i,o]=p.useState([]),[s,r]=p.useState(!1),[a,c]=p.useState(EP),u=p.useCallback(m=>{n.current=m},[]),d=p.useCallback(async(m,f)=>{n.current?await n.current(m,f):console.warn("[ChatDrawerContext] No retry handler registered")},[]);return l.jsxDEV(zg.Provider,{value:{chatDrawerRef:t,registerRetryHandler:u,executeRetry:d,selectedContent:i,setSelectedContent:o,isDrawerOpen:s,setIsDrawerOpen:r,drawerWidth:a,setDrawerWidth:c},children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/contexts/ChatDrawerContext.tsx",lineNumber:79,columnNumber:5},void 0)};function Gg(){const e=p.useContext(zg);if(!e)throw new Error("useChatDrawer must be used within a ChatDrawerProvider");return e}function kP(){const{chatDrawerRef:e,registerRetryHandler:t,executeRetry:n,selectedContent:i,setSelectedContent:o,isDrawerOpen:s,setIsDrawerOpen:r,drawerWidth:a,setDrawerWidth:c}=Gg();return{openChatDrawer:()=>{var u;(u=e.current)==null||u.open()},closeChatDrawer:()=>{var u;(u=e.current)==null||u.close()},toggleChatDrawer:()=>{var u;(u=e.current)==null||u.toggle()},sendMessageToChatDrawer:async u=>{var d;await((d=e.current)==null?void 0:d.sendMessage(u))},sendWorkflowMessage:async u=>{var d;await((d=e.current)==null?void 0:d.sendWorkflowMessage(u))},updateWorkflowMessage:u=>{var d;(d=e.current)==null||d.updateWorkflowMessage(u)},appendAgentLog:u=>{var d;(d=e.current)==null||d.appendAgentLog(u)},updateThinkingContent:u=>{var d;(d=e.current)==null||d.updateThinkingContent(u)},isChatDrawerOpen:()=>{var u;return((u=e.current)==null?void 0:u.isOpen())??!1},isDrawerOpen:s,setIsDrawerOpen:r,drawerWidth:a,setDrawerWidth:c,registerRetryHandler:t,retryWorkflowFromStep:async(u,d)=>{await n(u,d)},selectedContent:i,setSelectedContent:o}}class TP{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=Ds.getToolById("banana-prompt");if(!n){console.error('❌ Tool "banana-prompt" not found');return}Oi.insertTool(t,n.id,n.url,[100,100],{width:n.defaultWidth||Fi.defaultWidth,height:n.defaultHeight||Fi.defaultHeight},{name:n.name,category:n.category,permissions:n.permissions})}insertXiaohongshuTool(){const t=this.getBoard();if(!t)return;const n=Ds.getToolById("xiaohongshu-tool");if(!n){console.error('❌ Tool "xiaohongshu-tool" not found');return}Oi.insertTool(t,n.id,n.url,[300,300],{width:n.defaultWidth||Fi.defaultWidth,height:n.defaultHeight||Fi.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=Ds.getToolById(t);if(!s){console.error(`❌ Tool "${t}" not found`);return}Oi.insertTool(o,s.id,s.url,[n,i],{width:s.defaultWidth||Fi.defaultWidth,height:s.defaultHeight||Fi.defaultHeight},{name:s.name,category:s.category,permissions:s.permissions})}listAllTools(){Ds.getAvailableTools().forEach((n,i)=>{})}getAllToolElements(){const t=this.getBoard();if(!t)return;Oi.getAllTools(t).forEach((i,o)=>{})}removeAllTools(){const t=this.getBoard();if(!t)return;Oi.getAllTools(t).forEach(i=>{Oi.removeTool(t,i.id)})}help(){}}const Wg=new TP;typeof window<"u"&&(window.testToolbox=Wg);const DP={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)"},_P={autoHideDelay:3e3},jP=({board:e,config:t,className:n,displayMode:i="auto",autoTriggerConfig:o})=>{const s=p.useRef(null),r=p.useRef(null);p.useRef(null);const a={...DP,...t},c={..._P,...o},[u,d]=p.useState(()=>({expanded:i==="always"?!0:a.defaultExpanded,dragging:!1,autoMode:i==="auto",manuallyExpanded:!1})),m=p.useRef({isDragging:!1,startPoint:null}),f=p.useRef(null),[h,g]=p.useState(null),x=p.useRef(null),[b,y]=p.useState(!1),N=120,w=p.useRef(0),T=p.useRef({zoom:e.viewport.zoom,offsetX:e.viewport.offsetX,offsetY:e.viewport.offsetY}),S=p.useRef(!1),v=p.useCallback(()=>{if(!e||!e.children)return[];const D=[];return e.children.forEach(j=>{try{let W=null;j.points&&Array.isArray(j.points)?W=ge.getRectangleByPoints(j.points):j.x!==void 0&&j.y!==void 0&&(W={x:j.x,y:j.y,width:j.width||100,height:j.height||100}),W&&W.width>0&&W.height>0&&D.push({id:j.id,bounds:W,type:j.type})}catch(W){console.warn("Failed to get bounds for element:",j.id,W)}}),D},[e]),E=p.useCallback(()=>{const j=F.getBoardContainer(e).getBoundingClientRect(),W=e.viewport.zoom,Q=Cr(e),C=Q[0],B=Q[1],L=j.width/W,z=j.height/W;return{x:C,y:B,width:L,height:z}},[e]),R=p.useRef(u.expanded);R.current=u.expanded;const q=p.useRef(null),$=p.useRef(1);p.useEffect(()=>{if(i==="always"){R.current||d(j=>({...j,expanded:!0}));return}if(i!=="auto")return;const D=setInterval(()=>{const j=e.viewport,W=T.current,Q=Math.abs(j.zoom-W.zoom)>.001,C=Math.abs(j.offsetX-W.offsetX)>.5||Math.abs(j.offsetY-W.offsetY)>.5;if(Q||C){if(T.current={zoom:j.zoom,offsetX:j.offsetX,offsetY:j.offsetY},!S.current){S.current=!0;return}w.current=Date.now(),R.current||d(L=>({...L,expanded:!0,manuallyExpanded:!1}))}},100);return()=>{clearInterval(D)}},[i,e]),p.useEffect(()=>{if(i!=="auto"||!u.expanded||u.manuallyExpanded||u.dragging)return;const D=setTimeout(()=>{d(j=>!j.autoMode||j.manuallyExpanded||j.dragging?j:{...j,expanded:!1})},c.autoHideDelay);return()=>{clearTimeout(D)}},[i,u.expanded,u.manuallyExpanded,u.dragging,c.autoHideDelay]);const V=p.useCallback((D,j)=>{if(D.length===0)return{x:j.x-200,y:j.y-200,width:j.width+400,height:j.height+400};let W=j.x,Q=j.y,C=j.x+j.width,B=j.y+j.height;D.forEach(z=>{const{x:te,y:ee,width:O,height:J}=z.bounds;W=Math.min(W,te),Q=Math.min(Q,ee),C=Math.max(C,te+O),B=Math.max(B,ee+J)});const L=100;return{x:W-L,y:Q-L,width:C-W+L*2,height:B-Q+L*2}},[]),U=p.useCallback(D=>{const W=(a.width-20)/D.width,Q=(a.height-20)/D.height;return Math.min(W,Q)},[a.width,a.height]),A=p.useCallback((D,j,W,Q)=>{const B=(D-W.x)*Q+10,L=(j-W.y)*Q+10;return[B,L]},[]),_=p.useCallback((D,j,W,Q)=>{const B=(D-10)/Q+W.x,L=(j-10)/Q+W.y;return[B,L]},[]),M=p.useCallback((D,j,W)=>{if(100*W<5)return;D.strokeStyle="rgba(0, 0, 0, 0.05)",D.lineWidth=.5;const B=Math.floor(j.x/100)*100,L=Math.floor(j.y/100)*100,z=j.x+j.width,te=j.y+j.height;for(let ee=B;ee<=z;ee+=100){const[O]=A(ee,0,j,W);D.beginPath(),D.moveTo(O,0),D.lineTo(O,a.height),D.stroke()}for(let ee=L;ee<=te;ee+=100){const[,O]=A(0,ee,j,W);D.beginPath(),D.moveTo(0,O),D.lineTo(a.width,O),D.stroke()}},[A,a.width,a.height]),P=p.useCallback(()=>{const D=s.current;if(!D)return;const j=D.getContext("2d");if(!j)return;j.clearRect(0,0,a.width,a.height);const W=v(),Q=E();if(W.length===0&&!Q){j.fillStyle="#999",j.font="12px sans-serif",j.textAlign="center",j.textBaseline="middle",j.fillText("空画布",a.width/2,a.height/2);return}const C=V(W,Q),B=U(C);q.current=C,$.current=B,M(j,C,B),j.fillStyle=a.elementColor,j.strokeStyle="rgba(0, 0, 0, 0.1)",j.lineWidth=.5,W.forEach(oe=>{const{x:Ie,y:ut,width:Re,height:ie}=oe.bounds,[Ae,Ue]=A(Ie,ut,C,B),_e=Re*B,Le=ie*B;j.fillRect(Ae,Ue,_e,Le),j.strokeRect(Ae,Ue,_e,Le)});const[L,z]=A(Q.x,Q.y,C,B),te=Q.width*B,ee=Q.height*B;j.fillStyle=a.viewportColor,j.fillRect(L,z,te,ee),j.strokeStyle=a.viewportColor.replace("0.3","1"),j.lineWidth=2,j.strokeRect(L,z,te,ee);const O=8;j.fillStyle=a.viewportColor.replace("0.3","0.8"),j.fillRect(L,z,O,2),j.fillRect(L,z,2,O),j.fillRect(L+te-O,z,O,2),j.fillRect(L+te-2,z,2,O),j.fillRect(L,z+ee-2,O,2),j.fillRect(L,z+ee-O,2,O),j.fillRect(L+te-O,z+ee-2,O,2),j.fillRect(L+te-2,z+ee-O,2,O);const J=x.current;if(J){const oe=J.x-te/2,Ie=J.y-ee/2;j.fillStyle="rgba(243, 156, 18, 0.15)",j.fillRect(oe,Ie,te,ee),j.strokeStyle="rgba(243, 156, 18, 0.8)",j.lineWidth=2,j.strokeRect(oe,Ie,te,ee)}},[e,a,v,E,V,U,A,M]),Z=p.useCallback(D=>{D.preventDefault(),D.stopPropagation();const j=s.current;if(!j||!q.current)return;const W=j.getBoundingClientRect(),Q=D.clientX-W.left,C=D.clientY-W.top;Yt.track("minimap_navigate",{action:"click",displayMode:i});const[B,L]=_(Q,C,q.current,$.current);m.current={isDragging:!0,startPoint:[Q,C]},d(z=>({...z,dragging:!0})),pe(B,L)},[_,e]),pe=p.useCallback((D,j)=>{const Q=F.getBoardContainer(e).getBoundingClientRect(),C=e.viewport.zoom,B=D-Q.width/(2*C),L=j-Q.height/(2*C);fe.updateViewport(e,[B,L],C),requestAnimationFrame(()=>P())},[e,P]),I=p.useCallback(D=>{if(!m.current.isDragging||!q.current)return;D.preventDefault(),D.stopPropagation();const j=s.current;if(!j)return;const W=j.getBoundingClientRect(),Q=D.clientX-W.left,C=D.clientY-W.top,[B,L]=_(Q,C,q.current,$.current);pe(B,L)},[_,pe]),G=p.useCallback(()=>{m.current.isDragging&&Yt.track("minimap_navigate",{action:"drag",displayMode:i}),m.current={isDragging:!1,startPoint:null},d(D=>({...D,dragging:!1}))},[i]),ce=p.useCallback((D,j)=>{const W=f.current;if(!W||!q.current)return;const Q=W.getContext("2d");if(!Q)return;const[C,B]=_(D,j,q.current,$.current),L=E(),z=L.width,te=L.height,ee=z,O=te;Q.clearRect(0,0,N,N),Q.fillStyle="#fff",Q.fillRect(0,0,N,N);const J=C-ee/2,oe=B-O/2,Ie=N/ee,ut=N/O,Re=Math.min(Ie,ut),ie=(N-ee*Re)/2,Ae=(N-O*Re)/2;v().forEach(_e=>{const{bounds:Le}=_e;if(Le.x+Le.width>=J&&Le.x<=J+ee&&Le.y+Le.height>=oe&&Le.y<=oe+O){const Mt=(Le.x-J)*Re+ie,Dt=(Le.y-oe)*Re+Ae,It=Le.width*Re,Bt=Le.height*Re;Q.fillStyle="rgba(0, 0, 0, 0.6)",Q.fillRect(Mt,Dt,It,Bt)}}),Q.strokeStyle="rgba(90, 79, 207, 0.6)",Q.lineWidth=1,Q.setLineDash([4,4]),Q.beginPath(),Q.moveTo(0,N/2),Q.lineTo(N,N/2),Q.stroke(),Q.beginPath(),Q.moveTo(N/2,0),Q.lineTo(N/2,N),Q.stroke(),Q.setLineDash([]),Q.strokeStyle="rgba(90, 79, 207, 0.3)",Q.lineWidth=2,Q.strokeRect(0,0,N,N)},[v,E,_]),X=p.useCallback(()=>{u.dragging||y(!0)},[u.dragging]),ae=p.useCallback(()=>{y(!1),g(null),x.current=null},[]),le=p.useCallback(D=>{if(u.dragging){y(!1),x.current=null;return}const j=s.current;if(!j)return;const W=j.getBoundingClientRect(),Q=D.clientX-W.left,C=D.clientY-W.top,B={x:Q,y:C};g(B),x.current=B,y(!0),ce(Q,C),P()},[u.dragging,ce,P]),be=p.useRef(!1),we=p.useCallback(D=>{be.current=!0;const j=s.current;if(!j)return;const W=D.touches[0],Q=j.getBoundingClientRect(),C=W.clientX-Q.left,B=W.clientY-Q.top,L={x:C,y:B};g(L),x.current=L,y(!0),ce(C,B),P()},[ce,P]),Fe=p.useCallback(D=>{const j=s.current;if(!j)return;const W=D.touches[0],Q=j.getBoundingClientRect(),C=W.clientX-Q.left,B=W.clientY-Q.top,L={x:C,y:B};g(L),x.current=L,y(!0),ce(C,B),P()},[ce,P]),K=p.useCallback(()=>{be.current=!1,setTimeout(()=>{be.current||(y(!1),g(null),x.current=null,P())},500)},[P]);p.useEffect(()=>{if(!u.expanded)return;P();const D=setInterval(()=>{P()},100);return()=>{clearInterval(D)}},[e,u.expanded,P]);const Ce=p.useCallback(()=>{d(D=>{const j=!D.expanded;return{...D,expanded:j,manuallyExpanded:j}})},[]),We={bottom:a.position.includes("bottom")?a.margin:void 0,top:a.position.includes("top")?a.margin:void 0,right:a.position.includes("right")?a.margin:void 0,left:a.position.includes("left")?a.margin:void 0},it=b&&(be.current||!u.dragging),Ke=h?{position:"absolute",right:a.width+8,top:Math.max(0,Math.min(h.y-N/2,a.height-N)),width:N,height:N,opacity:it?1:0,pointerEvents:"none",transition:"opacity 0.15s ease-out, top 0.1s ease-out"}:{display:"none"};return l.jsxDEV("div",{ref:r,className:`minimap ${u.expanded?"minimap--expanded":"minimap--collapsed"} ${i==="auto"?"minimap--auto":""} ${n||""}`,style:{...We,zIndex:en.MINIMAP},"data-track":"minimap_container",children:[u.expanded&&l.jsxDEV("div",{className:"minimap__content",children:[l.jsxDEV("canvas",{ref:s,width:a.width,height:a.height,className:"minimap__canvas",onPointerDown:Z,onPointerMove:I,onPointerUp:G,onPointerLeave:G,onMouseEnter:X,onMouseLeave:ae,onMouseMove:le,onTouchStart:we,onTouchMove:Fe,onTouchEnd:K,style:{cursor:u.dragging?"grabbing":"pointer"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:822,columnNumber:11},void 0),l.jsxDEV("div",{className:"minimap__preview",style:Ke,children:l.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:844,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:843,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:821,columnNumber:9},void 0),a.collapsible&&l.jsxDEV("button",{className:`minimap__toggle ${u.expanded?"minimap__toggle--expanded":""}`,onClick:Ce,title:u.expanded?"折叠小地图":"展开小地图","data-track":"minimap_click_toggle",children:l.jsxDEV(WN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:861,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:855,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:812,columnNumber:5},void 0)},Wm=10,PP=3e3,CP=({showMinimap:e=!0,container:t})=>{var q,$,V,U;const n=xt(),{t:i}=Se(),{isDrawerOpen:o,drawerWidth:s}=kP(),[r,a]=p.useState(!1),[c,u]=p.useState(!0),[d,m]=p.useState(!1),f=p.useRef(null),h=p.useRef({zoom:((q=n==null?void 0:n.viewport)==null?void 0:q.zoom)||1,offsetX:(($=n==null?void 0:n.viewport)==null?void 0:$.offsetX)||0,offsetY:((V=n==null?void 0:n.viewport)==null?void 0:V.offsetY)||0}),g=p.useRef(!1),x=p.useRef(null),b=p.useMemo(()=>o?s+Wm:Wm,[o,s]),y=p.useCallback(()=>{fe.updateZoom(n,n.viewport.zoom-.1)},[n]),N=p.useCallback(()=>{fe.updateZoom(n,n.viewport.zoom+.1)},[n]),w=p.useCallback(()=>{fe.fitViewport(n),a(!1)},[n]),T=p.useCallback(()=>{fe.updateZoom(n,1),a(!1)},[n]),S=p.useCallback(()=>{nc(n),a(!1)},[n]),v=p.useCallback(()=>{u(A=>{const _=!A;return m(_),_})},[]);p.useEffect(()=>{if(!c||!n)return;const A=F.getBoardContainer(n);if(!A)return;const _=M=>{var Z;const P=M.target;(Z=f.current)!=null&&Z.contains(P)||(u(!1),m(!1))};return A.addEventListener("mousedown",_),()=>{A.removeEventListener("mousedown",_)}},[c,n]),p.useEffect(()=>{if(!e||!n)return;const A=setInterval(()=>{const _=n.viewport,M=h.current,P=Math.abs(_.zoom-M.zoom)>.001,Z=Math.abs(_.offsetX-M.offsetX)>.5||Math.abs(_.offsetY-M.offsetY)>.5;if(P||Z){if(h.current={zoom:_.zoom,offsetX:_.offsetX,offsetY:_.offsetY},!g.current){g.current=!0;return}c||(u(!0),m(!1)),x.current&&clearTimeout(x.current)}},100);return()=>{clearInterval(A)}},[e,n,c]),p.useEffect(()=>{if(!(!c||d))return x.current=setTimeout(()=>{u(!1)},PP),()=>{x.current&&clearTimeout(x.current)}},[c,d]);const E=p.useCallback(()=>{a(A=>!A)},[]),R=Math.round((((U=n==null?void 0:n.viewport)==null?void 0:U.zoom)||1)*100);return l.jsxDEV("div",{className:"view-navigation",style:{right:b,zIndex:en.VIEW_NAVIGATION},ref:f,"data-testid":"view-navigation",children:[l.jsxDEV("div",{className:"view-navigation__zoom",children:[l.jsxDEV(Tt,{content:i("zoom.out"),showArrow:!1,children:l.jsxDEV("button",{className:"view-navigation__zoom-btn",onClick:y,"aria-label":i("zoom.out"),"data-track":"view_nav_zoom_out","data-testid":"zoom-out",children:l.jsxDEV($N,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:214,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:207,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:206,columnNumber:9},void 0),l.jsxDEV(at,{sideOffset:8,open:r,onOpenChange:a,placement:"bottom",children:[l.jsxDEV(Tt,{content:i("zoom.fit"),showArrow:!1,children:l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("button",{className:"view-navigation__zoom-percent",onClick:E,"aria-label":i("zoom.fit"),"data-track":"view_nav_zoom_menu","data-testid":"zoom-display",children:[R,"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:226,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:225,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:224,columnNumber:11},void 0),l.jsxDEV(ct,{container:t,style:{zIndex:en.POPOVER},children:l.jsxDEV("div",{className:"view-navigation-zoom-menu",children:[l.jsxDEV("button",{className:"zoom-menu-item",onClick:w,"data-track":"view_nav_zoom_fit",children:[l.jsxDEV("span",{className:"zoom-menu-item__label",children:i("zoom.fit")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:244,columnNumber:17},void 0),l.jsxDEV("span",{className:"zoom-menu-item__shortcut",children:"⌘⇧="},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:245,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:239,columnNumber:15},void 0),l.jsxDEV("button",{className:"zoom-menu-item",onClick:S,"data-track":"view_nav_zoom_fit_frame",children:l.jsxDEV("span",{className:"zoom-menu-item__label",children:i("zoom.fitFrame")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:252,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:247,columnNumber:15},void 0),l.jsxDEV("button",{className:"zoom-menu-item",onClick:T,"data-track":"view_nav_zoom_100",children:[l.jsxDEV("span",{className:"zoom-menu-item__label",children:i("zoom.100")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:259,columnNumber:17},void 0),l.jsxDEV("span",{className:"zoom-menu-item__shortcut",children:"⌘0"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:260,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:254,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:238,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:237,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:218,columnNumber:9},void 0),l.jsxDEV(Tt,{content:i("zoom.in"),showArrow:!1,children:l.jsxDEV("button",{className:"view-navigation__zoom-btn",onClick:N,"aria-label":i("zoom.in"),"data-track":"view_nav_zoom_in","data-testid":"zoom-in",children:l.jsxDEV(XN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:274,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:267,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:266,columnNumber:9},void 0),e&&l.jsxDEV(Tt,{content:c?"折叠小地图":"展开小地图",showArrow:!1,children:l.jsxDEV("button",{className:`view-navigation__minimap-toggle ${c?"view-navigation__minimap-toggle--expanded":""}`,onClick:v,"aria-label":c?"折叠小地图":"展开小地图","data-track":"view_nav_minimap_toggle",children:l.jsxDEV(KN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:290,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:284,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:280,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:205,columnNumber:7},void 0),e&&c&&l.jsxDEV("div",{className:"view-navigation__minimap",children:l.jsxDEV(jP,{board:n,displayMode:"always",config:{width:180,height:120,position:"top-right",margin:0,collapsible:!1,defaultExpanded:!0}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:299,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:298,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:195,columnNumber:5},void 0)},AP=p.lazy(()=>Me(()=>import("./tool-windows-Bd5iqcJh.js").then(e=>e.p2),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),MP=({position:e,visible:t,onClose:n,onOpenMediaLibrary:i})=>{const o=xt(),{t:s}=Se(),r=tc(),a=F.getBoardContainer(o),[c,u]=p.useState({freehand:!1,arrow:!1,shape:!1}),[d,m]=p.useState(!1),{refs:f,floatingStyles:h}=Wl({placement:"bottom",middleware:[$l(12),qp({padding:16}),Xl({fallbackPlacements:["top","right","left"]})]});p.useEffect(()=>{if(e&&t){const[V,U]=e;f.setPositionReference({getBoundingClientRect(){return{width:1,height:1,x:V,y:U,top:U,left:V,right:V+1,bottom:U+1}}})}},[e,t,f]),p.useEffect(()=>{if(!t)return;const V=A=>{const _=A.target,M=_.closest(".quick-creation-toolbar"),P=_.closest(".quick-toolbar-popover")||_.closest("[data-radix-popper-content-wrapper]")||_.closest(".plait-popover")||_.closest(".shape-picker")||_.closest(".arrow-picker")||_.closest(".freehand-panel"),Z=_.closest(".media-library-modal");!M&&!P&&!Z&&n()},U=setTimeout(()=>{document.addEventListener("mousedown",V)},100);return()=>{clearTimeout(U),document.removeEventListener("mousedown",V)}},[t,n]);const g=()=>{u({freehand:!1,arrow:!1,shape:!1})},x=V=>{u({freehand:!1,arrow:!1,shape:!1,[V]:!0})},b=()=>{g(),Dn(o),mt(o,null),fe.updatePointerType(o,De.text),r(De.text),n()},y=()=>{g(),Dn(o),mt(o,St.dnd),fe.updatePointerType(o,ji.mind),r(ji.mind),n()},N=()=>{g(),Hr(o),n()},w=async V=>{try{V.type===In.IMAGE?await Yl(o,V.url):V.type===In.VIDEO?await gf(o,V.url):V.type===In.AUDIO&&await Ol(o,V.url,{title:V.name,duration:V.duration,previewImageUrl:V.thumbnail,prompt:V.prompt,mv:V.modelName,clipId:V.clipId,providerTaskId:V.providerTaskId}),re.success(s("toolbar.assetInserted")||"素材已插入到画板"),m(!1),n()}catch(U){console.error("Failed to insert asset:",U),re.error(s("toolbar.assetInsertFailed")||"插入素材失败")}},T=()=>{if(g(),i){i({mode:ii.SELECT,onSelect:w,selectButtonText:s("toolbar.insert")||"插入"}),n();return}m(!0)},[S,v]=p.useState(rt.feltTipPen),E=300,R=p.useRef(null),q=p.useCallback(()=>{R.current&&(clearTimeout(R.current),R.current=null)},[]);p.useEffect(()=>()=>{q()},[q]);const $=(V,U,A,_)=>l.jsxDEV(at,{open:c[U],sideOffset:12,onOpenChange:M=>{M||g()},placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{onPointerEnter:()=>{q(),R.current=setTimeout(()=>{x(U)},E)},onPointerLeave:()=>{q()},children:l.jsxDEV(ne,{type:"icon",visible:!0,selected:c[U],icon:V,"aria-label":A,"data-track":`quick_toolbar_click_${U}`,onPointerDown:()=>{q(),x(U),Dn(o),U==="freehand"&&(mt(o,St.dnd),fe.updatePointerType(o,S),r(S))},onPointerUp:()=>{U==="freehand"&&mt(o,St.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),l.jsxDEV(ct,{container:a,style:{zIndex:en.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?l.jsxDEV(l.Fragment,{children:[l.jsxDEV(Ye,{padding:1,className:`quick-creation-toolbar ${At}`,ref:f.setFloating,style:h,children:l.jsxDEV(ft.Row,{gap:1,children:[l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(sc,{},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:b},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),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(Rr,{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),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(Ur,{},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:T},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),$(l.jsxDEV(No,{},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"),l.jsxDEV(Vc,{onPointerUp:V=>{g(),v(V),fe.updatePointerType(o,V),r(V),n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:390,columnNumber:13},void 0)),$(l.jsxDEV(oc,{},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"),l.jsxDEV(Rc,{onPointerUp:V=>{g(),fe.updatePointerType(o,V),r(V),n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:408,columnNumber:13},void 0)),$(l.jsxDEV(ic,{},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"),l.jsxDEV(Uc,{onPointerUp:V=>{g(),fe.updatePointerType(o,V),r(V),n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:423,columnNumber:13},void 0)),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(lr,{},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:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:434,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:354,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:348,columnNumber:7},void 0),d&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(AP,{isOpen:d,onClose:()=>{m(!1)},mode:ii.SELECT,onSelect:w,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};function NA(e){const[t,n]=p.useState({isCached:!1}),[i,o]=p.useState(!1),s=p.useCallback(async()=>{if(!e){n({isCached:!1});return}try{const c=await Ni.getCacheInfo(e);n(c)}catch(c){console.error("[useUnifiedCache] Failed to load cache info:",c),n({isCached:!1})}},[e]);p.useEffect(()=>{s()},[s]),p.useEffect(()=>Ni.subscribe(()=>{s()}),[s]);const r=p.useCallback(async c=>{if(!e)return!1;o(!0);try{const u=await Ni.cacheImage(e,c);return u&&await s(),u}catch(u){return console.error("[useUnifiedCache] Failed to cache image:",u),!1}finally{o(!1)}},[e,s]),a=p.useCallback(async()=>{if(!e)return!1;o(!0);try{return await Ni.deleteCache(e),await s(),!0}catch(c){return console.error("[useUnifiedCache] Failed to delete cache:",c),!1}finally{o(!1)}},[e,s]);return{cacheInfo:t,isLoading:i,isCached:t.isCached,cacheAge:t.age,cacheImage:r,deleteCache:a,reload:s}}function IP(e){const[t,n]=p.useState(!1);p.useEffect(()=>{const o=()=>{n(!0),e==null||e()};return Ni.onQuotaExceeded(o)},[e]);const i=p.useCallback(()=>{n(!1)},[]);return{isQuotaExceeded:t,resetQuotaFlag:i}}const VP=({children:e,onOpenMediaLibrary:t})=>{const[n,i]=p.useState(!1),{confirm:o,confirmDialog:s}=Vr(),r=p.useCallback(()=>{n||(i(!0),o({title:"缓存空间已满",description:"图片缓存空间已满,无法继续缓存新图片。是否打开素材库清理缓存?",confirmText:"打开素材库",cancelText:"稍后处理",confirmTheme:"warning"}).then(a=>{i(!1),a&&(t==null||t())}))},[o,n,t]);return IP(r),l.jsxDEV(l.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)},vr={visible:!1,position:{x:0,y:0},sourceElement:null,currentShape:null,hitIndex:-1,hitPoint:null,mode:"hover",arrowLineElement:null,arrowLineEndPoint:null},$g=new WeakMap,Cl=new WeakMap;function Er(e){return $g.get(e)||vr}function zo(e,t){$g.set(e,t);const n=Cl.get(e);n&&n(t)}function UP(e,t){return Cl.set(e,t),()=>{Cl.delete(e)}}function zc(e){zo(e,vr)}const Mo=100;function RP(e,t,n,i,o){const s=ty(n),r=ge.getRectangleByPoints(t.points),a=r.width,c=r.height,u=r.x+a/2,d=r.y+c/2,f=ge.getEdgeCenterPoints(r)[n];let h,g;switch(s){case pt.right:h=u+a/2+Mo+a/2,g=d;break;case pt.bottom:h=u,g=d+c/2+Mo+c/2;break;case pt.left:h=u-a/2-Mo-a/2,g=d;break;case pt.top:h=u,g=d-c/2-Mo-c/2;break;default:h=u+a/2+Mo+a/2,g=d}const x=[[h-a/2,g-c/2],[h+a/2,g+c/2]],b=uc(e,x,o);if(b.fill="#ffffff",H.isShapeElement(t)&&!H.isText(t)){const V=t;V.angle!==void 0&&(b.angle=V.angle),V.fill&&V.fill!=="none"&&(b.fill=V.fill),V.strokeColor!==void 0&&(b.strokeColor=V.strokeColor),V.strokeStyle!==void 0&&(b.strokeStyle=V.strokeStyle),V.strokeWidth!==void 0&&(b.strokeWidth=V.strokeWidth)}const y=ur(f,t)||f,N=H.isShapeElement(t)?os(e,y,t):void 0;let w;switch(s){case pt.right:w=3;break;case pt.bottom:w=0;break;case pt.left:w=1;break;case pt.top:w=2;break;default:w=3}const T=ge.getRectangleByPoints(b.points),v=ge.getEdgeCenterPoints(T)[w],E=ur(v,b)||v,R=os(e,E,b),q=Af(kn.straight,[y,E],{marker:ss.none,connection:N,boundId:t.id},{marker:ss.arrow,connection:R,boundId:b.id},[],{});ue.insertNode(e,q,[e.children.length]),Cf(e,b),zc(e);const $=b.id;setTimeout(()=>{const V=e.children.findIndex(A=>A.id===$),U=V>=0?e.children[V]:null;U&&(oi(e),_i(e,U),fe.updatePointerType(e,vt.selection),ue.setNode(e,{_forceRender:Date.now()},[V]),ue.setNode(e,{_forceRender:void 0},[V]))},50)}function qP(e,t,n,i){var g;let o=100,s=100;const r=t,a=(g=r.source)==null?void 0:g.boundId;if(a){const x=e.children.find(b=>b.id===a);if(x&&H.isShapeElement(x)){const b=ge.getRectangleByPoints(x.points);o=b.width,s=b.height}}const c=[[n[0]-o/2,n[1]-s/2],[n[0]+o/2,n[1]+s/2]],u=uc(e,c,i);u.fill="#ffffff";const d=ge.getRectangleByPoints(u.points),m=ge.getEdgeCenterPoints(d),f=r.points||[];if(f.length>=2){const x=f[0],b=f[f.length-1],y=b[0]-x[0],N=b[1]-x[1];let w;Math.abs(y)>Math.abs(N)?w=y>0?3:1:w=N>0?0:2;const T=m[w],S=os(e,T,u),v=e.children.findIndex(E=>E.id===t.id);v!==-1&&ue.setNode(e,{target:{marker:ss.arrow,connection:S,boundId:u.id},points:[x,T]},[v])}Cf(e,u),zc(e);const h=u.id;setTimeout(()=>{const x=e.children.findIndex(y=>y.id===h),b=x>=0?e.children[x]:null;b&&(oi(e),_i(e,b),fe.updatePointerType(e,vt.selection),ue.setNode(e,{_forceRender:Date.now()},[x]),ue.setNode(e,{_forceRender:void 0},[x]))},50)}const BP=e=>{const{pointerMove:t,pointerLeave:n,globalPointerUp:i}=e;let o=null,s=-1,r=e.children.length,a={x:0,y:0};return e.pointerMove=c=>{var T;a={x:c.clientX,y:c.clientY},o&&(clearTimeout(o),o=null);const u=Pf(e),d=u.length===1&&u[0],m=Er(e);if(!d||!H.isShapeElement(d)||H.isText(d)){if(m.visible&&m.mode==="hover"&&zo(e,{...vr}),s=-1,d&&H.isShapeElement(d)&&!Ji.getElementRef(d))return;t(c);return}if(!Ji.getElementRef(d)){s=-1;return}const h=YN(e,c.x,c.y),g=ZN(e,d,!0),x=QN(e,h,d,!0)||h,b=JN(x,g),y=g[b];if(y){if(b!==s||!m.visible){s=b;const S=c.clientX,v=c.clientY;o=setTimeout(()=>{const E=H.isImage(d)?De.rectangle:d.shape||De.rectangle;zo(e,{visible:!0,position:{x:S-140,y:v+20},sourceElement:d,currentShape:E,hitIndex:b,hitPoint:y,mode:"hover"})},50)}}else s=-1,m.visible&&m.mode==="hover"&&(o=setTimeout(()=>{const S=Er(e);S.visible&&S.mode==="hover"&&zo(e,{...vr})},300));const N=Ji.getElementRef(d);(T=N==null?void 0:N.getGenerator)!=null&&T.call(N,ey.key)&&t(c)},e.pointerLeave=c=>{o&&(clearTimeout(o),o=null),n(c)},e.globalPointerUp=c=>{var d;i(c);const u=e.children.length;if(u>r){const m=e.children[u-1];if(H.isArrowLine(m)){const f=m;if(!((d=f.target)==null?void 0:d.boundId)){const g=f.points||[];if(g.length>=2){const x=g[g.length-1];setTimeout(()=>{zo(e,{visible:!0,position:{x:a.x-140,y:a.y+20},sourceElement:null,currentShape:De.rectangle,hitIndex:-1,hitPoint:null,mode:"arrowLine",arrowLineElement:m,arrowLineEndPoint:x})},50)}}}}r=e.children.length},e},Io=100;function LP(e){switch(e){case"ArrowRight":return pt.right;case"ArrowDown":return pt.bottom;case"ArrowLeft":return pt.left;case"ArrowUp":return pt.top;default:return null}}function OP(e){switch(e){case pt.top:return 0;case pt.right:return 1;case pt.bottom:return 2;case pt.left:return 3;default:return 1}}function FP(e){return(e+2)%4}function HP(e,t,n,i,o,s){const r={x:t-i/2,y:n-o/2,width:i,height:o};for(const a of e.children)if(a.id!==s&&H.isDrawElement(a)&&!H.isArrowLine(a))try{const c=ge.getRectangleByPoints(a.points);if(r.x<c.x+c.width&&r.x+r.width>c.x&&r.y<c.y+c.height&&r.y+r.height>c.y)return!0}catch{}return!1}function zP(e,t,n){const i=ge.getRectangleByPoints(t.points),o=i.width,s=i.height,r=i.x+o/2,a=i.y+s/2;let c,u;switch(n){case pt.right:c=r+o/2+Io+o/2,u=a;break;case pt.bottom:c=r,u=a+s/2+Io+s/2;break;case pt.left:c=r-o/2-Io-o/2,u=a;break;case pt.top:c=r,u=a-s/2-Io-s/2;break;default:c=r+o/2+Io+o/2,u=a}let d=0;const m=n===pt.right||n===pt.left?s+20:o+20;for(;HP(e,c,u,o,s,t.id)&&(d+=m,n===pt.right||n===pt.left?u=a+d:c=r+d,!(d>1e3)););const f=[[c-o/2,u-s/2],[c+o/2,u+s/2]],g=t.shape||"rectangle",x=uc(e,f,g);if(x.fill="#ffffff",H.isShapeElement(t)&&!H.isText(t)){const A=t;A.fill&&A.fill!=="none"&&(x.fill=A.fill),A.strokeColor!==void 0&&(x.strokeColor=A.strokeColor),A.strokeWidth!==void 0&&(x.strokeWidth=A.strokeWidth)}const b=OP(n),y=FP(b),w=ge.getEdgeCenterPoints(i)[b],T=ur(w,t)||w,S=H.isShapeElement(t)?os(e,T,t):void 0,v=ge.getRectangleByPoints(x.points),R=ge.getEdgeCenterPoints(v)[y],q=ur(R,x)||R,$=os(e,q,x),V=Af(kn.elbow,[T,q],{marker:ss.none,connection:S,boundId:t.id},{marker:ss.arrow,connection:$,boundId:x.id},[],{});ue.insertNode(e,V,[e.children.length]),ue.insertNode(e,x,[e.children.length]);const U=x.id;setTimeout(()=>{const A=e.children.find(_=>_.id===U);A&&(oi(e),_i(e,A),fe.updatePointerType(e,vt.selection),Mf(e,[c,u]))},50)}function GP(e,t){var o,s,r,a;const n=[],i=[];for(const c of e.children){if(!H.isArrowLine(c))continue;const u=c;if(((o=u.source)==null?void 0:o.boundId)===t.id&&((s=u.target)!=null&&s.boundId)){const d=e.children.find(m=>m.id===u.target.boundId);d&&i.push(d)}if(((r=u.target)==null?void 0:r.boundId)===t.id&&((a=u.source)!=null&&a.boundId)){const d=e.children.find(m=>m.id===u.source.boundId);d&&n.push(d)}}return{incoming:n,outgoing:i}}function WP(e,t,n){const{incoming:i,outgoing:o}=GP(e,t),s=n?[...o,...i]:[...i,...o];if(s.length===0)return!1;const r=s[0];oi(e),_i(e,r);try{const a=Lt(e,[r],!1),c=a.x+a.width/2,u=a.y+a.height/2;Mf(e,[c,u])}catch{}return!0}const $P=e=>{const{keyDown:t}=e;return e.keyDown=n=>{if(!n.altKey&&!n.metaKey&&!n.ctrlKey){if(!n.shiftKey){const i=LP(n.key);if(i!==null){const o=Pf(e);if(o.length===1){const s=o[0];if(H.isShapeElement(s)&&!H.isText(s)&&!H.isImage(s)){zP(e,s,i),n.preventDefault();return}}}}if(n.key==="Tab"){const i=Be(e);if(i.length===1){const o=i[0];if(H.isDrawElement(o)&&H.isShapeElement(o)&&WP(e,o,!n.shiftKey)){n.preventDefault();return}}}}t(n)},e},XP=240,KP=new Set(["5","7"]);function YP(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*o-a*s,t[1]+r*s+a*o]}function ZP(e,t,n=0){const i=ge.getCenterPoint(e),s=Ii(e,ui).filter(r=>KP.has(String(r.handle)));if(n){const r=YP(t,i,-n),a=s.find(c=>ge.isHit(ge.getRectangleByPoints([r,r]),c.rectangle));return a&&(a.cursorClass=Wr(a.cursorClass,n)),a}return s.find(r=>ge.isHit(ge.getRectangleByPoints([t,t]),r.rectangle))}function QP(e){const t=Be(e);return t.length===1&&Kn(t[0])}function JP(e,t){const n=Be(e);if(n.length!==1||!Kn(n[0]))return null;const i=n[0],o=ge.getRectangleByPoints(i.points),s=ZP(o,t,0);return s?{element:i,rectangle:o,handle:s.handle,cursorClass:s.cursorClass}:null}function eC(e,t,n,i){const o=e.width/e.height,s=t==="7",r=s?-n:n,a=Math.max(XP,e.width+r),c=a/o,u=(e.height-c)/2;return{x:s?e.x+(e.width-a):e.x,y:e.y+u,width:a,height:c}}function tC(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o)return;const c=a[0]-r[0];a[1]-r[1];const u=eC(o,s,c),d=[[u.x,u.y],[u.x+u.width,u.y+u.height]],m=e.children.findIndex(f=>f.id===i.id);m>=0&&ue.setNode(e,{points:d},[m])}const nC=e=>Mi(e,{key:"audio-nodes",canResize:()=>QP(e),hitTest:(t=>JP(e,t)),onResize:(t,n)=>tC(e,t,n)}),iC=[{icon:l.jsxDEV(ef,{},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:De.rectangle},{icon:l.jsxDEV(tf,{},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:De.ellipse},{icon:l.jsxDEV(nf,{},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:De.triangle},{icon:l.jsxDEV(of,{},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:ec.terminal},{icon:l.jsxDEV(sf,{},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:De.diamond},{icon:l.jsxDEV(rf,{},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:De.parallelogram},{icon:l.jsxDEV(af,{},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:De.roundRectangle}],oC=({visible:e,position:t,currentShape:n,onSelectShape:i,onClose:o,container:s})=>{const r=p.useRef(null);p.useEffect(()=>{if(!e)return;const f=x=>{r.current&&!r.current.contains(x.target)&&o()},h=x=>{x.key==="Escape"&&o()},g=setTimeout(()=>{document.addEventListener("mousedown",f),document.addEventListener("keydown",h)},50);return()=>{clearTimeout(g),document.removeEventListener("mousedown",f),document.removeEventListener("keydown",h)}},[e,o]);const a=p.useCallback(f=>{i(f)},[i]);if(!e)return null;const c={x:isNaN(t.x)?0:t.x,y:isNaN(t.y)?0:t.y},u=200,d=80;typeof window<"u"&&(c.x+u>window.innerWidth&&(c.x=window.innerWidth-u-10),c.y+d>window.innerHeight&&(c.y=t.y-d-20));const m=l.jsxDEV("div",{ref:r,className:Y("auto-complete-shape-picker",At),style:{left:c.x,top:c.y},children:l.jsxDEV(Ye,{padding:1,children:l.jsxDEV(ft.Col,{gap:1,children:l.jsxDEV(ft.Row,{gap:1,children:iC.map((f,h)=>l.jsxDEV(ne,{className:Y("shape-button",{"is-current":n===f.pointer}),type:"icon",size:"small",visible:!0,icon:f.icon,tooltip:f.title,"aria-label":f.title,onPointerDown:({event:g})=>{g.stopPropagation(),a(f.pointer)}},h,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:127,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:125,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:124,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:123,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:115,columnNumber:5},void 0);return s?qr.createPortal(m,s):m},sC={visible:!1,position:{x:0,y:0},sourceElement:null,currentShape:null,hitIndex:-1,hitPoint:null,mode:"hover"};function rC(e){const[t,n]=p.useState(sC);p.useEffect(()=>{if(!e)return;n(Er(e));const s=UP(e,r=>{n(r)});return()=>{s()}},[e]);const i=p.useCallback(s=>{if(!e)return;const r=Er(e);r.mode==="arrowLine"?r.arrowLineElement&&r.arrowLineEndPoint&&qP(e,r.arrowLineElement,r.arrowLineEndPoint,s):r.sourceElement&&r.hitPoint&&r.hitIndex>=0&&RP(e,r.sourceElement,r.hitIndex,r.hitPoint,s)},[e]),o=p.useCallback(()=>{e&&zc(e)},[e]);return{state:t,selectShape:i,closePicker:o}}const aC="#ffffff",lC=[De.rectangle,De.ellipse,De.triangle,De.diamond,De.parallelogram,De.roundRectangle];function $m(e){if(!H.isGeometry(e)||H.isText(e)||H.isImage(e))return!1;const t=e;return!(!t.shape||!lC.includes(t.shape)||t.fill&&t.fill!=="none")}const cC=e=>{const{afterChange:t}=e,n=new Set;return e.afterChange=()=>{t();const i=[];e.children.forEach((o,s)=>{$m(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&&$m(s)&&ue.setNode(e,{fill:aC},o)})},0)},e},Sr=new WeakMap;let Ba=null,Pn=null;function Xg(e,t){try{const n=Ji.getElementG(t);if(n)return n}catch{}if(t!=null&&t.id){const n=F.getElementHost(e);if(n){const i=n.querySelector(`g[id="${t.id}"]`);if(i)return i}}return null}function Kg(e){return e.querySelector("path, rect, ellipse, polygon, circle")}function Yg(e){let t=e.querySelector("defs");return t||(t=ny(),e.insertBefore(t,e.firstChild)),t}function uC(e,t){const n=Sr.get(t);if(n){const i=e.querySelector(`#${n}`);i&&i.remove()}}function kr(e,t,n){const i=Xg(e,t);if(!i)return;const o=Kg(i);if(!o)return;const s=i.closest("svg");if(!s)return;const r=Lt(e,[t],!1),a=(r==null?void 0:r.width)||100,c=(r==null?void 0:r.height)||100,u=If(n,t.id,a,c),d=Yg(s);if(u.defElement){const m=u.defElement.id,f=d.querySelector(`#${m}`);f?f.replaceWith(u.defElement):d.appendChild(u.defElement),o.setAttribute("fill",u.fillValue),Sr.set(t,m);const h=Sr.get(t);if(h&&h!==m){const g=d.querySelector(`#${h}`);g&&g.remove()}}else o.setAttribute("fill",u.fillValue),uC(s,t)}function or(e,t){return e.children.find(n=>n.id===t)||null}function Mn(e){const t=e.fillConfig;return t&&Vn(t)?t:e.fill&&Vn(e.fill)?e.fill:null}function Zg(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=Mn(t);if(n&&(n.type==="gradient"||n.type==="image"))return!0}return!1}function dC(e){if(!Pn)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 a=or(Pn,r),c=a?Mn(a):null;a&&c&&cn(Pn,a)&&Zg(o,a)&&t.add(a)}}}n.type==="childList"&&n.addedNodes.forEach(i=>{if(i instanceof SVGGElement&&i.hasAttribute("id")){const o=i.getAttribute("id");if(o){const s=or(Pn,o),r=s?Mn(s):null;s&&r&&cn(Pn,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=or(Pn,s),a=r?Mn(r):null;r&&a&&cn(Pn,r)&&t.add(r)}}}})}),t.size>0&&t.forEach(n=>{const i=Mn(n);i&&kr(Pn,n,i)})}function mC(e){if(Ba)return;const t=F.getElementHost(e);t&&(Pn=e,Ba=new MutationObserver(dC),Ba.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["fill"]}))}function pC(e){const t=F.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 a=or(e,r),c=a?Mn(a):null;a&&c&&cn(e,a)&&Zg(o,a)&&kr(e,a,c)}}})}function Al(e,t=!1){e.children.forEach(n=>{const i=Mn(n);i&&cn(e,n)&&(t?kr(e,n,i):requestAnimationFrame(()=>{kr(e,n,i)}))}),t&&pC(e)}let Xm=!0;const Km=new WeakSet;function Qg(e){const t=F.getElementHost(e);if(!t)return;const n=t.closest("svg")||t.querySelector("svg");n&&e.children.forEach(i=>{const o=Mn(i);if(o&&(o.type==="gradient"||o.type==="image")&&cn(e,i)){const s=Lt(e,[i],!1),r=(s==null?void 0:s.width)||100,a=(s==null?void 0:s.height)||100,c=If(o,i.id,r,a);if(c.defElement){const u=Yg(n);u.querySelector(`#${c.defElement.id}`)||(u.appendChild(c.defElement),Sr.set(i,c.defElement.id))}}})}function fC(e){let t=0;return e.children.forEach(n=>{const i=Mn(n);if(i&&(i.type==="gradient"||i.type==="image")&&cn(e,n)){const o=Xg(e,n);(o?Kg(o):null)||t++}}),t}function hC(e){if(Km.has(e))return;Km.add(e);const t=15,n=16;let i=0;const o=()=>{i++;try{if(!F.getElementHost(e))return;if(Qg(e),Al(e,!0),fC(e)>0&&i<t){const a=Math.min(n*Math.pow(1.5,i),500);setTimeout(o,a)}}catch{}};requestAnimationFrame(()=>{o(),setTimeout(o,0)})}const gC=e=>{const{afterChange:t}=e;return e.afterChange=()=>{t(),mC(e),Qg(e),Xm?(Xm=!1,Al(e,!0),hC(e)):Al(e,!0)},e};function bC(e,t){return Ii(e,ui).find(i=>ge.isHit(ge.getRectangleByPoints([t,t]),i.rectangle))}function xC(e){const t=Be(e);return t.length!==1?!1:vi(t[0])}function NC(e,t){const n=Be(e);if(n.length!==1||!vi(n[0]))return null;const i=n[0],o=ge.getRectangleByPoints(i.points),s=bC(o,t);return s?{element:i,rectangle:o,handle:s.handle,cursorClass:s.cursorClass}:null}function yC(e,t,n){const{element:i,rectangle:o,handle:s}=t;if(!o)return;const{startPoint:r,endPoint:a}=n,c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,gs(),60),m=[[d.x,d.y],[d.x+d.width,d.y+d.height]],f=e.children.findIndex(h=>h.id===i.id);f>=0&&ue.setNode(e,{points:m},[f])}function wC(e,t){const{element:n}=t,i=e.children.find(o=>o.id===n.id);i&&iy.updateFrameMembers(e,i)}const vC=e=>Mi(e,{key:"frame-elements",canResize:()=>xC(e),hitTest:t=>NC(e,t),onResize:(t,n)=>yC(e,t,n),afterResize:t=>wC(e,t)});function La(e){return!!e.locked}const EC=e=>{const{isHit:t,isRectangleHit:n,isMovable:i}=e;return e.isHit=(o,s,r)=>La(o)?!1:t(o,s,r),e.isRectangleHit=(o,s)=>La(o)?!1:n(o,s),e.isMovable=o=>La(o)?!1:i(o),e},Ml="aitu-tab-sync-version",SC=500,Il=`tab-${Date.now()}-${Math.random().toString(36).substr(2,9)}`;function Jg({onSyncNeeded:e,enabled:t=!0,currentBoardId:n}){const i=p.useRef(-1),o=p.useRef();p.useEffect(()=>{if(!t)return;const s=localStorage.getItem(Ml);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]),p.useEffect(()=>{if(!t)return;const s=()=>{const a=localStorage.getItem(Ml);if(a)try{const c=JSON.parse(a);if(c.version>i.current&&c.tabId!==Il){const u=n&&c.boardId&&c.boardId===n;i.current=c.version,u&&e()}else c.version>i.current&&c.tabId===Il&&(i.current=c.version)}catch{const c=parseInt(a,10);c>i.current&&(i.current=c)}};o.current=setInterval(()=>{document.hidden||s()},SC);const r=()=>{document.hidden||s()};return document.addEventListener("visibilitychange",r),()=>{o.current&&clearInterval(o.current),document.removeEventListener("visibilitychange",r)}},[t,e,n])}function eb(e){try{const n={version:Date.now(),tabId:Il,boardId:e};localStorage.setItem(Ml,JSON.stringify(n))}catch{}}const yA=Object.freeze(Object.defineProperty({__proto__:null,markTabSyncVersion:eb,useTabSync:Jg},Symbol.toStringTag,{value:"Module"})),Vl=new Set,Ym=4,Ls=1e3;function Xn(e,t){if(t===void 0){console.info(`[StartupPrefetch] ${e}`);return}console.info(`[StartupPrefetch] ${e}`,t)}function Zm(e){e.forEach(t=>Vl.delete(t))}function Qm(){const e=typeof navigator<"u"?navigator.connection:void 0;return e?e.saveData?!1:e.effectiveType!=="slow-2g"&&e.effectiveType!=="2g":!0}function tb(e){if(typeof window>"u"||!("serviceWorker"in navigator)||e.length===0||!Qm()){Xn("skip idle prefetch request",{hasWindow:typeof window<"u",hasServiceWorker:typeof navigator<"u"&&"serviceWorker"in navigator,groupCount:e.length,canUseConnection:Qm()});return}const t=e.filter(s=>Vl.has(s)?!1:(Vl.add(s),!0));if(t.length===0){Xn("skip idle prefetch request: all groups already requested",{groups:e});return}const n={type:"SW_PREFETCH_GROUPS",groups:t},i=(s=1)=>{const r=navigator.serviceWorker.controller;if(r){r.postMessage(n),Xn("posted idle prefetch request via controller",{groups:t,attempt:s});return}navigator.serviceWorker.ready.then(a=>{if(a.active){a.active.postMessage(n),Xn("posted idle prefetch request via registration.active",{groups:t,attempt:s});return}if(s>=Ym){Zm(t),console.warn("[StartupPrefetch] idle prefetch request dropped: no active service worker",{groups:t,attempt:s});return}Xn("retry idle prefetch request: no active service worker yet",{groups:t,attempt:s,retryDelayMs:Ls}),window.setTimeout(()=>i(s+1),Ls)}).catch(a=>{if(s>=Ym){Zm(t),console.warn("[StartupPrefetch] idle prefetch request failed after retries",{groups:t,attempt:s,error:a});return}Xn("retry idle prefetch request after navigator.serviceWorker.ready failure",{groups:t,attempt:s,retryDelayMs:Ls}),window.setTimeout(()=>i(s+1),Ls)})},o=window.requestIdleCallback;typeof o=="function"?(Xn("queue idle prefetch request with requestIdleCallback",{groups:t}),o(()=>i(),{timeout:1500})):(Xn("queue idle prefetch request with setTimeout fallback",{groups:t}),window.setTimeout(i,400))}const kC=p.lazy(()=>Me(()=>import("./DeferredAIInputBar-jZEz3pqU.js"),__vite__mapDeps([0,4,5,6,7,8,9]),import.meta.url).then(e=>({default:e.DeferredAIInputBar}))),TC=p.lazy(()=>Me(()=>import("./index-BVd4ZdJq.js"),__vite__mapDeps([0,4,5,10]),import.meta.url).then(e=>({default:e.ChatDrawer}))),mn=["tool-windows","runtime-static-assets"],DC=p.lazy(()=>Me(()=>import("./DrawnixDeferredFeatures-DRggo5l2.js"),__vite__mapDeps([0,11]),import.meta.url).then(e=>({default:e.DrawnixDeferredFeatures}))),_C=p.lazy(()=>Me(()=>import("./tool-windows-Bd5iqcJh.js").then(e=>e.p5),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.DrawnixDeferredRuntime}))),jC=p.lazy(()=>Me(()=>import("./ttd-dialog-Chz4Dc5q.js"),__vite__mapDeps([0,4,6,7,8,2,3,12,13]),import.meta.url).then(e=>({default:e.TTDDialog}))),PC=p.lazy(()=>Me(()=>import("./settings-dialog-CcLfJFr_.js"),__vite__mapDeps([0,4,6,14]),import.meta.url).then(e=>({default:e.SettingsDialog}))),CC=p.lazy(()=>Me(()=>import("./tool-windows-Bd5iqcJh.js").then(e=>e.o$),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.UnifiedMediaViewer}))),AC=p.lazy(()=>Me(()=>import("./CanvasAudioPlayer-BxZowfRq.js"),__vite__mapDeps([0,15]),import.meta.url).then(e=>({default:e.CanvasAudioPlayer}))),MC=[],IC=({value:e,viewport:t,theme:n,onChange:i,onSelectionChange:o,onViewportChange:s,onThemeChange:r,onValueChange:a,afterInit:c,onBoardSwitch:u,onTabSyncNeeded:d,isDataReady:m=!1,currentBoardId:f})=>{const h={readonly:!1,hideScrollbar:!1,disabledScrollOnNonFocus:!1,themeColors:Sy},[g,x]=p.useState(()=>{const ie=new fk(window.navigator.userAgent);return{pointer:vt.hand,isMobile:ie.mobile()!==null,isPencilMode:!1,openDialogTypes:new Set,dialogInitialData:null,dialogInitialDataByType:{},openCleanConfirm:!1,openSettings:!1}}),[b,y]=p.useState(null),[N,w]=p.useState(!1),[T,S]=p.useState(!1),[v,E]=p.useState(!1),[R,q]=p.useState(!1),[$,V]=p.useState({mode:ii.BROWSE}),[U,A]=p.useState(!1),[_,M]=p.useState(!1),[P,Z]=p.useState(!1),[pe,I]=p.useState(!1),[G,ce]=p.useState(!1),[X,ae]=p.useState(!1),[le,be]=p.useState(!1),we=p.useRef(null),Fe=p.useCallback(()=>{w(!1),S(!1),E(!1),q(!1)},[]),K=p.useCallback((ie=MC)=>{tb(ie),Z(!0)},[]),Ce=p.useCallback((ie=mn)=>{K(ie),be(!0),ae(!0)},[K]),We=p.useCallback(()=>{Ce(mn),Promise.all([Me(()=>import("./tool-windows-Bd5iqcJh.js").then(ie=>ie.oR),__vite__mapDeps([0]),import.meta.url),Me(()=>import("./tool-windows-Bd5iqcJh.js").then(ie=>ie.oQ),__vite__mapDeps([0]),import.meta.url)]).then(([{toolWindowService:ie},{BUILT_IN_TOOLS:Ae}])=>{const Ue=Ae.find(Le=>Le.id==="knowledge-base");if(!Ue)return;const _e=ie.getToolState(Ue.id);_e&&_e.status==="open"?ie.closeTool(Ue.id):ie.openTool(Ue)})},[Ce]);p.useEffect(()=>{const ie=Ae=>{const{noteId:Ue}=Ae.detail;Ce(mn),Promise.all([Me(()=>import("./tool-windows-Bd5iqcJh.js").then(_e=>_e.oR),__vite__mapDeps([0]),import.meta.url),Me(()=>import("./tool-windows-Bd5iqcJh.js").then(_e=>_e.oQ),__vite__mapDeps([0]),import.meta.url)]).then(([{toolWindowService:_e},{BUILT_IN_TOOLS:Le}])=>{const Mt=Le.find(It=>It.id==="knowledge-base");if(!Mt)return;const Dt=_e.isToolOpen(Mt.id);_e.openTool(Mt,{componentProps:Ue?{initialNoteId:Ue}:{}}),Dt&&Ue&&window.setTimeout(()=>{window.dispatchEvent(new CustomEvent("kb:open-note",{detail:{noteId:Ue}}))},50)})};return window.addEventListener("kb:open",ie),()=>window.removeEventListener("kb:open",ie)},[Ce]);const it=p.useCallback(()=>{if(Ce(mn),N){w(!1);return}S(!1),E(!1),q(!1),w(!0)},[Ce,N]),Ke=p.useCallback(()=>{if(Ce(mn),T){S(!1);return}w(!1),E(!1),q(!1),S(!0)},[Ce,T]),D=p.useCallback(()=>{if(K(mn),v){E(!1);return}w(!1),S(!1),q(!1),E(!0)},[K,v]),j=p.useCallback(ie=>{Ce(mn),Fe(),V({mode:ii.BROWSE,...ie}),q(!0)},[Fe,Ce]),W=p.useCallback(()=>{K(mn),A(!0)},[K]),Q=p.useCallback(()=>{K(mn),M(!0)},[K]),C=p.useCallback(ie=>{x(ie)},[]),B=p.useCallback(ie=>{x(Ae=>({...Ae,...ie}))},[]);p.useEffect(()=>{b&&(b.appState=g,b.__setAppState=C,we.current=b)},[b,g,C]),p.useEffect(()=>{if(new URLSearchParams(window.location.search).has("tool")){Ce(mn);return}},[Ce]),p.useEffect(()=>{if(typeof window>"u"||!("serviceWorker"in navigator))return;let ie=!1;const Ae=window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1",Ue=Dt=>{var It;((It=Dt.data)==null?void 0:It.type)==="SW_IDLE_PREFETCH_STATUS"&&mn.every(Bt=>{var Ht;return(Ht=Dt.data.completedGroups)==null?void 0:Ht.includes(Bt)})&&(ie=!0,be(!0))};navigator.serviceWorker.addEventListener("message",Ue);const _e={type:"SW_IDLE_PREFETCH_STATUS_GET"},Le=navigator.serviceWorker.controller;Le?Le.postMessage(_e):navigator.serviceWorker.ready.then(Dt=>{var It;(It=Dt.active)==null||It.postMessage(_e)}).catch(()=>{});const Mt=window.setTimeout(()=>{ie||le||(Ae?console.info("[Drawnix] SW idle prefetch status unresolved in dev, enabling minimized tools bar fallback"):console.warn("[Drawnix] SW idle prefetch status unresolved, enabling minimized tools bar fallback"),be(!0))},2200);return()=>{window.clearTimeout(Mt),navigator.serviceWorker.removeEventListener("message",Ue)}},[le]),p.useEffect(()=>{const ie=window.requestIdleCallback;let Ae;const Ue=window.setTimeout(()=>{const _e=()=>{I(!0),ce(!0)};if(typeof ie=="function"){Ae=ie(_e,{timeout:2500});return}_e()},5e3);return()=>{var _e;window.clearTimeout(Ue),typeof Ae=="number"&&((_e=window.cancelIdleCallback)==null||_e.call(window,Ae))}},[]),p.useEffect(()=>{const ie=Ae=>{const Ue=Ae,{message:_e}=Ue.detail;re.error({content:"API Key 无效或已过期,请重新配置",duration:5e3}),console.error("[Drawnix] API auth error:",_e),x(Le=>({...Le,openSettings:!0}))};return window.addEventListener(Pu,ie),()=>{window.removeEventListener(Pu,ie)}},[]);const L=[dy,my,py,hk,nT,D_(B),rj,bj,NP,fP,xj(B),Vj(B),fy,hy,iP,gy,by,xy,BP,$P,Ny,vC,yy,wy,vy,nC,cC,gC,Ey,EC,Kj,Zj],z=p.useRef(null),{saveBoard:te,createBoard:ee,switchBoard:O}=oy(),J=p.useCallback(async()=>{if(i&&we.current){const ie={children:we.current.children||[],viewport:we.current.viewport,theme:we.current.theme};await te(ie)}},[i,te]),oe=p.useCallback(async()=>{await J();const ie=await ee({name:"新画布"});ie&&(await O(ie.id),setTimeout(()=>{Ei()},500))},[J,ee,O]),Ie=p.useCallback(ie=>{const Ae=we.current;if(Ae&&ie){const _e=Be(Ae).map(Le=>Le.id).filter(Boolean);B({lastSelectedElementIds:_e})}o&&o(ie)},[o,B]),ut=p.useMemo(()=>({appState:g,setAppState:C,board:b}),[g,C,b]),Re=pe||G||X||g.openCommandPalette||g.openCanvasSearch||N||T||R||U||_;return l.jsxDEV(sy,{children:l.jsxDEV(ry,{children:l.jsxDEV(ay,{children:l.jsxDEV(ly,{children:l.jsxDEV(cy,{children:l.jsxDEV(VP,{onOpenMediaLibrary:j,children:l.jsxDEV(SP,{children:l.jsxDEV(uy.Provider,{value:ut,children:l.jsxDEV(VC,{value:e,viewport:t,theme:n,options:h,plugins:L,containerRef:z,appState:g,board:b,setBoard:y,projectDrawerOpen:N,toolboxDrawerOpen:T,taskPanelExpanded:v,mediaLibraryOpen:R,mediaLibraryConfig:$,backupRestoreOpen:U,onChange:i,onSelectionChange:Ie,onViewportChange:s,onThemeChange:r,onValueChange:a,afterInit:c,onBoardSwitch:u,onTabSyncNeeded:d,handleProjectDrawerToggle:it,handleToolboxDrawerToggle:Ke,handleKnowledgeBaseToggle:We,handleTaskPanelToggle:D,handleOpenMediaLibrary:j,handleOpenBackupRestore:W,handleOpenCloudSync:Q,setProjectDrawerOpen:w,setToolboxDrawerOpen:S,setMediaLibraryOpen:q,setBackupRestoreOpen:A,cloudSyncOpen:_,setCloudSyncOpen:M,handleBeforeSwitch:J,isDataReady:m,onCreateProjectForMemory:oe,currentBoardId:f,deferredRuntimeEnabled:P,shouldRenderDeferredFeatures:Re,versionUpdateEnabled:pe,performancePanelEnabled:G,toolWindowManagerEnabled:X,minimizedToolsBarEnabled:le,enableToolWindows:Ce},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:727,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:726,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:725,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:724,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:723,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:722,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:721,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:720,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:719,columnNumber:5},void 0)},VC=({value:e,viewport:t,theme:n,options:i,plugins:o,containerRef:s,appState:r,board:a,setBoard:c,projectDrawerOpen:u,toolboxDrawerOpen:d,taskPanelExpanded:m,mediaLibraryOpen:f,mediaLibraryConfig:h,backupRestoreOpen:g,deferredRuntimeEnabled:x,shouldRenderDeferredFeatures:b,versionUpdateEnabled:y,performancePanelEnabled:N,toolWindowManagerEnabled:w,minimizedToolsBarEnabled:T,enableToolWindows:S,cloudSyncOpen:v,onChange:E,onSelectionChange:R,onViewportChange:q,onThemeChange:$,onValueChange:V,afterInit:U,onBoardSwitch:A,onTabSyncNeeded:_,handleProjectDrawerToggle:M,handleToolboxDrawerToggle:P,handleKnowledgeBaseToggle:Z,handleTaskPanelToggle:pe,handleOpenMediaLibrary:I,handleOpenBackupRestore:G,handleOpenCloudSync:ce,setProjectDrawerOpen:X,setToolboxDrawerOpen:ae,setMediaLibraryOpen:le,setBackupRestoreOpen:be,setCloudSyncOpen:we,handleBeforeSwitch:Fe,isDataReady:K,onCreateProjectForMemory:Ce,currentBoardId:We})=>{const{setAppState:it}=Gt(),{chatDrawerRef:Ke}=Gg(),{language:D}=Se(),j=Cu(xe=>xe.error),W=Cu(xe=>xe.playing||!!xe.activeAudioUrl||!!xe.activeReadingSourceId),Q=p.useRef(void 0),[C,B]=p.useState(W);Ej({board:a,pointer:r.pointer}),Jg({onSyncNeeded:p.useCallback(()=>{_?_():Ei()},[_]),enabled:!0,currentBoardId:We});const[L,z]=p.useState(!1),[te,ee]=p.useState(null),[O,J]=p.useState(null),oe=p.useRef(null),[Ie,ut]=p.useState(!1),[Re,ie]=p.useState([]),[Ae,Ue]=p.useState(0);p.useEffect(()=>{if(!j){Q.current=void 0;return}j!==Q.current&&(Q.current=j,re.error(j))},[j]),p.useEffect(()=>{W&&B(!0)},[W]),p.useEffect(()=>{xa.setCanvasQueue(Za(e))},[e]),p.useEffect(()=>()=>{xa.stopAndClear()},[]);const _e=p.useCallback(()=>{if(!a||!a.children)return{items:[],elementIds:[]};const xe=[],He=[];for(const Ne of a.children){const Ve=Ne.url;if(!Ve||typeof Ve!="string"||Na(Ne))continue;const ot=H.isDrawElement(Ne)&&H.isImage(Ne),ze=wn(Ne);(ot||ze)&&(xe.push({id:Ne.id,url:Ve,type:ze?"video":"image",title:Ne.name||void 0}),He.push(Ne.id))}return{items:xe,elementIds:He}},[a]),Le=p.useCallback(xe=>{const{items:He,elementIds:Ne}=_e();if(He.length===0)return;const Ve=Ne.indexOf(xe);Ve!==-1&&(ie(He),Ue(Ve),ut(!0))},[_e]),Mt=p.useCallback(()=>{ut(!1)},[]),Dt=p.useCallback(async(xe,He)=>{const Ne=He.id;if(!(!Ne||!a))try{const{unifiedCacheService:Ve}=await Me(async()=>{const{unifiedCacheService:dt}=await import("./tool-windows-Bd5iqcJh.js").then(dn=>dn.oI);return{unifiedCacheService:dt}},__vite__mapDeps([0]),import.meta.url),{Transforms:ot}=await Me(async()=>{const{Transforms:dt}=await import("./tool-windows-Bd5iqcJh.js").then(dn=>dn.oG);return{Transforms:dt}},__vite__mapDeps([0]),import.meta.url),ze=`edited-image-${Date.now()}`,Oe=`/__aitu_cache__/image/${ze}.png`,ht=await(await fetch(xe)).blob();await Ve.cacheMediaFromBlob(Oe,ht,"image",{taskId:ze});const _t=new Image;await new Promise((dt,dn)=>{_t.onload=()=>dt(),_t.onerror=()=>dn(new Error("Failed to load edited image")),_t.src=xe});const Vt=a.children.findIndex(dt=>dt.id===Ne);if(Vt>=0){const dt=a.children[Vt],{newPoints:dn}=await Fp({url:dt.url,width:dt.width,height:dt.height,points:dt.points||[[0,0],[0,0]]},_t.naturalWidth,_t.naturalHeight);ot.setNode(a,{url:Oe,width:_t.naturalWidth,height:_t.naturalHeight,points:dn},[Vt])}}catch(Ve){console.error("Failed to update image:",Ve),re.error("更新失败")}},[a]),It=p.useCallback(async xe=>{if(a)try{const{unifiedCacheService:He}=await Me(async()=>{const{unifiedCacheService:Vt}=await import("./tool-windows-Bd5iqcJh.js").then(dt=>dt.oI);return{unifiedCacheService:Vt}},__vite__mapDeps([0]),import.meta.url),{insertImageFromUrl:Ne}=await Me(async()=>{const{insertImageFromUrl:Vt}=await import("./tool-windows-Bd5iqcJh.js").then(dt=>dt.oM);return{insertImageFromUrl:Vt}},__vite__mapDeps([0]),import.meta.url),Ve=`edited-image-${Date.now()}`,ot=`/__aitu_cache__/image/${Ve}.png`,Oe=await(await fetch(xe)).blob();await He.cacheMediaFromBlob(ot,Oe,"image",{taskId:Ve});const st=new Image;await new Promise((Vt,dt)=>{st.onload=()=>Vt(),st.onerror=()=>dt(new Error("Failed to load edited image")),st.src=xe});const ht=Cr(a),_t=[((ht==null?void 0:ht[0])??0)+100,((ht==null?void 0:ht[1])??0)+100];await Ne(a,ot,_t,!1,{width:st.naturalWidth,height:st.naturalHeight},!1,!0)}catch(He){console.error("Failed to insert image:",He),re.error("插入失败")}},[a]),{state:Bt,selectShape:Ht,closePicker:mi}=rC(a);p.useEffect(()=>{O&&oe.current&&oe.current.focus()},[O]);const Gn=p.useCallback(()=>{if(!a||!O||!oe.current){J(null);return}const xe=oe.current.innerText||"";xe.trim()&&(Ar.insertText(a,O.worldPoint,xe),requestAnimationFrame(()=>{const He=a.children[a.children.length-1];if(H.isText(He)){const Ne=He;if(!isFinite(Ne.textHeight)){const Ve=ge.getRectangleByPoints(Ne.points);ue.setNode(a,{textHeight:Ve.height},[a.children.length-1])}}})),J(null),fe.updatePointerType(a,vt.selection),it(He=>({...He,pointer:vt.selection}))},[a,O,it]);return p.useEffect(()=>{if(!a)return;const xe=Ne=>{const Ve=Ne.target;if(!(Ve.closest(".board-host-svg")||Ve.closest(".plait-board-container")))return;const ze=Ot(a,Ft(a,Ne.clientX,Ne.clientY)),Oe=Ya(a,ze);if(Oe&&Pt(Oe)){ig(a,Oe,D),Ne.preventDefault(),Ne.stopPropagation();return}if(Oe){if(Na(Oe)){Ne.preventDefault(),Ne.stopPropagation();return}const ht=Oe.url;if(ht&&typeof ht=="string"){const _t=H.isDrawElement(Oe)&&H.isImage(Oe),Vt=wn(Oe);if(_t||Vt){Le(Oe.id),Ne.preventDefault(),Ne.stopPropagation();return}}}const st=Ve.closest(".plait-tool-container")||Ve.closest(".plait-workzone-container")||Ve.closest("foreignObject");if(!Oe&&!st){const ht=[Ne.clientX,Ne.clientY];ee(ht),z(!0)}},He=s.current;return He&&He.addEventListener("dblclick",xe),()=>{He&&He.removeEventListener("dblclick",xe)}},[a,s,Le,D]),p.useEffect(()=>{if(!a)return;const xe=Ne=>{const Ve=Ne.target;if(!(Ve.closest(".board-host-svg")||Ve.closest(".plait-board-container")))return;const ze=Ot(a,Ft(a,Ne.clientX,Ne.clientY)),Oe=Ya(a,ze);if(Oe&&Na(Oe)&&!Kn(Oe)){B(!0);const st=ky(Oe);if(st){Ne.preventDefault(),Ne.stopPropagation(),xa.togglePlaybackInQueue(st,Za(a.children),{queueSource:"canvas",queueId:Op,queueName:Lp}).catch(()=>{});return}}if(F.isPointer(a,De.text)&&!(Ve.closest(".plait-tool-container")||Ve.closest(".plait-workzone-container")||Ve.closest("foreignObject"))&&!Oe){J({screenX:Ne.clientX,screenY:Ne.clientY,worldPoint:ze,zoom:a.viewport.zoom}),Ne.preventDefault(),Ne.stopPropagation();return}u&&X(!1),d&&ae(!1)},He=s.current;return He&&He.addEventListener("click",xe),()=>{He&&He.removeEventListener("click",xe)}},[a,s,u,d,X,ae]),l.jsxDEV("div",{className:Y("drawnix",{"drawnix--mobile":r.isMobile}),ref:s,children:l.jsxDEV("div",{className:"drawnix__main",children:[l.jsxDEV(ck,{value:e,viewport:t,theme:n,options:i,plugins:o,onChange:xe=>{E&&E(xe)},onSelectionChange:R,onViewportChange:q,onThemeChange:$,onValueChange:V,children:[l.jsxDEV(sk,{afterInit:xe=>{c(xe),window.__drawnixBoard=xe,Wg.setBoard(xe),U&&U(xe),xe.afterChange&&xe.afterChange()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1413,columnNumber:11},void 0),l.jsxDEV(vP,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1434,columnNumber:11},void 0),l.jsxDEV(T_,{projectDrawerOpen:u,onProjectDrawerToggle:M,toolboxDrawerOpen:d,onToolboxDrawerToggle:P,taskPanelExpanded:m,onTaskPanelToggle:pe,onOpenBackupRestore:G,onOpenCloudSync:ce,onKnowledgeBaseToggle:Z,onOpenMediaLibrary:I,deferredFeaturesEnabled:w,minimizedToolsBarEnabled:T,onEnableToolWindows:S},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1436,columnNumber:11},void 0),C&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(AC,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1453,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1452,columnNumber:13},void 0),l.jsxDEV(HD,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1457,columnNumber:11},void 0),l.jsxDEV(Uj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1458,columnNumber:11},void 0),l.jsxDEV(Nj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1459,columnNumber:11},void 0),l.jsxDEV(kj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1460,columnNumber:11},void 0),l.jsxDEV(Mj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1461,columnNumber:11},void 0),l.jsxDEV(Cj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1462,columnNumber:11},void 0),r.openDialogTypes.size>0&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(jC,{container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1465,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1464,columnNumber:13},void 0),r.openSettings&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(PC,{container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1470,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1469,columnNumber:13},void 0),l.jsxDEV(Ij,{container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1473,columnNumber:11},void 0),l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(kC,{isDataReady:K,activationKey:0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1475,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1474,columnNumber:11},void 0),l.jsxDEV(MP,{position:te,visible:L,onClose:()=>z(!1),onOpenMediaLibrary:I},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1478,columnNumber:11},void 0),O&&l.jsxDEV("div",{ref:oe,contentEditable:!0,suppressContentEditableWarning:!0,style:{position:"fixed",left:O.screenX,top:O.screenY-14*O.zoom/2,minWidth:"2px",minHeight:"1.5em",outline:"none",border:"none",background:"transparent",fontSize:`${14*O.zoom}px`,lineHeight:"1.5",color:"#333",caretColor:"#333",zIndex:1e4,whiteSpace:"pre-wrap",fontFamily:"inherit"},onBlur:Gn,onKeyDown:xe=>{xe.key==="Escape"&&J(null),xe.stopPropagation()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1486,columnNumber:13},void 0),Ie&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(CC,{visible:Ie,items:Re,initialIndex:Ae,onClose:Mt,showThumbnails:!0,useBuiltInEditor:!0,showEditOverwrite:!0,onEditOverwrite:Dt,onEditInsert:It},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1519,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1518,columnNumber:13},void 0),l.jsxDEV(oC,{visible:Bt.visible,position:Bt.position,currentShape:Bt.currentShape||void 0,onSelectShape:Ht,onClose:mi,container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1533,columnNumber:11},void 0),l.jsxDEV(CP,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1542,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1399,columnNumber:9},void 0),l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(TC,{ref:Ke},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1545,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1544,columnNumber:9},void 0),x&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(_C,{board:a,value:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1549,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1548,columnNumber:11},void 0),b&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(DC,{board:a,value:e,containerRef:s,versionUpdateEnabled:y,performancePanelEnabled:N,toolWindowManagerEnabled:w,projectDrawerOpen:u,toolboxDrawerOpen:d,mediaLibraryOpen:f,mediaLibraryConfig:h,backupRestoreOpen:g,cloudSyncOpen:v,onBoardSwitch:A,setProjectDrawerOpen:X,setToolboxDrawerOpen:ae,setMediaLibraryOpen:le,setBackupRestoreOpen:be,setCloudSyncOpen:we,handleBeforeSwitch:Fe,onCreateProjectForMemory:Ce},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1554,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1553,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1398,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1392,columnNumber:5},void 0)},UC="Opentu",RC="Opentu - AI应用平台";function Tr(e){e&&e.trim()?document.title=`${UC} - ${e.trim()}`:document.title=RC}function qC(e){if(!e){Tr();return}const t=Vf.getBoard(e);Tr(t==null?void 0:t.name)}function BC(e,t){return p.useEffect(()=>{qC(e)},[e,t]),p.useEffect(()=>{const i=Vf.observeEvents().subscribe(o=>{if(o.type==="boardUpdated"){const s=o.payload;s&&s.id===e&&Tr(s.name)}});return()=>{i.unsubscribe()}},[e]),{updateTitle:p.useCallback(i=>{Tr(i)},[])}}const nb="main_board_content",ib=zs.createInstance({name:"Drawnix",storeName:Ty,driver:[zs.INDEXEDDB,zs.LOCALSTORAGE]});async function ob(){try{const e=await tl.loadState();return(e==null?void 0:e.migrationCompleted)===!0}catch(e){return console.error("[WorkspaceMigration] Failed to check migration status:",e),!1}}async function Jm(){try{const e=await tl.loadState();e.migrationCompleted=!0,await tl.saveState(e)}catch(e){console.error("[WorkspaceMigration] Failed to mark migration completed:",e)}}async function LC(){try{const e=await ib.getItem(nb);if(e&&e.children&&e.children.length>0)return e;const t=localStorage.getItem(Uf);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 OC(){try{if(await ob())return null;const t=await LC();if(!t||!t.children||t.children.length===0)return await Jm(),null;const n=Nn.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 Jm(),await FC(),i.id):(console.error("[WorkspaceMigration] Failed to create board"),null)}catch(e){return console.error("[WorkspaceMigration] Migration failed:",e),null}}async function FC(){try{await ib.removeItem(nb),localStorage.removeItem(Uf)}catch(e){console.error("[WorkspaceMigration] Failed to clear legacy data:",e)}}function Vo(e){if(!Yt.isAnalyticsEnabled())return;const t=HC(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(()=>{Yt.track("$web_vitals",i)},0)}function HC(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 zC(){try{const e=await Me(()=>import("./web-vitals-DcvjKPr-.js"),[],import.meta.url),{onCLS:t,onFCP:n,onLCP:i,onTTFB:o,onINP:s}=e;t(Vo),n(Vo),i(Vo),o(Vo),s(Vo)}catch(e){console.error("[Web Vitals] Failed to initialize monitoring:",e)}}const hs="page_report",GC="app_page_view";let ep=!1,tp="";function WC(){const e=window.innerWidth;return e<768?"mobile":e<1024?"tablet":"desktop"}const np=200;function $C(){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:WC(),user_agent:e.length>np?e.slice(0,np):e,language:navigator.language,timestamp:Date.now()}}function XC(){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 Oa(){if(!Yt.isAnalyticsEnabled())return;const e=$C();e.page_url!==tp&&(tp=e.page_url,Yt.track(GC,{category:hs,...e}))}function ip(){if(!Yt.isAnalyticsEnabled())return;const e=XC();if(!e){console.warn("[Page Report] Performance data not available");return}Yt.track("page_performance",{category:hs,...e})}function KC(){if(!Yt.isAnalyticsEnabled())return;const e=Math.round(performance.now());Yt.track("page_unload",{category:hs,page_url:window.location.href,page_path:window.location.pathname,time_on_page:e,timestamp:Date.now()})}function YC(){try{if(ep)return;ep=!0,Oa(),document.readyState==="complete"?ip():window.addEventListener("load",()=>{setTimeout(()=>{ip()},0)}),window.addEventListener("beforeunload",()=>{KC()}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?Yt.track("page_hidden",{category:hs,page_url:window.location.href,page_path:window.location.pathname,timestamp:Date.now()}):document.visibilityState==="visible"&&Yt.track("page_visible",{category:hs,page_url:window.location.href,page_path:window.location.pathname,timestamp:Date.now()})}),window.addEventListener("popstate",()=>{setTimeout(()=>{Oa()},100)});const e=history.pushState;history.pushState=function(...t){e.apply(this,t),setTimeout(()=>{Oa()},100)}}catch(e){console.error("[Page Report] Failed to initialize monitoring:",e)}}function op(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 sp(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 ZC(){if(typeof window>"u")return()=>{};const e=i=>{if(i.touches.length>1){const o=i.target;if(op(o))return;sp(o)&&(i.preventDefault(),i.stopPropagation())}},t=i=>{const o=i.target;op(o)||sp(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 Ul=Xr.DB_CLEANUP_DONE;function sb(){let e=0;for(const t of Rf)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 rb(){localStorage.getItem(Ul)||(sb(),localStorage.setItem(Ul,Date.now().toString()))}function QC(){localStorage.removeItem(Ul)}typeof window<"u"&&(window.__dbCleanup={run:rb,reset:QC,cleanupLS:sb,LS_KEYS_DEPRECATED:Rf});const Gc=[{lsKey:jt.PROMPT_HISTORY,idbKey:jt.PROMPT_HISTORY,deleteAfterMigration:!0},{lsKey:jt.VIDEO_PROMPT_HISTORY,idbKey:jt.VIDEO_PROMPT_HISTORY,deleteAfterMigration:!0},{lsKey:jt.PRESET_SETTINGS,idbKey:jt.PRESET_SETTINGS,deleteAfterMigration:!0},{lsKey:jt.BATCH_IMAGE_CACHE,idbKey:jt.BATCH_IMAGE_CACHE,deleteAfterMigration:!0},{lsKey:jt.RECENT_TEXT_COLORS,idbKey:jt.RECENT_TEXT_COLORS,deleteAfterMigration:!0},{lsKey:jt.CUSTOM_GRADIENTS,idbKey:jt.CUSTOM_GRADIENTS,deleteAfterMigration:!0},{lsKey:jt.CUSTOM_FONTS,idbKey:jt.CUSTOM_FONTS,deleteAfterMigration:!0},{lsKey:jt.TOOLBAR_CONFIG,idbKey:jt.TOOLBAR_CONFIG,deleteAfterMigration:!0}];function Wc(){try{return localStorage.getItem(Xr.LS_TO_IDB_MIGRATION_DONE)!==null}catch{return!1}}function JC(){try{localStorage.setItem(Xr.LS_TO_IDB_MIGRATION_DONE,Date.now().toString())}catch(e){console.error("[StorageMigration] Failed to mark migration done:",e)}}function e2(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 rp(e){try{localStorage.removeItem(e)}catch(t){console.warn(`[StorageMigration] Failed to delete ${e} from LocalStorage:`,t)}}async function t2(e){const{lsKey:t,idbKey:n,deleteAfterMigration:i}=e;try{const o=e2(t);return o===null?{key:t,success:!0}:await Sn.get(n)!==null?(i&&rp(t),{key:t,success:!0}):(await Sn.set(n,o),await Sn.get(n)===null?{key:t,success:!1,error:"Verification failed: data not found after write"}:(i&&rp(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 ab(){if(!Sn.isAvailable())return console.warn("[StorageMigration] IndexedDB not available, skipping migration"),[];if(Wc())return[];const e=[];for(const n of Gc){const i=await t2(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&&JC(),e}function lb(){try{localStorage.removeItem(Xr.LS_TO_IDB_MIGRATION_DONE)}catch(e){console.error("[StorageMigration] Failed to reset migration status:",e)}}const n2={isMigrationDone:Wc,runMigration:ab,resetMigration:lb,MIGRATION_CONFIGS:Gc};typeof window<"u"&&(window.__storageMigration={run:ab,reset:lb,isDone:Wc,configs:Gc});const Xt={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 i2{constructor(){this.state={crashDetected:!1,crashCount:0,isSafeMode:!1,crashHistory:[]}}markLoadingStart(){try{localStorage.getItem(Xt.LOADING_STATE)==="loading"&&(this.state.crashDetected=!0,this.incrementCrashCount(),this.recordCrash()),localStorage.setItem(Xt.LOADING_STATE,"loading"),this.state.isSafeMode=localStorage.getItem(Xt.SAFE_MODE)==="true",this.loadCrashHistory()}catch(t){console.warn("[CrashRecovery] Failed to mark loading start:",t)}}markLoadingComplete(){try{localStorage.setItem(Xt.LOADING_STATE,"complete"),localStorage.setItem(Xt.LAST_SUCCESS_LOAD,Date.now().toString()),this.state.isSafeMode||(localStorage.setItem(Xt.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(Xt.CRASH_COUNT)||"0",10);this.state.crashCount=t+1,localStorage.setItem(Xt.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(Xt.CRASH_HISTORY);t&&(this.state.crashHistory=JSON.parse(t))}catch{this.state.crashHistory=[]}}saveCrashHistory(){try{localStorage.setItem(Xt.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(Xt.SAFE_MODE,"true"),this.state.isSafeMode=!0}catch{}}disableSafeMode(){try{localStorage.removeItem(Xt.SAFE_MODE),this.state.isSafeMode=!1,localStorage.setItem(Xt.CRASH_COUNT,"0"),this.state.crashCount=0}catch{}}clearCrashState(){try{localStorage.setItem(Xt.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 Kt=new i2,o2=3e4,s2=800,r2=.6,a2=3,$c="aitu_last_snapshot",l2=50,Ko=[],c2=20,u2=2e3;let Yo=null;const ap=3e3,d2=1e4,m2=200,p2=5e3,f2=10,h2=5e3,g2=30,b2=20,lp=20,x2=100,N2=30,y2=240;let cp=null,up=!1,dp=null,mp=null,Fa=null,Ha=0,wi=60,Go=!1,za=!1;const ti=[],ni=[],fn=[];function w2(e){const t=qt(),n=Date.now();return()=>{const i=qt();if(!t||!i)return;const o=(i.usedJSHeapSize-t.usedJSHeapSize)/(1024*1024),s=Date.now()-n;if(Math.abs(o)>=l2){const r=o>=0?"+":"";console.warn(`[MemoryLog] ${e}: ${r}${o.toFixed(0)} MB (${s}ms)`)}}}function hn(e){if(e)return e.slice(0,y2)}function v2(){return"0.6.71"}function E2(){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:hn(e.scriptURL),state:e.state}:null,readyState:document.readyState,visibilityState:document.visibilityState}}function S2(){const e=Array.from(document.scripts).map(i=>hn(Un(i.src))).filter(Boolean).slice(-8),t=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).map(i=>hn(Un(i.href))).filter(Boolean).slice(-8),n=Array.from(document.querySelectorAll('link[rel="modulepreload"]')).map(i=>hn(Un(i.href))).filter(Boolean).slice(-8);return{scripts:e,stylesheets:t,modulePreloads:n}}function cb(e){if(!(e instanceof HTMLElement))return;const t=e;return{tagName:e.tagName.toLowerCase(),id:hn(e.id||void 0),className:typeof e.className=="string"?hn(e.className):void 0,src:hn(t.currentSrc||t.src?Un(t.currentSrc||t.src||""):void 0),href:hn(t.href?Un(t.href):void 0),rel:hn(t.rel),crossOrigin:hn(t.crossOrigin||void 0)}}function Rl(e){return{appVersion:v2(),recentActions:ti.slice(-10),recentErrors:ni.slice(-5),recentNetworkErrors:fn.slice(-5),serviceWorker:E2(),loadedResources:S2(),...e}}function qt(){if(typeof performance<"u"&&"memory"in performance){const e=performance.memory;return{usedJSHeapSize:e.usedJSHeapSize,totalJSHeapSize:e.totalJSHeapSize,jsHeapSizeLimit:e.jsHeapSizeLimit}}}function go(){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 ub(){if(!bt.isInitialized()||Ko.length===0)return;const e=Ko.splice(0,Ko.length);for(const t of e)bt.reportCrashSnapshot(t).catch(()=>{});Yo&&(clearInterval(Yo),Yo=null)}function k2(){Yo||(Yo=setInterval(()=>{bt.isInitialized()&&ub()},u2))}function tn(e){try{bt.isInitialized()?(ub(),bt.reportCrashSnapshot(e).catch(()=>{})):Ko.length<c2&&(Ko.push(e),k2())}catch(t){console.warn("[MemoryLog] Failed to send snapshot to SW:",t)}}function T2(e){try{localStorage.setItem($c,JSON.stringify(e))}catch{}}function D2(){try{const e=localStorage.getItem($c);if(e)return JSON.parse(e)}catch{}return null}function _2(){try{localStorage.removeItem($c)}catch{}}function j2(){const e={id:`startup-${Date.now()}`,timestamp:Date.now(),type:"startup",userAgent:navigator.userAgent,url:location.href,memory:qt()};tn(e)}function P2(){if(cp!==null)return;let e=0;cp=window.setInterval(()=>{const t=qt();if(!t)return;const n=t.usedJSHeapSize/(1024*1024),i=t.jsHeapSizeLimit/(1024*1024),o=n/i;if(n>s2||o>r2){e++;const a=e>=a2?go():void 0,c={id:`periodic-${Date.now()}`,timestamp:Date.now(),type:"periodic",memory:t,pageStats:a,userAgent:navigator.userAgent,url:location.href};tn(c)}else e=0},o2)}function C2(){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:qt(),userAgent:navigator.userAgent,url:location.href,customData:Rl({filename:e.filename,lineno:e.lineno,colno:e.colno,eventTarget:cb(e.target)})};tn(t),console.error("[MemoryLog] Uncaught error captured:",e.message)}),window.addEventListener("unhandledrejection",e=>{const t=e.reason,n=(t==null?void 0:t.message)||String(t)||"",i=(t==null?void 0:t.stack)||"";if(t instanceof DOMException&&(t.name==="AbortError"||t.name==="NotAllowedError"||t.name==="DataError"&&n.includes("No key or key range specified"))||n.includes("posthog.com")||n.includes("sentry.io")||i.includes("posthog")||i.includes("sentry"))return;const o={id:`rejection-${Date.now()}`,timestamp:Date.now(),type:"error",error:{message:n||"Unhandled Promise rejection",stack:i,type:"unhandledRejection"},memory:qt(),userAgent:navigator.userAgent,url:location.href,customData:Rl()};tn(o),console.error("[MemoryLog] Unhandled rejection captured:",t)}),window.addEventListener("beforeunload",()=>{const e=qt();if(e){const t={id:`beforeunload-${Date.now()}`,timestamp:Date.now(),type:"beforeunload",memory:e,userAgent:navigator.userAgent,url:location.href};T2(t),tn(t)}})}function A2(){if(dp!==null)return;let e=Date.now();document.addEventListener("visibilitychange",()=>{document.hidden?za=!0:(e=Date.now(),setTimeout(()=>{za=!1},ap+100))}),dp=window.setInterval(()=>{const t=Date.now(),n=t-e;if(n>d2&&!za&&!document.hidden){const i={id:`freeze-${Date.now()}`,timestamp:Date.now(),type:"freeze",memory:qt(),pageStats:go(),performance:{freezeDuration:n,lastHeartbeat:e,fps:wi},userAgent:navigator.userAgent,url:location.href,customData:{recentActions:ti.slice(-10),recentErrors:ni.slice(-5),recentNetworkErrors:fn.slice(-5)}};tn(i)}e=t,bt.isInitialized()&&bt.sendHeartbeat(t).catch(()=>{})},ap)}function M2(){if(Fa===null&&!(typeof PerformanceObserver>"u"))try{Fa=new PerformanceObserver(e=>{for(const t of e.getEntries())if(t.duration>m2){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:qt(),performance:{longTaskDuration:t.duration,fps:wi},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"}};tn(s)}}),Fa.observe({entryTypes:["longtask"]})}catch{}}function I2(){if(mp!==null)return;let e=0;const t=()=>{if(e++,e>=N2){const n=performance.now(),i=n-Ha;i>0&&(wi=Math.round(e*1e3/i)),e=0,Ha=n}requestAnimationFrame(t)};Ha=performance.now(),requestAnimationFrame(t),mp=window.setInterval(()=>{if(wi<f2&&wi>0){const n={id:`lowfps-${Date.now()}`,timestamp:Date.now(),type:"freeze",memory:qt(),performance:{fps:wi},userAgent:navigator.userAgent,url:location.href};tn(n)}},p2)}function V2(){setTimeout(()=>{pp()},h2),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&!Go&&setTimeout(pp,1e3)})}function pp(){if(Go)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){Go=!0;const o={id:`whitescreen-${Date.now()}`,timestamp:Date.now(),type:"whitescreen",memory:qt(),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}};tn(o),console.error("[MemoryLog] 白屏检测: React 未渲染内容")}t&&!i&&location.pathname==="/"&&setTimeout(()=>{if(!document.querySelector(".plait-board-container")&&!Go){Go=!0;const o={id:`whitescreen-noboard-${Date.now()}`,timestamp:Date.now(),type:"whitescreen",memory:qt(),pageStats:go(),userAgent:navigator.userAgent,url:location.href,customData:{reason:"画板未加载",rootChildCount:(e==null?void 0:e.children.length)||0}};tn(o),console.error("[MemoryLog] 白屏检测: 画板组件未加载")}},5e3)}function Wo(e,t,n){ti.push({time:Date.now(),action:e,target:t,detail:n}),ti.length>g2&&ti.shift()}function U2(){let e=0;document.addEventListener("click",t=>{const n=Date.now();if(n-e<x2)return;e=n;const i=t.target;if(!i)return;const o=()=>{var a,c,u,d,m,f,h,g,x,b,y,N,w,T,S;let s="";const r=(c=(a=i.closest)==null?void 0:a.call(i,"[data-track]"))==null?void 0:c.getAttribute("data-track");if(r)s=r;else if(i.tagName==="BUTTON"||(u=i.closest)!=null&&u.call(i,"button")){const v=((d=i.closest)==null?void 0:d.call(i,"button"))||i,E=(m=v.textContent)==null?void 0:m.trim().slice(0,20),R=(x=(g=(h=(f=v.className)==null?void 0:f.split)==null?void 0:h.call(f," "))==null?void 0:g[0])==null?void 0:x.slice(0,20);s=`btn:${E||R||"unknown"}`}else if(i.tagName==="A")s=`link:${((b=i.pathname)==null?void 0:b.slice(0,30))||""}`;else if(i.tagName==="INPUT"||i.tagName==="TEXTAREA"){const v=i;s=`input:${v.name||v.type||((y=v.placeholder)==null?void 0:y.slice(0,15))||""}`}else if(i.id)s=`#${i.id}`;else{const v=(T=(w=(N=i.className)==null?void 0:N.split)==null?void 0:w.call(N," "))==null?void 0:T[0];s=v?`.${v.slice(0,20)}`:((S=i.tagName)==null?void 0:S.toLowerCase())||"unknown"}Wo("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),Wo("shortcut",n.join("+"))}},{capture:!0,passive:!0}),window.addEventListener("popstate",()=>{Wo("navigate",location.pathname)}),window.addEventListener("hashchange",()=>{Wo("navigate",location.hash)})}function R2(){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,a=Un(s).slice(0,300);fn.push({time:Date.now(),url:a,method:(n==null?void 0:n.method)||"GET",status:o.status,statusText:o.statusText,duration:r}),fn.length>lp&&fn.shift()}return o}catch(o){const s=typeof t=="string"?t:t.url,r=Date.now()-i,a=Un(s).slice(0,300);throw fn.push({time:Date.now(),url:a,method:(n==null?void 0:n.method)||"GET",error:o.message,duration:r}),fn.length>lp&&fn.shift(),o}}}function q2(){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();Wo("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:qt(),userAgent:navigator.userAgent,url:location.href,customData:Rl({resourceUrl:hn(i?Un(i):void 0),eventTarget:cb(t)})};tn(s)}},{capture:!0})}function B2(){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 a=0;a<Math.min(i.length,5);a++){const c=i[a];if(typeof c=="string")o+=c+" ";else if(typeof c=="number"||typeof c=="boolean")o+=String(c)+" ";else if(c instanceof Error)o+=`Error: ${c.message} `,s=c.stack;else if(c&&typeof c=="object")try{const d=Object.keys(c).slice(0,5).map(m=>{const f=c[m];return`${m}:${typeof f=="string"?f.slice(0,20):typeof f}`}).join(",");o+=`{${d}} `}catch{o+=`[${((r=c.constructor)==null?void 0:r.name)||"Object"}] `}}ni.push({time:Date.now(),message:o.trim().slice(0,500),stack:s}),ni.length>b2&&ni.shift()},0)}}function db(){return{userActions:[...ti],consoleErrors:[...ni],networkErrors:[...fn],memory:qt(),pageStats:go(),fps:wi}}function L2(){typeof window>"u"||(window.__memoryLog={getMemory:()=>{const e=qt();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:w2,diagnose:()=>{const e=qt(),t=go();if(console.group("[MemoryLog] 内存诊断"),e){const n=e.usedJSHeapSize/1048576,i=e.jsHeapSizeLimit/(1024*1024),o=n/i*100;console.log(`内存: ${n.toFixed(0)} MB / ${i.toFixed(0)} MB (${o.toFixed(1)}%)`)}return console.log(`页面: DOM ${t.domNodeCount} | Canvas ${t.canvasCount} | Img ${t.imageCount} | Video ${t.videoCount}`),t.plaitElementCount!==void 0&&console.log(`Plait 元素: ${t.plaitElementCount}`),t.imageCount>50&&console.warn("图片较多,考虑懒加载"),t.domNodeCount>5e3&&console.warn("DOM 节点较多"),console.groupEnd(),{memory:e,pageStats:t}},snapshot:()=>{const e={id:`manual-${Date.now()}`,timestamp:Date.now(),type:"periodic",memory:qt(),pageStats:go(),userAgent:navigator.userAgent,url:location.href};tn(e)},getDiagnostics:db,getActions:()=>(console.table(ti.map(e=>({time:new Date(e.time).toLocaleTimeString("zh-CN"),action:e.action,target:e.target,detail:e.detail}))),ti),getNetworkErrors:()=>(console.table(fn.map(e=>({time:new Date(e.time).toLocaleTimeString("zh-CN"),url:e.url,status:e.status,error:e.error}))),fn),getConsoleErrors:()=>(console.table(ni.map(e=>({time:new Date(e.time).toLocaleTimeString("zh-CN"),message:e.message.slice(0,100)}))),ni)})}function O2(){if(up)return;up=!0,j2(),C2(),P2(),A2(),M2(),I2(),V2(),U2(),R2(),q2(),B2(),L2();const e=D2();e&&(e.customData={...e.customData,recovered:!0,recoveredAt:Date.now()},tn(e),_2())}function ql(e,t){try{const n=F2(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),a=document.createElement("a");a.href=s,a.download=`opentu-error-log-${r}.json`,a.style.display="none",document.body.appendChild(a),a.click(),setTimeout(()=>{document.body.removeChild(a),URL.revokeObjectURL(s)},100)}catch(n){console.error("[ErrorLogExporter] Failed to export:",n)}}function F2(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:Kt.getState(),diagnostics:db(),unifiedLogs:Dy.getMemoryLogs()};return e&&(n.currentError={message:e.message,stack:e.stack,componentStack:(t==null?void 0:t.componentStack)??void 0}),n}const H2="aitu:lazy-chunk-retry",z2="_lazy_chunk_retry",G2="_t",W2=[/Failed to fetch dynamically imported module/i,/Importing a module script failed/i,/Loading chunk [\w-]+ failed/i,/ChunkLoadError/i];function $2(){var e;return typeof document>"u"?"unknown":((e=document.querySelector('meta[name="app-version"]'))==null?void 0:e.getAttribute("content"))||"unknown"}function mb(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(`
|
|
66
|
+
</svg>`;return`url('data:image/svg+xml;base64,${btoa(r)}') ${o} ${o}, crosshair`}function Bm(e,t,n=Rt.circle){return n===Rt.square?vj(e,t):wj(e,t)}function Ug(e){return lc().includes(e)&&e!==rt.eraser}function Rg(e){return e===rt.eraser}function Xo(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=si(e),s=((r=e.viewport)==null?void 0:r.zoom)||1;if(Ug(t)){const a=o.strokeWidth*s,c=Bm(o.strokeColor,a,o.pencilShape);i.style.cursor=c}else if(Rg(t)){const a=o.eraserWidth*s,c=Bm(yj,a,o.eraserShape);i.style.cursor=c}else t===De.text?i.style.cursor="crosshair":i.style.cursor=""}function Ej({board:e,pointer:t}){const n=p.useRef(1),i=p.useRef(null);return p.useEffect(()=>{var r;if(!e)return;Xo(e,t),n.current=((r=e.viewport)==null?void 0:r.zoom)||1;let s=null;return(Ug(t)||Rg(t))&&(s=setInterval(()=>{var c;const a=((c=e.viewport)==null?void 0:c.zoom)||1;Math.abs(a-n.current)>.01&&(n.current=a,Xo(e,t))},100)),()=>{s&&clearInterval(s),i.current&&cancelAnimationFrame(i.current);const a=document.querySelector(".plait-board-container"),c=a==null?void 0:a.querySelector(".board-host-svg");c&&(c.style.cursor="")}},[e,t]),{updateCursor:p.useCallback(()=>{e&&Xo(e,t)},[e,t])}}function Bs(e,t){Xo(e,t)}function Lm(e){Xo(e,rt.eraser)}const Sj=({color:e,size:t,zoom:n,shape:i=Rt.circle})=>{const o=t*n,s=Math.max(4,Math.min(256,o)),r=i===Rt.circle?"50%":"0";return l.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:55,columnNumber:5},void 0)},kj=()=>{var pe;const e=xt(),{appState:t}=Gt(),{t:n}=Se(),i=p.useRef(null);zr(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const o=si(e),[s,r]=p.useState(o.strokeWidth),[a,c]=p.useState(o.strokeColor),[u,d]=p.useState(o.strokeStyle),[m,f]=p.useState(o.pencilShape),[h,g]=p.useState(o.pressureEnabled),[x,b]=p.useState(!1),[y,N]=p.useState(!1),[w,T]=p.useState(String(o.strokeWidth)),[S,v]=p.useState(!1),R=lc().includes(t.pointer)&&t.pointer!==rt.eraser;p.useEffect(()=>{const I=si(e);r(I.strokeWidth),c(I.strokeColor),d(I.strokeStyle),f(I.pencilShape),g(I.pressureEnabled),T(String(I.strokeWidth))},[e,t.pointer]);const q=p.useCallback(I=>{T(I.target.value)},[]),$=p.useCallback(()=>{const I=parseInt(w,10);!isNaN(I)&&I>=1&&I<=100?(r(I),_u(e,I),Bs(e,t.pointer)):T(String(s))},[e,w,s,t.pointer]),V=p.useCallback(I=>{I.key==="Enter"?($(),I.target.blur()):I.key==="Escape"&&(T(String(s)),I.target.blur())},[$,s]),U=p.useCallback(I=>{c(I),PN(e,I),Bs(e,t.pointer)},[e,t.pointer]),A=p.useCallback(I=>{d(I),CN(e,I)},[e]),_=p.useCallback(I=>{f(I),AN(e,I),Bs(e,t.pointer)},[e,t.pointer]),M=p.useCallback(I=>{g(I),MN(e,I)},[e]);if(!R)return null;const P=F.getBoardContainer(e),Z=((pe=e.viewport)==null?void 0:pe.zoom)??1;return l.jsxDEV("div",{className:"pencil-settings-toolbar",onMouseEnter:()=>v(!0),onMouseLeave:()=>v(!1),children:[S&&l.jsxDEV(Sj,{color:a||ju,size:s,zoom:Z,shape:m},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:207,columnNumber:9},void 0),l.jsxDEV(Ye,{ref:i,padding:1,children:l.jsxDEV(ft.Row,{gap:0,align:"center",children:[l.jsxDEV(at,{sideOffset:12,open:x,onOpenChange:b,placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:"pencil-color-button",type:"button",visible:!0,tooltip:n("toolbar.strokeColor"),"aria-label":n("toolbar.strokeColor"),onPointerUp:()=>b(!x),children:l.jsxDEV("div",{className:"pencil-color-preview",style:{backgroundColor:a||ju}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:232,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:224,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:223,columnNumber:13},void 0),l.jsxDEV(ct,{container:P,children:l.jsxDEV(Ye,{padding:4,className:Y("stroke-setting"),children:l.jsxDEV(Di,{value:a,onChange:U},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:240,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:239,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:238,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:217,columnNumber:11},void 0),l.jsxDEV("div",{className:"pencil-stroke-style-picker",children:[l.jsxDEV(ne,{className:Y("pencil-stroke-style-button",{active:u===yn.solid}),type:"button",visible:!0,icon:l.jsxDEV(jp,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:256,columnNumber:21},void 0),tooltip:"实线","aria-label":"实线",onPointerUp:()=>A(yn.solid)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:250,columnNumber:13},void 0),l.jsxDEV(ne,{className:Y("pencil-stroke-style-button",{active:u===yn.dashed}),type:"button",visible:!0,icon:l.jsxDEV(Pp,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:269,columnNumber:21},void 0),tooltip:"虚线","aria-label":"虚线",onPointerUp:()=>A(yn.dashed)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:263,columnNumber:13},void 0),l.jsxDEV(ne,{className:Y("pencil-stroke-style-button",{active:u===yn.dotted}),type:"button",visible:!0,icon:l.jsxDEV(Cp,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:282,columnNumber:21},void 0),tooltip:"点线","aria-label":"点线",onPointerUp:()=>A(yn.dotted)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:276,columnNumber:13},void 0),l.jsxDEV(ne,{className:Y("pencil-stroke-style-button",{active:u===yn.double}),type:"button",visible:!0,icon:l.jsxDEV(IN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:295,columnNumber:21},void 0),tooltip:"双层线","aria-label":"双层线",onPointerUp:()=>A(yn.double)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:289,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:249,columnNumber:11},void 0),l.jsxDEV("div",{className:"pencil-shape-picker",children:[l.jsxDEV(Tt,{content:n("toolbar.pencilShape.circle"),children:l.jsxDEV(cr,{variant:"text",size:"small",className:`pencil-shape-button ${m===Rt.circle?"active":""}`,onClick:()=>_(Rt.circle),children:l.jsxDEV(_f,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:315,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:307,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:306,columnNumber:13},void 0),l.jsxDEV(Tt,{content:n("toolbar.pencilShape.square"),children:l.jsxDEV(cr,{variant:"text",size:"small",className:`pencil-shape-button ${m===Rt.square?"active":""}`,onClick:()=>_(Rt.square),children:l.jsxDEV(jf,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:327,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:319,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:318,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:305,columnNumber:11},void 0),l.jsxDEV(at,{sideOffset:12,open:y,onOpenChange:N,placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:"pencil-width-button",type:"button",visible:!0,tooltip:n("toolbar.strokeWidth"),"aria-label":n("toolbar.strokeWidth"),onPointerUp:()=>N(!y),children:l.jsxDEV("svg",{className:"pencil-width-icon",viewBox:"0 0 24 24",children:[l.jsxDEV("line",{x1:"4",y1:"8",x2:"20",y2:"8",strokeWidth:"1",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:349,columnNumber:19},void 0),l.jsxDEV("line",{x1:"4",y1:"12",x2:"20",y2:"12",strokeWidth:"2",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:357,columnNumber:19},void 0),l.jsxDEV("line",{x1:"4",y1:"16",x2:"20",y2:"16",strokeWidth:"3",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:365,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:348,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:340,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:339,columnNumber:13},void 0),l.jsxDEV(ct,{container:P,children:l.jsxDEV(Ye,{padding:4,className:Y("stroke-width-picker"),children:l.jsxDEV(ft.Row,{gap:3,align:"center",style:{padding:"4px 8px"},children:[l.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:383,columnNumber:19},void 0),l.jsxDEV("div",{className:"stroke-width-slider-wrapper",style:{flex:1,minWidth:"160px"},children:l.jsxDEV(Mr,{value:s,min:1,max:100,step:1,onChange:I=>{const G=I;r(G),T(String(G)),_u(e,G),Bs(e,t.pointer)},label:!1},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:398,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:394,columnNumber:19},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:378,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:377,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:376,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:333,columnNumber:11},void 0),l.jsxDEV("div",{className:"pencil-width-input-wrapper",children:[l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:w,onChange:q,onBlur:$,onKeyDown:V,className:"pencil-width-input"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:420,columnNumber:13},void 0),l.jsxDEV("span",{className:"pencil-width-input-unit",children:"px"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:430,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:419,columnNumber:11},void 0),l.jsxDEV(Tt,{content:"压力感应:支持压感笔;鼠标/触控板使用速度模拟(慢=粗,快=细)",children:l.jsxDEV("div",{className:"pencil-pressure-switch",children:l.jsxDEV(VN,{size:"small",value:h,onChange:M},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:436,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:435,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:434,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:215,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:214,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/pencil-settings-toolbar.tsx",lineNumber:200,columnNumber:5},void 0)},Tj=({color:e,size:t,zoom:n,shape:i=Rt.circle})=>{const o=t*n,s=Math.max(4,Math.min(256,o)),r=i===Rt.circle?"50%":"0";return l.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)},Dj=()=>l.jsxDEV("svg",{className:"size-picker-icon",viewBox:"0 0 24 24",children:[l.jsxDEV("line",{x1:"4",y1:"8",x2:"20",y2:"8",strokeWidth:"1",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:36,columnNumber:5},void 0),l.jsxDEV("line",{x1:"4",y1:"12",x2:"20",y2:"12",strokeWidth:"2",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:37,columnNumber:5},void 0),l.jsxDEV("line",{x1:"4",y1:"16",x2:"20",y2:"16",strokeWidth:"3",stroke:"currentColor"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:38,columnNumber:5},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:35,columnNumber:3},void 0),_j=({size:e,onSizeChange:t,presets:n,previewColor:i,title:o,container:s,icon:r})=>{const{t:a}=Se(),[c,u]=p.useState(!1),[d,m]=p.useState(String(e));Fn.useEffect(()=>{m(String(e))},[e]);const f=p.useCallback(x=>{m(x.target.value)},[]),h=p.useCallback(()=>{const x=parseInt(d,10);!isNaN(x)&&x>=1?t(x):m(String(e))},[d,e,t]),g=p.useCallback(x=>{x.key==="Enter"?(h(),x.target.blur()):x.key==="Escape"&&(m(String(e)),x.target.blur())},[h,e]);return l.jsxDEV(l.Fragment,{children:[l.jsxDEV(at,{sideOffset:12,open:c,onOpenChange:u,placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV(ne,{className:"size-picker-button",type:"button",visible:!0,tooltip:o,"aria-label":o,onPointerUp:()=>u(!c),children:r||l.jsxDEV(Dj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:104,columnNumber:22},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:96,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:95,columnNumber:9},void 0),l.jsxDEV(ct,{container:s,children:l.jsxDEV(Ye,{padding:4,className:Y("size-picker-popover"),children:l.jsxDEV(ft.Row,{gap:3,align:"center",style:{padding:"4px 8px"},children:[l.jsxDEV("div",{className:"size-picker-value",style:{minWidth:"40px",fontSize:"13px",fontWeight:500,color:"var(--color-on-surface)"},children:[e,"px"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:113,columnNumber:15},void 0),l.jsxDEV("div",{className:"size-picker-slider-wrapper",style:{flex:1,minWidth:"160px"},children:l.jsxDEV(Mr,{value:e,min:1,max:Math.max(256,...n),step:1,onChange:x=>{const b=x;m(String(b)),t(b)},label:!1},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:117,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:116,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:112,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:108,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:107,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:89,columnNumber:7},void 0),l.jsxDEV("div",{className:"size-picker-input-wrapper",children:[l.jsxDEV("input",{type:"text",inputMode:"numeric",pattern:"[0-9]*",value:d,onChange:f,onBlur:h,onKeyDown:g,className:"size-picker-input"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:137,columnNumber:9},void 0),l.jsxDEV("span",{className:"size-picker-input-unit",children:"px"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:147,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:136,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/size-picker.tsx",lineNumber:87,columnNumber:5},void 0)},jj=[16,32,48,64,96,128,192,256],Pj="#f5f5f5",Cj=()=>{var b;const e=xt(),{appState:t}=Gt(),{t:n}=Se(),i=p.useRef(null);zr(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const o=si(e),[s,r]=p.useState(o.eraserWidth),[a,c]=p.useState(o.eraserShape),[u,d]=p.useState(!1),m=t.pointer===rt.eraser;p.useEffect(()=>{const y=si(e);r(y.eraserWidth),c(y.eraserShape)},[e,t.pointer]);const f=p.useCallback(y=>{r(y),UN(e,y),Lm(e)},[e]),h=p.useCallback(y=>{c(y),RN(e,y),Lm(e)},[e]);if(!m)return null;const g=F.getBoardContainer(e),x=((b=e.viewport)==null?void 0:b.zoom)??1;return l.jsxDEV("div",{className:"pencil-settings-toolbar eraser-settings-toolbar",onMouseEnter:()=>d(!0),onMouseLeave:()=>d(!1),children:[u&&l.jsxDEV(Tj,{color:Pj,size:s,zoom:x,shape:a},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:106,columnNumber:9},void 0),l.jsxDEV(Ye,{ref:i,padding:1,children:l.jsxDEV(ft.Row,{gap:1,align:"center",children:[l.jsxDEV(_j,{size:s,onSizeChange:f,presets:jj,previewColor:"#999",title:n("toolbar.eraserSize"),container:g},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:115,columnNumber:11},void 0),l.jsxDEV("div",{className:"toolbar-divider"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:124,columnNumber:11},void 0),l.jsxDEV("div",{className:"eraser-shape-picker",children:[l.jsxDEV(Tt,{content:n("toolbar.eraserShape.circle"),children:l.jsxDEV(cr,{variant:"text",size:"small",className:`eraser-shape-button ${a===Rt.circle?"active":""}`,onClick:()=>h(Rt.circle),children:l.jsxDEV(_f,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:136,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:128,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:127,columnNumber:13},void 0),l.jsxDEV(Tt,{content:n("toolbar.eraserShape.square"),children:l.jsxDEV(cr,{variant:"text",size:"small",className:`eraser-shape-button ${a===Rt.square?"active":""}`,onClick:()=>h(Rt.square),children:l.jsxDEV(jf,{size:16},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:148,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:140,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:139,columnNumber:13},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:126,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:114,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:113,columnNumber:7},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pencil-settings-toolbar/eraser-settings-toolbar.tsx",lineNumber:99,columnNumber:5},void 0)},Aj=[{icon:l.jsxDEV(BN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:37,columnNumber:11},void 0),type:"corner",titleKey:"toolbar.anchorCorner"},{icon:l.jsxDEV(LN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:42,columnNumber:11},void 0),type:"smooth",titleKey:"toolbar.anchorSmooth"},{icon:l.jsxDEV(ON,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:47,columnNumber:11},void 0),type:"symmetric",titleKey:"toolbar.anchorSymmetric"}],Mj=()=>{const e=xt(),{appState:t}=Gt(),{t:n}=Se(),i=p.useRef(null);zr(i,{enablePositionTracking:!0,enableScaleCompensation:!0});const o=Qa(e),[s,r]=p.useState(o.defaultAnchorType),a=t.pointer===Bn.pen&&e.pointer===Bn.pen;p.useEffect(()=>{const u=Qa(e);r(u.defaultAnchorType)},[e,t.pointer,e.pointer]);const c=p.useCallback(u=>{r(u),qN(e,u)},[e]);return a?l.jsxDEV("div",{className:"pen-settings-toolbar",children:l.jsxDEV(Ye,{ref:i,padding:1,children:l.jsxDEV(ft.Row,{gap:0,align:"center",children:l.jsxDEV("div",{className:"pen-anchor-type-picker",children:Aj.map(u=>l.jsxDEV(ne,{className:Y("pen-anchor-type-button",{active:s===u.type}),type:"button",visible:!0,icon:u.icon,tooltip:n(u.titleKey),"aria-label":n(u.titleKey),onPointerUp:()=>c(u.type)},u.type,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:101,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:99,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:97,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:93,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/pen-settings-toolbar/pen-settings-toolbar.tsx",lineNumber:92,columnNumber:5},void 0):null},Ij=({container:e})=>{const{appState:t,setAppState:n}=Gt(),{t:i}=Se(),o=xt();return l.jsxDEV(FN,{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)},Om=e=>{const{appState:t}=e;return t&&t.linkState&&t.linkState.isHovering},Fm=e=>{const{appState:t}=e;return t&&t.linkState&&t.linkState.isEditing},Vj=e=>n=>{const{pointerMove:i}=n;let o=null,s=null;return n.pointerMove=r=>{(F.isPointer(n,vt.selection)||F.isPointer(n,vt.hand))&&!ns(n)&&!kp(n)&&!Om(n)&&!Fm(n)&&Jl(n,"with-text-link",()=>{const a=r.target.closest(".plait-board-link");if(a&&a!==o){const c=a.closest(".plait-text-container"),u=En.toSlateNode(void 0,c),d=En.toSlateNode(void 0,a);o=a,e({linkState:{targetDom:a,targetElement:d,editor:u,isEditing:!1,isHovering:!1,isHoveringOrigin:!0}}),clearTimeout(s)}else!a&&o&&(s=setTimeout(()=>{!Om(n)&&!Fm(n)&&e({linkState:null})},300),o=null)}),i(r)},n},Uj=()=>{var b,y,N,w;const[e,t]=p.useState(""),{appState:n,setAppState:i}=Gt(),o=xt(),{refs:s,floatingStyles:r}=Wl({placement:"top",middleware:[$l(20),Xl()]}),a=n.linkState,c=((b=n.linkState)==null?void 0:b.targetDom)||null,u=((y=n.linkState)==null?void 0:y.isEditing)||!1,d=((N=n.linkState)==null?void 0:N.isHoveringOrigin)||!1,m=((w=n.linkState)==null?void 0:w.isHovering)||!1,f=u||d||m,h=p.useRef(n.linkState);p.useEffect(()=>{h.current=n.linkState,n.linkState?t(n.linkState.targetElement.url):t("")},[n.linkState]),p.useEffect(()=>{if(c){const T=c.getBoundingClientRect();s.setPositionReference({getBoundingClientRect(){return{x:T.x,y:T.y,width:T.width,height:T.height,top:T.y,left:T.x,right:T.x+T.width,bottom:T.y+T.height}}})}},[o.viewport,c,s]);const g=p.useRef();g.current=T=>{if(s.floating.current&&!s.floating.current.contains(T.target)){if(h.current){const S=to.getLinkElement(h.current.editor);S&&!S[0].url.trim()&&to.unwrapLink(h.current.editor)}i({...n,linkState:null})}},p.useEffect(()=>{const T=S=>{var v;(v=g.current)==null||v.call(g,S)};return document.addEventListener("mousedown",T),()=>{document.removeEventListener("mousedown",T)}},[]);const x=()=>{if(!a)return;if(e!==a.targetElement.url){const S=a.editor,v=a.targetElement,E=En.findPath(S,v);ba.setNodes(S,{url:e},{at:E})}const T=to.getLinkElement(a.editor);T&&i({...n,linkState:{...n.linkState,targetElement:T[0],isEditing:!1,isHoveringOrigin:!0}})};return f&&l.jsxDEV(Ye,{ref:s.setFloating,style:r,padding:1,className:Y("link-popup"),onPointerEnter:()=>{!m&&n.linkState&&i({...n,linkState:{...n.linkState,isHovering:!0}})},onPointerLeave:()=>{!u&&n.linkState&&i({...n,linkState:{...n.linkState,isHovering:!1}})},children:l.jsxDEV(ft.Row,{gap:1,align:"center",children:u?l.jsxDEV(l.Fragment,{children:[l.jsxDEV("input",{type:"text",value:e,onChange:T=>{t(T.target.value)},onKeyDown:T=>{T.key==="Enter"&&x()},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),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(ar,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:168,columnNumber:23},void 0),tooltip:"Delete link","aria-label":"Delete link",onPointerDown:()=>{if(!a)return;const T=a.editor,S=a.targetElement,v=En.findPath(T,S);ba.unwrapNodes(T,{at:v}),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):l.jsxDEV(l.Fragment,{children:[l.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),l.jsxDEV(ne,{className:"link-popup__edit",type:"icon",visible:!0,icon:l.jsxDEV(No,{},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:T})=>{T.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),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(ar,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/popup/link-popup/link-popup.tsx",lineNumber:218,columnNumber:23},void 0),tooltip:"Delete link","aria-label":"Delete link",onPointerDown:()=>{if(!a)return;const T=a.editor,S=a.targetElement,v=En.findPath(T,S);ba.unwrapNodes(T,{at:v}),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)},Ho={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 Rj(){return"0.6.72"}function Hm(e){return{...Ho,...e,retryPolicy:{...Ho.retryPolicy,...e.retryPolicy||{}},cacheConfig:{...Ho.cacheConfig,...e.cacheConfig||{}},batchConfig:{...Ho.batchConfig,...e.batchConfig||{}}}}class qj{isAvailable(){return Yt.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{Yt.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 zm=new qj;class Bj{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 zm.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 zm.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 Lj{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 c=new Map;return c.set(n,o),this.debounceMap.set(t,c),this.globalDebounceMap.set(n,o),!0}const a=r.get(n);return!a||o-a>this.debounceTime?(r.set(n,o),this.globalDebounceMap.set(n,o),!0):(i&&console.warn(`[Tracking] 🚫 Element debounce: ${n} (${o-a}ms ago)`),!1)}clear(t){this.debounceMap.delete(t)}setDebounceTime(t){this.debounceTime=t}}const Oj=["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 Fj(e,t){if(!e.matches(Oj))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 Hj(e,t="click"){var a;const n=`auto_${t}_`;if(e.id)return`${n}${e.id}`;const i=e.getAttribute("aria-label");if(i)return`${n}${Gm(i)}`;const o=(a=e.textContent)==null?void 0:a.trim();if(o&&o.length>0){const c=Gm(o.substring(0,20));return`${n}${c}`}const s=e.tagName.toLowerCase(),r=e.className?`.${e.className.split(" ")[0]}`:"";return`${n}${s}${r}`}function Gm(e){return e.toLowerCase().trim().replace(/\s+/g,"_").replace(/[^a-z0-9_-]/g,"").substring(0,50)}function zj(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 qa(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 qg(){return`${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function Gj(){if(typeof window>"u")return"server-side";const e="tracking_session_id";let t=sessionStorage.getItem(e);return t||(t=qg(),sessionStorage.setItem(e,t)),t}function Wj(){return typeof window>"u"?{width:0,height:0}:{width:window.innerWidth||0,height:window.innerHeight||0}}class $j{constructor(t={}){this.state$=new HN({initialized:!1,config:Ho,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=Hm(t),this.batchService=new Bj(this.config.batchConfig),this.debouncer=new Lj(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&&Fj(n,this.config.excludedSelectors)){if(this.isElementExcluded(n))return;const o=Hj(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=qa(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=qa(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(a=>this.attachHoverListener(a)),o.querySelectorAll("[track-focus]").forEach(a=>this.attachFocusListener(a))}})})}),this.mutationObserver.observe(document.body,{childList:!0,subtree:!0}))}trackClick(t,n){if(!this.debouncer.shouldTrack(t,n,this.config.devMode)){this.incrementStat("debouncedEvents"),this.log("debug",`Event debounced: ${n}`);return}const i=qa(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:Rj(),sessionId:Gj(),userAgent:typeof navigator<"u"?navigator.userAgent:void 0,viewport:Wj(),eventType:i},r={eventName:t,params:n||void 0,metadata:s,id:qg(),createdAt:Date.now()};return this.config.devMode&&this.log("debug",`Event created: ${t}`,{params:n,element:o?zj(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=Hm({...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 An=null;function Xj(){An&&(An.destroy(),An=null)}function Kj(e,t){return An||(An=new $j(t),typeof window<"u"&&setTimeout(()=>{An==null||An.initialize()},0),typeof module<"u"&&module.hot&&module.hot.dispose(()=>{Xj()})),e.trackingService=An,e}class Yj extends ac{initialize(){super.initialize()}}const Zj=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.`),Yj}},e};function Qj(e,t,n,i=0){const o=ge.getCenterPoint(t),s=Ii(t,ui);if(i){const r=Jj(n,o,-i);let a=s.find(c=>ge.isHit(ge.getRectangleByPoints([r,r]),c.rectangle));return a&&(a.cursorClass=Wr(a.cursorClass,i)),a}else return s.find(r=>ge.isHit(ge.getRectangleByPoints([n,n]),r.rectangle))}function Jj(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*o-a*s,t[1]+r*s+a*o]}function eP(e){const t=Be(e);return t.length!==1?!1:Kl(t[0])}function tP(e,t){const n=Be(e);if(n.length!==1||!Kl(n[0]))return null;const i=n[0],o=ge.getRectangleByPoints(i.points),s=i.angle||0,r=Qj(e,o,t,s);return r?{element:i,rectangle:o,handle:r.handle,cursorClass:r.cursorClass}:null}function nP(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o){console.warn("startRectangle is undefined");return}const c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,gs(),100),m=[[d.x,d.y],[d.x+d.width,d.y+d.height]],f=e.children.findIndex(h=>h.id===i.id);f>=0&&ue.setNode(e,{points:m},[f])}const iP=e=>Mi(e,{key:"tool-elements",canResize:()=>eP(e),hitTest:(t=>tP(e,t)),onResize:(t,n)=>nP(e,t,n)});let wr=null;function oP(e,t){return $e.isFreehand(t)?Gr(t):Je.isPenPath(t)?$r(t):e.getRectangle(t)}function sP(e,t){return Ii(e,ui).find(i=>ge.isHit(ge.getRectangleByPoints([t,t]),i.rectangle))}function Hc(e){return e.some(t=>$e.isFreehand(t)||Je.isPenPath(t)||H.isText(t))}function rP(e){return e.some(t=>H.isText(t))}function Bg(e){const t=Be(e);if(t.length<2||!Hc(t))return null;try{const n=Lt(e,t,!1);return{elements:t,rectangle:n}}catch{return null}}function aP(e){return Bg(e)!==null}function lP(e,t){const n=Bg(e);if(!n)return null;const i=sP(n.rectangle,t);if(i){wr=new Map;for(const o of n.elements){const s=oP(e,o);s&&wr.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 cP(e,t,n,i,o,s){const r=s.width/o.width,a=s.height/o.height,c=i.x-o.x,u=i.y-o.y,d=s.x+c*r,m=s.y+u*a,f=n.points.map(g=>{const x=g[0]-i.x,b=g[1]-i.y,y=x*r,N=b*a;return[d+y,m+N]}),h=e.children.findIndex(g=>g.id===t);h>=0&&ue.setNode(e,{points:f},[h])}function uP(e,t,n,i,o,s){const r=s.width/o.width,a=s.height/o.height,c=i.x-o.x,u=i.y-o.y,d=s.x+c*r,m=s.y+u*a,f=n.anchors.map(N=>({...N,point:[N.point[0]*r,N.point[1]*a],handleIn:N.handleIn?[N.handleIn[0]*r,N.handleIn[1]*a]:void 0,handleOut:N.handleOut?[N.handleOut[0]*r,N.handleOut[1]*a]:void 0})),h=i.width*r,g=i.height*a,b=[[d,m],[d+h,m+g]],y=e.children.findIndex(N=>N.id===t);y>=0&&ue.setNode(e,{points:b,anchors:f},[y])}const Lg=14;function Og(e,t){const n={...e};if("text"in e&&typeof e.text=="string"){const i=e["font-size"]?parseFloat(e["font-size"]):Lg,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=>Og(i,t))),n}function dP(e,t,n,i,o,s){const r=s.width/o.width,a=s.height/o.height,c=i.x-o.x,u=i.y-o.y,d=s.x+c*r,m=s.y+u*a,f=i.width*r,h=i.height*a,g=[[d,m],[d+f,m+h]],x=e.children.findIndex(b=>b.id===t);if(x>=0)if(H.isDrawElement(n)&&H.isImage(n))ue.setNode(e,{points:g,width:f,height:h},[x]);else if(H.isText(n)){const b=n,y=Og(b.text,r),N=b.textHeight||Lg*1.4;ue.setNode(e,{points:g,text:y,textHeight:N*r,autoSize:!1},[x])}else ue.setNode(e,{points:g},[x])}function mP(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o||!Array.isArray(i)||!wr)return;const c=a[0]-r[0],u=a[1]-r[1],d=gs()||rP(i),m=yo(o,s,c,u,d);for(const f of i){const h=wr.get(f.id);if(!h)continue;const{element:g,rectangle:x}=h;$e.isFreehand(g)?cP(e,f.id,g,x,o,m):Je.isPenPath(g)?uP(e,f.id,g,x,o,m):dP(e,f.id,g,x,o,m)}}function pP(e){const t=Be(e);if(t.length<2||!Hc(t))return null;try{const n=Ql(),i=Lt(e,t,!1),o=zN(e,i);return ge.getCornerPoints(o).forEach(r=>{const a=GN(e,r);n.append(a)}),n}catch{return null}}const fP=e=>{const{afterChange:t}=e;let n=null;return e.afterChange=()=>{t(),n&&(n.remove(),n=null);const i=Be(e);i.length>1&&Hc(i)&&!Jo(e)&&(n=pP(e),n&&F.getActiveHost(e).append(n))},Mi(e,{key:"multi-resize",canResize:()=>aP(e),hitTest:(i=>lP(e,i)),onResize:(i,o)=>mP(e,i,o)})},Fg=14;let ir=null,Pl=null;function hP(e,t){return Ii(e,ui).find(i=>ge.isHit(ge.getRectangleByPoints([t,t]),i.rectangle))}function Hg(e,t){const n={...e};if("text"in e&&typeof e.text=="string"){const i=e["font-size"]?parseFloat(e["font-size"]):Fg,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=>Hg(i,t))),n}function gP(e){const t=Be(e);return t.length!==1?!1:H.isText(t[0])}function bP(e,t){const n=Be(e);if(n.length!==1||!H.isText(n[0]))return null;const i=n[0],o=ge.getRectangleByPoints(i.points),s=hP(o,t);return s?(ir=JSON.parse(JSON.stringify(i)),Pl={...o},{element:i,rectangle:o,handle:s.handle,cursorClass:s.cursorClass}):null}function xP(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o||!ir||!Pl)return;const c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,!0,20),m=d.width/Pl.width;if(m<=0)return;const f=Hg(ir.text,m),g=(ir.textHeight||Fg*1.4)*m,x=[[d.x,d.y],[d.x+d.width,d.y+d.height]],b=e.children.findIndex(y=>y.id===i.id);b>=0&&ue.setNode(e,{points:x,text:f,textHeight:g,autoSize:!1},[b])}const NP=e=>Mi(e,{key:"text-resize",canResize:()=>gP(e),hitTest:t=>bP(e,t),onResize:(t,n)=>xP(e,t,n)});function yP(e){return e.some(n=>$e.isFreehand(n)||Je.isPenPath(n))}function wP(e){const t=Be(e);if(t.length<2||!yP(t))return null;try{return Lt(e,t,!1)}catch{return null}}const vP=()=>{const e=xt(),[t,n]=p.useState([]),[i,o]=p.useState(!1),[s,r]=p.useState(!1),a=p.useRef(!1),c=p.useCallback(()=>{const m=es(e)||ns(e)||Jo(e);if(r(m),m)return;Be(e);const f=wP(e);if(!f){o(!1);return}const g=[{x:f.x,y:f.y,cursor:"nwse-resize"},{x:f.x+f.width,y:f.y,cursor:"nesw-resize"},{x:f.x+f.width,y:f.y+f.height,cursor:"nwse-resize"},{x:f.x,y:f.y+f.height,cursor:"nesw-resize"}].map(x=>{const b=Bo(e,[x.x,x.y]);return{x:b[0],y:b[1],cursor:x.cursor}});n(g),o(!0)},[e]);if(p.useEffect(()=>{a.current=s},[s]),p.useEffect(()=>{c();let m,f=JSON.stringify(e.viewport),h=JSON.stringify(e.selection),g=e.children.length;const x=()=>{const b=JSON.stringify(e.viewport),y=JSON.stringify(e.selection),N=e.children.length,w=es(e)||ns(e)||Jo(e);(b!==f||y!==h||N!==g||w!==a.current)&&(f=b,h=y,g=N,c()),m=requestAnimationFrame(x)};return m=requestAnimationFrame(x),()=>{cancelAnimationFrame(m)}},[e,c]),!i||t.length===0||s)return null;const u=ui,d=u/2;return l.jsxDEV("div",{className:Y("multi-selection-handles",At),children:t.map((m,f)=>l.jsxDEV("div",{className:"multi-selection-handle",style:{left:m.x-d,top:m.y-d,width:u,height:u,cursor:m.cursor}},f,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/multi-selection-handles/multi-selection-handles.tsx",lineNumber:169,columnNumber:9},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/multi-selection-handles/multi-selection-handles.tsx",lineNumber:167,columnNumber:5},void 0)},zg=p.createContext(null),EP=typeof window<"u"?Math.max(375,window.innerWidth*.5):600,SP=({children:e})=>{const t=p.useRef(null),n=p.useRef(null),[i,o]=p.useState([]),[s,r]=p.useState(!1),[a,c]=p.useState(EP),u=p.useCallback(m=>{n.current=m},[]),d=p.useCallback(async(m,f)=>{n.current?await n.current(m,f):console.warn("[ChatDrawerContext] No retry handler registered")},[]);return l.jsxDEV(zg.Provider,{value:{chatDrawerRef:t,registerRetryHandler:u,executeRetry:d,selectedContent:i,setSelectedContent:o,isDrawerOpen:s,setIsDrawerOpen:r,drawerWidth:a,setDrawerWidth:c},children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/contexts/ChatDrawerContext.tsx",lineNumber:79,columnNumber:5},void 0)};function Gg(){const e=p.useContext(zg);if(!e)throw new Error("useChatDrawer must be used within a ChatDrawerProvider");return e}function kP(){const{chatDrawerRef:e,registerRetryHandler:t,executeRetry:n,selectedContent:i,setSelectedContent:o,isDrawerOpen:s,setIsDrawerOpen:r,drawerWidth:a,setDrawerWidth:c}=Gg();return{openChatDrawer:()=>{var u;(u=e.current)==null||u.open()},closeChatDrawer:()=>{var u;(u=e.current)==null||u.close()},toggleChatDrawer:()=>{var u;(u=e.current)==null||u.toggle()},sendMessageToChatDrawer:async u=>{var d;await((d=e.current)==null?void 0:d.sendMessage(u))},sendWorkflowMessage:async u=>{var d;await((d=e.current)==null?void 0:d.sendWorkflowMessage(u))},updateWorkflowMessage:u=>{var d;(d=e.current)==null||d.updateWorkflowMessage(u)},appendAgentLog:u=>{var d;(d=e.current)==null||d.appendAgentLog(u)},updateThinkingContent:u=>{var d;(d=e.current)==null||d.updateThinkingContent(u)},isChatDrawerOpen:()=>{var u;return((u=e.current)==null?void 0:u.isOpen())??!1},isDrawerOpen:s,setIsDrawerOpen:r,drawerWidth:a,setDrawerWidth:c,registerRetryHandler:t,retryWorkflowFromStep:async(u,d)=>{await n(u,d)},selectedContent:i,setSelectedContent:o}}class TP{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=Ds.getToolById("banana-prompt");if(!n){console.error('❌ Tool "banana-prompt" not found');return}Oi.insertTool(t,n.id,n.url,[100,100],{width:n.defaultWidth||Fi.defaultWidth,height:n.defaultHeight||Fi.defaultHeight},{name:n.name,category:n.category,permissions:n.permissions})}insertXiaohongshuTool(){const t=this.getBoard();if(!t)return;const n=Ds.getToolById("xiaohongshu-tool");if(!n){console.error('❌ Tool "xiaohongshu-tool" not found');return}Oi.insertTool(t,n.id,n.url,[300,300],{width:n.defaultWidth||Fi.defaultWidth,height:n.defaultHeight||Fi.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=Ds.getToolById(t);if(!s){console.error(`❌ Tool "${t}" not found`);return}Oi.insertTool(o,s.id,s.url,[n,i],{width:s.defaultWidth||Fi.defaultWidth,height:s.defaultHeight||Fi.defaultHeight},{name:s.name,category:s.category,permissions:s.permissions})}listAllTools(){Ds.getAvailableTools().forEach((n,i)=>{})}getAllToolElements(){const t=this.getBoard();if(!t)return;Oi.getAllTools(t).forEach((i,o)=>{})}removeAllTools(){const t=this.getBoard();if(!t)return;Oi.getAllTools(t).forEach(i=>{Oi.removeTool(t,i.id)})}help(){}}const Wg=new TP;typeof window<"u"&&(window.testToolbox=Wg);const DP={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)"},_P={autoHideDelay:3e3},jP=({board:e,config:t,className:n,displayMode:i="auto",autoTriggerConfig:o})=>{const s=p.useRef(null),r=p.useRef(null);p.useRef(null);const a={...DP,...t},c={..._P,...o},[u,d]=p.useState(()=>({expanded:i==="always"?!0:a.defaultExpanded,dragging:!1,autoMode:i==="auto",manuallyExpanded:!1})),m=p.useRef({isDragging:!1,startPoint:null}),f=p.useRef(null),[h,g]=p.useState(null),x=p.useRef(null),[b,y]=p.useState(!1),N=120,w=p.useRef(0),T=p.useRef({zoom:e.viewport.zoom,offsetX:e.viewport.offsetX,offsetY:e.viewport.offsetY}),S=p.useRef(!1),v=p.useCallback(()=>{if(!e||!e.children)return[];const D=[];return e.children.forEach(j=>{try{let W=null;j.points&&Array.isArray(j.points)?W=ge.getRectangleByPoints(j.points):j.x!==void 0&&j.y!==void 0&&(W={x:j.x,y:j.y,width:j.width||100,height:j.height||100}),W&&W.width>0&&W.height>0&&D.push({id:j.id,bounds:W,type:j.type})}catch(W){console.warn("Failed to get bounds for element:",j.id,W)}}),D},[e]),E=p.useCallback(()=>{const j=F.getBoardContainer(e).getBoundingClientRect(),W=e.viewport.zoom,Q=Cr(e),C=Q[0],B=Q[1],L=j.width/W,z=j.height/W;return{x:C,y:B,width:L,height:z}},[e]),R=p.useRef(u.expanded);R.current=u.expanded;const q=p.useRef(null),$=p.useRef(1);p.useEffect(()=>{if(i==="always"){R.current||d(j=>({...j,expanded:!0}));return}if(i!=="auto")return;const D=setInterval(()=>{const j=e.viewport,W=T.current,Q=Math.abs(j.zoom-W.zoom)>.001,C=Math.abs(j.offsetX-W.offsetX)>.5||Math.abs(j.offsetY-W.offsetY)>.5;if(Q||C){if(T.current={zoom:j.zoom,offsetX:j.offsetX,offsetY:j.offsetY},!S.current){S.current=!0;return}w.current=Date.now(),R.current||d(L=>({...L,expanded:!0,manuallyExpanded:!1}))}},100);return()=>{clearInterval(D)}},[i,e]),p.useEffect(()=>{if(i!=="auto"||!u.expanded||u.manuallyExpanded||u.dragging)return;const D=setTimeout(()=>{d(j=>!j.autoMode||j.manuallyExpanded||j.dragging?j:{...j,expanded:!1})},c.autoHideDelay);return()=>{clearTimeout(D)}},[i,u.expanded,u.manuallyExpanded,u.dragging,c.autoHideDelay]);const V=p.useCallback((D,j)=>{if(D.length===0)return{x:j.x-200,y:j.y-200,width:j.width+400,height:j.height+400};let W=j.x,Q=j.y,C=j.x+j.width,B=j.y+j.height;D.forEach(z=>{const{x:te,y:ee,width:O,height:J}=z.bounds;W=Math.min(W,te),Q=Math.min(Q,ee),C=Math.max(C,te+O),B=Math.max(B,ee+J)});const L=100;return{x:W-L,y:Q-L,width:C-W+L*2,height:B-Q+L*2}},[]),U=p.useCallback(D=>{const W=(a.width-20)/D.width,Q=(a.height-20)/D.height;return Math.min(W,Q)},[a.width,a.height]),A=p.useCallback((D,j,W,Q)=>{const B=(D-W.x)*Q+10,L=(j-W.y)*Q+10;return[B,L]},[]),_=p.useCallback((D,j,W,Q)=>{const B=(D-10)/Q+W.x,L=(j-10)/Q+W.y;return[B,L]},[]),M=p.useCallback((D,j,W)=>{if(100*W<5)return;D.strokeStyle="rgba(0, 0, 0, 0.05)",D.lineWidth=.5;const B=Math.floor(j.x/100)*100,L=Math.floor(j.y/100)*100,z=j.x+j.width,te=j.y+j.height;for(let ee=B;ee<=z;ee+=100){const[O]=A(ee,0,j,W);D.beginPath(),D.moveTo(O,0),D.lineTo(O,a.height),D.stroke()}for(let ee=L;ee<=te;ee+=100){const[,O]=A(0,ee,j,W);D.beginPath(),D.moveTo(0,O),D.lineTo(a.width,O),D.stroke()}},[A,a.width,a.height]),P=p.useCallback(()=>{const D=s.current;if(!D)return;const j=D.getContext("2d");if(!j)return;j.clearRect(0,0,a.width,a.height);const W=v(),Q=E();if(W.length===0&&!Q){j.fillStyle="#999",j.font="12px sans-serif",j.textAlign="center",j.textBaseline="middle",j.fillText("空画布",a.width/2,a.height/2);return}const C=V(W,Q),B=U(C);q.current=C,$.current=B,M(j,C,B),j.fillStyle=a.elementColor,j.strokeStyle="rgba(0, 0, 0, 0.1)",j.lineWidth=.5,W.forEach(oe=>{const{x:Ie,y:ut,width:Re,height:ie}=oe.bounds,[Ae,Ue]=A(Ie,ut,C,B),_e=Re*B,Le=ie*B;j.fillRect(Ae,Ue,_e,Le),j.strokeRect(Ae,Ue,_e,Le)});const[L,z]=A(Q.x,Q.y,C,B),te=Q.width*B,ee=Q.height*B;j.fillStyle=a.viewportColor,j.fillRect(L,z,te,ee),j.strokeStyle=a.viewportColor.replace("0.3","1"),j.lineWidth=2,j.strokeRect(L,z,te,ee);const O=8;j.fillStyle=a.viewportColor.replace("0.3","0.8"),j.fillRect(L,z,O,2),j.fillRect(L,z,2,O),j.fillRect(L+te-O,z,O,2),j.fillRect(L+te-2,z,2,O),j.fillRect(L,z+ee-2,O,2),j.fillRect(L,z+ee-O,2,O),j.fillRect(L+te-O,z+ee-2,O,2),j.fillRect(L+te-2,z+ee-O,2,O);const J=x.current;if(J){const oe=J.x-te/2,Ie=J.y-ee/2;j.fillStyle="rgba(243, 156, 18, 0.15)",j.fillRect(oe,Ie,te,ee),j.strokeStyle="rgba(243, 156, 18, 0.8)",j.lineWidth=2,j.strokeRect(oe,Ie,te,ee)}},[e,a,v,E,V,U,A,M]),Z=p.useCallback(D=>{D.preventDefault(),D.stopPropagation();const j=s.current;if(!j||!q.current)return;const W=j.getBoundingClientRect(),Q=D.clientX-W.left,C=D.clientY-W.top;Yt.track("minimap_navigate",{action:"click",displayMode:i});const[B,L]=_(Q,C,q.current,$.current);m.current={isDragging:!0,startPoint:[Q,C]},d(z=>({...z,dragging:!0})),pe(B,L)},[_,e]),pe=p.useCallback((D,j)=>{const Q=F.getBoardContainer(e).getBoundingClientRect(),C=e.viewport.zoom,B=D-Q.width/(2*C),L=j-Q.height/(2*C);fe.updateViewport(e,[B,L],C),requestAnimationFrame(()=>P())},[e,P]),I=p.useCallback(D=>{if(!m.current.isDragging||!q.current)return;D.preventDefault(),D.stopPropagation();const j=s.current;if(!j)return;const W=j.getBoundingClientRect(),Q=D.clientX-W.left,C=D.clientY-W.top,[B,L]=_(Q,C,q.current,$.current);pe(B,L)},[_,pe]),G=p.useCallback(()=>{m.current.isDragging&&Yt.track("minimap_navigate",{action:"drag",displayMode:i}),m.current={isDragging:!1,startPoint:null},d(D=>({...D,dragging:!1}))},[i]),ce=p.useCallback((D,j)=>{const W=f.current;if(!W||!q.current)return;const Q=W.getContext("2d");if(!Q)return;const[C,B]=_(D,j,q.current,$.current),L=E(),z=L.width,te=L.height,ee=z,O=te;Q.clearRect(0,0,N,N),Q.fillStyle="#fff",Q.fillRect(0,0,N,N);const J=C-ee/2,oe=B-O/2,Ie=N/ee,ut=N/O,Re=Math.min(Ie,ut),ie=(N-ee*Re)/2,Ae=(N-O*Re)/2;v().forEach(_e=>{const{bounds:Le}=_e;if(Le.x+Le.width>=J&&Le.x<=J+ee&&Le.y+Le.height>=oe&&Le.y<=oe+O){const Mt=(Le.x-J)*Re+ie,Dt=(Le.y-oe)*Re+Ae,It=Le.width*Re,Bt=Le.height*Re;Q.fillStyle="rgba(0, 0, 0, 0.6)",Q.fillRect(Mt,Dt,It,Bt)}}),Q.strokeStyle="rgba(90, 79, 207, 0.6)",Q.lineWidth=1,Q.setLineDash([4,4]),Q.beginPath(),Q.moveTo(0,N/2),Q.lineTo(N,N/2),Q.stroke(),Q.beginPath(),Q.moveTo(N/2,0),Q.lineTo(N/2,N),Q.stroke(),Q.setLineDash([]),Q.strokeStyle="rgba(90, 79, 207, 0.3)",Q.lineWidth=2,Q.strokeRect(0,0,N,N)},[v,E,_]),X=p.useCallback(()=>{u.dragging||y(!0)},[u.dragging]),ae=p.useCallback(()=>{y(!1),g(null),x.current=null},[]),le=p.useCallback(D=>{if(u.dragging){y(!1),x.current=null;return}const j=s.current;if(!j)return;const W=j.getBoundingClientRect(),Q=D.clientX-W.left,C=D.clientY-W.top,B={x:Q,y:C};g(B),x.current=B,y(!0),ce(Q,C),P()},[u.dragging,ce,P]),be=p.useRef(!1),we=p.useCallback(D=>{be.current=!0;const j=s.current;if(!j)return;const W=D.touches[0],Q=j.getBoundingClientRect(),C=W.clientX-Q.left,B=W.clientY-Q.top,L={x:C,y:B};g(L),x.current=L,y(!0),ce(C,B),P()},[ce,P]),Fe=p.useCallback(D=>{const j=s.current;if(!j)return;const W=D.touches[0],Q=j.getBoundingClientRect(),C=W.clientX-Q.left,B=W.clientY-Q.top,L={x:C,y:B};g(L),x.current=L,y(!0),ce(C,B),P()},[ce,P]),K=p.useCallback(()=>{be.current=!1,setTimeout(()=>{be.current||(y(!1),g(null),x.current=null,P())},500)},[P]);p.useEffect(()=>{if(!u.expanded)return;P();const D=setInterval(()=>{P()},100);return()=>{clearInterval(D)}},[e,u.expanded,P]);const Ce=p.useCallback(()=>{d(D=>{const j=!D.expanded;return{...D,expanded:j,manuallyExpanded:j}})},[]),We={bottom:a.position.includes("bottom")?a.margin:void 0,top:a.position.includes("top")?a.margin:void 0,right:a.position.includes("right")?a.margin:void 0,left:a.position.includes("left")?a.margin:void 0},it=b&&(be.current||!u.dragging),Ke=h?{position:"absolute",right:a.width+8,top:Math.max(0,Math.min(h.y-N/2,a.height-N)),width:N,height:N,opacity:it?1:0,pointerEvents:"none",transition:"opacity 0.15s ease-out, top 0.1s ease-out"}:{display:"none"};return l.jsxDEV("div",{ref:r,className:`minimap ${u.expanded?"minimap--expanded":"minimap--collapsed"} ${i==="auto"?"minimap--auto":""} ${n||""}`,style:{...We,zIndex:en.MINIMAP},"data-track":"minimap_container",children:[u.expanded&&l.jsxDEV("div",{className:"minimap__content",children:[l.jsxDEV("canvas",{ref:s,width:a.width,height:a.height,className:"minimap__canvas",onPointerDown:Z,onPointerMove:I,onPointerUp:G,onPointerLeave:G,onMouseEnter:X,onMouseLeave:ae,onMouseMove:le,onTouchStart:we,onTouchMove:Fe,onTouchEnd:K,style:{cursor:u.dragging?"grabbing":"pointer"}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:822,columnNumber:11},void 0),l.jsxDEV("div",{className:"minimap__preview",style:Ke,children:l.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:844,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:843,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:821,columnNumber:9},void 0),a.collapsible&&l.jsxDEV("button",{className:`minimap__toggle ${u.expanded?"minimap__toggle--expanded":""}`,onClick:Ce,title:u.expanded?"折叠小地图":"展开小地图","data-track":"minimap_click_toggle",children:l.jsxDEV(WN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:861,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:855,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/minimap/Minimap.tsx",lineNumber:812,columnNumber:5},void 0)},Wm=10,PP=3e3,CP=({showMinimap:e=!0,container:t})=>{var q,$,V,U;const n=xt(),{t:i}=Se(),{isDrawerOpen:o,drawerWidth:s}=kP(),[r,a]=p.useState(!1),[c,u]=p.useState(!0),[d,m]=p.useState(!1),f=p.useRef(null),h=p.useRef({zoom:((q=n==null?void 0:n.viewport)==null?void 0:q.zoom)||1,offsetX:(($=n==null?void 0:n.viewport)==null?void 0:$.offsetX)||0,offsetY:((V=n==null?void 0:n.viewport)==null?void 0:V.offsetY)||0}),g=p.useRef(!1),x=p.useRef(null),b=p.useMemo(()=>o?s+Wm:Wm,[o,s]),y=p.useCallback(()=>{fe.updateZoom(n,n.viewport.zoom-.1)},[n]),N=p.useCallback(()=>{fe.updateZoom(n,n.viewport.zoom+.1)},[n]),w=p.useCallback(()=>{fe.fitViewport(n),a(!1)},[n]),T=p.useCallback(()=>{fe.updateZoom(n,1),a(!1)},[n]),S=p.useCallback(()=>{nc(n),a(!1)},[n]),v=p.useCallback(()=>{u(A=>{const _=!A;return m(_),_})},[]);p.useEffect(()=>{if(!c||!n)return;const A=F.getBoardContainer(n);if(!A)return;const _=M=>{var Z;const P=M.target;(Z=f.current)!=null&&Z.contains(P)||(u(!1),m(!1))};return A.addEventListener("mousedown",_),()=>{A.removeEventListener("mousedown",_)}},[c,n]),p.useEffect(()=>{if(!e||!n)return;const A=setInterval(()=>{const _=n.viewport,M=h.current,P=Math.abs(_.zoom-M.zoom)>.001,Z=Math.abs(_.offsetX-M.offsetX)>.5||Math.abs(_.offsetY-M.offsetY)>.5;if(P||Z){if(h.current={zoom:_.zoom,offsetX:_.offsetX,offsetY:_.offsetY},!g.current){g.current=!0;return}c||(u(!0),m(!1)),x.current&&clearTimeout(x.current)}},100);return()=>{clearInterval(A)}},[e,n,c]),p.useEffect(()=>{if(!(!c||d))return x.current=setTimeout(()=>{u(!1)},PP),()=>{x.current&&clearTimeout(x.current)}},[c,d]);const E=p.useCallback(()=>{a(A=>!A)},[]),R=Math.round((((U=n==null?void 0:n.viewport)==null?void 0:U.zoom)||1)*100);return l.jsxDEV("div",{className:"view-navigation",style:{right:b,zIndex:en.VIEW_NAVIGATION},ref:f,"data-testid":"view-navigation",children:[l.jsxDEV("div",{className:"view-navigation__zoom",children:[l.jsxDEV(Tt,{content:i("zoom.out"),showArrow:!1,children:l.jsxDEV("button",{className:"view-navigation__zoom-btn",onClick:y,"aria-label":i("zoom.out"),"data-track":"view_nav_zoom_out","data-testid":"zoom-out",children:l.jsxDEV($N,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:214,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:207,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:206,columnNumber:9},void 0),l.jsxDEV(at,{sideOffset:8,open:r,onOpenChange:a,placement:"bottom",children:[l.jsxDEV(Tt,{content:i("zoom.fit"),showArrow:!1,children:l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("button",{className:"view-navigation__zoom-percent",onClick:E,"aria-label":i("zoom.fit"),"data-track":"view_nav_zoom_menu","data-testid":"zoom-display",children:[R,"%"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:226,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:225,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:224,columnNumber:11},void 0),l.jsxDEV(ct,{container:t,style:{zIndex:en.POPOVER},children:l.jsxDEV("div",{className:"view-navigation-zoom-menu",children:[l.jsxDEV("button",{className:"zoom-menu-item",onClick:w,"data-track":"view_nav_zoom_fit",children:[l.jsxDEV("span",{className:"zoom-menu-item__label",children:i("zoom.fit")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:244,columnNumber:17},void 0),l.jsxDEV("span",{className:"zoom-menu-item__shortcut",children:"⌘⇧="},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:245,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:239,columnNumber:15},void 0),l.jsxDEV("button",{className:"zoom-menu-item",onClick:S,"data-track":"view_nav_zoom_fit_frame",children:l.jsxDEV("span",{className:"zoom-menu-item__label",children:i("zoom.fitFrame")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:252,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:247,columnNumber:15},void 0),l.jsxDEV("button",{className:"zoom-menu-item",onClick:T,"data-track":"view_nav_zoom_100",children:[l.jsxDEV("span",{className:"zoom-menu-item__label",children:i("zoom.100")},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:259,columnNumber:17},void 0),l.jsxDEV("span",{className:"zoom-menu-item__shortcut",children:"⌘0"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:260,columnNumber:17},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:254,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:238,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:237,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:218,columnNumber:9},void 0),l.jsxDEV(Tt,{content:i("zoom.in"),showArrow:!1,children:l.jsxDEV("button",{className:"view-navigation__zoom-btn",onClick:N,"aria-label":i("zoom.in"),"data-track":"view_nav_zoom_in","data-testid":"zoom-in",children:l.jsxDEV(XN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:274,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:267,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:266,columnNumber:9},void 0),e&&l.jsxDEV(Tt,{content:c?"折叠小地图":"展开小地图",showArrow:!1,children:l.jsxDEV("button",{className:`view-navigation__minimap-toggle ${c?"view-navigation__minimap-toggle--expanded":""}`,onClick:v,"aria-label":c?"折叠小地图":"展开小地图","data-track":"view_nav_minimap_toggle",children:l.jsxDEV(KN,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:290,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:284,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:280,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:205,columnNumber:7},void 0),e&&c&&l.jsxDEV("div",{className:"view-navigation__minimap",children:l.jsxDEV(jP,{board:n,displayMode:"always",config:{width:180,height:120,position:"top-right",margin:0,collapsible:!1,defaultExpanded:!0}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:299,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:298,columnNumber:9},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/view-navigation/ViewNavigation.tsx",lineNumber:195,columnNumber:5},void 0)},AP=p.lazy(()=>Me(()=>import("./tool-windows-BTXOQvEU.js").then(e=>e.p2),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.MediaLibraryModal}))),MP=({position:e,visible:t,onClose:n,onOpenMediaLibrary:i})=>{const o=xt(),{t:s}=Se(),r=tc(),a=F.getBoardContainer(o),[c,u]=p.useState({freehand:!1,arrow:!1,shape:!1}),[d,m]=p.useState(!1),{refs:f,floatingStyles:h}=Wl({placement:"bottom",middleware:[$l(12),qp({padding:16}),Xl({fallbackPlacements:["top","right","left"]})]});p.useEffect(()=>{if(e&&t){const[V,U]=e;f.setPositionReference({getBoundingClientRect(){return{width:1,height:1,x:V,y:U,top:U,left:V,right:V+1,bottom:U+1}}})}},[e,t,f]),p.useEffect(()=>{if(!t)return;const V=A=>{const _=A.target,M=_.closest(".quick-creation-toolbar"),P=_.closest(".quick-toolbar-popover")||_.closest("[data-radix-popper-content-wrapper]")||_.closest(".plait-popover")||_.closest(".shape-picker")||_.closest(".arrow-picker")||_.closest(".freehand-panel"),Z=_.closest(".media-library-modal");!M&&!P&&!Z&&n()},U=setTimeout(()=>{document.addEventListener("mousedown",V)},100);return()=>{clearTimeout(U),document.removeEventListener("mousedown",V)}},[t,n]);const g=()=>{u({freehand:!1,arrow:!1,shape:!1})},x=V=>{u({freehand:!1,arrow:!1,shape:!1,[V]:!0})},b=()=>{g(),Dn(o),mt(o,null),fe.updatePointerType(o,De.text),r(De.text),n()},y=()=>{g(),Dn(o),mt(o,St.dnd),fe.updatePointerType(o,ji.mind),r(ji.mind),n()},N=()=>{g(),Hr(o),n()},w=async V=>{try{V.type===In.IMAGE?await Yl(o,V.url):V.type===In.VIDEO?await gf(o,V.url):V.type===In.AUDIO&&await Ol(o,V.url,{title:V.name,duration:V.duration,previewImageUrl:V.thumbnail,prompt:V.prompt,mv:V.modelName,clipId:V.clipId,providerTaskId:V.providerTaskId}),re.success(s("toolbar.assetInserted")||"素材已插入到画板"),m(!1),n()}catch(U){console.error("Failed to insert asset:",U),re.error(s("toolbar.assetInsertFailed")||"插入素材失败")}},T=()=>{if(g(),i){i({mode:ii.SELECT,onSelect:w,selectButtonText:s("toolbar.insert")||"插入"}),n();return}m(!0)},[S,v]=p.useState(rt.feltTipPen),E=300,R=p.useRef(null),q=p.useCallback(()=>{R.current&&(clearTimeout(R.current),R.current=null)},[]);p.useEffect(()=>()=>{q()},[q]);const $=(V,U,A,_)=>l.jsxDEV(at,{open:c[U],sideOffset:12,onOpenChange:M=>{M||g()},placement:"bottom",children:[l.jsxDEV(lt,{asChild:!0,children:l.jsxDEV("div",{onPointerEnter:()=>{q(),R.current=setTimeout(()=>{x(U)},E)},onPointerLeave:()=>{q()},children:l.jsxDEV(ne,{type:"icon",visible:!0,selected:c[U],icon:V,"aria-label":A,"data-track":`quick_toolbar_click_${U}`,onPointerDown:()=>{q(),x(U),Dn(o),U==="freehand"&&(mt(o,St.dnd),fe.updatePointerType(o,S),r(S))},onPointerUp:()=>{U==="freehand"&&mt(o,St.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),l.jsxDEV(ct,{container:a,style:{zIndex:en.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?l.jsxDEV(l.Fragment,{children:[l.jsxDEV(Ye,{padding:1,className:`quick-creation-toolbar ${At}`,ref:f.setFloating,style:h,children:l.jsxDEV(ft.Row,{gap:1,children:[l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(sc,{},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:b},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),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(Rr,{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),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(Ur,{},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:T},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),$(l.jsxDEV(No,{},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"),l.jsxDEV(Vc,{onPointerUp:V=>{g(),v(V),fe.updatePointerType(o,V),r(V),n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:390,columnNumber:13},void 0)),$(l.jsxDEV(oc,{},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"),l.jsxDEV(Rc,{onPointerUp:V=>{g(),fe.updatePointerType(o,V),r(V),n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:408,columnNumber:13},void 0)),$(l.jsxDEV(ic,{},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"),l.jsxDEV(Uc,{onPointerUp:V=>{g(),fe.updatePointerType(o,V),r(V),n()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:423,columnNumber:13},void 0)),l.jsxDEV(ne,{type:"icon",visible:!0,icon:l.jsxDEV(lr,{},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:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:434,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:354,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/toolbar/quick-creation-toolbar/quick-creation-toolbar.tsx",lineNumber:348,columnNumber:7},void 0),d&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(AP,{isOpen:d,onClose:()=>{m(!1)},mode:ii.SELECT,onSelect:w,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};function NA(e){const[t,n]=p.useState({isCached:!1}),[i,o]=p.useState(!1),s=p.useCallback(async()=>{if(!e){n({isCached:!1});return}try{const c=await Ni.getCacheInfo(e);n(c)}catch(c){console.error("[useUnifiedCache] Failed to load cache info:",c),n({isCached:!1})}},[e]);p.useEffect(()=>{s()},[s]),p.useEffect(()=>Ni.subscribe(()=>{s()}),[s]);const r=p.useCallback(async c=>{if(!e)return!1;o(!0);try{const u=await Ni.cacheImage(e,c);return u&&await s(),u}catch(u){return console.error("[useUnifiedCache] Failed to cache image:",u),!1}finally{o(!1)}},[e,s]),a=p.useCallback(async()=>{if(!e)return!1;o(!0);try{return await Ni.deleteCache(e),await s(),!0}catch(c){return console.error("[useUnifiedCache] Failed to delete cache:",c),!1}finally{o(!1)}},[e,s]);return{cacheInfo:t,isLoading:i,isCached:t.isCached,cacheAge:t.age,cacheImage:r,deleteCache:a,reload:s}}function IP(e){const[t,n]=p.useState(!1);p.useEffect(()=>{const o=()=>{n(!0),e==null||e()};return Ni.onQuotaExceeded(o)},[e]);const i=p.useCallback(()=>{n(!1)},[]);return{isQuotaExceeded:t,resetQuotaFlag:i}}const VP=({children:e,onOpenMediaLibrary:t})=>{const[n,i]=p.useState(!1),{confirm:o,confirmDialog:s}=Vr(),r=p.useCallback(()=>{n||(i(!0),o({title:"缓存空间已满",description:"图片缓存空间已满,无法继续缓存新图片。是否打开素材库清理缓存?",confirmText:"打开素材库",cancelText:"稍后处理",confirmTheme:"warning"}).then(a=>{i(!1),a&&(t==null||t())}))},[o,n,t]);return IP(r),l.jsxDEV(l.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)},vr={visible:!1,position:{x:0,y:0},sourceElement:null,currentShape:null,hitIndex:-1,hitPoint:null,mode:"hover",arrowLineElement:null,arrowLineEndPoint:null},$g=new WeakMap,Cl=new WeakMap;function Er(e){return $g.get(e)||vr}function zo(e,t){$g.set(e,t);const n=Cl.get(e);n&&n(t)}function UP(e,t){return Cl.set(e,t),()=>{Cl.delete(e)}}function zc(e){zo(e,vr)}const Mo=100;function RP(e,t,n,i,o){const s=ty(n),r=ge.getRectangleByPoints(t.points),a=r.width,c=r.height,u=r.x+a/2,d=r.y+c/2,f=ge.getEdgeCenterPoints(r)[n];let h,g;switch(s){case pt.right:h=u+a/2+Mo+a/2,g=d;break;case pt.bottom:h=u,g=d+c/2+Mo+c/2;break;case pt.left:h=u-a/2-Mo-a/2,g=d;break;case pt.top:h=u,g=d-c/2-Mo-c/2;break;default:h=u+a/2+Mo+a/2,g=d}const x=[[h-a/2,g-c/2],[h+a/2,g+c/2]],b=uc(e,x,o);if(b.fill="#ffffff",H.isShapeElement(t)&&!H.isText(t)){const V=t;V.angle!==void 0&&(b.angle=V.angle),V.fill&&V.fill!=="none"&&(b.fill=V.fill),V.strokeColor!==void 0&&(b.strokeColor=V.strokeColor),V.strokeStyle!==void 0&&(b.strokeStyle=V.strokeStyle),V.strokeWidth!==void 0&&(b.strokeWidth=V.strokeWidth)}const y=ur(f,t)||f,N=H.isShapeElement(t)?os(e,y,t):void 0;let w;switch(s){case pt.right:w=3;break;case pt.bottom:w=0;break;case pt.left:w=1;break;case pt.top:w=2;break;default:w=3}const T=ge.getRectangleByPoints(b.points),v=ge.getEdgeCenterPoints(T)[w],E=ur(v,b)||v,R=os(e,E,b),q=Af(kn.straight,[y,E],{marker:ss.none,connection:N,boundId:t.id},{marker:ss.arrow,connection:R,boundId:b.id},[],{});ue.insertNode(e,q,[e.children.length]),Cf(e,b),zc(e);const $=b.id;setTimeout(()=>{const V=e.children.findIndex(A=>A.id===$),U=V>=0?e.children[V]:null;U&&(oi(e),_i(e,U),fe.updatePointerType(e,vt.selection),ue.setNode(e,{_forceRender:Date.now()},[V]),ue.setNode(e,{_forceRender:void 0},[V]))},50)}function qP(e,t,n,i){var g;let o=100,s=100;const r=t,a=(g=r.source)==null?void 0:g.boundId;if(a){const x=e.children.find(b=>b.id===a);if(x&&H.isShapeElement(x)){const b=ge.getRectangleByPoints(x.points);o=b.width,s=b.height}}const c=[[n[0]-o/2,n[1]-s/2],[n[0]+o/2,n[1]+s/2]],u=uc(e,c,i);u.fill="#ffffff";const d=ge.getRectangleByPoints(u.points),m=ge.getEdgeCenterPoints(d),f=r.points||[];if(f.length>=2){const x=f[0],b=f[f.length-1],y=b[0]-x[0],N=b[1]-x[1];let w;Math.abs(y)>Math.abs(N)?w=y>0?3:1:w=N>0?0:2;const T=m[w],S=os(e,T,u),v=e.children.findIndex(E=>E.id===t.id);v!==-1&&ue.setNode(e,{target:{marker:ss.arrow,connection:S,boundId:u.id},points:[x,T]},[v])}Cf(e,u),zc(e);const h=u.id;setTimeout(()=>{const x=e.children.findIndex(y=>y.id===h),b=x>=0?e.children[x]:null;b&&(oi(e),_i(e,b),fe.updatePointerType(e,vt.selection),ue.setNode(e,{_forceRender:Date.now()},[x]),ue.setNode(e,{_forceRender:void 0},[x]))},50)}const BP=e=>{const{pointerMove:t,pointerLeave:n,globalPointerUp:i}=e;let o=null,s=-1,r=e.children.length,a={x:0,y:0};return e.pointerMove=c=>{var T;a={x:c.clientX,y:c.clientY},o&&(clearTimeout(o),o=null);const u=Pf(e),d=u.length===1&&u[0],m=Er(e);if(!d||!H.isShapeElement(d)||H.isText(d)){if(m.visible&&m.mode==="hover"&&zo(e,{...vr}),s=-1,d&&H.isShapeElement(d)&&!Ji.getElementRef(d))return;t(c);return}if(!Ji.getElementRef(d)){s=-1;return}const h=YN(e,c.x,c.y),g=ZN(e,d,!0),x=QN(e,h,d,!0)||h,b=JN(x,g),y=g[b];if(y){if(b!==s||!m.visible){s=b;const S=c.clientX,v=c.clientY;o=setTimeout(()=>{const E=H.isImage(d)?De.rectangle:d.shape||De.rectangle;zo(e,{visible:!0,position:{x:S-140,y:v+20},sourceElement:d,currentShape:E,hitIndex:b,hitPoint:y,mode:"hover"})},50)}}else s=-1,m.visible&&m.mode==="hover"&&(o=setTimeout(()=>{const S=Er(e);S.visible&&S.mode==="hover"&&zo(e,{...vr})},300));const N=Ji.getElementRef(d);(T=N==null?void 0:N.getGenerator)!=null&&T.call(N,ey.key)&&t(c)},e.pointerLeave=c=>{o&&(clearTimeout(o),o=null),n(c)},e.globalPointerUp=c=>{var d;i(c);const u=e.children.length;if(u>r){const m=e.children[u-1];if(H.isArrowLine(m)){const f=m;if(!((d=f.target)==null?void 0:d.boundId)){const g=f.points||[];if(g.length>=2){const x=g[g.length-1];setTimeout(()=>{zo(e,{visible:!0,position:{x:a.x-140,y:a.y+20},sourceElement:null,currentShape:De.rectangle,hitIndex:-1,hitPoint:null,mode:"arrowLine",arrowLineElement:m,arrowLineEndPoint:x})},50)}}}}r=e.children.length},e},Io=100;function LP(e){switch(e){case"ArrowRight":return pt.right;case"ArrowDown":return pt.bottom;case"ArrowLeft":return pt.left;case"ArrowUp":return pt.top;default:return null}}function OP(e){switch(e){case pt.top:return 0;case pt.right:return 1;case pt.bottom:return 2;case pt.left:return 3;default:return 1}}function FP(e){return(e+2)%4}function HP(e,t,n,i,o,s){const r={x:t-i/2,y:n-o/2,width:i,height:o};for(const a of e.children)if(a.id!==s&&H.isDrawElement(a)&&!H.isArrowLine(a))try{const c=ge.getRectangleByPoints(a.points);if(r.x<c.x+c.width&&r.x+r.width>c.x&&r.y<c.y+c.height&&r.y+r.height>c.y)return!0}catch{}return!1}function zP(e,t,n){const i=ge.getRectangleByPoints(t.points),o=i.width,s=i.height,r=i.x+o/2,a=i.y+s/2;let c,u;switch(n){case pt.right:c=r+o/2+Io+o/2,u=a;break;case pt.bottom:c=r,u=a+s/2+Io+s/2;break;case pt.left:c=r-o/2-Io-o/2,u=a;break;case pt.top:c=r,u=a-s/2-Io-s/2;break;default:c=r+o/2+Io+o/2,u=a}let d=0;const m=n===pt.right||n===pt.left?s+20:o+20;for(;HP(e,c,u,o,s,t.id)&&(d+=m,n===pt.right||n===pt.left?u=a+d:c=r+d,!(d>1e3)););const f=[[c-o/2,u-s/2],[c+o/2,u+s/2]],g=t.shape||"rectangle",x=uc(e,f,g);if(x.fill="#ffffff",H.isShapeElement(t)&&!H.isText(t)){const A=t;A.fill&&A.fill!=="none"&&(x.fill=A.fill),A.strokeColor!==void 0&&(x.strokeColor=A.strokeColor),A.strokeWidth!==void 0&&(x.strokeWidth=A.strokeWidth)}const b=OP(n),y=FP(b),w=ge.getEdgeCenterPoints(i)[b],T=ur(w,t)||w,S=H.isShapeElement(t)?os(e,T,t):void 0,v=ge.getRectangleByPoints(x.points),R=ge.getEdgeCenterPoints(v)[y],q=ur(R,x)||R,$=os(e,q,x),V=Af(kn.elbow,[T,q],{marker:ss.none,connection:S,boundId:t.id},{marker:ss.arrow,connection:$,boundId:x.id},[],{});ue.insertNode(e,V,[e.children.length]),ue.insertNode(e,x,[e.children.length]);const U=x.id;setTimeout(()=>{const A=e.children.find(_=>_.id===U);A&&(oi(e),_i(e,A),fe.updatePointerType(e,vt.selection),Mf(e,[c,u]))},50)}function GP(e,t){var o,s,r,a;const n=[],i=[];for(const c of e.children){if(!H.isArrowLine(c))continue;const u=c;if(((o=u.source)==null?void 0:o.boundId)===t.id&&((s=u.target)!=null&&s.boundId)){const d=e.children.find(m=>m.id===u.target.boundId);d&&i.push(d)}if(((r=u.target)==null?void 0:r.boundId)===t.id&&((a=u.source)!=null&&a.boundId)){const d=e.children.find(m=>m.id===u.source.boundId);d&&n.push(d)}}return{incoming:n,outgoing:i}}function WP(e,t,n){const{incoming:i,outgoing:o}=GP(e,t),s=n?[...o,...i]:[...i,...o];if(s.length===0)return!1;const r=s[0];oi(e),_i(e,r);try{const a=Lt(e,[r],!1),c=a.x+a.width/2,u=a.y+a.height/2;Mf(e,[c,u])}catch{}return!0}const $P=e=>{const{keyDown:t}=e;return e.keyDown=n=>{if(!n.altKey&&!n.metaKey&&!n.ctrlKey){if(!n.shiftKey){const i=LP(n.key);if(i!==null){const o=Pf(e);if(o.length===1){const s=o[0];if(H.isShapeElement(s)&&!H.isText(s)&&!H.isImage(s)){zP(e,s,i),n.preventDefault();return}}}}if(n.key==="Tab"){const i=Be(e);if(i.length===1){const o=i[0];if(H.isDrawElement(o)&&H.isShapeElement(o)&&WP(e,o,!n.shiftKey)){n.preventDefault();return}}}}t(n)},e},XP=240,KP=new Set(["5","7"]);function YP(e,t,n){const i=n*Math.PI/180,o=Math.cos(i),s=Math.sin(i),r=e[0]-t[0],a=e[1]-t[1];return[t[0]+r*o-a*s,t[1]+r*s+a*o]}function ZP(e,t,n=0){const i=ge.getCenterPoint(e),s=Ii(e,ui).filter(r=>KP.has(String(r.handle)));if(n){const r=YP(t,i,-n),a=s.find(c=>ge.isHit(ge.getRectangleByPoints([r,r]),c.rectangle));return a&&(a.cursorClass=Wr(a.cursorClass,n)),a}return s.find(r=>ge.isHit(ge.getRectangleByPoints([t,t]),r.rectangle))}function QP(e){const t=Be(e);return t.length===1&&Kn(t[0])}function JP(e,t){const n=Be(e);if(n.length!==1||!Kn(n[0]))return null;const i=n[0],o=ge.getRectangleByPoints(i.points),s=ZP(o,t,0);return s?{element:i,rectangle:o,handle:s.handle,cursorClass:s.cursorClass}:null}function eC(e,t,n,i){const o=e.width/e.height,s=t==="7",r=s?-n:n,a=Math.max(XP,e.width+r),c=a/o,u=(e.height-c)/2;return{x:s?e.x+(e.width-a):e.x,y:e.y+u,width:a,height:c}}function tC(e,t,n){const{element:i,rectangle:o,handle:s}=t,{startPoint:r,endPoint:a}=n;if(!o)return;const c=a[0]-r[0];a[1]-r[1];const u=eC(o,s,c),d=[[u.x,u.y],[u.x+u.width,u.y+u.height]],m=e.children.findIndex(f=>f.id===i.id);m>=0&&ue.setNode(e,{points:d},[m])}const nC=e=>Mi(e,{key:"audio-nodes",canResize:()=>QP(e),hitTest:(t=>JP(e,t)),onResize:(t,n)=>tC(e,t,n)}),iC=[{icon:l.jsxDEV(ef,{},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:De.rectangle},{icon:l.jsxDEV(tf,{},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:De.ellipse},{icon:l.jsxDEV(nf,{},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:De.triangle},{icon:l.jsxDEV(of,{},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:ec.terminal},{icon:l.jsxDEV(sf,{},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:De.diamond},{icon:l.jsxDEV(rf,{},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:De.parallelogram},{icon:l.jsxDEV(af,{},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:De.roundRectangle}],oC=({visible:e,position:t,currentShape:n,onSelectShape:i,onClose:o,container:s})=>{const r=p.useRef(null);p.useEffect(()=>{if(!e)return;const f=x=>{r.current&&!r.current.contains(x.target)&&o()},h=x=>{x.key==="Escape"&&o()},g=setTimeout(()=>{document.addEventListener("mousedown",f),document.addEventListener("keydown",h)},50);return()=>{clearTimeout(g),document.removeEventListener("mousedown",f),document.removeEventListener("keydown",h)}},[e,o]);const a=p.useCallback(f=>{i(f)},[i]);if(!e)return null;const c={x:isNaN(t.x)?0:t.x,y:isNaN(t.y)?0:t.y},u=200,d=80;typeof window<"u"&&(c.x+u>window.innerWidth&&(c.x=window.innerWidth-u-10),c.y+d>window.innerHeight&&(c.y=t.y-d-20));const m=l.jsxDEV("div",{ref:r,className:Y("auto-complete-shape-picker",At),style:{left:c.x,top:c.y},children:l.jsxDEV(Ye,{padding:1,children:l.jsxDEV(ft.Col,{gap:1,children:l.jsxDEV(ft.Row,{gap:1,children:iC.map((f,h)=>l.jsxDEV(ne,{className:Y("shape-button",{"is-current":n===f.pointer}),type:"icon",size:"small",visible:!0,icon:f.icon,tooltip:f.title,"aria-label":f.title,onPointerDown:({event:g})=>{g.stopPropagation(),a(f.pointer)}},h,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:127,columnNumber:15},void 0))},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:125,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:124,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:123,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/components/auto-complete-shape-picker/auto-complete-shape-picker.tsx",lineNumber:115,columnNumber:5},void 0);return s?qr.createPortal(m,s):m},sC={visible:!1,position:{x:0,y:0},sourceElement:null,currentShape:null,hitIndex:-1,hitPoint:null,mode:"hover"};function rC(e){const[t,n]=p.useState(sC);p.useEffect(()=>{if(!e)return;n(Er(e));const s=UP(e,r=>{n(r)});return()=>{s()}},[e]);const i=p.useCallback(s=>{if(!e)return;const r=Er(e);r.mode==="arrowLine"?r.arrowLineElement&&r.arrowLineEndPoint&&qP(e,r.arrowLineElement,r.arrowLineEndPoint,s):r.sourceElement&&r.hitPoint&&r.hitIndex>=0&&RP(e,r.sourceElement,r.hitIndex,r.hitPoint,s)},[e]),o=p.useCallback(()=>{e&&zc(e)},[e]);return{state:t,selectShape:i,closePicker:o}}const aC="#ffffff",lC=[De.rectangle,De.ellipse,De.triangle,De.diamond,De.parallelogram,De.roundRectangle];function $m(e){if(!H.isGeometry(e)||H.isText(e)||H.isImage(e))return!1;const t=e;return!(!t.shape||!lC.includes(t.shape)||t.fill&&t.fill!=="none")}const cC=e=>{const{afterChange:t}=e,n=new Set;return e.afterChange=()=>{t();const i=[];e.children.forEach((o,s)=>{$m(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&&$m(s)&&ue.setNode(e,{fill:aC},o)})},0)},e},Sr=new WeakMap;let Ba=null,Pn=null;function Xg(e,t){try{const n=Ji.getElementG(t);if(n)return n}catch{}if(t!=null&&t.id){const n=F.getElementHost(e);if(n){const i=n.querySelector(`g[id="${t.id}"]`);if(i)return i}}return null}function Kg(e){return e.querySelector("path, rect, ellipse, polygon, circle")}function Yg(e){let t=e.querySelector("defs");return t||(t=ny(),e.insertBefore(t,e.firstChild)),t}function uC(e,t){const n=Sr.get(t);if(n){const i=e.querySelector(`#${n}`);i&&i.remove()}}function kr(e,t,n){const i=Xg(e,t);if(!i)return;const o=Kg(i);if(!o)return;const s=i.closest("svg");if(!s)return;const r=Lt(e,[t],!1),a=(r==null?void 0:r.width)||100,c=(r==null?void 0:r.height)||100,u=If(n,t.id,a,c),d=Yg(s);if(u.defElement){const m=u.defElement.id,f=d.querySelector(`#${m}`);f?f.replaceWith(u.defElement):d.appendChild(u.defElement),o.setAttribute("fill",u.fillValue),Sr.set(t,m);const h=Sr.get(t);if(h&&h!==m){const g=d.querySelector(`#${h}`);g&&g.remove()}}else o.setAttribute("fill",u.fillValue),uC(s,t)}function or(e,t){return e.children.find(n=>n.id===t)||null}function Mn(e){const t=e.fillConfig;return t&&Vn(t)?t:e.fill&&Vn(e.fill)?e.fill:null}function Zg(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=Mn(t);if(n&&(n.type==="gradient"||n.type==="image"))return!0}return!1}function dC(e){if(!Pn)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 a=or(Pn,r),c=a?Mn(a):null;a&&c&&cn(Pn,a)&&Zg(o,a)&&t.add(a)}}}n.type==="childList"&&n.addedNodes.forEach(i=>{if(i instanceof SVGGElement&&i.hasAttribute("id")){const o=i.getAttribute("id");if(o){const s=or(Pn,o),r=s?Mn(s):null;s&&r&&cn(Pn,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=or(Pn,s),a=r?Mn(r):null;r&&a&&cn(Pn,r)&&t.add(r)}}}})}),t.size>0&&t.forEach(n=>{const i=Mn(n);i&&kr(Pn,n,i)})}function mC(e){if(Ba)return;const t=F.getElementHost(e);t&&(Pn=e,Ba=new MutationObserver(dC),Ba.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["fill"]}))}function pC(e){const t=F.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 a=or(e,r),c=a?Mn(a):null;a&&c&&cn(e,a)&&Zg(o,a)&&kr(e,a,c)}}})}function Al(e,t=!1){e.children.forEach(n=>{const i=Mn(n);i&&cn(e,n)&&(t?kr(e,n,i):requestAnimationFrame(()=>{kr(e,n,i)}))}),t&&pC(e)}let Xm=!0;const Km=new WeakSet;function Qg(e){const t=F.getElementHost(e);if(!t)return;const n=t.closest("svg")||t.querySelector("svg");n&&e.children.forEach(i=>{const o=Mn(i);if(o&&(o.type==="gradient"||o.type==="image")&&cn(e,i)){const s=Lt(e,[i],!1),r=(s==null?void 0:s.width)||100,a=(s==null?void 0:s.height)||100,c=If(o,i.id,r,a);if(c.defElement){const u=Yg(n);u.querySelector(`#${c.defElement.id}`)||(u.appendChild(c.defElement),Sr.set(i,c.defElement.id))}}})}function fC(e){let t=0;return e.children.forEach(n=>{const i=Mn(n);if(i&&(i.type==="gradient"||i.type==="image")&&cn(e,n)){const o=Xg(e,n);(o?Kg(o):null)||t++}}),t}function hC(e){if(Km.has(e))return;Km.add(e);const t=15,n=16;let i=0;const o=()=>{i++;try{if(!F.getElementHost(e))return;if(Qg(e),Al(e,!0),fC(e)>0&&i<t){const a=Math.min(n*Math.pow(1.5,i),500);setTimeout(o,a)}}catch{}};requestAnimationFrame(()=>{o(),setTimeout(o,0)})}const gC=e=>{const{afterChange:t}=e;return e.afterChange=()=>{t(),mC(e),Qg(e),Xm?(Xm=!1,Al(e,!0),hC(e)):Al(e,!0)},e};function bC(e,t){return Ii(e,ui).find(i=>ge.isHit(ge.getRectangleByPoints([t,t]),i.rectangle))}function xC(e){const t=Be(e);return t.length!==1?!1:vi(t[0])}function NC(e,t){const n=Be(e);if(n.length!==1||!vi(n[0]))return null;const i=n[0],o=ge.getRectangleByPoints(i.points),s=bC(o,t);return s?{element:i,rectangle:o,handle:s.handle,cursorClass:s.cursorClass}:null}function yC(e,t,n){const{element:i,rectangle:o,handle:s}=t;if(!o)return;const{startPoint:r,endPoint:a}=n,c=a[0]-r[0],u=a[1]-r[1],d=yo(o,s,c,u,gs(),60),m=[[d.x,d.y],[d.x+d.width,d.y+d.height]],f=e.children.findIndex(h=>h.id===i.id);f>=0&&ue.setNode(e,{points:m},[f])}function wC(e,t){const{element:n}=t,i=e.children.find(o=>o.id===n.id);i&&iy.updateFrameMembers(e,i)}const vC=e=>Mi(e,{key:"frame-elements",canResize:()=>xC(e),hitTest:t=>NC(e,t),onResize:(t,n)=>yC(e,t,n),afterResize:t=>wC(e,t)});function La(e){return!!e.locked}const EC=e=>{const{isHit:t,isRectangleHit:n,isMovable:i}=e;return e.isHit=(o,s,r)=>La(o)?!1:t(o,s,r),e.isRectangleHit=(o,s)=>La(o)?!1:n(o,s),e.isMovable=o=>La(o)?!1:i(o),e},Ml="aitu-tab-sync-version",SC=500,Il=`tab-${Date.now()}-${Math.random().toString(36).substr(2,9)}`;function Jg({onSyncNeeded:e,enabled:t=!0,currentBoardId:n}){const i=p.useRef(-1),o=p.useRef();p.useEffect(()=>{if(!t)return;const s=localStorage.getItem(Ml);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]),p.useEffect(()=>{if(!t)return;const s=()=>{const a=localStorage.getItem(Ml);if(a)try{const c=JSON.parse(a);if(c.version>i.current&&c.tabId!==Il){const u=n&&c.boardId&&c.boardId===n;i.current=c.version,u&&e()}else c.version>i.current&&c.tabId===Il&&(i.current=c.version)}catch{const c=parseInt(a,10);c>i.current&&(i.current=c)}};o.current=setInterval(()=>{document.hidden||s()},SC);const r=()=>{document.hidden||s()};return document.addEventListener("visibilitychange",r),()=>{o.current&&clearInterval(o.current),document.removeEventListener("visibilitychange",r)}},[t,e,n])}function eb(e){try{const n={version:Date.now(),tabId:Il,boardId:e};localStorage.setItem(Ml,JSON.stringify(n))}catch{}}const yA=Object.freeze(Object.defineProperty({__proto__:null,markTabSyncVersion:eb,useTabSync:Jg},Symbol.toStringTag,{value:"Module"})),Vl=new Set,Ym=4,Ls=1e3;function Xn(e,t){if(t===void 0){console.info(`[StartupPrefetch] ${e}`);return}console.info(`[StartupPrefetch] ${e}`,t)}function Zm(e){e.forEach(t=>Vl.delete(t))}function Qm(){const e=typeof navigator<"u"?navigator.connection:void 0;return e?e.saveData?!1:e.effectiveType!=="slow-2g"&&e.effectiveType!=="2g":!0}function tb(e){if(typeof window>"u"||!("serviceWorker"in navigator)||e.length===0||!Qm()){Xn("skip idle prefetch request",{hasWindow:typeof window<"u",hasServiceWorker:typeof navigator<"u"&&"serviceWorker"in navigator,groupCount:e.length,canUseConnection:Qm()});return}const t=e.filter(s=>Vl.has(s)?!1:(Vl.add(s),!0));if(t.length===0){Xn("skip idle prefetch request: all groups already requested",{groups:e});return}const n={type:"SW_PREFETCH_GROUPS",groups:t},i=(s=1)=>{const r=navigator.serviceWorker.controller;if(r){r.postMessage(n),Xn("posted idle prefetch request via controller",{groups:t,attempt:s});return}navigator.serviceWorker.ready.then(a=>{if(a.active){a.active.postMessage(n),Xn("posted idle prefetch request via registration.active",{groups:t,attempt:s});return}if(s>=Ym){Zm(t),console.warn("[StartupPrefetch] idle prefetch request dropped: no active service worker",{groups:t,attempt:s});return}Xn("retry idle prefetch request: no active service worker yet",{groups:t,attempt:s,retryDelayMs:Ls}),window.setTimeout(()=>i(s+1),Ls)}).catch(a=>{if(s>=Ym){Zm(t),console.warn("[StartupPrefetch] idle prefetch request failed after retries",{groups:t,attempt:s,error:a});return}Xn("retry idle prefetch request after navigator.serviceWorker.ready failure",{groups:t,attempt:s,retryDelayMs:Ls}),window.setTimeout(()=>i(s+1),Ls)})},o=window.requestIdleCallback;typeof o=="function"?(Xn("queue idle prefetch request with requestIdleCallback",{groups:t}),o(()=>i(),{timeout:1500})):(Xn("queue idle prefetch request with setTimeout fallback",{groups:t}),window.setTimeout(i,400))}const kC=p.lazy(()=>Me(()=>import("./DeferredAIInputBar-rlzvr9H5.js"),__vite__mapDeps([0,4,5,6,7,8,9]),import.meta.url).then(e=>({default:e.DeferredAIInputBar}))),TC=p.lazy(()=>Me(()=>import("./index-C66Oc7kp.js"),__vite__mapDeps([0,4,5,10]),import.meta.url).then(e=>({default:e.ChatDrawer}))),mn=["tool-windows","runtime-static-assets"],DC=p.lazy(()=>Me(()=>import("./DrawnixDeferredFeatures-6BN6HsXW.js"),__vite__mapDeps([0,11]),import.meta.url).then(e=>({default:e.DrawnixDeferredFeatures}))),_C=p.lazy(()=>Me(()=>import("./tool-windows-BTXOQvEU.js").then(e=>e.p5),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.DrawnixDeferredRuntime}))),jC=p.lazy(()=>Me(()=>import("./ttd-dialog-CMzq1PeM.js"),__vite__mapDeps([0,4,6,7,8,2,3,12,13]),import.meta.url).then(e=>({default:e.TTDDialog}))),PC=p.lazy(()=>Me(()=>import("./settings-dialog-BVG80WDy.js"),__vite__mapDeps([0,4,6,14]),import.meta.url).then(e=>({default:e.SettingsDialog}))),CC=p.lazy(()=>Me(()=>import("./tool-windows-BTXOQvEU.js").then(e=>e.o$),__vite__mapDeps([0]),import.meta.url).then(e=>({default:e.UnifiedMediaViewer}))),AC=p.lazy(()=>Me(()=>import("./CanvasAudioPlayer-C4pqPNnG.js"),__vite__mapDeps([0,15]),import.meta.url).then(e=>({default:e.CanvasAudioPlayer}))),MC=[],IC=({value:e,viewport:t,theme:n,onChange:i,onSelectionChange:o,onViewportChange:s,onThemeChange:r,onValueChange:a,afterInit:c,onBoardSwitch:u,onTabSyncNeeded:d,isDataReady:m=!1,currentBoardId:f})=>{const h={readonly:!1,hideScrollbar:!1,disabledScrollOnNonFocus:!1,themeColors:Sy},[g,x]=p.useState(()=>{const ie=new fk(window.navigator.userAgent);return{pointer:vt.hand,isMobile:ie.mobile()!==null,isPencilMode:!1,openDialogTypes:new Set,dialogInitialData:null,dialogInitialDataByType:{},openCleanConfirm:!1,openSettings:!1}}),[b,y]=p.useState(null),[N,w]=p.useState(!1),[T,S]=p.useState(!1),[v,E]=p.useState(!1),[R,q]=p.useState(!1),[$,V]=p.useState({mode:ii.BROWSE}),[U,A]=p.useState(!1),[_,M]=p.useState(!1),[P,Z]=p.useState(!1),[pe,I]=p.useState(!1),[G,ce]=p.useState(!1),[X,ae]=p.useState(!1),[le,be]=p.useState(!1),we=p.useRef(null),Fe=p.useCallback(()=>{w(!1),S(!1),E(!1),q(!1)},[]),K=p.useCallback((ie=MC)=>{tb(ie),Z(!0)},[]),Ce=p.useCallback((ie=mn)=>{K(ie),be(!0),ae(!0)},[K]),We=p.useCallback(()=>{Ce(mn),Promise.all([Me(()=>import("./tool-windows-BTXOQvEU.js").then(ie=>ie.oR),__vite__mapDeps([0]),import.meta.url),Me(()=>import("./tool-windows-BTXOQvEU.js").then(ie=>ie.oQ),__vite__mapDeps([0]),import.meta.url)]).then(([{toolWindowService:ie},{BUILT_IN_TOOLS:Ae}])=>{const Ue=Ae.find(Le=>Le.id==="knowledge-base");if(!Ue)return;const _e=ie.getToolState(Ue.id);_e&&_e.status==="open"?ie.closeTool(Ue.id):ie.openTool(Ue)})},[Ce]);p.useEffect(()=>{const ie=Ae=>{const{noteId:Ue}=Ae.detail;Ce(mn),Promise.all([Me(()=>import("./tool-windows-BTXOQvEU.js").then(_e=>_e.oR),__vite__mapDeps([0]),import.meta.url),Me(()=>import("./tool-windows-BTXOQvEU.js").then(_e=>_e.oQ),__vite__mapDeps([0]),import.meta.url)]).then(([{toolWindowService:_e},{BUILT_IN_TOOLS:Le}])=>{const Mt=Le.find(It=>It.id==="knowledge-base");if(!Mt)return;const Dt=_e.isToolOpen(Mt.id);_e.openTool(Mt,{componentProps:Ue?{initialNoteId:Ue}:{}}),Dt&&Ue&&window.setTimeout(()=>{window.dispatchEvent(new CustomEvent("kb:open-note",{detail:{noteId:Ue}}))},50)})};return window.addEventListener("kb:open",ie),()=>window.removeEventListener("kb:open",ie)},[Ce]);const it=p.useCallback(()=>{if(Ce(mn),N){w(!1);return}S(!1),E(!1),q(!1),w(!0)},[Ce,N]),Ke=p.useCallback(()=>{if(Ce(mn),T){S(!1);return}w(!1),E(!1),q(!1),S(!0)},[Ce,T]),D=p.useCallback(()=>{if(K(mn),v){E(!1);return}w(!1),S(!1),q(!1),E(!0)},[K,v]),j=p.useCallback(ie=>{Ce(mn),Fe(),V({mode:ii.BROWSE,...ie}),q(!0)},[Fe,Ce]),W=p.useCallback(()=>{K(mn),A(!0)},[K]),Q=p.useCallback(()=>{K(mn),M(!0)},[K]),C=p.useCallback(ie=>{x(ie)},[]),B=p.useCallback(ie=>{x(Ae=>({...Ae,...ie}))},[]);p.useEffect(()=>{b&&(b.appState=g,b.__setAppState=C,we.current=b)},[b,g,C]),p.useEffect(()=>{if(new URLSearchParams(window.location.search).has("tool")){Ce(mn);return}},[Ce]),p.useEffect(()=>{if(typeof window>"u"||!("serviceWorker"in navigator))return;let ie=!1;const Ae=window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1",Ue=Dt=>{var It;((It=Dt.data)==null?void 0:It.type)==="SW_IDLE_PREFETCH_STATUS"&&mn.every(Bt=>{var Ht;return(Ht=Dt.data.completedGroups)==null?void 0:Ht.includes(Bt)})&&(ie=!0,be(!0))};navigator.serviceWorker.addEventListener("message",Ue);const _e={type:"SW_IDLE_PREFETCH_STATUS_GET"},Le=navigator.serviceWorker.controller;Le?Le.postMessage(_e):navigator.serviceWorker.ready.then(Dt=>{var It;(It=Dt.active)==null||It.postMessage(_e)}).catch(()=>{});const Mt=window.setTimeout(()=>{ie||le||(Ae?console.info("[Drawnix] SW idle prefetch status unresolved in dev, enabling minimized tools bar fallback"):console.warn("[Drawnix] SW idle prefetch status unresolved, enabling minimized tools bar fallback"),be(!0))},2200);return()=>{window.clearTimeout(Mt),navigator.serviceWorker.removeEventListener("message",Ue)}},[le]),p.useEffect(()=>{const ie=window.requestIdleCallback;let Ae;const Ue=window.setTimeout(()=>{const _e=()=>{I(!0),ce(!0)};if(typeof ie=="function"){Ae=ie(_e,{timeout:2500});return}_e()},5e3);return()=>{var _e;window.clearTimeout(Ue),typeof Ae=="number"&&((_e=window.cancelIdleCallback)==null||_e.call(window,Ae))}},[]),p.useEffect(()=>{const ie=Ae=>{const Ue=Ae,{message:_e}=Ue.detail;re.error({content:"API Key 无效或已过期,请重新配置",duration:5e3}),console.error("[Drawnix] API auth error:",_e),x(Le=>({...Le,openSettings:!0}))};return window.addEventListener(Pu,ie),()=>{window.removeEventListener(Pu,ie)}},[]);const L=[dy,my,py,hk,nT,D_(B),rj,bj,NP,fP,xj(B),Vj(B),fy,hy,iP,gy,by,xy,BP,$P,Ny,vC,yy,wy,vy,nC,cC,gC,Ey,EC,Kj,Zj],z=p.useRef(null),{saveBoard:te,createBoard:ee,switchBoard:O}=oy(),J=p.useCallback(async()=>{if(i&&we.current){const ie={children:we.current.children||[],viewport:we.current.viewport,theme:we.current.theme};await te(ie)}},[i,te]),oe=p.useCallback(async()=>{await J();const ie=await ee({name:"新画布"});ie&&(await O(ie.id),setTimeout(()=>{Ei()},500))},[J,ee,O]),Ie=p.useCallback(ie=>{const Ae=we.current;if(Ae&&ie){const _e=Be(Ae).map(Le=>Le.id).filter(Boolean);B({lastSelectedElementIds:_e})}o&&o(ie)},[o,B]),ut=p.useMemo(()=>({appState:g,setAppState:C,board:b}),[g,C,b]),Re=pe||G||X||g.openCommandPalette||g.openCanvasSearch||N||T||R||U||_;return l.jsxDEV(sy,{children:l.jsxDEV(ry,{children:l.jsxDEV(ay,{children:l.jsxDEV(ly,{children:l.jsxDEV(cy,{children:l.jsxDEV(VP,{onOpenMediaLibrary:j,children:l.jsxDEV(SP,{children:l.jsxDEV(uy.Provider,{value:ut,children:l.jsxDEV(VC,{value:e,viewport:t,theme:n,options:h,plugins:L,containerRef:z,appState:g,board:b,setBoard:y,projectDrawerOpen:N,toolboxDrawerOpen:T,taskPanelExpanded:v,mediaLibraryOpen:R,mediaLibraryConfig:$,backupRestoreOpen:U,onChange:i,onSelectionChange:Ie,onViewportChange:s,onThemeChange:r,onValueChange:a,afterInit:c,onBoardSwitch:u,onTabSyncNeeded:d,handleProjectDrawerToggle:it,handleToolboxDrawerToggle:Ke,handleKnowledgeBaseToggle:We,handleTaskPanelToggle:D,handleOpenMediaLibrary:j,handleOpenBackupRestore:W,handleOpenCloudSync:Q,setProjectDrawerOpen:w,setToolboxDrawerOpen:S,setMediaLibraryOpen:q,setBackupRestoreOpen:A,cloudSyncOpen:_,setCloudSyncOpen:M,handleBeforeSwitch:J,isDataReady:m,onCreateProjectForMemory:oe,currentBoardId:f,deferredRuntimeEnabled:P,shouldRenderDeferredFeatures:Re,versionUpdateEnabled:pe,performancePanelEnabled:G,toolWindowManagerEnabled:X,minimizedToolsBarEnabled:le,enableToolWindows:Ce},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:727,columnNumber:21},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:726,columnNumber:19},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:725,columnNumber:17},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:724,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:723,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:722,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:721,columnNumber:9},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:720,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:719,columnNumber:5},void 0)},VC=({value:e,viewport:t,theme:n,options:i,plugins:o,containerRef:s,appState:r,board:a,setBoard:c,projectDrawerOpen:u,toolboxDrawerOpen:d,taskPanelExpanded:m,mediaLibraryOpen:f,mediaLibraryConfig:h,backupRestoreOpen:g,deferredRuntimeEnabled:x,shouldRenderDeferredFeatures:b,versionUpdateEnabled:y,performancePanelEnabled:N,toolWindowManagerEnabled:w,minimizedToolsBarEnabled:T,enableToolWindows:S,cloudSyncOpen:v,onChange:E,onSelectionChange:R,onViewportChange:q,onThemeChange:$,onValueChange:V,afterInit:U,onBoardSwitch:A,onTabSyncNeeded:_,handleProjectDrawerToggle:M,handleToolboxDrawerToggle:P,handleKnowledgeBaseToggle:Z,handleTaskPanelToggle:pe,handleOpenMediaLibrary:I,handleOpenBackupRestore:G,handleOpenCloudSync:ce,setProjectDrawerOpen:X,setToolboxDrawerOpen:ae,setMediaLibraryOpen:le,setBackupRestoreOpen:be,setCloudSyncOpen:we,handleBeforeSwitch:Fe,isDataReady:K,onCreateProjectForMemory:Ce,currentBoardId:We})=>{const{setAppState:it}=Gt(),{chatDrawerRef:Ke}=Gg(),{language:D}=Se(),j=Cu(xe=>xe.error),W=Cu(xe=>xe.playing||!!xe.activeAudioUrl||!!xe.activeReadingSourceId),Q=p.useRef(void 0),[C,B]=p.useState(W);Ej({board:a,pointer:r.pointer}),Jg({onSyncNeeded:p.useCallback(()=>{_?_():Ei()},[_]),enabled:!0,currentBoardId:We});const[L,z]=p.useState(!1),[te,ee]=p.useState(null),[O,J]=p.useState(null),oe=p.useRef(null),[Ie,ut]=p.useState(!1),[Re,ie]=p.useState([]),[Ae,Ue]=p.useState(0);p.useEffect(()=>{if(!j){Q.current=void 0;return}j!==Q.current&&(Q.current=j,re.error(j))},[j]),p.useEffect(()=>{W&&B(!0)},[W]),p.useEffect(()=>{xa.setCanvasQueue(Za(e))},[e]),p.useEffect(()=>()=>{xa.stopAndClear()},[]);const _e=p.useCallback(()=>{if(!a||!a.children)return{items:[],elementIds:[]};const xe=[],He=[];for(const Ne of a.children){const Ve=Ne.url;if(!Ve||typeof Ve!="string"||Na(Ne))continue;const ot=H.isDrawElement(Ne)&&H.isImage(Ne),ze=wn(Ne);(ot||ze)&&(xe.push({id:Ne.id,url:Ve,type:ze?"video":"image",title:Ne.name||void 0}),He.push(Ne.id))}return{items:xe,elementIds:He}},[a]),Le=p.useCallback(xe=>{const{items:He,elementIds:Ne}=_e();if(He.length===0)return;const Ve=Ne.indexOf(xe);Ve!==-1&&(ie(He),Ue(Ve),ut(!0))},[_e]),Mt=p.useCallback(()=>{ut(!1)},[]),Dt=p.useCallback(async(xe,He)=>{const Ne=He.id;if(!(!Ne||!a))try{const{unifiedCacheService:Ve}=await Me(async()=>{const{unifiedCacheService:dt}=await import("./tool-windows-BTXOQvEU.js").then(dn=>dn.oI);return{unifiedCacheService:dt}},__vite__mapDeps([0]),import.meta.url),{Transforms:ot}=await Me(async()=>{const{Transforms:dt}=await import("./tool-windows-BTXOQvEU.js").then(dn=>dn.oG);return{Transforms:dt}},__vite__mapDeps([0]),import.meta.url),ze=`edited-image-${Date.now()}`,Oe=`/__aitu_cache__/image/${ze}.png`,ht=await(await fetch(xe)).blob();await Ve.cacheMediaFromBlob(Oe,ht,"image",{taskId:ze});const _t=new Image;await new Promise((dt,dn)=>{_t.onload=()=>dt(),_t.onerror=()=>dn(new Error("Failed to load edited image")),_t.src=xe});const Vt=a.children.findIndex(dt=>dt.id===Ne);if(Vt>=0){const dt=a.children[Vt],{newPoints:dn}=await Fp({url:dt.url,width:dt.width,height:dt.height,points:dt.points||[[0,0],[0,0]]},_t.naturalWidth,_t.naturalHeight);ot.setNode(a,{url:Oe,width:_t.naturalWidth,height:_t.naturalHeight,points:dn},[Vt])}}catch(Ve){console.error("Failed to update image:",Ve),re.error("更新失败")}},[a]),It=p.useCallback(async xe=>{if(a)try{const{unifiedCacheService:He}=await Me(async()=>{const{unifiedCacheService:Vt}=await import("./tool-windows-BTXOQvEU.js").then(dt=>dt.oI);return{unifiedCacheService:Vt}},__vite__mapDeps([0]),import.meta.url),{insertImageFromUrl:Ne}=await Me(async()=>{const{insertImageFromUrl:Vt}=await import("./tool-windows-BTXOQvEU.js").then(dt=>dt.oM);return{insertImageFromUrl:Vt}},__vite__mapDeps([0]),import.meta.url),Ve=`edited-image-${Date.now()}`,ot=`/__aitu_cache__/image/${Ve}.png`,Oe=await(await fetch(xe)).blob();await He.cacheMediaFromBlob(ot,Oe,"image",{taskId:Ve});const st=new Image;await new Promise((Vt,dt)=>{st.onload=()=>Vt(),st.onerror=()=>dt(new Error("Failed to load edited image")),st.src=xe});const ht=Cr(a),_t=[((ht==null?void 0:ht[0])??0)+100,((ht==null?void 0:ht[1])??0)+100];await Ne(a,ot,_t,!1,{width:st.naturalWidth,height:st.naturalHeight},!1,!0)}catch(He){console.error("Failed to insert image:",He),re.error("插入失败")}},[a]),{state:Bt,selectShape:Ht,closePicker:mi}=rC(a);p.useEffect(()=>{O&&oe.current&&oe.current.focus()},[O]);const Gn=p.useCallback(()=>{if(!a||!O||!oe.current){J(null);return}const xe=oe.current.innerText||"";xe.trim()&&(Ar.insertText(a,O.worldPoint,xe),requestAnimationFrame(()=>{const He=a.children[a.children.length-1];if(H.isText(He)){const Ne=He;if(!isFinite(Ne.textHeight)){const Ve=ge.getRectangleByPoints(Ne.points);ue.setNode(a,{textHeight:Ve.height},[a.children.length-1])}}})),J(null),fe.updatePointerType(a,vt.selection),it(He=>({...He,pointer:vt.selection}))},[a,O,it]);return p.useEffect(()=>{if(!a)return;const xe=Ne=>{const Ve=Ne.target;if(!(Ve.closest(".board-host-svg")||Ve.closest(".plait-board-container")))return;const ze=Ot(a,Ft(a,Ne.clientX,Ne.clientY)),Oe=Ya(a,ze);if(Oe&&Pt(Oe)){ig(a,Oe,D),Ne.preventDefault(),Ne.stopPropagation();return}if(Oe){if(Na(Oe)){Ne.preventDefault(),Ne.stopPropagation();return}const ht=Oe.url;if(ht&&typeof ht=="string"){const _t=H.isDrawElement(Oe)&&H.isImage(Oe),Vt=wn(Oe);if(_t||Vt){Le(Oe.id),Ne.preventDefault(),Ne.stopPropagation();return}}}const st=Ve.closest(".plait-tool-container")||Ve.closest(".plait-workzone-container")||Ve.closest("foreignObject");if(!Oe&&!st){const ht=[Ne.clientX,Ne.clientY];ee(ht),z(!0)}},He=s.current;return He&&He.addEventListener("dblclick",xe),()=>{He&&He.removeEventListener("dblclick",xe)}},[a,s,Le,D]),p.useEffect(()=>{if(!a)return;const xe=Ne=>{const Ve=Ne.target;if(!(Ve.closest(".board-host-svg")||Ve.closest(".plait-board-container")))return;const ze=Ot(a,Ft(a,Ne.clientX,Ne.clientY)),Oe=Ya(a,ze);if(Oe&&Na(Oe)&&!Kn(Oe)){B(!0);const st=ky(Oe);if(st){Ne.preventDefault(),Ne.stopPropagation(),xa.togglePlaybackInQueue(st,Za(a.children),{queueSource:"canvas",queueId:Op,queueName:Lp}).catch(()=>{});return}}if(F.isPointer(a,De.text)&&!(Ve.closest(".plait-tool-container")||Ve.closest(".plait-workzone-container")||Ve.closest("foreignObject"))&&!Oe){J({screenX:Ne.clientX,screenY:Ne.clientY,worldPoint:ze,zoom:a.viewport.zoom}),Ne.preventDefault(),Ne.stopPropagation();return}u&&X(!1),d&&ae(!1)},He=s.current;return He&&He.addEventListener("click",xe),()=>{He&&He.removeEventListener("click",xe)}},[a,s,u,d,X,ae]),l.jsxDEV("div",{className:Y("drawnix",{"drawnix--mobile":r.isMobile}),ref:s,children:l.jsxDEV("div",{className:"drawnix__main",children:[l.jsxDEV(ck,{value:e,viewport:t,theme:n,options:i,plugins:o,onChange:xe=>{E&&E(xe)},onSelectionChange:R,onViewportChange:q,onThemeChange:$,onValueChange:V,children:[l.jsxDEV(sk,{afterInit:xe=>{c(xe),window.__drawnixBoard=xe,Wg.setBoard(xe),U&&U(xe),xe.afterChange&&xe.afterChange()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1413,columnNumber:11},void 0),l.jsxDEV(vP,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1434,columnNumber:11},void 0),l.jsxDEV(T_,{projectDrawerOpen:u,onProjectDrawerToggle:M,toolboxDrawerOpen:d,onToolboxDrawerToggle:P,taskPanelExpanded:m,onTaskPanelToggle:pe,onOpenBackupRestore:G,onOpenCloudSync:ce,onKnowledgeBaseToggle:Z,onOpenMediaLibrary:I,deferredFeaturesEnabled:w,minimizedToolsBarEnabled:T,onEnableToolWindows:S},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1436,columnNumber:11},void 0),C&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(AC,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1453,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1452,columnNumber:13},void 0),l.jsxDEV(HD,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1457,columnNumber:11},void 0),l.jsxDEV(Uj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1458,columnNumber:11},void 0),l.jsxDEV(Nj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1459,columnNumber:11},void 0),l.jsxDEV(kj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1460,columnNumber:11},void 0),l.jsxDEV(Mj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1461,columnNumber:11},void 0),l.jsxDEV(Cj,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1462,columnNumber:11},void 0),r.openDialogTypes.size>0&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(jC,{container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1465,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1464,columnNumber:13},void 0),r.openSettings&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(PC,{container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1470,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1469,columnNumber:13},void 0),l.jsxDEV(Ij,{container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1473,columnNumber:11},void 0),l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(kC,{isDataReady:K,activationKey:0},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1475,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1474,columnNumber:11},void 0),l.jsxDEV(MP,{position:te,visible:L,onClose:()=>z(!1),onOpenMediaLibrary:I},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1478,columnNumber:11},void 0),O&&l.jsxDEV("div",{ref:oe,contentEditable:!0,suppressContentEditableWarning:!0,style:{position:"fixed",left:O.screenX,top:O.screenY-14*O.zoom/2,minWidth:"2px",minHeight:"1.5em",outline:"none",border:"none",background:"transparent",fontSize:`${14*O.zoom}px`,lineHeight:"1.5",color:"#333",caretColor:"#333",zIndex:1e4,whiteSpace:"pre-wrap",fontFamily:"inherit"},onBlur:Gn,onKeyDown:xe=>{xe.key==="Escape"&&J(null),xe.stopPropagation()}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1486,columnNumber:13},void 0),Ie&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(CC,{visible:Ie,items:Re,initialIndex:Ae,onClose:Mt,showThumbnails:!0,useBuiltInEditor:!0,showEditOverwrite:!0,onEditOverwrite:Dt,onEditInsert:It},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1519,columnNumber:15},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1518,columnNumber:13},void 0),l.jsxDEV(oC,{visible:Bt.visible,position:Bt.position,currentShape:Bt.currentShape||void 0,onSelectShape:Ht,onClose:mi,container:s.current},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1533,columnNumber:11},void 0),l.jsxDEV(CP,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1542,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1399,columnNumber:9},void 0),l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(TC,{ref:Ke},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1545,columnNumber:11},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1544,columnNumber:9},void 0),x&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(_C,{board:a,value:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1549,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1548,columnNumber:11},void 0),b&&l.jsxDEV(p.Suspense,{fallback:null,children:l.jsxDEV(DC,{board:a,value:e,containerRef:s,versionUpdateEnabled:y,performancePanelEnabled:N,toolWindowManagerEnabled:w,projectDrawerOpen:u,toolboxDrawerOpen:d,mediaLibraryOpen:f,mediaLibraryConfig:h,backupRestoreOpen:g,cloudSyncOpen:v,onBoardSwitch:A,setProjectDrawerOpen:X,setToolboxDrawerOpen:ae,setMediaLibraryOpen:le,setBackupRestoreOpen:be,setCloudSyncOpen:we,handleBeforeSwitch:Fe,onCreateProjectForMemory:Ce},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1554,columnNumber:13},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1553,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1398,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/packages/drawnix/src/drawnix.tsx",lineNumber:1392,columnNumber:5},void 0)},UC="Opentu",RC="Opentu - AI应用平台";function Tr(e){e&&e.trim()?document.title=`${UC} - ${e.trim()}`:document.title=RC}function qC(e){if(!e){Tr();return}const t=Vf.getBoard(e);Tr(t==null?void 0:t.name)}function BC(e,t){return p.useEffect(()=>{qC(e)},[e,t]),p.useEffect(()=>{const i=Vf.observeEvents().subscribe(o=>{if(o.type==="boardUpdated"){const s=o.payload;s&&s.id===e&&Tr(s.name)}});return()=>{i.unsubscribe()}},[e]),{updateTitle:p.useCallback(i=>{Tr(i)},[])}}const nb="main_board_content",ib=zs.createInstance({name:"Drawnix",storeName:Ty,driver:[zs.INDEXEDDB,zs.LOCALSTORAGE]});async function ob(){try{const e=await tl.loadState();return(e==null?void 0:e.migrationCompleted)===!0}catch(e){return console.error("[WorkspaceMigration] Failed to check migration status:",e),!1}}async function Jm(){try{const e=await tl.loadState();e.migrationCompleted=!0,await tl.saveState(e)}catch(e){console.error("[WorkspaceMigration] Failed to mark migration completed:",e)}}async function LC(){try{const e=await ib.getItem(nb);if(e&&e.children&&e.children.length>0)return e;const t=localStorage.getItem(Uf);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 OC(){try{if(await ob())return null;const t=await LC();if(!t||!t.children||t.children.length===0)return await Jm(),null;const n=Nn.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 Jm(),await FC(),i.id):(console.error("[WorkspaceMigration] Failed to create board"),null)}catch(e){return console.error("[WorkspaceMigration] Migration failed:",e),null}}async function FC(){try{await ib.removeItem(nb),localStorage.removeItem(Uf)}catch(e){console.error("[WorkspaceMigration] Failed to clear legacy data:",e)}}function Vo(e){if(!Yt.isAnalyticsEnabled())return;const t=HC(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(()=>{Yt.track("$web_vitals",i)},0)}function HC(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 zC(){try{const e=await Me(()=>import("./web-vitals-DcvjKPr-.js"),[],import.meta.url),{onCLS:t,onFCP:n,onLCP:i,onTTFB:o,onINP:s}=e;t(Vo),n(Vo),i(Vo),o(Vo),s(Vo)}catch(e){console.error("[Web Vitals] Failed to initialize monitoring:",e)}}const hs="page_report",GC="app_page_view";let ep=!1,tp="";function WC(){const e=window.innerWidth;return e<768?"mobile":e<1024?"tablet":"desktop"}const np=200;function $C(){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:WC(),user_agent:e.length>np?e.slice(0,np):e,language:navigator.language,timestamp:Date.now()}}function XC(){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 Oa(){if(!Yt.isAnalyticsEnabled())return;const e=$C();e.page_url!==tp&&(tp=e.page_url,Yt.track(GC,{category:hs,...e}))}function ip(){if(!Yt.isAnalyticsEnabled())return;const e=XC();if(!e){console.warn("[Page Report] Performance data not available");return}Yt.track("page_performance",{category:hs,...e})}function KC(){if(!Yt.isAnalyticsEnabled())return;const e=Math.round(performance.now());Yt.track("page_unload",{category:hs,page_url:window.location.href,page_path:window.location.pathname,time_on_page:e,timestamp:Date.now()})}function YC(){try{if(ep)return;ep=!0,Oa(),document.readyState==="complete"?ip():window.addEventListener("load",()=>{setTimeout(()=>{ip()},0)}),window.addEventListener("beforeunload",()=>{KC()}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?Yt.track("page_hidden",{category:hs,page_url:window.location.href,page_path:window.location.pathname,timestamp:Date.now()}):document.visibilityState==="visible"&&Yt.track("page_visible",{category:hs,page_url:window.location.href,page_path:window.location.pathname,timestamp:Date.now()})}),window.addEventListener("popstate",()=>{setTimeout(()=>{Oa()},100)});const e=history.pushState;history.pushState=function(...t){e.apply(this,t),setTimeout(()=>{Oa()},100)}}catch(e){console.error("[Page Report] Failed to initialize monitoring:",e)}}function op(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 sp(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 ZC(){if(typeof window>"u")return()=>{};const e=i=>{if(i.touches.length>1){const o=i.target;if(op(o))return;sp(o)&&(i.preventDefault(),i.stopPropagation())}},t=i=>{const o=i.target;op(o)||sp(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 Ul=Xr.DB_CLEANUP_DONE;function sb(){let e=0;for(const t of Rf)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 rb(){localStorage.getItem(Ul)||(sb(),localStorage.setItem(Ul,Date.now().toString()))}function QC(){localStorage.removeItem(Ul)}typeof window<"u"&&(window.__dbCleanup={run:rb,reset:QC,cleanupLS:sb,LS_KEYS_DEPRECATED:Rf});const Gc=[{lsKey:jt.PROMPT_HISTORY,idbKey:jt.PROMPT_HISTORY,deleteAfterMigration:!0},{lsKey:jt.VIDEO_PROMPT_HISTORY,idbKey:jt.VIDEO_PROMPT_HISTORY,deleteAfterMigration:!0},{lsKey:jt.PRESET_SETTINGS,idbKey:jt.PRESET_SETTINGS,deleteAfterMigration:!0},{lsKey:jt.BATCH_IMAGE_CACHE,idbKey:jt.BATCH_IMAGE_CACHE,deleteAfterMigration:!0},{lsKey:jt.RECENT_TEXT_COLORS,idbKey:jt.RECENT_TEXT_COLORS,deleteAfterMigration:!0},{lsKey:jt.CUSTOM_GRADIENTS,idbKey:jt.CUSTOM_GRADIENTS,deleteAfterMigration:!0},{lsKey:jt.CUSTOM_FONTS,idbKey:jt.CUSTOM_FONTS,deleteAfterMigration:!0},{lsKey:jt.TOOLBAR_CONFIG,idbKey:jt.TOOLBAR_CONFIG,deleteAfterMigration:!0}];function Wc(){try{return localStorage.getItem(Xr.LS_TO_IDB_MIGRATION_DONE)!==null}catch{return!1}}function JC(){try{localStorage.setItem(Xr.LS_TO_IDB_MIGRATION_DONE,Date.now().toString())}catch(e){console.error("[StorageMigration] Failed to mark migration done:",e)}}function e2(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 rp(e){try{localStorage.removeItem(e)}catch(t){console.warn(`[StorageMigration] Failed to delete ${e} from LocalStorage:`,t)}}async function t2(e){const{lsKey:t,idbKey:n,deleteAfterMigration:i}=e;try{const o=e2(t);return o===null?{key:t,success:!0}:await Sn.get(n)!==null?(i&&rp(t),{key:t,success:!0}):(await Sn.set(n,o),await Sn.get(n)===null?{key:t,success:!1,error:"Verification failed: data not found after write"}:(i&&rp(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 ab(){if(!Sn.isAvailable())return console.warn("[StorageMigration] IndexedDB not available, skipping migration"),[];if(Wc())return[];const e=[];for(const n of Gc){const i=await t2(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&&JC(),e}function lb(){try{localStorage.removeItem(Xr.LS_TO_IDB_MIGRATION_DONE)}catch(e){console.error("[StorageMigration] Failed to reset migration status:",e)}}const n2={isMigrationDone:Wc,runMigration:ab,resetMigration:lb,MIGRATION_CONFIGS:Gc};typeof window<"u"&&(window.__storageMigration={run:ab,reset:lb,isDone:Wc,configs:Gc});const Xt={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 i2{constructor(){this.state={crashDetected:!1,crashCount:0,isSafeMode:!1,crashHistory:[]}}markLoadingStart(){try{localStorage.getItem(Xt.LOADING_STATE)==="loading"&&(this.state.crashDetected=!0,this.incrementCrashCount(),this.recordCrash()),localStorage.setItem(Xt.LOADING_STATE,"loading"),this.state.isSafeMode=localStorage.getItem(Xt.SAFE_MODE)==="true",this.loadCrashHistory()}catch(t){console.warn("[CrashRecovery] Failed to mark loading start:",t)}}markLoadingComplete(){try{localStorage.setItem(Xt.LOADING_STATE,"complete"),localStorage.setItem(Xt.LAST_SUCCESS_LOAD,Date.now().toString()),this.state.isSafeMode||(localStorage.setItem(Xt.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(Xt.CRASH_COUNT)||"0",10);this.state.crashCount=t+1,localStorage.setItem(Xt.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(Xt.CRASH_HISTORY);t&&(this.state.crashHistory=JSON.parse(t))}catch{this.state.crashHistory=[]}}saveCrashHistory(){try{localStorage.setItem(Xt.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(Xt.SAFE_MODE,"true"),this.state.isSafeMode=!0}catch{}}disableSafeMode(){try{localStorage.removeItem(Xt.SAFE_MODE),this.state.isSafeMode=!1,localStorage.setItem(Xt.CRASH_COUNT,"0"),this.state.crashCount=0}catch{}}clearCrashState(){try{localStorage.setItem(Xt.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 Kt=new i2,o2=3e4,s2=800,r2=.6,a2=3,$c="aitu_last_snapshot",l2=50,Ko=[],c2=20,u2=2e3;let Yo=null;const ap=3e3,d2=1e4,m2=200,p2=5e3,f2=10,h2=5e3,g2=30,b2=20,lp=20,x2=100,N2=30,y2=240;let cp=null,up=!1,dp=null,mp=null,Fa=null,Ha=0,wi=60,Go=!1,za=!1;const ti=[],ni=[],fn=[];function w2(e){const t=qt(),n=Date.now();return()=>{const i=qt();if(!t||!i)return;const o=(i.usedJSHeapSize-t.usedJSHeapSize)/(1024*1024),s=Date.now()-n;if(Math.abs(o)>=l2){const r=o>=0?"+":"";console.warn(`[MemoryLog] ${e}: ${r}${o.toFixed(0)} MB (${s}ms)`)}}}function hn(e){if(e)return e.slice(0,y2)}function v2(){return"0.6.72"}function E2(){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:hn(e.scriptURL),state:e.state}:null,readyState:document.readyState,visibilityState:document.visibilityState}}function S2(){const e=Array.from(document.scripts).map(i=>hn(Un(i.src))).filter(Boolean).slice(-8),t=Array.from(document.querySelectorAll('link[rel="stylesheet"]')).map(i=>hn(Un(i.href))).filter(Boolean).slice(-8),n=Array.from(document.querySelectorAll('link[rel="modulepreload"]')).map(i=>hn(Un(i.href))).filter(Boolean).slice(-8);return{scripts:e,stylesheets:t,modulePreloads:n}}function cb(e){if(!(e instanceof HTMLElement))return;const t=e;return{tagName:e.tagName.toLowerCase(),id:hn(e.id||void 0),className:typeof e.className=="string"?hn(e.className):void 0,src:hn(t.currentSrc||t.src?Un(t.currentSrc||t.src||""):void 0),href:hn(t.href?Un(t.href):void 0),rel:hn(t.rel),crossOrigin:hn(t.crossOrigin||void 0)}}function Rl(e){return{appVersion:v2(),recentActions:ti.slice(-10),recentErrors:ni.slice(-5),recentNetworkErrors:fn.slice(-5),serviceWorker:E2(),loadedResources:S2(),...e}}function qt(){if(typeof performance<"u"&&"memory"in performance){const e=performance.memory;return{usedJSHeapSize:e.usedJSHeapSize,totalJSHeapSize:e.totalJSHeapSize,jsHeapSizeLimit:e.jsHeapSizeLimit}}}function go(){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 ub(){if(!bt.isInitialized()||Ko.length===0)return;const e=Ko.splice(0,Ko.length);for(const t of e)bt.reportCrashSnapshot(t).catch(()=>{});Yo&&(clearInterval(Yo),Yo=null)}function k2(){Yo||(Yo=setInterval(()=>{bt.isInitialized()&&ub()},u2))}function tn(e){try{bt.isInitialized()?(ub(),bt.reportCrashSnapshot(e).catch(()=>{})):Ko.length<c2&&(Ko.push(e),k2())}catch(t){console.warn("[MemoryLog] Failed to send snapshot to SW:",t)}}function T2(e){try{localStorage.setItem($c,JSON.stringify(e))}catch{}}function D2(){try{const e=localStorage.getItem($c);if(e)return JSON.parse(e)}catch{}return null}function _2(){try{localStorage.removeItem($c)}catch{}}function j2(){const e={id:`startup-${Date.now()}`,timestamp:Date.now(),type:"startup",userAgent:navigator.userAgent,url:location.href,memory:qt()};tn(e)}function P2(){if(cp!==null)return;let e=0;cp=window.setInterval(()=>{const t=qt();if(!t)return;const n=t.usedJSHeapSize/(1024*1024),i=t.jsHeapSizeLimit/(1024*1024),o=n/i;if(n>s2||o>r2){e++;const a=e>=a2?go():void 0,c={id:`periodic-${Date.now()}`,timestamp:Date.now(),type:"periodic",memory:t,pageStats:a,userAgent:navigator.userAgent,url:location.href};tn(c)}else e=0},o2)}function C2(){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:qt(),userAgent:navigator.userAgent,url:location.href,customData:Rl({filename:e.filename,lineno:e.lineno,colno:e.colno,eventTarget:cb(e.target)})};tn(t),console.error("[MemoryLog] Uncaught error captured:",e.message)}),window.addEventListener("unhandledrejection",e=>{const t=e.reason,n=(t==null?void 0:t.message)||String(t)||"",i=(t==null?void 0:t.stack)||"";if(t instanceof DOMException&&(t.name==="AbortError"||t.name==="NotAllowedError"||t.name==="DataError"&&n.includes("No key or key range specified"))||n.includes("posthog.com")||n.includes("sentry.io")||i.includes("posthog")||i.includes("sentry"))return;const o={id:`rejection-${Date.now()}`,timestamp:Date.now(),type:"error",error:{message:n||"Unhandled Promise rejection",stack:i,type:"unhandledRejection"},memory:qt(),userAgent:navigator.userAgent,url:location.href,customData:Rl()};tn(o),console.error("[MemoryLog] Unhandled rejection captured:",t)}),window.addEventListener("beforeunload",()=>{const e=qt();if(e){const t={id:`beforeunload-${Date.now()}`,timestamp:Date.now(),type:"beforeunload",memory:e,userAgent:navigator.userAgent,url:location.href};T2(t),tn(t)}})}function A2(){if(dp!==null)return;let e=Date.now();document.addEventListener("visibilitychange",()=>{document.hidden?za=!0:(e=Date.now(),setTimeout(()=>{za=!1},ap+100))}),dp=window.setInterval(()=>{const t=Date.now(),n=t-e;if(n>d2&&!za&&!document.hidden){const i={id:`freeze-${Date.now()}`,timestamp:Date.now(),type:"freeze",memory:qt(),pageStats:go(),performance:{freezeDuration:n,lastHeartbeat:e,fps:wi},userAgent:navigator.userAgent,url:location.href,customData:{recentActions:ti.slice(-10),recentErrors:ni.slice(-5),recentNetworkErrors:fn.slice(-5)}};tn(i)}e=t,bt.isInitialized()&&bt.sendHeartbeat(t).catch(()=>{})},ap)}function M2(){if(Fa===null&&!(typeof PerformanceObserver>"u"))try{Fa=new PerformanceObserver(e=>{for(const t of e.getEntries())if(t.duration>m2){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:qt(),performance:{longTaskDuration:t.duration,fps:wi},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"}};tn(s)}}),Fa.observe({entryTypes:["longtask"]})}catch{}}function I2(){if(mp!==null)return;let e=0;const t=()=>{if(e++,e>=N2){const n=performance.now(),i=n-Ha;i>0&&(wi=Math.round(e*1e3/i)),e=0,Ha=n}requestAnimationFrame(t)};Ha=performance.now(),requestAnimationFrame(t),mp=window.setInterval(()=>{if(wi<f2&&wi>0){const n={id:`lowfps-${Date.now()}`,timestamp:Date.now(),type:"freeze",memory:qt(),performance:{fps:wi},userAgent:navigator.userAgent,url:location.href};tn(n)}},p2)}function V2(){setTimeout(()=>{pp()},h2),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&!Go&&setTimeout(pp,1e3)})}function pp(){if(Go)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){Go=!0;const o={id:`whitescreen-${Date.now()}`,timestamp:Date.now(),type:"whitescreen",memory:qt(),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}};tn(o),console.error("[MemoryLog] 白屏检测: React 未渲染内容")}t&&!i&&location.pathname==="/"&&setTimeout(()=>{if(!document.querySelector(".plait-board-container")&&!Go){Go=!0;const o={id:`whitescreen-noboard-${Date.now()}`,timestamp:Date.now(),type:"whitescreen",memory:qt(),pageStats:go(),userAgent:navigator.userAgent,url:location.href,customData:{reason:"画板未加载",rootChildCount:(e==null?void 0:e.children.length)||0}};tn(o),console.error("[MemoryLog] 白屏检测: 画板组件未加载")}},5e3)}function Wo(e,t,n){ti.push({time:Date.now(),action:e,target:t,detail:n}),ti.length>g2&&ti.shift()}function U2(){let e=0;document.addEventListener("click",t=>{const n=Date.now();if(n-e<x2)return;e=n;const i=t.target;if(!i)return;const o=()=>{var a,c,u,d,m,f,h,g,x,b,y,N,w,T,S;let s="";const r=(c=(a=i.closest)==null?void 0:a.call(i,"[data-track]"))==null?void 0:c.getAttribute("data-track");if(r)s=r;else if(i.tagName==="BUTTON"||(u=i.closest)!=null&&u.call(i,"button")){const v=((d=i.closest)==null?void 0:d.call(i,"button"))||i,E=(m=v.textContent)==null?void 0:m.trim().slice(0,20),R=(x=(g=(h=(f=v.className)==null?void 0:f.split)==null?void 0:h.call(f," "))==null?void 0:g[0])==null?void 0:x.slice(0,20);s=`btn:${E||R||"unknown"}`}else if(i.tagName==="A")s=`link:${((b=i.pathname)==null?void 0:b.slice(0,30))||""}`;else if(i.tagName==="INPUT"||i.tagName==="TEXTAREA"){const v=i;s=`input:${v.name||v.type||((y=v.placeholder)==null?void 0:y.slice(0,15))||""}`}else if(i.id)s=`#${i.id}`;else{const v=(T=(w=(N=i.className)==null?void 0:N.split)==null?void 0:w.call(N," "))==null?void 0:T[0];s=v?`.${v.slice(0,20)}`:((S=i.tagName)==null?void 0:S.toLowerCase())||"unknown"}Wo("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),Wo("shortcut",n.join("+"))}},{capture:!0,passive:!0}),window.addEventListener("popstate",()=>{Wo("navigate",location.pathname)}),window.addEventListener("hashchange",()=>{Wo("navigate",location.hash)})}function R2(){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,a=Un(s).slice(0,300);fn.push({time:Date.now(),url:a,method:(n==null?void 0:n.method)||"GET",status:o.status,statusText:o.statusText,duration:r}),fn.length>lp&&fn.shift()}return o}catch(o){const s=typeof t=="string"?t:t.url,r=Date.now()-i,a=Un(s).slice(0,300);throw fn.push({time:Date.now(),url:a,method:(n==null?void 0:n.method)||"GET",error:o.message,duration:r}),fn.length>lp&&fn.shift(),o}}}function q2(){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();Wo("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:qt(),userAgent:navigator.userAgent,url:location.href,customData:Rl({resourceUrl:hn(i?Un(i):void 0),eventTarget:cb(t)})};tn(s)}},{capture:!0})}function B2(){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 a=0;a<Math.min(i.length,5);a++){const c=i[a];if(typeof c=="string")o+=c+" ";else if(typeof c=="number"||typeof c=="boolean")o+=String(c)+" ";else if(c instanceof Error)o+=`Error: ${c.message} `,s=c.stack;else if(c&&typeof c=="object")try{const d=Object.keys(c).slice(0,5).map(m=>{const f=c[m];return`${m}:${typeof f=="string"?f.slice(0,20):typeof f}`}).join(",");o+=`{${d}} `}catch{o+=`[${((r=c.constructor)==null?void 0:r.name)||"Object"}] `}}ni.push({time:Date.now(),message:o.trim().slice(0,500),stack:s}),ni.length>b2&&ni.shift()},0)}}function db(){return{userActions:[...ti],consoleErrors:[...ni],networkErrors:[...fn],memory:qt(),pageStats:go(),fps:wi}}function L2(){typeof window>"u"||(window.__memoryLog={getMemory:()=>{const e=qt();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:w2,diagnose:()=>{const e=qt(),t=go();if(console.group("[MemoryLog] 内存诊断"),e){const n=e.usedJSHeapSize/1048576,i=e.jsHeapSizeLimit/(1024*1024),o=n/i*100;console.log(`内存: ${n.toFixed(0)} MB / ${i.toFixed(0)} MB (${o.toFixed(1)}%)`)}return console.log(`页面: DOM ${t.domNodeCount} | Canvas ${t.canvasCount} | Img ${t.imageCount} | Video ${t.videoCount}`),t.plaitElementCount!==void 0&&console.log(`Plait 元素: ${t.plaitElementCount}`),t.imageCount>50&&console.warn("图片较多,考虑懒加载"),t.domNodeCount>5e3&&console.warn("DOM 节点较多"),console.groupEnd(),{memory:e,pageStats:t}},snapshot:()=>{const e={id:`manual-${Date.now()}`,timestamp:Date.now(),type:"periodic",memory:qt(),pageStats:go(),userAgent:navigator.userAgent,url:location.href};tn(e)},getDiagnostics:db,getActions:()=>(console.table(ti.map(e=>({time:new Date(e.time).toLocaleTimeString("zh-CN"),action:e.action,target:e.target,detail:e.detail}))),ti),getNetworkErrors:()=>(console.table(fn.map(e=>({time:new Date(e.time).toLocaleTimeString("zh-CN"),url:e.url,status:e.status,error:e.error}))),fn),getConsoleErrors:()=>(console.table(ni.map(e=>({time:new Date(e.time).toLocaleTimeString("zh-CN"),message:e.message.slice(0,100)}))),ni)})}function O2(){if(up)return;up=!0,j2(),C2(),P2(),A2(),M2(),I2(),V2(),U2(),R2(),q2(),B2(),L2();const e=D2();e&&(e.customData={...e.customData,recovered:!0,recoveredAt:Date.now()},tn(e),_2())}function ql(e,t){try{const n=F2(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),a=document.createElement("a");a.href=s,a.download=`opentu-error-log-${r}.json`,a.style.display="none",document.body.appendChild(a),a.click(),setTimeout(()=>{document.body.removeChild(a),URL.revokeObjectURL(s)},100)}catch(n){console.error("[ErrorLogExporter] Failed to export:",n)}}function F2(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:Kt.getState(),diagnostics:db(),unifiedLogs:Dy.getMemoryLogs()};return e&&(n.currentError={message:e.message,stack:e.stack,componentStack:(t==null?void 0:t.componentStack)??void 0}),n}const H2="aitu:lazy-chunk-retry",z2="_lazy_chunk_retry",G2="_t",W2=[/Failed to fetch dynamically imported module/i,/Importing a module script failed/i,/Loading chunk [\w-]+ failed/i,/ChunkLoadError/i];function $2(){var e;return typeof document>"u"?"unknown":((e=document.querySelector('meta[name="app-version"]'))==null?void 0:e.getAttribute("content"))||"unknown"}function mb(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(`
|
|
67
67
|
`)}return String(e??"")}function X2(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 K2(e){const t=mb(e);return W2.some(n=>n.test(t))}function Y2(e){if(typeof window>"u"||typeof sessionStorage>"u"||!K2(e))return!1;const t=mb(e),n=`${H2}:${$2()}:${X2(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(z2,"1"),i.searchParams.set(G2,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 Z2 extends p.Component{constructor(){super(...arguments),this.state={hasError:!1,error:null,errorInfo:null,recoveringFromChunkError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){const i=Y2(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?l.jsxDEV(_r,{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:()=>ql(this.state.error,this.state.errorInfo),onSafeModeReload:Bl,onGoToDebug:Dr},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:153,columnNumber:9},this):l.jsxDEV(_r,{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:()=>ql(this.state.error,this.state.errorInfo),onSafeModeReload:Bl,onGoToDebug:Dr},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:170,columnNumber:7},this):this.props.children}}function Bl(){try{localStorage.setItem("aitu_safe_mode","true")}catch{}window.location.reload()}function Dr(){const e="/sw-debug.html";window.location.href=e}const Q2={crash:{iconBg:"#FFF3E0",iconStroke:"#F57C00",iconPath:l.jsxDEV(l.Fragment,{children:[l.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),l.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),l.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:l.jsxDEV(l.Fragment,{children:[l.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),l.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),l.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:"页面遇到了意外错误,可能是画布数据异常或浏览器内存不足。"}},_r=e=>{const{variant:t,crashCount:n,memoryInfo:i,onIgnore:o,title:s,description:r,errorMessage:a,errorStack:c,componentStack:u,onExportLog:d,onSafeModeReload:m,onGoToDebug:f}=e,[h,g]=Fn.useState(!1),x=Q2[t],b=s||x.defaultTitle,y=r||x.defaultDesc;return l.jsxDEV("div",{style:yt.overlay,children:l.jsxDEV("div",{style:yt.card,children:[l.jsxDEV("div",{style:{...yt.iconWrap,backgroundColor:x.iconBg},children:l.jsxDEV("svg",{width:"32",height:"32",viewBox:"0 0 24 24",fill:"none",stroke:x.iconStroke,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:x.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),l.jsxDEV("h2",{style:yt.title,children:b},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&&l.jsxDEV("p",{style:yt.desc,children:["页面已连续 ",n," 次未能正常加载,可能是因为:",l.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:290,columnNumber:13},void 0),"• 画布元素过多导致内存不足",l.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:291,columnNumber:13},void 0),"• 浏览器内存限制",l.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:292,columnNumber:13},void 0),l.jsxDEV("br",{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:292,columnNumber:19},void 0),"建议使用「安全模式」创建空白画布,稍后可从侧边栏切换到其他画布。"]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:288,columnNumber:11},void 0),t==="error"&&y&&l.jsxDEV("p",{style:yt.desc,children:y},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:299,columnNumber:11},void 0),i&&l.jsxDEV(J2,{info:i},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:303,columnNumber:24},void 0),t==="error"&&a&&l.jsxDEV("div",{style:yt.errorBox,children:[l.jsxDEV("div",{style:yt.errorMsg,children:a},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:308,columnNumber:13},void 0),(c||u)&&l.jsxDEV("button",{onClick:()=>g(N=>!N),style:yt.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&&l.jsxDEV("pre",{style:yt.errorDetail,children:[c,u&&`
|
|
68
68
|
|
|
69
|
-
Component Stack:${u}`]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:316,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:307,columnNumber:11},void 0),l.jsxDEV("div",{style:yt.btnRow,children:[t==="crash"&&o&&l.jsxDEV(Os,{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&&l.jsxDEV(Os,{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),l.jsxDEV(Os,{label:"安全模式",onClick:m,bg:"#F39C12",bgHover:"#E67E22",color:"#fff"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:334,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:325,columnNumber:9},void 0),l.jsxDEV("div",{style:yt.divider},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:339,columnNumber:9},void 0),l.jsxDEV("div",{style:yt.helpSection,children:l.jsxDEV("div",{style:yt.helpRow,children:[l.jsxDEV("img",{src:"https://nav.ourzhishi.top/api/dynamic-image/qr-code",alt:"企业微信二维码",style:yt.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),l.jsxDEV("div",{style:yt.helpText,children:[l.jsxDEV("p",{style:yt.helpTitle,children:"需要帮助?"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:350,columnNumber:15},void 0),l.jsxDEV("p",{style:yt.helpDesc,children:"扫码联系客服,或前往调试页面导出完整日志与备份数据"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:351,columnNumber:15},void 0),l.jsxDEV(Os,{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)},J2=({info:e})=>{const t=e.percent>75?"#E53935":e.percent>50?"#FB8C00":"#43A047";return l.jsxDEV("div",{style:yt.memoryBox,children:[l.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),l.jsxDEV("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[l.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),l.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),l.jsxDEV("div",{style:{height:4,backgroundColor:"#e0e0e0",borderRadius:2,marginTop:8,overflow:"hidden"},children:l.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)},Os=({label:e,onClick:t,bg:n,bgHover:i,color:o,small:s})=>{const[r,a]=Fn.useState(!1),c=s?{...yt.btnSmall,backgroundColor:r?i:n,color:o}:{...yt.btn,backgroundColor:r?i:n,color:o};return l.jsxDEV("button",{onClick:t,onMouseOver:()=>a(!0),onMouseOut:()=>a(!1),style:c,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:392,columnNumber:5},void 0)},yt={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}},eA=500,Ll="board",Xc="aitu_board_close_snapshot_v1";let Ga=!1;function tA(){if(!(typeof window>"u"))return window.__OPENTU_BOOT__}function fp(){return new URLSearchParams(window.location.search).get(Ll)}function hp(e,t=!1){const n=new URL(window.location.href);e?n.searchParams.set(Ll,e):n.searchParams.delete(Ll),t?window.history.replaceState({boardId:e},"",n.toString()):window.history.pushState({boardId:e},"",n.toString())}function nA(e){try{localStorage.setItem(Xc,JSON.stringify(e))}catch(t){console.warn("[App] Failed to save board close snapshot:",t)}}function pb(){try{const e=localStorage.getItem(Xc);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 Fs(e){try{const t=pb();if(!t)return;(!e||t.boardId===e)&&localStorage.removeItem(Xc)}catch(t){console.warn("[App] Failed to clear board close snapshot:",t)}}function iA(){const[e,t]=p.useState(!0),[n,i]=p.useState(!1),o=p.useRef(!1),[s,r]=p.useState(!1),[a,c]=p.useState(null),[u,d]=p.useState({children:[]}),[m,f]=p.useState(null),h=p.useRef(null),g=p.useRef(),x=p.useRef(null),b=p.useRef(null),y=p.useRef(!1),N=p.useRef(null),w=p.useRef(!1),T=p.useRef(!1),S=p.useRef(!1);BC(m),p.useEffect(()=>{h.current=m},[m]);const v=p.useCallback((A,_,M=Date.now())=>{g.current=_.viewport,x.current={boardId:A,children:_.children,viewport:_.viewport,theme:_.theme,updatedAt:M}},[]),E=p.useCallback(A=>{const _=x.current,M=h.current;if(!_||!M||_.boardId!==M||!S.current)return;nA({..._,updatedAt:Date.now()}),Nn.getInstance().saveCurrentBoard({children:_.children,viewport:_.viewport,theme:_.theme}).catch(Z=>{console.warn(`[App] Failed to flush board on ${A}:`,Z)})},[]);p.useEffect(()=>{const A=tA();A&&(s||a||!e)&&A.markReady()},[a,e,s]),p.useEffect(()=>{s||a||e||tb(["offline-static-assets"])},[a,e,s]),p.useEffect(()=>{(async()=>{if(Kt.shouldShowSafeModePrompt()&&!Kt.isSafeMode()){r(!0),t(!1);return}if(Ga){const _=Nn.getInstance();t(!1),await _.waitForInitialization();const M=_.getState().currentBoardId;if(M&&_.getBoardMetadata(M)){const P=await _.switchBoard(M),Z={children:P.elements||[],viewport:P.viewport,theme:P.theme};v(P.id,Z,P.updatedAt),S.current=!1,d(Z)}t(!1),Kt.markLoadingComplete();return}Ga=!0;try{const _=Nn.getInstance();if(t(!1),await _.initialize(),await ob()||await OC(),Kt.isSafeMode()){console.log("[App] Safe mode: looking for existing safe mode board");const ce=_.getAllBoards().find(le=>le.name.startsWith("安全模式")&&(!le.elements||le.elements.length===0));if(ce)console.log("[App] Safe mode: reusing existing board:",ce.name),await _.switchBoard(ce.id),f(ce.id);else{console.log("[App] Safe mode: creating new blank board");const le=new Date().toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"),be=await _.createBoard({name:`安全模式 ${le}`,elements:[]});be&&(await _.switchBoard(be.id),f(be.id))}const X={children:[]},ae=(ce==null?void 0:ce.id)||h.current||"safe-mode";v(ae,X,Date.now()),d(X),o.current=!0,i(!0),t(!1),Kt.markLoadingComplete(),Kt.disableSafeMode(),setTimeout(()=>{re.warning({content:"当前处于安全模式,已创建空白画布。可从侧边栏切换到其他画布。",duration:8e3,closeBtn:!0})},500);return}let P=null;const Z=fp(),pe=_.getState().currentBoardId;let I=null;if(Z&&_.getBoardMetadata(Z)?I=Z:pe&&_.getBoardMetadata(pe)&&(I=pe),I)P=await _.switchBoard(I);else if(_.hasBoards()){const G=_.getTree(),ce=fb(G);ce&&(P=await _.switchBoard(ce.id))}else{const G=await _.createBoard({name:"我的画板1",elements:[]});G&&(P=await _.switchBoard(G.id))}if(P&&(hp(P.id,!0),f(P.id),_.persistCurrentBoardId(P.id),S.current=!1),P){const G=pb();let ce={children:P.elements||[],viewport:P.viewport,theme:P.theme};if(G&&G.boardId===P.id&&G.updatedAt>P.updatedAt){ce={children:G.children,viewport:G.viewport,theme:G.theme},P={...P,...ce,updatedAt:G.updatedAt};const X=P.id;_.saveBoard(X,ce).then(()=>{S.current=!1,Fs(X)}).catch(ae=>{console.warn("[App] Failed to rehydrate board from close snapshot:",ae)}),re.warning({content:"检测到上次关闭前的未落盘画布,已自动恢复",duration:5e3,closeBtn:!0})}else G&&G.boardId&&!_.getBoardMetadata(G.boardId)&&Fs(G.boardId);v(P.id,ce,P.updatedAt),S.current=!1,d(ce),Wa(ce.children).then(X=>{if(X!==ce.children){const ae={...ce,children:X};v(P.id,ae,Date.now()),d(ae)}}).catch(X=>{console.error("[App] Video URL recovery failed:",X)})}}catch(_){console.error("[App] Initialization failed:",_),c(_ instanceof Error?_:new Error(String(_)))}finally{o.current=!0,i(!0),t(!1),Kt.markLoadingComplete()}})()},[v]);const R=p.useCallback(async(A,_=!1)=>{try{_||(hp(A.id),Nn.getInstance().persistCurrentBoardId(A.id)),f(A.id),T.current=!1,S.current=!1;const P={children:await Wa(A.elements||[]),viewport:A.viewport,theme:A.theme};v(A.id,P,A.updatedAt),d(P),setTimeout(()=>{N.current&&(Qo(N.current),Sp(N.current),sr(N.current))},0)}catch(M){console.error("[App] Board switch failed:",M),re.error({content:`切换画板失败: ${M instanceof Error?M.message:"未知错误"}`,duration:5e3,closeBtn:!0})}},[v]);p.useEffect(()=>{const A=async()=>{if(!y.current){y.current=!0;try{const _=fp();if(_&&_!==m){const M=Nn.getInstance(),P=await M.switchBoard(_);P&&(await R(P,!0),M.persistCurrentBoardId(P.id))}}catch(_){console.error("[App] Failed to handle browser navigation:",_)}finally{y.current=!1}}};return window.addEventListener("popstate",A),()=>{window.removeEventListener("popstate",A)}},[m,R]);const q=p.useCallback(async()=>{w.current=!0;try{const A=Nn.getInstance();let _=A.getCurrentBoard();if(!_){const P=A.getState().currentBoardId;if(!P){console.warn("[App] handleTabSyncNeeded: no current board ID");return}if(!A.getBoardMetadata(P)){console.warn("[App] handleTabSyncNeeded: board not found",P);return}try{_=await A.switchBoard(P)}catch(Z){console.error("[App] handleTabSyncNeeded: failed to load board",Z);return}}const M=await A.reloadBoard(_.id);if(M){const Z={children:await Wa(M.elements||[]),viewport:M.viewport,theme:M.theme};v(M.id,Z,M.updatedAt),S.current=!1,d(Z)}}catch(A){console.error("[App] Failed to sync board data:",A),Ei()}finally{setTimeout(()=>{w.current=!1},100)}},[v]),$=p.useCallback(A=>{if(d(A),g.current=A.viewport,!o.current||w.current)return;T.current=!0,S.current=!0;const _=Nn.getInstance(),M=_.getCurrentBoard();if(!M){console.warn("[App] handleBoardChange: board not fully loaded, skipping save");return}v(M.id,A),_.saveCurrentBoard(A).then(()=>{S.current=!1,Fs(M.id),eb(M.id)}).catch(P=>{console.error("[App] Failed to save board:",P)})},[v]),V=p.useCallback(A=>{g.current=A;const _=x.current;_&&(x.current={..._,viewport:A,updatedAt:Date.now()}),!w.current&&(S.current=!0,b.current&&clearTimeout(b.current),b.current=setTimeout(()=>{if(w.current)return;const M=Nn.getInstance(),P=M.getCurrentBoard();P&&M.saveCurrentBoard({children:P.elements,viewport:A,theme:P.theme}).then(()=>{S.current=!1,Fs(P.id)}).catch(Z=>{console.error("[App] Failed to save viewport:",Z)})},eA))},[v]);p.useEffect(()=>{const A=Z=>{if(b.current&&(clearTimeout(b.current),b.current=null),w.current)return;const I=Nn.getInstance().getCurrentBoard(),G=x.current,ce=g.current,X=h.current;I&&X&&(!G||G.boardId!==X)&&v(I.id,{children:I.elements,viewport:ce??I.viewport,theme:I.theme},Date.now()),!(Z==="visibilitychange"&&!T.current)&&E(Z)},_=()=>{A("beforeunload")},M=()=>{document.visibilityState==="hidden"&&A("visibilitychange")},P=()=>{A("pagehide")};return window.addEventListener("beforeunload",_),window.addEventListener("pagehide",P),document.addEventListener("visibilitychange",M),()=>{window.removeEventListener("beforeunload",_),window.removeEventListener("pagehide",P),document.removeEventListener("visibilitychange",M),b.current&&clearTimeout(b.current)}},[E,v]);const U=p.useCallback(A=>{r(!1),A?Kt.enableSafeMode():Kt.clearCrashState(),t(!0),Ga=!1,setTimeout(()=>{Ei()},100)},[]);return s?l.jsxDEV(_r,{variant:"crash",crashCount:Kt.getCrashCount(),memoryInfo:Kt.getMemoryInfo(),onIgnore:()=>U(!1),onSafeModeReload:()=>U(!0),onGoToDebug:Dr},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:874,columnNumber:7},this):a?l.jsxDEV(_r,{variant:"error",title:"应用初始化失败",description:"无法加载画板数据,可能是存储损坏或浏览器限制。",errorMessage:a.message,errorStack:a.stack,onExportLog:()=>ql(a),onSafeModeReload:Bl,onGoToDebug:Dr},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:888,columnNumber:7},this):e?l.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:903,columnNumber:7},this):l.jsxDEV("div",{style:{height:"100vh"},children:l.jsxDEV(IC,{value:u.children,viewport:u.viewport,theme:u.theme,onChange:$,onViewportChange:V,onBoardSwitch:R,onTabSyncNeeded:q,isDataReady:n,currentBoardId:m,afterInit:A=>{N.current=A,window.__drawnix__web__console=_=>{oA(A,_)}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:918,columnNumber:7},this)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:917,columnNumber:5},this)}const oA=(e,t)=>{const n=F.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 Wa(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),a=`/__aitu_cache__/video/${s>0?o.substring(0,s):o}.mp4`;return{...t,url:a}}}return t})}function fb(e){for(const t of e){if(t.type==="board")return t.data;if(t.type==="folder"&&t.children){const n=fb(t.children);if(n)return n}}return null}const gp=window.addEventListener.bind(window),sA=window.removeEventListener.bind(window);let Kc=null;window.addEventListener=function(e,t,n){if(e==="unload"){console.warn("[Permissions Policy] Blocked unload event listener");return}return e==="beforeunload"&&(Kc=t),gp.call(window,e,t,n)};window.removeEventListener=function(e,t,n){return e==="beforeunload"&&(Kc=null),sA.call(window,e,t,n)};window.__checkBeforeUnload=()=>!!Kc;let bp=!1;const hb="sw-debug-enabled";function rA(){try{return sessionStorage.getItem(hb)==="true"}catch{return!1}}function xp(e){try{sessionStorage.setItem(hb,e===!0?"true":"false")}catch{}}let Uo=rA();const Zo=[];let ro=null,Qn=0;const jr=15e3,Ro={error:console.error,warn:console.warn,info:console.info,log:console.log,debug:console.debug};function fi(e,t,n){if(t.includes("[SW]")||t.includes("[SWTaskQueue]")||t.includes("[SWChannelManager]")||t.includes("Invalid message structure")||t.includes("posthog.com")||t.includes("sentry.io")||n&&(n.includes("posthog")||n.includes("sentry")))return;const i=()=>{bt.isInitialized()&&bt.reportConsoleLog(e,[{message:t,stack:n||"",source:window.location.href}],Date.now()).catch(()=>{})},o=()=>{for(;Zo.length>0&&bt.isInitialized();){const r=Zo.shift();bt.reportConsoleLog(r.level,[{message:r.message,stack:r.stack||"",source:window.location.href}],Date.now()).catch(()=>{})}},s=()=>{const r=Date.now();ro||r<Qn||(ro=bt.initialize().then(a=>{if(!a){Qn=Date.now()+jr;return}Qn=0,o()}).catch(()=>{Qn=Date.now()+jr}).finally(()=>{ro=null}))};bt.isInitialized()?i():(Zo.push({level:e,message:t,stack:n}),s())}function qo(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 Np(e){for(const t of e)if(t instanceof Error&&t.stack)return t.stack;return""}function aA(){if(bp||!("serviceWorker"in navigator))return;bp=!0;const e=()=>{if(bt.isInitialized())bt.subscribeToEvent("debug:statusChanged",t=>{const n=t,i=n.enabled??n.debugModeEnabled??!1;Uo=i,xp(i)}),bt.getDebugStatus().then(t=>{const n=t.enabled??t.debugModeEnabled??!1;Uo=n,xp(n)});else{const t=Date.now();!ro&&t>=Qn&&(ro=bt.initialize().then(n=>{if(!n){Qn=Date.now()+jr;return}for(Qn=0;Zo.length>0&&bt.isInitialized();){const i=Zo.shift();bt.reportConsoleLog(i.level,[{message:i.message,stack:i.stack||"",source:window.location.href}],Date.now()).catch(()=>{})}}).catch(()=>{Qn=Date.now()+jr}).finally(()=>{ro=null})),setTimeout(e,500)}};e(),console.error=function(...t){Ro.error.apply(console,t),fi("error",qo(t),Np(t))},console.warn=function(...t){Ro.warn.apply(console,t),fi("warn",qo(t),Np(t))},console.log=function(...t){Ro.log.apply(console,t),Uo&&fi("log",qo(t),"")},console.info=function(...t){Ro.info.apply(console,t),Uo&&fi("info",qo(t),"")},console.debug=function(...t){Ro.debug.apply(console,t),Uo&&fi("debug",qo(t),"")},window.addEventListener("error",t=>{var i;const n=`${t.message} at ${t.filename}:${t.lineno}:${t.colno}`;fi("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||"";fi("error",i,o)})}"serviceWorker"in navigator&&aA();Kt.markLoadingStart();Kt.checkUrlSafeMode();O2();const lA=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),cA=typeof window<"u"&&new URLSearchParams(window.location.search).get("report")==="1",uA=cA||!lA&&!1,gb="0.6.71",aa=_y(),yp="_lazy_chunk_retry",dA="_t";function mA(){if(typeof window>"u")return;const e=new URL(window.location.href);if(e.searchParams.has(yp)){e.searchParams.delete(yp),e.searchParams.delete(dA);try{window.history.replaceState(window.history.state,"",e.toString())}catch{}}}mA();function bb(e){return e==="jsdelivr"||e==="unpkg"||e==="local"}function pA(){return window.__OPENTU_BOOT__||null}function Qi(e){var t,n;(n=(t=pA())==null?void 0:t.setProgress)==null||n.call(t,e==null?void 0:e.progress,e)}function fA(){const e=window.__OPENTU_CDN__||window.__AITU_CDN__;return!e||!bb(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 wp(e){const t=fA();if(!t)return;const n={type:"SW_CDN_SET_PREFERENCE",...t,version:gb},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 vp(e){wp(e);const t=window.__OPENTU_CDN_API__||window.__AITU_CDN_API__;t!=null&&t.selectBestCDN&&t.selectBestCDN().then(n=>{n&&bb(n.cdn)&&(window.__OPENTU_CDN__=n),wp(e)}).catch(n=>{console.warn("[Main] Failed to sync CDN preference to Service Worker:",n)})}function Hs(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)})}yS({dsn:"https://a18e755345995baaa0e1972c4cf24497@o4510700882296832.ingest.us.sentry.io/4510700883869696",enabled:uA,sendDefaultPii:!1,tracesSampleRate:.1,beforeSend(e){return e.extra&&(e.extra=Hi(e.extra)),e.contexts&&(e.contexts=Hi(e.contexts)),e.breadcrumbs&&(e.breadcrumbs=e.breadcrumbs.map(t=>({...t,data:t.data?Hi(t.data):void 0,message:t.message?String(Hi(t.message)):void 0}))),e.request&&(e.request.headers&&(e.request.headers=Hi(e.request.headers)),e.request.data&&(e.request.data=Hi(e.request.data)),e.request.url&&(e.request.url=Un(e.request.url))),e}});ia("app_version",gb);ia("deployment_env",aa.deployment_env);ia("release_channel",aa.release_channel);ia("host",aa.host||"unknown");Qi({tip:"正在初始化启动服务...",source:"phase",progress:12});if(typeof window<"u"){ZC();const e=()=>{if(window.posthog){Cy(aa),YC();return}setTimeout(e,300)};Hs(e,{delay:0,timeout:1e3}),Hs(()=>{rb().catch(n=>{console.warn("[Main] Database cleanup failed:",n)}),n2.runMigration().then(()=>Promise.all([jy(),Py.initializeAsync()])).catch(n=>{console.warn("[Main] Storage migration/init failed:",n)})},{delay:400,timeout:2500}),Hs(()=>{Au.start(),Au.logMemoryStatus()},{delay:5e3,timeout:2500});const t=()=>{window.posthog?zC():setTimeout(t,500)};Hs(t,{delay:1500,timeout:3e3})}if("serviceWorker"in navigator){const e=window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1";let t=null,n=!1,i=null,o=null;const s=m=>{i!==m&&(i=m,window.dispatchEvent(new CustomEvent("sw-update-available",{detail:{version:m}})))},r=m=>{if(m.pendingVersion&&m.pendingVersion!==m.committedVersion&&(m.upgradeState==="ready"||m.upgradeState==="committing")){s(m.pendingVersion);return}m.pendingVersion||(i=null)},a=m=>{const f=m||t||(o==null?void 0:o.waiting)||navigator.serviceWorker.controller||(o==null?void 0:o.active)||null;f&&f.postMessage({type:"GET_VERSION_STATE"})},c=window.__OPENTU_SW_REGISTRATION_PROMISE__||navigator.serviceWorker.register("/sw.js").catch(m=>(console.warn("[Main] Service worker registration failed:",m),null));window.__OPENTU_SW_REGISTRATION_PROMISE__=c,c.then(m=>{if(!m){Qi({tip:"离线加速未启用,正在直接启动工作台...",source:"phase",progress:70});return}o=m,Qi({tip:"启动缓存服务已连接,正在准备资源清单...",source:"phase",progress:72}),vp(m),e?(m.update().catch(f=>console.warn("Forced update check failed:",f)),m.waiting&&m.waiting.postMessage({type:"FORCE_UPGRADE"})):m.waiting&&navigator.serviceWorker.controller&&(t=m.waiting,a(m.waiting)),m.addEventListener("updatefound",()=>{const f=m.installing;f&&f.addEventListener("statechange",()=>{f.state==="installed"&&navigator.serviceWorker.controller&&(t=f,e?f.postMessage({type:"FORCE_UPGRADE"}):(a(f),setTimeout(()=>a(f),5e3)))})}),m.active&&!m.installing&&!m.waiting&&Qi({tip:"启动缓存服务已就绪,正在恢复工作台状态...",source:"phase",progress:78}),a(),setInterval(()=>{m.update().catch(f=>{console.warn("Update check failed:",f)})},300*1e3),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&a()})}).catch(m=>{Qi({tip:"离线加速未启用,正在直接启动工作台...",source:"phase",progress:70})});const u=()=>{if(!bt.isInitialized()){setTimeout(u,500);return}bt.setEventHandlers({onSWUpdated:m=>{n&&setTimeout(()=>{Ei()},1e3)},onSWNewVersionReady:m=>{s(m.version),a()},onSWActivated:m=>{n||(t=null,a())}}),o!=null&&o.waiting&&navigator.serviceWorker.controller&&(t=o.waiting,a(o.waiting))};setTimeout(u,1e3);const d=async()=>{if(!bt.isInitialized()){setTimeout(d,500);return}bt.registerVideoThumbnailHandler(async(m,f)=>{try{const{generateVideoThumbnailFromBlob:h}=await Me(async()=>{const{generateVideoThumbnailFromBlob:w}=await import("./tool-windows-Bd5iqcJh.js").then(T=>T.oH);return{generateVideoThumbnailFromBlob:w}},__vite__mapDeps([0]),import.meta.url);let g=null;const b=await(await caches.open("drawnix-images")).match(m);if(b&&(g=await b.blob()),!g&&(m.startsWith("http://")||m.startsWith("https://")))try{const w=await fetch(m);w.ok&&(g=await w.blob())}catch{g=null}if(!g)return{error:"Video not found in cache or network"};const y=await h(g,f||400);return{thumbnailUrl:await new Promise((w,T)=>{const S=new FileReader;S.onloadend=()=>w(S.result),S.onerror=T,S.readAsDataURL(y)})}}catch(h){return{error:h instanceof Error?h.message:String(h)}}})};d(),navigator.serviceWorker.addEventListener("message",m=>{var f;((f=m.data)==null?void 0:f.type)==="SW_VERSION_STATE"&&r(m.data)}),navigator.serviceWorker.addEventListener("controllerchange",()=>{vp(o),a(),n&&setTimeout(()=>{Ei()},1e3)}),window.addEventListener("user-confirmed-upgrade",()=>{if(n=!0,t){t.postMessage({type:"COMMIT_UPGRADE"});return}if(o&&o.waiting){o.waiting.postMessage({type:"COMMIT_UPGRADE"});return}if(navigator.serviceWorker.controller){navigator.serviceWorker.controller.postMessage({type:"COMMIT_UPGRADE"});return}Ei()})}Qi({tip:"正在挂载工作台界面...",source:"phase",progress:88});const hA=Pr.createRoot(document.getElementById("root"));hA.render(l.jsxDEV(p.StrictMode,{children:l.jsxDEV(Z2,{children:l.jsxDEV(iA,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:742,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:741,columnNumber:5},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:740,columnNumber:3},void 0));const wA=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{eD as A,sk as B,ck as W,kP as a,xt as b,xA as c,NA as d,Gg as e,yA as f,bA as g,wA as h,F_ as i,TD as m,tD as u,nT as w};
|
|
69
|
+
Component Stack:${u}`]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:316,columnNumber:15},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:307,columnNumber:11},void 0),l.jsxDEV("div",{style:yt.btnRow,children:[t==="crash"&&o&&l.jsxDEV(Os,{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&&l.jsxDEV(Os,{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),l.jsxDEV(Os,{label:"安全模式",onClick:m,bg:"#F39C12",bgHover:"#E67E22",color:"#fff"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:334,columnNumber:11},void 0)]},void 0,!0,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:325,columnNumber:9},void 0),l.jsxDEV("div",{style:yt.divider},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:339,columnNumber:9},void 0),l.jsxDEV("div",{style:yt.helpSection,children:l.jsxDEV("div",{style:yt.helpRow,children:[l.jsxDEV("img",{src:"https://nav.ourzhishi.top/api/dynamic-image/qr-code",alt:"企业微信二维码",style:yt.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),l.jsxDEV("div",{style:yt.helpText,children:[l.jsxDEV("p",{style:yt.helpTitle,children:"需要帮助?"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:350,columnNumber:15},void 0),l.jsxDEV("p",{style:yt.helpDesc,children:"扫码联系客服,或前往调试页面导出完整日志与备份数据"},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:351,columnNumber:15},void 0),l.jsxDEV(Os,{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)},J2=({info:e})=>{const t=e.percent>75?"#E53935":e.percent>50?"#FB8C00":"#43A047";return l.jsxDEV("div",{style:yt.memoryBox,children:[l.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),l.jsxDEV("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[l.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),l.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),l.jsxDEV("div",{style:{height:4,backgroundColor:"#e0e0e0",borderRadius:2,marginTop:8,overflow:"hidden"},children:l.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)},Os=({label:e,onClick:t,bg:n,bgHover:i,color:o,small:s})=>{const[r,a]=Fn.useState(!1),c=s?{...yt.btnSmall,backgroundColor:r?i:n,color:o}:{...yt.btn,backgroundColor:r?i:n,color:o};return l.jsxDEV("button",{onClick:t,onMouseOver:()=>a(!0),onMouseOut:()=>a(!1),style:c,children:e},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/ErrorBoundary.tsx",lineNumber:392,columnNumber:5},void 0)},yt={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}},eA=500,Ll="board",Xc="aitu_board_close_snapshot_v1";let Ga=!1;function tA(){if(!(typeof window>"u"))return window.__OPENTU_BOOT__}function fp(){return new URLSearchParams(window.location.search).get(Ll)}function hp(e,t=!1){const n=new URL(window.location.href);e?n.searchParams.set(Ll,e):n.searchParams.delete(Ll),t?window.history.replaceState({boardId:e},"",n.toString()):window.history.pushState({boardId:e},"",n.toString())}function nA(e){try{localStorage.setItem(Xc,JSON.stringify(e))}catch(t){console.warn("[App] Failed to save board close snapshot:",t)}}function pb(){try{const e=localStorage.getItem(Xc);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 Fs(e){try{const t=pb();if(!t)return;(!e||t.boardId===e)&&localStorage.removeItem(Xc)}catch(t){console.warn("[App] Failed to clear board close snapshot:",t)}}function iA(){const[e,t]=p.useState(!0),[n,i]=p.useState(!1),o=p.useRef(!1),[s,r]=p.useState(!1),[a,c]=p.useState(null),[u,d]=p.useState({children:[]}),[m,f]=p.useState(null),h=p.useRef(null),g=p.useRef(),x=p.useRef(null),b=p.useRef(null),y=p.useRef(!1),N=p.useRef(null),w=p.useRef(!1),T=p.useRef(!1),S=p.useRef(!1);BC(m),p.useEffect(()=>{h.current=m},[m]);const v=p.useCallback((A,_,M=Date.now())=>{g.current=_.viewport,x.current={boardId:A,children:_.children,viewport:_.viewport,theme:_.theme,updatedAt:M}},[]),E=p.useCallback(A=>{const _=x.current,M=h.current;if(!_||!M||_.boardId!==M||!S.current)return;nA({..._,updatedAt:Date.now()}),Nn.getInstance().saveCurrentBoard({children:_.children,viewport:_.viewport,theme:_.theme}).catch(Z=>{console.warn(`[App] Failed to flush board on ${A}:`,Z)})},[]);p.useEffect(()=>{const A=tA();A&&(s||a||!e)&&A.markReady()},[a,e,s]),p.useEffect(()=>{s||a||e||tb(["offline-static-assets"])},[a,e,s]),p.useEffect(()=>{(async()=>{if(Kt.shouldShowSafeModePrompt()&&!Kt.isSafeMode()){r(!0),t(!1);return}if(Ga){const _=Nn.getInstance();t(!1),await _.waitForInitialization();const M=_.getState().currentBoardId;if(M&&_.getBoardMetadata(M)){const P=await _.switchBoard(M),Z={children:P.elements||[],viewport:P.viewport,theme:P.theme};v(P.id,Z,P.updatedAt),S.current=!1,d(Z)}t(!1),Kt.markLoadingComplete();return}Ga=!0;try{const _=Nn.getInstance();if(t(!1),await _.initialize(),await ob()||await OC(),Kt.isSafeMode()){console.log("[App] Safe mode: looking for existing safe mode board");const ce=_.getAllBoards().find(le=>le.name.startsWith("安全模式")&&(!le.elements||le.elements.length===0));if(ce)console.log("[App] Safe mode: reusing existing board:",ce.name),await _.switchBoard(ce.id),f(ce.id);else{console.log("[App] Safe mode: creating new blank board");const le=new Date().toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"),be=await _.createBoard({name:`安全模式 ${le}`,elements:[]});be&&(await _.switchBoard(be.id),f(be.id))}const X={children:[]},ae=(ce==null?void 0:ce.id)||h.current||"safe-mode";v(ae,X,Date.now()),d(X),o.current=!0,i(!0),t(!1),Kt.markLoadingComplete(),Kt.disableSafeMode(),setTimeout(()=>{re.warning({content:"当前处于安全模式,已创建空白画布。可从侧边栏切换到其他画布。",duration:8e3,closeBtn:!0})},500);return}let P=null;const Z=fp(),pe=_.getState().currentBoardId;let I=null;if(Z&&_.getBoardMetadata(Z)?I=Z:pe&&_.getBoardMetadata(pe)&&(I=pe),I)P=await _.switchBoard(I);else if(_.hasBoards()){const G=_.getTree(),ce=fb(G);ce&&(P=await _.switchBoard(ce.id))}else{const G=await _.createBoard({name:"我的画板1",elements:[]});G&&(P=await _.switchBoard(G.id))}if(P&&(hp(P.id,!0),f(P.id),_.persistCurrentBoardId(P.id),S.current=!1),P){const G=pb();let ce={children:P.elements||[],viewport:P.viewport,theme:P.theme};if(G&&G.boardId===P.id&&G.updatedAt>P.updatedAt){ce={children:G.children,viewport:G.viewport,theme:G.theme},P={...P,...ce,updatedAt:G.updatedAt};const X=P.id;_.saveBoard(X,ce).then(()=>{S.current=!1,Fs(X)}).catch(ae=>{console.warn("[App] Failed to rehydrate board from close snapshot:",ae)}),re.warning({content:"检测到上次关闭前的未落盘画布,已自动恢复",duration:5e3,closeBtn:!0})}else G&&G.boardId&&!_.getBoardMetadata(G.boardId)&&Fs(G.boardId);v(P.id,ce,P.updatedAt),S.current=!1,d(ce),Wa(ce.children).then(X=>{if(X!==ce.children){const ae={...ce,children:X};v(P.id,ae,Date.now()),d(ae)}}).catch(X=>{console.error("[App] Video URL recovery failed:",X)})}}catch(_){console.error("[App] Initialization failed:",_),c(_ instanceof Error?_:new Error(String(_)))}finally{o.current=!0,i(!0),t(!1),Kt.markLoadingComplete()}})()},[v]);const R=p.useCallback(async(A,_=!1)=>{try{_||(hp(A.id),Nn.getInstance().persistCurrentBoardId(A.id)),f(A.id),T.current=!1,S.current=!1;const P={children:await Wa(A.elements||[]),viewport:A.viewport,theme:A.theme};v(A.id,P,A.updatedAt),d(P),setTimeout(()=>{N.current&&(Qo(N.current),Sp(N.current),sr(N.current))},0)}catch(M){console.error("[App] Board switch failed:",M),re.error({content:`切换画板失败: ${M instanceof Error?M.message:"未知错误"}`,duration:5e3,closeBtn:!0})}},[v]);p.useEffect(()=>{const A=async()=>{if(!y.current){y.current=!0;try{const _=fp();if(_&&_!==m){const M=Nn.getInstance(),P=await M.switchBoard(_);P&&(await R(P,!0),M.persistCurrentBoardId(P.id))}}catch(_){console.error("[App] Failed to handle browser navigation:",_)}finally{y.current=!1}}};return window.addEventListener("popstate",A),()=>{window.removeEventListener("popstate",A)}},[m,R]);const q=p.useCallback(async()=>{w.current=!0;try{const A=Nn.getInstance();let _=A.getCurrentBoard();if(!_){const P=A.getState().currentBoardId;if(!P){console.warn("[App] handleTabSyncNeeded: no current board ID");return}if(!A.getBoardMetadata(P)){console.warn("[App] handleTabSyncNeeded: board not found",P);return}try{_=await A.switchBoard(P)}catch(Z){console.error("[App] handleTabSyncNeeded: failed to load board",Z);return}}const M=await A.reloadBoard(_.id);if(M){const Z={children:await Wa(M.elements||[]),viewport:M.viewport,theme:M.theme};v(M.id,Z,M.updatedAt),S.current=!1,d(Z)}}catch(A){console.error("[App] Failed to sync board data:",A),Ei()}finally{setTimeout(()=>{w.current=!1},100)}},[v]),$=p.useCallback(A=>{if(d(A),g.current=A.viewport,!o.current||w.current)return;T.current=!0,S.current=!0;const _=Nn.getInstance(),M=_.getCurrentBoard();if(!M){console.warn("[App] handleBoardChange: board not fully loaded, skipping save");return}v(M.id,A),_.saveCurrentBoard(A).then(()=>{S.current=!1,Fs(M.id),eb(M.id)}).catch(P=>{console.error("[App] Failed to save board:",P)})},[v]),V=p.useCallback(A=>{g.current=A;const _=x.current;_&&(x.current={..._,viewport:A,updatedAt:Date.now()}),!w.current&&(S.current=!0,b.current&&clearTimeout(b.current),b.current=setTimeout(()=>{if(w.current)return;const M=Nn.getInstance(),P=M.getCurrentBoard();P&&M.saveCurrentBoard({children:P.elements,viewport:A,theme:P.theme}).then(()=>{S.current=!1,Fs(P.id)}).catch(Z=>{console.error("[App] Failed to save viewport:",Z)})},eA))},[v]);p.useEffect(()=>{const A=Z=>{if(b.current&&(clearTimeout(b.current),b.current=null),w.current)return;const I=Nn.getInstance().getCurrentBoard(),G=x.current,ce=g.current,X=h.current;I&&X&&(!G||G.boardId!==X)&&v(I.id,{children:I.elements,viewport:ce??I.viewport,theme:I.theme},Date.now()),!(Z==="visibilitychange"&&!T.current)&&E(Z)},_=()=>{A("beforeunload")},M=()=>{document.visibilityState==="hidden"&&A("visibilitychange")},P=()=>{A("pagehide")};return window.addEventListener("beforeunload",_),window.addEventListener("pagehide",P),document.addEventListener("visibilitychange",M),()=>{window.removeEventListener("beforeunload",_),window.removeEventListener("pagehide",P),document.removeEventListener("visibilitychange",M),b.current&&clearTimeout(b.current)}},[E,v]);const U=p.useCallback(A=>{r(!1),A?Kt.enableSafeMode():Kt.clearCrashState(),t(!0),Ga=!1,setTimeout(()=>{Ei()},100)},[]);return s?l.jsxDEV(_r,{variant:"crash",crashCount:Kt.getCrashCount(),memoryInfo:Kt.getMemoryInfo(),onIgnore:()=>U(!1),onSafeModeReload:()=>U(!0),onGoToDebug:Dr},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:874,columnNumber:7},this):a?l.jsxDEV(_r,{variant:"error",title:"应用初始化失败",description:"无法加载画板数据,可能是存储损坏或浏览器限制。",errorMessage:a.message,errorStack:a.stack,onExportLog:()=>ql(a),onSafeModeReload:Bl,onGoToDebug:Dr},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:888,columnNumber:7},this):e?l.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:903,columnNumber:7},this):l.jsxDEV("div",{style:{height:"100vh"},children:l.jsxDEV(IC,{value:u.children,viewport:u.viewport,theme:u.theme,onChange:$,onViewportChange:V,onBoardSwitch:R,onTabSyncNeeded:q,isDataReady:n,currentBoardId:m,afterInit:A=>{N.current=A,window.__drawnix__web__console=_=>{oA(A,_)}}},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:918,columnNumber:7},this)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/app/app.tsx",lineNumber:917,columnNumber:5},this)}const oA=(e,t)=>{const n=F.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 Wa(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),a=`/__aitu_cache__/video/${s>0?o.substring(0,s):o}.mp4`;return{...t,url:a}}}return t})}function fb(e){for(const t of e){if(t.type==="board")return t.data;if(t.type==="folder"&&t.children){const n=fb(t.children);if(n)return n}}return null}const gp=window.addEventListener.bind(window),sA=window.removeEventListener.bind(window);let Kc=null;window.addEventListener=function(e,t,n){if(e==="unload"){console.warn("[Permissions Policy] Blocked unload event listener");return}return e==="beforeunload"&&(Kc=t),gp.call(window,e,t,n)};window.removeEventListener=function(e,t,n){return e==="beforeunload"&&(Kc=null),sA.call(window,e,t,n)};window.__checkBeforeUnload=()=>!!Kc;let bp=!1;const hb="sw-debug-enabled";function rA(){try{return sessionStorage.getItem(hb)==="true"}catch{return!1}}function xp(e){try{sessionStorage.setItem(hb,e===!0?"true":"false")}catch{}}let Uo=rA();const Zo=[];let ro=null,Qn=0;const jr=15e3,Ro={error:console.error,warn:console.warn,info:console.info,log:console.log,debug:console.debug};function fi(e,t,n){if(t.includes("[SW]")||t.includes("[SWTaskQueue]")||t.includes("[SWChannelManager]")||t.includes("Invalid message structure")||t.includes("posthog.com")||t.includes("sentry.io")||n&&(n.includes("posthog")||n.includes("sentry")))return;const i=()=>{bt.isInitialized()&&bt.reportConsoleLog(e,[{message:t,stack:n||"",source:window.location.href}],Date.now()).catch(()=>{})},o=()=>{for(;Zo.length>0&&bt.isInitialized();){const r=Zo.shift();bt.reportConsoleLog(r.level,[{message:r.message,stack:r.stack||"",source:window.location.href}],Date.now()).catch(()=>{})}},s=()=>{const r=Date.now();ro||r<Qn||(ro=bt.initialize().then(a=>{if(!a){Qn=Date.now()+jr;return}Qn=0,o()}).catch(()=>{Qn=Date.now()+jr}).finally(()=>{ro=null}))};bt.isInitialized()?i():(Zo.push({level:e,message:t,stack:n}),s())}function qo(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 Np(e){for(const t of e)if(t instanceof Error&&t.stack)return t.stack;return""}function aA(){if(bp||!("serviceWorker"in navigator))return;bp=!0;const e=()=>{if(bt.isInitialized())bt.subscribeToEvent("debug:statusChanged",t=>{const n=t,i=n.enabled??n.debugModeEnabled??!1;Uo=i,xp(i)}),bt.getDebugStatus().then(t=>{const n=t.enabled??t.debugModeEnabled??!1;Uo=n,xp(n)});else{const t=Date.now();!ro&&t>=Qn&&(ro=bt.initialize().then(n=>{if(!n){Qn=Date.now()+jr;return}for(Qn=0;Zo.length>0&&bt.isInitialized();){const i=Zo.shift();bt.reportConsoleLog(i.level,[{message:i.message,stack:i.stack||"",source:window.location.href}],Date.now()).catch(()=>{})}}).catch(()=>{Qn=Date.now()+jr}).finally(()=>{ro=null})),setTimeout(e,500)}};e(),console.error=function(...t){Ro.error.apply(console,t),fi("error",qo(t),Np(t))},console.warn=function(...t){Ro.warn.apply(console,t),fi("warn",qo(t),Np(t))},console.log=function(...t){Ro.log.apply(console,t),Uo&&fi("log",qo(t),"")},console.info=function(...t){Ro.info.apply(console,t),Uo&&fi("info",qo(t),"")},console.debug=function(...t){Ro.debug.apply(console,t),Uo&&fi("debug",qo(t),"")},window.addEventListener("error",t=>{var i;const n=`${t.message} at ${t.filename}:${t.lineno}:${t.colno}`;fi("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||"";fi("error",i,o)})}"serviceWorker"in navigator&&aA();Kt.markLoadingStart();Kt.checkUrlSafeMode();O2();const lA=typeof window<"u"&&(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1"),cA=typeof window<"u"&&new URLSearchParams(window.location.search).get("report")==="1",uA=cA||!lA&&!1,gb="0.6.72",aa=_y(),yp="_lazy_chunk_retry",dA="_t";function mA(){if(typeof window>"u")return;const e=new URL(window.location.href);if(e.searchParams.has(yp)){e.searchParams.delete(yp),e.searchParams.delete(dA);try{window.history.replaceState(window.history.state,"",e.toString())}catch{}}}mA();function bb(e){return e==="jsdelivr"||e==="unpkg"||e==="local"}function pA(){return window.__OPENTU_BOOT__||null}function Qi(e){var t,n;(n=(t=pA())==null?void 0:t.setProgress)==null||n.call(t,e==null?void 0:e.progress,e)}function fA(){const e=window.__OPENTU_CDN__||window.__AITU_CDN__;return!e||!bb(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 wp(e){const t=fA();if(!t)return;const n={type:"SW_CDN_SET_PREFERENCE",...t,version:gb},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 vp(e){wp(e);const t=window.__OPENTU_CDN_API__||window.__AITU_CDN_API__;t!=null&&t.selectBestCDN&&t.selectBestCDN().then(n=>{n&&bb(n.cdn)&&(window.__OPENTU_CDN__=n),wp(e)}).catch(n=>{console.warn("[Main] Failed to sync CDN preference to Service Worker:",n)})}function Hs(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)})}yS({dsn:"https://a18e755345995baaa0e1972c4cf24497@o4510700882296832.ingest.us.sentry.io/4510700883869696",enabled:uA,sendDefaultPii:!1,tracesSampleRate:.1,beforeSend(e){return e.extra&&(e.extra=Hi(e.extra)),e.contexts&&(e.contexts=Hi(e.contexts)),e.breadcrumbs&&(e.breadcrumbs=e.breadcrumbs.map(t=>({...t,data:t.data?Hi(t.data):void 0,message:t.message?String(Hi(t.message)):void 0}))),e.request&&(e.request.headers&&(e.request.headers=Hi(e.request.headers)),e.request.data&&(e.request.data=Hi(e.request.data)),e.request.url&&(e.request.url=Un(e.request.url))),e}});ia("app_version",gb);ia("deployment_env",aa.deployment_env);ia("release_channel",aa.release_channel);ia("host",aa.host||"unknown");Qi({tip:"正在初始化启动服务...",source:"phase",progress:12});if(typeof window<"u"){ZC();const e=()=>{if(window.posthog){Cy(aa),YC();return}setTimeout(e,300)};Hs(e,{delay:0,timeout:1e3}),Hs(()=>{rb().catch(n=>{console.warn("[Main] Database cleanup failed:",n)}),n2.runMigration().then(()=>Promise.all([jy(),Py.initializeAsync()])).catch(n=>{console.warn("[Main] Storage migration/init failed:",n)})},{delay:400,timeout:2500}),Hs(()=>{Au.start(),Au.logMemoryStatus()},{delay:5e3,timeout:2500});const t=()=>{window.posthog?zC():setTimeout(t,500)};Hs(t,{delay:1500,timeout:3e3})}if("serviceWorker"in navigator){const e=window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1";let t=null,n=!1,i=null,o=null;const s=m=>{i!==m&&(i=m,window.dispatchEvent(new CustomEvent("sw-update-available",{detail:{version:m}})))},r=m=>{if(m.pendingVersion&&m.pendingVersion!==m.committedVersion&&(m.upgradeState==="ready"||m.upgradeState==="committing")){s(m.pendingVersion);return}m.pendingVersion||(i=null)},a=m=>{const f=m||t||(o==null?void 0:o.waiting)||navigator.serviceWorker.controller||(o==null?void 0:o.active)||null;f&&f.postMessage({type:"GET_VERSION_STATE"})},c=window.__OPENTU_SW_REGISTRATION_PROMISE__||navigator.serviceWorker.register("/sw.js").catch(m=>(console.warn("[Main] Service worker registration failed:",m),null));window.__OPENTU_SW_REGISTRATION_PROMISE__=c,c.then(m=>{if(!m){Qi({tip:"离线加速未启用,正在直接启动工作台...",source:"phase",progress:70});return}o=m,Qi({tip:"启动缓存服务已连接,正在准备资源清单...",source:"phase",progress:72}),vp(m),e?(m.update().catch(f=>console.warn("Forced update check failed:",f)),m.waiting&&m.waiting.postMessage({type:"FORCE_UPGRADE"})):m.waiting&&navigator.serviceWorker.controller&&(t=m.waiting,a(m.waiting)),m.addEventListener("updatefound",()=>{const f=m.installing;f&&f.addEventListener("statechange",()=>{f.state==="installed"&&navigator.serviceWorker.controller&&(t=f,e?f.postMessage({type:"FORCE_UPGRADE"}):(a(f),setTimeout(()=>a(f),5e3)))})}),m.active&&!m.installing&&!m.waiting&&Qi({tip:"启动缓存服务已就绪,正在恢复工作台状态...",source:"phase",progress:78}),a(),setInterval(()=>{m.update().catch(f=>{console.warn("Update check failed:",f)})},300*1e3),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&a()})}).catch(m=>{Qi({tip:"离线加速未启用,正在直接启动工作台...",source:"phase",progress:70})});const u=()=>{if(!bt.isInitialized()){setTimeout(u,500);return}bt.setEventHandlers({onSWUpdated:m=>{n&&setTimeout(()=>{Ei()},1e3)},onSWNewVersionReady:m=>{s(m.version),a()},onSWActivated:m=>{n||(t=null,a())}}),o!=null&&o.waiting&&navigator.serviceWorker.controller&&(t=o.waiting,a(o.waiting))};setTimeout(u,1e3);const d=async()=>{if(!bt.isInitialized()){setTimeout(d,500);return}bt.registerVideoThumbnailHandler(async(m,f)=>{try{const{generateVideoThumbnailFromBlob:h}=await Me(async()=>{const{generateVideoThumbnailFromBlob:w}=await import("./tool-windows-BTXOQvEU.js").then(T=>T.oH);return{generateVideoThumbnailFromBlob:w}},__vite__mapDeps([0]),import.meta.url);let g=null;const b=await(await caches.open("drawnix-images")).match(m);if(b&&(g=await b.blob()),!g&&(m.startsWith("http://")||m.startsWith("https://")))try{const w=await fetch(m);w.ok&&(g=await w.blob())}catch{g=null}if(!g)return{error:"Video not found in cache or network"};const y=await h(g,f||400);return{thumbnailUrl:await new Promise((w,T)=>{const S=new FileReader;S.onloadend=()=>w(S.result),S.onerror=T,S.readAsDataURL(y)})}}catch(h){return{error:h instanceof Error?h.message:String(h)}}})};d(),navigator.serviceWorker.addEventListener("message",m=>{var f;((f=m.data)==null?void 0:f.type)==="SW_VERSION_STATE"&&r(m.data)}),navigator.serviceWorker.addEventListener("controllerchange",()=>{vp(o),a(),n&&setTimeout(()=>{Ei()},1e3)}),window.addEventListener("user-confirmed-upgrade",()=>{if(n=!0,t){t.postMessage({type:"COMMIT_UPGRADE"});return}if(o&&o.waiting){o.waiting.postMessage({type:"COMMIT_UPGRADE"});return}if(navigator.serviceWorker.controller){navigator.serviceWorker.controller.postMessage({type:"COMMIT_UPGRADE"});return}Ei()})}Qi({tip:"正在挂载工作台界面...",source:"phase",progress:88});const hA=Pr.createRoot(document.getElementById("root"));hA.render(l.jsxDEV(p.StrictMode,{children:l.jsxDEV(Z2,{children:l.jsxDEV(iA,{},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:742,columnNumber:7},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:741,columnNumber:5},void 0)},void 0,!1,{fileName:"/Users/ljq/code/shuidiyu/aitu/apps/web/src/main.tsx",lineNumber:740,columnNumber:3},void 0));const wA=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));export{eD as A,sk as B,ck as W,kP as a,xt as b,xA as c,NA as d,Gg as e,yA as f,bA as g,wA as h,F_ as i,TD as m,tD as u,nT as w};
|