@dwelle/excalidraw 0.5.0-e6263588 → 0.5.0-e9944c4
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/CHANGELOG.md +16 -0
- package/dist/dev/{chunk-MYBMQLFV.js → chunk-6FPW7UII.js} +2 -2
- package/dist/dev/{chunk-MYBMQLFV.js.map → chunk-6FPW7UII.js.map} +1 -1
- package/dist/dev/{chunk-MUNVYEGW.js → chunk-A4LHQJCQ.js} +16 -3
- package/dist/dev/chunk-A4LHQJCQ.js.map +7 -0
- package/dist/dev/{chunk-GK2P2Z4N.js → chunk-MUXNIGJA.js} +5140 -3664
- package/dist/dev/chunk-MUXNIGJA.js.map +7 -0
- package/dist/dev/chunk-Q67DF2PJ.js +69 -0
- package/dist/dev/chunk-Q67DF2PJ.js.map +7 -0
- package/dist/dev/components/TTDDialog/{CodeMirrorEditor-FCA7YAIL.js → CodeMirrorEditor-XFPXQDTD.js} +2 -2
- package/dist/dev/data/{image-5N65CA7G.js → image-DBJ5VI3T.js} +3 -3
- package/dist/dev/index.css +324 -221
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +3846 -1991
- package/dist/dev/index.js.map +4 -4
- package/dist/dev/locales/{ar-SA-YEOLME2Y.js → ar-SA-EW44IW4V.js} +14 -2
- package/dist/dev/locales/ar-SA-EW44IW4V.js.map +7 -0
- package/dist/dev/locales/{az-AZ-DQL36U4O.js → az-AZ-AI7WAYA2.js} +14 -2
- package/dist/dev/locales/az-AZ-AI7WAYA2.js.map +7 -0
- package/dist/dev/locales/{bg-BG-LG6R5FEQ.js → bg-BG-43ZNGDXF.js} +14 -2
- package/dist/dev/locales/bg-BG-43ZNGDXF.js.map +7 -0
- package/dist/dev/locales/{bn-BD-W63P7JT5.js → bn-BD-PU4CN7NP.js} +14 -2
- package/dist/dev/locales/bn-BD-PU4CN7NP.js.map +7 -0
- package/dist/dev/locales/{bn-IN-SCHACAA6.js → bn-IN-54CF43JL.js} +14 -2
- package/dist/dev/locales/bn-IN-54CF43JL.js.map +7 -0
- package/dist/dev/locales/{ca-ES-XP3CQTWV.js → ca-ES-RHJO3QDO.js} +14 -2
- package/dist/dev/locales/ca-ES-RHJO3QDO.js.map +7 -0
- package/dist/dev/locales/{cs-CZ-EXLEOJMD.js → cs-CZ-ZRSAO3BA.js} +14 -2
- package/dist/dev/locales/cs-CZ-ZRSAO3BA.js.map +7 -0
- package/dist/dev/locales/{da-DK-46ONLZRX.js → da-DK-OAB6DEJX.js} +14 -2
- package/dist/dev/locales/da-DK-OAB6DEJX.js.map +7 -0
- package/dist/dev/locales/{de-CH-A5QH3YGW.js → de-CH-QF7JLXTF.js} +14 -2
- package/dist/dev/locales/de-CH-QF7JLXTF.js.map +7 -0
- package/dist/dev/locales/{de-DE-FVCCKR5N.js → de-DE-5ZO4KOPT.js} +14 -2
- package/dist/dev/locales/de-DE-5ZO4KOPT.js.map +7 -0
- package/dist/dev/locales/{el-GR-SB4MX5JS.js → el-GR-F74ZSUEO.js} +14 -2
- package/dist/dev/locales/el-GR-F74ZSUEO.js.map +7 -0
- package/dist/dev/locales/{en-AZHTDC2Z.js → en-INQU5YPU.js} +2 -2
- package/dist/dev/locales/{es-ES-VRTYQG6S.js → es-ES-3B3IENPS.js} +14 -2
- package/dist/dev/locales/es-ES-3B3IENPS.js.map +7 -0
- package/dist/dev/locales/{eu-ES-3OHEU2YV.js → eu-ES-NH447TVU.js} +14 -2
- package/dist/dev/locales/eu-ES-NH447TVU.js.map +7 -0
- package/dist/dev/locales/{fa-IR-74WR2KXF.js → fa-IR-V44PNTTK.js} +46 -34
- package/dist/dev/locales/fa-IR-V44PNTTK.js.map +7 -0
- package/dist/dev/locales/{fi-FI-XZQC4II2.js → fi-FI-ZXSYWCC4.js} +14 -2
- package/dist/dev/locales/fi-FI-ZXSYWCC4.js.map +7 -0
- package/dist/dev/locales/{fr-FR-RABBDBKM.js → fr-FR-RJSOSEYS.js} +25 -13
- package/dist/dev/locales/fr-FR-RJSOSEYS.js.map +7 -0
- package/dist/dev/locales/{gl-ES-OU3Q6XUE.js → gl-ES-NAUVMVFY.js} +14 -2
- package/dist/dev/locales/gl-ES-NAUVMVFY.js.map +7 -0
- package/dist/dev/locales/{he-IL-6NCD5D54.js → he-IL-JBKWWR75.js} +67 -55
- package/dist/dev/locales/he-IL-JBKWWR75.js.map +7 -0
- package/dist/dev/locales/{hi-IN-M54WKOJI.js → hi-IN-SD773MVZ.js} +14 -2
- package/dist/dev/locales/hi-IN-SD773MVZ.js.map +7 -0
- package/dist/dev/locales/{hu-HU-HAW63BCI.js → hu-HU-OTA7GOAV.js} +14 -2
- package/dist/dev/locales/hu-HU-OTA7GOAV.js.map +7 -0
- package/dist/dev/locales/{id-ID-TFSPHGWX.js → id-ID-KGCGQFTT.js} +100 -88
- package/dist/dev/locales/id-ID-KGCGQFTT.js.map +7 -0
- package/dist/dev/locales/{it-IT-MH3BAO5W.js → it-IT-EWGEXMVK.js} +25 -13
- package/dist/dev/locales/it-IT-EWGEXMVK.js.map +7 -0
- package/dist/dev/locales/{ja-JP-UGJBHLX6.js → ja-JP-YMGRGBPS.js} +17 -5
- package/dist/dev/locales/ja-JP-YMGRGBPS.js.map +7 -0
- package/dist/dev/locales/{kaa-5ZUEYWIM.js → kaa-RRE7XUCW.js} +14 -2
- package/dist/dev/locales/kaa-RRE7XUCW.js.map +7 -0
- package/dist/dev/locales/{kab-KAB-RLAZQZSM.js → kab-KAB-ZCYVOJU4.js} +14 -2
- package/dist/dev/locales/kab-KAB-ZCYVOJU4.js.map +7 -0
- package/dist/dev/locales/{kk-KZ-CIP7GOIF.js → kk-KZ-TO6XEFJC.js} +14 -2
- package/dist/dev/locales/kk-KZ-TO6XEFJC.js.map +7 -0
- package/dist/dev/locales/{km-KH-YMR4247H.js → km-KH-3HTDL5HB.js} +14 -2
- package/dist/dev/locales/km-KH-3HTDL5HB.js.map +7 -0
- package/dist/dev/locales/{ko-KR-WGKQKR2R.js → ko-KR-O4L4O7L6.js} +14 -2
- package/dist/dev/locales/ko-KR-O4L4O7L6.js.map +7 -0
- package/dist/dev/locales/{ku-TR-ZSJN6TN6.js → ku-TR-AFJWDY67.js} +14 -2
- package/dist/dev/locales/ku-TR-AFJWDY67.js.map +7 -0
- package/dist/dev/locales/{lt-LT-FT6ZGIZP.js → lt-LT-7QOT2VDQ.js} +14 -2
- package/dist/dev/locales/lt-LT-7QOT2VDQ.js.map +7 -0
- package/dist/dev/locales/{lv-LV-U74YKDPR.js → lv-LV-WV6C4NYF.js} +14 -2
- package/dist/dev/locales/lv-LV-WV6C4NYF.js.map +7 -0
- package/dist/dev/locales/{mr-IN-KN72LOIA.js → mr-IN-3TLYWOEI.js} +14 -2
- package/dist/dev/locales/mr-IN-3TLYWOEI.js.map +7 -0
- package/dist/dev/locales/{my-MM-E57NLQ7W.js → my-MM-NNL2QJT3.js} +14 -2
- package/dist/dev/locales/my-MM-NNL2QJT3.js.map +7 -0
- package/dist/dev/locales/{nb-NO-FYQDWD7X.js → nb-NO-PG3XLMEV.js} +14 -2
- package/dist/dev/locales/nb-NO-PG3XLMEV.js.map +7 -0
- package/dist/dev/locales/{nl-NL-D5MZQRAC.js → nl-NL-MMOYEKKQ.js} +14 -2
- package/dist/dev/locales/nl-NL-MMOYEKKQ.js.map +7 -0
- package/dist/dev/locales/{nn-NO-5ZEUZJV4.js → nn-NO-AAC2I2YX.js} +14 -2
- package/dist/dev/locales/nn-NO-AAC2I2YX.js.map +7 -0
- package/dist/dev/locales/{oc-FR-MVW6LDAP.js → oc-FR-SR6MFB4N.js} +14 -2
- package/dist/dev/locales/oc-FR-SR6MFB4N.js.map +7 -0
- package/dist/dev/locales/{pa-IN-2NH3SVNI.js → pa-IN-ADGMQLQI.js} +14 -2
- package/dist/dev/locales/pa-IN-ADGMQLQI.js.map +7 -0
- package/dist/dev/locales/{percentages-QBBLQLIV.js → percentages-X2QIQ6XJ.js} +2 -2
- package/dist/dev/locales/{pl-PL-M6LYWLHY.js → pl-PL-FNIPTMVP.js} +14 -2
- package/dist/dev/locales/pl-PL-FNIPTMVP.js.map +7 -0
- package/dist/dev/locales/{pt-BR-27M3CCS7.js → pt-BR-67FMCDNE.js} +14 -2
- package/dist/dev/locales/pt-BR-67FMCDNE.js.map +7 -0
- package/dist/dev/locales/{pt-PT-V3C226NP.js → pt-PT-4G3GI4SF.js} +14 -2
- package/dist/dev/locales/pt-PT-4G3GI4SF.js.map +7 -0
- package/dist/dev/locales/{ro-RO-S4GNBAJI.js → ro-RO-CUZFN555.js} +25 -13
- package/dist/dev/locales/ro-RO-CUZFN555.js.map +7 -0
- package/dist/dev/locales/{ru-RU-CRRT5JUZ.js → ru-RU-4GHINTII.js} +14 -2
- package/dist/dev/locales/ru-RU-4GHINTII.js.map +7 -0
- package/dist/dev/locales/{si-LK-APMICZ7H.js → si-LK-SSNT7T4A.js} +14 -2
- package/dist/dev/locales/si-LK-SSNT7T4A.js.map +7 -0
- package/dist/dev/locales/{sk-SK-7ZFDZG6Y.js → sk-SK-J7TKZQEH.js} +14 -2
- package/dist/dev/locales/sk-SK-J7TKZQEH.js.map +7 -0
- package/dist/dev/locales/{sl-SI-BBENCX7D.js → sl-SI-SIBMLDYY.js} +130 -118
- package/dist/dev/locales/sl-SI-SIBMLDYY.js.map +7 -0
- package/dist/dev/locales/{sv-SE-35QJIOEW.js → sv-SE-6GYGFZNL.js} +25 -13
- package/dist/dev/locales/sv-SE-6GYGFZNL.js.map +7 -0
- package/dist/dev/locales/{ta-IN-4N5CFIWZ.js → ta-IN-7AW6CTGA.js} +14 -2
- package/dist/dev/locales/ta-IN-7AW6CTGA.js.map +7 -0
- package/dist/dev/locales/{th-TH-2F4V4IDB.js → th-TH-FP7ULYYM.js} +23 -11
- package/dist/dev/locales/th-TH-FP7ULYYM.js.map +7 -0
- package/dist/dev/locales/{tr-TR-NDFP3F7P.js → tr-TR-UDQGNXAG.js} +14 -2
- package/dist/dev/locales/tr-TR-UDQGNXAG.js.map +7 -0
- package/dist/dev/locales/{uk-UA-4I6VBQZ5.js → uk-UA-25HL2NCU.js} +51 -39
- package/dist/dev/locales/uk-UA-25HL2NCU.js.map +7 -0
- package/dist/dev/locales/{uz-UZ-UVKC7UNZ.js → uz-UZ-OPSBAY4H.js} +14 -2
- package/dist/dev/locales/uz-UZ-OPSBAY4H.js.map +7 -0
- package/dist/dev/locales/{vi-VN-UQCETDRL.js → vi-VN-DK367UGA.js} +14 -2
- package/dist/dev/locales/vi-VN-DK367UGA.js.map +7 -0
- package/dist/dev/locales/{zh-CN-RSRHKN75.js → zh-CN-QCVKNWUH.js} +14 -2
- package/dist/dev/locales/zh-CN-QCVKNWUH.js.map +7 -0
- package/dist/dev/locales/{zh-HK-XSFQ32U4.js → zh-HK-WFGYHWPG.js} +14 -2
- package/dist/dev/locales/zh-HK-WFGYHWPG.js.map +7 -0
- package/dist/dev/locales/{zh-TW-KFVYWRFJ.js → zh-TW-WHQS4ZSD.js} +33 -21
- package/dist/dev/locales/zh-TW-WHQS4ZSD.js.map +7 -0
- package/dist/dev/subset-shared.chunk.js +1 -1
- package/dist/dev/subset-worker.chunk.js +1 -1
- package/dist/prod/chunk-25DVBZY5.js +34 -0
- package/dist/prod/chunk-52O7NOSZ.js +12 -0
- package/dist/prod/chunk-DYU5D34O.js +1 -0
- package/dist/prod/{chunk-KVZVLATH.js → chunk-RNVAYDMN.js} +1 -1
- package/dist/prod/components/TTDDialog/{CodeMirrorEditor-IYDFKSMV.js → CodeMirrorEditor-WLFHUPRX.js} +1 -1
- package/dist/prod/data/image-USJGQDOA.js +1 -0
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +63 -94
- package/dist/prod/locales/{ar-SA-PQUY64WN.js → ar-SA-5WIASEJP.js} +5 -5
- package/dist/prod/locales/az-AZ-V5EUQD6C.js +1 -0
- package/dist/prod/locales/bg-BG-EXASCMTR.js +5 -0
- package/dist/prod/locales/bn-BD-U4SYNFCO.js +3 -0
- package/dist/prod/locales/bn-IN-HKDJIITE.js +3 -0
- package/dist/prod/locales/ca-ES-2KGUU5XB.js +8 -0
- package/dist/prod/locales/cs-CZ-VUCGPRML.js +7 -0
- package/dist/prod/locales/da-DK-NNDP2IVP.js +2 -0
- package/dist/prod/locales/de-CH-I7RAVIZN.js +11 -0
- package/dist/prod/locales/de-DE-WBQ3DQLR.js +11 -0
- package/dist/prod/locales/el-GR-TYQHVGXW.js +7 -0
- package/dist/prod/locales/{en-VMWWLRQY.js → en-MYE3M2F3.js} +1 -1
- package/dist/prod/locales/es-ES-JEUOREKJ.js +12 -0
- package/dist/prod/locales/eu-ES-SO5DEEAN.js +8 -0
- package/dist/prod/locales/fa-IR-I4JNTJHK.js +9 -0
- package/dist/prod/locales/fi-FI-REAEF6HQ.js +6 -0
- package/dist/prod/locales/fr-FR-SUCL7J6B.js +12 -0
- package/dist/prod/locales/gl-ES-KHCSOGVH.js +6 -0
- package/dist/prod/locales/he-IL-JYXVXV2Q.js +9 -0
- package/dist/prod/locales/hi-IN-BU52H3BO.js +3 -0
- package/dist/prod/locales/hu-HU-OWADXDQ3.js +3 -0
- package/dist/prod/locales/id-ID-2WY7E4VX.js +8 -0
- package/dist/prod/locales/it-IT-INVHSAJF.js +12 -0
- package/dist/prod/locales/ja-JP-JBNTKYP4.js +12 -0
- package/dist/prod/locales/kaa-TC3VIB7V.js +1 -0
- package/dist/prod/locales/kab-KAB-UOUDSQKM.js +4 -0
- package/dist/prod/locales/kk-KZ-P5H2X7YS.js +1 -0
- package/dist/prod/locales/{km-KH-PCWDKPHP.js → km-KH-IHMV2US7.js} +4 -4
- package/dist/prod/locales/ko-KR-ZTMANIDF.js +5 -0
- package/dist/prod/locales/ku-TR-GPJTRB5G.js +6 -0
- package/dist/prod/locales/lt-LT-V3XDOK3P.js +3 -0
- package/dist/prod/locales/lv-LV-DVQ3FADO.js +4 -0
- package/dist/prod/locales/mr-IN-VZ6HH5FE.js +9 -0
- package/dist/prod/locales/my-MM-XYKWHRK6.js +1 -0
- package/dist/prod/locales/nb-NO-UNO2GGZJ.js +8 -0
- package/dist/prod/locales/nl-NL-76EFHT4P.js +13 -0
- package/dist/prod/locales/nn-NO-CFKD7ABE.js +4 -0
- package/dist/prod/locales/oc-FR-YBJTCJ3J.js +4 -0
- package/dist/prod/locales/pa-IN-SNOXSMRV.js +4 -0
- package/dist/prod/locales/percentages-LWOC67ZH.js +1 -0
- package/dist/prod/locales/pl-PL-BSY6YFZ3.js +12 -0
- package/dist/prod/locales/pt-BR-CZDV62R3.js +10 -0
- package/dist/prod/locales/pt-PT-JO57XJJW.js +12 -0
- package/dist/prod/locales/ro-RO-UZ5ICYYN.js +12 -0
- package/dist/prod/locales/ru-RU-AN7JPREC.js +10 -0
- package/dist/prod/locales/si-LK-7CBLD6QQ.js +1 -0
- package/dist/prod/locales/sk-SK-SWR6DKBI.js +7 -0
- package/dist/prod/locales/sl-SI-QY5KCFGA.js +8 -0
- package/dist/prod/locales/sv-SE-O3OFCY3J.js +12 -0
- package/dist/prod/locales/ta-IN-V6NHHU6Z.js +6 -0
- package/dist/prod/locales/th-TH-WLSZUSBX.js +1 -0
- package/dist/prod/locales/tr-TR-GUFYG22B.js +4 -0
- package/dist/prod/locales/uk-UA-K6SV5NFQ.js +6 -0
- package/dist/prod/locales/uz-UZ-TVKTZO2G.js +1 -0
- package/dist/prod/locales/vi-VN-7FKFXJNO.js +7 -0
- package/dist/prod/locales/zh-CN-AOKVLNNK.js +11 -0
- package/dist/prod/locales/zh-HK-CDKPF5DC.js +1 -0
- package/dist/prod/locales/zh-TW-ZVGYESGW.js +13 -0
- package/dist/prod/subset-shared.chunk.js +1 -1
- package/dist/prod/subset-worker.chunk.js +1 -1
- package/dist/types/common/src/colors.d.ts +13 -7
- package/dist/types/common/src/constants.d.ts +44 -0
- package/dist/types/common/src/keys.d.ts +2 -0
- package/dist/types/common/src/random.d.ts +7 -0
- package/dist/types/element/src/Scene.d.ts +1 -1
- package/dist/types/element/src/comparisons.d.ts +5 -3
- package/dist/types/element/src/delta.d.ts +23 -1
- package/dist/types/element/src/flowchart.d.ts +5 -1
- package/dist/types/element/src/frame.d.ts +2 -2
- package/dist/types/element/src/index.d.ts +1 -0
- package/dist/types/element/src/linearElementEditor.d.ts +10 -0
- package/dist/types/element/src/mutateElement.d.ts +1 -1
- package/dist/types/element/src/newElement.d.ts +24 -2
- package/dist/types/element/src/sizeHelpers.d.ts +6 -0
- package/dist/types/element/src/sortElements.d.ts +10 -0
- package/dist/types/element/src/stickyNote.d.ts +183 -0
- package/dist/types/element/src/textElement.d.ts +2 -1
- package/dist/types/element/src/transform.d.ts +25 -6
- package/dist/types/element/src/typeChecks.d.ts +3 -2
- package/dist/types/element/src/types.d.ts +35 -6
- package/dist/types/element/src/utils.d.ts +7 -3
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +30 -6
- package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +20 -4
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +70 -14
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +20 -4
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +31 -7
- package/dist/types/excalidraw/actions/actionDeselect.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -2
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +20 -4
- package/dist/types/excalidraw/actions/actionExport.d.ts +20 -4
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +1 -0
- package/dist/types/excalidraw/actions/actionFrame.d.ts +81 -7
- package/dist/types/excalidraw/actions/actionGroup.d.ts +21 -5
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +61 -3
- package/dist/types/excalidraw/actions/actionLink.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionMenu.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionProperties.d.ts +30 -10
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionStyles.d.ts +11 -3
- package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +10 -2
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +10 -2
- package/dist/types/excalidraw/actions/colorTargets.d.ts +39 -0
- package/dist/types/excalidraw/appState.d.ts +21 -1
- package/dist/types/excalidraw/components/App.arrowText.d.ts +40 -8
- package/dist/types/excalidraw/components/App.bucketFill.d.ts +14 -0
- package/dist/types/excalidraw/components/App.cursor.d.ts +10 -3
- package/dist/types/excalidraw/components/App.d.ts +111 -14
- package/dist/types/excalidraw/components/App.toolDrag.d.ts +63 -0
- package/dist/types/excalidraw/components/App.wheel.d.ts +33 -0
- package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +6 -2
- package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +3 -1
- package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +2 -1
- package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +4 -2
- package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +4 -2
- package/dist/types/excalidraw/components/ColorPicker/TopPicks.d.ts +8 -1
- package/dist/types/excalidraw/components/ColorPicker/topPicksDnD.d.ts +31 -0
- package/dist/types/excalidraw/components/IconButton.d.ts +2 -0
- package/dist/types/excalidraw/components/LayerUI.d.ts +2 -1
- package/dist/types/excalidraw/components/TTDDialog/utils/TTDStreamFetch.d.ts +1 -0
- package/dist/types/excalidraw/components/Tools.d.ts +7 -2
- package/dist/types/excalidraw/components/UserList.d.ts +3 -2
- package/dist/types/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.d.ts +11 -0
- package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +2 -0
- package/dist/types/excalidraw/components/icons.d.ts +4 -0
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +1 -0
- package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +2 -2
- package/dist/types/excalidraw/data/blob.d.ts +20 -4
- package/dist/types/excalidraw/data/json.d.ts +10 -2
- package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -2
- package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +5 -5
- package/dist/types/excalidraw/index.d.ts +3 -1
- package/dist/types/excalidraw/lasso/utils.d.ts +2 -0
- package/dist/types/excalidraw/renderer/helpers.d.ts +25 -0
- package/dist/types/excalidraw/renderer/interactiveScene.d.ts +1 -1
- package/dist/types/excalidraw/scene/Renderer.d.ts +50 -1
- package/dist/types/excalidraw/scene/index.d.ts +1 -1
- package/dist/types/excalidraw/scene/types.d.ts +1 -0
- package/dist/types/excalidraw/types.d.ts +88 -6
- package/dist/types/excalidraw/viewport.d.ts +10 -2
- package/dist/types/math/src/curve.d.ts +19 -12
- package/dist/types/math/src/segment.d.ts +6 -0
- package/dist/types/utils/src/shape.d.ts +2 -2
- package/package.json +2 -2
- package/dist/dev/chunk-GK2P2Z4N.js.map +0 -7
- package/dist/dev/chunk-HY55C7T4.js +0 -69
- package/dist/dev/chunk-HY55C7T4.js.map +0 -7
- package/dist/dev/chunk-MUNVYEGW.js.map +0 -7
- package/dist/dev/locales/ar-SA-YEOLME2Y.js.map +0 -7
- package/dist/dev/locales/az-AZ-DQL36U4O.js.map +0 -7
- package/dist/dev/locales/bg-BG-LG6R5FEQ.js.map +0 -7
- package/dist/dev/locales/bn-BD-W63P7JT5.js.map +0 -7
- package/dist/dev/locales/bn-IN-SCHACAA6.js.map +0 -7
- package/dist/dev/locales/ca-ES-XP3CQTWV.js.map +0 -7
- package/dist/dev/locales/cs-CZ-EXLEOJMD.js.map +0 -7
- package/dist/dev/locales/da-DK-46ONLZRX.js.map +0 -7
- package/dist/dev/locales/de-CH-A5QH3YGW.js.map +0 -7
- package/dist/dev/locales/de-DE-FVCCKR5N.js.map +0 -7
- package/dist/dev/locales/el-GR-SB4MX5JS.js.map +0 -7
- package/dist/dev/locales/es-ES-VRTYQG6S.js.map +0 -7
- package/dist/dev/locales/eu-ES-3OHEU2YV.js.map +0 -7
- package/dist/dev/locales/fa-IR-74WR2KXF.js.map +0 -7
- package/dist/dev/locales/fi-FI-XZQC4II2.js.map +0 -7
- package/dist/dev/locales/fr-FR-RABBDBKM.js.map +0 -7
- package/dist/dev/locales/gl-ES-OU3Q6XUE.js.map +0 -7
- package/dist/dev/locales/he-IL-6NCD5D54.js.map +0 -7
- package/dist/dev/locales/hi-IN-M54WKOJI.js.map +0 -7
- package/dist/dev/locales/hu-HU-HAW63BCI.js.map +0 -7
- package/dist/dev/locales/id-ID-TFSPHGWX.js.map +0 -7
- package/dist/dev/locales/it-IT-MH3BAO5W.js.map +0 -7
- package/dist/dev/locales/ja-JP-UGJBHLX6.js.map +0 -7
- package/dist/dev/locales/kaa-5ZUEYWIM.js.map +0 -7
- package/dist/dev/locales/kab-KAB-RLAZQZSM.js.map +0 -7
- package/dist/dev/locales/kk-KZ-CIP7GOIF.js.map +0 -7
- package/dist/dev/locales/km-KH-YMR4247H.js.map +0 -7
- package/dist/dev/locales/ko-KR-WGKQKR2R.js.map +0 -7
- package/dist/dev/locales/ku-TR-ZSJN6TN6.js.map +0 -7
- package/dist/dev/locales/lt-LT-FT6ZGIZP.js.map +0 -7
- package/dist/dev/locales/lv-LV-U74YKDPR.js.map +0 -7
- package/dist/dev/locales/mr-IN-KN72LOIA.js.map +0 -7
- package/dist/dev/locales/my-MM-E57NLQ7W.js.map +0 -7
- package/dist/dev/locales/nb-NO-FYQDWD7X.js.map +0 -7
- package/dist/dev/locales/nl-NL-D5MZQRAC.js.map +0 -7
- package/dist/dev/locales/nn-NO-5ZEUZJV4.js.map +0 -7
- package/dist/dev/locales/oc-FR-MVW6LDAP.js.map +0 -7
- package/dist/dev/locales/pa-IN-2NH3SVNI.js.map +0 -7
- package/dist/dev/locales/pl-PL-M6LYWLHY.js.map +0 -7
- package/dist/dev/locales/pt-BR-27M3CCS7.js.map +0 -7
- package/dist/dev/locales/pt-PT-V3C226NP.js.map +0 -7
- package/dist/dev/locales/ro-RO-S4GNBAJI.js.map +0 -7
- package/dist/dev/locales/ru-RU-CRRT5JUZ.js.map +0 -7
- package/dist/dev/locales/si-LK-APMICZ7H.js.map +0 -7
- package/dist/dev/locales/sk-SK-7ZFDZG6Y.js.map +0 -7
- package/dist/dev/locales/sl-SI-BBENCX7D.js.map +0 -7
- package/dist/dev/locales/sv-SE-35QJIOEW.js.map +0 -7
- package/dist/dev/locales/ta-IN-4N5CFIWZ.js.map +0 -7
- package/dist/dev/locales/th-TH-2F4V4IDB.js.map +0 -7
- package/dist/dev/locales/tr-TR-NDFP3F7P.js.map +0 -7
- package/dist/dev/locales/uk-UA-4I6VBQZ5.js.map +0 -7
- package/dist/dev/locales/uz-UZ-UVKC7UNZ.js.map +0 -7
- package/dist/dev/locales/vi-VN-UQCETDRL.js.map +0 -7
- package/dist/dev/locales/zh-CN-RSRHKN75.js.map +0 -7
- package/dist/dev/locales/zh-HK-XSFQ32U4.js.map +0 -7
- package/dist/dev/locales/zh-TW-KFVYWRFJ.js.map +0 -7
- package/dist/prod/chunk-7XWMRXBY.js +0 -1
- package/dist/prod/chunk-JTZGFME4.js +0 -34
- package/dist/prod/chunk-ZKUAT4MX.js +0 -12
- package/dist/prod/data/image-GN2OCBLE.js +0 -1
- package/dist/prod/locales/az-AZ-OXJXL76K.js +0 -1
- package/dist/prod/locales/bg-BG-W2GKIJDF.js +0 -5
- package/dist/prod/locales/bn-BD-TGL7M4PJ.js +0 -3
- package/dist/prod/locales/bn-IN-BKETKYEH.js +0 -3
- package/dist/prod/locales/ca-ES-LD5SCRVV.js +0 -8
- package/dist/prod/locales/cs-CZ-OFPU5DBV.js +0 -7
- package/dist/prod/locales/da-DK-FRDJFYWF.js +0 -2
- package/dist/prod/locales/de-CH-ZG7H3QK3.js +0 -11
- package/dist/prod/locales/de-DE-SIJYH4IH.js +0 -11
- package/dist/prod/locales/el-GR-IEE2CGI2.js +0 -7
- package/dist/prod/locales/es-ES-TVVPWKV5.js +0 -12
- package/dist/prod/locales/eu-ES-CGBMFQDT.js +0 -8
- package/dist/prod/locales/fa-IR-IE6XAPR4.js +0 -9
- package/dist/prod/locales/fi-FI-P7TKNHRM.js +0 -6
- package/dist/prod/locales/fr-FR-QI2XZNT7.js +0 -12
- package/dist/prod/locales/gl-ES-TLYCNOZZ.js +0 -6
- package/dist/prod/locales/he-IL-ZX43XLGP.js +0 -9
- package/dist/prod/locales/hi-IN-UTYRMTUF.js +0 -3
- package/dist/prod/locales/hu-HU-AJOSEBW6.js +0 -3
- package/dist/prod/locales/id-ID-ETLTVG6C.js +0 -8
- package/dist/prod/locales/it-IT-B4B6TP6L.js +0 -12
- package/dist/prod/locales/ja-JP-IYKVURR5.js +0 -12
- package/dist/prod/locales/kaa-SE2BUIKX.js +0 -1
- package/dist/prod/locales/kab-KAB-Y3GLKXLR.js +0 -4
- package/dist/prod/locales/kk-KZ-ABWUFVOH.js +0 -1
- package/dist/prod/locales/ko-KR-7JQDXKGM.js +0 -5
- package/dist/prod/locales/ku-TR-NAH2Q5B7.js +0 -6
- package/dist/prod/locales/lt-LT-VQFYRSNQ.js +0 -3
- package/dist/prod/locales/lv-LV-T62VSYUM.js +0 -4
- package/dist/prod/locales/mr-IN-V4FHLCJE.js +0 -9
- package/dist/prod/locales/my-MM-E3SQ6E54.js +0 -1
- package/dist/prod/locales/nb-NO-MLNOFN5H.js +0 -8
- package/dist/prod/locales/nl-NL-D5L3ZV4M.js +0 -13
- package/dist/prod/locales/nn-NO-NNHDGPKB.js +0 -4
- package/dist/prod/locales/oc-FR-DWCRF55G.js +0 -4
- package/dist/prod/locales/pa-IN-3JSAY44M.js +0 -4
- package/dist/prod/locales/percentages-ETZPVQEE.js +0 -1
- package/dist/prod/locales/pl-PL-ACURYKP3.js +0 -12
- package/dist/prod/locales/pt-BR-LOX7MLGD.js +0 -10
- package/dist/prod/locales/pt-PT-CZ2U2RFQ.js +0 -12
- package/dist/prod/locales/ro-RO-2HECL2X6.js +0 -12
- package/dist/prod/locales/ru-RU-HAYNXO46.js +0 -10
- package/dist/prod/locales/si-LK-W5KNS4H6.js +0 -1
- package/dist/prod/locales/sk-SK-7K2CFGDV.js +0 -7
- package/dist/prod/locales/sl-SI-OXV2QZWW.js +0 -6
- package/dist/prod/locales/sv-SE-JTOBZRGL.js +0 -12
- package/dist/prod/locales/ta-IN-KFAVKXGT.js +0 -6
- package/dist/prod/locales/th-TH-VDMSCPDL.js +0 -1
- package/dist/prod/locales/tr-TR-CEZ6GX45.js +0 -4
- package/dist/prod/locales/uk-UA-Q3H3OXQC.js +0 -6
- package/dist/prod/locales/uz-UZ-NGCSWWPX.js +0 -1
- package/dist/prod/locales/vi-VN-P3NDEVPS.js +0 -7
- package/dist/prod/locales/zh-CN-SS3O57GA.js +0 -11
- package/dist/prod/locales/zh-HK-LWJT3VCF.js +0 -1
- package/dist/prod/locales/zh-TW-VJXC72RT.js +0 -13
- package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +0 -10
- /package/dist/dev/components/TTDDialog/{CodeMirrorEditor-FCA7YAIL.js.map → CodeMirrorEditor-XFPXQDTD.js.map} +0 -0
- /package/dist/dev/data/{image-5N65CA7G.js.map → image-DBJ5VI3T.js.map} +0 -0
- /package/dist/dev/locales/{en-AZHTDC2Z.js.map → en-INQU5YPU.js.map} +0 -0
- /package/dist/dev/locales/{percentages-QBBLQLIV.js.map → percentages-X2QIQ6XJ.js.map} +0 -0
package/dist/prod/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import{$ as ge,$a as dm,$b as um,$c as Se,$d as Zg,$e as Pm,$f as af,$g as nw,$h as hl,A as Ya,Aa as zE,Ab as pm,Ac as Ty,Ad as Im,Ae as na,Af as Om,Ag as Yv,Ah as ml,Ai as Nw,B as kE,Ba as Br,Bb as Qn,Bc as Cy,Bd as By,Be as uc,Bf as ll,Bg as uM,Bh as yc,Bi as Ow,C as em,Ca as Zs,Cb as Hg,Cc as Wg,Cd as nc,Ce as iv,Cf as Fm,Cg as Tn,Ch as bf,Ci as tp,D as ME,Da as pn,Db as Za,Dc as xm,Dd as zy,De as hc,Df as wv,Dg as Tr,Dh as Tw,Di as Fw,E as Sg,Ea as no,Eb as ei,Ec as Ko,Ed as Hy,Ee as gc,Ef as Ur,Eg as R,Eh as Cw,Ei as If,F as AE,Fa as sm,Fb as ly,Fc as Vg,Fd as it,Fe as jg,Ff as Gr,Fg as Kv,Fh as hM,Fi as Sf,G as kg,Ga as ut,Gb as Jt,Gc as bn,Gd as tl,Ge as wo,Gf as Tv,Gg as Xv,Gh as xf,Gi as op,H as Oe,Ha as qn,Hb as Ug,Hc as vo,Hd as Uy,He as ci,Hf as rf,Hg as Ec,Hh as Ef,Hi as Bw,I as Go,Ia as HE,Ib as Vt,Ic as vr,Id as Gy,Ie as av,If as Cv,Ig as Zv,Ih as Jo,Ii as kf,J as Xi,Ja as $s,Jb as sy,Jc as Em,Jd as ic,Je as qg,Jf as nf,Jg as cf,Jh as de,Ji as ua,K as Ys,Ka as Eo,Kb as Gg,Kc as ym,Kd as ac,Ke as Jg,Kf as Iv,Kg as $v,Kh as vf,Ki as zw,L as qe,La as ht,Lb as cy,Lc as Xo,Ld as Wy,Le as Lm,Lf as Bm,Lg as jv,Lh as Vr,Li as Mf,M as Wo,Ma as UE,Mb as io,Mc as Iy,Md as mM,Me as Qg,Mf as zm,Mg as qv,Mh as pi,Mi as Hw,N as st,Na as GE,Nb as ea,Nc as Sy,Nd as Vy,Ne as lv,Nf as Sv,Ng as Jv,Nh as ma,Ni as Uw,O as te,Oa as Og,Ob as ct,Oc as Yg,Od as Yy,Oe as Z,Of as kv,Og as df,Oh as pl,Oi as rp,P as Je,Pa as Jn,Pb as dy,Pc as ky,Pd as yn,Pe as sv,Pf as Mv,Pg as Ym,Ph as ui,Pi as Af,Q as Zn,Qa as un,Qb as fn,Qc as xn,Qd as Ky,Qe as Tt,Qf as Av,Qg as Km,Qh as Sw,Qi as Gw,R as Ka,Ra as WE,Rb as Qs,Rc as My,Rd as It,Re as _m,Rf as Lv,Rg as Xm,Rh as ul,Ri as Ww,S as tm,Sa as VE,Sb as Yo,Sc as ri,Sd as Xy,Se as wr,Sf as qo,Sg as ca,Sh as kw,Si as Vw,T as Mg,Ta as js,Tb as my,Tc as et,Td as ii,Te as ia,Tf as Hm,Tg as Qv,Th as wf,Ti as kc,U as Zi,Ua as YE,Ub as ta,Uc as ao,Ud as lc,Ue as cv,Uf as _v,Ug as mf,Uh as Yr,V as Ro,Va as qi,Vb as ec,Vc as qa,Vd as we,Ve as nl,Vf as Yt,Vg as da,Vh as Cn,W as $i,Wa as KE,Wb as gt,Wc as Ja,Wd as Zo,We as He,Wf as Um,Wg as ew,Wh as In,X as Ag,Xa as XE,Xb as ze,Xc as j,Xd as Sm,Xe as dv,Xf as la,Xg as cl,Xh as gM,Y as LE,Ya as ZE,Yb as Ot,Yc as vm,Yd as Zy,Ye as mv,Yf as ye,Yg as tw,Yh as fM,Z as Lg,Za as Er,Zb as tc,Zc as oe,Zd as $y,Ze as pv,Zf as Gm,Zg as ow,Zh as Qo,_ as Ks,_a as cm,_b as py,_c as Qa,_d as jy,_e as ef,_f as wn,_g as rw,_h as vc,a as TE,aa as _E,ab as $E,ac as hm,ad as nt,ae as ol,af as di,ag as sl,ah as iw,ai as jm,b as $e,ba as om,bb as mm,bc as gm,bd as ve,be as sc,bf as Dm,bg as pM,bh as aw,bi as Tf,c as Fr,ca as $n,cb as jE,cc as uy,cd as Re,ce as km,cf as uv,cg as sa,ch as lw,ci as wc,d as Eg,da as PE,db as Fg,dc as hy,dd as wm,de as cc,df as hv,dg as Wr,dh as sw,di as qm,e as Wa,ea as DE,eb as qs,ec as gy,ed as Ay,ee as ai,ef as tf,eg as xc,eh as cw,ei as Cf,f as Va,fa as _g,fb as qE,fc as fy,fd as Bt,fe as dc,ff as Ge,fg as Wm,fh as dw,fi as bM,g as yg,ga as RE,gb as JE,gc as by,gd as Ly,ge as qy,gf as ie,gg as Pv,gh as mw,gi as Mw,h as qd,ha as NE,hb as hn,hc as ne,hd as oa,he as $g,hf as il,hg as Dv,hh as pw,hi as Aw,i as vg,ia as Xs,ib as Js,ic as xy,id as En,ie as Jy,if as Be,ig as Co,ih as uw,ii as Jm,j as wg,ja as rm,jb as Ji,jc as zr,jd as el,je as Qy,jf as Rm,jg as lf,jh as hw,ji as Tc,k as Tg,ka as OE,kb as QE,kc as Ft,kd as Tm,ke as ev,kf as fc,kg as Rv,kh as pf,ki as Qm,l as A,la as FE,lb as po,lc as Ey,ld as zt,le as mc,lf as gv,lg as Vm,lh as uf,li as ep,m as CE,ma as nm,mb as ey,mc as fm,md as xt,me as tv,mf as Nm,mg as sf,mh as gw,mi as Cc,n as ke,na as im,nb as yo,nc as $a,nd as _y,ne as li,nf as Hr,ng as Nv,nh as fw,ni as Lw,o as Uo,oa as Pg,ob as ty,oc as yy,od as ni,oe as Mm,of as al,og as Qt,oh as bw,oi as _w,p as Cg,pa as am,pb as gn,pc as ti,pd as Py,pe as ov,pf as fv,pg as Ov,ph as xw,pi as Pw,q as IE,qa as jn,qb as oy,qc as oc,qd as Dy,qe as rv,qf as of,qg as Fv,qh as dl,qi as xM,r as SE,ra as ji,rb as ry,rc as At,rd as ra,re as $o,rf as bv,rg as eo,rh as Ew,ri as gl,s as Jd,sa as Dg,sb as ny,sc as oi,sd as Kg,se as rl,sf as jo,sg as mi,sh as Zm,si as Ic,t as Do,ta as BE,tb as Bg,tc as vy,td as Ry,te as pc,tf as xv,tg as Bv,th as yw,ti as Sc,u as Us,ua as lm,ub as Qi,uc as Qe,ud as Ny,ue as Am,uf as Ev,ug as zv,uh as vw,ui as fl,v as Gs,va as Rg,vb as zg,vc as wy,vd as Xg,ve as lo,vf as To,vg as Hv,vh as $m,vi as pa,w as Ws,wa as Vo,wb as iy,wc as bm,wd as Oy,we as se,wf as yv,wg as Uv,wh as hf,wi as Dw,x as Ig,xa as Ng,xb as ay,xc as yr,xd as Cm,xe as vn,xf as aa,xg as Gv,xh as gf,y as Qd,ya as Mt,yb as he,yc as ja,yd as rc,ye as nv,yf as vv,yg as Wv,yh as ff,yi as Rw,z as Vs,za as Xa,zb as I,zc as _e,zd as Fy,ze as si,zf as bc,zg as Vv,zh as ww}from"./chunk-JTZGFME4.js";import{a as k}from"./chunk-KVZVLATH.js";import{O as yf}from"./chunk-ZKUAT4MX.js";import{c as Iw}from"./chunk-7XWMRXBY.js";import{b as wE,c as xg,d as C}from"./chunk-SRAX5OIU.js";import T9,{useCallback as C9,useContext as I9,useEffect as S9,useRef as k9,useState as M9}from"react";import Xk from"clsx";import KN from"lodash.throttle";import gr,{useContext as Xn}from"react";import{flushSync as Po}from"react-dom";import XN from"roughjs/bin/rough";import{nanoid as ZN}from"nanoid";var UI={};xg(UI,{actionAddToLibrary:()=>Lu,actionAlignBottom:()=>GT,actionAlignHorizontallyCentered:()=>KT,actionAlignLeft:()=>WT,actionAlignRight:()=>VT,actionAlignTop:()=>UT,actionAlignVerticallyCentered:()=>YT,actionBindText:()=>Ru,actionBringForward:()=>Np,actionBringToFront:()=>Fp,actionChangeArrowProperties:()=>oT,actionChangeBackgroundColor:()=>Y2,actionChangeBucketFillBackgroundColor:()=>K2,actionChangeExportBackground:()=>wu,actionChangeFillStyle:()=>X2,actionChangeFontFamily:()=>Q2,actionChangeFontSize:()=>J2,actionChangeFreedrawMode:()=>j2,actionChangeOpacity:()=>q2,actionChangeProjectName:()=>vu,actionChangeSloppiness:()=>$2,actionChangeStrokeColor:()=>V2,actionChangeStrokeWidth:()=>Z2,actionChangeTextAlign:()=>eT,actionChangeVerticalAlign:()=>tT,actionChangeViewBackgroundColor:()=>iT,actionClearCanvas:()=>Qr,actionCopy:()=>ka,actionCopyAsPng:()=>ld,actionCopyAsSvg:()=>ad,actionCopyStyles:()=>Cu,actionCut:()=>id,actionDeleteSelected:()=>Ml,actionDeselect:()=>xT,actionDuplicateSelection:()=>Hp,actionFinalize:()=>Gt,actionFlipHorizontal:()=>_u,actionFlipVertical:()=>Pu,actionGoToCollaborator:()=>HT,actionGroup:()=>Su,actionLink:()=>$l,actionLoadScene:()=>Ia,actionPasteStyles:()=>Iu,actionResetZoom:()=>td,actionSaveFileToDisk:()=>Ul,actionSaveToActiveFile:()=>ki,actionSelectAll:()=>zp,actionSendBackward:()=>Rp,actionSendToBack:()=>Op,actionShortcuts:()=>Mi,actionToggleArrowBinding:()=>Kl,actionToggleCropEditor:()=>ah,actionToggleElementLock:()=>jl,actionToggleGridMode:()=>Ma,actionToggleLinearEditor:()=>_a,actionToggleMidpointSnapping:()=>Xl,actionToggleObjectsSnapMode:()=>Yl,actionToggleSearchMenu:()=>ss,actionToggleStats:()=>Fn,actionToggleTheme:()=>Nn,actionToggleZenMode:()=>On,actionUnbindText:()=>Du,actionUngroup:()=>ku,actionZoomIn:()=>Qc,actionZoomOut:()=>ed,actionZoomToFit:()=>aT,copyText:()=>sd,distributeHorizontally:()=>$T,distributeVertically:()=>jT});import{atom as Ce,createStore as EM}from"jotai";import{createIsolation as yM}from"jotai-scope";var Yw=yM();var{useAtom:re,useSetAtom:Kr,useAtomValue:bl,useStore:R9}=Yw,Kw=Yw.Provider,St=EM();var vM=wE({"./locales/ar-SA.json":()=>import("./locales/ar-SA-PQUY64WN.js"),"./locales/az-AZ.json":()=>import("./locales/az-AZ-OXJXL76K.js"),"./locales/bg-BG.json":()=>import("./locales/bg-BG-W2GKIJDF.js"),"./locales/bn-BD.json":()=>import("./locales/bn-BD-TGL7M4PJ.js"),"./locales/bn-IN.json":()=>import("./locales/bn-IN-BKETKYEH.js"),"./locales/ca-ES.json":()=>import("./locales/ca-ES-LD5SCRVV.js"),"./locales/cs-CZ.json":()=>import("./locales/cs-CZ-OFPU5DBV.js"),"./locales/da-DK.json":()=>import("./locales/da-DK-FRDJFYWF.js"),"./locales/de-CH.json":()=>import("./locales/de-CH-ZG7H3QK3.js"),"./locales/de-DE.json":()=>import("./locales/de-DE-SIJYH4IH.js"),"./locales/el-GR.json":()=>import("./locales/el-GR-IEE2CGI2.js"),"./locales/en.json":()=>import("./locales/en-VMWWLRQY.js"),"./locales/es-ES.json":()=>import("./locales/es-ES-TVVPWKV5.js"),"./locales/eu-ES.json":()=>import("./locales/eu-ES-CGBMFQDT.js"),"./locales/fa-IR.json":()=>import("./locales/fa-IR-IE6XAPR4.js"),"./locales/fi-FI.json":()=>import("./locales/fi-FI-P7TKNHRM.js"),"./locales/fr-FR.json":()=>import("./locales/fr-FR-QI2XZNT7.js"),"./locales/gl-ES.json":()=>import("./locales/gl-ES-TLYCNOZZ.js"),"./locales/he-IL.json":()=>import("./locales/he-IL-ZX43XLGP.js"),"./locales/hi-IN.json":()=>import("./locales/hi-IN-UTYRMTUF.js"),"./locales/hu-HU.json":()=>import("./locales/hu-HU-AJOSEBW6.js"),"./locales/id-ID.json":()=>import("./locales/id-ID-ETLTVG6C.js"),"./locales/it-IT.json":()=>import("./locales/it-IT-B4B6TP6L.js"),"./locales/ja-JP.json":()=>import("./locales/ja-JP-IYKVURR5.js"),"./locales/kaa.json":()=>import("./locales/kaa-SE2BUIKX.js"),"./locales/kab-KAB.json":()=>import("./locales/kab-KAB-Y3GLKXLR.js"),"./locales/kk-KZ.json":()=>import("./locales/kk-KZ-ABWUFVOH.js"),"./locales/km-KH.json":()=>import("./locales/km-KH-PCWDKPHP.js"),"./locales/ko-KR.json":()=>import("./locales/ko-KR-7JQDXKGM.js"),"./locales/ku-TR.json":()=>import("./locales/ku-TR-NAH2Q5B7.js"),"./locales/lt-LT.json":()=>import("./locales/lt-LT-VQFYRSNQ.js"),"./locales/lv-LV.json":()=>import("./locales/lv-LV-T62VSYUM.js"),"./locales/mr-IN.json":()=>import("./locales/mr-IN-V4FHLCJE.js"),"./locales/my-MM.json":()=>import("./locales/my-MM-E3SQ6E54.js"),"./locales/nb-NO.json":()=>import("./locales/nb-NO-MLNOFN5H.js"),"./locales/nl-NL.json":()=>import("./locales/nl-NL-D5L3ZV4M.js"),"./locales/nn-NO.json":()=>import("./locales/nn-NO-NNHDGPKB.js"),"./locales/oc-FR.json":()=>import("./locales/oc-FR-DWCRF55G.js"),"./locales/pa-IN.json":()=>import("./locales/pa-IN-3JSAY44M.js"),"./locales/percentages.json":()=>import("./locales/percentages-ETZPVQEE.js"),"./locales/pl-PL.json":()=>import("./locales/pl-PL-ACURYKP3.js"),"./locales/pt-BR.json":()=>import("./locales/pt-BR-LOX7MLGD.js"),"./locales/pt-PT.json":()=>import("./locales/pt-PT-CZ2U2RFQ.js"),"./locales/ro-RO.json":()=>import("./locales/ro-RO-2HECL2X6.js"),"./locales/ru-RU.json":()=>import("./locales/ru-RU-HAYNXO46.js"),"./locales/si-LK.json":()=>import("./locales/si-LK-W5KNS4H6.js"),"./locales/sk-SK.json":()=>import("./locales/sk-SK-7K2CFGDV.js"),"./locales/sl-SI.json":()=>import("./locales/sl-SI-OXV2QZWW.js"),"./locales/sv-SE.json":()=>import("./locales/sv-SE-JTOBZRGL.js"),"./locales/ta-IN.json":()=>import("./locales/ta-IN-KFAVKXGT.js"),"./locales/th-TH.json":()=>import("./locales/th-TH-VDMSCPDL.js"),"./locales/tr-TR.json":()=>import("./locales/tr-TR-CEZ6GX45.js"),"./locales/uk-UA.json":()=>import("./locales/uk-UA-Q3H3OXQC.js"),"./locales/uz-UZ.json":()=>import("./locales/uz-UZ-NGCSWWPX.js"),"./locales/vi-VN.json":()=>import("./locales/vi-VN-P3NDEVPS.js"),"./locales/zh-CN.json":()=>import("./locales/zh-CN-SS3O57GA.js"),"./locales/zh-HK.json":()=>import("./locales/zh-HK-LWJT3VCF.js"),"./locales/zh-TW.json":()=>import("./locales/zh-TW-VJXC72RT.js")});var wM=85,Xr={code:"en",label:"English"},El=[Xr,...[{code:"ar-SA",label:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629",rtl:!0},{code:"bg-BG",label:"\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438"},{code:"ca-ES",label:"Catal\xE0"},{code:"cs-CZ",label:"\u010Cesky"},{code:"de-DE",label:"Deutsch"},{code:"el-GR",label:"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"},{code:"es-ES",label:"Espa\xF1ol"},{code:"eu-ES",label:"Euskara"},{code:"fa-IR",label:"\u0641\u0627\u0631\u0633\u06CC",rtl:!0},{code:"fi-FI",label:"Suomi"},{code:"fr-FR",label:"Fran\xE7ais"},{code:"gl-ES",label:"Galego"},{code:"he-IL",label:"\u05E2\u05D1\u05E8\u05D9\u05EA",rtl:!0},{code:"hi-IN",label:"\u0939\u093F\u0928\u094D\u0926\u0940"},{code:"hu-HU",label:"Magyar"},{code:"id-ID",label:"Bahasa Indonesia"},{code:"it-IT",label:"Italiano"},{code:"ja-JP",label:"\u65E5\u672C\u8A9E"},{code:"kab-KAB",label:"Taqbaylit"},{code:"kk-KZ",label:"\u049A\u0430\u0437\u0430\u049B \u0442\u0456\u043B\u0456"},{code:"ko-KR",label:"\uD55C\uAD6D\uC5B4"},{code:"ku-TR",label:"Kurd\xEE"},{code:"lt-LT",label:"Lietuvi\u0173"},{code:"lv-LV",label:"Latvie\u0161u"},{code:"my-MM",label:"Burmese"},{code:"nb-NO",label:"Norsk bokm\xE5l"},{code:"nl-NL",label:"Nederlands"},{code:"nn-NO",label:"Norsk nynorsk"},{code:"oc-FR",label:"Occitan"},{code:"pa-IN",label:"\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40"},{code:"pl-PL",label:"Polski"},{code:"pt-BR",label:"Portugu\xEAs Brasileiro"},{code:"pt-PT",label:"Portugu\xEAs"},{code:"ro-RO",label:"Rom\xE2n\u0103"},{code:"ru-RU",label:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{code:"sk-SK",label:"Sloven\u010Dina"},{code:"sv-SE",label:"Svenska"},{code:"sl-SI",label:"Sloven\u0161\u010Dina"},{code:"tr-TR",label:"T\xFCrk\xE7e"},{code:"uk-UA",label:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{code:"zh-CN",label:"\u7B80\u4F53\u4E2D\u6587"},{code:"zh-TW",label:"\u7E41\u9AD4\u4E2D\u6587"},{code:"vi-VN",label:"Ti\u1EBFng Vi\u1EC7t"},{code:"mr-IN",label:"\u092E\u0930\u093E\u0920\u0940"}].filter(e=>Iw[e.code]>=wM).sort((e,o)=>e.label>o.label?1:-1)],ip="__test__";Ft()&&El.unshift({code:ip,label:"test language"},{code:`${ip}.rtl`,label:"\u202Atest language (rtl)\u202C",rtl:!0});var xl=Xr,np={},ap=async e=>{if(xl=e,document.documentElement.dir=xl.rtl?"rtl":"ltr",document.documentElement.lang=xl.code,e.code.startsWith(ip))np={};else try{np=await vM(`./locales/${xl.code}.json`)}catch(o){console.error(`Failed to load language ${e.code}:`,o.message),np=yf}St.set(Zw,e.code)},Zr=()=>xl,Xw=(e,o)=>{for(let t=0;t<o.length;++t){let r=o[t];if(e[r]===void 0)return;e=e[r]}if(typeof e=="string")return e},h=(e,o,t)=>{if(xl.code.startsWith(ip))return`\u202A[[${o?`${e}(${JSON.stringify(o).slice(1,-1)})`:e}]]\u202C`;let r=e.split("."),n=Xw(np,r)||Xw(yf,r)||t;if(n===void 0){let i=`Can't find translation for ${e}`;if(k.PROD)return console.warn(i),"";throw new Error(i)}if(o)for(let i in o)n=n.replace(`{{${i}}}`,String(o[i]));return n},Zw=Ce(Xr.code),Ue=()=>{let e=bl(Zw);return{t:h,langCode:e}};var Jw={};xg(Jw,{AlignBottomIcon:()=>xp,AlignLeftIcon:()=>Ep,AlignRightIcon:()=>yp,AlignTopIcon:()=>bp,ArrowIcon:()=>Bf,ArrowRightIcon:()=>Mn,ArrowheadArrowIcon:()=>bb,ArrowheadBarIcon:()=>Cb,ArrowheadCardinalityExactlyOneIcon:()=>Mb,ArrowheadCardinalityManyIcon:()=>Sb,ArrowheadCardinalityOneIcon:()=>Ib,ArrowheadCardinalityOneOrManyIcon:()=>kb,ArrowheadCardinalityZeroOrManyIcon:()=>Lb,ArrowheadCardinalityZeroOrOneIcon:()=>Ab,ArrowheadCircleIcon:()=>yb,ArrowheadCircleOutlineIcon:()=>vb,ArrowheadDiamondIcon:()=>wb,ArrowheadDiamondOutlineIcon:()=>Tb,ArrowheadNoneIcon:()=>fb,ArrowheadTriangleIcon:()=>xb,ArrowheadTriangleOutlineIcon:()=>Eb,BringForwardIcon:()=>up,BringToFrontIcon:()=>gp,CenterHorizontallyIcon:()=>wp,CenterVerticallyIcon:()=>vp,CloseIcon:()=>No,DeviceDesktopIcon:()=>p1,DiamondIcon:()=>Lc,DiscordIcon:()=>Yf,DistributeHorizontallyIcon:()=>eb,DistributeVerticallyIcon:()=>tb,DotsHorizontalIcon:()=>_f,DotsIcon:()=>hi,DuplicateIcon:()=>wl,EdgeRoundIcon:()=>gb,EdgeSharpIcon:()=>hb,EllipseIcon:()=>_c,EmbedIcon:()=>kn,EraserIcon:()=>Uf,ExcalLogo:()=>IM,ExportIcon:()=>fi,ExportImageIcon:()=>Rc,ExternalLinkIcon:()=>dp,FillCrossHatchIcon:()=>ib,FillHachureIcon:()=>nb,FillSolidIcon:()=>ab,FillZigZagIcon:()=>rb,FontFamilyCodeIcon:()=>Oc,FontFamilyHeadingIcon:()=>Nb,FontFamilyNormalIcon:()=>Sl,FontSizeExtraLargeIcon:()=>Rb,FontSizeLargeIcon:()=>Db,FontSizeMediumIcon:()=>Pb,FontSizeSmallIcon:()=>_b,FreedrawIcon:()=>Sn,GithubIcon:()=>Pc,GroupIcon:()=>Tp,HamburgerMenuIcon:()=>Wf,HelpIcon:()=>fa,HelpIconThin:()=>Vf,HomeIcon:()=>CM,ImageIcon:()=>vl,LassoIcon:()=>yl,LibraryIcon:()=>Mc,LineIcon:()=>ga,LinkIcon:()=>Il,LoadIcon:()=>ba,LockedIcon:()=>ha,LockedIconFilled:()=>Df,MagicIcon:()=>Ei,MagicIconThin:()=>VM,MoonIcon:()=>Tl,OpenAIIcon:()=>YM,PenModeIcon:()=>zf,PinIcon:()=>Pf,PlusIcon:()=>Lf,RectangleIcon:()=>Ac,RedoIcon:()=>pp,RetryIcon:()=>Zb,SelectionIcon:()=>Ff,SendBackwardIcon:()=>hp,SendToBackIcon:()=>fp,SloppinessArchitectIcon:()=>mb,SloppinessArtistIcon:()=>pb,SloppinessCartoonistIcon:()=>ub,StrokeStyleDashedIcon:()=>cb,StrokeStyleDottedIcon:()=>db,StrokeStyleSolidIcon:()=>HM,StrokeWidthBaseIcon:()=>Ip,StrokeWidthBoldIcon:()=>lb,StrokeWidthExtraBoldIcon:()=>sb,SunIcon:()=>Cl,TextAlignBottomIcon:()=>Hb,TextAlignCenterIcon:()=>Fb,TextAlignLeftIcon:()=>Ob,TextAlignMiddleIcon:()=>Ub,TextAlignRightIcon:()=>Bb,TextAlignTopIcon:()=>zb,TextIcon:()=>$r,TextSizeIcon:()=>Hf,TrashIcon:()=>Kt,UndoIcon:()=>mp,UngroupIcon:()=>Cp,UnlockedIcon:()=>gi,WelcomeScreenHelpArrow:()=>Nf,WelcomeScreenMenuArrow:()=>Rf,WelcomeScreenTopToolbarArrow:()=>Of,XBrandIcon:()=>Kf,ZoomInIcon:()=>sp,ZoomOutIcon:()=>cp,ZoomResetIcon:()=>Gf,abacusIcon:()=>i1,adjustmentsIcon:()=>x1,alertTriangleIcon:()=>Bc,angleIcon:()=>Fc,boltIcon:()=>kl,brainIcon:()=>Jb,brainIconThin:()=>Qb,bucketFillIcon:()=>ho,checkIcon:()=>Dc,chevronLeftIcon:()=>ZM,chevronRight:()=>w1,clipboard:()=>SM,clone:()=>FM,codeIcon:()=>Mp,coffeeIcon:()=>m1,collapseDownIcon:()=>Hc,collapseUpIcon:()=>f1,copyIcon:()=>xa,createIcon:()=>P,cropIcon:()=>_p,cutIcon:()=>Vb,done:()=>qf,downloadIcon:()=>Ap,drawShapeToolIcon:()=>xi,elbowArrowIcon:()=>Ln,elementLinkIcon:()=>Uc,emptyIcon:()=>Gc,eraser:()=>UM,exportToFileIcon:()=>jf,exportToPlus:()=>DM,eyeClosedIcon:()=>qb,eyeDropperIcon:()=>Xb,eyeIcon:()=>ya,file:()=>zM,flipHorizontal:()=>l1,flipVertical:()=>a1,fontSizeIcon:()=>bi,frameToolIcon:()=>Cr,fullscreenIcon:()=>jb,gridIcon:()=>h1,handIcon:()=>Wb,helpIcon:()=>Yb,historyCommandIcon:()=>e1,historyIcon:()=>t1,iconFillColor:()=>er,laserPointerToolIcon:()=>Ir,lineEditorIcon:()=>g1,loginIcon:()=>KM,magnetIcon:()=>d1,menu:()=>LM,mermaidLogoIcon:()=>Ea,messageCircleIcon:()=>$M,microphoneIcon:()=>o1,microphoneMutedIcon:()=>r1,paintIcon:()=>Lp,palette:()=>kM,pencilIcon:()=>y1,playerPlayIcon:()=>GM,playerStopFilledIcon:()=>WM,pngIcon:()=>c1,polygonIcon:()=>lp,presentationIcon:()=>jM,publishIcon:()=>Gb,questionCircle:()=>Jf,resetZoom:()=>NM,resizeIcon:()=>XM,roundArrowIcon:()=>_n,save:()=>Xf,saveAs:()=>Zf,searchIcon:()=>Io,selectAllIcon:()=>n1,settingsIcon:()=>T1,share:()=>Qf,shareIOS:()=>PM,shareWindows:()=>RM,sharpArrowIcon:()=>An,shield:()=>BM,sidebarRightIcon:()=>v1,slashIcon:()=>$f,stackPushIcon:()=>$b,start:()=>OM,stop:()=>ob,strokeIcon:()=>E1,strokeVariabilityConstantIcon:()=>Sp,strokeVariabilityVariableIcon:()=>kp,svgIcon:()=>s1,tablerCheckIcon:()=>Kb,upIcon:()=>b1,usersIcon:()=>Nc,warning:()=>_M,youtubeIcon:()=>u1,zoomAreaIcon:()=>zc,zoomIn:()=>MM,zoomOut:()=>AM});import TM from"clsx";import Lt from"react";import{Fragment as Ye,jsx as g,jsxs as B}from"react/jsx-runtime";var er=e=>"var(--icon-fill-color)",$w=e=>e===te.LIGHT?"#fff":"#1e1e1e",P=(e,o=512)=>{let{width:t=512,height:r=t,mirror:n,style:i,...a}=typeof o=="number"?{width:o}:o;return g("svg",{"aria-hidden":"true",focusable:"false",role:"img",viewBox:`0 0 ${t} ${r}`,className:TM({"rtl-mirror":n}),style:i,...a,children:typeof e=="string"?g("path",{fill:"currentColor",d:e}):e})},G={width:24,height:24,fill:"none",strokeWidth:2,stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},be={width:20,height:20,fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},uo={width:40,height:20},CM=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("polyline",{points:"5 12 3 12 12 3 21 12 19 12"}),g("path",{d:"M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7"}),g("path",{d:"M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6"})]}),G),Mc=P(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 19a9 9 0 0 1 9 0a9 9 0 0 1 9 0"}),g("path",{d:"M3 6a9 9 0 0 1 9 0a9 9 0 0 1 9 0"}),g("line",{x1:"3",y1:"6",x2:"3",y2:"19"}),g("line",{x1:"12",y1:"6",x2:"12",y2:"19"}),g("line",{x1:"21",y1:"6",x2:"21",y2:"19"})]}),G),Lf=P(B("svg",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),g("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),G),hi=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"12",cy:"12",r:"1"}),g("circle",{cx:"12",cy:"19",r:"1"}),g("circle",{cx:"12",cy:"5",r:"1"})]}),G),_f=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"}),g("path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"}),g("path",{d:"M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"})]}),G),Pf=P(B("svg",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M9 4v6l-2 4v2h10v-2l-2 -4v-6"}),g("line",{x1:"12",y1:"16",x2:"12",y2:"21"}),g("line",{x1:"8",y1:"4",x2:"16",y2:"4"})]}),G),lp=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 5m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M19 8m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M5 11m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M15 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M6.5 9.5l3.5 -3"}),g("path",{d:"M14 5.5l3 1.5"}),g("path",{d:"M18.5 10l-2.5 7"}),g("path",{d:"M13.5 17.5l-7 -5"})]}),G),gi=P(B("g",{children:[g("path",{d:"M13.542 8.542H6.458a2.5 2.5 0 0 0-2.5 2.5v3.75a2.5 2.5 0 0 0 2.5 2.5h7.084a2.5 2.5 0 0 0 2.5-2.5v-3.75a2.5 2.5 0 0 0-2.5-2.5Z",stroke:"currentColor",strokeWidth:"1.25"}),g("path",{d:"M10 13.958a1.042 1.042 0 1 0 0-2.083 1.042 1.042 0 0 0 0 2.083Z",stroke:"currentColor",strokeWidth:"1.25"}),g("mask",{id:"UnlockedIcon",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:6,y:1,width:9,height:9,children:g("path",{stroke:"none",d:"M6.399 9.561V5.175c0-.93.401-1.823 1.116-2.48a3.981 3.981 0 0 1 2.693-1.028c1.01 0 1.98.37 2.694 1.027.715.658 1.116 1.55 1.116 2.481",fill:"#fff"})}),g("g",{mask:"url(#UnlockedIcon)",children:g("path",{stroke:"none",d:"M5.149 9.561v1.25h2.5v-1.25h-2.5Zm5.06-7.894V.417v1.25Zm2.559 3.508v1.25h2.5v-1.25h-2.5ZM7.648 8.51V5.175h-2.5V8.51h2.5Zm0-3.334c0-.564.243-1.128.713-1.561L6.668 1.775c-.959.883-1.52 2.104-1.52 3.4h2.5Zm.713-1.561a2.732 2.732 0 0 1 1.847-.697v-2.5c-1.31 0-2.585.478-3.54 1.358L8.36 3.614Zm1.847-.697c.71 0 1.374.26 1.847.697l1.694-1.839a5.231 5.231 0 0 0-3.54-1.358v2.5Zm1.847.697c.47.433.713.997.713 1.561h2.5c0-1.296-.56-2.517-1.52-3.4l-1.693 1.839Z",fill:"currentColor"})})]}),be),ha=P(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M13.542 8.542H6.458a2.5 2.5 0 0 0-2.5 2.5v3.75a2.5 2.5 0 0 0 2.5 2.5h7.084a2.5 2.5 0 0 0 2.5-2.5v-3.75a2.5 2.5 0 0 0-2.5-2.5Z"}),g("path",{d:"M10 13.958a1.042 1.042 0 1 0 0-2.083 1.042 1.042 0 0 0 0 2.083Z"}),g("path",{d:"M6.667 8.333V5.417C6.667 3.806 8.159 2.5 10 2.5c1.841 0 3.333 1.306 3.333 2.917v2.916"})]}),be),Df=P(g("g",{fill:"currentColor",children:g("path",{d:"M12 2a5 5 0 0 1 5 5v3a3 3 0 0 1 3 3v6a3 3 0 0 1 -3 3h-10a3 3 0 0 1 -3 -3v-6a3 3 0 0 1 3 -3v-3a5 5 0 0 1 5 -5m0 12a2 2 0 0 0 -1.995 1.85l-.005 .15a2 2 0 1 0 2 -2m0 -10a3 3 0 0 0 -3 3v3h6v-3a3 3 0 0 0 -3 -3"})}),{width:24,height:24}),Rf=P(B(Ye,{children:[g("path",{d:"M38.5 83.5c-14-2-17.833-10.473-21-22.5C14.333 48.984 12 22 12 12.5",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"}),g("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m12.005 10.478 7.905 14.423L6 25.75l6.005-15.273Z",fill:"currentColor"}),g("path",{d:"M12.005 10.478c1.92 3.495 3.838 7 7.905 14.423m-7.905-14.423c3.11 5.683 6.23 11.368 7.905 14.423m0 0c-3.68.226-7.35.455-13.91.85m13.91-.85c-5.279.33-10.566.647-13.91.85m0 0c1.936-4.931 3.882-9.86 6.005-15.273M6 25.75c2.069-5.257 4.135-10.505 6.005-15.272",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"})]}),{width:41,height:94,fill:"none"}),Nf=P(B(Ye,{children:[g("path",{d:"M18.026 1.232c-5.268 13.125-5.548 33.555 3.285 42.311 8.823 8.75 33.31 12.304 42.422 13.523",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"}),g("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m72.181 59.247-13.058-10-2.948 13.62 16.006-3.62Z",fill:"currentColor"}),g("path",{d:"M72.181 59.247c-3.163-2.429-6.337-4.856-13.058-10m13.058 10c-5.145-3.936-10.292-7.882-13.058-10m0 0c-.78 3.603-1.563 7.196-2.948 13.62m2.948-13.62c-1.126 5.168-2.24 10.346-2.948 13.62m0 0c5.168-1.166 10.334-2.343 16.006-3.62m-16.006 3.62c5.51-1.248 11.01-2.495 16.006-3.62",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"})]}),{width:85,height:71,fill:"none"}),Of=P(B(Ye,{children:[g("path",{d:"M1 77c14-2 31.833-11.973 35-24 3.167-12.016-6-35-9.5-43.5",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"}),g("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m24.165 1.093-2.132 16.309 13.27-4.258-11.138-12.05Z",fill:"currentColor"}),g("path",{d:"M24.165 1.093c-.522 3.953-1.037 7.916-2.132 16.309m2.131-16.309c-.835 6.424-1.68 12.854-2.13 16.308m0 0c3.51-1.125 7.013-2.243 13.27-4.257m-13.27 4.257c5.038-1.608 10.08-3.232 13.27-4.257m0 0c-3.595-3.892-7.197-7.777-11.14-12.05m11.14 12.05c-3.837-4.148-7.667-8.287-11.14-12.05",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"})]}),{width:38,height:78,fill:"none"}),IM=P(g("g",{fill:"currentColor",children:g("path",{d:"M39.9 32.889a.326.326 0 0 0-.279-.056c-2.094-3.083-4.774-6-7.343-8.833l-.419-.472a.212.212 0 0 0-.056-.139.586.586 0 0 0-.167-.111l-.084-.083-.056-.056c-.084-.167-.28-.278-.475-.167-.782.39-1.507.973-2.206 1.528-.92.722-1.842 1.445-2.708 2.25a8.405 8.405 0 0 0-.977 1.028c-.14.194-.028.361.14.444-.615.611-1.23 1.223-1.843 1.861a.315.315 0 0 0-.084.223c0 .083.056.166.111.194l1.09.833v.028c1.535 1.528 4.244 3.611 7.12 5.861.418.334.865.667 1.284 1 .195.223.39.473.558.695.084.11.28.139.391.055.056.056.14.111.196.167a.398.398 0 0 0 .167.056.255.255 0 0 0 .224-.111.394.394 0 0 0 .055-.167c.029 0 .028.028.056.028a.318.318 0 0 0 .224-.084l5.082-5.528a.309.309 0 0 0 0-.444Zm-14.63-1.917a.485.485 0 0 0 .111.14c.586.5 1.2 1 1.843 1.555l-2.569-1.945-.251-.166c-.056-.028-.112-.084-.168-.111l-.195-.167.056-.056.055-.055.112-.111c.866-.861 2.346-2.306 3.1-3.028-.81.805-2.43 3.167-2.095 3.944Zm8.767 6.89-2.122-1.612a44.713 44.713 0 0 0-2.625-2.5c1.145.861 2.122 1.611 2.262 1.75 1.117.972 1.06.806 1.815 1.445l.921.666a1.06 1.06 0 0 1-.251.25Zm.558.416-.056-.028c.084-.055.168-.111.252-.194l-.196.222ZM1.089 5.75c.055.361.14.722.195 1.056.335 1.833.67 3.5 1.284 4.75l.252.944c.084.361.223.806.363.917 1.424 1.25 3.602 3.11 5.947 4.889a.295.295 0 0 0 .363 0s0 .027.028.027a.254.254 0 0 0 .196.084.318.318 0 0 0 .223-.084c2.988-3.305 5.221-6.027 6.813-8.305.112-.111.14-.278.14-.417.111-.111.195-.25.307-.333.111-.111.111-.306 0-.39l-.028-.027c0-.055-.028-.139-.084-.167-.698-.666-1.2-1.138-1.731-1.638-.922-.862-1.871-1.75-3.881-3.75l-.028-.028c-.028-.028-.056-.056-.112-.056-.558-.194-1.703-.389-3.127-.639C6.087 2.223 3.21 1.723.614.944c0 0-.168 0-.196.028l-.083.084c-.028.027-.056.055-.224.11h.056-.056c.028.167.028.278.084.473 0 .055.112.5.112.555l.782 3.556Zm15.496 3.278-.335-.334c.084.112.196.195.335.334Zm-3.546 4.666-.056.056c0-.028.028-.056.056-.056Zm-2.038-10c.168.167.866.834 1.033.973-.726-.334-2.54-1.167-3.379-1.445.838.167 1.983.334 2.346.472ZM1.424 2.306c.419.722.754 3.222 1.089 5.666-.196-.778-.335-1.555-.503-2.278-.251-1.277-.503-2.416-.838-3.416.056 0 .14 0 .252.028Zm-.168-.584c-.112 0-.223-.028-.307-.028 0-.027 0-.055-.028-.055.14 0 .223.028.335.083Zm-1.089.222c0-.027 0-.027 0 0ZM39.453 1.333c.028-.11-.558-.61-.363-.639.42-.027.42-.666 0-.666-.558.028-1.144.166-1.675.25-.977.194-1.982.389-2.96.61-2.205.473-4.383.973-6.561 1.557-.67.194-1.424.333-2.066.666-.224.111-.196.333-.084.472-.056.028-.084.028-.14.056-.195.028-.363.056-.558.083-.168.028-.252.167-.224.334 0 .027.028.083.028.11-1.173 1.556-2.485 3.195-3.909 4.945-1.396 1.611-2.876 3.306-4.356 5.056-4.719 5.5-10.052 11.75-15.943 17.25a.268.268 0 0 0 0 .389c.028.027.056.055.084.055-.084.084-.168.14-.252.222-.056.056-.084.111-.084.167a.605.605 0 0 0-.111.139c-.112.111-.112.305.028.389.111.11.307.11.39-.028.029-.028.029-.056.056-.056a.44.44 0 0 1 .615 0c.335.362.67.723.977 1.028l-.698-.583c-.112-.111-.307-.083-.39.028-.113.11-.085.305.027.389l7.427 6.194c.056.056.112.056.196.056s.14-.028.195-.084l.168-.166c.028.027.083.027.111.027.084 0 .14-.027.196-.083 10.052-10.055 18.15-17.639 27.42-24.417.083-.055.111-.166.111-.25.112 0 .196-.083.251-.194 1.704-5.194 2.039-9.806 2.15-12.083v-.028c0-.028.028-.056.028-.083.028-.056.028-.084.028-.084a1.626 1.626 0 0 0-.111-1.028ZM21.472 9.5c.446-.5.893-1.028 1.34-1.5-2.876 3.778-7.65 9.583-14.408 16.5 4.607-5.083 9.242-10.333 13.068-15ZM5.193 35.778h.084-.084Zm3.462 3.194c-.027-.028-.027-.028 0-.028v.028Zm4.16-3.583c.224-.25.448-.472.699-.722 0 0 0 .027.028.027-.252.223-.475.445-.726.695Zm1.146-1.111c.14-.14.279-.334.446-.5l.028-.028c1.648-1.694 3.351-3.389 5.082-5.111l.028-.028c.419-.333.921-.694 1.368-1.028a379.003 379.003 0 0 0-6.952 6.695ZM24.794 6.472c-.921 1.195-1.954 2.778-2.82 4.028-2.736 3.944-11.532 13.583-11.727 13.75a1976.983 1976.983 0 0 1-8.042 7.639l-.167.167c-.14-.167-.14-.417.028-.556C14.49 19.861 22.03 10.167 25.074 5.917c-.084.194-.14.36-.28.555Zm4.83 5.695c-1.116-.64-1.646-1.64-1.34-2.611l.084-.334c.028-.083.084-.194.14-.277.307-.5.754-.917 1.257-1.167.027 0 .055 0 .083-.028-.028-.056-.028-.139-.028-.222.028-.167.14-.278.335-.278.335 0 1.369.306 1.76.639.111.083.223.194.335.305.14.167.363.445.474.667.056.028.112.306.196.445.056.222.111.472.084.694-.028.028 0 .194-.028.194a2.668 2.668 0 0 1-.363 1.028c-.028.028-.028.056-.056.084l-.028.027c-.14.223-.335.417-.53.556-.643.444-1.369.583-2.095.389 0 0-.195-.084-.28-.111Zm8.154-.834a39.098 39.098 0 0 1-.893 3.167c0 .028-.028.083 0 .111-.056 0-.084.028-.14.056-2.206 1.61-4.356 3.305-6.506 5.028 1.843-1.64 3.686-3.306 5.613-4.945.558-.5.949-1.139 1.06-1.861l.28-1.667v-.055c.14-.334.67-.195.586.166Z",fill:"currentColor"})}),{width:40,height:40,fill:"none"}),Ff=P(B("g",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 6l4.153 11.793a0.365 .365 0 0 0 .331 .207a0.366 .366 0 0 0 .332 -.207l2.184 -4.793l4.787 -1.994a0.355 .355 0 0 0 .213 -.323a0.355 .355 0 0 0 -.213 -.323l-11.787 -4.36z"}),g("path",{d:"M13.5 13.5l4.5 4.5"})]}),{fill:"none",width:22,height:22,strokeWidth:1.25}),yl=P(B("g",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,children:[g("path",{d:"M4.028 13.252c-.657 -.972 -1.028 -2.078 -1.028 -3.252c0 -3.866 4.03 -7 9 -7s9 3.134 9 7s-4.03 7 -9 7c-1.913 0 -3.686 -.464 -5.144 -1.255"}),g("path",{d:"M5 15m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M5 17c0 1.42 .316 2.805 1 4"})]}),{fill:"none",width:22,height:22,strokeWidth:1.25}),Ac=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("rect",{x:"4",y:"4",width:"16",height:"16",rx:"2"})]}),G),Lc=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10.5 20.4l-6.9 -6.9c-.781 -.781 -.781 -2.219 0 -3l6.9 -6.9c.781 -.781 2.219 -.781 3 0l6.9 6.9c.781 .781 .781 2.219 0 3l-6.9 6.9c-.781 .781 -2.219 .781 -3 0z"})]}),G),_c=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"12",cy:"12",r:"9"})]}),G),Bf=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),g("line",{x1:"15",y1:"16",x2:"19",y2:"12"}),g("line",{x1:"15",y1:"8",x2:"19",y2:"12"})]}),G),ga=P(g("path",{d:"M4.167 10h11.666",strokeWidth:"1.5"}),be),zf=P(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M20 17v-12c0 -1.121 -.879 -2 -2 -2s-2 .879 -2 2v12l2 2l2 -2z"}),g("path",{d:"M16 7h4"}),g("path",{d:"M18 19h-13a2 2 0 1 1 0 -4h4a2 2 0 1 0 0 -4h-3"})]}),G),Sn=P(B("g",{strokeWidth:"1.25",children:[g("path",{clipRule:"evenodd",d:"m7.643 15.69 7.774-7.773a2.357 2.357 0 1 0-3.334-3.334L4.31 12.357a3.333 3.333 0 0 0-.977 2.357v1.953h1.953c.884 0 1.732-.352 2.357-.977Z"}),g("path",{d:"m11.25 5.417 3.333 3.333"})]}),be),$r=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"20",x2:"7",y2:"20"}),g("line",{x1:"14",y1:"20",x2:"21",y2:"20"}),g("line",{x1:"6.9",y1:"15",x2:"13.8",y2:"15"}),g("line",{x1:"10.2",y1:"6.3",x2:"16",y2:"20"}),g("polyline",{points:"5 20 11 4 13 4 20 20"})]}),G),Hf=P(B("g",{stroke:"currentColor",strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 7v-2h13v2"}),g("path",{d:"M10 5v14"}),g("path",{d:"M12 19h-4"}),g("path",{d:"M15 13v-1h6v1"}),g("path",{d:"M18 12v7"}),g("path",{d:"M17 19h2"})]}),G),vl=P(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M12.5 6.667h.01"}),g("path",{d:"M4.91 2.625h10.18a2.284 2.284 0 0 1 2.285 2.284v10.182a2.284 2.284 0 0 1-2.284 2.284H4.909a2.284 2.284 0 0 1-2.284-2.284V4.909a2.284 2.284 0 0 1 2.284-2.284Z"}),g("path",{d:"m3.333 12.5 3.334-3.333c.773-.745 1.726-.745 2.5 0l4.166 4.166"}),g("path",{d:"m11.667 11.667.833-.834c.774-.744 1.726-.744 2.5 0l1.667 1.667"})]}),be),Uf=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M19 20h-10.5l-4.21 -4.3a1 1 0 0 1 0 -1.41l10 -10a1 1 0 0 1 1.41 0l5 5a1 1 0 0 1 0 1.41l-9.2 9.3"}),g("path",{d:"M18 13.3l-6.3 -6.3"})]}),G),sp=P(g("path",{strokeWidth:"1.25",d:"M10 4.167v11.666M4.167 10h11.666"}),be),cp=P(g("path",{d:"M5 10h10",strokeWidth:"1.25"}),be),Gf=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M21 21l-6 -6"}),g("path",{d:"M3.268 12.043a7.017 7.017 0 0 0 6.634 4.957a7.012 7.012 0 0 0 7.043 -6.131a7 7 0 0 0 -5.314 -7.672a7.021 7.021 0 0 0 -8.241 4.403"}),g("path",{d:"M3 4v4h4"})]}),G),Kt=P(g("path",{strokeWidth:"1.25",d:"M3.333 5.833h13.334M8.333 9.167v5M11.667 9.167v5M4.167 5.833l.833 10c0 .92.746 1.667 1.667 1.667h6.666c.92 0 1.667-.746 1.667-1.667l.833-10M7.5 5.833v-2.5c0-.46.373-.833.833-.833h3.334c.46 0 .833.373.833.833v2.5"}),be),kn=P(B("g",{strokeWidth:"1.5",children:[g("polyline",{points:"12 16 18 10 12 4"}),g("polyline",{points:"8 4 2 10 8 16"})]}),be),wl=P(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M14.375 6.458H8.958a2.5 2.5 0 0 0-2.5 2.5v5.417a2.5 2.5 0 0 0 2.5 2.5h5.417a2.5 2.5 0 0 0 2.5-2.5V8.958a2.5 2.5 0 0 0-2.5-2.5Z"}),g("path",{clipRule:"evenodd",d:"M11.667 3.125c.517 0 .986.21 1.325.55.34.338.55.807.55 1.325v1.458H8.333c-.485 0-.927.185-1.26.487-.343.312-.57.75-.609 1.24l-.005 5.357H5a1.87 1.87 0 0 1-1.326-.55 1.87 1.87 0 0 1-.549-1.325V5c0-.518.21-.987.55-1.326.338-.34.807-.549 1.325-.549h6.667Z"})]}),be),Tl=P(g("path",{clipRule:"evenodd",d:"M10 2.5h.328a6.25 6.25 0 0 0 6.6 10.372A7.5 7.5 0 1 1 10 2.493V2.5Z",stroke:"currentColor"}),be),Cl=P(g("g",{stroke:"currentColor",strokeLinejoin:"round",children:g("path",{d:"M10 12.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM10 4.167V2.5M14.167 5.833l1.166-1.166M15.833 10H17.5M14.167 14.167l1.166 1.166M10 15.833V17.5M5.833 14.167l-1.166 1.166M5 10H3.333M5.833 5.833 4.667 4.667"})}),{...be,strokeWidth:1.5}),Wf=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"6",x2:"20",y2:"6"}),g("line",{x1:"4",y1:"12",x2:"20",y2:"12"}),g("line",{x1:"4",y1:"18",x2:"20",y2:"18"})]}),G),fi=P(g("path",{strokeWidth:"1.25",d:"M3.333 14.167v1.666c0 .92.747 1.667 1.667 1.667h10c.92 0 1.667-.746 1.667-1.667v-1.666M5.833 9.167 10 13.333l4.167-4.166M10 3.333v10"}),be),fa=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"12",cy:"12",r:"9"}),g("line",{x1:"12",y1:"17",x2:"12",y2:"17.01"}),g("path",{d:"M12 13.5a1.5 1.5 0 0 1 1 -1.5a2.6 2.6 0 1 0 -3 -4"})]}),G),Vf=P(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"12",cy:"12",r:"9"}),g("line",{x1:"12",y1:"17",x2:"12",y2:"17.01"}),g("path",{d:"M12 13.5a1.5 1.5 0 0 1 1 -1.5a2.6 2.6 0 1 0 -3 -4"})]}),G),dp=P(g("path",{strokeWidth:"1.25",d:"M9.167 5.833H5.833c-1.254 0-2.5 1.282-2.5 2.5v5.834c0 1.283 1.252 2.5 2.5 2.5h5.834c1.251 0 2.5-1.25 2.5-2.5v-3.334M8.333 11.667l8.334-8.334M12.5 3.333h4.167V7.5"}),be),Pc=P(g("path",{d:"M7.5 15.833c-3.583 1.167-3.583-2.083-5-2.5m10 4.167v-2.917c0-.833.083-1.166-.417-1.666 2.334-.25 4.584-1.167 4.584-5a3.833 3.833 0 0 0-1.084-2.667 3.5 3.5 0 0 0-.083-2.667s-.917-.25-2.917 1.084a10.25 10.25 0 0 0-5.166 0C5.417 2.333 4.5 2.583 4.5 2.583a3.5 3.5 0 0 0-.083 2.667 3.833 3.833 0 0 0-1.084 2.667c0 3.833 2.25 4.75 4.584 5-.5.5-.5 1-.417 1.666V17.5",strokeWidth:"1.25"}),be),Yf=P(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M7.5 10.833a.833.833 0 1 0 0-1.666.833.833 0 0 0 0 1.666ZM12.5 10.833a.833.833 0 1 0 0-1.666.833.833 0 0 0 0 1.666ZM6.25 6.25c2.917-.833 4.583-.833 7.5 0M5.833 13.75c2.917.833 5.417.833 8.334 0"}),g("path",{d:"M12.917 14.167c0 .833 1.25 2.5 1.666 2.5 1.25 0 2.361-1.39 2.917-2.5.556-1.39.417-4.861-1.25-9.584-1.214-.846-2.5-1.116-3.75-1.25l-.833 2.084M7.083 14.167c0 .833-1.13 2.5-1.526 2.5-1.191 0-2.249-1.39-2.778-2.5-.529-1.39-.397-4.861 1.19-9.584 1.157-.846 2.318-1.116 3.531-1.25l.833 2.084"})]}),be),Kf=P(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 4l11.733 16h4.267l-11.733 -16z"}),g("path",{d:"M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"})]}),G),Dc=P(g("polyline",{fill:"none",stroke:"currentColor",points:"20 6 9 17 4 12"}),{width:24,height:24}),Il=P(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M8.333 11.667a2.917 2.917 0 0 0 4.167 0l3.333-3.334a2.946 2.946 0 1 0-4.166-4.166l-.417.416"}),g("path",{d:"M11.667 8.333a2.917 2.917 0 0 0-4.167 0l-3.333 3.334a2.946 2.946 0 0 0 4.166 4.166l.417-.416"})]}),be),Xf=P("M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z",{width:448,height:512}),Zf=P("M252 54L203 8a28 27 0 00-20-8H28C12 0 0 12 0 27v195c0 15 12 26 28 26h204c15 0 28-11 28-26V73a28 27 0 00-8-19zM130 213c-21 0-37-16-37-36 0-19 16-35 37-35 20 0 37 16 37 35 0 20-17 36-37 36zm56-169v56c0 4-4 6-7 6H44c-4 0-7-2-7-6V42c0-4 3-7 7-7h133l4 2 3 2a7 7 0 012 5z M296 201l87 95-188 205-78 9c-10 1-19-8-18-20l9-84zm141-14l-41-44a31 31 0 00-46 0l-38 41 87 95 38-42c13-14 13-36 0-50z",{width:448,height:512}),ba=P(g("path",{d:"m9.257 6.351.183.183H15.819c.34 0 .727.182 1.051.506.323.323.505.708.505 1.05v5.819c0 .316-.183.7-.52 1.035-.337.338-.723.522-1.037.522H4.182c-.352 0-.74-.181-1.058-.5-.318-.318-.499-.705-.499-1.057V5.182c0-.351.181-.736.5-1.054.32-.321.71-.503 1.057-.503H6.53l2.726 2.726Z",strokeWidth:"1.25"}),be),SM=P("M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z",{width:384,height:512}),kM=P("M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"),ho=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 16l1.465 1.638a2 2 0 1 1 -3.015 .099l1.55 -1.737z"}),g("path",{d:"M13.737 9.737c2.299 -2.3 3.23 -5.095 2.081 -6.245c-1.15 -1.15 -3.945 -.217 -6.244 2.082c-2.3 2.299 -3.231 5.095 -2.082 6.244c1.15 1.15 3.946 .218 6.245 -2.081z"}),g("path",{d:"M7.492 11.818c.362 .362 .768 .676 1.208 .934l6.895 4.047c1.078 .557 2.255 -.075 3.692 -1.512c1.437 -1.437 2.07 -2.614 1.512 -3.692c-.372 -.718 -1.72 -3.017 -4.047 -6.895a6.015 6.015 0 0 0 -.934 -1.208"})]}),G),$f=P(g("g",{strokeWidth:1.5,children:g("path",{d:"M6 18l12 -12"})}),G),Rc=P(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15 8h.01"}),g("path",{d:"M12 20h-5a3 3 0 0 1 -3 -3v-10a3 3 0 0 1 3 -3h10a3 3 0 0 1 3 3v5"}),g("path",{d:"M4 15l4 -4c.928 -.893 2.072 -.893 3 0l4 4"}),g("path",{d:"M14 14l1 -1c.617 -.593 1.328 -.793 2.009 -.598"}),g("path",{d:"M19 16v6"}),g("path",{d:"M22 19l-3 3l-3 -3"})]}),G),jf=P("M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z",{width:512,height:512}),MM=P("M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z",{width:448,height:512}),AM=P("M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z",{width:448,height:512}),qf=P("M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"),LM=P("M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"),mp=P(g("path",{d:"M7.5 10.833 4.167 7.5 7.5 4.167M4.167 7.5h9.166a3.333 3.333 0 0 1 0 6.667H12.5",strokeWidth:"1.25"}),be),pp=P(g("path",{d:"M12.5 10.833 15.833 7.5 12.5 4.167M15.833 7.5H6.667a3.333 3.333 0 1 0 0 6.667H7.5",strokeWidth:"1.25"}),be),Jf=P("M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z",{mirror:!0}),Qf=P(g("path",{d:"M5 12.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM15 7.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM15 17.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM7.25 8.917l5.5-2.834M7.25 11.083l5.5 2.834",strokeWidth:"1.5"}),be),_M=P("M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"),PM=P("M16 5l-1.42 1.42-1.59-1.59V16h-1.98V4.83L9.42 6.42 8 5l4-4 4 4zm4 5v11c0 1.1-.9 2-2 2H6c-1.11 0-2-.9-2-2V10c0-1.11.89-2 2-2h3v2H6v11h12V10h-3V8h3c1.1 0 2 .89 2 2z",{width:24,height:24}),DM=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 9h-1a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-8a2 2 0 0 0 -2 -2h-1"}),g("path",{d:"M12 14v-11"}),g("path",{d:"M9 6l3 -3l3 3"})]}),G),RM=P(B(Ye,{children:[g("path",{fill:"currentColor",d:"M40 5.6v6.1l-4.1.7c-8.9 1.4-16.5 6.9-20.6 15C13 32 10.9 43 12.4 43c.4 0 2.4-1.3 4.4-3 5-3.9 12.1-7 18.2-7.7l5-.6v12.8l11.2-11.3L62.5 22 51.2 10.8 40-.5v6.1zm10.2 22.6L44 34.5v-6.8l-6.9.6c-3.9.3-9.8 1.7-13.2 3.1-3.5 1.4-6.5 2.4-6.7 2.2-.9-1 3-7.5 6.4-10.8C28 18.6 34.4 16 40.1 16c3.7 0 3.9-.1 3.9-3.2V9.5l6.2 6.3 6.3 6.2-6.3 6.2z"}),g("path",{stroke:"currentColor",fill:"currentColor",d:"M0 36v20h48v-6.2c0-6 0-6.1-2-4.3-1.1 1-2 2.9-2 4.2V52H4V34c0-17.3-.1-18-2-18s-2 .7-2 20z"})]}),{width:64,height:64}),NM=P(g("path",{stroke:"currentColor",strokeWidth:"40",fill:"currentColor",d:"M148 560a318 318 0 0 0 522 110 316 316 0 0 0 0-450 316 316 0 0 0-450 0c-11 11-21 22-30 34v4h47c25 0 46 21 46 46s-21 45-46 45H90c-13 0-25-6-33-14-9-9-14-20-14-33V156c0-25 20-45 45-45s45 20 45 45v32l1 1a401 401 0 0 1 623 509l212 212a42 42 0 0 1-59 59L698 757A401 401 0 0 1 65 570a42 42 0 0 1 83-10z"}),{width:1024}),jw=B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 10l0 10"}),g("path",{d:"M12 10l4 4"}),g("path",{d:"M12 10l-4 4"}),g("path",{d:"M4 4l16 0"})]}),qw=B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 5l0 14"}),g("path",{d:"M16 9l-4 -4"}),g("path",{d:"M8 9l4 -4"})]}),up=P(qw,G),hp=P(qw,{...G,style:{transform:"rotate(180deg)"}}),gp=P(jw,G),fp=P(jw,{...G,style:{transform:"rotate(180deg)"}}),bp=P(B(Ye,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M3.333 3.333h13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M13.542 6.458h-.417c-.92 0-1.667.747-1.667 1.667v7.083c0 .92.746 1.667 1.667 1.667h.417c.92 0 1.666-.746 1.666-1.667V8.125c0-.92-.746-1.667-1.666-1.667ZM6.875 6.458h-.417c-.92 0-1.666.747-1.666 1.667v3.75c0 .92.746 1.667 1.666 1.667h.417c.92 0 1.667-.746 1.667-1.667v-3.75c0-.92-.747-1.667-1.667-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),xp=P(B(Ye,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M3.333 16.667h13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M6.875 3.125h-.417c-.92 0-1.666.746-1.666 1.667v7.083c0 .92.746 1.667 1.666 1.667h.417c.92 0 1.667-.746 1.667-1.667V4.792c0-.92-.747-1.667-1.667-1.667ZM13.542 5.817h-.417c-.92 0-1.667.747-1.667 1.667v4.391c0 .92.746 1.667 1.667 1.667h.417c.92 0 1.666-.746 1.666-1.667V7.484c0-.92-.746-1.667-1.666-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),Ep=P(B(Ye,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M3.333 3.333v13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M15.208 4.792H8.125c-.92 0-1.667.746-1.667 1.666v.417c0 .92.747 1.667 1.667 1.667h7.083c.92 0 1.667-.747 1.667-1.667v-.417c0-.92-.746-1.666-1.667-1.666ZM12.516 11.458H8.125c-.92 0-1.667.746-1.667 1.667v.417c0 .92.747 1.666 1.667 1.666h4.391c.92 0 1.667-.746 1.667-1.666v-.417c0-.92-.746-1.667-1.667-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),yp=P(B(Ye,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M16.667 3.333v13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M11.875 4.792H4.792c-.92 0-1.667.746-1.667 1.666v.417c0 .92.746 1.667 1.667 1.667h7.083c.92 0 1.667-.747 1.667-1.667v-.417c0-.92-.746-1.666-1.667-1.666ZM11.683 11.458H7.292c-.92 0-1.667.746-1.667 1.667v.417c0 .92.746 1.666 1.667 1.666h4.39c.921 0 1.667-.746 1.667-1.666v-.417c0-.92-.746-1.667-1.666-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),eb=P(B(Ye,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M16.667 3.333v13.334M3.333 3.333v13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M14.375 10.208v-.416c0-.92-.746-1.667-1.667-1.667H7.292c-.92 0-1.667.746-1.667 1.667v.416c0 .92.746 1.667 1.667 1.667h5.416c.92 0 1.667-.746 1.667-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),tb=P(B(Ye,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M3.333 3.333h13.334M3.333 16.667h13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M10.208 5.625h-.416c-.92 0-1.667.746-1.667 1.667v5.416c0 .92.746 1.667 1.667 1.667h.416c.92 0 1.667-.746 1.667-1.667V7.292c0-.92-.746-1.667-1.667-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),vp=P(B("g",{stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M1.667 10h2.916",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M8.333 10h3.334",strokeLinejoin:"round"}),g("path",{d:"M15.417 10h2.916",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M6.875 4.792h-.417c-.92 0-1.666.746-1.666 1.666v7.084c0 .92.746 1.666 1.666 1.666h.417c.92 0 1.667-.746 1.667-1.666V6.458c0-.92-.747-1.666-1.667-1.666ZM13.542 6.458h-.417c-.92 0-1.667.747-1.667 1.667v3.75c0 .92.746 1.667 1.667 1.667h.417c.92 0 1.666-.746 1.666-1.667v-3.75c0-.92-.746-1.667-1.666-1.667Z"})]}),be),wp=P(B("g",{stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M10 18.333v-2.916",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M10 11.667V8.333",strokeLinejoin:"round"}),g("path",{d:"M10 4.583V1.667",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M4.792 13.125v.417c0 .92.746 1.666 1.666 1.666h7.084c.92 0 1.666-.746 1.666-1.666v-.417c0-.92-.746-1.667-1.666-1.667H6.458c-.92 0-1.666.746-1.666 1.667ZM6.458 6.458v.417c0 .92.747 1.667 1.667 1.667h3.75c.92 0 1.667-.747 1.667-1.667v-.417c0-.92-.746-1.666-1.667-1.666h-3.75c-.92 0-1.667.746-1.667 1.666Z"})]}),be),Nc=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"9",cy:"7",r:"4"}),g("path",{d:"M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"}),g("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"}),g("path",{d:"M21 21v-2a4 4 0 0 0 -3 -3.85"})]}),G),OM=P("M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z"),ob=P("M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z"),No=P(B(Ye,{children:[g("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round",children:g("path",{d:"M15 5 5 15M5 5l10 10"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),FM=P("M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z",{mirror:!0}),BM=P("M11.553 22.894a.998.998 0 00.894 0s3.037-1.516 5.465-4.097C19.616 16.987 21 14.663 21 12V5a1 1 0 00-.649-.936l-8-3a.998.998 0 00-.702 0l-8 3A1 1 0 003 5v7c0 2.663 1.384 4.987 3.088 6.797 2.428 2.581 5.465 4.097 5.465 4.097zm-1.303-8.481l6.644-6.644a.856.856 0 111.212 1.212l-7.25 7.25a.856.856 0 01-1.212 0l-3.75-3.75a.856.856 0 111.212-1.212l3.144 3.144z",{width:24}),zM=P("M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z",{width:384,height:512}),Tp=Lt.memo(({theme:e})=>P(B(Ye,{children:[g("path",{d:"M25 26H111V111H25",fill:er(e)}),g("path",{d:"M25 111C25 80.2068 25 49.4135 25 26M25 26C48.6174 26 72.2348 26 111 26H25ZM25 26C53.3671 26 81.7343 26 111 26H25ZM111 26C111 52.303 111 78.606 111 111V26ZM111 26C111 51.2947 111 76.5893 111 111V26ZM111 111C87.0792 111 63.1585 111 25 111H111ZM111 111C87.4646 111 63.9293 111 25 111H111ZM25 111C25 81.1514 25 51.3028 25 26V111Z",stroke:er(e),strokeWidth:"2"}),g("path",{d:"M100 100H160V160H100",fill:er(e)}),g("path",{d:"M100 160C100 144.106 100 128.211 100 100M100 100C117.706 100 135.412 100 160 100H100ZM100 100C114.214 100 128.428 100 160 100H100ZM160 100C160 120.184 160 140.369 160 160V100ZM160 100C160 113.219 160 126.437 160 160V100ZM160 160C145.534 160 131.068 160 100 160H160ZM160 160C143.467 160 126.934 160 100 160H160ZM100 160C100 143.661 100 127.321 100 100V160Z",stroke:er(e),strokeWidth:"2"}),B("g",{fill:$w(e),stroke:er(e),strokeWidth:"6",children:[g("rect",{x:"2.5",y:"2.5",width:"30",height:"30"}),g("rect",{x:"2.5",y:"149.5",width:"30",height:"30"}),g("rect",{x:"147.5",y:"149.5",width:"30",height:"30"}),g("rect",{x:"147.5",y:"2.5",width:"30",height:"30"})]})]}),{width:182,height:182,mirror:!0})),Cp=Lt.memo(({theme:e})=>P(B(Ye,{children:[g("path",{d:"M25 26H111V111H25",fill:er(e)}),g("path",{d:"M25 111C25 80.2068 25 49.4135 25 26M25 26C48.6174 26 72.2348 26 111 26H25ZM25 26C53.3671 26 81.7343 26 111 26H25ZM111 26C111 52.303 111 78.606 111 111V26ZM111 26C111 51.2947 111 76.5893 111 111V26ZM111 111C87.0792 111 63.1585 111 25 111H111ZM111 111C87.4646 111 63.9293 111 25 111H111ZM25 111C25 81.1514 25 51.3028 25 26V111Z",stroke:er(e),strokeWidth:"2"}),g("path",{d:"M100 100H160V160H100",fill:er(e)}),g("path",{d:"M100 160C100 144.106 100 128.211 100 100M100 100C117.706 100 135.412 100 160 100H100ZM100 100C114.214 100 128.428 100 160 100H100ZM160 100C160 120.184 160 140.369 160 160V100ZM160 100C160 113.219 160 126.437 160 160V100ZM160 160C145.534 160 131.068 160 100 160H160ZM160 160C143.467 160 126.934 160 100 160H160ZM100 160C100 143.661 100 127.321 100 100V160Z",stroke:er(e),strokeWidth:"2"}),B("g",{fill:$w(e),stroke:er(e),strokeWidth:"6",children:[g("rect",{x:"2.5",y:"2.5",width:"30",height:"30"}),g("rect",{x:"78.5",y:"149.5",width:"30",height:"30"}),g("rect",{x:"147.5",y:"149.5",width:"30",height:"30"}),g("rect",{x:"147.5",y:"78.5",width:"30",height:"30"}),g("rect",{x:"105.5",y:"2.5",width:"30",height:"30"}),g("rect",{x:"2.5",y:"102.5",width:"30",height:"30"})]})]}),{width:182,height:182,mirror:!0})),rb=P(g("g",{strokeWidth:1.25,children:g("path",{d:"M5.879 2.625h8.242a3.27 3.27 0 0 1 3.254 3.254v8.242a3.27 3.27 0 0 1-3.254 3.254H5.88a3.27 3.27 0 0 1-3.254-3.254V5.88A3.27 3.27 0 0 1 5.88 2.626l-.001-.001ZM4.518 16.118l7.608-12.83m.198 13.934 5.051-9.897M2.778 9.675l9.348-6.387m-7.608 12.83 12.857-8.793"})}),be),nb=P(B(Ye,{children:[g("path",{d:"M5.879 2.625h8.242a3.254 3.254 0 0 1 3.254 3.254v8.242a3.254 3.254 0 0 1-3.254 3.254H5.88a3.254 3.254 0 0 1-3.254-3.254V5.88a3.254 3.254 0 0 1 3.254-3.254Z",stroke:"currentColor",strokeWidth:"1.25"}),g("mask",{id:"FillHachureIcon",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:2,y:2,width:16,height:16,children:g("path",{d:"M5.879 2.625h8.242a3.254 3.254 0 0 1 3.254 3.254v8.242a3.254 3.254 0 0 1-3.254 3.254H5.88a3.254 3.254 0 0 1-3.254-3.254V5.88a3.254 3.254 0 0 1 3.254-3.254Z",fill:"currentColor",stroke:"currentColor",strokeWidth:"1.25"})}),g("g",{mask:"url(#FillHachureIcon)",children:g("path",{d:"M2.258 15.156 15.156 2.258M7.324 20.222 20.222 7.325m-20.444 5.35L12.675-.222m-8.157 18.34L17.416 5.22",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})})]}),be),ib=P(B(Ye,{children:[B("g",{clipPath:"url(#a)",children:[g("path",{d:"M5.879 2.625h8.242a3.254 3.254 0 0 1 3.254 3.254v8.242a3.254 3.254 0 0 1-3.254 3.254H5.88a3.254 3.254 0 0 1-3.254-3.254V5.88a3.254 3.254 0 0 1 3.254-3.254Z",stroke:"currentColor",strokeWidth:"1.25"}),g("mask",{id:"FillCrossHatchIcon",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:-1,y:-1,width:22,height:22,children:g("path",{d:"M2.426 15.044 15.044 2.426M7.383 20 20 7.383M0 12.617 12.617 0m-7.98 17.941L17.256 5.324m-2.211 12.25L2.426 4.956M20 12.617 7.383 0m5.234 20L0 7.383m17.941 7.98L5.324 2.745",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),g("g",{mask:"url(#FillCrossHatchIcon)",children:g("path",{d:"M14.121 2H5.88A3.879 3.879 0 0 0 2 5.879v8.242A3.879 3.879 0 0 0 5.879 18h8.242A3.879 3.879 0 0 0 18 14.121V5.88A3.879 3.879 0 0 0 14.121 2Z",fill:"currentColor"})})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),ab=P(B(Ye,{children:[g("g",{clipPath:"url(#a)",children:g("path",{d:"M4.91 2.625h10.18a2.284 2.284 0 0 1 2.285 2.284v10.182a2.284 2.284 0 0 1-2.284 2.284H4.909a2.284 2.284 0 0 1-2.284-2.284V4.909a2.284 2.284 0 0 1 2.284-2.284Z",stroke:"currentColor",strokeWidth:"1.25"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),{...be,fill:"currentColor"}),Ip=P(g(Ye,{children:g("path",{d:"M4.167 10h11.666",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),be),lb=P(g("path",{d:"M5 10h10",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}),be),sb=P(g("path",{d:"M5 10h10",stroke:"currentColor",strokeWidth:"3.75",strokeLinecap:"round",strokeLinejoin:"round"}),be),HM=Lt.memo(({theme:e})=>P(g("path",{d:"M6 10H34",stroke:er(e),strokeWidth:2,fill:"none",strokeLinecap:"round"}),{width:40,height:20})),cb=P(B("g",{strokeWidth:"2",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 12h2"}),g("path",{d:"M17 12h2"}),g("path",{d:"M11 12h2"})]}),G),db=P(B("g",{strokeWidth:"2",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 12v.01"}),g("path",{d:"M8 12v.01"}),g("path",{d:"M12 12v.01"}),g("path",{d:"M16 12v.01"}),g("path",{d:"M20 12v.01"})]}),G),mb=P(g("path",{d:"M2.5 12.038c1.655-.885 5.9-3.292 8.568-4.354 2.668-1.063.101 2.821 1.32 3.104 1.218.283 5.112-1.814 5.112-1.814",strokeWidth:"1.25"}),be),pb=P(g("path",{d:"M2.5 12.563c1.655-.886 5.9-3.293 8.568-4.355 2.668-1.062.101 2.822 1.32 3.105 1.218.283 5.112-1.814 5.112-1.814m-13.469 2.23c2.963-1.586 6.13-5.62 7.468-4.998 1.338.623-1.153 4.11-.132 5.595 1.02 1.487 6.133-1.43 6.133-1.43",strokeWidth:"1.25"}),be),ub=P(g("path",{d:"M2.5 11.936c1.737-.879 8.627-5.346 10.42-5.268 1.795.078-.418 5.138.345 5.736.763.598 3.53-1.789 4.235-2.147M2.929 9.788c1.164-.519 5.47-3.28 6.987-3.114 1.519.165 1 3.827 2.121 4.109 1.122.281 3.839-2.016 4.606-2.42",strokeWidth:"1.25"}),be),Sp=P(B("g",{children:[g("path",{d:"M4 12 C 5 8, 6 8, 8 12",fill:"none",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M8 12 C 9 16, 10 16, 12 12",fill:"none",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M12 12 C 14 8, 15 8, 16 12",fill:"none",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M16 12 C 17 16, 18 16, 19 12",fill:"none",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"})]}),G),kp=P(B("g",{children:[g("path",{d:"M4 12 C 5 8, 6 8, 8 12",fill:"none",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M8 12 C 9 16, 10 16, 12 12",fill:"none",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M12 12 C 14 8, 15 8, 16 12",fill:"none",strokeWidth:"2.75",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M16 12 C 17 16, 18 16, 19 12",fill:"none",strokeWidth:"3.25",strokeLinecap:"round",strokeLinejoin:"round"})]}),G),hb=P(B("svg",{strokeWidth:"1.5",children:[g("path",{d:"M3.33334 9.99998V6.66665C3.33334 6.04326 3.33403 4.9332 3.33539 3.33646C4.95233 3.33436 6.06276 3.33331 6.66668 3.33331H10"}),g("path",{d:"M13.3333 3.33331V3.34331"}),g("path",{d:"M16.6667 3.33331V3.34331"}),g("path",{d:"M16.6667 6.66669V6.67669"}),g("path",{d:"M16.6667 10V10.01"}),g("path",{d:"M3.33334 13.3333V13.3433"}),g("path",{d:"M16.6667 13.3333V13.3433"}),g("path",{d:"M3.33334 16.6667V16.6767"}),g("path",{d:"M6.66666 16.6667V16.6767"}),g("path",{d:"M10 16.6667V16.6767"}),g("path",{d:"M13.3333 16.6667V16.6767"}),g("path",{d:"M16.6667 16.6667V16.6767"})]}),be),gb=P(B("g",{strokeWidth:"1.5",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 12v-4a4 4 0 0 1 4 -4h4"}),g("line",{x1:"16",y1:"4",x2:"16",y2:"4.01"}),g("line",{x1:"20",y1:"4",x2:"20",y2:"4.01"}),g("line",{x1:"20",y1:"8",x2:"20",y2:"8.01"}),g("line",{x1:"20",y1:"12",x2:"20",y2:"12.01"}),g("line",{x1:"4",y1:"16",x2:"4",y2:"16.01"}),g("line",{x1:"20",y1:"16",x2:"20",y2:"16.01"}),g("line",{x1:"4",y1:"20",x2:"4",y2:"20.01"}),g("line",{x1:"8",y1:"20",x2:"8",y2:"20.01"}),g("line",{x1:"12",y1:"20",x2:"12",y2:"20.01"}),g("line",{x1:"16",y1:"20",x2:"16",y2:"20.01"}),g("line",{x1:"20",y1:"20",x2:"20",y2:"20.01"})]}),G),fb=Lt.memo(({flip:e=!1})=>P(B("g",{transform:e?"translate(40, 0) scale(-1, 1)":"",stroke:"currentColor",opacity:.3,strokeWidth:2,fill:"none",strokeLinecap:"round",children:[g("path",{d:"M7,11 H19"}),g("path",{d:"M25,6 L33,16 M33,6 L25,16"})]}),uo)),bb=Lt.memo(({flip:e=!1})=>P(g("g",{transform:e?"translate(40, 0) scale(-1, 1)":"",stroke:"currentColor",strokeWidth:2,fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:g("path",{d:"M7,11 H33 M23,5 L33,11 L23,17"})}),uo)),xb=Lt.memo(({flip:e=!1})=>P(B("g",{stroke:"currentColor",fill:"currentColor",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeLinejoin:"round",children:[g("path",{d:"M7,11 H23",strokeWidth:2,strokeLinecap:"round"}),g("path",{d:"M23,5 L35,11 L23,17 Z"})]}),uo)),Eb=Lt.memo(({flip:e=!1})=>P(B("g",{stroke:"currentColor",fill:"none",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",children:[g("path",{d:"M7,11 H23"}),g("path",{d:"M23,5 L35,11 L23,17 Z"})]}),uo)),yb=Lt.memo(({flip:e=!1})=>P(B("g",{stroke:"currentColor",fill:"currentColor",transform:e?"translate(40, 0) scale(-1, 1)":"",children:[g("path",{d:"M7,11 H25",strokeWidth:2,strokeLinecap:"round"}),g("circle",{cx:"29",cy:"11",r:"4"})]}),uo)),vb=Lt.memo(({flip:e=!1})=>P(B("g",{stroke:"currentColor",fill:"none",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeWidth:2,children:[g("path",{d:"M7,11 H25",strokeLinecap:"round"}),g("circle",{cx:"29",cy:"11",r:"4"})]}),uo)),wb=Lt.memo(({flip:e=!1})=>P(B("g",{stroke:"currentColor",fill:"currentColor",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeLinejoin:"round",children:[g("path",{d:"M7,11 H21",strokeWidth:2,strokeLinecap:"round"}),g("path",{d:"M21,11 L28,5 L35,11 L28,17 Z"})]}),uo)),Tb=Lt.memo(({flip:e=!1})=>P(B("g",{stroke:"currentColor",fill:"none",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeLinejoin:"round",strokeWidth:2,strokeLinecap:"round",children:[g("path",{d:"M7,11 H21"}),g("path",{d:"M21,11 L28,5 L35,11 L28,17 Z"})]}),uo)),Cb=Lt.memo(({flip:e=!1})=>P(g("g",{transform:e?"translate(40, 0) scale(-1, 1)":"",stroke:"currentColor",strokeWidth:2,fill:"none",strokeLinecap:"round",children:g("path",{d:"M11,11 H31 M31,5 V17"})}),uo)),Ib=Lt.memo(({flip:e=!1})=>P(g("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:g("path",{d:"M35,11 H7 M15,5 V17"})}),uo)),Sb=Lt.memo(({flip:e=!1})=>P(g("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:g("path",{d:"M35,11 H7 M15,11 L7,5 M15,11 L7,17"})}),uo)),kb=Lt.memo(({flip:e=!1})=>P(g("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:g("path",{d:"M35,11 H7 M23,5 V17 M15,11 L7,5 M15,11 L7,17"})}),uo)),Mb=Lt.memo(({flip:e=!1})=>P(g("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:g("path",{d:"M35,11 H7 M15,5 V17 M7,5 V17"})}),uo)),Ab=Lt.memo(({flip:e=!1})=>P(B("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:[g("path",{d:"M35,11 H19 M11,11 H7 M7,5 V17"}),g("circle",{cx:"15",cy:"11",r:"4"})]}),uo)),Lb=Lt.memo(({flip:e=!1})=>P(B("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:[g("path",{d:"M35,11 H27 M19,11 H7 M15,11 L7,5 M15,11 L7,17"}),g("circle",{cx:"23",cy:"11",r:"4"})]}),uo)),_b=P(B(Ye,{children:[g("g",{clipPath:"url(#a)",children:g("path",{d:"M14.167 6.667a3.333 3.333 0 0 0-3.334-3.334H9.167a3.333 3.333 0 0 0 0 6.667h1.666a3.333 3.333 0 0 1 0 6.667H9.167a3.333 3.333 0 0 1-3.334-3.334",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),Pb=P(B(Ye,{children:[g("g",{clipPath:"url(#a)",children:g("path",{d:"M5 16.667V3.333L10 15l5-11.667v13.334",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),Db=P(B(Ye,{children:[g("g",{clipPath:"url(#a)",children:g("path",{d:"M5.833 3.333v13.334h8.334",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),be),Rb=P(g(Ye,{children:g("path",{d:"m1.667 3.333 6.666 13.334M8.333 3.333 1.667 16.667M11.667 3.333v13.334h6.666",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),be),bi=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 7v-2h13v2"}),g("path",{d:"M10 5v14"}),g("path",{d:"M12 19h-4"}),g("path",{d:"M15 13v-1h6v1"}),g("path",{d:"M18 12v7"}),g("path",{d:"M17 19h2"})]}),G),Nb=P(g(Ye,{children:B("g",{stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M7 12h10"}),g("path",{d:"M7 5v14"}),g("path",{d:"M17 5v14"}),g("path",{d:"M15 19h4"}),g("path",{d:"M15 5h4"}),g("path",{d:"M5 19h4"}),g("path",{d:"M5 5h4"})]})}),G),Sl=P(g(Ye,{children:g("g",{stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round",children:g("path",{d:"M5.833 16.667v-10a3.333 3.333 0 0 1 3.334-3.334h1.666a3.333 3.333 0 0 1 3.334 3.334v10M5.833 10.833h8.334"})})}),be),Mp=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M7 8l-4 4l4 4"}),g("path",{d:"M17 8l4 4l-4 4"}),g("path",{d:"M14 4l-4 16"})]}),G),Oc=Mp,Ob=P(B("g",{stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"8",x2:"20",y2:"8"}),g("line",{x1:"4",y1:"12",x2:"12",y2:"12"}),g("line",{x1:"4",y1:"16",x2:"16",y2:"16"})]}),G),Fb=P(B("g",{stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"8",x2:"20",y2:"8"}),g("line",{x1:"8",y1:"12",x2:"16",y2:"12"}),g("line",{x1:"6",y1:"16",x2:"18",y2:"16"})]}),G),Bb=P(B("g",{stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"8",x2:"20",y2:"8"}),g("line",{x1:"10",y1:"12",x2:"20",y2:"12"}),g("line",{x1:"8",y1:"16",x2:"20",y2:"16"})]}),G),zb=Lt.memo(({theme:e})=>P(B("g",{strokeWidth:"1.5",stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"4",x2:"20",y2:"4"}),g("rect",{x:"9",y:"8",width:"6",height:"12",rx:"2"})]}),G)),Hb=Lt.memo(({theme:e})=>P(B("g",{strokeWidth:"2",stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"20",x2:"20",y2:"20"}),g("rect",{x:"9",y:"4",width:"6",height:"12",rx:"2"})]}),G)),Ub=Lt.memo(({theme:e})=>P(B("g",{strokeWidth:"1.5",stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"12",x2:"9",y2:"12"}),g("line",{x1:"15",y1:"12",x2:"20",y2:"12"}),g("rect",{x:"9",y:"6",width:"6",height:"12",rx:"2"})]}),G)),Fc=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M21 19h-18l9 -15"}),g("path",{d:"M20.615 15.171h.015"}),g("path",{d:"M19.515 11.771h.015"}),g("path",{d:"M17.715 8.671h.015"}),g("path",{d:"M15.415 5.971h.015"})]}),G),Gb=P(g("path",{d:"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z",fill:"currentColor"}),{width:640,height:512}),UM=P(g("path",{d:"M480 416C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H150.6C133.7 480 117.4 473.3 105.4 461.3L25.37 381.3C.3786 356.3 .3786 315.7 25.37 290.7L258.7 57.37C283.7 32.38 324.3 32.38 349.3 57.37L486.6 194.7C511.6 219.7 511.6 260.3 486.6 285.3L355.9 416H480zM265.4 416L332.7 348.7L195.3 211.3L70.63 336L150.6 416L265.4 416z"})),Wb=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 13v-7.5a1.5 1.5 0 0 1 3 0v6.5"}),g("path",{d:"M11 5.5v-2a1.5 1.5 0 1 1 3 0v8.5"}),g("path",{d:"M14 5.5a1.5 1.5 0 0 1 3 0v6.5"}),g("path",{d:"M17 7.5a1.5 1.5 0 0 1 3 0v8.5a6 6 0 0 1 -6 6h-2h.208a6 6 0 0 1 -5.012 -2.7a69.74 69.74 0 0 1 -.196 -.3c-.312 -.479 -1.407 -2.388 -3.286 -5.728a1.5 1.5 0 0 1 .536 -2.022a1.867 1.867 0 0 1 2.28 .28l1.47 1.47"})]}),G),Ap=P(B(Ye,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2"}),g("path",{d:"M7 11l5 5l5 -5"}),g("path",{d:"M12 4l0 12"})]}),G),xa=P(B(Ye,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"}),g("path",{d:"M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"})]}),G),Vb=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M7 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"}),g("path",{d:"M17 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"}),g("path",{d:"M9.15 14.85l8.85 -10.85"}),g("path",{d:"M6 4l8.85 10.85"})]}),G),Yb=P(B(Ye,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"}),g("path",{d:"M12 17l0 .01"}),g("path",{d:"M12 13.5a1.5 1.5 0 0 1 1 -1.5a2.6 2.6 0 1 0 -3 -4"})]}),G),GM=P(B(Ye,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M7 4v16l13 -8z"})]}),G),WM=P(B(Ye,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M17 4h-10a3 3 0 0 0 -3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3 -3v-10a3 3 0 0 0 -3 -3z",strokeWidth:"0",fill:"currentColor"})]}),G),Kb=P(B(Ye,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 12l5 5l10 -10"})]}),G),Bc=P(B(Ye,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10.24 3.957l-8.422 14.06a1.989 1.989 0 0 0 1.7 2.983h16.845a1.989 1.989 0 0 0 1.7 -2.983l-8.423 -14.06a1.989 1.989 0 0 0 -3.4 0z"}),g("path",{d:"M12 9v4"}),g("path",{d:"M12 17h.01"})]}),G),Xb=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M11 7l6 6"}),g("path",{d:"M4 16l11.7 -11.7a1 1 0 0 1 1.4 0l2.6 2.6a1 1 0 0 1 0 1.4l-11.7 11.7h-4v-4z"})]}),G),Cr=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 7l16 0"}),g("path",{d:"M4 17l16 0"}),g("path",{d:"M7 4l0 16"}),g("path",{d:"M17 4l0 16"})]}),G),Ea=P(g("path",{fill:"currentColor",d:"M407.48,111.18C335.587,108.103 269.573,152.338 245.08,220C220.587,152.338 154.573,108.103 82.68,111.18C80.285,168.229 107.577,222.632 154.74,254.82C178.908,271.419 193.35,298.951 193.27,328.27L193.27,379.13L296.9,379.13L296.9,328.27C296.816,298.953 311.255,271.42 335.42,254.82C382.596,222.644 409.892,168.233 407.48,111.18Z"})),Zb=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4"}),g("path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"})]}),G),$b=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 10l-2 1l8 4l8 -4l-2 -1"}),g("path",{d:"M4 15l8 4l8 -4"}),g("path",{d:"M12 4v7"}),g("path",{d:"M15 8l-3 3l-3 -3"})]}),G),Mn=P(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M4.16602 10H15.8327"}),g("path",{d:"M12.5 13.3333L15.8333 10"}),g("path",{d:"M12.5 6.66666L15.8333 9.99999"})]}),be),xi=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 9.5a6.5 6.5 0 1 0 13 0a6.5 6.5 0 1 0 -13 0"}),g("path",{d:"M10 12a2 2 0 0 1 2 -2h7a2 2 0 0 1 2 2v7a2 2 0 0 1 -2 2h-7a2 2 0 0 1 -2 -2l0 -7"})]}),G),Ir=P(B("g",{fill:"none",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round",transform:"rotate(90 10 10)",children:[g("path",{clipRule:"evenodd",d:"m9.644 13.69 7.774-7.773a2.357 2.357 0 0 0-3.334-3.334l-7.773 7.774L8 12l1.643 1.69Z"}),g("path",{d:"m13.25 3.417 3.333 3.333M10 10l2-2M5 15l3-3M2.156 17.894l1-1M5.453 19.029l-.144-1.407M2.377 11.887l.866 1.118M8.354 17.273l-1.194-.758M.953 14.652l1.408.13"})]}),20),Ei=P(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z"}),g("path",{d:"M6 21l15 -15l-3 -3l-15 15l3 3"}),g("path",{d:"M15 6l3 3"}),g("path",{d:"M9 3a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2"}),g("path",{d:"M19 13a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2"})]}),G),VM=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z"}),g("path",{d:"M6 21l15 -15l-3 -3l-15 15l3 3"}),g("path",{d:"M15 6l3 3"}),g("path",{d:"M9 3a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2"}),g("path",{d:"M19 13a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2"})]}),G),YM=P(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M11.217 19.384a3.501 3.501 0 0 0 6.783 -1.217v-5.167l-6 -3.35"}),g("path",{d:"M5.214 15.014a3.501 3.501 0 0 0 4.446 5.266l4.34 -2.534v-6.946"}),g("path",{d:"M6 7.63c-1.391 -.236 -2.787 .395 -3.534 1.689a3.474 3.474 0 0 0 1.271 4.745l4.263 2.514l6 -3.348"}),g("path",{d:"M12.783 4.616a3.501 3.501 0 0 0 -6.783 1.217v5.067l6 3.45"}),g("path",{d:"M18.786 8.986a3.501 3.501 0 0 0 -4.446 -5.266l-4.34 2.534v6.946"}),g("path",{d:"M18 16.302c1.391 .236 2.787 -.395 3.534 -1.689a3.474 3.474 0 0 0 -1.271 -4.745l-4.308 -2.514l-5.955 3.42"})]}),G),jb=P(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 8v-2a2 2 0 0 1 2 -2h2"}),g("path",{d:"M4 16v2a2 2 0 0 0 2 2h2"}),g("path",{d:"M16 4h2a2 2 0 0 1 2 2v2"}),g("path",{d:"M16 20h2a2 2 0 0 0 2 -2v-2"})]}),G),ya=P(B("g",{stroke:"currentColor",fill:"none",strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"}),g("path",{d:"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6"})]}),G),qb=P(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10.585 10.587a2 2 0 0 0 2.829 2.828"}),g("path",{d:"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87"}),g("path",{d:"M3 3l18 18"})]}),G),Jb=P(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8"}),g("path",{d:"M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8"}),g("path",{d:"M17.5 16a3.5 3.5 0 0 0 0 -7h-.5"}),g("path",{d:"M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0"}),g("path",{d:"M6.5 16a3.5 3.5 0 0 1 0 -7h.5"}),g("path",{d:"M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10"})]}),G),Qb=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8"}),g("path",{d:"M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8"}),g("path",{d:"M17.5 16a3.5 3.5 0 0 0 0 -7h-.5"}),g("path",{d:"M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0"}),g("path",{d:"M6.5 16a3.5 3.5 0 0 1 0 -7h.5"}),g("path",{d:"M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10"})]}),G),Io=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0"}),g("path",{d:"M21 21l-6 -6"})]}),G),e1=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M20.984 12.53a9 9 0 1 0 -7.552 8.355"}),g("path",{d:"M12 7v5l3 3"}),g("path",{d:"M19 16l-2 3h4l-2 3"})]}),G),t1=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 8l0 4l2 2"}),g("path",{d:"M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5"})]}),G),o1=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M9 2m0 3a3 3 0 0 1 3 -3h0a3 3 0 0 1 3 3v5a3 3 0 0 1 -3 3h0a3 3 0 0 1 -3 -3z"}),g("path",{d:"M5 10a7 7 0 0 0 14 0"}),g("path",{d:"M8 21l8 0"}),g("path",{d:"M12 17l0 4"})]}),G),r1=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 3l18 18"}),g("path",{d:"M9 5a3 3 0 0 1 6 0v5a3 3 0 0 1 -.13 .874m-2 2a3 3 0 0 1 -3.87 -2.872v-1"}),g("path",{d:"M5 10a7 7 0 0 0 10.846 5.85m2 -2a6.967 6.967 0 0 0 1.152 -3.85"}),g("path",{d:"M8 21l8 0"}),g("path",{d:"M12 17l0 4"})]}),G),kl=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M13 3l0 7l6 0l-8 11l0 -7l-6 0l8 -11"})]}),G),n1=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 8m0 1a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-6a1 1 0 0 1 -1 -1z"}),g("path",{d:"M12 20v.01"}),g("path",{d:"M16 20v.01"}),g("path",{d:"M8 20v.01"}),g("path",{d:"M4 20v.01"}),g("path",{d:"M4 16v.01"}),g("path",{d:"M4 12v.01"}),g("path",{d:"M4 8v.01"}),g("path",{d:"M4 4v.01"}),g("path",{d:"M8 4v.01"}),g("path",{d:"M12 4v.01"}),g("path",{d:"M16 4v.01"}),g("path",{d:"M20 4v.01"}),g("path",{d:"M20 8v.01"}),g("path",{d:"M20 12v.01"}),g("path",{d:"M20 16v.01"}),g("path",{d:"M20 20v.01"})]}),G),i1=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 3v18"}),g("path",{d:"M19 21v-18"}),g("path",{d:"M5 7h14"}),g("path",{d:"M5 15h14"}),g("path",{d:"M8 13v4"}),g("path",{d:"M11 13v4"}),g("path",{d:"M16 13v4"}),g("path",{d:"M14 5v4"}),g("path",{d:"M11 5v4"}),g("path",{d:"M8 5v4"}),g("path",{d:"M3 21h18"})]}),G),a1=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 12l18 0"}),g("path",{d:"M7 16l10 0l-10 5l0 -5"}),g("path",{d:"M7 8l10 0l-10 -5l0 5"})]}),G),l1=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 3l0 18"}),g("path",{d:"M16 7l0 10l5 0l-5 -10"}),g("path",{d:"M8 7l0 10l-5 0l5 -10"})]}),G),Lp=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 3m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z"}),g("path",{d:"M19 6h1a2 2 0 0 1 2 2a5 5 0 0 1 -5 5l-5 0v2"}),g("path",{d:"M10 15m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"})]}),G),zc=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15 15m-5 0a5 5 0 1 0 10 0a5 5 0 1 0 -10 0"}),g("path",{d:"M22 22l-3 -3"}),g("path",{d:"M6 18h-1a2 2 0 0 1 -2 -2v-1"}),g("path",{d:"M3 11v-1"}),g("path",{d:"M3 6v-1a2 2 0 0 1 2 -2h1"}),g("path",{d:"M10 3h1"}),g("path",{d:"M15 3h1a2 2 0 0 1 2 2v1"})]}),G),s1=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M14 3v4a1 1 0 0 0 1 1h4"}),g("path",{d:"M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4"}),g("path",{d:"M4 20.25c0 .414 .336 .75 .75 .75h1.25a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-1a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1.25a.75 .75 0 0 1 .75 .75"}),g("path",{d:"M10 15l2 6l2 -6"}),g("path",{d:"M20 15h-1a2 2 0 0 0 -2 2v2a2 2 0 0 0 2 2h1v-3"})]}),G),c1=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M14 3v4a1 1 0 0 0 1 1h4"}),g("path",{d:"M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4"}),g("path",{d:"M20 15h-1a2 2 0 0 0 -2 2v2a2 2 0 0 0 2 2h1v-3"}),g("path",{d:"M5 18h1.5a1.5 1.5 0 0 0 0 -3h-1.5v6"}),g("path",{d:"M11 21v-6l3 6v-6"})]}),G),d1=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 13v-8a2 2 0 0 1 2 -2h1a2 2 0 0 1 2 2v8a2 2 0 0 0 6 0v-8a2 2 0 0 1 2 -2h1a2 2 0 0 1 2 2v8a8 8 0 0 1 -16 0"}),g("path",{d:"M4 8l5 0"}),g("path",{d:"M15 8l4 0"})]}),G),m1=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 14c.83 .642 2.077 1.017 3.5 1c1.423 .017 2.67 -.358 3.5 -1c.83 -.642 2.077 -1.017 3.5 -1c1.423 -.017 2.67 .358 3.5 1"}),g("path",{d:"M8 3a2.4 2.4 0 0 0 -1 2a2.4 2.4 0 0 0 1 2"}),g("path",{d:"M12 3a2.4 2.4 0 0 0 -1 2a2.4 2.4 0 0 0 1 2"}),g("path",{d:"M3 10h14v5a6 6 0 0 1 -6 6h-2a6 6 0 0 1 -6 -6v-5z"}),g("path",{d:"M16.746 16.726a3 3 0 1 0 .252 -5.555"})]}),G),p1=P(B("g",{stroke:"currentColor",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 5a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1h-16a1 1 0 0 1-1-1v-10zM7 20h10M9 16v4M15 16v4"})]}),{...G,strokeWidth:1.5}),KM=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2"}),g("path",{d:"M21 12h-13l3 -3"}),g("path",{d:"M11 15l-3 -3"})]}),G),u1=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M2 8a4 4 0 0 1 4 -4h12a4 4 0 0 1 4 4v8a4 4 0 0 1 -4 4h-12a4 4 0 0 1 -4 -4v-8z"}),g("path",{d:"M10 9l5 3l-5 3z"})]}),G),h1=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 6h18"}),g("path",{d:"M3 12h18"}),g("path",{d:"M3 18h18"}),g("path",{d:"M6 3v18"}),g("path",{d:"M12 3v18"}),g("path",{d:"M18 3v18"})]}),G),g1=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M17 3m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"}),g("path",{d:"M3 17m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"}),g("path",{d:"M17 5c-6.627 0 -12 5.373 -12 12"})]}),G),An=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 18l12 -12"}),g("path",{d:"M18 10v-4h-4"})]}),G),Ln=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4,19L10,19C11.097,19 12,18.097 12,17L12,9C12,7.903 12.903,7 14,7L21,7"}),g("path",{d:"M18 4l3 3l-3 3"})]}),G),_n=P(B("g",{children:[g("path",{d:"M16,12L20,9L16,6"}),g("path",{d:"M6 20c0 -6.075 4.925 -11 11 -11h3"})]}),G),Hc=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 9l6 6l6 -6"})]}),G),f1=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 15l6 -6l6 6"})]}),G),b1=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 15l6 -6l6 6"})]}),G),_p=P(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 5v10a1 1 0 0 0 1 1h10"}),g("path",{d:"M5 8h10a1 1 0 0 1 1 1v10"})]}),G),Uc=P(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 5m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M19 5m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M5 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M19 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M5 7l0 10"}),g("path",{d:"M7 5l10 0"}),g("path",{d:"M7 19l10 0"}),g("path",{d:"M19 7l0 10"})]}),G),XM=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 11v8a1 1 0 0 0 1 1h8m-9 -14v-1a1 1 0 0 1 1 -1h1m5 0h2m5 0h1a1 1 0 0 1 1 1v1m0 5v2m0 5v1a1 1 0 0 1 -1 1h-1"}),g("path",{d:"M4 12h7a1 1 0 0 1 1 1v7"})]}),G),x1=P(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 6l8 0"}),g("path",{d:"M16 6l4 0"}),g("path",{d:"M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 12l2 0"}),g("path",{d:"M10 12l10 0"}),g("path",{d:"M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 18l11 0"}),g("path",{d:"M19 18l1 0"})]}),G),E1=P(B("g",{strokeWidth:1,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 10l4 -4 L6 14l8 -8 L6 18l12 -12 L10 18l8 -8 L14 18l4 -4"})]}),G),y1=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4"}),g("path",{d:"M13.5 6.5l4 4"})]}),G),ZM=P(B("g",{strokeWidth:1,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M11 7l-5 5l5 5"}),g("path",{d:"M17 7l-5 5l5 5"})]}),G),v1=P(B("g",{strokeWidth:"1.75",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z"}),g("path",{d:"M15 4l0 16"})]}),G),$M=P(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 20l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c3.255 2.777 3.695 7.266 1.029 10.501c-2.666 3.235 -7.615 4.215 -11.574 2.293l-4.7 1"})]}),G),jM=P(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 4l18 0"}),g("path",{d:"M4 4v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-10"}),g("path",{d:"M12 16l0 4"}),g("path",{d:"M9 20l6 0"}),g("path",{d:"M8 12l3 -3l2 2l3 -3"})]}),G),Gc=g("div",{style:{width:"1rem",height:"1rem"}}),w1=P(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("polyline",{points:"9 6 15 12 9 18"})]}),G),T1=P(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 6l8 0"}),g("path",{d:"M16 6l4 0"}),g("path",{d:"M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 12l2 0"}),g("path",{d:"M10 12l10 0"}),g("path",{d:"M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 18l11 0"}),g("path",{d:"M19 18l1 0"})]}),G);import Qw from"clsx";import I1,{useEffect as QM,useRef as e2,useState as e6}from"react";import qM from"react";import{jsx as C1}from"react/jsx-runtime";var JM=({size:e="1em",circleWidth:o=8,synchronized:t=!1,className:r=""})=>{let i=-(qM.useRef(Date.now()).current%1600);return C1("div",{className:`Spinner ${r}`,children:C1("svg",{viewBox:"0 0 100 100",style:{width:e,height:e,"--spinner-delay":t?`${i}ms`:0},children:C1("circle",{cx:"50",cy:"50",r:50-o/2,strokeWidth:o,fill:"none",strokeMiterlimit:"10"})})})},Ht=JM;import{jsx as Wc,jsxs as Pp}from"react/jsx-runtime";var q=I1.forwardRef(({size:e="medium",visible:o=!0,className:t="",...r},n)=>{let i=I1.useRef(null);I1.useImperativeHandle(n,()=>i.current);let a=`ToolIcon_size_${e}`,[l,s]=e6(!1),c=e2(!0),d=async m=>{let u="onClick"in r&&r.onClick?.(m);if(ti(u))try{s(!0),await u}catch(b){if(b instanceof ul)console.warn(b);else throw b}finally{c.current&&s(!1)}};QM(()=>(c.current=!0,()=>{c.current=!1}),[]);let p=e2(null);return r.type==="button"||r.type==="icon"?Pp("button",{className:Qw("ToolIcon_type_button",a,t,o&&!r.hidden?"ToolIcon_type_button--show":"ToolIcon_type_button--hide",{ToolIcon:!r.hidden,"ToolIcon--plain":r.type==="icon"}),style:r.style,"data-testid":r["data-testid"],hidden:r.hidden,title:r.title,"aria-label":r["aria-label"],type:"button",onClick:d,ref:i,disabled:l||r.isLoading||!!r.disabled,children:[(r.icon||r.label)&&Pp("div",{className:"ToolIcon__icon","aria-hidden":"true","aria-disabled":!!r.disabled,children:[r.icon||r.label,r.keyBindingLabel&&Wc("span",{className:"ToolIcon__keybinding",children:r.keyBindingLabel}),r.isLoading&&Wc(Ht,{})]}),r.showAriaLabel&&Pp("div",{className:"ToolIcon__label",children:[r["aria-label"]," ",l&&Wc(Ht,{})]}),r.children]}):Wc("button",{className:Qw("ToolIcon","ToolIcon_type_toggle",a,t,{"ToolIcon--checked":r.checked}),type:"button",style:r.style,title:r.title,"aria-label":r["aria-label"],"aria-keyshortcuts":r["aria-keyshortcuts"],"aria-pressed":r.checked,"data-testid":r["data-testid"],disabled:!!r.disabled,"aria-disabled":!!r.disabled,onPointerDown:m=>{p.current=m.pointerType||null},onPointerUp:()=>{requestAnimationFrame(()=>{p.current=null})},onClick:()=>{r.onSelect?.({pointerType:p.current})},ref:i,children:Pp("div",{className:"ToolIcon__icon",children:[r.icon,r.keyBindingLabel&&Wc("span",{className:"ToolIcon__keybinding",children:r.keyBindingLabel})]})})});q.displayName="IconButton";var Dp=[],U=e=>(Dp=Dp.concat(e),e);import{jsx as o6}from"react/jsx-runtime";var t6=(e,o,t)=>{let r=new Set(ie(e.filter(d=>oe(d)),o).map(d=>d.id)),n={},i=t.scene.getNonDeletedElementsMap(),a=new Set;for(let d of r){let p=jo(e,d);for(let m of p)if(!a.has(m.id)){if(xt(m)){let u=Zo(m,i);u&&(n[u.id]=!0)}else n[m.id]=!0;a.add(m.id)}}let l=!0,s=e.map(d=>{if(o.selectedElementIds[d.id]){let p=xt(d)?Zo(d,i):null;return d.frameId&&r.has(d.frameId)?(l=!1,n[d.id]=!0,d):p?.frameId&&r.has(p?.frameId)?d:(d.boundElements&&d.boundElements.forEach(m=>{let u=t.scene.getNonDeletedElementsMap().get(m.id);u&&Re(u)&&t.scene.mutateElement(u,{startBinding:d.id===u.startBinding?.elementId?null:u.startBinding,endBinding:d.id===u.endBinding?.elementId?null:u.endBinding})}),se(d,{isDeleted:!0}))}return d.frameId&&r.has(d.frameId)?(l=!1,xt(d)||(n[d.id]=!0),se(d,{frameId:null})):xt(d)&&o.selectedElementIds[d.containerId]?se(d,{isDeleted:!0}):d}),c=o.editingGroupId;if(l&&o.editingGroupId){let d=He(s,o.editingGroupId).filter(p=>!p.isDeleted);if(d.length>1)d[0]&&(n[d[0].id]=!0);else{c=null,d[0]&&(n[d[0].id]=!0);let p=d[0];if(p){let m=p.groupIds.findIndex(b=>b===o.editingGroupId),u=p.groupIds[m+1];if(u){let b=He(s,u).filter(f=>!f.isDeleted);b.length>1&&(c=u,b.forEach(f=>{n[f.id]=!0}))}}}}return{elements:s,appState:{...o,...Tt({selectedElementIds:n,editingGroupId:c},de(s),o,null)}}},t2=(e,o)=>{if(e.editingGroupId){let t=He(de(o),e.editingGroupId);if(t.length)return{...e,selectedElementIds:{[t[0].id]:!0}}}return e},Ml=U({name:"deleteSelectedElements",label:"labels.delete",icon:Kt,trackEvent:{category:"element",action:"delete"},perform:(e,o,t,r)=>{if(o.selectedLinearElement?.isEditing){let{elementId:a,selectedPointsIndices:l}=o.selectedLinearElement,s=r.scene.getNonDeletedElementsMap(),c=Z.getElement(a,s);if(!c||l==null)return!1;if(l.length>=c.points.length){let d=e.map(m=>m.id===c.id?se(m,{isDeleted:!0}):m),p=t2(o,d);return{elements:d,appState:{...p,selectedLinearElement:null},captureUpdate:R.IMMEDIATELY}}return Z.deletePoints(c,r,l),{elements:e,appState:{...o,selectedLinearElement:{...o.selectedLinearElement,selectedPointsIndices:l?.[0]>0?[l[0]-1]:[0]}},captureUpdate:R.IMMEDIATELY}}let{elements:n,appState:i}=t6(e,o,r);return Lm(n,n.filter(a=>a.isDeleted)),i=t2(i,n),{elements:n,appState:{...i,activeTool:gt(o,{type:r.state.preferredSelectionTool.type}),multiElement:null,newElement:null,activeEmbeddable:null,selectedLinearElement:null},captureUpdate:Ge(de(e),o)?R.IMMEDIATELY:R.EVENTUALLY}},keyTest:(e,o,t)=>(e.key===I.BACKSPACE||e.key===I.DELETE)&&!e[I.CTRL_OR_CMD],PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>{let n=Ut()==="mobile";return o6(q,{type:"button",icon:Kt,title:h("labels.delete"),"aria-label":h("labels.delete"),onClick:()=>t(null),disabled:!Ge(de(e),o),style:{...n&&o.openPopup!=="compactOtherProperties"?un:{}}})}});var H=e=>e.replace(/\b(Opt(?:ion)?|Alt)\b/i,yo?h("keys.option"):h("keys.alt")).replace(/\bShift\b/i,h("keys.shift")).replace(/\b(Enter|Return)\b/i,h("keys.enter")).replace(/\b(Ctrl|Cmd|Command|CtrlOrCmd)\b/gi,yo?h("keys.cmd"):h("keys.ctrl")).replace(/\b(Esc(?:ape)?)\b/i,h("keys.escape")).replace(/\b(Space(?:bar)?)\b/i,h("keys.spacebar")).replace(/\b(Del(?:ete)?)\b/i,h("keys.delete"));import{jsx as Bp}from"react/jsx-runtime";var Rp=U({name:"sendBackward",label:"labels.sendBackward",keywords:["move down","zindex","layer"],icon:hp,trackEvent:{category:"element"},perform:(e,o,t,r)=>({elements:nw(e,o,r.scene),appState:o,captureUpdate:R.IMMEDIATELY}),keyPriority:40,keyTest:e=>e[I.CTRL_OR_CMD]&&!e.shiftKey&&e.code===he.BRACKET_LEFT,PanelComponent:({updateData:e,appState:o})=>Bp("button",{type:"button",className:"zIndexButton",onClick:()=>e(null),title:`${h("labels.sendBackward")} \u2014 ${H("CtrlOrCmd+[")}`,children:hp})}),Np=U({name:"bringForward",label:"labels.bringForward",keywords:["move up","zindex","layer"],icon:up,trackEvent:{category:"element"},perform:(e,o,t,r)=>({elements:iw(e,o,r.scene),appState:o,captureUpdate:R.IMMEDIATELY}),keyPriority:40,keyTest:e=>e[I.CTRL_OR_CMD]&&!e.shiftKey&&e.code===he.BRACKET_RIGHT,PanelComponent:({updateData:e,appState:o})=>Bp("button",{type:"button",className:"zIndexButton",onClick:()=>e(null),title:`${h("labels.bringForward")} \u2014 ${H("CtrlOrCmd+]")}`,children:up})}),Op=U({name:"sendToBack",label:"labels.sendToBack",keywords:["move down","zindex","layer"],icon:fp,trackEvent:{category:"element"},perform:(e,o)=>({elements:aw(e,o),appState:o,captureUpdate:R.IMMEDIATELY}),keyTest:e=>yo?e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.BRACKET_LEFT:e[I.CTRL_OR_CMD]&&e.shiftKey&&e.code===he.BRACKET_LEFT,PanelComponent:({updateData:e,appState:o})=>Bp("button",{type:"button",className:"zIndexButton",onClick:()=>e(null),title:`${h("labels.sendToBack")} \u2014 ${yo?H("CtrlOrCmd+Alt+["):H("CtrlOrCmd+Shift+[")}`,children:fp})}),Fp=U({name:"bringToFront",label:"labels.bringToFront",keywords:["move up","zindex","layer"],icon:gp,trackEvent:{category:"element"},perform:(e,o)=>({elements:lw(e,o),appState:o,captureUpdate:R.IMMEDIATELY}),keyTest:e=>yo?e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.BRACKET_RIGHT:e[I.CTRL_OR_CMD]&&e.shiftKey&&e.code===he.BRACKET_RIGHT,PanelComponent:({updateData:e,appState:o})=>Bp("button",{type:"button",className:"zIndexButton",onClick:t=>e(null),title:`${h("labels.bringToFront")} \u2014 ${yo?H("CtrlOrCmd+Alt+]"):H("CtrlOrCmd+Shift+]")}`,children:gp})});var zp=U({name:"selectAll",label:"labels.selectAll",icon:n1,trackEvent:{category:"canvas"},viewMode:!1,perform:(e,o,t,r)=>{if(o.selectedLinearElement?.isEditing)return!1;let n=e.filter(i=>!i.isDeleted&&!(j(i)&&i.containerId)&&!i.locked).reduce((i,a)=>(i[a.id]=!0,i),{});return{appState:{...o,...Tt({editingGroupId:null,selectedElementIds:n},de(e),o,r),selectedLinearElement:Object.keys(n).length===1&&Se(e[0])?new Z(e[0],ne(e)):null},captureUpdate:R.IMMEDIATELY}},keyTest:e=>e[I.CTRL_OR_CMD]&&e.key===I.A});import{jsx as r6}from"react/jsx-runtime";var Hp=U({name:"duplicateSelection",label:"labels.duplicateSelection",icon:wl,trackEvent:{category:"element"},perform:(e,o,t,r)=>{if(o.selectedElementsAreBeingDragged)return!1;if(o.selectedLinearElement?.isEditing)try{let a=Z.duplicateSelectedPoints(o,r.scene);return{elements:e,appState:a,captureUpdate:R.IMMEDIATELY}}catch{return!1}let{duplicatedElements:n,elementsWithDuplicates:i}=Tn({type:"in-place",elements:e,idsOfElementsToDuplicate:ne(ie(e,o,{includeBoundTextElement:!0,includeElementsInFrames:!0})),appState:o,randomizeSeed:!0,overrides:({origElement:a,origIdToDuplicateId:l})=>{let s=a.frameId&&l.get(a.frameId);return{x:a.x+Lg/2,y:a.y+Lg/2,frameId:s??a.frameId}}});if(r.props.onDuplicate&&i){let a=r.props.onDuplicate(i,e);a&&(i=a)}return{elements:Hr(i,ne(n)),appState:{...o,...Rm(n,de(i),o)},captureUpdate:R.IMMEDIATELY}},keyTest:e=>e[I.CTRL_OR_CMD]&&e.key===I.D,PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>{let n=Ut()==="mobile";return r6(q,{type:"button",icon:wl,title:`${h("labels.duplicateSelection")} \u2014 ${H("CtrlOrCmd+D")}`,"aria-label":h("labels.duplicateSelection"),onClick:()=>t(null),disabled:!Ge(de(e),o),style:{...n&&o.openPopup!=="compactOtherProperties"?un:{}}})}});import{useEffect as V1,useMemo as K1,useRef as Y1,useState as O4}from"react";var n6=new Set(["command_palette","export"]),xe=(e,o,t,r)=>{try{if(typeof window>"u"||k.VITE_WORKER_ID||k.VITE_APP_ENABLE_TRACKING!=="true"||!n6.has(e)||Ft())return;k.PROD||console.info("trackEvent",{category:e,action:o,label:t,value:r}),window.sa_event&&window.sa_event(o,{category:e,label:t,value:r})}catch(n){console.error("error during analytics",n)}};import s6 from"clsx";import i6 from"clsx";import{forwardRef as a6}from"react";import{jsx as l6}from"react/jsx-runtime";var o2=a6((e,o)=>{let{title:t,className:r,testId:n,active:i,icon:a,onClick:l}=e;return l6("button",{type:"button",ref:o,title:t,"data-testid":n,className:i6(r,{active:i}),onClick:l,style:e.style,children:a},t)});import{Fragment as d6,jsx as S1,jsxs as c6}from"react/jsx-runtime";var Oo=e=>S1(d6,{children:e.options.map(o=>e.type==="button"?S1(o2,{icon:o.icon,title:o.text,testId:o.testId,active:o.active??e.value===o.value,onClick:t=>e.onClick(o.value,t)},o.text):c6("label",{className:s6({active:e.value===o.value}),title:o.text,children:[S1("input",{type:"radio",name:e.group,onChange:()=>e.onChange(o.value),checked:e.value===o.value,"data-testid":o.testId}),o.icon]},o.text))});import{Popover as v2}from"radix-ui";import w2 from"clsx";import{useRef as T2,useEffect as Z6}from"react";import{jsx as m6}from"react/jsx-runtime";var Up=()=>m6("div",{style:{width:1,height:"1rem",backgroundColor:"var(--default-border-color)",margin:"0 auto"}});import{useEffect as g6,useRef as f6}from"react";import{createPortal as b6}from"react-dom";import r2 from"react";var k1=r2.createContext(null),fe=()=>r2.useContext(k1);import{useState as p6,useLayoutEffect as n2}from"react";var Gp=e=>{let[o,t]=p6(null),r=Me(),{theme:n}=fe(),{container:i}=at();return n2(()=>{o&&(o.className="",o.classList.add("excalidraw",...e?.className?.split(/\s+/)||[]),o.classList.toggle("excalidraw--mobile",r.formFactor==="phone"),o.classList.toggle("theme--dark",n===te.DARK))},[o,n,r.formFactor,e?.className]),n2(()=>{let a=e?.parentSelector?i?.querySelector(e.parentSelector):document.body;if(!a)return;let l=document.createElement("div");return a.appendChild(l),t(l),()=>{a.removeChild(l)}},[i,e?.parentSelector]),o};import{useEffect as u6}from"react";function Al(e,o,t){u6(()=>{function r(n){let i=n;if(!e.current)return;let a=t?.(i,e.current);if(a===!0)return;if(a===!1)return o(i);e.current.contains(i.target)||!document.documentElement.contains(i.target)||i.target.closest("[data-radix-portal]")||i.target===document.documentElement&&document.body.style.pointerEvents==="none"||i.target.closest("[data-prevent-outside-click]")||o(i)}return document.addEventListener("pointerdown",r),document.addEventListener("touchstart",r),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("touchstart",r)}},[e,o,t])}import{useRef as h6}from"react";var yi=e=>{let o=h6(e);return Object.assign(o.current,e),o.current};var i2=({cursorPosition:e,elementSize:o,containerSize:t,gap:r})=>{let n=e+r+o>t?e-r-o:e+r;return $e(n,0,Math.max(0,t-o))},Wp=({cursor:e,element:o,container:t,gap:r})=>({left:i2({cursorPosition:e.x-t.left,elementSize:o.width,containerSize:t.width,gap:r}),top:i2({cursorPosition:e.y-t.top,elementSize:o.height,containerSize:t.height,gap:r})});import{jsx as x6}from"react/jsx-runtime";var Pn=Ce(null),a2=({onCancel:e,onChange:o,onSelect:t,colorPickerType:r})=>{let n=Gp({className:"excalidraw-eye-dropper-backdrop",parentSelector:".excalidraw-eye-dropper-container"}),i=fe(),a=vi(),l=Ke(),s=ie(a,i),c=yi({app:l,onCancel:e,onChange:o,onSelect:t,selectedElements:s}),{container:d}=at();g6(()=>{let m=p.current;if(!m||!l.canvas||!n)return;let u=!1,b=l.canvas.getContext("2d"),f=({clientX:S,clientY:_})=>{let M=b.getImageData((S-i.offsetLeft)*window.devicePixelRatio,(_-i.offsetTop)*window.devicePixelRatio,1,1).data;return JE(M[0],M[1],M[2])},x=({clientX:S,clientY:_,altKey:M})=>{let{top:N,left:L}=Wp({cursor:{x:S,y:_},element:{width:m.offsetWidth,height:m.offsetHeight},container:n.getBoundingClientRect(),gap:20});m.style.top=`${N}px`,m.style.left=`${L}px`;let D=f({clientX:S,clientY:_});u&&c.onChange(r,D,c.selectedElements,{altKey:M}),m.style.background=D},v=()=>{c.onCancel()},y=(S,_)=>{c.onSelect(S,_)},E=S=>{u=!0,S.stopImmediatePropagation()},w=S=>{u=!1,d?.focus(),S.stopImmediatePropagation(),S.preventDefault(),y(f(S),S)},T=S=>{S.key===I.ESCAPE&&(S.preventDefault(),S.stopImmediatePropagation(),v())};return n.tabIndex=-1,n.focus(),x({clientX:c.app.viewport.lastPosition.x,clientY:c.app.viewport.lastPosition.y,altKey:!1}),n.addEventListener("keydown",T),n.addEventListener("pointerdown",E),n.addEventListener("pointerup",w),window.addEventListener("pointermove",x,{passive:!0}),window.addEventListener("blur",v),()=>{u=!1,n.removeEventListener("keydown",T),n.removeEventListener("pointerdown",E),n.removeEventListener("pointerup",w),window.removeEventListener("pointermove",x),window.removeEventListener("blur",v)}},[c,l.canvas,n,r,d,i.offsetLeft,i.offsetTop]);let p=f6(null);return Al(p,()=>{e()},m=>!!m.target.closest(".excalidraw-eye-dropper-trigger, .excalidraw-eye-dropper-backdrop")),n?b6(x6("div",{ref:p,className:"excalidraw-eye-dropper-preview"}),n):null};import{Popover as M1}from"radix-ui";import w6 from"clsx";import T6 from"react";import E6 from"react";import y6 from"clsx";import{jsx as v6}from"react/jsx-runtime";var Et=E6.forwardRef(({children:e,padding:o,className:t,style:r,"data-viewport-ui":n,"data-viewport-ui-name":i},a)=>v6("div",{className:y6("Island",t),style:{"--padding":o,...r},"data-viewport-ui":n,"data-viewport-ui-name":i,ref:a,children:e}));import{jsx as A1,jsxs as C6}from"react/jsx-runtime";var Dn=T6.forwardRef(({className:e,container:o,children:t,style:r,onClose:n,onKeyDown:i,onFocusOutside:a,onPointerLeave:l,onPointerDownOutside:s,preventAutoFocusOnTouch:c=!1},d)=>{let p=Me(),m=p.formFactor==="phone"&&!p.isLandscape;return A1(M1.Portal,{container:o,children:C6(M1.Content,{ref:d,className:w6("focus-visible-none",e),"data-prevent-outside-click":!0,side:m?"bottom":"right",align:m?"center":"start",alignOffset:-16,sideOffset:20,collisionBoundary:o??void 0,style:{zIndex:"var(--zIndex-ui-styles-popup)",marginLeft:p.formFactor==="phone"?"0.5rem":void 0},onPointerLeave:l,onKeyDown:i,onFocusOutside:a,onPointerDownOutside:s,onOpenAutoFocus:u=>{c&&p.isTouchScreen&&u.preventDefault()},onCloseAutoFocus:u=>{u.stopPropagation(),u.preventDefault(),o&&!cy(document.activeElement)&&o.focus(),n()},children:[A1(Et,{padding:3,style:r,children:t}),A1(M1.Arrow,{width:20,height:10,style:{fill:"var(--popup-bg-color)",filter:"drop-shadow(rgba(0, 0, 0, 0.05) 0px 3px 2px)"}})]})})});import{useState as I6,useCallback as L1}from"react";var Vp=()=>document.querySelector(".excalidraw-wysiwyg"),Yp=()=>{let e=Vp();return e?{start:e.selectionStart,end:e.selectionEnd}:null},Vc=e=>{setTimeout(()=>{let o=Vp();o&&(o.focus(),e&&(o.selectionStart=e.start,o.selectionEnd=e.end))},0)},Yc=(e,o,t,r)=>{o&&r&&r();let n=o&&t?Yp():null;e(),o&&t&&Vc(n)},l2=()=>{let[e,o]=I6(null),t=L1(()=>{let i=Yp();o(i)},[]),r=L1(()=>{setTimeout(()=>{let i=Vp();i&&(i.focus(),e&&(i.selectionStart=e.start,i.selectionEnd=e.end,o(null)))},0)},[e]),n=L1(()=>{o(null)},[]);return{saveCaretPosition:t,restoreCaretPosition:r,clearSavedPosition:n,hasSavedPosition:!!e}},s2=(e=100)=>{let o=Vp();if(o){let t=o.onblur;o.onblur=null,setTimeout(()=>{o.onblur=t},e)}};import d2 from"clsx";import{useCallback as S6,useEffect as P1,useRef as m2,useState as p2}from"react";var wi=({palette:e,color:o})=>{if(!o)return null;for(let[t,r]of Object.entries(e))if(Array.isArray(r)){let n=r.indexOf(o);if(n>-1)return{colorName:t,shade:n}}else if(r===o)return{colorName:t,shade:null};return null},Kc=[["q","w","e","r","t"],["a","s","d","f","g"],["z","x","c","v","b"]].flat(),_1=({color:e,palette:o})=>!Object.values(o).flat().includes(e),c2=(e,o,t)=>{let r={elementBackground:"backgroundColor",elementStroke:"strokeColor"},n=e.filter(a=>{if(a.isDeleted)return!1;let l=a[r[o]];return!hn(l)&&_1({color:l,palette:t})}),i=new Map;return n.forEach(a=>{let l=a[r[o]];i.has(l)?i.set(l,i.get(l)+1):i.set(l,1)}),[...i.entries()].sort((a,l)=>l[1]-a[1]).map(a=>a[0]).slice(0,YE)},tr=Ce(null);import{Fragment as k6,jsx as Xc,jsxs as D1}from"react/jsx-runtime";var u2=({color:e,onChange:o,label:t,colorPickerType:r,placeholder:n})=>{let i=Me(),[a,l]=p2(e),[s,c]=p2(null),[d,p]=re(tr);P1(()=>{l(e)},[e]);let m=S6(v=>{let y=v.toLowerCase().trim(),E=QE(y);E?(o(E),c(null)):y.length===0?c(null):/^#?[0-9a-f]+$/.test(y)?c(h("colorPicker.invalidHexLength")):c(h("colorPicker.invalidColor")),l(y)},[o]),u=m2(null),b=m2(null);P1(()=>{u.current&&u.current.focus()},[d]);let[f,x]=re(Pn);return P1(()=>()=>{x(null)},[x]),D1("div",{className:"color-picker__input-label-container",children:[D1("div",{className:d2("color-picker__input-label",{"has-error":s}),children:[Xc("div",{className:"color-picker__input-hash",children:"#"}),Xc("input",{ref:d==="hex"?u:void 0,style:{border:0,padding:0},spellCheck:!1,className:"color-picker-input","aria-label":t,"aria-invalid":!!s,onChange:v=>{m(v.target.value)},value:(a||"").replace(/^#/,""),onBlur:()=>{l(e),c(null)},tabIndex:-1,onFocus:()=>p("hex"),onKeyDown:v=>{v.key!==I.TAB&&(v.key===I.ESCAPE&&b.current?.focus(),v.stopPropagation())},placeholder:n}),i.formFactor!=="phone"&&D1(k6,{children:[Xc("div",{style:{width:"1px",height:"1.25rem",backgroundColor:"var(--default-border-color)"}}),Xc("div",{ref:b,className:d2("excalidraw-eye-dropper-trigger",{selected:f}),onClick:()=>x(v=>v?null:{keepOpenOnAlt:!1,onSelect:y=>o(y),colorPickerType:r}),title:`${h("labels.eyeDropper")} \u2014 ${I.I.toLocaleUpperCase()} or ${H("Alt")} `,children:Xb})]})]}),s&&Xc("div",{className:"color-picker__error-message",role:"alert",children:s})]})};import N1,{useEffect as O1,useImperativeHandle as Y6,useState as K6}from"react";import L6 from"clsx";import{useEffect as _6,useRef as P6}from"react";import{jsxs as A6}from"react/jsx-runtime";var M6=({color:e,keyLabel:o,isShade:t=!1})=>A6("div",{className:"color-picker__button__hotkey-label",style:{color:Ji(e)?"#fff":"#000"},children:[t&&"\u21E7",o]}),Ll=M6;import{jsx as R1,jsxs as D6}from"react/jsx-runtime";var h2=({colors:e,color:o,onChange:t,label:r})=>{let[n,i]=re(tr),a=P6(null);return _6(()=>{a.current&&a.current.focus()},[o,n]),R1("div",{className:"color-picker-content--default",children:e.map((l,s)=>D6("button",{ref:o===l?a:void 0,tabIndex:-1,type:"button",className:L6("color-picker__button color-picker__button--large has-outline",{active:o===l,"is-transparent":l==="transparent"||!l}),onClick:()=>{t(l),i("custom")},title:l,"aria-label":r,style:{"--swatch-color":l},children:[R1("div",{className:"color-picker__button-outline"}),R1(Ll,{color:l,keyLabel:s+1})]},s))})};import R6 from"clsx";import{useEffect as N6,useRef as O6}from"react";import{jsx as Kp,jsxs as B6}from"react/jsx-runtime";var F6=({palette:e,color:o,onChange:t,activeShade:r,showHotKey:n=!0,excludedColors:i})=>{let a=wi({color:o,palette:e}),[l,s]=re(tr),c=O6(null);return N6(()=>{c.current&&l==="baseColors"&&c.current.focus()},[a?.colorName,l]),Kp("div",{className:"color-picker-content--default",children:Object.entries(e).map(([d,p],m)=>{let u=(Array.isArray(p)?p[r]:p)||"transparent";if(i?.includes(u))return Kp("div",{className:"color-picker__button color-picker__button--large",style:{visibility:"hidden"},"aria-hidden":"true"},d);let b=Kc[m],f=h(`colors.${d.replace(/\d+/,"")}`,null,"");return B6("button",{ref:a?.colorName===d?c:void 0,tabIndex:-1,type:"button",className:R6("color-picker__button color-picker__button--large has-outline",{active:a?.colorName===d,"is-transparent":u==="transparent"||!u}),onClick:()=>{t(u),s("baseColors")},title:`${f}${u.startsWith("#")?` ${u}`:""} \u2014 ${b}`,"aria-label":`${f} \u2014 ${b}`,style:u?{"--swatch-color":u}:void 0,"data-testid":`color-${d}`,children:[Kp("div",{className:"color-picker__button-outline"}),n&&Kp(Ll,{color:u,keyLabel:b})]},d)})})},g2=F6;import{jsx as H6}from"react/jsx-runtime";var z6=({children:e})=>H6("div",{className:"color-picker__heading",children:e}),_l=z6;import U6 from"clsx";import{useEffect as G6,useRef as W6}from"react";import{jsx as Zc,jsxs as f2}from"react/jsx-runtime";var b2=({color:e,onChange:o,palette:t,showHotKey:r})=>{let n=wi({color:e||"transparent",palette:t}),[i,a]=re(tr),l=W6(null);if(G6(()=>{l.current&&i==="shades"&&l.current.focus()},[n,i]),n){let{colorName:s,shade:c}=n,d=t[s];if(Array.isArray(d))return Zc("div",{className:"color-picker-content--default shades",children:d.map((p,m)=>f2("button",{ref:m===c&&i==="shades"?l:void 0,tabIndex:-1,type:"button",className:U6("color-picker__button color-picker__button--large has-outline",{active:m===c}),"aria-label":"Shade",title:`${s} - ${m+1}`,style:p?{"--swatch-color":p}:void 0,onClick:()=>{o(p),a("shades")},children:[Zc("div",{className:"color-picker__button-outline"}),r&&Zc(Ll,{color:p,keyLabel:m+1,isShade:!0})]},m))})}return f2("div",{className:"color-picker-content--default",style:{position:"relative"},tabIndex:-1,children:[Zc("button",{type:"button",tabIndex:-1,className:"color-picker__button color-picker__button--large color-picker__button--no-focus-visible"}),Zc("div",{tabIndex:-1,style:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",textAlign:"center",fontSize:"0.75rem"},children:h("colorPicker.noShades")})]})};var Xp=(e,o,t)=>{let r=Math.ceil(t/qi);switch(o=o??-1,e){case"ArrowLeft":{let n=o-1;return n<0?t-1:n}case"ArrowRight":return(o+1)%t;case"ArrowDown":{let n=o+qi;return n>=t?o%qi:n}case"ArrowUp":{let n=o-qi,i=n<0?qi*r+n:n;return i>=t?void 0:i}}},V6=({e,colorObj:o,onChange:t,palette:r,customColors:n,setActiveColorPickerSection:i,activeShade:a,excludedColors:l})=>{if(o?.shade!=null&&["Digit1","Digit2","Digit3","Digit4","Digit5"].includes(e.code)&&e.shiftKey){let s=Number(e.code.slice(-1))-1;return t(r[o.colorName][s]),i("shades"),!0}if(["1","2","3","4","5"].includes(e.key)&&n[Number(e.key)-1])return t(n[Number(e.key)-1]),i("custom"),!0;if(Kc.includes(e.key)){let s=Kc.indexOf(e.key),c=Object.keys(r)[s],d=r[c],p=Array.isArray(d)?d[a]:d;return p==null||l?.includes(p)||(t(p),i("baseColors")),!0}return!1},x2=({event:e,activeColorPickerSection:o,palette:t,color:r,onChange:n,customColors:i,setActiveColorPickerSection:a,updateData:l,activeShade:s,onEyeDropperToggle:c,onEscape:d,excludedColors:p})=>{if(e[I.CTRL_OR_CMD])return!1;if(e.key===I.ESCAPE)return d(e),!0;if(e.key===I.ALT)return c(!0),!0;if(e.key===I.I)return c(),!0;let m=wi({color:r,palette:t});if(e.key===I.TAB){let u={custom:!!i.length,baseColors:!0,shades:m?.shade!=null,hex:!0},b=Object.entries(u).reduce((E,[w,T])=>(T&&E.push(w),E),[]),f=b.indexOf(o),x=e.shiftKey?-1:1,v=f+x>b.length-1?0:f+x<0?b.length-1:f+x,y=b[v];return y&&a(y),y==="custom"?n(i[0]):y==="baseColors"&&(Object.entries(t).find(([w,T])=>Array.isArray(T)?T.includes(r):T===r?w:null)||n(Er.charcoal)),e.preventDefault(),e.stopPropagation(),!0}if(V6({e,colorObj:m,onChange:n,palette:t,customColors:i,setActiveColorPickerSection:a,activeShade:s,excludedColors:p}))return!0;if(o==="shades"&&m){let{shade:u}=m,b=Xp(e.key,u,qi);if(b!==void 0)return n(t[m.colorName][b]),!0}if(o==="baseColors"&&m){let{colorName:u}=m,b=Object.keys(t),f=b.indexOf(u),x=Xp(e.key,f,b.length),v=0;for(;x!==void 0&&v++<b.length;){let y=t[b[x]],E=Array.isArray(y)?y[s]:y;if(!p?.includes(E))break;x=Xp(e.key,x,b.length)}if(x!==void 0){let y=b[x],E=t[y];return n(Array.isArray(E)?E[s]:E),!0}}if(o==="custom"){let u=r!=null?i.indexOf(r):0,b=Xp(e.key,u,i.length);if(b!==void 0){let f=i[b];return n(f),!0}}return!1};import{jsx as Ti,jsxs as Zp}from"react/jsx-runtime";var E2=N1.forwardRef(({color:e,onChange:o,type:t,elements:r,palette:n,updateData:i,children:a,showTitle:l,onEyeDropperToggle:s,onEscape:c,showHotKey:d=!0,excludedColors:p},m)=>{let u=l?t==="elementStroke"?h("labels.stroke"):t==="elementBackground"?h("labels.background"):null:null,[b]=N1.useState(()=>t==="canvasBackground"?[]:c2(r,t,n)),[f,x]=re(tr),v=wi({color:e,palette:n});O1(()=>{if(!f){let T=!!e&&_1({color:e,palette:n}),S=T&&!b.includes(e);x(S?null:T?"custom":v?.shade!=null?"shades":"baseColors")}},[f,e,n,x,v,b]);let[y,E]=K6(v?.shade??(t==="elementBackground"?ZE:XE));O1(()=>{v?.shade!=null&&E(v.shade);let T=S=>{S.key===I.ALT&&s(!1)};return document.addEventListener("keyup",T,{capture:!0}),()=>{document.removeEventListener("keyup",T,{capture:!0})}},[v,s]);let w=N1.useRef(null);return Y6(m,()=>w.current),O1(()=>{w?.current?.focus()},[]),Ti("div",{role:"dialog","aria-modal":"true","aria-label":h("labels.colorPicker"),children:Zp("div",{ref:w,onKeyDown:T=>{x2({event:T,activeColorPickerSection:f,palette:n,color:e,onChange:o,onEyeDropperToggle:s,customColors:b,setActiveColorPickerSection:x,updateData:i,activeShade:y,onEscape:c,excludedColors:p})&&(T.preventDefault(),T.stopPropagation())},className:"color-picker-content properties-content",tabIndex:-1,children:[u&&Ti("div",{className:"color-picker__title",children:u}),!!b.length&&Zp("div",{children:[Ti(_l,{children:h("colorPicker.mostUsedCustomColors")}),Ti(h2,{colors:b,color:e,label:h("colorPicker.mostUsedCustomColors"),onChange:o})]}),Zp("div",{children:[Ti(_l,{children:h("colorPicker.colors")}),Ti(g2,{color:e,palette:n,onChange:o,activeShade:y,showHotKey:d,excludedColors:p})]}),Zp("div",{children:[Ti(_l,{children:h("colorPicker.shades")}),Ti(b2,{color:e,onChange:o,palette:n,showHotKey:d})]}),a]})})});import X6 from"clsx";import{jsx as F1}from"react/jsx-runtime";var y2=({onChange:e,type:o,activeColor:t,topPicks:r})=>{let n;return o==="elementStroke"&&(n=cm),o==="elementBackground"&&(n=dm),o==="canvasBackground"&&(n=mm),r&&(n=r),n?F1("div",{className:"color-picker__top-picks",children:n.map(i=>F1("button",{className:X6("color-picker__button",{active:i===t,"is-transparent":i==="transparent"||!i,"has-outline":!Ji(i,Js)}),style:{"--swatch-color":i},type:"button",title:i,onClick:()=>e(i),"data-testid":`color-top-pick-${i}`,children:F1("div",{className:"color-picker__button-outline"})},i))}):(console.error("Invalid type for TopPicks"),null)};import{jsx as or,jsxs as $p}from"react/jsx-runtime";var $6=({type:e,color:o,onChange:t,label:r,elements:n,palette:i=Er,updateData:a,getOpenPopup:l,appState:s,excludedColors:c})=>{let{container:d}=at(),p=Ut(),m=p!=="full",u=p==="mobile",[,b]=re(tr),[f,x]=re(Pn),v=$p("div",{children:[or(_l,{children:h("colorPicker.hexCode")}),or(u2,{color:o||"",label:r,onChange:w=>{t(w)},colorPickerType:e,placeholder:h("colorPicker.color")})]}),y=T2(null),E=()=>{y.current?.focus()};return or(Dn,{container:d,style:{maxWidth:"13rem"},preventAutoFocusOnTouch:!!s.editingTextElement,onFocusOutside:w=>{io(w.target)||E(),w.preventDefault()},onPointerDownOutside:w=>{f&&w.preventDefault()},onClose:()=>{l()===e&&a({openPopup:null}),b(null),s.editingTextElement&&setTimeout(()=>{let w=document.querySelector(".excalidraw-wysiwyg");w&&w.focus()},0)},children:i?or(E2,{ref:y,palette:i,excludedColors:c,color:o,onChange:w=>{let T=s.editingTextElement?Yp():null;t(w),s.editingTextElement&&T&&Vc(T)},onEyeDropperToggle:w=>{x(T=>w?(T=T||{keepOpenOnAlt:!0,onSelect:t,colorPickerType:e},T.keepOpenOnAlt=!0,T):w===!1||T?null:{keepOpenOnAlt:!1,onSelect:t,colorPickerType:e})},onEscape:w=>{f?x(null):a({openPopup:null})},type:e,elements:n,updateData:a,showTitle:m,showHotKey:!u,children:v}):v})},j6=({label:e,color:o,type:t,mode:r="background",onToggle:n,editingTextElement:i})=>{let a=Ut(),l=a!=="full",s=a==="mobile",c=d=>{d.preventDefault(),d.stopPropagation(),i&&s2(),n()};return $p(v2.Trigger,{type:"button",className:w2("color-picker__button active-color properties-trigger",{"is-transparent":!o||o==="transparent","has-outline":!o||!Ji(o,Js),"compact-sizing":l,"mobile-border":s}),"aria-label":e,style:o?{"--swatch-color":o}:void 0,title:t==="elementStroke"?h("labels.showStroke"):h("labels.showBackground"),"data-openpopup":t,onClick:c,children:[or("div",{className:"color-picker__button-outline",children:!o&&$f}),l&&o&&r==="stroke"&&or("div",{className:"color-picker__button-background",children:or("span",{style:{color:o&&Ji(o,Js)?"#fff":"#111"},children:E1})})]})},Pl=({type:e,color:o,onChange:t,label:r,elements:n,palette:i=Er,topPicks:a,updateData:l,appState:s,excludedColors:c})=>{let d=T2(s.openPopup);Z6(()=>{d.current=s.openPopup},[s.openPopup]);let m=Ut()!=="full";return or("div",{children:$p("div",{role:"dialog","aria-modal":"true",className:w2("color-picker-container",{"color-picker-container--no-top-picks":m}),children:[!m&&or(y2,{activeColor:o,onChange:t,type:e,topPicks:a}),!m&&or(Up,{}),$p(v2.Root,{open:s.openPopup===e,onOpenChange:u=>{u&&l({openPopup:e})},children:[or(j6,{color:o,label:r,type:e,mode:e==="elementStroke"?"stroke":"background",editingTextElement:!!s.editingTextElement,onToggle:()=>{s.openPopup===e?l({openPopup:null}):s.openPopup?l({openPopup:e}):l({openPopup:e})}}),s.openPopup===e&&or($6,{type:e,color:o,onChange:t,label:r,elements:n,palette:i,excludedColors:c,updateData:l,getOpenPopup:()=>d.current,appState:s})]})]})})};import{Popover as x4}from"radix-ui";import E4 from"clsx";import y4,{useCallback as v4,useMemo as w4}from"react";import p4,{useMemo as Si,useState as u4,useRef as k2,useEffect as M2,useCallback as A2}from"react";import q6 from"clsx";import J6 from"react";import{jsx as Q6,jsxs as e4}from"react/jsx-runtime";var jp=J6.forwardRef(({className:e,placeholder:o,onChange:t},r)=>e4("div",{className:q6("QuickSearch__wrapper",e),children:[Io,Q6("input",{ref:r,className:"QuickSearch__input",type:"text",placeholder:o,onChange:n=>t(n.target.value.trim().toLowerCase())})]}));import t4 from"clsx";import{Children as o4}from"react";import{jsx as C2}from"react/jsx-runtime";var qp=({className:e,placeholder:o,children:t})=>{let r=!o4.count(t);return C2("div",{className:t4("ScrollableList__wrapper",e),role:"menu",children:r?C2("div",{className:"empty",children:o}):t})};import{jsx as r4,jsxs as n4}from"react/jsx-runtime";var I2=({children:e,className:o="",style:t,title:r})=>n4("div",{className:`dropdown-menu-group ${o}`,style:t,children:[r&&r4("p",{className:"dropdown-menu-group-title",children:r}),e]}),$c=I2;I2.displayName="DropdownMenuGroup";import{DropdownMenu as m4}from"radix-ui";import i4,{useContext as a4}from"react";var B1=i4.createContext({}),Ci=(e="",o=!1,t=!1)=>`dropdown-menu-item dropdown-menu-item-base ${e} ${o?"dropdown-menu-item--selected":""} ${t?"dropdown-menu-item--hovered":""}`.trim(),Jp=e=>{let o=a4(B1);return oi(e,t=>{o.onSelect?.(t)})};import{jsx as l4}from"react/jsx-runtime";var va=({children:e,...o})=>l4("span",{...o,style:{textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap",...o.style},children:e});import{Fragment as c4,jsx as jc,jsxs as d4}from"react/jsx-runtime";var s4=({textStyle:e,icon:o,shortcut:t,children:r,badge:n})=>{let i=Me();return d4(c4,{children:[o&&jc("div",{className:"dropdown-menu-item__icon",children:o}),jc("div",{style:e,className:"dropdown-menu-item__text",children:jc(va,{children:r})}),n&&jc("div",{className:"dropdown-menu-item__badge",children:n}),t&&i.formFactor!=="phone"&&jc("div",{className:"dropdown-menu-item__shortcut",children:t})]})},Ii=s4;import{jsx as Qp}from"react/jsx-runtime";var z1=({icon:e,badge:o,value:t,children:r,shortcut:n,className:i,selected:a,onSelect:l,...s})=>{let c=Jp(l);return Qp(m4.Item,{className:"radix-menu-item",onSelect:c,asChild:!0,children:Qp("button",{...s,value:t,className:Ci(i,a),title:s.title??s["aria-label"],children:Qp(Ii,{icon:e,shortcut:n,badge:o,children:r})})})};z1.displayName="DropdownMenuItem";var Dl={GREEN:"green",RED:"red",BLUE:"blue"},eu=({type:e=Dl.BLUE,children:o})=>{let{theme:t}=jr(),r={display:"inline-flex",marginLeft:"auto",padding:"2px 4px",borderRadius:6,fontSize:9,fontFamily:"Cascadia, monospace",border:t===te.LIGHT?"1.5px solid white":"none"};switch(e){case Dl.GREEN:Object.assign(r,{backgroundColor:"var(--background-color-badge)",color:"var(--color-badge)"});break;case Dl.RED:Object.assign(r,{backgroundColor:"pink",color:"darkred"});break;case Dl.BLUE:default:Object.assign(r,{background:"var(--color-promo)",color:"var(--color-surface-lowest)"})}return Qp("div",{className:"DropDownMenuItemBadge",style:r,children:o})};eu.displayName="DropdownMenuItemBadge";z1.Badge=eu;var go=z1;var S2=({event:e,inputRef:o,hoveredFont:t,filteredFonts:r,onClose:n,onSelect:i,onHover:a})=>{if(!e[I.CTRL_OR_CMD]&&e.shiftKey&&e.key.toLowerCase()===I.F)return o.current?.focus(),!0;if(e.key===I.ESCAPE)return n(),!0;if(e.key===I.ENTER)return t?.value&&i(t.value),!0;if(e.key===I.ARROW_DOWN)return t?.next?a(t.next.value):r[0]?.value&&a(r[0].value),!0;if(e.key===I.ARROW_UP)return t?.prev?a(t.prev.value):r[r.length-1]?.value&&a(r[r.length-1].value),!0};import{jsx as Rn,jsxs as f4}from"react/jsx-runtime";var h4=e=>{switch(e){case st.Excalifont:case st.Virgil:return Sn;case st.Nunito:case st.Helvetica:return Sl;case st["Lilita One"]:return Nb;case st["Comic Shanns"]:case st.Cascadia:return Oc;default:return Sl}},g4=(e,o)=>Object.entries(st).find(([,t])=>t===e)?.[0]??o[0]?.fontFace?.family??"Unknown",L2=p4.memo(({selectedFontFamily:e,hoveredFontFamily:o,onSelect:t,onHover:r,onLeave:n,onOpen:i,onClose:a})=>{let{container:l}=at(),s=Ke(),{fonts:c}=s,{showDeprecatedFonts:d}=Sr(),p=Ut(),[m,u]=u4(""),b=k2(null),f=Si(()=>Array.from(Cn.registered.entries()).filter(([D,{metadata:O}])=>!O.private&&!O.fallback).map(([D,{metadata:O,fontFaces:V}])=>{let K={value:D,icon:h4(D),text:g4(D,V)};return O.deprecated&&Object.assign(K,{deprecated:O.deprecated,badge:{type:Dl.RED,placeholder:h("fontList.badge.old")}}),K}).sort((D,O)=>D.text.toLowerCase()>O.text.toLowerCase()?1:-1),[]),x=Si(()=>new Set(c.getSceneFamilies()),[e]),v=Si(()=>f.filter(D=>x.has(D.value)),[f,x]),y=Si(()=>f.filter(D=>!x.has(D.value)&&(d||!D.deprecated)),[f,x,d]),E=Si(()=>xy([...v,...y].filter(D=>D.text?.toLowerCase().includes(m))),[v,y,m]),w=Si(()=>{let D;return o?D=E.find(O=>O.value===o):e&&(D=E.find(O=>O.value===e)),!D&&m&&(E[0]?.value?r(E[0].value):n()),D},[o,e,m,E,r,n]),T=A2(D=>{let O=null;if(s.state.editingTextElement){let V=document.querySelector(".excalidraw-wysiwyg");V&&(O={start:V.selectionStart,end:V.selectionEnd})}t(D),s.state.editingTextElement&&O&&setTimeout(()=>{let V=document.querySelector(".excalidraw-wysiwyg");V&&O&&(V.focus(),V.selectionStart=O.start,V.selectionEnd=O.end)},0)},[t,s.state.editingTextElement]),S=A2(D=>{S2({event:D,inputRef:b,hoveredFont:w,filteredFonts:E,onSelect:T,onHover:r,onClose:a})&&(D.preventDefault(),D.stopPropagation())},[w,E,T,r,a]);M2(()=>(i(),()=>{a()}),[]);let _=Si(()=>E.filter(D=>x.has(D.value)),[E,x]),M=Si(()=>E.filter(D=>!x.has(D.value)),[E,x]),N=({font:D,order:O})=>{let V=k2(null),K=D.value===w?.value,z=D.value===e;return M2(()=>{K&&(O===0?V.current?.scrollIntoView?.({block:"end"}):V.current?.scrollIntoView?.({block:"nearest"}))},[K,O]),Rn("button",{ref:V,type:"button",value:D.value,className:Ci("",z,K),title:D.text,tabIndex:z?0:-1,onClick:J=>{T(Number(J.currentTarget.value))},onMouseMove:()=>{w?.value!==D.value&&r(D.value)},children:Rn(Ii,{icon:D.icon,badge:D.badge&&Rn(eu,{type:D.badge.type,children:D.badge.placeholder}),textStyle:{fontFamily:ea({fontFamily:D.value})},children:D.text})})},L=[];return _.length&&L.push(Rn($c,{title:h("fontList.sceneFonts"),children:_.map((D,O)=>Rn(N,{font:D,order:O},D.value))},"group_1")),M.length&&L.push(Rn($c,{title:h("fontList.availableFonts"),children:M.map((D,O)=>Rn(N,{font:D,order:O+_.length},D.value))},"group_2")),f4(Dn,{className:"properties-content",container:l,style:{width:"15rem"},onClose:()=>{a(),s.state.editingTextElement&&setTimeout(()=>{let D=document.querySelector(".excalidraw-wysiwyg");D&&D.focus()},0)},onPointerLeave:n,onKeyDown:S,preventAutoFocusOnTouch:!!s.state.editingTextElement,children:[p==="full"&&Rn(jp,{ref:b,placeholder:h("quickSearch.placeholder"),onChange:fn(u,20)}),Rn(qp,{className:"dropdown-menu fonts manual-hover",placeholder:h("fontList.empty"),children:L.length?L:null})]})},(e,o)=>e.selectedFontFamily===o.selectedFontFamily&&e.hoveredFontFamily===o.hoveredFontFamily);import{Popover as b4}from"radix-ui";import{jsx as H1}from"react/jsx-runtime";var _2=({selectedFontFamily:e,isOpened:o=!1,compactMode:t=!1})=>{let r=Ie(),n=t?{...un,width:"2rem",height:"2rem"}:{};return H1(b4.Trigger,{asChild:!0,children:H1("div",{"data-openpopup":"fontFamily",className:"properties-trigger",children:H1(q,{type:"toggle",icon:$r,title:h("labels.showFonts"),"aria-label":h("labels.showFonts"),className:"standalone properties-trigger","data-testid":"font-family-show-fonts",checked:o,onSelect:()=>{r(i=>({openPopup:i.openPopup==="fontFamily"?null:i.openPopup}))},style:{border:"none",...n}})})})};import{jsx as qc,jsxs as P2}from"react/jsx-runtime";var D2=[{value:st.Excalifont,icon:Sn,text:h("labels.handDrawn"),testId:"font-family-hand-drawn"},{value:st.Nunito,icon:Sl,text:h("labels.normal"),testId:"font-family-normal"},{value:st["Comic Shanns"],icon:Oc,text:h("labels.code"),testId:"font-family-code"}],rG=new Set(D2.map(e=>e.value));var R2=y4.memo(({isOpened:e,selectedFontFamily:o,hoveredFontFamily:t,onSelect:r,onHover:n,onLeave:i,onPopupChange:a,compactMode:l=!1})=>{let s=w4(()=>D2,[]),c=v4(d=>{d&&r(d)},[r]);return P2("div",{role:"dialog","aria-modal":"true",className:E4("FontPicker__container",{"FontPicker__container--compact":l}),children:[!l&&qc("div",{className:"buttonList",children:qc(Oo,{type:"button",options:s,value:o,onClick:c})}),!l&&qc(Up,{}),P2(x4.Root,{open:e,onOpenChange:a,children:[qc(_2,{selectedFontFamily:o,isOpened:e,compactMode:l}),e&&qc(L2,{selectedFontFamily:o,hoveredFontFamily:t,onSelect:c,onHover:n,onLeave:i,onOpen:()=>a(!0),onClose:()=>a(!1)})]})]})},(e,o)=>e.isOpened===o.isOpened&&e.selectedFontFamily===o.selectedFontFamily&&e.hoveredFontFamily===o.hoveredFontFamily);import{Popover as U1}from"radix-ui";import S4 from"clsx";import B2,{useEffect as k4,useMemo as M4}from"react";import{jsx as T4}from"react/jsx-runtime";var qr=({className:e,icon:o,size:t="1em"})=>T4("span",{className:e,style:{width:t,height:"100%",margin:"0 0.5ex 0 0.5ex",display:"inline-flex",lineHeight:0,verticalAlign:"middle",flex:"0 0 auto"},children:o});import{Fragment as I4,jsx as N2,jsxs as O2}from"react/jsx-runtime";var C4=({label:e,open:o,openTrigger:t,children:r,className:n,showCollapsedIcon:i=!0})=>O2(I4,{children:[O2("div",{style:{cursor:"pointer",display:"flex",justifyContent:"space-between",alignItems:"center"},className:n,onClick:t,children:[e,i&&N2(qr,{icon:o?f1:Hc})]}),o&&N2("div",{style:{display:"flex",flexDirection:"column"},children:r})]}),Jc=C4;import{jsx as Jr,jsxs as ou}from"react/jsx-runtime";var A4=Ce(!1),tu=4,L4="default",_4=e=>e.flatMap(o=>o.options),F2=(e,o)=>{for(let t of e){let r=t.options.find(o);if(r)return r}return null},P4=(e,o)=>e.some(t=>t.options.some(o)),D4=e=>e.flatMap(o=>Array.from({length:Math.ceil(o.options.length/tu)},(t,r)=>o.options.slice(r*tu,r*tu+tu)));function R4({visibleSections:e,hiddenSections:o=[],value:t,label:r,onChange:n,onClose:i}){let{container:a}=at(),[l,s]=re(A4),c=[...e,...o],d=_4(c),p=D4([...e,...l?o:[]]),m=f=>{let x=d.find(v=>v.keyBinding===f.key.toLowerCase());if(!(f.metaKey||f.altKey||f.ctrlKey)&&x)n(x.value),f.preventDefault();else if(f.key===I.TAB){let v=d.findIndex(E=>E.value===t),y=f.shiftKey?(d.length+v-1)%d.length:(v+1)%d.length;n(d[y].value)}else if(Qn(f.key)){let v=Zr().rtl,y=d.findIndex(E=>E.value===t);if(y!==-1){let E=d.length,w=y;switch(f.key){case(v?I.ARROW_LEFT:I.ARROW_RIGHT):w=(y+1)%E;break;case(v?I.ARROW_RIGHT:I.ARROW_LEFT):w=(E+y-1)%E;break;case I.ARROW_DOWN:{let T=p.findIndex(_=>_.some(M=>M.value===t)),S=p[T];if(T!==-1&&S){let _=S.findIndex(L=>L.value===t),M=p[(T+1)%p.length],N=M[Math.min(_,M.length-1)]??d[y];n(N.value),f.preventDefault(),f.nativeEvent.stopImmediatePropagation(),f.stopPropagation();return}break}case I.ARROW_UP:{let T=p.findIndex(_=>_.some(M=>M.value===t)),S=p[T];if(T!==-1&&S){let _=S.findIndex(L=>L.value===t),M=p[(p.length+T-1)%p.length],N=M[Math.min(_,M.length-1)]??d[y];n(N.value),f.preventDefault(),f.nativeEvent.stopImmediatePropagation(),f.stopPropagation();return}break}}n(d[w].value)}f.preventDefault()}else(f.key===I.ESCAPE||f.key===I.ENTER)&&(f.preventDefault(),i());f.nativeEvent.stopImmediatePropagation(),f.stopPropagation()};k4(()=>{P4(o,f=>f.value===t)&&s(!0)},[t,o,s]);let u=f=>Jr("div",{className:"picker-content",children:f.map(x=>ou("button",{type:"button",className:S4("picker-option",{active:t===x.value}),onClick:()=>{n(x.value)},title:x.keyBinding?`${x.text} \u2014 ${x.keyBinding.toUpperCase()}`:x.text,"aria-label":x.text||"none","aria-keyshortcuts":x.keyBinding||void 0,ref:v=>{t===x.value&&setTimeout(()=>{v?.focus()},0)},children:[x.icon,x.keyBinding&&Jr("span",{className:"picker-keybinding",children:x.keyBinding})]},x.text))}),b=f=>f.map((x,v)=>x.name===L4?Jr(B2.Fragment,{children:u(x.options)},`${x.name}-${v}`):ou("div",{className:"picker-section",children:[Jr("div",{className:"picker-section-label",children:x.name}),u(x.options)]},`${x.name}-${v}`));return Jr(U1.Content,{className:"picker",role:"dialog","aria-modal":"true","aria-label":r,side:"bottom",align:"start",sideOffset:12,alignOffset:12,style:{zIndex:"var(--zIndex-ui-styles-popup)"},onKeyDown:m,collisionBoundary:a??void 0,children:ou("div",{className:"picker-sections",children:[b(e),o.length>0&&Jr(Jc,{label:h("labels.more_options"),open:l,openTrigger:()=>{s(f=>!f)},className:"picker-collapsible",children:Jr("div",{className:"picker-sections",children:b(o)})})]})})}function G1({value:e,label:o,visibleSections:t,hiddenSections:r,onChange:n}){let[i,a]=B2.useState(!1),l=M4(()=>F2(t,s=>s.value===e)??F2(r??[],s=>s.value===e),[t,r,e]);return Jr("div",{children:ou(U1.Root,{open:i,onOpenChange:s=>a(s),children:[Jr(U1.Trigger,{type:"button","aria-label":o,onClick:()=>a(!i),className:i?"active":"",children:l?.icon}),i&&Jr(R4,{visibleSections:t,hiddenSections:r,value:e,label:o,onChange:n,onClose:()=>{a(!1)}})]})})}import z2,{useEffect as N4}from"react";import{jsx as W1,jsxs as H2}from"react/jsx-runtime";var U2=({label:e,value:o,onChange:t,min:r=0,max:n=100,step:i=10,minLabel:a=r,hasCommonValue:l=!0,testId:s})=>{let c=z2.useRef(null),d=z2.useRef(null);return N4(()=>{if(c.current&&d.current){let p=c.current,m=d.current,u=p.offsetWidth,b=parseFloat(getComputedStyle(p).getPropertyValue("--slider-thumb-size"))||16,f=(o-r)/(n-r||1)*100,x=f/100*(u-b)+b/2;m.style.left=`${x}px`,p.style.background=`linear-gradient(to right, var(--color-slider-track) 0%, var(--color-slider-track) ${f}%, var(--button-bg) ${f}%, var(--button-bg) 100%)`}},[n,r,o]),H2("label",{className:"control-label",children:[e,H2("div",{className:"range-wrapper",children:[W1("input",{style:{"--color-slider-track":l?void 0:"var(--button-bg)"},ref:c,type:"range",min:r,max:n,step:i,onChange:p=>{t(+p.target.value)},value:o,className:"range-input","data-testid":s}),W1("div",{className:"value-bubble",ref:d,children:o!==r?o:null}),W1("div",{className:"zero-label",children:a})]})]})};import{Fragment as ru,jsx as ae,jsxs as to}from"react/jsx-runtime";var W2=.1,wa=e=>{let o=Qi(e.editorInterface);return{stylesPanelMode:o,isCompact:o!=="full",isMobile:o==="mobile"}},so=(e,o,t,r=!1)=>{let n=ne(ie(e,o,{includeBoundTextElement:r}));return e.map(i=>n.get(i.id)||i.id===o.editingTextElement?.id?(Jo(i)||console.error("[NONDELETED][INVARIANT] changeProperty(): skipping deleted selected/editing element"),t(i)):i)},Xt=function(e,o,t,r,n){let i=o.state.editingTextElement,a=de(e),l=null;if(i&&(l=t(i)),!l)if(Ge(a,o.state)){let c=o.scene.getSelectedElements(o.state),d=r===!0?c:c.filter(p=>r(p));l=xm(d,t)??(typeof n=="function"?n(!0):n)}else l=typeof n=="function"?n(!1):n;return l},F4=(e,o,t)=>xt(o)||!o.autoResize?o:t.mutateElement(o,{x:e.textAlign==="left"?e.x:e.x+(e.width-o.width)/(e.textAlign==="center"?2:1),y:e.y+(e.height-o.height)/2}),X1=(e,o,t,r,n)=>{let i=new Set,a=so(e,o,l=>{if(j(l)){let s=r(l);i.add(s);let c=se(l,{fontSize:s});return It(c,t.scene.getContainerElement(l),t.scene),c=F4(l,c,t.scene),c}return l},!0);return ie(e,o,{includeBoundTextElement:!0}).forEach(l=>{j(l)&&wo(l,t.scene)}),{elements:a,appState:{...o,currentItemFontSize:i.size===1?[...i][0]:n??o.currentItemFontSize},captureUpdate:R.IMMEDIATELY}},V2=U({name:"changeStrokeColor",label:"labels.stroke",trackEvent:!1,perform:(e,o,t)=>({...t?.currentItemStrokeColor&&{elements:so(e,o,r=>dc(r.type)?se(r,{strokeColor:t.currentItemStrokeColor}):r,!0)},appState:{...o,...t},captureUpdate:t?.currentItemStrokeColor?R.IMMEDIATELY:R.EVENTUALLY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r,data:n})=>{let{stylesPanelMode:i}=wa(r);return to(ru,{children:[i==="full"&&ae("h3",{"aria-hidden":"true",children:h("labels.stroke")}),ae(Pl,{topPicks:cm,palette:jE,type:"elementStroke",label:h("labels.stroke"),color:Xt(e,r,a=>a.strokeColor,!0,a=>a?null:o.currentItemStrokeColor),onChange:a=>t({currentItemStrokeColor:a}),elements:e,appState:o,updateData:t})]})}}),Y2=U({name:"changeBackgroundColor",label:"labels.changeBackground",trackEvent:!1,perform:(e,o,t,r)=>{if(!t?.currentItemBackgroundColor)return{appState:{...o,...t},captureUpdate:R.EVENTUALLY};let n,i=r.scene.getSelectedElements(o);if(!hn(t.currentItemBackgroundColor)&&i.every(l=>nt(l)&&Ry(l.points))){let l=ne(i);n=e.map(s=>l.has(s.id)&&nt(s)?se(s,{backgroundColor:t.currentItemBackgroundColor,...Hm(s,!0)}):s)}else n=so(e,o,l=>se(l,{backgroundColor:t.currentItemBackgroundColor}));return{elements:n,appState:{...o,...t},captureUpdate:R.IMMEDIATELY}},PanelComponent:({elements:e,appState:o,updateData:t,app:r,data:n})=>{let{stylesPanelMode:i}=wa(r);return to(ru,{children:[i==="full"&&ae("h3",{"aria-hidden":"true",children:h("labels.background")}),ae(Pl,{topPicks:dm,palette:Fg,type:"elementBackground",label:h("labels.background"),color:Xt(e,r,a=>a.backgroundColor,!0,a=>a?null:o.currentItemBackgroundColor),onChange:a=>t({currentItemBackgroundColor:a}),elements:e,appState:o,updateData:t})]})}}),K2=U({name:"changeBucketFillBackgroundColor",label:"labels.changeBackground",trackEvent:!1,perform:(e,o,t)=>({appState:{...o,...t},captureUpdate:R.EVENTUALLY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>{let{stylesPanelMode:n}=wa(r);return to(ru,{children:[n==="full"&&ae("h3",{"aria-hidden":"true",children:h("labels.background")}),ae(Pl,{topPicks:$E,palette:Fg,excludedColors:[Er.transparent],type:"elementBackground",label:h("labels.background"),color:qs(o.currentItemBackgroundColor),onChange:i=>t({currentItemBackgroundColor:i}),elements:e,appState:o,updateData:t})]})}}),X2=U({name:"changeFillStyle",label:"labels.fill",trackEvent:!1,perform:(e,o,t,r)=>(xe("element","changeFillStyle",`${t} (${r.editorInterface.formFactor==="phone"?"mobile":"desktop"})`),{elements:so(e,o,n=>se(n,{fillStyle:t})),appState:{...o,currentItemFillStyle:t},captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>{let n=ie(e,o),i=n.length>0&&n.every(a=>a.fillStyle==="zigzag");return to("fieldset",{children:[ae("legend",{children:h("labels.fill")}),ae("div",{className:"buttonList",children:ae(Oo,{type:"button",options:[{value:"hachure",text:`${i?h("labels.zigzag"):h("labels.hachure")} (${H("Alt-Click")})`,icon:i?rb:nb,active:i?!0:void 0,testId:"fill-hachure"},{value:"cross-hatch",text:h("labels.crossHatch"),icon:ib,testId:"fill-cross-hatch"},{value:"solid",text:h("labels.solid"),icon:ab,testId:"fill-solid"}],value:Xt(e,r,a=>a.fillStyle,a=>a.hasOwnProperty("fillStyle"),a=>a?null:o.currentItemFillStyle),onClick:(a,l)=>{let s=l.altKey&&a==="hachure"&&n.every(c=>c.fillStyle==="hachure")?"zigzag":a;t(s)}})})]})}}),B4=e=>zE.find(o=>Br(e.type,o)===e.strokeWidth)??null,z4=(e,o)=>Br(e.type,o),Z2=U({name:"changeStrokeWidth",label:"labels.strokeWidth",trackEvent:!1,perform:(e,o,t)=>(Qe(t,"actionChangeStrokeWidth: value must be defined"),{elements:so(e,o,r=>se(r,{strokeWidth:z4(r,t)})),appState:{...o,currentItemStrokeWidthKey:t},captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r,data:n})=>to("fieldset",{children:[ae("legend",{children:h("labels.strokeWidth")}),ae("div",{className:"buttonList",children:ae(Oo,{group:"stroke-width",options:[{value:"thin",text:h("labels.thin"),icon:Ip,testId:"strokeWidth-thin"},{value:"medium",text:h("labels.medium"),icon:lb,testId:"strokeWidth-medium"},{value:"bold",text:h("labels.bold"),icon:sb,testId:"strokeWidth-bold"}],value:Xt(e,r,B4,i=>i.hasOwnProperty("strokeWidth"),i=>i?null:o.currentItemStrokeWidthKey),onChange:i=>t(i)})})]})}),$2=U({name:"changeSloppiness",label:"labels.sloppiness",trackEvent:!1,perform:(e,o,t)=>({elements:so(e,o,r=>se(r,{seed:bn(),roughness:t})),appState:{...o,currentItemRoughness:t},captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r,data:n})=>to("fieldset",{children:[ae("legend",{children:h("labels.sloppiness")}),ae("div",{className:"buttonList",children:ae(Oo,{group:"sloppiness",options:[{value:0,text:h("labels.architect"),icon:mb},{value:1,text:h("labels.artist"),icon:pb},{value:2,text:h("labels.cartoonist"),icon:ub}],value:Xt(e,r,i=>i.roughness,i=>i.hasOwnProperty("roughness"),i=>i?null:o.currentItemRoughness),onChange:i=>t(i)})})]})}),j2=U({name:"changeFreedrawMode",label:"labels.pressure",trackEvent:!1,perform:(e,o,t)=>{let r=t||"constant";return{elements:so(e,o,n=>n.type!=="freedraw"?n:se(n,{strokeOptions:{...n.strokeOptions,variability:r}})),appState:{...o,currentItemStrokeVariability:r},captureUpdate:R.IMMEDIATELY}},PanelComponent:({elements:e,appState:o,updateData:t,app:r,data:n})=>{let i=Xt(e,r,a=>a.strokeOptions?.variability,a=>a.type==="freedraw",a=>a?null:o.currentItemStrokeVariability)??o.currentItemStrokeVariability;if(n?.cycle){let a=i==="variable";return ae(q,{type:"button",icon:a?kp:Sp,title:h("labels.pressure"),"aria-label":h("labels.pressure"),onClick:()=>t(a?"constant":"variable")})}return to("fieldset",{children:[ae("legend",{children:h("labels.pressure")}),ae("div",{className:"buttonList",children:ae(Oo,{group:"strokeOptions.variability",options:[{value:"constant",text:h("labels.pressure_constant"),icon:Sp},{value:"variable",text:h("labels.pressure_variable"),icon:kp}],value:i,onChange:a=>t(a)})})]})}}),cW=U({name:"changeStrokeStyle",label:"labels.strokeStyle",trackEvent:!1,perform:(e,o,t)=>({elements:so(e,o,r=>se(r,{strokeStyle:t})),appState:{...o,currentItemStrokeStyle:t},captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r,data:n})=>to("fieldset",{children:[ae("legend",{children:h("labels.strokeStyle")}),ae("div",{className:"buttonList",children:ae(Oo,{group:"strokeStyle",options:[{value:"solid",text:h("labels.strokeStyle_solid"),icon:Ip},{value:"dashed",text:h("labels.strokeStyle_dashed"),icon:cb},{value:"dotted",text:h("labels.strokeStyle_dotted"),icon:db}],value:Xt(e,r,i=>i.strokeStyle,i=>i.hasOwnProperty("strokeStyle"),i=>i?null:o.currentItemStrokeStyle),onChange:i=>t(i)})})]})}),q2=U({name:"changeOpacity",label:"labels.opacity",trackEvent:!1,perform:(e,o,t)=>({elements:so(e,o,r=>se(r,{opacity:t}),!0),appState:{...o,currentItemOpacity:t},captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,app:t,updateData:r})=>{let n=Xt(e,t,i=>i.opacity,!0,i=>i?null:o.currentItemOpacity);return ae(U2,{label:h("labels.opacity"),value:n??o.currentItemOpacity,hasCommonValue:n!==null,onChange:r,min:0,max:100,step:10,testId:"opacity"})}}),J2=U({name:"changeFontSize",label:"labels.fontSize",trackEvent:!1,perform:(e,o,t,r)=>X1(e,o,r,()=>(Qe(t,"actionChangeFontSize: Expected a font size value"),t),t),PanelComponent:({elements:e,appState:o,updateData:t,app:r,data:n})=>{let{isCompact:i}=wa(r);return to("fieldset",{children:[ae("legend",{children:h("labels.fontSize")}),ae("div",{className:"buttonList",children:ae(Oo,{group:"font-size",options:[{value:Wo.sm,text:h("labels.small"),icon:_b,testId:"fontSize-small"},{value:Wo.md,text:h("labels.medium"),icon:Pb,testId:"fontSize-medium"},{value:Wo.lg,text:h("labels.large"),icon:Db,testId:"fontSize-large"},{value:Wo.xl,text:h("labels.veryLarge"),icon:Rb,testId:"fontSize-veryLarge"}],value:Xt(e,r,a=>{if(j(a))return a.fontSize;let l=we(a,r.scene.getNonDeletedElementsMap());return l?l.fontSize:null},a=>j(a)||we(a,r.scene.getNonDeletedElementsMap())!==null,a=>a?null:o.currentItemFontSize||Zn),onChange:a=>{Yc(()=>t(a),i,!!o.editingTextElement,n?.onPreventClose)}})})]})}}),Z1=U({name:"decreaseFontSize",label:"labels.decreaseFontSize",icon:bi,trackEvent:!1,perform:(e,o,t,r)=>X1(e,o,r,n=>Math.round(1/(1+W2)*n.fontSize)),keyTest:e=>e[I.CTRL_OR_CMD]&&e.shiftKey&&(e.key===I.CHEVRON_LEFT||e.key===I.COMMA)}),$1=U({name:"increaseFontSize",label:"labels.increaseFontSize",icon:bi,trackEvent:!1,perform:(e,o,t,r)=>X1(e,o,r,n=>Math.round(n.fontSize*(1+W2))),keyTest:e=>e[I.CTRL_OR_CMD]&&e.shiftKey&&(e.key===I.CHEVRON_RIGHT||e.key===I.PERIOD)}),Q2=U({name:"changeFontFamily",label:"labels.fontFamily",trackEvent:!1,perform:(e,o,t,r)=>{let{cachedElements:n,resetAll:i,resetContainers:a,...l}=t;if(i)return{elements:so(e,o,f=>{let x=n?.get(f.id);return x?se(f,{...x}):f},!0),appState:{...o,...l},captureUpdate:R.NEVER};Qe(t,"actionChangeFontFamily: value must be defined");let{currentItemFontFamily:s,currentHoveredFontFamily:c}=t,d=R.EVENTUALLY,p,m=!1;if(s)p=s,d=R.IMMEDIATELY;else if(c){p=c,d=R.EVENTUALLY;let b=ie(e,o,{includeBoundTextElement:!0}).filter(f=>j(f));if(b.length>200)m=!0;else{let f=0,x=0;for(;f<b.length&&x<5e3;){let v=b[f];x+=v?.originalText.length||0,f++}x>5e3&&(m=!0)}}let u={appState:{...o,...l},captureUpdate:d};if(p&&!m){let b=new Map,f=new Set,x=!1,v=Array.from(Cn.loadedFontsCache.values()),y=Object.entries(st).find(([T,S])=>S===p)?.[0];c&&y&&v.some(T=>T.startsWith(y))&&(x=!0),Object.assign(u,{elements:so(e,o,T=>{if(j(T)&&(T.fontFamily!==p||s)){let S=se(T,{fontFamily:p,lineHeight:po(p)}),_=n?.get(T.containerId||"")||{},M=r.scene.getContainerElement(T);return a&&M&&_&&r.scene.mutateElement(M,{..._}),x||(f=new Set([...f,...Array.from(S.originalText)])),b.set(S,M),S}return T},!0)});let E=`10px ${ea({fontFamily:p})}`,w=Array.from(f.values()).join();if(x||window.document.fonts.check(E,w))for(let[T,S]of b)It(T,S,r.scene);else window.document.fonts.load(E,w).then(T=>{for(let[S,_]of b){let M=r.scene.getElement(S.id),N=_?r.scene.getElement(_.id):null;M&&It(M,N,r.scene)}r.fonts.onLoaded(T)})}return u},PanelComponent:({elements:e,appState:o,app:t,updateData:r})=>{let n=Y1(new Map),i=Y1(null),[a,l]=O4({}),s=Y1(!0),{stylesPanelMode:c,isCompact:d}=wa(t),p=K1(()=>{let m=(u,b)=>Xt(u,t,f=>{if(j(f))return f.fontFamily;let x=we(f,b);return x?x.fontFamily:null},f=>j(f)||we(f,b)!==null,f=>f?null:o.currentItemFontFamily||Ka);return a.openPopup==="fontFamily"&&o.openPopup==="fontFamily"?m(Array.from(n.current?.values()??[]),n.current):!a.openPopup&&o.openPopup!=="fontFamily"?m(e,t.scene.getNonDeletedElementsMap()):i.current},[a.openPopup,o,e,t]);return V1(()=>{i.current=p},[p]),V1(()=>{Object.keys(a).length&&(r(a),l({}))},[a]),V1(()=>(s.current=!1,()=>{s.current=!0}),[]),to(ru,{children:[c==="full"&&ae("legend",{children:h("labels.fontFamily")}),ae(R2,{isOpened:o.openPopup==="fontFamily",selectedFontFamily:p,hoveredFontFamily:o.currentHoveredFontFamily,compactMode:c!=="full",onSelect:m=>{Yc(()=>{l({openPopup:null,currentHoveredFontFamily:null,currentItemFontFamily:m}),n.current.clear()},d,!!o.editingTextElement)},onHover:m=>{l({currentHoveredFontFamily:m,cachedElements:new Map(n.current),resetContainers:!0})},onLeave:()=>{l({currentHoveredFontFamily:null,cachedElements:new Map(n.current),resetAll:!0})},onPopupChange:m=>{if(m){n.current.clear();let{editingTextElement:u}=o;if(u?.type==="text"){let b=t.scene.getElement(u.id);n.current.set(u.id,se(b||u,{},!0))}else{let b=ie(e,o,{includeBoundTextElement:!0});for(let f of b)n.current.set(f.id,se(f,{},!0))}l({...a,openPopup:"fontFamily"})}else{let u={currentHoveredFontFamily:null,cachedElements:new Map(n.current),resetAll:!0};l({...u}),n.current.clear(),d&&o.editingTextElement&&Vc(null)}}})]})}}),eT=U({name:"changeTextAlign",label:"Change text alignment",trackEvent:!1,perform:(e,o,t,r)=>({elements:so(e,o,n=>{if(j(n)){let i=se(n,{textAlign:t});return It(i,r.scene.getContainerElement(n),r.scene),i}return n},!0),appState:{...o,currentItemTextAlign:t},captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r,data:n})=>{let i=r.scene.getNonDeletedElementsMap(),{isCompact:a}=wa(r);return to("fieldset",{children:[ae("legend",{children:h("labels.textAlign")}),ae("div",{className:"buttonList",children:ae(Oo,{group:"text-align",options:[{value:"left",text:h("labels.left"),icon:Ob,testId:"align-left"},{value:"center",text:h("labels.center"),icon:Fb,testId:"align-horizontal-center"},{value:"right",text:h("labels.right"),icon:Bb,testId:"align-right"}],value:Xt(e,r,l=>{if(j(l))return l.textAlign;let s=we(l,i);return s?s.textAlign:null},l=>j(l)||we(l,i)!==null,l=>l?null:o.currentItemTextAlign),onChange:l=>{Yc(()=>t(l),a,!!o.editingTextElement,n?.onPreventClose)}})})]})}}),tT=U({name:"changeVerticalAlign",label:"Change vertical alignment",trackEvent:{category:"element"},perform:(e,o,t,r)=>({elements:so(e,o,n=>{if(j(n)){let i=se(n,{verticalAlign:t});return It(i,r.scene.getContainerElement(n),r.scene),i}return n},!0),appState:{...o},captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r,data:n})=>{let{isCompact:i}=wa(r);return ae("fieldset",{children:ae("div",{className:"buttonList",children:ae(Oo,{group:"text-align",options:[{value:Vo.TOP,text:h("labels.alignTop"),icon:ae(zb,{theme:o.theme}),testId:"align-top"},{value:Vo.MIDDLE,text:h("labels.centerVertically"),icon:ae(Ub,{theme:o.theme}),testId:"align-middle"},{value:Vo.BOTTOM,text:h("labels.alignBottom"),icon:ae(Hb,{theme:o.theme}),testId:"align-bottom"}],value:Xt(e,r,a=>{if(j(a)&&a.containerId)return a.verticalAlign;let l=we(a,r.scene.getNonDeletedElementsMap());return l?l.verticalAlign:null},a=>j(a)||we(a,r.scene.getNonDeletedElementsMap())!==null,a=>a?null:Vo.MIDDLE),onChange:a=>{Yc(()=>t(a),i,!!o.editingTextElement,n?.onPreventClose)}})})})}}),dW=U({name:"changeRoundness",label:"Change edge roundness",trackEvent:!1,perform:(e,o,t)=>({elements:so(e,o,r=>Re(r)?r:se(r,{roundness:t==="round"?{type:ni(r.type)?Mt.ADAPTIVE_RADIUS:Mt.PROPORTIONAL_RADIUS}:null})),appState:{...o,currentItemRoundness:t},captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r,renderAction:n})=>{let a=il(de(e),o).some(l=>l.roundness?.type===Mt.LEGACY);return to("fieldset",{children:[ae("legend",{children:h("labels.edges")}),to("div",{className:"buttonList",children:[ae(Oo,{group:"edges",options:[{value:"sharp",text:h("labels.sharp"),icon:hb},{value:"round",text:h("labels.round"),icon:gb}],value:Xt(e,r,l=>a?null:l.roundness?"round":"sharp",l=>!ve(l)&&l.hasOwnProperty("roundness"),l=>l?null:o.currentItemRoundness),onChange:l=>t(l)}),n("togglePolygon")]})]})}}),G2=e=>({visibleSections:[{name:"default",options:[{value:null,text:h("labels.arrowhead_none"),keyBinding:"q",icon:ae(fb,{flip:e})},{value:"arrow",text:h("labels.arrowhead_arrow"),keyBinding:"w",icon:ae(bb,{flip:e})},{value:"triangle",text:h("labels.arrowhead_triangle"),icon:ae(xb,{flip:e}),keyBinding:"e"},{value:"triangle_outline",text:h("labels.arrowhead_triangle_outline"),icon:ae(Eb,{flip:e}),keyBinding:"r"}]}],hiddenSections:[{name:"default",options:[{value:"circle",text:h("labels.arrowhead_circle"),keyBinding:"a",icon:ae(yb,{flip:e})},{value:"circle_outline",text:h("labels.arrowhead_circle_outline"),keyBinding:"s",icon:ae(vb,{flip:e})},{value:"diamond",text:h("labels.arrowhead_diamond"),icon:ae(wb,{flip:e}),keyBinding:"d"},{value:"diamond_outline",text:h("labels.arrowhead_diamond_outline"),icon:ae(Tb,{flip:e}),keyBinding:"f"},{value:"bar",text:h("labels.arrowhead_bar"),keyBinding:"z",icon:ae(Cb,{flip:e})}]},{name:h("labels.cardinality"),options:[{value:"cardinality_one",text:h("labels.arrowhead_cardinality_one"),icon:ae(Ib,{flip:e}),keyBinding:"x"},{value:"cardinality_many",text:h("labels.arrowhead_cardinality_many"),icon:ae(Sb,{flip:e}),keyBinding:"c"},{value:"cardinality_one_or_many",text:h("labels.arrowhead_cardinality_one_or_many"),icon:ae(kb,{flip:e}),keyBinding:"v"},{value:"cardinality_exactly_one",text:h("labels.arrowhead_cardinality_exactly_one"),icon:ae(Mb,{flip:e}),keyBinding:null},{value:"cardinality_zero_or_one",text:h("labels.arrowhead_cardinality_zero_or_one"),icon:ae(Ab,{flip:e}),keyBinding:null},{value:"cardinality_zero_or_many",text:h("labels.arrowhead_cardinality_zero_or_many"),icon:ae(Lb,{flip:e}),keyBinding:null}]}]}),mW=U({name:"changeArrowhead",label:"Change arrowheads",trackEvent:!1,perform:(e,o,t)=>(Qe(t,"actionChangeArrowhead: value must be defined"),{elements:so(e,o,r=>{if(Se(r)){let{position:n,type:i}=t;if(n==="start")return se(r,{startArrowhead:i});if(n==="end")return se(r,{endArrowhead:i})}return r}),appState:{...o,[t.position==="start"?"currentItemStartArrowhead":"currentItemEndArrowhead"]:t.type},captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>{let n=Zr().rtl,i=K1(()=>G2(!n),[n]),a=K1(()=>G2(!!n),[n]);return to("fieldset",{children:[ae("legend",{children:h("labels.arrowheads")}),to("div",{className:"iconSelectList buttonList",children:[ae(G1,{visibleSections:i.visibleSections,hiddenSections:i.hiddenSections,label:"arrowhead_start",value:Xt(e,r,l=>Se(l)&&mc(l.type)?bf(l.startArrowhead):o.currentItemStartArrowhead,!0,l=>l?null:o.currentItemStartArrowhead),onChange:l=>t({position:"start",type:l})}),ae(G1,{visibleSections:a.visibleSections,hiddenSections:a.hiddenSections,label:"arrowhead_end",value:Xt(e,r,l=>Se(l)&&mc(l.type)?bf(l.endArrowhead):o.currentItemEndArrowhead,!0,l=>l?null:o.currentItemEndArrowhead),onChange:l=>t({position:"end",type:l})})]})]})}}),oT=U({name:"changeArrowProperties",label:"Change arrow properties",trackEvent:!1,perform:(e,o,t,r)=>!1,PanelComponent:({elements:e,appState:o,updateData:t,app:r,renderAction:n})=>to("div",{className:"selected-shape-actions",children:[n("changeArrowhead"),n("changeArrowType")]})}),pW=U({name:"changeArrowType",label:"Change arrow types",trackEvent:!1,perform:(e,o,t,r)=>{let n=so(e,o,l=>{if(!ve(l))return l;let s=r.scene.getNonDeletedElementsMap(),c=Z.getPointAtIndexGlobalCoordinates(l,0,s),d=Z.getPointAtIndexGlobalCoordinates(l,-1,s),p=se(l,{x:t===ht.elbow?c[0]:l.x,y:t===ht.elbow?c[1]:l.y,roundness:t===ht.round?{type:Mt.PROPORTIONAL_RADIUS}:null,elbowed:t===ht.elbow,angle:t===ht.elbow?0:l.angle,points:t===ht.elbow||l.elbowed?[Z.pointFromAbsoluteCoords({...l,x:c[0],y:c[1],angle:0},c,s),Z.pointFromAbsoluteCoords({...l,x:c[0],y:c[1],angle:0},d,s)]:l.points});if(Re(p)){p.fixedSegments=null;let m=r.scene.getNonDeletedElementsMap();r.dismissLinearEditor();let u=Z.getPointAtIndexGlobalCoordinates(p,0,m),b=Z.getPointAtIndexGlobalCoordinates(p,-1,m),f=p.startBinding&&m.get(p.startBinding.elementId),x=p.endBinding&&m.get(p.endBinding.elementId),v=f&&p.startBinding?{...p.startBinding,...qg(p,f,"start",m,o.isBindingEnabled)}:null,y=x&&p.endBinding?{...p.endBinding,...qg(p,x,"end",m,o.isBindingEnabled)}:null;p={...p,startBinding:v,endBinding:y,...Am(p,m,{points:[u,b].map(E=>A(E[0]-p.x,E[1]-p.y)),startBinding:v,endBinding:y,fixedSegments:null})}}else{let m=r.scene.getNonDeletedElementsMap();if(p.startBinding){let u=m.get(p.startBinding.elementId);u&&gc(p,u,o.bindMode==="inside"?"inside":"orbit","start",r.scene)}if(p.endBinding){let u=m.get(p.endBinding.elementId);u&&gc(p,u,o.bindMode==="inside"?"inside":"orbit","end",r.scene)}}return p}),i={...o,currentItemArrowType:t},a=o.selectedLinearElement?.elementId;if(a){let l=n.find(s=>s.id===a);l&&(i.selectedLinearElement=new Z(l,ne(e)))}return{elements:n,appState:i,captureUpdate:R.IMMEDIATELY}},PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>to("fieldset",{children:[ae("legend",{children:h("labels.arrowtypes")}),ae("div",{className:"buttonList",children:ae(Oo,{group:"arrowtypes",options:[{value:ht.sharp,text:h("labels.arrowtype_sharp"),icon:An,testId:"sharp-arrow"},{value:ht.round,text:h("labels.arrowtype_round"),icon:_n,testId:"round-arrow"},{value:ht.elbow,text:h("labels.arrowtype_elbowed"),icon:Ln,testId:"elbow-arrow"}],value:Xt(e,r,n=>ve(n)?n.elbowed?ht.elbow:n.roundness?ht.round:ht.sharp:null,n=>ve(n),n=>n?null:o.currentItemArrowType),onChange:n=>t(n)})})]})});import{useEffect as H4}from"react";import{jsx as G4}from"react/jsx-runtime";var Rl=()=>{let e=document.querySelector(".excalidraw-tooltip");if(e)return e;let o=document.createElement("div");return document.body.appendChild(o),o.classList.add("excalidraw-tooltip"),o},j1=(e,o,t="bottom")=>{let r=e.getBoundingClientRect(),n=window.innerWidth,i=window.innerHeight,a=5,l=o.left+o.width/2-r.width/2;l<0?l=a:l+r.width>=n&&(l=n-r.width-a);let s;t==="bottom"?(s=o.top+o.height+a,s+r.height>=i&&(s=o.top-r.height-a)):(s=o.top-r.height-a,s<0&&(s=o.top+o.height+a)),Object.assign(e.style,{top:`${s}px`,left:`${l}px`})},U4=(e,o,t,r)=>{o.classList.add("excalidraw-tooltip--visible"),o.style.minWidth=r?"50ch":"10ch",o.style.maxWidth=r?"50ch":"15ch",o.textContent=t;let n=e.getBoundingClientRect();j1(o,n)},fo=({children:e,label:o,long:t=!1,style:r,disabled:n})=>(H4(()=>()=>Rl().classList.remove("excalidraw-tooltip--visible"),[]),n?null:G4("div",{className:"excalidraw-tooltip-wrapper",onPointerEnter:i=>U4(i.currentTarget,Rl(),o,t),onPointerLeave:()=>Rl().classList.remove("excalidraw-tooltip--visible"),style:r,children:e}));import{useEffect as rT,useRef as nT,useState as W4}from"react";var V4=(e,o)=>typeof o=="function"?o(e):Array.isArray(o)?e:e[o],nu=(e,o,t)=>{if(e?.isDestroyed)return;let r=e?.getAppState();if(!r){if(!t)return;console.warn("useAppStateValue: excalidrawAPI not defined yet for internal component while it should always be defined. Are you sure you're rendering inside of <Excalidraw/> component tree?"),r=Object.assign({width:0,height:0,offsetLeft:0,offsetTop:0,scrollConstraints:null},In())}return V4(r,o)};function Nl(e,o=!0){let t=iu(),[,r]=W4(0),n=nT(null);return n.current||(n.current={selector:e,isInitialized:!!t,latestValue:nu(t,e,o)}),n.current.selector=e,!n.current.isInitialized&&t&&!t.isDestroyed&&(n.current.isInitialized=!0,n.current.latestValue=nu(t,e,o)),rT(()=>{let i=n.current;if(!t||t.isDestroyed||!i)return;let a=nu(t,i.selector,o);return a!==i.latestValue&&(i.latestValue=a,r(l=>l+1)),t.onStateChange(i.selector,l=>{i.latestValue=l,r(s=>s+1)})},[t,o]),n.current.latestValue}function Y4(e,o){let t=iu(),r=nT({selector:e,callback:o});r.current.selector=e,r.current.callback=o,rT(()=>{if(!(!t||t.isDestroyed))return r.current.callback(nu(t,r.current.selector,!0),t.getAppState()),t.onStateChange(r.current.selector,(n,i)=>{r.current.callback(n,i)})},[t])}import{jsx as au,jsxs as K4}from"react/jsx-runtime";var iT=U({name:"changeViewBackgroundColor",label:"labels.canvasBackground",trackEvent:!1,predicate:(e,o,t,r)=>!!r.props.UIOptions.canvasActions.changeViewBackgroundColor&&!o.viewModeEnabled,perform:(e,o,t)=>({appState:{...o,...t},captureUpdate:t?.viewBackgroundColor?R.IMMEDIATELY:R.EVENTUALLY}),PanelComponent:({elements:e,appState:o,updateData:t,appProps:r,data:n})=>au(Pl,{palette:null,topPicks:mm,label:h("labels.canvasBackground"),type:"canvasBackground",color:o.viewBackgroundColor,onChange:i=>t({viewBackgroundColor:i}),"data-testid":"canvas-background-picker",elements:e,appState:o,updateData:t})}),Qr=U({name:"clearCanvas",label:"labels.clearCanvas",icon:Kt,trackEvent:{category:"canvas"},predicate:(e,o,t,r)=>!!r.props.UIOptions.canvasActions.clearCanvas&&!o.viewModeEnabled&&o.openDialog?.name!=="elementLinkSelector",perform:(e,o,t,r)=>(r.imageCache.clear(),{elements:e.map(n=>se(n,{isDeleted:!0})),appState:{...In(),files:{},theme:o.theme,penMode:o.penMode,penDetected:o.penDetected,exportBackground:o.exportBackground,exportEmbedScene:o.exportEmbedScene,gridSize:o.gridSize,gridStep:o.gridStep,gridModeEnabled:o.gridModeEnabled,stats:o.stats,activeTool:o.activeTool.type==="image"?{...o.activeTool,type:r.state.preferredSelectionTool.type}:o.activeTool},captureUpdate:R.IMMEDIATELY})}),Qc=U({name:"zoomIn",label:"buttons.zoomIn",viewMode:!0,navigation:!0,icon:sp,trackEvent:{category:"canvas"},predicate:(e,o,t,r)=>r.isNavigationEnabled(),perform:(e,o,t,r)=>({appState:{...o,...pi({viewportX:o.width/2+o.offsetLeft,viewportY:o.height/2+o.offsetTop,nextZoom:ui(o.zoom.value+Xs)},o),userToFollow:null},captureUpdate:R.EVENTUALLY}),PanelComponent:({updateData:e})=>{let o=Nl(t=>t.zoom.value);return au(q,{type:"button",className:"zoom-in-button zoom-button",icon:sp,title:`${h("buttons.zoomIn")} \u2014 ${H("CtrlOrCmd++")}`,"aria-label":h("buttons.zoomIn"),disabled:o>=OE,onClick:()=>{e(null)}})},keyTest:e=>(e.code===he.EQUAL||e.code===he.NUM_ADD)&&(e[I.CTRL_OR_CMD]||e.shiftKey)}),ed=U({name:"zoomOut",label:"buttons.zoomOut",icon:cp,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,o,t,r)=>r.isNavigationEnabled(),perform:(e,o,t,r)=>({appState:{...o,...pi({viewportX:o.width/2+o.offsetLeft,viewportY:o.height/2+o.offsetTop,nextZoom:ui(o.zoom.value-Xs)},o),userToFollow:null},captureUpdate:R.EVENTUALLY}),PanelComponent:({updateData:e})=>{let o=Nl(t=>t.zoom.value);return au(q,{type:"button",className:"zoom-out-button zoom-button",icon:cp,title:`${h("buttons.zoomOut")} \u2014 ${H("CtrlOrCmd+-")}`,"aria-label":h("buttons.zoomOut"),disabled:o<=rm,onClick:()=>{e(null)}})},keyTest:e=>(e.code===he.MINUS||e.code===he.NUM_SUBTRACT)&&(e[I.CTRL_OR_CMD]||e.shiftKey)}),td=U({name:"resetZoom",label:"buttons.resetZoom",icon:Gf,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,o,t,r)=>r.isNavigationEnabled(),perform:(e,o,t,r)=>{let n=o.scrollConstraints?.lockZoom?o.scrollConstraints.zoom:1;return{appState:{...o,...pi({viewportX:o.width/2+o.offsetLeft,viewportY:o.height/2+o.offsetTop,nextZoom:ui(n)},o),userToFollow:null},captureUpdate:R.EVENTUALLY}},PanelComponent:({updateData:e})=>{let o=Nl(t=>t.zoom.value);return au(fo,{label:h("buttons.resetZoom"),style:{height:"100%"},children:K4(q,{type:"button",className:"reset-zoom-button zoom-button",title:h("buttons.resetZoom"),"aria-label":h("buttons.resetZoom"),onClick:()=>{e(null)},children:[(o*100).toFixed(0),"%"]})})},keyTest:e=>(e.code===he.ZERO||e.code===he.NUM_ZERO)&&(e[I.CTRL_OR_CMD]||e.shiftKey)}),q1=e=>[e.x,e.y,e.x+e.width,e.y+e.height],YW=U({name:"zoomToFitSelectionInViewport",label:"labels.zoomToFitViewport",icon:zc,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,o,t,r)=>r.isNavigationEnabled(),perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o),i=n.length?ye(de(n)):o.scrollConstraints?q1(o.scrollConstraints):ye(de(e)),a=ma({bounds:i,appState:{...o,userToFollow:null},fit:"scale-down",canvasOffsets:r.viewport.getOffsets()});return{...a,appState:{...a.appState,...Vr(a.appState)}}},keyTest:e=>e.code===he.TWO&&e.shiftKey&&!e.altKey&&!e[I.CTRL_OR_CMD]}),KW=U({name:"zoomToFitSelection",label:"helpDialog.zoomToSelection",icon:zc,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,o,t,r)=>r.isNavigationEnabled(),perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o),i=n.length?ye(de(n)):o.scrollConstraints?q1(o.scrollConstraints):ye(de(e)),a=ma({bounds:i,appState:{...o,userToFollow:null},fit:"contain",canvasOffsets:r.viewport.getOffsets()});return{...a,appState:{...a.appState,...Vr(a.appState)}}},keyTest:e=>e.code===he.THREE&&e.shiftKey&&!e.altKey&&!e[I.CTRL_OR_CMD]}),aT=U({name:"zoomToFit",label:"helpDialog.zoomToFit",icon:zc,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,o,t,r)=>r.isNavigationEnabled(),perform:(e,o,t,r)=>{let n=o.scrollConstraints?q1(o.scrollConstraints):ye(de(e)),i=ma({bounds:n,appState:{...o,userToFollow:null},fit:"scale-down",canvasOffsets:r.viewport.getOffsets()});return{...i,appState:{...i.appState,...Vr(i.appState)}}},keyTest:e=>e.code===he.ONE&&e.shiftKey&&!e.altKey&&!e[I.CTRL_OR_CMD]}),Nn=U({name:"toggleTheme",label:(e,o)=>o.theme===te.DARK?"buttons.lightMode":"buttons.darkMode",keywords:["toggle","dark","light","mode","theme"],icon:(e,o)=>e.theme===te.LIGHT?Tl:Cl,viewMode:!0,trackEvent:{category:"canvas"},perform:(e,o,t,r)=>{let n=t||(o.theme===te.LIGHT?te.DARK:te.LIGHT);return r.props.onThemeChange?(r.props.onThemeChange(n),!1):{appState:{...o,theme:n},captureUpdate:R.EVENTUALLY}},keyTest:e=>!e[I.CTRL_OR_CMD]&&e.altKey&&e.shiftKey&&e.code===he.D,predicate:(e,o,t,r)=>!!r.props.UIOptions.canvasActions.toggleTheme});import j4 from"clsx";import{useEffect as q4,useState as J4}from"react";import{useEffect as X4,useState as Z4}from"react";import lT from"clsx";import{Popover as J1}from"radix-ui";import{jsx as lu,jsxs as $4}from"react/jsx-runtime";var Ol=({app:e,options:o,activeTool:t,defaultOption:r,"data-testid":n,onToolChange:i,displayedOption:a})=>{let[l,s]=Z4(!1),c=t.type,d=a.type===c,p=16,{container:m}=at();return!o.some(u=>u.type===c)&&l&&s(!1),X4(()=>{let u=e.onPointerDownEmitter.on(()=>{s(!1)});return()=>u?.()},[e]),$4(J1.Root,{open:l,children:[lu(J1.Trigger,{asChild:!0,children:lu(q,{className:lT({fillable:a.fillable}),type:"toggle",icon:a.icon,checked:d,disabled:o.every(u=>_t(e,u.type)),title:Vt(a.title),"aria-label":Vt(a.title),"data-testid":n,onSelect:()=>{s(u=>!u),i(r)}})}),lu(J1.Content,{className:"tool-popover-content",sideOffset:p,collisionBoundary:m??void 0,children:o.map(({type:u,icon:b,title:f,fillable:x})=>lu(q,{className:lT({fillable:x}),type:"toggle",icon:b,checked:c===u,disabled:_t(e,u),title:Vt(u),"aria-label":Vt(u),"data-testid":`toolbar-${u}`,onSelect:()=>{e.state.activeTool.type!==u&&(xe("toolbar",u,"ui"),e.setActiveTool({type:u}),i?.(u))}},u))})]})};import{jsx as Q1}from"react/jsx-runtime";var Q4=e=>e,yt=Q4({hand:{icon:Wb,letterKey:I.H,toggle:!0},selection:{icon:Ff,letterKey:I.V,numericKey:I[1],fillable:!0},rectangle:{icon:Ac,letterKey:I.R,numericKey:I[2],fillable:!0},diamond:{icon:Lc,letterKey:I.D,numericKey:I[3],fillable:!0},ellipse:{icon:_c,letterKey:I.O,numericKey:I[4],fillable:!0},arrow:{icon:Bf,letterKey:I.A,numericKey:I[5],fillable:!0},line:{icon:ga,letterKey:I.L,numericKey:I[6],fillable:!0},freedraw:{icon:Sn,letterKey:[I.P,I.X],numericKey:I[7]},text:{icon:$r,letterKey:I.T,numericKey:I[8]},image:{icon:vl,numericKey:I[9]},eraser:{icon:Uf,letterKey:I.E,numericKey:I[0],toggle:!0},frame:{icon:Cr,letterKey:I.F},autoshape:{icon:xi,letterKey:I.X,shiftKey:!0,fillable:!1},embeddable:{icon:kn},laser:{icon:Ir,letterKey:I.K},bucketfill:{icon:ho,letterKey:I.B},lasso:{icon:yl,fillable:!1}}),Fl=Object.keys(yt).filter(e=>yt[e].toggle),su=e=>{let{letterKey:o,shiftKey:t}=yt[e];if(!o)return o;let r=Vt(typeof o=="string"?o:o[0]);return t?H(`Shift+${r}`):r},od=e=>{let o=su(e),{numericKey:t}=yt[e];return o&&t!=null?`${o} ${h("helpDialog.or")} ${t}`:`${o||t}`},sT=(e,o,t=!1)=>{let r=e.toLowerCase();for(let n of Object.keys(yt)){let{letterKey:i,numericKey:a,shiftKey:l}=yt[n];if(t===!!l&&(a!=null&&e===a||i&&(typeof i=="string"?i===r:i.includes(r))))return n==="selection"?o.state.preferredSelectionTool.type:n}return null},_t=(e,o)=>e.props.activeTool!=null&&e.props.activeTool.type!==o,Fo=(e,o)=>{let t=yt[e],r=o?.shortcutType??e,n=({app:i,activeTool:a,hideKeyBinding:l,hideShortcut:s})=>{let c=Vt(h(`toolBar.${e}`)),d=s?null:od(r);return Q1(q,{className:j4({fillable:t.fillable}),type:"toggle",icon:t.icon,checked:a.type===e,disabled:_t(i,e),title:d?`${c} \u2014 ${d}`:c,keyBindingLabel:l||s?void 0:yt[r].numericKey||su(r),"aria-label":c,"aria-keyshortcuts":d??void 0,"data-testid":`toolbar-${e}`,onSelect:({pointerType:p})=>{if(!i.state.penDetected&&p==="pen"&&i.togglePenMode(!0),o?.onSelect){o.onSelect(i,{pointerType:p});return}i.state.activeTool.type!==e&&(xe("toolbar",e,"ui"),i.setActiveTool({type:e}))}})};return n.displayName=`${Vt(e)}IconButton`,n},cu=Fo("hand"),cT=Fo("rectangle"),dT=Fo("diamond"),mT=Fo("ellipse"),pT=Fo("arrow"),uT=Fo("line"),hT=Fo("freedraw"),du=Fo("text"),mu=Fo("image"),pu=Fo("eraser"),gT=Fo("frame"),fT=Fo("selection",{onSelect:(e,{pointerType:o})=>{if(e.state.activeTool.type==="selection"&&o!==null){e.setActiveTool({type:"lasso"});return}e.state.activeTool.type!=="selection"&&(xe("toolbar","selection","ui"),e.setActiveTool({type:"selection"}))}}),bT=Fo("lasso",{shortcutType:"selection"}),uu=({app:e,activeTool:o,setAppState:t})=>{let r=[{type:"selection",icon:yt.selection.icon,fillable:yt.selection.fillable,title:Vt(h("toolBar.selection"))},{type:"lasso",icon:yt.lasso.icon,fillable:yt.lasso.fillable,title:Vt(h("toolBar.lasso"))}],n=r.find(i=>i.type===e.state.preferredSelectionTool.type)||r[0];return Q1(Ol,{app:e,options:r,activeTool:o,defaultOption:e.state.preferredSelectionTool.type,"data-testid":"toolbar-selection",onToolChange:i=>{(i==="selection"||i==="lasso")&&(e.setActiveTool({type:i}),t({preferredSelectionTool:{type:i,initialized:!0}}))},displayedOption:n})},hu=({app:e,activeTool:o})=>{let t=[{type:"freedraw",icon:yt.freedraw.icon,fillable:yt.freedraw.fillable,title:Vt(h("toolBar.freedraw"))},{type:"autoshape",icon:yt.autoshape.icon,fillable:yt.autoshape.fillable,title:Vt(h("toolBar.autoshape"))}],[r,n]=J4(o.type==="autoshape"?"autoshape":"freedraw");q4(()=>{(o.type==="freedraw"||o.type==="autoshape")&&n(o.type)},[o.type]);let i=t.find(a=>a.type===r)||t[0];return Q1(Ol,{app:e,options:t,activeTool:o,defaultOption:r,"data-testid":"toolbar-freedraw",onToolChange:a=>{(a==="freedraw"||a==="autoshape")&&(n(a),e.setActiveTool({type:a}))},displayedOption:i})};import{jsx as eA}from"react/jsx-runtime";var Gt=U({name:"finalize",label:"",trackEvent:!1,perform:(e,o,t,r)=>{let n=!0,i=e,{focusContainer:a,scene:l}=r,s=l.getNonDeletedElementsMap(),c=o.activeTool.type==="autoshape";if(t&&o.selectedLinearElement){let{event:x,sceneCoords:v}=t,y=Z.getElement(o.selectedLinearElement.elementId,s);Qe(y,"Arrow element should exist if selectedLinearElement is set"),Qe(v,"sceneCoords should be defined if actionFinalize is called with event");let E=Z.handlePointerUp(x,o.selectedLinearElement,o,r.scene);if(Bt(y)&&!o.selectedLinearElement.segmentMidPointHoveredCoords){let w=!!o.newElement,T=w||!o.selectedLinearElement.selectedPointsIndices?[y.points.length-1]:o.selectedLinearElement.selectedPointsIndices,S=ei(x),_=x[I.CTRL_OR_CMD]?null:r.getEffectiveGridSize(),M=T.reduce((N,L)=>(N.set(L,{point:S?y.points[L]:Z.createPointAt(y,s,v.x-E.pointerOffset.x,v.y-E.pointerOffset.y,_)}),N),new Map)??new Map;uc(y,M,v.x,v.y,l,o,{newArrow:w,altKey:x.altKey,angleLocked:S,gridSize:r.getEffectiveGridSize()})}else nt(y)&&o.selectedLinearElement?.isEditing&&!o.newElement&&!Kg(y.points)&&l.mutateElement(y,{polygon:!1});if(E!==o.selectedLinearElement){y&&Wr(y)&&(i=i.map(T=>T.id===y.id?se(T,{isDeleted:!0}):T));let w=o.activeTool?.locked;return{elements:y.points.length<2||Wr(y)?e.map(T=>T.id===y.id?se(T,{isDeleted:!0}):T):i,appState:{...o,cursorButton:"up",selectedElementIds:c?{}:o.selectedElementIds,selectedLinearElement:w||c?null:{...E,selectedPointsIndices:null,isEditing:!1,initialState:{...E.initialState,lastClickedPoint:-1},pointerOffset:{x:0,y:0}},selectionElement:null,suggestedBinding:null,hoveredArrowTextAnchor:null,newElement:null,multiElement:null},captureUpdate:R.IMMEDIATELY}}}window.document.activeElement instanceof HTMLElement&&a();let d=r.drawShape.hasPendingGesture();(d||c)&&(r.drawShape.finalize(),d&&(i=r.scene.getElementsIncludingDeleted()));let p=null;if(o.multiElement)p=o.multiElement;else if(!c&&!d&&(o.newElement?.type==="freedraw"||Bt(o.newElement)))p=o.newElement;else if(Object.keys(o.selectedElementIds).length===1){let x=s.get(Object.keys(o.selectedElementIds)[0]);x&&(p=x)}if(p){if(o.selectedLinearElement&&o.multiElement&&p.type!=="freedraw"&&o.lastPointerDownWith!=="touch"){let{points:x}=p,{lastCommittedPoint:v}=o.selectedLinearElement;if((!v||x[x.length-1]!==v)&&(n=!1,l.mutateElement(p,{points:p.points.slice(0,-1)}),Bt(p)&&p.endBinding&&p.points.length>1)){let y=!!o.newElement,E=new Map([[p.points.length-1,{point:p.points[p.points.length-1],isDragging:!1}]]),w=Z.getPointAtIndexGlobalCoordinates(p,-1,s);uc(p,E,w[0],w[1],l,o,{newArrow:y})}}if(p&&Wr(p)&&(i=i.map(x=>x.id===p?.id?se(x,{isDeleted:!0}):x)),Se(p)||Qa(p)){if(rc(p.points,o.zoom.value)&&(nt(p)||Qa(p))){let v=p.points,y=v[0],E=v.map((w,T)=>T===v.length-1?A(y[0],y[1]):w);nt(p)?l.mutateElement(p,{points:E,polygon:!0}):l.mutateElement(p,{points:E})}nt(p)&&!Kg(p.points)&&l.mutateElement(p,{polygon:!1})}}let m;Fl.includes(o.activeTool.type)?m=gt(o,{...o.activeTool.lastActiveTool||{type:r.state.preferredSelectionTool.type},lastActiveTool:null}):m=gt(o,{type:r.state.preferredSelectionTool.type});let u=r.isToolLocked(),b=o.activeTool.type==="autoshape"||(u||o.activeTool.type==="freedraw")&&!!p;b||r.cursor.applyForTool(m);let f=p&&Se(p)?new Z(p,ne(i)):o.selectedLinearElement;return f=f&&{...f,isEditing:o.newElement?!1:f.isEditing,initialState:{...f.initialState,lastClickedPoint:-1,origin:null}},{elements:i,appState:{...o,cursorButton:"up",activeTool:b?o.activeTool:m,activeEmbeddable:null,newElement:null,selectionElement:null,multiElement:null,editingTextElement:null,suggestedBinding:null,hoveredArrowTextAnchor:null,frameToHighlight:null,selectedElementIds:c?{}:p&&!u&&o.activeTool.type!=="freedraw"?{...o.selectedElementIds,[p.id]:!0}:o.selectedElementIds,selectedLinearElement:c?null:f},captureUpdate:n?R.IMMEDIATELY:R.NEVER}},keyTest:(e,o)=>e.key===I.ESCAPE&&o.selectedLinearElement?.isEditing||(e.key===I.ESCAPE||e.key===I.ENTER)&&o.multiElement!==null,PanelComponent:({appState:e,updateData:o,data:t})=>eA(q,{type:"button",icon:qf,title:h("buttons.done"),"aria-label":h("buttons.done"),onClick:o,visible:e.multiElement!=null,size:t?.size||"medium",style:{pointerEvents:"all"}})});var tA=(e,o)=>Fl.includes(e.activeTool.type)?gt(e,{...e.activeTool.lastActiveTool||{type:o.state.preferredSelectionTool.type},lastActiveTool:null}):gt(e,{type:o.state.preferredSelectionTool.type}),oA=(e,o,t)=>{if(!e.editingGroupId)return null;let r=o.scene.getNonDeletedElements(),n=o.scene.getSelectedElements({selectedElementIds:t,elements:r}),i=n.length?n:He(r,e.editingGroupId);for(let a of i){let l=a.groupIds.indexOf(e.editingGroupId);if(l!==-1&&a.groupIds[l+1])return a.groupIds[l+1]}return null},xT=U({name:"deselect",label:"",trackEvent:!1,perform:(e,o,t,r)=>{let n=tA(o,r);if(o.editingGroupId){let i=r.scene.getNonDeletedElements(),a=Object.keys(o.selectedElementIds).length>0?o.selectedElementIds:He(i,o.editingGroupId).reduce((l,s)=>(l[s.id]=!0,l),{});return{appState:{...o,...Tt({editingGroupId:oA(o,r,a),selectedElementIds:a},i,o,r),activeEmbeddable:null,activeTool:n,selectedLinearElement:null,selectionElement:null,showHyperlinkPopup:!1,suggestedBinding:null,hoveredArrowTextAnchor:null,frameToHighlight:null},captureUpdate:R.IMMEDIATELY}}return{appState:{...o,activeEmbeddable:null,activeTool:n,editingGroupId:null,selectedElementIds:Be({},o),selectedGroupIds:{},selectedLinearElement:null,selectionElement:null,showHyperlinkPopup:!1,suggestedBinding:null,hoveredArrowTextAnchor:null,frameToHighlight:null},captureUpdate:R.IMMEDIATELY}},keyTest:(e,o,t,r)=>e.key!==I.ESCAPE||io(e.target)?!1:!o.newElement&&o.multiElement===null&&!o.selectedLinearElement?.isEditing&&(o.activeEmbeddable!==null||o.activeTool.type!==r.state.preferredSelectionTool.type||!!o.editingGroupId||!!o.selectedLinearElement||Ge(r.scene.getNonDeletedElements(),o))});import rA from"clsx";import{jsx as ET,jsxs as nA}from"react/jsx-runtime";var rd=({children:e,checked:o,onChange:t,className:r})=>nA("div",{className:rA("Checkbox",r,{"is-checked":o}),onClick:n=>{t(!o,n),n.currentTarget.querySelector(".Checkbox-box").focus()},children:[ET("button",{type:"button",className:"Checkbox-box",role:"checkbox","aria-checked":o,children:Dc}),ET("div",{className:"Checkbox-label",children:e})]});import{jsx as nd}from"react/jsx-runtime";var vT=e=>{let o=e.title||(e.value===te.DARK?h("buttons.lightMode"):h("buttons.darkMode"));return nd(q,{type:"icon",icon:e.value===te.LIGHT?yT.MOON:yT.SUN,title:o,"aria-label":o,onClick:()=>e.onChange(e.value===te.DARK?te.LIGHT:te.DARK),"data-testid":"toggle-dark-mode"})},yT={SUN:nd("svg",{width:"512",height:"512",className:"rtl-mirror",viewBox:"0 0 512 512",children:nd("path",{fill:"currentColor",d:"M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z"})}),MOON:nd("svg",{width:"512",height:"512",className:"rtl-mirror",viewBox:"0 0 512 512",children:nd("path",{fill:"currentColor",d:"M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"})})};import{useState as iA}from"react";import{jsx as wT,jsxs as aA}from"react/jsx-runtime";var TT=e=>{let{id:o}=at(),[t,r]=iA(e.value),n=a=>{e.ignoreFocus||fy(a.target);let l=a.target.value;l!==e.value&&e.onChange(l)},i=a=>{if(a.key===I.ENTER){if(a.preventDefault(),a.nativeEvent.isComposing||a.keyCode===229)return;a.currentTarget.blur()}};return aA("div",{className:"ProjectName",children:[wT("label",{className:"ProjectName-label",htmlFor:"filename",children:`${e.label}:`}),wT("input",{type:"text",className:"TextInput",onBlur:n,onKeyDown:i,id:`${o}-filename`,value:t,onChange:a=>r(a.target.value)})]})};import{useCallback as lA,useEffect as sA,useRef as cA}from"react";import{jsx as gu,jsxs as uA}from"react/jsx-runtime";var dA=5e3,mA=({progress:e})=>gu("div",{className:"Toast__progress-bar",children:gu("div",{className:"Toast__progress-bar-fill",style:{width:`${Math.min(5,Math.round(e*100))}%`}})}),pA=({message:e,onClose:o,closable:t=!1,duration:r=dA,style:n})=>{let i=cA(0),a=r!==1/0,l=lA(()=>{a&&(i.current=window.setTimeout(()=>o(),r))},[o,r,a]);return sA(()=>{if(a)return l(),()=>clearTimeout(i.current)},[l,e,r,a]),uA("div",{className:"Toast",role:"status",onMouseEnter:a?()=>clearTimeout(i?.current):void 0,onMouseLeave:a?l:void 0,style:n,children:[gu("div",{className:"Toast__message",children:e}),t&&gu(q,{icon:No,"aria-label":"close",type:"icon",onClick:o,className:"close"})]})},fu=Object.assign(pA,{ProgressBar:mA});var OY="clipboard"in navigator&&"readText"in navigator.clipboard,bu="clipboard"in navigator&&"writeText"in navigator.clipboard,Bl="clipboard"in navigator&&"write"in navigator.clipboard&&"ClipboardItem"in window&&"toBlob"in HTMLCanvasElement.prototype,hA=e=>!!([$n.excalidraw,$n.excalidrawClipboard,$n.excalidrawClipboardWithAPI].includes(e?.type)&&Array.isArray(e.elements)),CT=({types:e,files:o})=>{!e&&!o&&console.warn("createPasteEvent: no types or files provided");let t=new ClipboardEvent("paste",{clipboardData:new DataTransfer});if(e)for(let[r,n]of Object.entries(e)){if(typeof n!="string"){o=o||[],o.push(n);continue}try{if(t.clipboardData?.items.add(n,r),t.clipboardData?.getData(r)!==n)throw new Error(`Failed to set "${r}" as clipboardData item`)}catch(i){throw new Error(i.message)}}if(o){let r=-1;for(let n of o){r++;try{if(t.clipboardData?.items.add(n),t.clipboardData?.files[r]!==n)throw new Error(`Failed to set file "${n.name}" as clipboardData item`)}catch(i){throw new Error(i.message)}}}return t},gA=({elements:e,files:o})=>{let t=ne(e),r=new Set(e.filter(l=>oe(l))),n=!1,i=e.reduce((l,s)=>(ri(s)&&(n=!0,o&&o[s.fileId]&&(l[s.fileId]=o[s.fileId])),l),{});n&&!o&&console.warn("copyToClipboard: attempting to file element(s) without providing associated `files` object.");let a={type:$n.excalidrawClipboard,elements:e.map(l=>{if(aa(l,t)&&!r.has(aa(l,t))){let s=Tr(l);return lo(s,t,{frameId:null}),s}return l}),files:o?i:void 0};return JSON.stringify(a)},xu=async(e,o,t)=>{let r=gA({elements:e,files:o});await kr({[ge.excalidrawClipboard]:r,[ge.text]:r},t)};function IT(e){let o=[];for(let t of e.childNodes)if(t.nodeType===3){let r=t.textContent?.trim();r&&o.push({type:"text",value:r})}else if(t instanceof HTMLImageElement){let r=t.getAttribute("src");r&&r.startsWith("http")&&o.push({type:"imageUrl",value:r})}else o=o.concat(IT(t));return o}var fA=e=>{let o=e.value;try{let t=new DOMParser().parseFromString(o,ge.html),r=IT(t.body);if(r.length)return{type:"mixedContent",value:r}}catch(t){console.error(`error in parseHTMLFromPaste: ${t.message}`)}return null},ST=async()=>{let e={},o;try{o=await navigator.clipboard?.read()}catch(t){try{if(navigator.clipboard?.readText){console.warn(`navigator.clipboard.readText() failed (${t.message}). Failling back to navigator.clipboard.read()`);let r=await navigator.clipboard?.readText();if(r)return{[ge.text]:r}}}catch(r){if(navigator.clipboard?.read)console.warn(`navigator.clipboard.readText() failed (${r.message}). Failling back to navigator.clipboard.read()`);else{if(r.name==="DataError")return console.warn(`navigator.clipboard.read() error, clipboard is probably empty: ${r.message}`),e;throw r}}throw t}for(let t of o)for(let r of t.types)if(bm(_E,r))try{if(r===ge.text||r===ge.html)e[r]=await(await t.getType(r)).text();else if(Fw(r)){let n=await t.getType(r),i=Vw(n,r,void 0);e[r]=i}else throw new wf(`Unsupported clipboard type: ${r}`)}catch(n){console.warn(n instanceof wf?n.message:`Cannot retrieve ${r} from clipboardItem: ${n.message}`)}return Object.keys(e).length===0&&console.warn("No clipboard data found from clipboard.read()."),e},bA=async(e,o=!1)=>{try{let t=e.findByType(ge.html),r=!o&&t&&fA(t);return r?r.value.every(n=>n.type==="text")?{type:"text",value:e.getData(ge.text)??r.value.map(n=>n.value).join(`
|
|
2
|
-
`).trim()}:r:{type:"text",value:(e.getData(
|
|
1
|
+
import{$ as uc,$a as ho,$b as ht,$c as Ts,$d as Qm,$e as Rc,$f as Qr,$g as Zw,$h as Ns,A as tr,Aa as xs,Ab as Mf,Ac as xv,Ad as _v,Ae as Mc,Af as xw,Ag as _6,Ah as l2,Ai as Lp,B as vy,Ba as Dy,Bb as tv,Bc as Ym,Bd as Jm,Be as Qv,Bf as Wf,Bg as Da,Bh as c2,Bi as Fs,C as Im,Ca as Zr,Cb as ov,Cc as Dr,Cd as bo,Ce as ip,Cf as $e,Cg as tn,Ch as d2,Ci as _p,D as wy,Da as gc,Db as ge,Dc as ws,Dd as se,De as Ii,Df as ie,Dg as Fc,Dh as m2,Di as mb,E as gf,Ea as Cn,Eb as S,Ec as Ne,Ed as _n,Ee as Ma,Ef as As,Eg as vp,Eh as p2,Ei as Gc,F as Ty,Fa as uo,Fb as Hm,Fc as Ev,Fd as Pv,Fe as Aa,Ff as Ue,Fg as Ow,Fh as u2,Fi as Pp,G as ff,Ga as Nm,Gb as Ei,Gc as yv,Gd as wc,Ge as ew,Gf as Nc,Gg as Bw,Gh as h2,Gi as pb,H as Be,Ha as xt,Hb as Af,Hc as Pf,Hd as Dv,He as tw,Hf as Oc,Hg as Bo,Hh as g2,Hi as O6,I as or,Ia as bi,Ib as va,Ic as Km,Id as Rv,Ie as ow,If as Ew,Ig as wp,Ih as f2,Ii as P2,J as ga,Ja as Ry,Jb as yi,Jc as ar,Jd as dt,Je as rw,Jf as pp,Jg as Tp,Jh as b2,Ji as D2,K as pc,Ka as fc,Kb as rv,Kc as Df,Kd as Ss,Ke as nw,Kf as Jr,Kg as Zf,Kh as x2,Ki as Dp,L as Qe,La as Do,Lb as Ot,Lc as Mn,Ld as Nv,Le as iw,Lf as Ls,Lg as Fw,Lh as eb,Li as Wc,M as rr,Ma as Et,Mb as Lf,Mc as No,Md as Ov,Me as Ac,Mf as up,Mg as Cp,Mh as tb,Mi as Vc,N as pt,Na as Ny,Nb as jt,Nc as Rr,Nd as Tc,Ne as aw,Nf as Vf,Ng as jf,Nh as E2,Ni as Rp,O as Q,Oa as Oy,Ob as nv,Oc as Xm,Od as Cc,Oe as La,Of as yw,Og as zw,Oh as y2,Oi as Np,P as rt,Pa as Sf,Pb as _f,Pc as $m,Pd as Bv,Pe as ap,Pf as cr,Pg as ao,Ph as v2,Pi as Op,Q as hi,Qa as xi,Qb as iv,Qc as sr,Qd as L6,Qe as sw,Qf as vw,Qg as Hw,Qh as w2,Qi as Yc,R as km,Ra as Sn,Rb as go,Rc as vv,Rd as Fv,Re as sp,Rf as ww,Rg as Uw,Rh as Rs,Ri as R2,S as bs,Sa as By,Sb as wa,Sc as wv,Sd as zv,Se as lr,Sf as Oo,Sg as so,Sh as T2,Si as N2,T as Mm,Ta as Fy,Tb as ut,Tc as Rf,Td as Pn,Te as Lc,Tf as Tw,Tg as _i,Th as Mp,Ti as O2,U as bf,Ua as Ut,Ub as av,Uc as Tv,Ud as Hv,Ue as _c,Uf as Nn,Ug as Gw,Uh as C2,Ui as B6,V as fa,Va as zy,Vb as kn,Vc as An,Vd as At,Ve as lw,Vf as Cw,Vg as Ww,Vh as S2,Vi as Pi,W as Zo,Wa as Hy,Wb as xc,Wc as Cv,Wd as Uv,We as ki,Wf as Bc,Wg as Vw,Wh as Ap,Wi as Kc,X as ba,Xa as Ea,Xb as ir,Xc as Ti,Xd as Dn,Xe as _a,Xf as hp,Xg as Yw,Xh as ob,Xi as Xc,Y as xf,Ya as Uy,Yb as sv,Yc as nt,Yd as Sc,Ye as Pc,Yf as _s,Yg as Kw,Yh as rb,Yi as $c,Z as Cy,Za as Gy,Zb as Ta,Zc as fo,Zd as we,Ze as cw,Zf as gp,Zg as Xw,Zh as nb,Zi as Ba,_ as Ef,_a as Om,_b as Ec,_c as Ca,_d as Nr,_e as Dc,_f as Sw,_g as $w,_h as I2,_i as B2,a as fy,aa as ue,ab as Es,ac as ze,ad as J,ae as Gv,af as Ff,ag as en,ah as P6,ai as Hc,aj as F2,b as Je,ba as Sy,bb as ys,bc as Gt,bd as et,be as Wv,bf as io,bg as Iw,bh as Bn,bi as ib,c as $r,ca as Am,cb as Bm,cc as yc,cd as Zm,ce as Vv,cf as Mi,cg as Yf,ch as mr,ci as k2,cj as z2,d as lf,da as gi,db as Wy,dc as lv,dd as ae,de as Of,df as dw,dg as kw,dh as O,di as M2,dj as H2,e as gs,ea as Iy,eb as Vy,ec as Um,ed as Cs,ee as Is,ef as zf,eg as Kf,eh as jw,ei as D6,ej as Bp,f as fs,fa as ky,fb as Fm,fc as Gm,fd as Me,fe as Ic,ff as Hf,fg as Mw,fh as qw,fi as ab,fj as U2,g as cf,ga as yf,gb as Yy,gc as Wm,gd as ct,ge as ep,gf as lp,gg as fp,gh as zc,gi as sb,gj as ub,h as Cm,ha as My,hb as zm,hc as cv,hd as Ee,he as kc,hf as Uf,hg as bp,hh as Jw,hi as Fo,hj as hb,i as df,ia as Ay,ib as Ky,ic as dv,id as He,ie as tp,if as mw,ig as Aw,ih as qf,ii as me,ij as Fp,j as mf,ja as hc,jb as Xy,jc as mv,jd as jm,je as Yv,jf as j,jg as Lw,jh as Qw,ji as cb,jj as G2,k as pf,ka as Lm,kb as $y,kc as pv,kd as Sv,ke as Kv,kf as pw,kg as _w,kh as e2,ki as on,kj as gb,l as _,la as Ly,lb as If,lc as uv,ld as Vt,le as Si,lf as Lt,lg as Pw,lh as t2,li as Fn,lj as Fa,m as by,ma as _y,mb as vo,mc as te,md as Iv,me as qr,mf as cp,mg as Dw,mh as o2,mi as Oa,mj as W2,n as Ae,na as _m,nb as bc,nc as hv,nd as Sa,ne as op,nf as Or,ng as dr,nh as Jf,ni as Os,nj as fb,o as Po,oa as Pm,ob as Pr,oc as jr,od as Ln,oe as Xv,of as Pa,og as xp,oh as Sp,oi as zn,oj as V2,p as uf,pa as vf,pb as Zy,pc as Wt,pd as Ia,pe as ks,pf as uw,pg as Rw,ph as Ip,pi as L2,pj as Y2,q as xy,qa as Dm,qb as wo,qc as gv,qd as qm,qe as jo,qf as Ms,qg as qt,qh as kp,qi as Bs,qj as zp,r as Ey,ra as fi,rb as jy,rc as Vm,rd as Yt,re as Rn,rf as Ye,rg as Ep,rh as Ra,ri as _2,rj as bb,s as Sm,sa as xa,sb as Ro,sc as vs,sd as gt,se as $v,sf as hw,sg as Li,sh as r2,si as db,sj as K2,t as $o,ta as wf,tb as qy,tc as fv,td as kv,te as Zv,tf as gw,tg as Te,th as Qf,ti as rn,tj as X2,u as cc,ua as Py,ub as In,uc as vi,ud as Ci,ue as jv,uf as fw,ug as yp,uh as Na,ui as Hn,uj as $2,v as dc,va as Rm,vb as Jy,vc,vd as Mv,ve as rp,vf as Gf,vg as On,vh as n2,vi as Un,vj as Zc,w as ha,wa as Tf,wb as Qy,wc as Dt,wd as Av,we as qv,wf as dp,wg as Xf,wh as Ds,wi as R6,x as yy,xa as nr,xb as ev,xc as wi,xd as ka,xe as Bf,xf as Ai,xg as Nw,xh as i2,xi as N6,y as hf,ya as Cf,yb as kf,yc as bv,yd as Nf,ye as Jv,yf as mp,yg as Ps,yh as a2,yi as pr,z as mc,za as Pt,zb as ya,zc as lt,zd as Lv,ze as np,zf as bw,zg as $f,zh as s2,zi as Uc}from"./chunk-25DVBZY5.js";import{a as k}from"./chunk-RNVAYDMN.js";import{O as lb}from"./chunk-52O7NOSZ.js";import{c as A2}from"./chunk-DYU5D34O.js";import{b as gy,c as sf,d as T}from"./chunk-SRAX5OIU.js";import pB,{useCallback as uB,useContext as hB,useEffect as gB,useRef as fB,useState as bB}from"react";import m6 from"clsx";import OO from"lodash.throttle";import Lr,{useContext as mi}from"react";import{flushSync as Xo}from"react-dom";import BO from"roughjs/bin/rough";import{nanoid as FO}from"nanoid";var tk={};sf(tk,{actionAddToLibrary:()=>uh,actionAlignBottom:()=>oS,actionAlignHorizontallyCentered:()=>aS,actionAlignLeft:()=>rS,actionAlignRight:()=>nS,actionAlignTop:()=>tS,actionAlignVerticallyCentered:()=>iS,actionBindText:()=>bh,actionBringForward:()=>Eu,actionBringToFront:()=>vu,actionChangeArrowProperties:()=>gC,actionChangeBackgroundColor:()=>iC,actionChangeBucketFillBackgroundColor:()=>vd,actionChangeExportBackground:()=>ih,actionChangeFillStyle:()=>aC,actionChangeFontFamily:()=>pC,actionChangeFontSize:()=>mC,actionChangeFreedrawMode:()=>cC,actionChangeOpacity:()=>dC,actionChangeProjectName:()=>nh,actionChangeSloppiness:()=>lC,actionChangeStrokeColor:()=>nC,actionChangeStrokeWidth:()=>sC,actionChangeTextAlign:()=>uC,actionChangeVerticalAlign:()=>hC,actionChangeViewBackgroundColor:()=>xC,actionClearCanvas:()=>pn,actionCopy:()=>es,actionCopyAsPng:()=>Ld,actionCopyAsSvg:()=>Ad,actionCopyStyles:()=>sh,actionCut:()=>Md,actionDeleteSelected:()=>qs,actionDeselect:()=>DC,actionDuplicateSelection:()=>Cu,actionFinalize:()=>Xt,actionFlipHorizontal:()=>hh,actionFlipVertical:()=>gh,actionGoToCollaborator:()=>eS,actionGroup:()=>ch,actionLink:()=>xl,actionLoadScene:()=>Ja,actionPasteStyles:()=>lh,actionResetZoom:()=>Cd,actionSaveFileToDisk:()=>dl,actionSaveToActiveFile:()=>Ki,actionSelectAll:()=>Tu,actionSendBackward:()=>xu,actionSendToBack:()=>yu,actionShortcuts:()=>Xi,actionToggleArrowBinding:()=>gl,actionToggleCropEditor:()=>Vh,actionToggleElementLock:()=>El,actionToggleGridMode:()=>ts,actionToggleLinearEditor:()=>is,actionToggleMidpointSnapping:()=>fl,actionToggleObjectsSnapMode:()=>hl,actionToggleSearchMenu:()=>Ll,actionToggleStats:()=>ti,actionToggleTheme:()=>Qn,actionToggleZenMode:()=>ei,actionUnbindText:()=>fh,actionUngroup:()=>dh,actionZoomIn:()=>wd,actionZoomOut:()=>Td,actionZoomToFit:()=>EC,copyText:()=>_d,distributeHorizontally:()=>cS,distributeVertically:()=>dS});import{atom as Ie,createStore as F6}from"jotai";import{createIsolation as z6}from"jotai-scope";var Z2=z6();var{useAtom:le,useSetAtom:nn,useAtomValue:zs,useStore:TB}=Z2,j2=Z2.Provider,yt=F6();var H6=gy({"./locales/ar-SA.json":()=>import("./locales/ar-SA-5WIASEJP.js"),"./locales/az-AZ.json":()=>import("./locales/az-AZ-V5EUQD6C.js"),"./locales/bg-BG.json":()=>import("./locales/bg-BG-EXASCMTR.js"),"./locales/bn-BD.json":()=>import("./locales/bn-BD-U4SYNFCO.js"),"./locales/bn-IN.json":()=>import("./locales/bn-IN-HKDJIITE.js"),"./locales/ca-ES.json":()=>import("./locales/ca-ES-2KGUU5XB.js"),"./locales/cs-CZ.json":()=>import("./locales/cs-CZ-VUCGPRML.js"),"./locales/da-DK.json":()=>import("./locales/da-DK-NNDP2IVP.js"),"./locales/de-CH.json":()=>import("./locales/de-CH-I7RAVIZN.js"),"./locales/de-DE.json":()=>import("./locales/de-DE-WBQ3DQLR.js"),"./locales/el-GR.json":()=>import("./locales/el-GR-TYQHVGXW.js"),"./locales/en.json":()=>import("./locales/en-MYE3M2F3.js"),"./locales/es-ES.json":()=>import("./locales/es-ES-JEUOREKJ.js"),"./locales/eu-ES.json":()=>import("./locales/eu-ES-SO5DEEAN.js"),"./locales/fa-IR.json":()=>import("./locales/fa-IR-I4JNTJHK.js"),"./locales/fi-FI.json":()=>import("./locales/fi-FI-REAEF6HQ.js"),"./locales/fr-FR.json":()=>import("./locales/fr-FR-SUCL7J6B.js"),"./locales/gl-ES.json":()=>import("./locales/gl-ES-KHCSOGVH.js"),"./locales/he-IL.json":()=>import("./locales/he-IL-JYXVXV2Q.js"),"./locales/hi-IN.json":()=>import("./locales/hi-IN-BU52H3BO.js"),"./locales/hu-HU.json":()=>import("./locales/hu-HU-OWADXDQ3.js"),"./locales/id-ID.json":()=>import("./locales/id-ID-2WY7E4VX.js"),"./locales/it-IT.json":()=>import("./locales/it-IT-INVHSAJF.js"),"./locales/ja-JP.json":()=>import("./locales/ja-JP-JBNTKYP4.js"),"./locales/kaa.json":()=>import("./locales/kaa-TC3VIB7V.js"),"./locales/kab-KAB.json":()=>import("./locales/kab-KAB-UOUDSQKM.js"),"./locales/kk-KZ.json":()=>import("./locales/kk-KZ-P5H2X7YS.js"),"./locales/km-KH.json":()=>import("./locales/km-KH-IHMV2US7.js"),"./locales/ko-KR.json":()=>import("./locales/ko-KR-ZTMANIDF.js"),"./locales/ku-TR.json":()=>import("./locales/ku-TR-GPJTRB5G.js"),"./locales/lt-LT.json":()=>import("./locales/lt-LT-V3XDOK3P.js"),"./locales/lv-LV.json":()=>import("./locales/lv-LV-DVQ3FADO.js"),"./locales/mr-IN.json":()=>import("./locales/mr-IN-VZ6HH5FE.js"),"./locales/my-MM.json":()=>import("./locales/my-MM-XYKWHRK6.js"),"./locales/nb-NO.json":()=>import("./locales/nb-NO-UNO2GGZJ.js"),"./locales/nl-NL.json":()=>import("./locales/nl-NL-76EFHT4P.js"),"./locales/nn-NO.json":()=>import("./locales/nn-NO-CFKD7ABE.js"),"./locales/oc-FR.json":()=>import("./locales/oc-FR-YBJTCJ3J.js"),"./locales/pa-IN.json":()=>import("./locales/pa-IN-SNOXSMRV.js"),"./locales/percentages.json":()=>import("./locales/percentages-LWOC67ZH.js"),"./locales/pl-PL.json":()=>import("./locales/pl-PL-BSY6YFZ3.js"),"./locales/pt-BR.json":()=>import("./locales/pt-BR-CZDV62R3.js"),"./locales/pt-PT.json":()=>import("./locales/pt-PT-JO57XJJW.js"),"./locales/ro-RO.json":()=>import("./locales/ro-RO-UZ5ICYYN.js"),"./locales/ru-RU.json":()=>import("./locales/ru-RU-AN7JPREC.js"),"./locales/si-LK.json":()=>import("./locales/si-LK-7CBLD6QQ.js"),"./locales/sk-SK.json":()=>import("./locales/sk-SK-SWR6DKBI.js"),"./locales/sl-SI.json":()=>import("./locales/sl-SI-QY5KCFGA.js"),"./locales/sv-SE.json":()=>import("./locales/sv-SE-O3OFCY3J.js"),"./locales/ta-IN.json":()=>import("./locales/ta-IN-V6NHHU6Z.js"),"./locales/th-TH.json":()=>import("./locales/th-TH-WLSZUSBX.js"),"./locales/tr-TR.json":()=>import("./locales/tr-TR-GUFYG22B.js"),"./locales/uk-UA.json":()=>import("./locales/uk-UA-K6SV5NFQ.js"),"./locales/uz-UZ.json":()=>import("./locales/uz-UZ-TVKTZO2G.js"),"./locales/vi-VN.json":()=>import("./locales/vi-VN-7FKFXJNO.js"),"./locales/zh-CN.json":()=>import("./locales/zh-CN-AOKVLNNK.js"),"./locales/zh-HK.json":()=>import("./locales/zh-HK-CDKPF5DC.js"),"./locales/zh-TW.json":()=>import("./locales/zh-TW-ZVGYESGW.js")});var U6=85,an={code:"en",label:"English"},Us=[an,...[{code:"ar-SA",label:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629",rtl:!0},{code:"bg-BG",label:"\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438"},{code:"ca-ES",label:"Catal\xE0"},{code:"cs-CZ",label:"\u010Cesky"},{code:"de-DE",label:"Deutsch"},{code:"el-GR",label:"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"},{code:"es-ES",label:"Espa\xF1ol"},{code:"eu-ES",label:"Euskara"},{code:"fa-IR",label:"\u0641\u0627\u0631\u0633\u06CC",rtl:!0},{code:"fi-FI",label:"Suomi"},{code:"fr-FR",label:"Fran\xE7ais"},{code:"gl-ES",label:"Galego"},{code:"he-IL",label:"\u05E2\u05D1\u05E8\u05D9\u05EA",rtl:!0},{code:"hi-IN",label:"\u0939\u093F\u0928\u094D\u0926\u0940"},{code:"hu-HU",label:"Magyar"},{code:"id-ID",label:"Bahasa Indonesia"},{code:"it-IT",label:"Italiano"},{code:"ja-JP",label:"\u65E5\u672C\u8A9E"},{code:"kab-KAB",label:"Taqbaylit"},{code:"kk-KZ",label:"\u049A\u0430\u0437\u0430\u049B \u0442\u0456\u043B\u0456"},{code:"ko-KR",label:"\uD55C\uAD6D\uC5B4"},{code:"ku-TR",label:"Kurd\xEE"},{code:"lt-LT",label:"Lietuvi\u0173"},{code:"lv-LV",label:"Latvie\u0161u"},{code:"my-MM",label:"Burmese"},{code:"nb-NO",label:"Norsk bokm\xE5l"},{code:"nl-NL",label:"Nederlands"},{code:"nn-NO",label:"Norsk nynorsk"},{code:"oc-FR",label:"Occitan"},{code:"pa-IN",label:"\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40"},{code:"pl-PL",label:"Polski"},{code:"pt-BR",label:"Portugu\xEAs Brasileiro"},{code:"pt-PT",label:"Portugu\xEAs"},{code:"ro-RO",label:"Rom\xE2n\u0103"},{code:"ru-RU",label:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{code:"sk-SK",label:"Sloven\u010Dina"},{code:"sv-SE",label:"Svenska"},{code:"sl-SI",label:"Sloven\u0161\u010Dina"},{code:"tr-TR",label:"T\xFCrk\xE7e"},{code:"uk-UA",label:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{code:"zh-CN",label:"\u7B80\u4F53\u4E2D\u6587"},{code:"zh-TW",label:"\u7E41\u9AD4\u4E2D\u6587"},{code:"vi-VN",label:"Ti\u1EBFng Vi\u1EC7t"},{code:"mr-IN",label:"\u092E\u0930\u093E\u0920\u0940"}].filter(e=>A2[e.code]>=U6).sort((e,t)=>e.label>t.label?1:-1)],Up="__test__";Wt()&&Us.unshift({code:Up,label:"test language"},{code:`${Up}.rtl`,label:"\u202Atest language (rtl)\u202C",rtl:!0});var Hs=an,Hp={},Gp=async e=>{if(Hs=e,document.documentElement.dir=Hs.rtl?"rtl":"ltr",document.documentElement.lang=Hs.code,e.code.startsWith(Up))Hp={};else try{Hp=await H6(`./locales/${Hs.code}.json`)}catch(t){console.error(`Failed to load language ${e.code}:`,t.message),Hp=lb}yt.set(J2,e.code)},sn=()=>Hs,q2=(e,t)=>{for(let o=0;o<t.length;++o){let r=t[o];if(e[r]===void 0)return;e=e[r]}if(typeof e=="string")return e},h=(e,t,o)=>{if(Hs.code.startsWith(Up))return`\u202A[[${t?`${e}(${JSON.stringify(t).slice(1,-1)})`:e}]]\u202C`;let r=e.split("."),n=q2(Hp,r)||q2(lb,r)||o;if(n===void 0){let i=`Can't find translation for ${e}`;if(k.PROD)return console.warn(i),"";throw new Error(i)}if(t)for(let i in t)n=n.replace(`{{${i}}}`,String(t[i]));return n},J2=Ie(an.code),Ge=()=>{let e=zs(J2);return{t:h,langCode:e}};var oT={};sf(oT,{AlignBottomIcon:()=>tu,AlignLeftIcon:()=>ou,AlignRightIcon:()=>ru,AlignTopIcon:()=>eu,ArrowIcon:()=>Ib,ArrowRightIcon:()=>Yn,ArrowheadArrowIcon:()=>i1,ArrowheadBarIcon:()=>p1,ArrowheadCardinalityExactlyOneIcon:()=>f1,ArrowheadCardinalityManyIcon:()=>h1,ArrowheadCardinalityOneIcon:()=>u1,ArrowheadCardinalityOneOrManyIcon:()=>g1,ArrowheadCardinalityZeroOrManyIcon:()=>x1,ArrowheadCardinalityZeroOrOneIcon:()=>b1,ArrowheadCircleIcon:()=>l1,ArrowheadCircleOutlineIcon:()=>c1,ArrowheadDiamondIcon:()=>d1,ArrowheadDiamondOutlineIcon:()=>m1,ArrowheadNoneIcon:()=>n1,ArrowheadTriangleIcon:()=>a1,ArrowheadTriangleOutlineIcon:()=>s1,BringForwardIcon:()=>jp,BringToFrontIcon:()=>Jp,CenterHorizontallyIcon:()=>iu,CenterVerticallyIcon:()=>nu,CloseIcon:()=>qo,DeviceDesktopIcon:()=>ex,DiamondIcon:()=>Jc,DiscordIcon:()=>Db,DistributeHorizontallyIcon:()=>Gb,DistributeVerticallyIcon:()=>Wb,DotsHorizontalIcon:()=>Eb,DotsIcon:()=>Di,DuplicateIcon:()=>Ws,EdgeRoundIcon:()=>r1,EdgeSharpIcon:()=>o1,EllipseIcon:()=>Qc,EmbedIcon:()=>Vn,EraserIcon:()=>Ab,ExcalLogo:()=>V6,ExportIcon:()=>Ni,ExportImageIcon:()=>od,ExternalLinkIcon:()=>Kp,FillCrossHatchIcon:()=>Xb,FillHachureIcon:()=>Kb,FillSolidIcon:()=>$b,FillZigZagIcon:()=>Yb,FontFamilyCodeIcon:()=>nd,FontFamilyHeadingIcon:()=>T1,FontFamilyNormalIcon:()=>Xs,FontSizeExtraLargeIcon:()=>w1,FontSizeLargeIcon:()=>v1,FontSizeMediumIcon:()=>y1,FontSizeSmallIcon:()=>E1,FreedrawIcon:()=>Gn,GithubIcon:()=>ed,GroupIcon:()=>au,HamburgerMenuIcon:()=>_b,HelpIcon:()=>Ua,HelpIconThin:()=>Pb,HomeIcon:()=>W6,ImageIcon:()=>Wn,LassoIcon:()=>Gs,LibraryIcon:()=>jc,LineIcon:()=>Ha,LinkIcon:()=>Ks,LoadIcon:()=>Ga,LockedIcon:()=>za,LockedIconFilled:()=>vb,MagicIcon:()=>Fi,MagicIconThin:()=>c4,MoonIcon:()=>Vs,OpenAIIcon:()=>d4,PenModeIcon:()=>kb,PinIcon:()=>yb,PlusIcon:()=>xb,RectangleIcon:()=>qc,RedoIcon:()=>Zp,RetryIcon:()=>O1,SelectionIcon:()=>Sb,SendBackwardIcon:()=>qp,SendToBackIcon:()=>Qp,SloppinessArchitectIcon:()=>Qb,SloppinessArtistIcon:()=>e1,SloppinessCartoonistIcon:()=>t1,StrokeStyleDashedIcon:()=>qb,StrokeStyleDottedIcon:()=>Jb,StrokeStyleSolidIcon:()=>i4,StrokeWidthBaseIcon:()=>lu,StrokeWidthBoldIcon:()=>Zb,StrokeWidthExtraBoldIcon:()=>jb,SunIcon:()=>Ys,TextAlignBottomIcon:()=>M1,TextAlignCenterIcon:()=>S1,TextAlignLeftIcon:()=>C1,TextAlignMiddleIcon:()=>A1,TextAlignRightIcon:()=>I1,TextAlignTopIcon:()=>k1,TextIcon:()=>ln,TextSizeIcon:()=>Mb,TrashIcon:()=>Jt,UndoIcon:()=>$p,UngroupIcon:()=>su,UnlockedIcon:()=>Ri,WelcomeScreenHelpArrow:()=>Tb,WelcomeScreenMenuArrow:()=>wb,WelcomeScreenTopToolbarArrow:()=>Cb,XBrandIcon:()=>Rb,ZoomInIcon:()=>Vp,ZoomOutIcon:()=>Yp,ZoomResetIcon:()=>Lb,abacusIcon:()=>X1,adjustmentsIcon:()=>ax,alertTriangleIcon:()=>ad,angleIcon:()=>id,boltIcon:()=>Zs,brainIcon:()=>H1,brainIconThin:()=>U1,bucketFillIcon:()=>Co,bucketFillIconSvgPaths:()=>Xp,checkIcon:()=>td,chevronDownIcon:()=>dx,chevronLeftIcon:()=>u4,chevronRight:()=>mx,clipboard:()=>Y6,clone:()=>o4,codeIcon:()=>mu,coffeeIcon:()=>Q1,collapseDownIcon:()=>ld,collapseUpIcon:()=>nx,copyIcon:()=>Wa,createIcon:()=>D,cropIcon:()=>gu,cutIcon:()=>P1,done:()=>zb,downloadIcon:()=>pu,drawShapeToolIcon:()=>Bi,elbowArrowIcon:()=>Xn,elementLinkIcon:()=>cd,emptyIcon:()=>js,eraser:()=>a4,exportToFileIcon:()=>Fb,exportToPlus:()=>J6,eyeClosedIcon:()=>z1,eyeDropperIcon:()=>N1,eyeDropperIconSvgPaths:()=>uu,eyeIcon:()=>Ya,file:()=>n4,flipHorizontal:()=>Z1,flipVertical:()=>$1,fontSizeIcon:()=>Oi,frameToolIcon:()=>Br,fullscreenIcon:()=>F1,gridIcon:()=>ox,handIcon:()=>_1,helpIcon:()=>D1,historyCommandIcon:()=>G1,historyIcon:()=>W1,iconFillColor:()=>ur,laserPointerToolIcon:()=>Fr,lineEditorIcon:()=>rx,loginIcon:()=>m4,magnetIcon:()=>J1,menu:()=>Z6,mermaidLogoIcon:()=>Va,messageCircleIcon:()=>h4,microphoneIcon:()=>V1,microphoneMutedIcon:()=>Y1,paintIcon:()=>hu,palette:()=>K6,pencilIcon:()=>lx,playerPlayIcon:()=>s4,playerStopFilledIcon:()=>l4,pngIcon:()=>q1,polygonIcon:()=>Wp,presentationIcon:()=>g4,publishIcon:()=>L1,questionCircle:()=>Hb,resetZoom:()=>e4,resizeIcon:()=>p4,roundArrowIcon:()=>$n,save:()=>Nb,saveAs:()=>Ob,searchIcon:()=>zo,selectAllIcon:()=>K1,settingsIcon:()=>px,share:()=>Ub,shareIOS:()=>q6,shareWindows:()=>Q6,sharpArrowIcon:()=>Kn,shield:()=>r4,sidebarRightIcon:()=>cx,slashIcon:()=>Bb,stackPushIcon:()=>B1,start:()=>t4,stickyNoteToolIcon:()=>$s,stop:()=>Vb,strokeIcon:()=>sx,strokeVariabilityConstantIcon:()=>cu,strokeVariabilityVariableIcon:()=>du,svgIcon:()=>j1,tablerCheckIcon:()=>R1,upIcon:()=>ix,usersIcon:()=>rd,warning:()=>j6,youtubeIcon:()=>tx,zoomAreaIcon:()=>sd,zoomIn:()=>X6,zoomOut:()=>$6});import G6 from"clsx";import Rt from"react";import{Fragment as je,jsx as g,jsxs as B}from"react/jsx-runtime";var ur=e=>"var(--icon-fill-color)",Q2=e=>e===Q.LIGHT?"#fff":"#1e1e1e",D=(e,t=512)=>{let{width:o=512,height:r=o,mirror:n,style:i,...a}=typeof t=="number"?{width:t}:t;return g("svg",{"aria-hidden":"true",focusable:"false",role:"img",viewBox:`0 0 ${o} ${r}`,className:G6({"rtl-mirror":n}),style:i,...a,children:typeof e=="string"?g("path",{fill:"currentColor",d:e}):e})},Y={width:24,height:24,fill:"none",strokeWidth:2,stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},ye={width:20,height:20,fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"},To={width:40,height:20},W6=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("polyline",{points:"5 12 3 12 12 3 21 12 19 12"}),g("path",{d:"M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7"}),g("path",{d:"M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6"})]}),Y),jc=D(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 19a9 9 0 0 1 9 0a9 9 0 0 1 9 0"}),g("path",{d:"M3 6a9 9 0 0 1 9 0a9 9 0 0 1 9 0"}),g("line",{x1:"3",y1:"6",x2:"3",y2:"19"}),g("line",{x1:"12",y1:"6",x2:"12",y2:"19"}),g("line",{x1:"21",y1:"6",x2:"21",y2:"19"})]}),Y),xb=D(B("svg",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),g("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]}),Y),Di=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"12",cy:"12",r:"1"}),g("circle",{cx:"12",cy:"19",r:"1"}),g("circle",{cx:"12",cy:"5",r:"1"})]}),Y),Eb=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"}),g("path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"}),g("path",{d:"M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"})]}),Y),yb=D(B("svg",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M9 4v6l-2 4v2h10v-2l-2 -4v-6"}),g("line",{x1:"12",y1:"16",x2:"12",y2:"21"}),g("line",{x1:"8",y1:"4",x2:"16",y2:"4"})]}),Y),Wp=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 5m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M19 8m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M5 11m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M15 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M6.5 9.5l3.5 -3"}),g("path",{d:"M14 5.5l3 1.5"}),g("path",{d:"M18.5 10l-2.5 7"}),g("path",{d:"M13.5 17.5l-7 -5"})]}),Y),Ri=D(B("g",{children:[g("path",{d:"M13.542 8.542H6.458a2.5 2.5 0 0 0-2.5 2.5v3.75a2.5 2.5 0 0 0 2.5 2.5h7.084a2.5 2.5 0 0 0 2.5-2.5v-3.75a2.5 2.5 0 0 0-2.5-2.5Z",stroke:"currentColor",strokeWidth:"1.25"}),g("path",{d:"M10 13.958a1.042 1.042 0 1 0 0-2.083 1.042 1.042 0 0 0 0 2.083Z",stroke:"currentColor",strokeWidth:"1.25"}),g("mask",{id:"UnlockedIcon",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:6,y:1,width:9,height:9,children:g("path",{stroke:"none",d:"M6.399 9.561V5.175c0-.93.401-1.823 1.116-2.48a3.981 3.981 0 0 1 2.693-1.028c1.01 0 1.98.37 2.694 1.027.715.658 1.116 1.55 1.116 2.481",fill:"#fff"})}),g("g",{mask:"url(#UnlockedIcon)",children:g("path",{stroke:"none",d:"M5.149 9.561v1.25h2.5v-1.25h-2.5Zm5.06-7.894V.417v1.25Zm2.559 3.508v1.25h2.5v-1.25h-2.5ZM7.648 8.51V5.175h-2.5V8.51h2.5Zm0-3.334c0-.564.243-1.128.713-1.561L6.668 1.775c-.959.883-1.52 2.104-1.52 3.4h2.5Zm.713-1.561a2.732 2.732 0 0 1 1.847-.697v-2.5c-1.31 0-2.585.478-3.54 1.358L8.36 3.614Zm1.847-.697c.71 0 1.374.26 1.847.697l1.694-1.839a5.231 5.231 0 0 0-3.54-1.358v2.5Zm1.847.697c.47.433.713.997.713 1.561h2.5c0-1.296-.56-2.517-1.52-3.4l-1.693 1.839Z",fill:"currentColor"})})]}),ye),za=D(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M13.542 8.542H6.458a2.5 2.5 0 0 0-2.5 2.5v3.75a2.5 2.5 0 0 0 2.5 2.5h7.084a2.5 2.5 0 0 0 2.5-2.5v-3.75a2.5 2.5 0 0 0-2.5-2.5Z"}),g("path",{d:"M10 13.958a1.042 1.042 0 1 0 0-2.083 1.042 1.042 0 0 0 0 2.083Z"}),g("path",{d:"M6.667 8.333V5.417C6.667 3.806 8.159 2.5 10 2.5c1.841 0 3.333 1.306 3.333 2.917v2.916"})]}),ye),vb=D(g("g",{fill:"currentColor",children:g("path",{d:"M12 2a5 5 0 0 1 5 5v3a3 3 0 0 1 3 3v6a3 3 0 0 1 -3 3h-10a3 3 0 0 1 -3 -3v-6a3 3 0 0 1 3 -3v-3a5 5 0 0 1 5 -5m0 12a2 2 0 0 0 -1.995 1.85l-.005 .15a2 2 0 1 0 2 -2m0 -10a3 3 0 0 0 -3 3v3h6v-3a3 3 0 0 0 -3 -3"})}),{width:24,height:24}),wb=D(B(je,{children:[g("path",{d:"M38.5 83.5c-14-2-17.833-10.473-21-22.5C14.333 48.984 12 22 12 12.5",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"}),g("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m12.005 10.478 7.905 14.423L6 25.75l6.005-15.273Z",fill:"currentColor"}),g("path",{d:"M12.005 10.478c1.92 3.495 3.838 7 7.905 14.423m-7.905-14.423c3.11 5.683 6.23 11.368 7.905 14.423m0 0c-3.68.226-7.35.455-13.91.85m13.91-.85c-5.279.33-10.566.647-13.91.85m0 0c1.936-4.931 3.882-9.86 6.005-15.273M6 25.75c2.069-5.257 4.135-10.505 6.005-15.272",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"})]}),{width:41,height:94,fill:"none"}),Tb=D(B(je,{children:[g("path",{d:"M18.026 1.232c-5.268 13.125-5.548 33.555 3.285 42.311 8.823 8.75 33.31 12.304 42.422 13.523",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"}),g("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m72.181 59.247-13.058-10-2.948 13.62 16.006-3.62Z",fill:"currentColor"}),g("path",{d:"M72.181 59.247c-3.163-2.429-6.337-4.856-13.058-10m13.058 10c-5.145-3.936-10.292-7.882-13.058-10m0 0c-.78 3.603-1.563 7.196-2.948 13.62m2.948-13.62c-1.126 5.168-2.24 10.346-2.948 13.62m0 0c5.168-1.166 10.334-2.343 16.006-3.62m-16.006 3.62c5.51-1.248 11.01-2.495 16.006-3.62",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"})]}),{width:85,height:71,fill:"none"}),Cb=D(B(je,{children:[g("path",{d:"M1 77c14-2 31.833-11.973 35-24 3.167-12.016-6-35-9.5-43.5",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"}),g("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m24.165 1.093-2.132 16.309 13.27-4.258-11.138-12.05Z",fill:"currentColor"}),g("path",{d:"M24.165 1.093c-.522 3.953-1.037 7.916-2.132 16.309m2.131-16.309c-.835 6.424-1.68 12.854-2.13 16.308m0 0c3.51-1.125 7.013-2.243 13.27-4.257m-13.27 4.257c5.038-1.608 10.08-3.232 13.27-4.257m0 0c-3.595-3.892-7.197-7.777-11.14-12.05m11.14 12.05c-3.837-4.148-7.667-8.287-11.14-12.05",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round"})]}),{width:38,height:78,fill:"none"}),V6=D(g("g",{fill:"currentColor",children:g("path",{d:"M39.9 32.889a.326.326 0 0 0-.279-.056c-2.094-3.083-4.774-6-7.343-8.833l-.419-.472a.212.212 0 0 0-.056-.139.586.586 0 0 0-.167-.111l-.084-.083-.056-.056c-.084-.167-.28-.278-.475-.167-.782.39-1.507.973-2.206 1.528-.92.722-1.842 1.445-2.708 2.25a8.405 8.405 0 0 0-.977 1.028c-.14.194-.028.361.14.444-.615.611-1.23 1.223-1.843 1.861a.315.315 0 0 0-.084.223c0 .083.056.166.111.194l1.09.833v.028c1.535 1.528 4.244 3.611 7.12 5.861.418.334.865.667 1.284 1 .195.223.39.473.558.695.084.11.28.139.391.055.056.056.14.111.196.167a.398.398 0 0 0 .167.056.255.255 0 0 0 .224-.111.394.394 0 0 0 .055-.167c.029 0 .028.028.056.028a.318.318 0 0 0 .224-.084l5.082-5.528a.309.309 0 0 0 0-.444Zm-14.63-1.917a.485.485 0 0 0 .111.14c.586.5 1.2 1 1.843 1.555l-2.569-1.945-.251-.166c-.056-.028-.112-.084-.168-.111l-.195-.167.056-.056.055-.055.112-.111c.866-.861 2.346-2.306 3.1-3.028-.81.805-2.43 3.167-2.095 3.944Zm8.767 6.89-2.122-1.612a44.713 44.713 0 0 0-2.625-2.5c1.145.861 2.122 1.611 2.262 1.75 1.117.972 1.06.806 1.815 1.445l.921.666a1.06 1.06 0 0 1-.251.25Zm.558.416-.056-.028c.084-.055.168-.111.252-.194l-.196.222ZM1.089 5.75c.055.361.14.722.195 1.056.335 1.833.67 3.5 1.284 4.75l.252.944c.084.361.223.806.363.917 1.424 1.25 3.602 3.11 5.947 4.889a.295.295 0 0 0 .363 0s0 .027.028.027a.254.254 0 0 0 .196.084.318.318 0 0 0 .223-.084c2.988-3.305 5.221-6.027 6.813-8.305.112-.111.14-.278.14-.417.111-.111.195-.25.307-.333.111-.111.111-.306 0-.39l-.028-.027c0-.055-.028-.139-.084-.167-.698-.666-1.2-1.138-1.731-1.638-.922-.862-1.871-1.75-3.881-3.75l-.028-.028c-.028-.028-.056-.056-.112-.056-.558-.194-1.703-.389-3.127-.639C6.087 2.223 3.21 1.723.614.944c0 0-.168 0-.196.028l-.083.084c-.028.027-.056.055-.224.11h.056-.056c.028.167.028.278.084.473 0 .055.112.5.112.555l.782 3.556Zm15.496 3.278-.335-.334c.084.112.196.195.335.334Zm-3.546 4.666-.056.056c0-.028.028-.056.056-.056Zm-2.038-10c.168.167.866.834 1.033.973-.726-.334-2.54-1.167-3.379-1.445.838.167 1.983.334 2.346.472ZM1.424 2.306c.419.722.754 3.222 1.089 5.666-.196-.778-.335-1.555-.503-2.278-.251-1.277-.503-2.416-.838-3.416.056 0 .14 0 .252.028Zm-.168-.584c-.112 0-.223-.028-.307-.028 0-.027 0-.055-.028-.055.14 0 .223.028.335.083Zm-1.089.222c0-.027 0-.027 0 0ZM39.453 1.333c.028-.11-.558-.61-.363-.639.42-.027.42-.666 0-.666-.558.028-1.144.166-1.675.25-.977.194-1.982.389-2.96.61-2.205.473-4.383.973-6.561 1.557-.67.194-1.424.333-2.066.666-.224.111-.196.333-.084.472-.056.028-.084.028-.14.056-.195.028-.363.056-.558.083-.168.028-.252.167-.224.334 0 .027.028.083.028.11-1.173 1.556-2.485 3.195-3.909 4.945-1.396 1.611-2.876 3.306-4.356 5.056-4.719 5.5-10.052 11.75-15.943 17.25a.268.268 0 0 0 0 .389c.028.027.056.055.084.055-.084.084-.168.14-.252.222-.056.056-.084.111-.084.167a.605.605 0 0 0-.111.139c-.112.111-.112.305.028.389.111.11.307.11.39-.028.029-.028.029-.056.056-.056a.44.44 0 0 1 .615 0c.335.362.67.723.977 1.028l-.698-.583c-.112-.111-.307-.083-.39.028-.113.11-.085.305.027.389l7.427 6.194c.056.056.112.056.196.056s.14-.028.195-.084l.168-.166c.028.027.083.027.111.027.084 0 .14-.027.196-.083 10.052-10.055 18.15-17.639 27.42-24.417.083-.055.111-.166.111-.25.112 0 .196-.083.251-.194 1.704-5.194 2.039-9.806 2.15-12.083v-.028c0-.028.028-.056.028-.083.028-.056.028-.084.028-.084a1.626 1.626 0 0 0-.111-1.028ZM21.472 9.5c.446-.5.893-1.028 1.34-1.5-2.876 3.778-7.65 9.583-14.408 16.5 4.607-5.083 9.242-10.333 13.068-15ZM5.193 35.778h.084-.084Zm3.462 3.194c-.027-.028-.027-.028 0-.028v.028Zm4.16-3.583c.224-.25.448-.472.699-.722 0 0 0 .027.028.027-.252.223-.475.445-.726.695Zm1.146-1.111c.14-.14.279-.334.446-.5l.028-.028c1.648-1.694 3.351-3.389 5.082-5.111l.028-.028c.419-.333.921-.694 1.368-1.028a379.003 379.003 0 0 0-6.952 6.695ZM24.794 6.472c-.921 1.195-1.954 2.778-2.82 4.028-2.736 3.944-11.532 13.583-11.727 13.75a1976.983 1976.983 0 0 1-8.042 7.639l-.167.167c-.14-.167-.14-.417.028-.556C14.49 19.861 22.03 10.167 25.074 5.917c-.084.194-.14.36-.28.555Zm4.83 5.695c-1.116-.64-1.646-1.64-1.34-2.611l.084-.334c.028-.083.084-.194.14-.277.307-.5.754-.917 1.257-1.167.027 0 .055 0 .083-.028-.028-.056-.028-.139-.028-.222.028-.167.14-.278.335-.278.335 0 1.369.306 1.76.639.111.083.223.194.335.305.14.167.363.445.474.667.056.028.112.306.196.445.056.222.111.472.084.694-.028.028 0 .194-.028.194a2.668 2.668 0 0 1-.363 1.028c-.028.028-.028.056-.056.084l-.028.027c-.14.223-.335.417-.53.556-.643.444-1.369.583-2.095.389 0 0-.195-.084-.28-.111Zm8.154-.834a39.098 39.098 0 0 1-.893 3.167c0 .028-.028.083 0 .111-.056 0-.084.028-.14.056-2.206 1.61-4.356 3.305-6.506 5.028 1.843-1.64 3.686-3.306 5.613-4.945.558-.5.949-1.139 1.06-1.861l.28-1.667v-.055c.14-.334.67-.195.586.166Z",fill:"currentColor"})}),{width:40,height:40,fill:"none"}),Sb=D(B("g",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 6l4.153 11.793a0.365 .365 0 0 0 .331 .207a0.366 .366 0 0 0 .332 -.207l2.184 -4.793l4.787 -1.994a0.355 .355 0 0 0 .213 -.323a0.355 .355 0 0 0 -.213 -.323l-11.787 -4.36z"}),g("path",{d:"M13.5 13.5l4.5 4.5"})]}),{fill:"none",width:22,height:22,strokeWidth:1.25}),Gs=D(B("g",{stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,children:[g("path",{d:"M4.028 13.252c-.657 -.972 -1.028 -2.078 -1.028 -3.252c0 -3.866 4.03 -7 9 -7s9 3.134 9 7s-4.03 7 -9 7c-1.913 0 -3.686 -.464 -5.144 -1.255"}),g("path",{d:"M5 15m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M5 17c0 1.42 .316 2.805 1 4"})]}),{fill:"none",width:22,height:22,strokeWidth:1.25}),qc=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("rect",{x:"4",y:"4",width:"16",height:"16",rx:"2"})]}),Y),Jc=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10.5 20.4l-6.9 -6.9c-.781 -.781 -.781 -2.219 0 -3l6.9 -6.9c.781 -.781 2.219 -.781 3 0l6.9 6.9c.781 .781 .781 2.219 0 3l-6.9 6.9c-.781 .781 -2.219 .781 -3 0z"})]}),Y),Qc=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"12",cy:"12",r:"9"})]}),Y),Ib=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"5",y1:"12",x2:"19",y2:"12"}),g("line",{x1:"15",y1:"16",x2:"19",y2:"12"}),g("line",{x1:"15",y1:"8",x2:"19",y2:"12"})]}),Y),Ha=D(g("path",{d:"M4.167 10h11.666",strokeWidth:"1.5"}),ye),kb=D(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M20 17v-12c0 -1.121 -.879 -2 -2 -2s-2 .879 -2 2v12l2 2l2 -2z"}),g("path",{d:"M16 7h4"}),g("path",{d:"M18 19h-13a2 2 0 1 1 0 -4h4a2 2 0 1 0 0 -4h-3"})]}),Y),Gn=D(B("g",{strokeWidth:"1.25",children:[g("path",{clipRule:"evenodd",d:"m7.643 15.69 7.774-7.773a2.357 2.357 0 1 0-3.334-3.334L4.31 12.357a3.333 3.333 0 0 0-.977 2.357v1.953h1.953c.884 0 1.732-.352 2.357-.977Z"}),g("path",{d:"m11.25 5.417 3.333 3.333"})]}),ye),ln=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"20",x2:"7",y2:"20"}),g("line",{x1:"14",y1:"20",x2:"21",y2:"20"}),g("line",{x1:"6.9",y1:"15",x2:"13.8",y2:"15"}),g("line",{x1:"10.2",y1:"6.3",x2:"16",y2:"20"}),g("polyline",{points:"5 20 11 4 13 4 20 20"})]}),Y),Mb=D(B("g",{stroke:"currentColor",strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 7v-2h13v2"}),g("path",{d:"M10 5v14"}),g("path",{d:"M12 19h-4"}),g("path",{d:"M15 13v-1h6v1"}),g("path",{d:"M18 12v7"}),g("path",{d:"M17 19h2"})]}),Y),Wn=D(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M12.5 6.667h.01"}),g("path",{d:"M4.91 2.625h10.18a2.284 2.284 0 0 1 2.285 2.284v10.182a2.284 2.284 0 0 1-2.284 2.284H4.909a2.284 2.284 0 0 1-2.284-2.284V4.909a2.284 2.284 0 0 1 2.284-2.284Z"}),g("path",{d:"m3.333 12.5 3.334-3.333c.773-.745 1.726-.745 2.5 0l4.166 4.166"}),g("path",{d:"m11.667 11.667.833-.834c.774-.744 1.726-.744 2.5 0l1.667 1.667"})]}),ye),Ab=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M19 20h-10.5l-4.21 -4.3a1 1 0 0 1 0 -1.41l10 -10a1 1 0 0 1 1.41 0l5 5a1 1 0 0 1 0 1.41l-9.2 9.3"}),g("path",{d:"M18 13.3l-6.3 -6.3"})]}),Y),Vp=D(g("path",{strokeWidth:"1.25",d:"M10 4.167v11.666M4.167 10h11.666"}),ye),Yp=D(g("path",{d:"M5 10h10",strokeWidth:"1.25"}),ye),Lb=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M21 21l-6 -6"}),g("path",{d:"M3.268 12.043a7.017 7.017 0 0 0 6.634 4.957a7.012 7.012 0 0 0 7.043 -6.131a7 7 0 0 0 -5.314 -7.672a7.021 7.021 0 0 0 -8.241 4.403"}),g("path",{d:"M3 4v4h4"})]}),Y),Jt=D(g("path",{strokeWidth:"1.25",d:"M3.333 5.833h13.334M8.333 9.167v5M11.667 9.167v5M4.167 5.833l.833 10c0 .92.746 1.667 1.667 1.667h6.666c.92 0 1.667-.746 1.667-1.667l.833-10M7.5 5.833v-2.5c0-.46.373-.833.833-.833h3.334c.46 0 .833.373.833.833v2.5"}),ye),Vn=D(B("g",{strokeWidth:"1.5",children:[g("polyline",{points:"12 16 18 10 12 4"}),g("polyline",{points:"8 4 2 10 8 16"})]}),ye),Ws=D(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M14.375 6.458H8.958a2.5 2.5 0 0 0-2.5 2.5v5.417a2.5 2.5 0 0 0 2.5 2.5h5.417a2.5 2.5 0 0 0 2.5-2.5V8.958a2.5 2.5 0 0 0-2.5-2.5Z"}),g("path",{clipRule:"evenodd",d:"M11.667 3.125c.517 0 .986.21 1.325.55.34.338.55.807.55 1.325v1.458H8.333c-.485 0-.927.185-1.26.487-.343.312-.57.75-.609 1.24l-.005 5.357H5a1.87 1.87 0 0 1-1.326-.55 1.87 1.87 0 0 1-.549-1.325V5c0-.518.21-.987.55-1.326.338-.34.807-.549 1.325-.549h6.667Z"})]}),ye),Vs=D(g("path",{clipRule:"evenodd",d:"M10 2.5h.328a6.25 6.25 0 0 0 6.6 10.372A7.5 7.5 0 1 1 10 2.493V2.5Z",stroke:"currentColor"}),ye),Ys=D(g("g",{stroke:"currentColor",strokeLinejoin:"round",children:g("path",{d:"M10 12.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM10 4.167V2.5M14.167 5.833l1.166-1.166M15.833 10H17.5M14.167 14.167l1.166 1.166M10 15.833V17.5M5.833 14.167l-1.166 1.166M5 10H3.333M5.833 5.833 4.667 4.667"})}),{...ye,strokeWidth:1.5}),_b=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"6",x2:"20",y2:"6"}),g("line",{x1:"4",y1:"12",x2:"20",y2:"12"}),g("line",{x1:"4",y1:"18",x2:"20",y2:"18"})]}),Y),Ni=D(g("path",{strokeWidth:"1.25",d:"M3.333 14.167v1.666c0 .92.747 1.667 1.667 1.667h10c.92 0 1.667-.746 1.667-1.667v-1.666M5.833 9.167 10 13.333l4.167-4.166M10 3.333v10"}),ye),Ua=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"12",cy:"12",r:"9"}),g("line",{x1:"12",y1:"17",x2:"12",y2:"17.01"}),g("path",{d:"M12 13.5a1.5 1.5 0 0 1 1 -1.5a2.6 2.6 0 1 0 -3 -4"})]}),Y),Pb=D(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"12",cy:"12",r:"9"}),g("line",{x1:"12",y1:"17",x2:"12",y2:"17.01"}),g("path",{d:"M12 13.5a1.5 1.5 0 0 1 1 -1.5a2.6 2.6 0 1 0 -3 -4"})]}),Y),Kp=D(g("path",{strokeWidth:"1.25",d:"M9.167 5.833H5.833c-1.254 0-2.5 1.282-2.5 2.5v5.834c0 1.283 1.252 2.5 2.5 2.5h5.834c1.251 0 2.5-1.25 2.5-2.5v-3.334M8.333 11.667l8.334-8.334M12.5 3.333h4.167V7.5"}),ye),ed=D(g("path",{d:"M7.5 15.833c-3.583 1.167-3.583-2.083-5-2.5m10 4.167v-2.917c0-.833.083-1.166-.417-1.666 2.334-.25 4.584-1.167 4.584-5a3.833 3.833 0 0 0-1.084-2.667 3.5 3.5 0 0 0-.083-2.667s-.917-.25-2.917 1.084a10.25 10.25 0 0 0-5.166 0C5.417 2.333 4.5 2.583 4.5 2.583a3.5 3.5 0 0 0-.083 2.667 3.833 3.833 0 0 0-1.084 2.667c0 3.833 2.25 4.75 4.584 5-.5.5-.5 1-.417 1.666V17.5",strokeWidth:"1.25"}),ye),Db=D(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M7.5 10.833a.833.833 0 1 0 0-1.666.833.833 0 0 0 0 1.666ZM12.5 10.833a.833.833 0 1 0 0-1.666.833.833 0 0 0 0 1.666ZM6.25 6.25c2.917-.833 4.583-.833 7.5 0M5.833 13.75c2.917.833 5.417.833 8.334 0"}),g("path",{d:"M12.917 14.167c0 .833 1.25 2.5 1.666 2.5 1.25 0 2.361-1.39 2.917-2.5.556-1.39.417-4.861-1.25-9.584-1.214-.846-2.5-1.116-3.75-1.25l-.833 2.084M7.083 14.167c0 .833-1.13 2.5-1.526 2.5-1.191 0-2.249-1.39-2.778-2.5-.529-1.39-.397-4.861 1.19-9.584 1.157-.846 2.318-1.116 3.531-1.25l.833 2.084"})]}),ye),Rb=D(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 4l11.733 16h4.267l-11.733 -16z"}),g("path",{d:"M4 20l6.768 -6.768m2.46 -2.46l6.772 -6.772"})]}),Y),td=D(g("polyline",{fill:"none",stroke:"currentColor",points:"20 6 9 17 4 12"}),{width:24,height:24}),Ks=D(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M8.333 11.667a2.917 2.917 0 0 0 4.167 0l3.333-3.334a2.946 2.946 0 1 0-4.166-4.166l-.417.416"}),g("path",{d:"M11.667 8.333a2.917 2.917 0 0 0-4.167 0l-3.333 3.334a2.946 2.946 0 0 0 4.166 4.166l.417-.416"})]}),ye),Nb=D("M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z",{width:448,height:512}),Ob=D("M252 54L203 8a28 27 0 00-20-8H28C12 0 0 12 0 27v195c0 15 12 26 28 26h204c15 0 28-11 28-26V73a28 27 0 00-8-19zM130 213c-21 0-37-16-37-36 0-19 16-35 37-35 20 0 37 16 37 35 0 20-17 36-37 36zm56-169v56c0 4-4 6-7 6H44c-4 0-7-2-7-6V42c0-4 3-7 7-7h133l4 2 3 2a7 7 0 012 5z M296 201l87 95-188 205-78 9c-10 1-19-8-18-20l9-84zm141-14l-41-44a31 31 0 00-46 0l-38 41 87 95 38-42c13-14 13-36 0-50z",{width:448,height:512}),Ga=D(g("path",{d:"m9.257 6.351.183.183H15.819c.34 0 .727.182 1.051.506.323.323.505.708.505 1.05v5.819c0 .316-.183.7-.52 1.035-.337.338-.723.522-1.037.522H4.182c-.352 0-.74-.181-1.058-.5-.318-.318-.499-.705-.499-1.057V5.182c0-.351.181-.736.5-1.054.32-.321.71-.503 1.057-.503H6.53l2.726 2.726Z",strokeWidth:"1.25"}),ye),Y6=D("M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z",{width:384,height:512}),K6=D("M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"),Xp=["M5 16l1.465 1.638a2 2 0 1 1 -3.015 .099l1.55 -1.737z","M13.737 9.737c2.299 -2.3 3.23 -5.095 2.081 -6.245c-1.15 -1.15 -3.945 -.217 -6.244 2.082c-2.3 2.299 -3.231 5.095 -2.082 6.244c1.15 1.15 3.946 .218 6.245 -2.081z","M7.492 11.818c.362 .362 .768 .676 1.208 .934l6.895 4.047c1.078 .557 2.255 -.075 3.692 -1.512c1.437 -1.437 2.07 -2.614 1.512 -3.692c-.372 -.718 -1.72 -3.017 -4.047 -6.895a6.015 6.015 0 0 0 -.934 -1.208"],Co=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),Xp.map(e=>g("path",{d:e},e))]}),Y),Bb=D(g("g",{strokeWidth:1.5,children:g("path",{d:"M6 18l12 -12"})}),Y),od=D(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15 8h.01"}),g("path",{d:"M12 20h-5a3 3 0 0 1 -3 -3v-10a3 3 0 0 1 3 -3h10a3 3 0 0 1 3 3v5"}),g("path",{d:"M4 15l4 -4c.928 -.893 2.072 -.893 3 0l4 4"}),g("path",{d:"M14 14l1 -1c.617 -.593 1.328 -.793 2.009 -.598"}),g("path",{d:"M19 16v6"}),g("path",{d:"M22 19l-3 3l-3 -3"})]}),Y),Fb=D("M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z",{width:512,height:512}),X6=D("M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z",{width:448,height:512}),$6=D("M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z",{width:448,height:512}),zb=D("M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"),Z6=D("M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"),$p=D(g("path",{d:"M7.5 10.833 4.167 7.5 7.5 4.167M4.167 7.5h9.166a3.333 3.333 0 0 1 0 6.667H12.5",strokeWidth:"1.25"}),ye),Zp=D(g("path",{d:"M12.5 10.833 15.833 7.5 12.5 4.167M15.833 7.5H6.667a3.333 3.333 0 1 0 0 6.667H7.5",strokeWidth:"1.25"}),ye),Hb=D("M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z",{mirror:!0}),Ub=D(g("path",{d:"M5 12.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM15 7.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM15 17.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5ZM7.25 8.917l5.5-2.834M7.25 11.083l5.5 2.834",strokeWidth:"1.5"}),ye),j6=D("M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"),q6=D("M16 5l-1.42 1.42-1.59-1.59V16h-1.98V4.83L9.42 6.42 8 5l4-4 4 4zm4 5v11c0 1.1-.9 2-2 2H6c-1.11 0-2-.9-2-2V10c0-1.11.89-2 2-2h3v2H6v11h12V10h-3V8h3c1.1 0 2 .89 2 2z",{width:24,height:24}),J6=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 9h-1a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-8a2 2 0 0 0 -2 -2h-1"}),g("path",{d:"M12 14v-11"}),g("path",{d:"M9 6l3 -3l3 3"})]}),Y),Q6=D(B(je,{children:[g("path",{fill:"currentColor",d:"M40 5.6v6.1l-4.1.7c-8.9 1.4-16.5 6.9-20.6 15C13 32 10.9 43 12.4 43c.4 0 2.4-1.3 4.4-3 5-3.9 12.1-7 18.2-7.7l5-.6v12.8l11.2-11.3L62.5 22 51.2 10.8 40-.5v6.1zm10.2 22.6L44 34.5v-6.8l-6.9.6c-3.9.3-9.8 1.7-13.2 3.1-3.5 1.4-6.5 2.4-6.7 2.2-.9-1 3-7.5 6.4-10.8C28 18.6 34.4 16 40.1 16c3.7 0 3.9-.1 3.9-3.2V9.5l6.2 6.3 6.3 6.2-6.3 6.2z"}),g("path",{stroke:"currentColor",fill:"currentColor",d:"M0 36v20h48v-6.2c0-6 0-6.1-2-4.3-1.1 1-2 2.9-2 4.2V52H4V34c0-17.3-.1-18-2-18s-2 .7-2 20z"})]}),{width:64,height:64}),e4=D(g("path",{stroke:"currentColor",strokeWidth:"40",fill:"currentColor",d:"M148 560a318 318 0 0 0 522 110 316 316 0 0 0 0-450 316 316 0 0 0-450 0c-11 11-21 22-30 34v4h47c25 0 46 21 46 46s-21 45-46 45H90c-13 0-25-6-33-14-9-9-14-20-14-33V156c0-25 20-45 45-45s45 20 45 45v32l1 1a401 401 0 0 1 623 509l212 212a42 42 0 0 1-59 59L698 757A401 401 0 0 1 65 570a42 42 0 0 1 83-10z"}),{width:1024}),eT=B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 10l0 10"}),g("path",{d:"M12 10l4 4"}),g("path",{d:"M12 10l-4 4"}),g("path",{d:"M4 4l16 0"})]}),tT=B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 5l0 14"}),g("path",{d:"M16 9l-4 -4"}),g("path",{d:"M8 9l4 -4"})]}),jp=D(tT,Y),qp=D(tT,{...Y,style:{transform:"rotate(180deg)"}}),Jp=D(eT,Y),Qp=D(eT,{...Y,style:{transform:"rotate(180deg)"}}),eu=D(B(je,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M3.333 3.333h13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M13.542 6.458h-.417c-.92 0-1.667.747-1.667 1.667v7.083c0 .92.746 1.667 1.667 1.667h.417c.92 0 1.666-.746 1.666-1.667V8.125c0-.92-.746-1.667-1.666-1.667ZM6.875 6.458h-.417c-.92 0-1.666.747-1.666 1.667v3.75c0 .92.746 1.667 1.666 1.667h.417c.92 0 1.667-.746 1.667-1.667v-3.75c0-.92-.747-1.667-1.667-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),tu=D(B(je,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M3.333 16.667h13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M6.875 3.125h-.417c-.92 0-1.666.746-1.666 1.667v7.083c0 .92.746 1.667 1.666 1.667h.417c.92 0 1.667-.746 1.667-1.667V4.792c0-.92-.747-1.667-1.667-1.667ZM13.542 5.817h-.417c-.92 0-1.667.747-1.667 1.667v4.391c0 .92.746 1.667 1.667 1.667h.417c.92 0 1.666-.746 1.666-1.667V7.484c0-.92-.746-1.667-1.666-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),ou=D(B(je,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M3.333 3.333v13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M15.208 4.792H8.125c-.92 0-1.667.746-1.667 1.666v.417c0 .92.747 1.667 1.667 1.667h7.083c.92 0 1.667-.747 1.667-1.667v-.417c0-.92-.746-1.666-1.667-1.666ZM12.516 11.458H8.125c-.92 0-1.667.746-1.667 1.667v.417c0 .92.747 1.666 1.667 1.666h4.391c.92 0 1.667-.746 1.667-1.666v-.417c0-.92-.746-1.667-1.667-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),ru=D(B(je,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M16.667 3.333v13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M11.875 4.792H4.792c-.92 0-1.667.746-1.667 1.666v.417c0 .92.746 1.667 1.667 1.667h7.083c.92 0 1.667-.747 1.667-1.667v-.417c0-.92-.746-1.666-1.667-1.666ZM11.683 11.458H7.292c-.92 0-1.667.746-1.667 1.667v.417c0 .92.746 1.666 1.667 1.666h4.39c.921 0 1.667-.746 1.667-1.666v-.417c0-.92-.746-1.667-1.666-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),Gb=D(B(je,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M16.667 3.333v13.334M3.333 3.333v13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M14.375 10.208v-.416c0-.92-.746-1.667-1.667-1.667H7.292c-.92 0-1.667.746-1.667 1.667v.416c0 .92.746 1.667 1.667 1.667h5.416c.92 0 1.667-.746 1.667-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),Wb=D(B(je,{children:[B("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M3.333 3.333h13.334M3.333 16.667h13.334",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M10.208 5.625h-.416c-.92 0-1.667.746-1.667 1.667v5.416c0 .92.746 1.667 1.667 1.667h.416c.92 0 1.667-.746 1.667-1.667V7.292c0-.92-.746-1.667-1.667-1.667Z"})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),nu=D(B("g",{stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M1.667 10h2.916",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M8.333 10h3.334",strokeLinejoin:"round"}),g("path",{d:"M15.417 10h2.916",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M6.875 4.792h-.417c-.92 0-1.666.746-1.666 1.666v7.084c0 .92.746 1.666 1.666 1.666h.417c.92 0 1.667-.746 1.667-1.666V6.458c0-.92-.747-1.666-1.667-1.666ZM13.542 6.458h-.417c-.92 0-1.667.747-1.667 1.667v3.75c0 .92.746 1.667 1.667 1.667h.417c.92 0 1.666-.746 1.666-1.667v-3.75c0-.92-.746-1.667-1.666-1.667Z"})]}),ye),iu=D(B("g",{stroke:"currentColor",strokeWidth:"1.25",children:[g("path",{d:"M10 18.333v-2.916",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M10 11.667V8.333",strokeLinejoin:"round"}),g("path",{d:"M10 4.583V1.667",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M4.792 13.125v.417c0 .92.746 1.666 1.666 1.666h7.084c.92 0 1.666-.746 1.666-1.666v-.417c0-.92-.746-1.667-1.666-1.667H6.458c-.92 0-1.666.746-1.666 1.667ZM6.458 6.458v.417c0 .92.747 1.667 1.667 1.667h3.75c.92 0 1.667-.747 1.667-1.667v-.417c0-.92-.746-1.666-1.667-1.666h-3.75c-.92 0-1.667.746-1.667 1.666Z"})]}),ye),rd=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("circle",{cx:"9",cy:"7",r:"4"}),g("path",{d:"M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2"}),g("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"}),g("path",{d:"M21 21v-2a4 4 0 0 0 -3 -3.85"})]}),Y),t4=D("M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z"),Vb=D("M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z"),qo=D(B(je,{children:[g("g",{clipPath:"url(#a)",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round",children:g("path",{d:"M15 5 5 15M5 5l10 10"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),o4=D("M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z",{mirror:!0}),r4=D("M11.553 22.894a.998.998 0 00.894 0s3.037-1.516 5.465-4.097C19.616 16.987 21 14.663 21 12V5a1 1 0 00-.649-.936l-8-3a.998.998 0 00-.702 0l-8 3A1 1 0 003 5v7c0 2.663 1.384 4.987 3.088 6.797 2.428 2.581 5.465 4.097 5.465 4.097zm-1.303-8.481l6.644-6.644a.856.856 0 111.212 1.212l-7.25 7.25a.856.856 0 01-1.212 0l-3.75-3.75a.856.856 0 111.212-1.212l3.144 3.144z",{width:24}),n4=D("M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm32-48h224V288l-23.5-23.5c-4.7-4.7-12.3-4.7-17 0L176 352l-39.5-39.5c-4.7-4.7-12.3-4.7-17 0L80 352v64zm48-240c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48z",{width:384,height:512}),au=Rt.memo(({theme:e})=>D(B(je,{children:[g("path",{d:"M25 26H111V111H25",fill:ur(e)}),g("path",{d:"M25 111C25 80.2068 25 49.4135 25 26M25 26C48.6174 26 72.2348 26 111 26H25ZM25 26C53.3671 26 81.7343 26 111 26H25ZM111 26C111 52.303 111 78.606 111 111V26ZM111 26C111 51.2947 111 76.5893 111 111V26ZM111 111C87.0792 111 63.1585 111 25 111H111ZM111 111C87.4646 111 63.9293 111 25 111H111ZM25 111C25 81.1514 25 51.3028 25 26V111Z",stroke:ur(e),strokeWidth:"2"}),g("path",{d:"M100 100H160V160H100",fill:ur(e)}),g("path",{d:"M100 160C100 144.106 100 128.211 100 100M100 100C117.706 100 135.412 100 160 100H100ZM100 100C114.214 100 128.428 100 160 100H100ZM160 100C160 120.184 160 140.369 160 160V100ZM160 100C160 113.219 160 126.437 160 160V100ZM160 160C145.534 160 131.068 160 100 160H160ZM160 160C143.467 160 126.934 160 100 160H160ZM100 160C100 143.661 100 127.321 100 100V160Z",stroke:ur(e),strokeWidth:"2"}),B("g",{fill:Q2(e),stroke:ur(e),strokeWidth:"6",children:[g("rect",{x:"2.5",y:"2.5",width:"30",height:"30"}),g("rect",{x:"2.5",y:"149.5",width:"30",height:"30"}),g("rect",{x:"147.5",y:"149.5",width:"30",height:"30"}),g("rect",{x:"147.5",y:"2.5",width:"30",height:"30"})]})]}),{width:182,height:182,mirror:!0})),su=Rt.memo(({theme:e})=>D(B(je,{children:[g("path",{d:"M25 26H111V111H25",fill:ur(e)}),g("path",{d:"M25 111C25 80.2068 25 49.4135 25 26M25 26C48.6174 26 72.2348 26 111 26H25ZM25 26C53.3671 26 81.7343 26 111 26H25ZM111 26C111 52.303 111 78.606 111 111V26ZM111 26C111 51.2947 111 76.5893 111 111V26ZM111 111C87.0792 111 63.1585 111 25 111H111ZM111 111C87.4646 111 63.9293 111 25 111H111ZM25 111C25 81.1514 25 51.3028 25 26V111Z",stroke:ur(e),strokeWidth:"2"}),g("path",{d:"M100 100H160V160H100",fill:ur(e)}),g("path",{d:"M100 160C100 144.106 100 128.211 100 100M100 100C117.706 100 135.412 100 160 100H100ZM100 100C114.214 100 128.428 100 160 100H100ZM160 100C160 120.184 160 140.369 160 160V100ZM160 100C160 113.219 160 126.437 160 160V100ZM160 160C145.534 160 131.068 160 100 160H160ZM160 160C143.467 160 126.934 160 100 160H160ZM100 160C100 143.661 100 127.321 100 100V160Z",stroke:ur(e),strokeWidth:"2"}),B("g",{fill:Q2(e),stroke:ur(e),strokeWidth:"6",children:[g("rect",{x:"2.5",y:"2.5",width:"30",height:"30"}),g("rect",{x:"78.5",y:"149.5",width:"30",height:"30"}),g("rect",{x:"147.5",y:"149.5",width:"30",height:"30"}),g("rect",{x:"147.5",y:"78.5",width:"30",height:"30"}),g("rect",{x:"105.5",y:"2.5",width:"30",height:"30"}),g("rect",{x:"2.5",y:"102.5",width:"30",height:"30"})]})]}),{width:182,height:182,mirror:!0})),Yb=D(g("g",{strokeWidth:1.25,children:g("path",{d:"M5.879 2.625h8.242a3.27 3.27 0 0 1 3.254 3.254v8.242a3.27 3.27 0 0 1-3.254 3.254H5.88a3.27 3.27 0 0 1-3.254-3.254V5.88A3.27 3.27 0 0 1 5.88 2.626l-.001-.001ZM4.518 16.118l7.608-12.83m.198 13.934 5.051-9.897M2.778 9.675l9.348-6.387m-7.608 12.83 12.857-8.793"})}),ye),Kb=D(B(je,{children:[g("path",{d:"M5.879 2.625h8.242a3.254 3.254 0 0 1 3.254 3.254v8.242a3.254 3.254 0 0 1-3.254 3.254H5.88a3.254 3.254 0 0 1-3.254-3.254V5.88a3.254 3.254 0 0 1 3.254-3.254Z",stroke:"currentColor",strokeWidth:"1.25"}),g("mask",{id:"FillHachureIcon",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:2,y:2,width:16,height:16,children:g("path",{d:"M5.879 2.625h8.242a3.254 3.254 0 0 1 3.254 3.254v8.242a3.254 3.254 0 0 1-3.254 3.254H5.88a3.254 3.254 0 0 1-3.254-3.254V5.88a3.254 3.254 0 0 1 3.254-3.254Z",fill:"currentColor",stroke:"currentColor",strokeWidth:"1.25"})}),g("g",{mask:"url(#FillHachureIcon)",children:g("path",{d:"M2.258 15.156 15.156 2.258M7.324 20.222 20.222 7.325m-20.444 5.35L12.675-.222m-8.157 18.34L17.416 5.22",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})})]}),ye),Xb=D(B(je,{children:[B("g",{clipPath:"url(#a)",children:[g("path",{d:"M5.879 2.625h8.242a3.254 3.254 0 0 1 3.254 3.254v8.242a3.254 3.254 0 0 1-3.254 3.254H5.88a3.254 3.254 0 0 1-3.254-3.254V5.88a3.254 3.254 0 0 1 3.254-3.254Z",stroke:"currentColor",strokeWidth:"1.25"}),g("mask",{id:"FillCrossHatchIcon",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:-1,y:-1,width:22,height:22,children:g("path",{d:"M2.426 15.044 15.044 2.426M7.383 20 20 7.383M0 12.617 12.617 0m-7.98 17.941L17.256 5.324m-2.211 12.25L2.426 4.956M20 12.617 7.383 0m5.234 20L0 7.383m17.941 7.98L5.324 2.745",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),g("g",{mask:"url(#FillCrossHatchIcon)",children:g("path",{d:"M14.121 2H5.88A3.879 3.879 0 0 0 2 5.879v8.242A3.879 3.879 0 0 0 5.879 18h8.242A3.879 3.879 0 0 0 18 14.121V5.88A3.879 3.879 0 0 0 14.121 2Z",fill:"currentColor"})})]}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),$b=D(B(je,{children:[g("g",{clipPath:"url(#a)",children:g("path",{d:"M4.91 2.625h10.18a2.284 2.284 0 0 1 2.285 2.284v10.182a2.284 2.284 0 0 1-2.284 2.284H4.909a2.284 2.284 0 0 1-2.284-2.284V4.909a2.284 2.284 0 0 1 2.284-2.284Z",stroke:"currentColor",strokeWidth:"1.25"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),{...ye,fill:"currentColor"}),lu=D(g(je,{children:g("path",{d:"M4.167 10h11.666",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),ye),Zb=D(g("path",{d:"M5 10h10",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round"}),ye),jb=D(g("path",{d:"M5 10h10",stroke:"currentColor",strokeWidth:"3.75",strokeLinecap:"round",strokeLinejoin:"round"}),ye),i4=Rt.memo(({theme:e})=>D(g("path",{d:"M6 10H34",stroke:ur(e),strokeWidth:2,fill:"none",strokeLinecap:"round"}),{width:40,height:20})),qb=D(B("g",{strokeWidth:"2",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 12h2"}),g("path",{d:"M17 12h2"}),g("path",{d:"M11 12h2"})]}),Y),Jb=D(B("g",{strokeWidth:"2",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 12v.01"}),g("path",{d:"M8 12v.01"}),g("path",{d:"M12 12v.01"}),g("path",{d:"M16 12v.01"}),g("path",{d:"M20 12v.01"})]}),Y),Qb=D(g("path",{d:"M2.5 12.038c1.655-.885 5.9-3.292 8.568-4.354 2.668-1.063.101 2.821 1.32 3.104 1.218.283 5.112-1.814 5.112-1.814",strokeWidth:"1.25"}),ye),e1=D(g("path",{d:"M2.5 12.563c1.655-.886 5.9-3.293 8.568-4.355 2.668-1.062.101 2.822 1.32 3.105 1.218.283 5.112-1.814 5.112-1.814m-13.469 2.23c2.963-1.586 6.13-5.62 7.468-4.998 1.338.623-1.153 4.11-.132 5.595 1.02 1.487 6.133-1.43 6.133-1.43",strokeWidth:"1.25"}),ye),t1=D(g("path",{d:"M2.5 11.936c1.737-.879 8.627-5.346 10.42-5.268 1.795.078-.418 5.138.345 5.736.763.598 3.53-1.789 4.235-2.147M2.929 9.788c1.164-.519 5.47-3.28 6.987-3.114 1.519.165 1 3.827 2.121 4.109 1.122.281 3.839-2.016 4.606-2.42",strokeWidth:"1.25"}),ye),cu=D(B("g",{children:[g("path",{d:"M4 12 C 5 8, 6 8, 8 12",fill:"none",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M8 12 C 9 16, 10 16, 12 12",fill:"none",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M12 12 C 14 8, 15 8, 16 12",fill:"none",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M16 12 C 17 16, 18 16, 19 12",fill:"none",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"})]}),Y),du=D(B("g",{children:[g("path",{d:"M4 12 C 5 8, 6 8, 8 12",fill:"none",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M8 12 C 9 16, 10 16, 12 12",fill:"none",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M12 12 C 14 8, 15 8, 16 12",fill:"none",strokeWidth:"2.75",strokeLinecap:"round",strokeLinejoin:"round"}),g("path",{d:"M16 12 C 17 16, 18 16, 19 12",fill:"none",strokeWidth:"3.25",strokeLinecap:"round",strokeLinejoin:"round"})]}),Y),o1=D(B("svg",{strokeWidth:"1.5",children:[g("path",{d:"M3.33334 9.99998V6.66665C3.33334 6.04326 3.33403 4.9332 3.33539 3.33646C4.95233 3.33436 6.06276 3.33331 6.66668 3.33331H10"}),g("path",{d:"M13.3333 3.33331V3.34331"}),g("path",{d:"M16.6667 3.33331V3.34331"}),g("path",{d:"M16.6667 6.66669V6.67669"}),g("path",{d:"M16.6667 10V10.01"}),g("path",{d:"M3.33334 13.3333V13.3433"}),g("path",{d:"M16.6667 13.3333V13.3433"}),g("path",{d:"M3.33334 16.6667V16.6767"}),g("path",{d:"M6.66666 16.6667V16.6767"}),g("path",{d:"M10 16.6667V16.6767"}),g("path",{d:"M13.3333 16.6667V16.6767"}),g("path",{d:"M16.6667 16.6667V16.6767"})]}),ye),r1=D(B("g",{strokeWidth:"1.5",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 12v-4a4 4 0 0 1 4 -4h4"}),g("line",{x1:"16",y1:"4",x2:"16",y2:"4.01"}),g("line",{x1:"20",y1:"4",x2:"20",y2:"4.01"}),g("line",{x1:"20",y1:"8",x2:"20",y2:"8.01"}),g("line",{x1:"20",y1:"12",x2:"20",y2:"12.01"}),g("line",{x1:"4",y1:"16",x2:"4",y2:"16.01"}),g("line",{x1:"20",y1:"16",x2:"20",y2:"16.01"}),g("line",{x1:"4",y1:"20",x2:"4",y2:"20.01"}),g("line",{x1:"8",y1:"20",x2:"8",y2:"20.01"}),g("line",{x1:"12",y1:"20",x2:"12",y2:"20.01"}),g("line",{x1:"16",y1:"20",x2:"16",y2:"20.01"}),g("line",{x1:"20",y1:"20",x2:"20",y2:"20.01"})]}),Y),n1=Rt.memo(({flip:e=!1})=>D(B("g",{transform:e?"translate(40, 0) scale(-1, 1)":"",stroke:"currentColor",opacity:.3,strokeWidth:2,fill:"none",strokeLinecap:"round",children:[g("path",{d:"M7,11 H19"}),g("path",{d:"M25,6 L33,16 M33,6 L25,16"})]}),To)),i1=Rt.memo(({flip:e=!1})=>D(g("g",{transform:e?"translate(40, 0) scale(-1, 1)":"",stroke:"currentColor",strokeWidth:2,fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:g("path",{d:"M7,11 H33 M23,5 L33,11 L23,17"})}),To)),a1=Rt.memo(({flip:e=!1})=>D(B("g",{stroke:"currentColor",fill:"currentColor",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeLinejoin:"round",children:[g("path",{d:"M7,11 H23",strokeWidth:2,strokeLinecap:"round"}),g("path",{d:"M23,5 L35,11 L23,17 Z"})]}),To)),s1=Rt.memo(({flip:e=!1})=>D(B("g",{stroke:"currentColor",fill:"none",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",children:[g("path",{d:"M7,11 H23"}),g("path",{d:"M23,5 L35,11 L23,17 Z"})]}),To)),l1=Rt.memo(({flip:e=!1})=>D(B("g",{stroke:"currentColor",fill:"currentColor",transform:e?"translate(40, 0) scale(-1, 1)":"",children:[g("path",{d:"M7,11 H25",strokeWidth:2,strokeLinecap:"round"}),g("circle",{cx:"29",cy:"11",r:"4"})]}),To)),c1=Rt.memo(({flip:e=!1})=>D(B("g",{stroke:"currentColor",fill:"none",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeWidth:2,children:[g("path",{d:"M7,11 H25",strokeLinecap:"round"}),g("circle",{cx:"29",cy:"11",r:"4"})]}),To)),d1=Rt.memo(({flip:e=!1})=>D(B("g",{stroke:"currentColor",fill:"currentColor",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeLinejoin:"round",children:[g("path",{d:"M7,11 H21",strokeWidth:2,strokeLinecap:"round"}),g("path",{d:"M21,11 L28,5 L35,11 L28,17 Z"})]}),To)),m1=Rt.memo(({flip:e=!1})=>D(B("g",{stroke:"currentColor",fill:"none",transform:e?"translate(40, 0) scale(-1, 1)":"",strokeLinejoin:"round",strokeWidth:2,strokeLinecap:"round",children:[g("path",{d:"M7,11 H21"}),g("path",{d:"M21,11 L28,5 L35,11 L28,17 Z"})]}),To)),p1=Rt.memo(({flip:e=!1})=>D(g("g",{transform:e?"translate(40, 0) scale(-1, 1)":"",stroke:"currentColor",strokeWidth:2,fill:"none",strokeLinecap:"round",children:g("path",{d:"M11,11 H31 M31,5 V17"})}),To)),u1=Rt.memo(({flip:e=!1})=>D(g("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:g("path",{d:"M35,11 H7 M15,5 V17"})}),To)),h1=Rt.memo(({flip:e=!1})=>D(g("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:g("path",{d:"M35,11 H7 M15,11 L7,5 M15,11 L7,17"})}),To)),g1=Rt.memo(({flip:e=!1})=>D(g("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:g("path",{d:"M35,11 H7 M23,5 V17 M15,11 L7,5 M15,11 L7,17"})}),To)),f1=Rt.memo(({flip:e=!1})=>D(g("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:g("path",{d:"M35,11 H7 M15,5 V17 M7,5 V17"})}),To)),b1=Rt.memo(({flip:e=!1})=>D(B("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:[g("path",{d:"M35,11 H19 M11,11 H7 M7,5 V17"}),g("circle",{cx:"15",cy:"11",r:"4"})]}),To)),x1=Rt.memo(({flip:e=!1})=>D(B("g",{stroke:"currentColor",fill:"none",transform:e?"":"translate(40, 0) scale(-1, 1)",strokeLinejoin:"round",strokeWidth:2,children:[g("path",{d:"M35,11 H27 M19,11 H7 M15,11 L7,5 M15,11 L7,17"}),g("circle",{cx:"23",cy:"11",r:"4"})]}),To)),E1=D(B(je,{children:[g("g",{clipPath:"url(#a)",children:g("path",{d:"M14.167 6.667a3.333 3.333 0 0 0-3.334-3.334H9.167a3.333 3.333 0 0 0 0 6.667h1.666a3.333 3.333 0 0 1 0 6.667H9.167a3.333 3.333 0 0 1-3.334-3.334",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),y1=D(B(je,{children:[g("g",{clipPath:"url(#a)",children:g("path",{d:"M5 16.667V3.333L10 15l5-11.667v13.334",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),v1=D(B(je,{children:[g("g",{clipPath:"url(#a)",children:g("path",{d:"M5.833 3.333v13.334h8.334",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),g("defs",{children:g("clipPath",{id:"a",children:g("path",{fill:"#fff",d:"M0 0h20v20H0z"})})})]}),ye),w1=D(g(je,{children:g("path",{d:"m1.667 3.333 6.666 13.334M8.333 3.333 1.667 16.667M11.667 3.333v13.334h6.666",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round"})}),ye),Oi=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 7v-2h13v2"}),g("path",{d:"M10 5v14"}),g("path",{d:"M12 19h-4"}),g("path",{d:"M15 13v-1h6v1"}),g("path",{d:"M18 12v7"}),g("path",{d:"M17 19h2"})]}),Y),T1=D(g(je,{children:B("g",{stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M7 12h10"}),g("path",{d:"M7 5v14"}),g("path",{d:"M17 5v14"}),g("path",{d:"M15 19h4"}),g("path",{d:"M15 5h4"}),g("path",{d:"M5 19h4"}),g("path",{d:"M5 5h4"})]})}),Y),Xs=D(g(je,{children:g("g",{stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round",children:g("path",{d:"M5.833 16.667v-10a3.333 3.333 0 0 1 3.334-3.334h1.666a3.333 3.333 0 0 1 3.334 3.334v10M5.833 10.833h8.334"})})}),ye),mu=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M7 8l-4 4l4 4"}),g("path",{d:"M17 8l4 4l-4 4"}),g("path",{d:"M14 4l-4 16"})]}),Y),nd=mu,C1=D(B("g",{stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"8",x2:"20",y2:"8"}),g("line",{x1:"4",y1:"12",x2:"12",y2:"12"}),g("line",{x1:"4",y1:"16",x2:"16",y2:"16"})]}),Y),S1=D(B("g",{stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"8",x2:"20",y2:"8"}),g("line",{x1:"8",y1:"12",x2:"16",y2:"12"}),g("line",{x1:"6",y1:"16",x2:"18",y2:"16"})]}),Y),I1=D(B("g",{stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"8",x2:"20",y2:"8"}),g("line",{x1:"10",y1:"12",x2:"20",y2:"12"}),g("line",{x1:"8",y1:"16",x2:"20",y2:"16"})]}),Y),k1=Rt.memo(({theme:e})=>D(B("g",{strokeWidth:"1.5",stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"4",x2:"20",y2:"4"}),g("rect",{x:"9",y:"8",width:"6",height:"12",rx:"2"})]}),Y)),M1=Rt.memo(({theme:e})=>D(B("g",{strokeWidth:"2",stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"20",x2:"20",y2:"20"}),g("rect",{x:"9",y:"4",width:"6",height:"12",rx:"2"})]}),Y)),A1=Rt.memo(({theme:e})=>D(B("g",{strokeWidth:"1.5",stroke:"currentColor",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("line",{x1:"4",y1:"12",x2:"9",y2:"12"}),g("line",{x1:"15",y1:"12",x2:"20",y2:"12"}),g("rect",{x:"9",y:"6",width:"6",height:"12",rx:"2"})]}),Y)),id=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M21 19h-18l9 -15"}),g("path",{d:"M20.615 15.171h.015"}),g("path",{d:"M19.515 11.771h.015"}),g("path",{d:"M17.715 8.671h.015"}),g("path",{d:"M15.415 5.971h.015"})]}),Y),L1=D(g("path",{d:"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z",fill:"currentColor"}),{width:640,height:512}),a4=D(g("path",{d:"M480 416C497.7 416 512 430.3 512 448C512 465.7 497.7 480 480 480H150.6C133.7 480 117.4 473.3 105.4 461.3L25.37 381.3C.3786 356.3 .3786 315.7 25.37 290.7L258.7 57.37C283.7 32.38 324.3 32.38 349.3 57.37L486.6 194.7C511.6 219.7 511.6 260.3 486.6 285.3L355.9 416H480zM265.4 416L332.7 348.7L195.3 211.3L70.63 336L150.6 416L265.4 416z"})),_1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 13v-7.5a1.5 1.5 0 0 1 3 0v6.5"}),g("path",{d:"M11 5.5v-2a1.5 1.5 0 1 1 3 0v8.5"}),g("path",{d:"M14 5.5a1.5 1.5 0 0 1 3 0v6.5"}),g("path",{d:"M17 7.5a1.5 1.5 0 0 1 3 0v8.5a6 6 0 0 1 -6 6h-2h.208a6 6 0 0 1 -5.012 -2.7a69.74 69.74 0 0 1 -.196 -.3c-.312 -.479 -1.407 -2.388 -3.286 -5.728a1.5 1.5 0 0 1 .536 -2.022a1.867 1.867 0 0 1 2.28 .28l1.47 1.47"})]}),Y),pu=D(B(je,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2"}),g("path",{d:"M7 11l5 5l5 -5"}),g("path",{d:"M12 4l0 12"})]}),Y),Wa=D(B(je,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"}),g("path",{d:"M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"})]}),Y),P1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M7 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"}),g("path",{d:"M17 17m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"}),g("path",{d:"M9.15 14.85l8.85 -10.85"}),g("path",{d:"M6 4l8.85 10.85"})]}),Y),D1=D(B(je,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0"}),g("path",{d:"M12 17l0 .01"}),g("path",{d:"M12 13.5a1.5 1.5 0 0 1 1 -1.5a2.6 2.6 0 1 0 -3 -4"})]}),Y),s4=D(B(je,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M7 4v16l13 -8z"})]}),Y),l4=D(B(je,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M17 4h-10a3 3 0 0 0 -3 3v10a3 3 0 0 0 3 3h10a3 3 0 0 0 3 -3v-10a3 3 0 0 0 -3 -3z",strokeWidth:"0",fill:"currentColor"})]}),Y),R1=D(B(je,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 12l5 5l10 -10"})]}),Y),ad=D(B(je,{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10.24 3.957l-8.422 14.06a1.989 1.989 0 0 0 1.7 2.983h16.845a1.989 1.989 0 0 0 1.7 -2.983l-8.423 -14.06a1.989 1.989 0 0 0 -3.4 0z"}),g("path",{d:"M12 9v4"}),g("path",{d:"M12 17h.01"})]}),Y),uu=["M4 16l11.7 -11.7a1 1 0 0 1 1.4 0l2.6 2.6a1 1 0 0 1 0 1.4l-11.7 11.7h-4v-4z","M11 7l6 6"],N1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),uu.map(e=>g("path",{d:e},e))]}),Y),Br=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 7l16 0"}),g("path",{d:"M4 17l16 0"}),g("path",{d:"M7 4l0 16"}),g("path",{d:"M17 4l0 16"})]}),Y),$s=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 4h12a2 2 0 0 1 2 2v9l-5 5h-9a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2z"}),g("path",{d:"M14 20v-4a2 2 0 0 1 2 -2h4"}),g("path",{d:"M8 9h8"}),g("path",{d:"M8 13h5"})]}),Y),Va=D(g("path",{fill:"currentColor",d:"M407.48,111.18C335.587,108.103 269.573,152.338 245.08,220C220.587,152.338 154.573,108.103 82.68,111.18C80.285,168.229 107.577,222.632 154.74,254.82C178.908,271.419 193.35,298.951 193.27,328.27L193.27,379.13L296.9,379.13L296.9,328.27C296.816,298.953 311.255,271.42 335.42,254.82C382.596,222.644 409.892,168.233 407.48,111.18Z"})),O1=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4"}),g("path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"})]}),Y),B1=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 10l-2 1l8 4l8 -4l-2 -1"}),g("path",{d:"M4 15l8 4l8 -4"}),g("path",{d:"M12 4v7"}),g("path",{d:"M15 8l-3 3l-3 -3"})]}),Y),Yn=D(B("g",{strokeWidth:"1.25",children:[g("path",{d:"M4.16602 10H15.8327"}),g("path",{d:"M12.5 13.3333L15.8333 10"}),g("path",{d:"M12.5 6.66666L15.8333 9.99999"})]}),ye),Bi=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 9.5a6.5 6.5 0 1 0 13 0a6.5 6.5 0 1 0 -13 0"}),g("path",{d:"M10 12a2 2 0 0 1 2 -2h7a2 2 0 0 1 2 2v7a2 2 0 0 1 -2 2h-7a2 2 0 0 1 -2 -2l0 -7"})]}),Y),Fr=D(B("g",{fill:"none",stroke:"currentColor",strokeWidth:"1.25",strokeLinecap:"round",strokeLinejoin:"round",transform:"rotate(90 10 10)",children:[g("path",{clipRule:"evenodd",d:"m9.644 13.69 7.774-7.773a2.357 2.357 0 0 0-3.334-3.334l-7.773 7.774L8 12l1.643 1.69Z"}),g("path",{d:"m13.25 3.417 3.333 3.333M10 10l2-2M5 15l3-3M2.156 17.894l1-1M5.453 19.029l-.144-1.407M2.377 11.887l.866 1.118M8.354 17.273l-1.194-.758M.953 14.652l1.408.13"})]}),20),Fi=D(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z"}),g("path",{d:"M6 21l15 -15l-3 -3l-15 15l3 3"}),g("path",{d:"M15 6l3 3"}),g("path",{d:"M9 3a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2"}),g("path",{d:"M19 13a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2"})]}),Y),c4=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z"}),g("path",{d:"M6 21l15 -15l-3 -3l-15 15l3 3"}),g("path",{d:"M15 6l3 3"}),g("path",{d:"M9 3a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2"}),g("path",{d:"M19 13a2 2 0 0 0 2 2a2 2 0 0 0 -2 2a2 2 0 0 0 -2 -2a2 2 0 0 0 2 -2"})]}),Y),d4=D(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M11.217 19.384a3.501 3.501 0 0 0 6.783 -1.217v-5.167l-6 -3.35"}),g("path",{d:"M5.214 15.014a3.501 3.501 0 0 0 4.446 5.266l4.34 -2.534v-6.946"}),g("path",{d:"M6 7.63c-1.391 -.236 -2.787 .395 -3.534 1.689a3.474 3.474 0 0 0 1.271 4.745l4.263 2.514l6 -3.348"}),g("path",{d:"M12.783 4.616a3.501 3.501 0 0 0 -6.783 1.217v5.067l6 3.45"}),g("path",{d:"M18.786 8.986a3.501 3.501 0 0 0 -4.446 -5.266l-4.34 2.534v6.946"}),g("path",{d:"M18 16.302c1.391 .236 2.787 -.395 3.534 -1.689a3.474 3.474 0 0 0 -1.271 -4.745l-4.308 -2.514l-5.955 3.42"})]}),Y),F1=D(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 8v-2a2 2 0 0 1 2 -2h2"}),g("path",{d:"M4 16v2a2 2 0 0 0 2 2h2"}),g("path",{d:"M16 4h2a2 2 0 0 1 2 2v2"}),g("path",{d:"M16 20h2a2 2 0 0 0 2 -2v-2"})]}),Y),Ya=D(B("g",{stroke:"currentColor",fill:"none",strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"}),g("path",{d:"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6"})]}),Y),z1=D(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10.585 10.587a2 2 0 0 0 2.829 2.828"}),g("path",{d:"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87"}),g("path",{d:"M3 3l18 18"})]}),Y),H1=D(B("g",{stroke:"currentColor",fill:"none",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8"}),g("path",{d:"M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8"}),g("path",{d:"M17.5 16a3.5 3.5 0 0 0 0 -7h-.5"}),g("path",{d:"M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0"}),g("path",{d:"M6.5 16a3.5 3.5 0 0 1 0 -7h.5"}),g("path",{d:"M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10"})]}),Y),U1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15.5 13a3.5 3.5 0 0 0 -3.5 3.5v1a3.5 3.5 0 0 0 7 0v-1.8"}),g("path",{d:"M8.5 13a3.5 3.5 0 0 1 3.5 3.5v1a3.5 3.5 0 0 1 -7 0v-1.8"}),g("path",{d:"M17.5 16a3.5 3.5 0 0 0 0 -7h-.5"}),g("path",{d:"M19 9.3v-2.8a3.5 3.5 0 0 0 -7 0"}),g("path",{d:"M6.5 16a3.5 3.5 0 0 1 0 -7h.5"}),g("path",{d:"M5 9.3v-2.8a3.5 3.5 0 0 1 7 0v10"})]}),Y),zo=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0"}),g("path",{d:"M21 21l-6 -6"})]}),Y),G1=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M20.984 12.53a9 9 0 1 0 -7.552 8.355"}),g("path",{d:"M12 7v5l3 3"}),g("path",{d:"M19 16l-2 3h4l-2 3"})]}),Y),W1=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 8l0 4l2 2"}),g("path",{d:"M3.05 11a9 9 0 1 1 .5 4m-.5 5v-5h5"})]}),Y),V1=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M9 2m0 3a3 3 0 0 1 3 -3h0a3 3 0 0 1 3 3v5a3 3 0 0 1 -3 3h0a3 3 0 0 1 -3 -3z"}),g("path",{d:"M5 10a7 7 0 0 0 14 0"}),g("path",{d:"M8 21l8 0"}),g("path",{d:"M12 17l0 4"})]}),Y),Y1=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 3l18 18"}),g("path",{d:"M9 5a3 3 0 0 1 6 0v5a3 3 0 0 1 -.13 .874m-2 2a3 3 0 0 1 -3.87 -2.872v-1"}),g("path",{d:"M5 10a7 7 0 0 0 10.846 5.85m2 -2a6.967 6.967 0 0 0 1.152 -3.85"}),g("path",{d:"M8 21l8 0"}),g("path",{d:"M12 17l0 4"})]}),Y),Zs=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M13 3l0 7l6 0l-8 11l0 -7l-6 0l8 -11"})]}),Y),K1=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 8m0 1a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1v6a1 1 0 0 1 -1 1h-6a1 1 0 0 1 -1 -1z"}),g("path",{d:"M12 20v.01"}),g("path",{d:"M16 20v.01"}),g("path",{d:"M8 20v.01"}),g("path",{d:"M4 20v.01"}),g("path",{d:"M4 16v.01"}),g("path",{d:"M4 12v.01"}),g("path",{d:"M4 8v.01"}),g("path",{d:"M4 4v.01"}),g("path",{d:"M8 4v.01"}),g("path",{d:"M12 4v.01"}),g("path",{d:"M16 4v.01"}),g("path",{d:"M20 4v.01"}),g("path",{d:"M20 8v.01"}),g("path",{d:"M20 12v.01"}),g("path",{d:"M20 16v.01"}),g("path",{d:"M20 20v.01"})]}),Y),X1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 3v18"}),g("path",{d:"M19 21v-18"}),g("path",{d:"M5 7h14"}),g("path",{d:"M5 15h14"}),g("path",{d:"M8 13v4"}),g("path",{d:"M11 13v4"}),g("path",{d:"M16 13v4"}),g("path",{d:"M14 5v4"}),g("path",{d:"M11 5v4"}),g("path",{d:"M8 5v4"}),g("path",{d:"M3 21h18"})]}),Y),$1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 12l18 0"}),g("path",{d:"M7 16l10 0l-10 5l0 -5"}),g("path",{d:"M7 8l10 0l-10 -5l0 5"})]}),Y),Z1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M12 3l0 18"}),g("path",{d:"M16 7l0 10l5 0l-5 -10"}),g("path",{d:"M8 7l0 10l-5 0l5 -10"})]}),Y),hu=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 3m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v2a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z"}),g("path",{d:"M19 6h1a2 2 0 0 1 2 2a5 5 0 0 1 -5 5l-5 0v2"}),g("path",{d:"M10 15m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"})]}),Y),sd=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15 15m-5 0a5 5 0 1 0 10 0a5 5 0 1 0 -10 0"}),g("path",{d:"M22 22l-3 -3"}),g("path",{d:"M6 18h-1a2 2 0 0 1 -2 -2v-1"}),g("path",{d:"M3 11v-1"}),g("path",{d:"M3 6v-1a2 2 0 0 1 2 -2h1"}),g("path",{d:"M10 3h1"}),g("path",{d:"M15 3h1a2 2 0 0 1 2 2v1"})]}),Y),j1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M14 3v4a1 1 0 0 0 1 1h4"}),g("path",{d:"M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4"}),g("path",{d:"M4 20.25c0 .414 .336 .75 .75 .75h1.25a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-1a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1.25a.75 .75 0 0 1 .75 .75"}),g("path",{d:"M10 15l2 6l2 -6"}),g("path",{d:"M20 15h-1a2 2 0 0 0 -2 2v2a2 2 0 0 0 2 2h1v-3"})]}),Y),q1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M14 3v4a1 1 0 0 0 1 1h4"}),g("path",{d:"M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4"}),g("path",{d:"M20 15h-1a2 2 0 0 0 -2 2v2a2 2 0 0 0 2 2h1v-3"}),g("path",{d:"M5 18h1.5a1.5 1.5 0 0 0 0 -3h-1.5v6"}),g("path",{d:"M11 21v-6l3 6v-6"})]}),Y),J1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 13v-8a2 2 0 0 1 2 -2h1a2 2 0 0 1 2 2v8a2 2 0 0 0 6 0v-8a2 2 0 0 1 2 -2h1a2 2 0 0 1 2 2v8a8 8 0 0 1 -16 0"}),g("path",{d:"M4 8l5 0"}),g("path",{d:"M15 8l4 0"})]}),Y),Q1=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 14c.83 .642 2.077 1.017 3.5 1c1.423 .017 2.67 -.358 3.5 -1c.83 -.642 2.077 -1.017 3.5 -1c1.423 -.017 2.67 .358 3.5 1"}),g("path",{d:"M8 3a2.4 2.4 0 0 0 -1 2a2.4 2.4 0 0 0 1 2"}),g("path",{d:"M12 3a2.4 2.4 0 0 0 -1 2a2.4 2.4 0 0 0 1 2"}),g("path",{d:"M3 10h14v5a6 6 0 0 1 -6 6h-2a6 6 0 0 1 -6 -6v-5z"}),g("path",{d:"M16.746 16.726a3 3 0 1 0 .252 -5.555"})]}),Y),ex=D(B("g",{stroke:"currentColor",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 5a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1h-16a1 1 0 0 1-1-1v-10zM7 20h10M9 16v4M15 16v4"})]}),{...Y,strokeWidth:1.5}),m4=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M15 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2"}),g("path",{d:"M21 12h-13l3 -3"}),g("path",{d:"M11 15l-3 -3"})]}),Y),tx=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M2 8a4 4 0 0 1 4 -4h12a4 4 0 0 1 4 4v8a4 4 0 0 1 -4 4h-12a4 4 0 0 1 -4 -4v-8z"}),g("path",{d:"M10 9l5 3l-5 3z"})]}),Y),ox=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 6h18"}),g("path",{d:"M3 12h18"}),g("path",{d:"M3 18h18"}),g("path",{d:"M6 3v18"}),g("path",{d:"M12 3v18"}),g("path",{d:"M18 3v18"})]}),Y),rx=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M17 3m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"}),g("path",{d:"M3 17m0 1a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1z"}),g("path",{d:"M17 5c-6.627 0 -12 5.373 -12 12"})]}),Y),Kn=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 18l12 -12"}),g("path",{d:"M18 10v-4h-4"})]}),Y),Xn=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4,19L10,19C11.097,19 12,18.097 12,17L12,9C12,7.903 12.903,7 14,7L21,7"}),g("path",{d:"M18 4l3 3l-3 3"})]}),Y),$n=D(B("g",{children:[g("path",{d:"M16,12L20,9L16,6"}),g("path",{d:"M6 20c0 -6.075 4.925 -11 11 -11h3"})]}),Y),ld=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 9l6 6l6 -6"})]}),Y),nx=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 15l6 -6l6 6"})]}),Y),ix=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 15l6 -6l6 6"})]}),Y),gu=D(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M8 5v10a1 1 0 0 0 1 1h10"}),g("path",{d:"M5 8h10a1 1 0 0 1 1 1v10"})]}),Y),cd=D(B("g",{children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M5 5m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M19 5m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M5 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M19 19m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M5 7l0 10"}),g("path",{d:"M7 5l10 0"}),g("path",{d:"M7 19l10 0"}),g("path",{d:"M19 7l0 10"})]}),Y),p4=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 11v8a1 1 0 0 0 1 1h8m-9 -14v-1a1 1 0 0 1 1 -1h1m5 0h2m5 0h1a1 1 0 0 1 1 1v1m0 5v2m0 5v1a1 1 0 0 1 -1 1h-1"}),g("path",{d:"M4 12h7a1 1 0 0 1 1 1v7"})]}),Y),ax=D(B("g",{strokeWidth:1.5,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 6l8 0"}),g("path",{d:"M16 6l4 0"}),g("path",{d:"M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 12l2 0"}),g("path",{d:"M10 12l10 0"}),g("path",{d:"M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 18l11 0"}),g("path",{d:"M19 18l1 0"})]}),Y),sx=D(B("g",{strokeWidth:1,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M6 10l4 -4 L6 14l8 -8 L6 18l12 -12 L10 18l8 -8 L14 18l4 -4"})]}),Y),lx=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4"}),g("path",{d:"M13.5 6.5l4 4"})]}),Y),u4=D(B("g",{strokeWidth:1,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M11 7l-5 5l5 5"}),g("path",{d:"M17 7l-5 5l5 5"})]}),Y),cx=D(B("g",{strokeWidth:"1.75",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M4 4m0 2a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2z"}),g("path",{d:"M15 4l0 16"})]}),Y),h4=D(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 20l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c3.255 2.777 3.695 7.266 1.029 10.501c-2.666 3.235 -7.615 4.215 -11.574 2.293l-4.7 1"})]}),Y),g4=D(B("g",{strokeWidth:"1.25",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M3 4l18 0"}),g("path",{d:"M4 4v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-10"}),g("path",{d:"M12 16l0 4"}),g("path",{d:"M9 20l6 0"}),g("path",{d:"M8 12l3 -3l2 2l3 -3"})]}),Y),js=g("div",{style:{width:"1rem",height:"1rem"}}),dx=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("polyline",{points:"6 9 12 15 18 9"})]}),Y),mx=D(B("g",{strokeWidth:"1.5",children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("polyline",{points:"9 6 15 12 9 18"})]}),Y),px=D(B("g",{strokeWidth:1.25,children:[g("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),g("path",{d:"M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 6l8 0"}),g("path",{d:"M16 6l4 0"}),g("path",{d:"M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 12l2 0"}),g("path",{d:"M10 12l10 0"}),g("path",{d:"M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0"}),g("path",{d:"M4 18l11 0"}),g("path",{d:"M19 18l1 0"})]}),Y);import rT from"clsx";import hx,{useEffect as x4,useRef as nT,useState as E4}from"react";import f4 from"react";import{jsx as ux}from"react/jsx-runtime";var b4=({size:e="1em",circleWidth:t=8,synchronized:o=!1,className:r=""})=>{let i=-(f4.useRef(Date.now()).current%1600);return ux("div",{className:`Spinner ${r}`,children:ux("svg",{viewBox:"0 0 100 100",style:{width:e,height:e,"--spinner-delay":o?`${i}ms`:0},children:ux("circle",{cx:"50",cy:"50",r:50-t/2,strokeWidth:t,fill:"none",strokeMiterlimit:"10"})})})},Nt=b4;import{jsx as dd,jsxs as fu}from"react/jsx-runtime";var ee=hx.forwardRef(({size:e="medium",visible:t=!0,className:o="",...r},n)=>{let i=hx.useRef(null);hx.useImperativeHandle(n,()=>i.current);let a=`ToolIcon_size_${e}`,[s,l]=E4(!1),c=nT(!0),d=async m=>{let u="onClick"in r&&r.onClick?.(m);if(vi(u))try{l(!0),await u}catch(b){if(b instanceof Bs)console.warn(b);else throw b}finally{c.current&&l(!1)}};x4(()=>(c.current=!0,()=>{c.current=!1}),[]);let p=nT(null);return r.type==="button"||r.type==="icon"?fu("button",{className:rT("ToolIcon_type_button",a,o,t&&!r.hidden?"ToolIcon_type_button--show":"ToolIcon_type_button--hide",{ToolIcon:!r.hidden,"ToolIcon--plain":r.type==="icon"}),style:r.style,"data-testid":r["data-testid"],hidden:r.hidden,title:r.title,"aria-label":r["aria-label"],type:"button",onClick:d,ref:i,disabled:s||r.isLoading||!!r.disabled,children:[(r.icon||r.label)&&fu("div",{className:"ToolIcon__icon","aria-hidden":"true","aria-disabled":!!r.disabled,children:[r.icon||r.label,r.keyBindingLabel&&dd("span",{className:"ToolIcon__keybinding",children:r.keyBindingLabel}),r.isLoading&&dd(Nt,{})]}),r.showAriaLabel&&fu("div",{className:"ToolIcon__label",children:[r["aria-label"]," ",s&&dd(Nt,{})]}),r.children]}):dd("button",{className:rT("ToolIcon","ToolIcon_type_toggle",a,o,{"ToolIcon--checked":r.checked}),type:"button",style:r.style,title:r.title,"aria-label":r["aria-label"],"aria-keyshortcuts":r["aria-keyshortcuts"],"aria-pressed":r.checked,"data-testid":r["data-testid"],disabled:!!r.disabled,"aria-disabled":!!r.disabled,onPointerDown:m=>{p.current=m.pointerType||null,r.onPointerDown?.(m)},onPointerUp:()=>{requestAnimationFrame(()=>{p.current=null})},onClick:()=>{r.onSelect?.({pointerType:p.current})},ref:i,children:fu("div",{className:"ToolIcon__icon",children:[r.icon,r.keyBindingLabel&&dd("span",{className:"ToolIcon__keybinding",children:r.keyBindingLabel})]})})});ee.displayName="IconButton";var bu=[],W=e=>(bu=bu.concat(e),e);import{jsx as v4}from"react/jsx-runtime";var y4=(e,t,o)=>{let r=new Set(ie(e.filter(d=>ae(d)),t).map(d=>d.id)),n={},i=o.scene.getNonDeletedElementsMap(),a=new Set;for(let d of r){let p=cr(e,d);for(let m of p)if(!a.has(m.id)){if(gt(m)){let u=Nr(m,i);u&&(n[u.id]=!0)}else n[m.id]=!0;a.add(m.id)}}let s=!0,l=e.map(d=>{if(t.selectedElementIds[d.id]){let p=gt(d)?Nr(d,i):null;return d.frameId&&r.has(d.frameId)?(s=!1,n[d.id]=!0,d):p?.frameId&&r.has(p?.frameId)?d:(d.boundElements&&d.boundElements.forEach(m=>{let u=o.scene.getNonDeletedElementsMap().get(m.id);u&&He(u)&&o.scene.mutateElement(u,{startBinding:d.id===u.startBinding?.elementId?null:u.startBinding,endBinding:d.id===u.endBinding?.elementId?null:u.endBinding})}),se(d,{isDeleted:!0}))}return d.frameId&&r.has(d.frameId)?(s=!1,gt(d)||(n[d.id]=!0),se(d,{frameId:null})):gt(d)&&t.selectedElementIds[d.containerId]?se(d,{isDeleted:!0}):d}),c=t.editingGroupId;if(s&&t.editingGroupId){let d=Ye(l,t.editingGroupId).filter(p=>!p.isDeleted);if(d.length>1)d[0]&&(n[d[0].id]=!0);else{c=null,d[0]&&(n[d[0].id]=!0);let p=d[0];if(p){let m=p.groupIds.findIndex(b=>b===t.editingGroupId),u=p.groupIds[m+1];if(u){let b=Ye(l,u).filter(f=>!f.isDeleted);b.length>1&&(c=u,b.forEach(f=>{n[f.id]=!0}))}}}}return{elements:l,appState:{...t,...Lt({selectedElementIds:n,editingGroupId:c},me(l),t,null)}}},iT=(e,t)=>{if(e.editingGroupId){let o=Ye(me(t),e.editingGroupId);if(o.length)return{...e,selectedElementIds:{[o[0].id]:!0}}}return e},qs=W({name:"deleteSelectedElements",label:"labels.delete",icon:Jt,trackEvent:{category:"element",action:"delete"},perform:(e,t,o,r)=>{if(t.selectedLinearElement?.isEditing){let{elementId:a,selectedPointsIndices:s}=t.selectedLinearElement,l=r.scene.getNonDeletedElementsMap(),c=j.getElement(a,l);if(!c||s==null)return!1;if(s.length>=c.points.length){let d=e.map(m=>m.id===c.id?se(m,{isDeleted:!0}):m),p=iT(t,d);return{elements:d,appState:{...p,selectedLinearElement:null},captureUpdate:O.IMMEDIATELY}}return j.deletePoints(c,r,s),{elements:e,appState:{...t,selectedLinearElement:{...t.selectedLinearElement,selectedPointsIndices:s?.[0]>0?[s[0]-1]:[0]}},captureUpdate:O.IMMEDIATELY}}let{elements:n,appState:i}=y4(e,t,r);return lp(n,n.filter(a=>a.isDeleted)),i=iT(i,n),{elements:n,appState:{...i,activeTool:ht(t,{type:r.state.preferredSelectionTool.type}),multiElement:null,newElement:null,activeEmbeddable:null,selectedLinearElement:null},captureUpdate:$e(me(e),t)?O.IMMEDIATELY:O.EVENTUALLY}},keyTest:(e,t,o)=>(e.key===S.BACKSPACE||e.key===S.DELETE)&&!e[S.CTRL_OR_CMD],PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>{let n=Kt()==="mobile";return v4(ee,{type:"button",icon:Jt,title:h("labels.delete"),"aria-label":h("labels.delete"),onClick:()=>o(null),disabled:!$e(me(e),t),style:{...n&&t.openPopup!=="compactOtherProperties"?Sn:{}}})}});var z=e=>e.replace(/\b(Opt(?:ion)?|Alt)\b/i,Ro?h("keys.option"):h("keys.alt")).replace(/\bShift\b/i,h("keys.shift")).replace(/\b(Enter|Return)\b/i,h("keys.enter")).replace(/\b(Ctrl|Cmd|Command|CtrlOrCmd)\b/gi,Ro?h("keys.cmd"):h("keys.ctrl")).replace(/\b(Esc(?:ape)?)\b/i,h("keys.escape")).replace(/\b(Space(?:bar)?)\b/i,h("keys.spacebar")).replace(/\b(Del(?:ete)?)\b/i,h("keys.delete"));import{jsx as wu}from"react/jsx-runtime";var xu=W({name:"sendBackward",label:"labels.sendBackward",keywords:["move down","zindex","layer"],icon:qp,trackEvent:{category:"element"},perform:(e,t,o,r)=>({elements:l2(e,t,r.scene),appState:t,captureUpdate:O.IMMEDIATELY}),keyPriority:40,keyTest:e=>e[S.CTRL_OR_CMD]&&!e.shiftKey&&e.code===ge.BRACKET_LEFT,PanelComponent:({updateData:e,appState:t})=>wu("button",{type:"button",className:"zIndexButton",onClick:()=>e(null),title:`${h("labels.sendBackward")} \u2014 ${z("CtrlOrCmd+[")}`,children:qp})}),Eu=W({name:"bringForward",label:"labels.bringForward",keywords:["move up","zindex","layer"],icon:jp,trackEvent:{category:"element"},perform:(e,t,o,r)=>({elements:c2(e,t,r.scene),appState:t,captureUpdate:O.IMMEDIATELY}),keyPriority:40,keyTest:e=>e[S.CTRL_OR_CMD]&&!e.shiftKey&&e.code===ge.BRACKET_RIGHT,PanelComponent:({updateData:e,appState:t})=>wu("button",{type:"button",className:"zIndexButton",onClick:()=>e(null),title:`${h("labels.bringForward")} \u2014 ${z("CtrlOrCmd+]")}`,children:jp})}),yu=W({name:"sendToBack",label:"labels.sendToBack",keywords:["move down","zindex","layer"],icon:Qp,trackEvent:{category:"element"},perform:(e,t)=>({elements:d2(e,t),appState:t,captureUpdate:O.IMMEDIATELY}),keyTest:e=>Ro?e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.BRACKET_LEFT:e[S.CTRL_OR_CMD]&&e.shiftKey&&e.code===ge.BRACKET_LEFT,PanelComponent:({updateData:e,appState:t})=>wu("button",{type:"button",className:"zIndexButton",onClick:()=>e(null),title:`${h("labels.sendToBack")} \u2014 ${Ro?z("CtrlOrCmd+Alt+["):z("CtrlOrCmd+Shift+[")}`,children:Qp})}),vu=W({name:"bringToFront",label:"labels.bringToFront",keywords:["move up","zindex","layer"],icon:Jp,trackEvent:{category:"element"},perform:(e,t)=>({elements:m2(e,t),appState:t,captureUpdate:O.IMMEDIATELY}),keyTest:e=>Ro?e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.BRACKET_RIGHT:e[S.CTRL_OR_CMD]&&e.shiftKey&&e.code===ge.BRACKET_RIGHT,PanelComponent:({updateData:e,appState:t})=>wu("button",{type:"button",className:"zIndexButton",onClick:o=>e(null),title:`${h("labels.bringToFront")} \u2014 ${Ro?z("CtrlOrCmd+Alt+]"):z("CtrlOrCmd+Shift+]")}`,children:Jp})});var Tu=W({name:"selectAll",label:"labels.selectAll",icon:K1,trackEvent:{category:"canvas"},viewMode:!1,perform:(e,t,o,r)=>{if(t.selectedLinearElement?.isEditing)return!1;let n=e.filter(i=>!i.isDeleted&&!(J(i)&&i.containerId)&&!i.locked).reduce((i,a)=>(i[a.id]=!0,i),{});return{appState:{...t,...Lt({editingGroupId:null,selectedElementIds:n},me(e),t,r),selectedLinearElement:Object.keys(n).length===1&&Me(e[0])?new j(e[0],te(e)):null},captureUpdate:O.IMMEDIATELY}},keyTest:e=>e[S.CTRL_OR_CMD]&&e.key===S.A});import{jsx as w4}from"react/jsx-runtime";var Cu=W({name:"duplicateSelection",label:"labels.duplicateSelection",icon:Ws,trackEvent:{category:"element"},perform:(e,t,o,r)=>{if(t.selectedElementsAreBeingDragged)return!1;if(t.selectedLinearElement?.isEditing)try{let a=j.duplicateSelectedPoints(t,r.scene);return{elements:e,appState:a,captureUpdate:O.IMMEDIATELY}}catch{return!1}let{duplicatedElements:n,elementsWithDuplicates:i}=Bn({type:"in-place",elements:e,idsOfElementsToDuplicate:te(ie(e,t,{includeBoundTextElement:!0,includeElementsInFrames:!0})),appState:t,randomizeSeed:!0,overrides:({origElement:a,origIdToDuplicateId:s})=>{let l=a.frameId&&s.get(a.frameId);return{x:a.x+Ef/2,y:a.y+Ef/2,frameId:l??a.frameId}}});if(r.props.onDuplicate&&i){let a=r.props.onDuplicate(i,e);a&&(i=a)}return{elements:Jr(i,te(n)),appState:{...t,...Nc(n,me(i),t)},captureUpdate:O.IMMEDIATELY}},keyTest:e=>e[S.CTRL_OR_CMD]&&e.key===S.D,PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>{let n=Kt()==="mobile";return w4(ee,{type:"button",icon:Ws,title:`${h("labels.duplicateSelection")} \u2014 ${z("CtrlOrCmd+D")}`,"aria-label":h("labels.duplicateSelection"),onClick:()=>o(null),disabled:!$e(me(e),t),style:{...n&&t.openPopup!=="compactOtherProperties"?Sn:{}}})}});import{useEffect as Dx,useMemo as Nx,useRef as Rx,useState as uL}from"react";var T4=new Set(["command_palette","export","ai"]),be=(e,t,o,r)=>{try{if(typeof window>"u"||k.VITE_WORKER_ID||k.VITE_APP_ENABLE_TRACKING!=="true"||!T4.has(e)||Wt())return;k.PROD||console.info("trackEvent",{category:e,action:t,label:o,value:r}),window.sa_event&&window.sa_event(t,{category:e,label:o,value:r})}catch(n){console.error("error during analytics",n)}};import k4 from"clsx";import C4 from"clsx";import{forwardRef as S4}from"react";import{jsx as I4}from"react/jsx-runtime";var aT=S4((e,t)=>{let{title:o,className:r,testId:n,active:i,icon:a,onClick:s}=e;return I4("button",{type:"button",ref:t,title:o,"data-testid":n,className:C4(r,{active:i}),onClick:s,style:e.style,children:a},o)});import{Fragment as A4,jsx as gx,jsxs as M4}from"react/jsx-runtime";var Jo=e=>gx(A4,{children:e.options.map(t=>e.type==="button"?gx(aT,{icon:t.icon,title:t.text,testId:t.testId,active:t.active??e.value===t.value,onClick:o=>e.onClick(t.value,o)},t.text):M4("label",{className:k4({active:e.value===t.value}),title:t.text,children:[gx("input",{type:"radio",name:e.group,onChange:()=>e.onChange(t.value),checked:e.value===t.value,"data-testid":t.testId}),t.icon]},t.text))});import{Popover as NT}from"radix-ui";import OT from"clsx";import{memo as xA,useRef as BT,useEffect as EA}from"react";import{jsx as L4}from"react/jsx-runtime";var Su=()=>L4("div",{style:{width:1,height:"1rem",backgroundColor:"var(--default-border-color)",margin:"0 auto"}});import{useEffect as R4,useLayoutEffect as N4,useRef as O4}from"react";import{createPortal as B4}from"react-dom";import sT from"react";var fx=sT.createContext(null),fe=()=>sT.useContext(fx);import{useState as _4,useLayoutEffect as lT}from"react";var Iu=e=>{let[t,o]=_4(null),r=Le(),{theme:n}=fe(),{container:i}=tt();return lT(()=>{t&&(t.className="",t.classList.add("excalidraw",...e?.className?.split(/\s+/)||[]),t.classList.toggle("excalidraw--mobile",r.formFactor==="phone"),t.classList.toggle("theme--dark",n===Q.DARK))},[t,n,r.formFactor,e?.className]),lT(()=>{let a=i?.ownerDocument,s=e?.parentSelector?i?.querySelector(e.parentSelector):a?.body;if(!s||!a)return;let l=a.createElement("div");return s.appendChild(l),o(l),()=>{s.removeChild(l)}},[i,e?.parentSelector]),t};import{useEffect as P4}from"react";function Js(e,t,o){P4(()=>{let r=e.current?.ownerDocument;if(!r)return;let n=r;function i(a){let s=a;if(!e.current)return;let l=o?.(s,e.current);if(l===!0)return;if(l===!1)return t(s);e.current.contains(s.target)||!n.documentElement.contains(s.target)||s.target.closest("[data-radix-portal]")||s.target===n.documentElement&&n.body.style.pointerEvents==="none"||s.target.closest("[data-prevent-outside-click]")||t(s)}return n.addEventListener("pointerdown",i),n.addEventListener("touchstart",i),()=>{n.removeEventListener("pointerdown",i),n.removeEventListener("touchstart",i)}},[e,t,o])}import{useRef as D4}from"react";var zi=e=>{let t=D4(e);return Object.assign(t.current,e),t.current};var cT=({cursorPosition:e,elementSize:t,containerSize:o,gap:r})=>{let n=e+r+t>o?e-r-t:e+r;return Je(n,0,Math.max(0,o-t))},ku=({cursor:e,element:t,container:o,gap:r})=>({left:cT({cursorPosition:e.x-o.left,elementSize:t.width,containerSize:o.width,gap:r}),top:cT({cursorPosition:e.y-o.top,elementSize:t.height,containerSize:o.height,gap:r})});import{jsx as z4}from"react/jsx-runtime";var dT=uu.map((e,t)=>`<path fill="${t===0?"#fff":""}" d="${e}" />`).join(""),F4=`url(data:${ue.svg},${encodeURIComponent(`<svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke-linecap="round" stroke-linejoin="round"><g stroke="#fff" stroke-width="5">${dT}</g><g stroke="#1b1b1f" stroke-width="1.25">${dT}</g></svg>`)}) 2 21, auto`,Ho=Ie(null),mT=({onCancel:e,onChange:t,onSelect:o,colorPickerType:r})=>{let n=Iu({className:"excalidraw-eye-dropper-backdrop",parentSelector:".excalidraw-eye-dropper-container"}),i=fe(),a=Hi(),s=Ke(),l=s.ownerWindow,c=ie(a,i),d=zi({app:s,onCancel:e,onChange:t,onSelect:o,selectedElements:c}),{container:p}=tt();N4(()=>{if(n)return n.style.cursor=F4,()=>{n.style.cursor=""}},[n]),R4(()=>{let u=m.current;if(!u||!s.canvas||!n)return;let b=!1,f=s.canvas.getContext("2d"),x=({clientX:M,clientY:N})=>{let P=f.getImageData((M-i.offsetLeft)*l.devicePixelRatio,(N-i.offsetTop)*l.devicePixelRatio,1,1).data;return Xy(P[0],P[1],P[2])},v=M=>i.theme===Q.DARK?zy(M):M,y=({clientX:M,clientY:N,altKey:P})=>{let{top:L,left:R}=ku({cursor:{x:M,y:N},element:{width:u.offsetWidth,height:u.offsetHeight},container:n.getBoundingClientRect(),gap:7});u.style.top=`${L}px`,u.style.left=`${R}px`;let H=x({clientX:M,clientY:N});b&&d.onChange(r,v(H),d.selectedElements,{altKey:P}),u.style.background=H,u.style.setProperty("--eye-dropper-preview-border-color",Pr(H)?"#fff":"#222")},E=()=>{d.onCancel()},w=(M,N)=>{d.onSelect(M,N)},C=M=>{b=!0,M.stopImmediatePropagation()},I=M=>{b=!1,p?.focus(),M.stopImmediatePropagation(),M.preventDefault(),w(v(x(M)),M)},A=M=>{M.key===S.ESCAPE&&(M.preventDefault(),M.stopImmediatePropagation(),E())};return n.tabIndex=-1,n.focus(),y({clientX:d.app.viewport.lastPosition.x,clientY:d.app.viewport.lastPosition.y,altKey:!1}),n.addEventListener("keydown",A),n.addEventListener("pointerdown",C),n.addEventListener("pointerup",I),l.addEventListener("pointermove",y,{passive:!0}),l.addEventListener("blur",E),()=>{b=!1,n.removeEventListener("keydown",A),n.removeEventListener("pointerdown",C),n.removeEventListener("pointerup",I),l.removeEventListener("pointermove",y),l.removeEventListener("blur",E)}},[d,s.canvas,n,r,p,i.offsetLeft,i.offsetTop,i.theme,l]);let m=O4(null);return Js(m,()=>{e()},u=>!!u.target.closest(".excalidraw-eye-dropper-trigger, .excalidraw-eye-dropper-backdrop")),n?B4(z4("div",{ref:m,className:"excalidraw-eye-dropper-preview"}),n):null};import{Popover as bx}from"radix-ui";import W4 from"clsx";import V4 from"react";import H4 from"react";import U4 from"clsx";import{jsx as G4}from"react/jsx-runtime";var Ct=H4.forwardRef(({children:e,padding:t,className:o,style:r,"data-viewport-ui":n,"data-viewport-ui-name":i},a)=>G4("div",{className:U4("Island",o),style:{"--padding":t,...r},"data-viewport-ui":n,"data-viewport-ui-name":i,ref:a,children:e}));import{jsx as xx,jsxs as Y4}from"react/jsx-runtime";var Zn=V4.forwardRef(({className:e,container:t,children:o,style:r,onClose:n,onKeyDown:i,onFocusOutside:a,onPointerLeave:s,onPointerDownOutside:l,preventAutoFocusOnTouch:c=!1},d)=>{let p=Le(),m=p.formFactor==="phone"&&!p.isLandscape;return xx(bx.Portal,{container:t,children:Y4(bx.Content,{ref:d,className:W4("focus-visible-none",e),"data-prevent-outside-click":!0,side:m?"bottom":"right",align:m?"center":"start",alignOffset:-16,sideOffset:20,collisionBoundary:t??void 0,style:{zIndex:"var(--zIndex-ui-styles-popup)",marginLeft:p.formFactor==="phone"?"0.5rem":void 0},onPointerLeave:s,onKeyDown:i,onFocusOutside:a,onPointerDownOutside:l,onOpenAutoFocus:u=>{c&&p.isTouchScreen&&u.preventDefault()},onCloseAutoFocus:u=>{u.stopPropagation(),u.preventDefault(),t&&!iv(document.activeElement)&&t.focus(),n()},children:[xx(Ct,{padding:3,style:r,children:o}),xx(bx.Arrow,{width:20,height:10,style:{fill:"var(--popup-bg-color)",filter:"drop-shadow(rgba(0, 0, 0, 0.05) 0px 3px 2px)"}})]})})});import{useState as K4,useCallback as Ex}from"react";var Mu=e=>e.querySelector(".excalidraw-wysiwyg"),Au=(e=document)=>{let t=Mu(e);return t?{start:t.selectionStart,end:t.selectionEnd}:null},md=(e,t=document)=>{(t.defaultView??window).setTimeout(()=>{let r=Mu(t);r&&(r.focus(),e&&(r.selectionStart=e.start,r.selectionEnd=e.end))},0)},pd=(e,t,o,r,n=document)=>{t&&r&&r();let i=t&&o?Au(n):null;e(),t&&o&&md(i,n)},pT=(e=document)=>{let[t,o]=K4(null),r=Ex(()=>{let a=Au(e);o(a)},[e]),n=Ex(()=>{(e.defaultView??window).setTimeout(()=>{let s=Mu(e);s&&(s.focus(),t&&(s.selectionStart=t.start,s.selectionEnd=t.end,o(null)))},0)},[e,t]),i=Ex(()=>{o(null)},[]);return{saveCaretPosition:r,restoreCaretPosition:n,clearSavedPosition:i,hasSavedPosition:!!t}},uT=(e=document,t=100)=>{let o=Mu(e);if(o){let r=o.onblur;o.onblur=null,(e.defaultView??window).setTimeout(()=>{o.onblur=r},t)}};import gT from"clsx";import{useCallback as X4,useEffect as vx,useRef as fT,useState as bT}from"react";var Ui=({palette:e,color:t})=>{if(!t)return null;for(let[o,r]of Object.entries(e))if(Array.isArray(r)){let n=r.indexOf(t);if(n>-1)return{colorName:o,shade:n}}else if(r===t)return{colorName:o,shade:null};return null},ud=[["q","w","e","r","t"],["a","s","d","f","g"],["z","x","c","v","b"]].flat(),yx=({color:e,palette:t})=>!Object.values(t).flat().includes(e),hT=(e,t,o)=>{let r={elementBackground:"backgroundColor",elementStroke:"strokeColor"},n=e.filter(a=>{if(a.isDeleted)return!1;let s=a[r[t]];return!vo(s)&&yx({color:s,palette:o})}),i=new Map;return n.forEach(a=>{let s=a[r[t]];i.has(s)?i.set(s,i.get(s)+1):i.set(s,1)}),[...i.entries()].sort((a,s)=>s[1]-a[1]).map(a=>a[0]).slice(0,Hy)},hr=Ie(null);import{Fragment as $4,jsx as hd,jsxs as wx}from"react/jsx-runtime";var xT=({color:e,onChange:t,label:o,colorPickerType:r,placeholder:n})=>{let i=Le(),[a,s]=bT(e),[l,c]=bT(null),[d,p]=le(hr);vx(()=>{s(e)},[e]);let m=X4(v=>{let y=v.toLowerCase().trim(),E=Zy(y);E?(t(E),c(null)):y.length===0?c(null):/^#?[0-9a-f]+$/.test(y)?c(h("colorPicker.invalidHexLength")):c(h("colorPicker.invalidColor")),s(y)},[t]),u=fT(null),b=fT(null);vx(()=>{u.current&&u.current.focus()},[d]);let[f,x]=le(Ho);return vx(()=>()=>{x(null)},[x]),wx("div",{className:"color-picker__input-label-container",children:[wx("div",{className:gT("color-picker__input-label",{"has-error":l}),children:[hd("div",{className:"color-picker__input-hash",children:"#"}),hd("input",{ref:d==="hex"?u:void 0,style:{border:0,padding:0},spellCheck:!1,className:"color-picker-input","aria-label":o,"aria-invalid":!!l,onChange:v=>{m(v.target.value)},value:(a||"").replace(/^#/,""),onBlur:()=>{s(e),c(null)},tabIndex:-1,onFocus:()=>p("hex"),onKeyDown:v=>{v.key!==S.TAB&&(v.key===S.ESCAPE&&b.current?.focus(),v.stopPropagation())},placeholder:n}),i.formFactor!=="phone"&&wx($4,{children:[hd("div",{style:{width:"1px",height:"1.25rem",backgroundColor:"var(--default-border-color)"}}),hd("div",{ref:b,className:gT("excalidraw-eye-dropper-trigger",{selected:f}),onClick:()=>x(v=>v?null:{keepOpenOnAlt:!1,onSelect:y=>t(y),colorPickerType:r}),title:`${h("labels.eyeDropper")} \u2014 ${S.I.toLocaleUpperCase()} or ${z("Alt")} `,children:N1})]})]}),l&&hd("div",{className:"color-picker__error-message",role:"alert",children:l})]})};import Sx,{useEffect as Ix,useImperativeHandle as fA,useState as bA}from"react";import tA from"clsx";import{useEffect as oA,useRef as rA}from"react";import{jsxs as j4}from"react/jsx-runtime";var Z4=({color:e,keyLabel:t,isShade:o=!1})=>j4("div",{className:"color-picker__button__hotkey-label",style:{color:Pr(e)?"#fff":"#000"},children:[o&&"\u21E7",t]}),Qs=Z4;import{createContext as q4,useContext as J4,useEffect as Q4,useMemo as ET,useRef as yT,useState as eA}from"react";var Ka="excalidraw-color-dnd-ghost",vT="excalidraw-color-dnd-active",wT=10,TT=100,CT=(e,t)=>{if(e.toLowerCase()===t.toLowerCase())return!0;let o=If(e);return o!==null&&o===If(t)},Tx=q4(null),gr=()=>J4(Tx),ST=({enabled:e,picks:t,onPicksChange:o})=>{let[r,n]=eA(null),i=yT(null),a=yT({enabled:e,picks:t,onPicksChange:o});a.current={enabled:e,picks:t,onPicksChange:o};let s=ET(()=>{let l=null,c=()=>{l?.activated?n({color:l.color,origin:l.origin,overIndex:l.overIndex,duplicateIndex:l.duplicateIndex,slotSpan:l.slotSpan}):n(null)},d=()=>{let L=i.current;if(!L||!l)return!1;let R=Array.from(L.querySelectorAll("[data-top-pick-index]")).sort((V,$)=>Number(V.dataset.topPickIndex)-Number($.dataset.topPickIndex));if(!R.length)return!1;l.slotRects=R.map(V=>V.getBoundingClientRect());let[H,K]=l.slotRects;l.slotSpan=K?K.left-H.left:H.width+4;let F=L.getBoundingClientRect(),U=Math.max(Math.abs(l.slotSpan)/2,10);return l.hitRect={left:F.left-U,right:F.right+U,top:F.top-14,bottom:F.bottom+14},!0},p=(L,R)=>{l?.ghost&&(l.ghost.style.transform=`translate(${L-l.ghostW/2}px, ${R-l.ghostH/2}px)`)},m=(L,R,H,K)=>{l?.ghost&&(l.ghostW!==L||l.ghostH!==R)&&(l.ghostW=L,l.ghostH=R,l.ghost.style.width=`${L}px`,l.ghost.style.height=`${R}px`,p(H,K))},u=(L,R)=>{if(!l)return;let{sourceRect:H,sourceEl:K,color:F}=l,U=document.createElement("div");U.className=Ka;let V=document.createElement("div");if(V.className=`${Ka}__swatch`,vo(F))V.classList.add("is-transparent");else{let $=getComputedStyle(K).backgroundColor;V.style.backgroundColor=$&&$!=="rgba(0, 0, 0, 0)"?$:F}U.appendChild(V),document.body.appendChild(U),l.ghost=U,l.ghostW=H.width,l.ghostH=H.height,U.style.width=`${H.width}px`,U.style.height=`${H.height}px`,p(L,R),requestAnimationFrame(()=>{l?.ghost===U&&U.classList.add(`${Ka}--lifted`)}),document.body.classList.add(vT),l.activated=!0,c()},b=(L,R)=>{if(!l?.hitRect)return;let{hitRect:H,slotRects:K}=l,F=null,U=null;if(L>=H.left&&L<=H.right&&R>=H.top&&R<=H.bottom){let V=0,$=1/0;if(K.forEach((oe,re)=>{let ke=Math.abs(L-(oe.left+oe.width/2));ke<$&&($=ke,V=re)}),l.origin.kind==="swatch"){let oe=a.current.picks.findIndex(re=>CT(re,l.color));oe!==-1?U=oe:F=V}else F=V}if(F!==l.overIndex||U!==l.duplicateIndex){l.overIndex=F,l.duplicateIndex=U;let{ghost:V}=l;V&&(V.classList.toggle(`${Ka}--over`,F!==null),V.classList.toggle(`${Ka}--blocked`,U!==null)),c()}if(F!==null){let V=l.slotRects[F];m(V.width,V.height,L,R)}else m(l.sourceRect.width,l.sourceRect.height,L,R)},f=L=>{if(!l?.ghost)return;let{ghost:R}=l;l.ghost=null,R.classList.add(`${Ka}--dropping`);let H=L.rect;H&&(R.style.width=`${H.width}px`,R.style.height=`${H.height}px`,R.style.transform=`translate(${H.left}px, ${H.top}px)`),window.setTimeout(()=>{R.classList.add(`${Ka}--fade`)},160),window.setTimeout(()=>{R.remove()},340)},x=()=>{let L=i.current;if(!L||!l?.activated)return;let R=Array.from(L.querySelectorAll("[data-top-pick-index]"));for(let H of R)H.style.transition="none",H.style.transform="none";L.offsetWidth;for(let H of R)H.style.transition=""},v=()=>{let L=R=>{R.preventDefault(),R.stopPropagation()};window.addEventListener("click",L,{capture:!0,once:!0}),window.setTimeout(()=>{window.removeEventListener("click",L,{capture:!0})},100)},y=()=>{window.removeEventListener("pointermove",I,!0),window.removeEventListener("pointerup",A,!0),window.removeEventListener("pointercancel",M,!0),window.removeEventListener("keydown",N,!0)},E=()=>{y(),document.body.classList.remove(vT),l?.activationTimer!=null&&window.clearTimeout(l.activationTimer),l=null,n(null)},w=L=>{l&&(x(),l.ghost&&(L?f({rect:l.sourceRect}):(l.ghost.remove(),l.ghost=null)),E())},C=(L,R)=>{if(!(!l||l.activated)){if(!d()){E();return}u(L,R),b(L,R)}},I=L=>{if(!(!l||L.pointerId!==l.pointerId)){if(l.lastX=L.clientX,l.lastY=L.clientY,!l.activated){if(Math.hypot(L.clientX-l.startX,L.clientY-l.startY)<wT){l.activationTimer!==null&&(window.clearTimeout(l.activationTimer),l.activationTimer=null);return}let R=performance.now()-l.startTime;if(R<TT){l.activationTimer===null&&(l.activationTimer=window.setTimeout(()=>{l&&(l.activationTimer=null,Math.hypot(l.lastX-l.startX,l.lastY-l.startY)>=wT&&C(l.lastX,l.lastY))},TT-R));return}if(C(L.clientX,L.clientY),!l?.activated)return}L.preventDefault(),p(L.clientX,L.clientY),b(L.clientX,L.clientY)}},A=L=>{if(!l||L.pointerId!==l.pointerId)return;if(!l.activated){E();return}L.preventDefault(),L.stopPropagation(),v();let{overIndex:R,origin:H,color:K,slotRects:F}=l,{picks:U,onPicksChange:V}=a.current;if(x(),R!==null){if(H.kind==="swatch"){if(!U.some($=>CT($,K))){let $=[...U];$[R]=K,V($)}}else if(H.index!==R){let $=[...U],[oe]=$.splice(H.index,1);$.splice(R,0,oe),V($)}f({rect:F[R]})}else f({rect:l.sourceRect});E()},M=L=>{l&&L.pointerId===l.pointerId&&w(!0)},N=L=>{l?.activated&&L.key==="Escape"&&(L.preventDefault(),L.stopPropagation(),w(!0))};return{begin:(L,R,H)=>{!a.current.enabled||l||L.button!==0||!R||(l={pointerId:L.pointerId,startX:L.clientX,startY:L.clientY,startTime:performance.now(),lastX:L.clientX,lastY:L.clientY,activationTimer:null,color:R,origin:H,sourceEl:L.currentTarget,sourceRect:L.currentTarget.getBoundingClientRect(),activated:!1,ghost:null,ghostW:0,ghostH:0,slotRects:[],slotSpan:0,hitRect:null,overIndex:null,duplicateIndex:null},window.addEventListener("pointermove",I,!0),window.addEventListener("pointerup",A,!0),window.addEventListener("pointercancel",M,!0),window.addEventListener("keydown",N,!0))},destroy:()=>w(!1)}},[]);return Q4(()=>()=>s.destroy(),[s]),ET(()=>({dragState:r,startSwatchDrag:(l,c)=>s.begin(l,c,{kind:"swatch"}),startPickDrag:(l,c,d)=>s.begin(l,d,{kind:"pick",index:c}),setStripEl:l=>{i.current=l}}),[r,s])};import{jsx as Cx,jsxs as nA}from"react/jsx-runtime";var IT=({theme:e,colors:t,color:o,onChange:r,label:n})=>{let[i,a]=le(hr),s=gr(),l=rA(null);return oA(()=>{l.current&&l.current.focus()},[o,i]),Cx("div",{className:"color-picker-content--default",children:t.map((c,d)=>{let p=Ut(c,e===Q.DARK);return nA("button",{ref:o===c?l:void 0,tabIndex:-1,type:"button",className:tA("color-picker__button color-picker__button--large has-outline",{active:o===c,"is-transparent":c==="transparent"||!c}),onClick:()=>{r(c),a("custom")},onPointerDown:s?m=>s.startSwatchDrag(m,c):void 0,title:c,"aria-label":n,style:{"--swatch-color":p},children:[Cx("div",{className:"color-picker__button-outline"}),Cx(Qs,{color:p,keyLabel:d+1})]},d)})})};import iA from"clsx";import{useEffect as aA,useRef as sA}from"react";import{jsx as Lu,jsxs as cA}from"react/jsx-runtime";var lA=({theme:e,palette:t,color:o,onChange:r,activeShade:n,showHotKey:i=!0,excludedColors:a})=>{let s=Ui({color:o,palette:t}),[l,c]=le(hr),d=gr(),p=sA(null);return aA(()=>{p.current&&l==="baseColors"&&p.current.focus()},[s?.colorName,l]),Lu("div",{className:"color-picker-content--default",children:Object.entries(t).map(([m,u],b)=>{let f=(Array.isArray(u)?u[n]:u)||"transparent";if(a?.includes(f))return Lu("div",{className:"color-picker__button color-picker__button--large",style:{visibility:"hidden"},"aria-hidden":"true"},m);let x=ud[b],v=Ut(f,e===Q.DARK),y=h(`colors.${m.replace(/\d+/,"")}`,null,"");return cA("button",{ref:s?.colorName===m?p:void 0,tabIndex:-1,type:"button",className:iA("color-picker__button color-picker__button--large",{"has-outline":!Pr(f,255),active:s?.colorName===m,"is-transparent":f==="transparent"||!f}),onClick:()=>{r(f),c("baseColors")},onPointerDown:d?E=>d.startSwatchDrag(E,f):void 0,title:`${y}${f.startsWith("#")?` ${f}`:""} \u2014 ${x}`,"aria-label":`${y} \u2014 ${x}`,style:f?{"--swatch-color":v}:void 0,"data-testid":`color-${m}`,children:[Lu("div",{className:"color-picker__button-outline"}),i&&Lu(Qs,{color:v,keyLabel:x})]},m)})})},kT=lA;import{jsx as mA}from"react/jsx-runtime";var dA=({children:e})=>mA("div",{className:"color-picker__heading",children:e}),el=dA;import pA from"clsx";import{useEffect as uA,useRef as hA}from"react";import{jsx as gd,jsxs as MT}from"react/jsx-runtime";var AT=({theme:e,color:t,onChange:o,palette:r,showHotKey:n})=>{let i=Ui({color:t||"transparent",palette:r}),[a,s]=le(hr),l=gr(),c=hA(null);if(uA(()=>{c.current&&a==="shades"&&c.current.focus()},[i,a]),i){let{colorName:d,shade:p}=i,m=r[d];if(Array.isArray(m))return gd("div",{className:"color-picker-content--default shades",children:m.map((u,b)=>{let f=Ut(u,e===Q.DARK);return MT("button",{ref:b===p&&a==="shades"?c:void 0,tabIndex:-1,type:"button",className:pA("color-picker__button color-picker__button--large",{active:b===p}),"aria-label":"Shade",title:`${d} - ${b+1}`,style:u?{"--swatch-color":f}:void 0,onClick:()=>{o(u),s("shades")},onPointerDown:l?x=>l.startSwatchDrag(x,u):void 0,children:[gd("div",{className:"color-picker__button-outline"}),n&&gd(Qs,{color:f,keyLabel:b+1,isShade:!0})]},b)})})}return MT("div",{className:"color-picker-content--default",style:{position:"relative"},tabIndex:-1,children:[gd("button",{type:"button",tabIndex:-1,className:"color-picker__button color-picker__button--large color-picker__button--no-focus-visible"}),gd("div",{tabIndex:-1,style:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",textAlign:"center",fontSize:"0.75rem"},children:h("colorPicker.noShades")})]})};var _u=(e,t,o)=>{let r=Math.ceil(o/Ea);switch(t=t??-1,e){case"ArrowLeft":{let n=t-1;return n<0?o-1:n}case"ArrowRight":return(t+1)%o;case"ArrowDown":{let n=t+Ea;return n>=o?t%Ea:n}case"ArrowUp":{let n=t-Ea,i=n<0?Ea*r+n:n;return i>=o?void 0:i}}},gA=({e,colorObj:t,onChange:o,palette:r,customColors:n,setActiveColorPickerSection:i,activeShade:a,excludedColors:s})=>{if(t?.shade!=null&&["Digit1","Digit2","Digit3","Digit4","Digit5"].includes(e.code)&&e.shiftKey){let l=Number(e.code.slice(-1))-1;return o(r[t.colorName][l]),i("shades"),!0}if(["1","2","3","4","5"].includes(e.key)&&n[Number(e.key)-1])return o(n[Number(e.key)-1]),i("custom"),!0;if(ud.includes(e.key)){let l=ud.indexOf(e.key),c=Object.keys(r)[l],d=r[c],p=Array.isArray(d)?d[a]:d;return p==null||s?.includes(p)||(o(p),i("baseColors")),!0}return!1},LT=({event:e,activeColorPickerSection:t,palette:o,color:r,onChange:n,customColors:i,setActiveColorPickerSection:a,updateData:s,activeShade:l,onEyeDropperToggle:c,onEscape:d,excludedColors:p})=>{if(e[S.CTRL_OR_CMD])return!1;if(e.key===S.ESCAPE)return d(e),!0;if(e.key===S.ALT)return c(!0),!0;if(e.key===S.I)return c(),!0;let m=Ui({color:r,palette:o});if(e.key===S.TAB){let u={custom:!!i.length,baseColors:!0,shades:m?.shade!=null,hex:!0},b=Object.entries(u).reduce((E,[w,C])=>(C&&E.push(w),E),[]),f=b.indexOf(t),x=e.shiftKey?-1:1,v=f+x>b.length-1?0:f+x<0?b.length-1:f+x,y=b[v];return y&&a(y),y==="custom"?n(i[0]):y==="baseColors"&&(Object.entries(o).find(([w,C])=>Array.isArray(C)?C.includes(r):C===r?w:null)||n(ho.charcoal)),e.preventDefault(),e.stopPropagation(),!0}if(gA({e,colorObj:m,onChange:n,palette:o,customColors:i,setActiveColorPickerSection:a,activeShade:l,excludedColors:p}))return!0;if(t==="shades"&&m){let{shade:u}=m,b=_u(e.key,u,Ea);if(b!==void 0)return n(o[m.colorName][b]),!0}if(t==="baseColors"&&m){let{colorName:u}=m,b=Object.keys(o),f=b.indexOf(u),x=_u(e.key,f,b.length),v=0;for(;x!==void 0&&v++<b.length;){let y=o[b[x]],E=Array.isArray(y)?y[l]:y;if(!p?.includes(E))break;x=_u(e.key,x,b.length)}if(x!==void 0){let y=b[x],E=o[y];return n(Array.isArray(E)?E[l]:E),!0}}if(t==="custom"){let u=r!=null?i.indexOf(r):0,b=_u(e.key,u,i.length);if(b!==void 0){let f=i[b];return n(f),!0}}return!1};import{jsx as jn,jsxs as Pu}from"react/jsx-runtime";var _T=Sx.forwardRef(({theme:e,color:t,onChange:o,type:r,elements:n,palette:i,updateData:a,children:s,showTitle:l,onEyeDropperToggle:c,onEscape:d,showHotKey:p=!0,excludedColors:m},u)=>{let b=l?r==="elementStroke"?h("labels.stroke"):r==="elementBackground"?h("labels.background"):null:null,[f]=Sx.useState(()=>r==="canvasBackground"?[]:hT(n,r,i)),[x,v]=le(hr),y=gr(),E=Ui({color:t,palette:i});Ix(()=>{if(!x){let A=!!t&&yx({color:t,palette:i}),M=A&&!f.includes(t);v(M?null:A?"custom":E?.shade!=null?"shades":"baseColors")}},[x,t,i,v,E,f]);let[w,C]=bA(E?.shade??(r==="elementBackground"?Om:Gy));Ix(()=>{E?.shade!=null&&C(E.shade);let A=M=>{M.key===S.ALT&&c(!1)};return document.addEventListener("keyup",A,{capture:!0}),()=>{document.removeEventListener("keyup",A,{capture:!0})}},[E,c]);let I=Sx.useRef(null);return fA(u,()=>I.current),Ix(()=>{I?.current?.focus()},[]),jn("div",{role:"dialog","aria-modal":"true","aria-label":h("labels.colorPicker"),children:Pu("div",{ref:I,onKeyDown:A=>{LT({event:A,activeColorPickerSection:x,palette:i,color:t,onChange:o,onEyeDropperToggle:c,customColors:f,setActiveColorPickerSection:v,updateData:a,activeShade:w,onEscape:d,excludedColors:m})&&(A.preventDefault(),A.stopPropagation())},className:"color-picker-content properties-content",tabIndex:-1,children:[b&&jn("div",{className:"color-picker__title",children:b}),!!f.length&&Pu("div",{children:[jn(el,{children:h("colorPicker.mostUsedCustomColors")}),jn(IT,{theme:e,colors:f,color:t,label:h("colorPicker.mostUsedCustomColors"),onChange:o})]}),Pu("div",{children:[jn(el,{children:h("colorPicker.colors")}),jn(kT,{theme:e,color:t,palette:i,onChange:o,activeShade:w,showHotKey:p,excludedColors:m})]}),Pu("div",{children:[jn(el,{children:h("colorPicker.shades")}),jn(AT,{theme:e,color:t,onChange:o,palette:i,showHotKey:p})]}),s,y&&jn("div",{className:"color-picker__tip",children:h("colorPicker.topPicksTip")})]})})});import PT from"clsx";import{ContextMenu as fd}from"radix-ui";import{jsx as Gi,jsxs as DT}from"react/jsx-runtime";var RT=({theme:e,onChange:t,type:o,activeColor:r,topPicks:n,onReset:i,isCustomized:a})=>{let s=gr(),l=s?.dragState??null,{container:c}=tt(),d;if(o==="elementStroke"&&(d=Es),o==="elementBackground"&&(d=ys),o==="canvasBackground"&&(d=Fm),n&&(d=n),!d)return console.error("Invalid type for TopPicks"),null;let p=u=>{if(!l||l.origin.kind!=="pick"||l.overIndex===null)return 0;let b=l.origin.index,f=l.overIndex;if(b===f)return 0;let x=u;return u===b?x=f:(u>b&&(x-=1),x>=f&&(x+=1)),(x-u)*l.slotSpan},m=DT("div",{className:PT("color-picker__top-picks",{"is-dnd-active":!!l}),ref:s?.setStripEl,children:[l&&Gi("svg",{className:"color-picker__top-picks__dnd-outline","aria-hidden":"true",children:Gi("rect",{})}),d.map((u,b)=>{let f=p(b),x=Ut(u,e===Q.DARK);return Gi("button",{className:PT("color-picker__button",{active:u===r,"is-transparent":u==="transparent"||!u,"has-outline":!Pr(u,bc),"is-dnd-source":l?.origin.kind==="pick"&&l.origin.index===b,"is-dnd-target":l?.origin.kind==="swatch"&&l.overIndex===b,"is-dnd-duplicate":l?.duplicateIndex===b}),style:{"--swatch-color":x,transform:f?`translateX(${f}px)`:void 0},type:"button",title:u,onClick:()=>t(u),onPointerDown:s?v=>s.startPickDrag(v,b,u):void 0,"data-testid":`color-top-pick-${u}`,"data-top-pick-index":b,children:Gi("div",{className:"color-picker__button-outline"})},u)})]});return i?DT(fd.Root,{children:[Gi(fd.Trigger,{asChild:!0,children:m}),Gi(fd.Portal,{container:c,children:Gi(fd.Content,{className:"color-picker__context-menu",style:{zIndex:"var(--zIndex-ui-styles-popup)"},children:Gi(fd.Item,{className:"color-picker__context-menu-item",disabled:!a,onSelect:i,children:h("colorPicker.resetTopPicks")})})})]}):m};import{jsx as fr,jsxs as Du}from"react/jsx-runtime";var yA=({type:e,color:t,onChange:o,label:r,elements:n,palette:i=ho,updateData:a,getOpenPopup:s,appState:l,excludedColors:c})=>{let{container:d}=tt(),p=Ke(),m=Kt(),u=m!=="full",b=m==="mobile",[,f]=le(hr),[x,v]=le(Ho),y=Du("div",{children:[fr(el,{children:h("colorPicker.hexCode")}),fr(xT,{color:t||"",label:r,onChange:C=>{o(C)},colorPickerType:e,placeholder:h("colorPicker.color")})]}),E=BT(null),w=()=>{E.current?.focus()};return fr(Zn,{container:d,style:{maxWidth:"13rem"},preventAutoFocusOnTouch:!!l.editingTextElement,onFocusOutside:C=>{let I=C.target;if(I instanceof p.ownerWindow.HTMLElement&&I.closest(".color-picker__context-menu")){C.preventDefault();return}go(C.target)||(I instanceof p.ownerWindow.HTMLElement&&I.matches(":active")?p.ownerWindow.addEventListener("pointerup",w,{once:!0}):w()),C.preventDefault()},onPointerDownOutside:C=>{x&&C.preventDefault()},onClose:()=>{s()===e&&a({openPopup:null}),f(null),l.editingTextElement&&p.ownerWindow.setTimeout(()=>{let C=p.ownerDocument.querySelector(".excalidraw-wysiwyg");C&&C.focus()},0)},children:i?fr(_T,{ref:E,palette:i,excludedColors:c,color:t,theme:l.theme,onChange:C=>{let I=l.editingTextElement?Au(p.ownerDocument):null;o(C),l.editingTextElement&&I&&md(I,p.ownerDocument)},onEyeDropperToggle:C=>{v(I=>C?(I=I||{keepOpenOnAlt:!0,onSelect:o,colorPickerType:e},I.keepOpenOnAlt=!0,I):C===!1||I?null:{keepOpenOnAlt:!1,onSelect:o,colorPickerType:e})},onEscape:C=>{x?v(null):a({openPopup:null})},type:e,elements:n,updateData:a,showTitle:u,showHotKey:!b,children:y}):y})},vA=e=>e==="elementStroke"||e==="elementBackground"||e==="canvasBackground",wA=({label:e,color:t,type:o,theme:r,mode:n="background",onToggle:i,editingTextElement:a})=>{let s=Ke(),l=Kt(),c=l!=="full",d=l==="mobile",p=gr(),m=t?Ut(t,r===Q.DARK):null,u=b=>{b.preventDefault(),b.stopPropagation(),a&&uT(s.ownerDocument),i()};return Du(NT.Trigger,{type:"button",className:OT("color-picker__button active-color properties-trigger",{"is-transparent":!t||t==="transparent","has-outline":!t||!Pr(t,bc),"compact-sizing":c,"mobile-border":d}),"aria-label":e,style:m?{"--swatch-color":m}:void 0,title:o==="elementStroke"?h("labels.showStroke"):h("labels.showBackground"),"data-openpopup":o,onClick:u,onPointerDown:p?b=>p.startSwatchDrag(b,t):void 0,children:[fr("div",{className:"color-picker__button-outline",children:!t&&Bb}),c&&t&&n==="stroke"&&fr("div",{className:"color-picker__button-background",children:fr("span",{style:{color:m&&Pr(m,bc)?"#fff":"#111"},children:sx})})]})},TA=({type:e,color:t,onChange:o,label:r,elements:n,palette:i=ho,topPicks:a,updateData:s,appState:l,excludedColors:c,customizableTopPicks:d})=>{let p=BT(l.openPopup);EA(()=>{p.current=l.openPopup},[l.openPopup]);let u=Kt()!=="full",b=!!d&&!u,f=b&&d?l.colorTopPicks?.[d]:null,x=f?.length?f:a??(e==="elementStroke"?Es:ys),v=ST({enabled:b,picks:x,onPicksChange:y=>{d&&s({colorTopPicks:{...l.colorTopPicks,[d]:y}})}});return fr(Tx.Provider,{value:b?v:null,children:Du("div",{role:"dialog","aria-modal":"true",className:OT("color-picker-container",{"color-picker-container--no-top-picks":u}),children:[!u&&fr(RT,{theme:l.theme,activeColor:t,onChange:y=>{o(y),vA(l.openPopup)&&l.openPopup!==e&&setTimeout(()=>s({openPopup:e}),0)},type:e,topPicks:f?.length?f:a,isCustomized:!!f?.length,onReset:b&&d?()=>{s({colorTopPicks:{...l.colorTopPicks,[d]:null}})}:void 0}),!u&&fr(Su,{}),Du(NT.Root,{open:l.openPopup===e,onOpenChange:y=>{y&&s({openPopup:e})},children:[fr(wA,{color:t,label:r,type:e,theme:l.theme,mode:e==="elementStroke"?"stroke":"background",editingTextElement:!!l.editingTextElement,onToggle:()=>{l.openPopup===e?s({openPopup:null}):l.openPopup?s({openPopup:e}):s({openPopup:e})}}),l.openPopup===e&&fr(yA,{type:e,color:t,onChange:o,label:r,elements:n,palette:i,excludedColors:c,updateData:s,getOpenPopup:()=>p.current,appState:l})]})]})})},CA=(e,t)=>e.appState.openPopup===e.type||t.appState.openPopup===t.type?!1:e.type===t.type&&e.color===t.color&&e.label===t.label&&e.appState.openPopup===t.appState.openPopup&&e.palette===t.palette&&e.topPicks===t.topPicks&&e.excludedColors===t.excludedColors&&e.customizableTopPicks===t.customizableTopPicks&&e.appState.theme===t.appState.theme&&e.appState.colorTopPicks===t.appState.colorTopPicks&&!!e.appState.editingTextElement==!!t.appState.editingTextElement,tl=xA(TA,CA);import{Popover as KA}from"radix-ui";import XA from"clsx";import $A,{useCallback as ZA,useMemo as jA}from"react";import HA,{useMemo as Yi,useState as UA,useRef as UT,useEffect as GT,useCallback as WT}from"react";import SA from"clsx";import IA from"react";import{jsx as kA,jsxs as MA}from"react/jsx-runtime";var Ru=IA.forwardRef(({className:e,placeholder:t,onChange:o},r)=>MA("div",{className:SA("QuickSearch__wrapper",e),children:[zo,kA("input",{ref:r,className:"QuickSearch__input",type:"text",placeholder:t,onChange:n=>o(n.target.value.trim().toLowerCase())})]}));import AA from"clsx";import{Children as LA}from"react";import{jsx as FT}from"react/jsx-runtime";var Nu=({className:e,placeholder:t,children:o})=>{let r=!LA.count(o);return FT("div",{className:AA("ScrollableList__wrapper",e),role:"menu",children:r?FT("div",{className:"empty",children:t}):o})};import{jsx as _A,jsxs as PA}from"react/jsx-runtime";var zT=({children:e,className:t="",style:o,title:r})=>PA("div",{className:`dropdown-menu-group ${t}`,style:o,children:[r&&_A("p",{className:"dropdown-menu-group-title",children:r}),e]}),bd=zT;zT.displayName="DropdownMenuGroup";import{DropdownMenu as zA}from"radix-ui";import DA,{useContext as RA}from"react";var kx=DA.createContext({}),Wi=(e="",t=!1,o=!1)=>`dropdown-menu-item dropdown-menu-item-base ${e} ${t?"dropdown-menu-item--selected":""} ${o?"dropdown-menu-item--hovered":""}`.trim(),Ou=e=>{let t=RA(kx);return wi(e,o=>{t.onSelect?.(o)})};import{jsx as NA}from"react/jsx-runtime";var Xa=({children:e,...t})=>NA("span",{...t,style:{textOverflow:"ellipsis",overflow:"hidden",whiteSpace:"nowrap",...t.style},children:e});import{Fragment as BA,jsx as xd,jsxs as FA}from"react/jsx-runtime";var OA=({textStyle:e,icon:t,shortcut:o,children:r,badge:n})=>{let i=Le();return FA(BA,{children:[t&&xd("div",{className:"dropdown-menu-item__icon",children:t}),xd("div",{style:e,className:"dropdown-menu-item__text",children:xd(Xa,{children:r})}),n&&xd("div",{className:"dropdown-menu-item__badge",children:n}),o&&i.formFactor!=="phone"&&xd("div",{className:"dropdown-menu-item__shortcut",children:o})]})},Vi=OA;import{jsx as Bu}from"react/jsx-runtime";var Mx=({icon:e,badge:t,value:o,children:r,shortcut:n,className:i,selected:a,onSelect:s,...l})=>{let c=Ou(s);return Bu(zA.Item,{className:"radix-menu-item",onSelect:c,asChild:!0,children:Bu("button",{...l,value:o,className:Wi(i,a),title:l.title??l["aria-label"],children:Bu(Vi,{icon:e,shortcut:n,badge:t,children:r})})})};Mx.displayName="DropdownMenuItem";var ol={GREEN:"green",RED:"red",BLUE:"blue"},Fu=({type:e=ol.BLUE,children:t})=>{let{theme:o}=cn(),r={display:"inline-flex",marginLeft:"auto",padding:"2px 4px",borderRadius:6,fontSize:9,fontFamily:"Cascadia, monospace",border:o===Q.LIGHT?"1.5px solid white":"none"};switch(e){case ol.GREEN:Object.assign(r,{backgroundColor:"var(--background-color-badge)",color:"var(--color-badge)"});break;case ol.RED:Object.assign(r,{backgroundColor:"pink",color:"darkred"});break;case ol.BLUE:default:Object.assign(r,{background:"var(--color-promo)",color:"var(--color-surface-lowest)"})}return Bu("div",{className:"DropDownMenuItemBadge",style:r,children:t})};Fu.displayName="DropdownMenuItemBadge";Mx.Badge=Fu;var Io=Mx;var HT=({event:e,inputRef:t,hoveredFont:o,filteredFonts:r,onClose:n,onSelect:i,onHover:a})=>{if(!e[S.CTRL_OR_CMD]&&e.shiftKey&&e.key.toLowerCase()===S.F)return t.current?.focus(),!0;if(e.key===S.ESCAPE)return n(),!0;if(e.key===S.ENTER)return o?.value&&i(o.value),!0;if(e.key===S.ARROW_DOWN)return o?.next?a(o.next.value):r[0]?.value&&a(r[0].value),!0;if(e.key===S.ARROW_UP)return o?.prev?a(o.prev.value):r[r.length-1]?.value&&a(r[r.length-1].value),!0};import{jsx as qn,jsxs as VA}from"react/jsx-runtime";var GA=e=>{switch(e){case pt.Excalifont:case pt.Virgil:return Gn;case pt.Nunito:case pt.Helvetica:return Xs;case pt["Lilita One"]:return T1;case pt["Comic Shanns"]:case pt.Cascadia:return nd;default:return Xs}},WA=(e,t)=>Object.entries(pt).find(([,o])=>o===e)?.[0]??t[0]?.fontFace?.family??"Unknown",VT=HA.memo(({selectedFontFamily:e,hoveredFontFamily:t,onSelect:o,onHover:r,onLeave:n,onOpen:i,onClose:a})=>{let{container:s}=tt(),l=Ke(),{fonts:c}=l,{showDeprecatedFonts:d}=ko(),p=Kt(),[m,u]=UA(""),b=UT(null),f=Yi(()=>Array.from(Hn.registered.entries()).filter(([L,{metadata:R}])=>!R.private&&!R.fallback).map(([L,{metadata:R,fontFaces:H}])=>{let K={value:L,icon:GA(L),text:WA(L,H)};return R.deprecated&&Object.assign(K,{deprecated:R.deprecated,badge:{type:ol.RED,placeholder:h("fontList.badge.old")}}),K}).sort((L,R)=>L.text.toLowerCase()>R.text.toLowerCase()?1:-1),[]),x=Yi(()=>new Set(c.getSceneFamilies()),[e]),v=Yi(()=>f.filter(L=>x.has(L.value)),[f,x]),y=Yi(()=>f.filter(L=>!x.has(L.value)&&(d||!L.deprecated)),[f,x,d]),E=Yi(()=>hv([...v,...y].filter(L=>L.text?.toLowerCase().includes(m))),[v,y,m]),w=Yi(()=>{let L;return t?L=E.find(R=>R.value===t):e&&(L=E.find(R=>R.value===e)),!L&&m&&(E[0]?.value?r(E[0].value):n()),L},[t,e,m,E,r,n]),C=WT(L=>{let R=null;if(l.state.editingTextElement){let H=document.querySelector(".excalidraw-wysiwyg");H&&(R={start:H.selectionStart,end:H.selectionEnd})}o(L),l.state.editingTextElement&&R&&setTimeout(()=>{let H=document.querySelector(".excalidraw-wysiwyg");H&&R&&(H.focus(),H.selectionStart=R.start,H.selectionEnd=R.end)},0)},[o,l.state.editingTextElement]),I=WT(L=>{HT({event:L,inputRef:b,hoveredFont:w,filteredFonts:E,onSelect:C,onHover:r,onClose:a})&&(L.preventDefault(),L.stopPropagation())},[w,E,C,r,a]);GT(()=>(i(),()=>{a()}),[]);let A=Yi(()=>E.filter(L=>x.has(L.value)),[E,x]),M=Yi(()=>E.filter(L=>!x.has(L.value)),[E,x]),N=({font:L,order:R})=>{let H=UT(null),K=L.value===w?.value,F=L.value===e;return GT(()=>{K&&(R===0?H.current?.scrollIntoView?.({block:"end"}):H.current?.scrollIntoView?.({block:"nearest"}))},[K,R]),qn("button",{ref:H,type:"button",value:L.value,className:Wi("",F,K),title:L.text,tabIndex:F?0:-1,onClick:U=>{C(Number(U.currentTarget.value))},onMouseMove:()=>{w?.value!==L.value&&r(L.value)},children:qn(Vi,{icon:L.icon,badge:L.badge&&qn(Fu,{type:L.badge.type,children:L.badge.placeholder}),textStyle:{fontFamily:wa({fontFamily:L.value})},children:L.text})})},P=[];return A.length&&P.push(qn(bd,{title:h("fontList.sceneFonts"),children:A.map((L,R)=>qn(N,{font:L,order:R},L.value))},"group_1")),M.length&&P.push(qn(bd,{title:h("fontList.availableFonts"),children:M.map((L,R)=>qn(N,{font:L,order:R+A.length},L.value))},"group_2")),VA(Zn,{className:"properties-content",container:s,style:{width:"15rem"},onClose:()=>{a(),l.state.editingTextElement&&setTimeout(()=>{let L=document.querySelector(".excalidraw-wysiwyg");L&&L.focus()},0)},onPointerLeave:n,onKeyDown:I,preventAutoFocusOnTouch:!!l.state.editingTextElement,children:[p==="full"&&qn(Ru,{ref:b,placeholder:h("quickSearch.placeholder"),onChange:kn(u,20)}),qn(Nu,{className:"dropdown-menu fonts manual-hover",placeholder:h("fontList.empty"),children:P.length?P:null})]})},(e,t)=>e.selectedFontFamily===t.selectedFontFamily&&e.hoveredFontFamily===t.hoveredFontFamily);import{Popover as YA}from"radix-ui";import{jsx as Ax}from"react/jsx-runtime";var YT=({selectedFontFamily:e,isOpened:t=!1,compactMode:o=!1})=>{let r=Ce(),n=o?{...Sn,width:"2rem",height:"2rem"}:{};return Ax(YA.Trigger,{asChild:!0,children:Ax("div",{"data-openpopup":"fontFamily",className:"properties-trigger",children:Ax(ee,{type:"toggle",icon:ln,title:h("labels.showFonts"),"aria-label":h("labels.showFonts"),className:"standalone properties-trigger","data-testid":"font-family-show-fonts",checked:t,onSelect:()=>{r(i=>({openPopup:i.openPopup==="fontFamily"?null:i.openPopup}))},style:{border:"none",...n}})})})};import{jsx as Ed,jsxs as KT}from"react/jsx-runtime";var XT=[{value:pt.Excalifont,icon:Gn,text:h("labels.handDrawn"),testId:"font-family-hand-drawn"},{value:pt.Nunito,icon:Xs,text:h("labels.normal"),testId:"font-family-normal"},{value:pt["Comic Shanns"],icon:nd,text:h("labels.code"),testId:"font-family-code"}],cV=new Set(XT.map(e=>e.value));var $T=$A.memo(({isOpened:e,selectedFontFamily:t,hoveredFontFamily:o,onSelect:r,onHover:n,onLeave:i,onPopupChange:a,compactMode:s=!1})=>{let l=jA(()=>XT,[]),c=ZA(d=>{d&&r(d)},[r]);return KT("div",{role:"dialog","aria-modal":"true",className:XA("FontPicker__container",{"FontPicker__container--compact":s}),children:[!s&&Ed("div",{className:"buttonList",children:Ed(Jo,{type:"button",options:l,value:t,onClick:c})}),!s&&Ed(Su,{}),KT(KA.Root,{open:e,onOpenChange:a,children:[Ed(YT,{selectedFontFamily:t,isOpened:e,compactMode:s}),e&&Ed(VT,{selectedFontFamily:t,hoveredFontFamily:o,onSelect:c,onHover:n,onLeave:i,onOpen:()=>a(!0),onClose:()=>a(!1)})]})]})},(e,t)=>e.isOpened===t.isOpened&&e.selectedFontFamily===t.selectedFontFamily&&e.hoveredFontFamily===t.hoveredFontFamily);import{Popover as Lx}from"radix-ui";import eL from"clsx";import JT,{useEffect as tL,useMemo as oL}from"react";import{jsx as qA}from"react/jsx-runtime";var dn=({className:e,icon:t,size:o="1em"})=>qA("span",{className:e,style:{width:o,height:"100%",margin:"0 0.5ex 0 0.5ex",display:"inline-flex",lineHeight:0,verticalAlign:"middle",flex:"0 0 auto"},children:t});import{Fragment as QA,jsx as ZT,jsxs as jT}from"react/jsx-runtime";var JA=({label:e,open:t,openTrigger:o,children:r,className:n,showCollapsedIcon:i=!0})=>jT(QA,{children:[jT("div",{style:{cursor:"pointer",display:"flex",justifyContent:"space-between",alignItems:"center"},className:n,onClick:o,children:[e,i&&ZT(dn,{icon:t?nx:ld})]}),t&&ZT("div",{style:{display:"flex",flexDirection:"column"},children:r})]}),yd=JA;import{jsx as mn,jsxs as Hu}from"react/jsx-runtime";var rL=Ie(!1),zu=4,nL="default",iL=e=>e.flatMap(t=>t.options),qT=(e,t)=>{for(let o of e){let r=o.options.find(t);if(r)return r}return null},aL=(e,t)=>e.some(o=>o.options.some(t)),sL=e=>e.flatMap(t=>Array.from({length:Math.ceil(t.options.length/zu)},(o,r)=>t.options.slice(r*zu,r*zu+zu)));function lL({visibleSections:e,hiddenSections:t=[],value:o,label:r,onChange:n,onClose:i}){let{container:a}=tt(),[s,l]=le(rL),c=[...e,...t],d=iL(c),p=sL([...e,...s?t:[]]),m=f=>{let x=d.find(v=>v.keyBinding===f.key.toLowerCase());if(!(f.metaKey||f.altKey||f.ctrlKey)&&x)n(x.value),f.preventDefault();else if(f.key===S.TAB){let v=d.findIndex(E=>E.value===o),y=f.shiftKey?(d.length+v-1)%d.length:(v+1)%d.length;n(d[y].value)}else if(Ei(f.key)){let v=sn().rtl,y=d.findIndex(E=>E.value===o);if(y!==-1){let E=d.length,w=y;switch(f.key){case(v?S.ARROW_LEFT:S.ARROW_RIGHT):w=(y+1)%E;break;case(v?S.ARROW_RIGHT:S.ARROW_LEFT):w=(E+y-1)%E;break;case S.ARROW_DOWN:{let C=p.findIndex(A=>A.some(M=>M.value===o)),I=p[C];if(C!==-1&&I){let A=I.findIndex(P=>P.value===o),M=p[(C+1)%p.length],N=M[Math.min(A,M.length-1)]??d[y];n(N.value),f.preventDefault(),f.nativeEvent.stopImmediatePropagation(),f.stopPropagation();return}break}case S.ARROW_UP:{let C=p.findIndex(A=>A.some(M=>M.value===o)),I=p[C];if(C!==-1&&I){let A=I.findIndex(P=>P.value===o),M=p[(p.length+C-1)%p.length],N=M[Math.min(A,M.length-1)]??d[y];n(N.value),f.preventDefault(),f.nativeEvent.stopImmediatePropagation(),f.stopPropagation();return}break}}n(d[w].value)}f.preventDefault()}else(f.key===S.ESCAPE||f.key===S.ENTER)&&(f.preventDefault(),i());f.nativeEvent.stopImmediatePropagation(),f.stopPropagation()};tL(()=>{aL(t,f=>f.value===o)&&l(!0)},[o,t,l]);let u=f=>mn("div",{className:"picker-content",children:f.map(x=>Hu("button",{type:"button",className:eL("picker-option",{active:o===x.value}),onClick:()=>{n(x.value)},title:x.keyBinding?`${x.text} \u2014 ${x.keyBinding.toUpperCase()}`:x.text,"aria-label":x.text||"none","aria-keyshortcuts":x.keyBinding||void 0,ref:v=>{o===x.value&&setTimeout(()=>{v?.focus()},0)},children:[x.icon,x.keyBinding&&mn("span",{className:"picker-keybinding",children:x.keyBinding})]},x.text))}),b=f=>f.map((x,v)=>x.name===nL?mn(JT.Fragment,{children:u(x.options)},`${x.name}-${v}`):Hu("div",{className:"picker-section",children:[mn("div",{className:"picker-section-label",children:x.name}),u(x.options)]},`${x.name}-${v}`));return mn(Lx.Content,{className:"picker",role:"dialog","aria-modal":"true","aria-label":r,side:"bottom",align:"start",sideOffset:12,alignOffset:12,style:{zIndex:"var(--zIndex-ui-styles-popup)"},onKeyDown:m,collisionBoundary:a??void 0,children:Hu("div",{className:"picker-sections",children:[b(e),t.length>0&&mn(yd,{label:h("labels.more_options"),open:s,openTrigger:()=>{l(f=>!f)},className:"picker-collapsible",children:mn("div",{className:"picker-sections",children:b(t)})})]})})}function _x({value:e,label:t,visibleSections:o,hiddenSections:r,onChange:n}){let[i,a]=JT.useState(!1),s=oL(()=>qT(o,l=>l.value===e)??qT(r??[],l=>l.value===e),[o,r,e]);return mn("div",{children:Hu(Lx.Root,{open:i,onOpenChange:l=>a(l),children:[mn(Lx.Trigger,{type:"button","aria-label":t,onClick:()=>a(!i),className:i?"active":"",children:s?.icon}),i&&mn(lL,{visibleSections:o,hiddenSections:r,value:e,label:t,onChange:n,onClose:()=>{a(!1)}})]})})}import QT,{useEffect as cL}from"react";import{jsx as Px,jsxs as eC}from"react/jsx-runtime";var tC=({label:e,value:t,onChange:o,min:r=0,max:n=100,step:i=10,minLabel:a=r,hasCommonValue:s=!0,testId:l})=>{let c=QT.useRef(null),d=QT.useRef(null);return cL(()=>{if(c.current&&d.current){let p=c.current,m=d.current,u=p.offsetWidth,b=parseFloat(getComputedStyle(p).getPropertyValue("--slider-thumb-size"))||16,f=(t-r)/(n-r||1)*100,x=f/100*(u-b)+b/2;m.style.left=`${x}px`,p.style.background=`linear-gradient(to right, var(--color-slider-track) 0%, var(--color-slider-track) ${f}%, var(--button-bg) ${f}%, var(--button-bg) 100%)`}},[n,r,t]),eC("label",{className:"control-label",children:[e,eC("div",{className:"range-wrapper",children:[Px("input",{style:{"--color-slider-track":s?void 0:"var(--button-bg)"},ref:c,type:"range",min:r,max:n,step:i,onChange:p=>{o(+p.target.value)},value:t,className:"range-input","data-testid":l}),Px("div",{className:"value-bubble",ref:d,children:t!==r?t:null}),Px("div",{className:"zero-label",children:a})]})]})};var dL={strokeColor:{regular:"currentItemStrokeColor",sticky:"currentItemStickynoteStrokeColor"},backgroundColor:{regular:"currentItemBackgroundColor",sticky:"currentItemStickynoteBackgroundColor"}},mL=[ho.transparent],pL=(e,t)=>et(e)||J(e)&&ks(e,t),Jn=(e,t,o)=>{let r=te(t),n=p=>o==="strokeColor"?Aa(p.type):Ii(p.type),i=ie(t,e,{includeBoundTextElement:o==="strokeColor"}).filter(n),a=e.editingTextElement&&r.get(e.editingTextElement.id),s=a&&Si(a,o,r);s&&!s.isDeleted&&n(s)&&!i.some(p=>p.id===s.id)&&i.push(s);let l;if(!i.length)l=e.activeTool.type==="stickynote"?"sticky":"regular";else{let p=i.filter(m=>pL(m,r)).length;l=p===0?"regular":p===i.length?"sticky":"mixed"}let c=dL[o],d=o==="strokeColor";return{kind:l,property:o,appStateKeys:l==="mixed"?[c.regular,c.sticky]:[c[l]],currentValue:e[l==="sticky"?c.sticky:c.regular],palette:d?Yy:zm,topPicks:l==="sticky"?d?Wy:Vy:d?Es:ys,customizableTopPicks:l==="sticky"?d?"stickyNoteStroke":"stickyNoteBackground":d?"elementStroke":"elementBackground",excludedColors:l==="sticky"?mL:void 0}},$a=(e,t)=>{let o={};for(let r of e.appStateKeys)o[r]=r==="currentItemStickynoteStrokeColor"?Yv(t):r==="currentItemStickynoteBackgroundColor"?Kv(t):t;return o};import{Fragment as Uu,jsx as ce,jsxs as lo}from"react/jsx-runtime";var rC=.1,Za=e=>{let t=ya(e.editorInterface);return{stylesPanelMode:t,isCompact:t!=="full",isMobile:t==="mobile"}},xo=(e,t,o,r=!1)=>{let n=te(ie(e,t,{includeBoundTextElement:r}));return e.map(i=>{if(n.get(i.id)||i.id===t.editingTextElement?.id){Fo(i)||console.error("[NONDELETED][INVARIANT] changeProperty(): skipping deleted selected/editing element");let a=o(i);return et(a)?wp(a):a}return i})},Qt=function(e,t,o,r,n){let i=t.state.editingTextElement,a=me(e),s=null;if(i&&(s=o(i)),!s)if($e(a,t.state)){let c=t.scene.getSelectedElements(t.state),d=r===!0?c:c.filter(p=>r(p));s=Km(d,o)??(typeof n=="function"?n(!0):n)}else s=typeof n=="function"?n(!1):n;return s},hL=(e,t,o)=>gt(t)||!t.autoResize?t:o.mutateElement(t,{x:e.textAlign==="left"?e.x:e.x+(e.width-t.width)/(e.textAlign==="center"?2:1),y:e.y+(e.height-t.height)/2}),Ox=(e,t,o,r,n)=>{let i=new Set,a=o.scene.getNonDeletedElementsMap(),s=xo(e,t,l=>{if(J(l)){let c=r(l);i.add(c);let d=o.scene.getContainerElement(l),p=se(l,Rn(l,c,a));return At(p,d,o.scene),p=hL(l,p,o.scene),p}return l},!0);return ie(e,t,{includeBoundTextElement:!0}).forEach(l=>{J(l)&&io(l,o.scene)}),{elements:s,appState:{...t,currentItemFontSize:i.size===1?[...i][0]:n??t.currentItemFontSize},captureUpdate:O.IMMEDIATELY}},nC=W({name:"changeStrokeColor",label:"labels.stroke",trackEvent:!1,perform:(e,t,o)=>{let{color:r,...n}=o??{};if(r===void 0)return{appState:{...t,...n},captureUpdate:O.EVENTUALLY};let i=Jn(t,e,"strokeColor"),a=te(e);return{elements:op(xo(e,t,s=>Aa(s.type)?se(s,qr(s,"strokeColor",r,a)):s,!0),a),appState:{...t,...n,...$a(i,r)},captureUpdate:O.IMMEDIATELY}},PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>{let{stylesPanelMode:n}=Za(r),i=Jn(t,e,"strokeColor"),a=i.kind==="sticky"?h("labels.textColor"):h("labels.stroke");return lo(Uu,{children:[n==="full"&&ce("h3",{"aria-hidden":"true",children:a}),ce(tl,{topPicks:i.topPicks,palette:i.palette,customizableTopPicks:i.customizableTopPicks,excludedColors:i.excludedColors,type:"elementStroke",label:a,color:Qt(e,r,s=>s.strokeColor,!0,s=>s?null:i.currentValue),onChange:s=>o({color:s}),elements:e,appState:t,updateData:o})]})}}),iC=W({name:"changeBackgroundColor",label:"labels.changeBackground",trackEvent:!1,perform:(e,t,o,r)=>{let{color:n,...i}=o??{};if(n===void 0)return{appState:{...t,...i},captureUpdate:O.EVENTUALLY};let a=Jn(t,e,"backgroundColor"),s=te(e),l,c=r.scene.getSelectedElements(t);if(!vo(n)&&c.length>0&&c.every(p=>ct(p)&&Lv(p.points))){let p=te(c);l=e.map(m=>p.has(m.id)&&ct(m)?se(m,{backgroundColor:n,...xp(m,!0)}):m)}else{l=xo(e,t,u=>Si(u,"backgroundColor",s)===u?se(u,qr(u,"backgroundColor",n,s)):u);let p=t.editingTextElement&&s.get(t.editingTextElement.id),m=p&&Si(p,"backgroundColor",s);m&&m!==p&&(l=l.map(u=>u.id===m.id?se(u,qr(u,"backgroundColor",n,s)):u))}return{elements:l,appState:{...t,...i,...$a(a,n)},captureUpdate:O.IMMEDIATELY}},PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>{let{stylesPanelMode:n}=Za(r),i=Jn(t,e,"backgroundColor"),a=r.scene.getNonDeletedElementsMap();return lo(Uu,{children:[n==="full"&&ce("h3",{"aria-hidden":"true",children:h("labels.background")}),ce(tl,{topPicks:i.topPicks,palette:i.palette,customizableTopPicks:i.customizableTopPicks,excludedColors:i.excludedColors,type:"elementBackground",label:h("labels.background"),color:Qt(e,r,s=>Si(s,"backgroundColor",a).backgroundColor,!0,s=>s?null:i.currentValue),onChange:s=>o({color:s}),elements:e,appState:t,updateData:o})]})}}),vd=W({name:"changeBucketFillBackgroundColor",label:"labels.changeBackground",trackEvent:!1,perform:(e,t,o)=>({appState:{...t,...o},captureUpdate:O.EVENTUALLY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>{let{stylesPanelMode:n}=Za(r);return lo(Uu,{children:[n==="full"&&ce("h3",{"aria-hidden":"true",children:h("labels.background")}),ce(tl,{topPicks:Bm,palette:zm,excludedColors:[ho.transparent],customizableTopPicks:"bucketFill",type:"elementBackground",label:h("labels.background"),color:r.bucketFill.getBucketFillBackgroundColor(t.currentItemBackgroundColor),onChange:i=>o({currentItemBackgroundColor:i}),elements:e,appState:t,updateData:o})]})}}),aC=W({name:"changeFillStyle",label:"labels.fill",trackEvent:!1,perform:(e,t,o,r)=>(be("element","changeFillStyle",`${o} (${r.editorInterface.formFactor==="phone"?"mobile":"desktop"})`),{elements:xo(e,t,n=>Ma(n.type)?se(n,{fillStyle:o}):n),appState:{...t,currentItemFillStyle:o},captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>{let i=ie(e,t).filter(s=>Ma(s.type)),a=i.length>0&&i.every(s=>s.fillStyle==="zigzag");return lo("fieldset",{children:[ce("legend",{children:h("labels.fill")}),ce("div",{className:"buttonList",children:ce(Jo,{type:"button",options:[{value:"hachure",text:`${a?h("labels.zigzag"):h("labels.hachure")} (${z("Alt-Click")})`,icon:a?Yb:Kb,active:a?!0:void 0,testId:"fill-hachure"},{value:"cross-hatch",text:h("labels.crossHatch"),icon:Xb,testId:"fill-cross-hatch"},{value:"solid",text:h("labels.solid"),icon:$b,testId:"fill-solid"}],value:Qt(e,r,s=>s.fillStyle,s=>Ma(s.type),s=>s?null:t.currentItemFillStyle),onClick:(s,l)=>{let c=l.altKey&&s==="hachure"&&i.every(d=>d.fillStyle==="hachure")?"zigzag":s;o(c)}})})]})}}),gL=e=>Dy.find(t=>Zr(e.type,t)===e.strokeWidth)??null,fL=(e,t)=>Zr(e.type,t),sC=W({name:"changeStrokeWidth",label:"labels.strokeWidth",trackEvent:!1,perform:(e,t,o)=>(lt(o,"actionChangeStrokeWidth: value must be defined"),{elements:xo(e,t,r=>se(r,{strokeWidth:fL(r,o)})),appState:{...t,currentItemStrokeWidthKey:o},captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r,data:n})=>lo("fieldset",{children:[ce("legend",{children:h("labels.strokeWidth")}),ce("div",{className:"buttonList",children:ce(Jo,{group:"stroke-width",options:[{value:"thin",text:h("labels.thin"),icon:lu,testId:"strokeWidth-thin"},{value:"medium",text:h("labels.medium"),icon:Zb,testId:"strokeWidth-medium"},{value:"bold",text:h("labels.bold"),icon:jb,testId:"strokeWidth-bold"}],value:Qt(e,r,gL,i=>i.hasOwnProperty("strokeWidth"),i=>i?null:t.currentItemStrokeWidthKey),onChange:i=>o(i)})})]})}),lC=W({name:"changeSloppiness",label:"labels.sloppiness",trackEvent:!1,perform:(e,t,o)=>({elements:xo(e,t,r=>se(r,{seed:Mn(),roughness:o})),appState:{...t,currentItemRoughness:o},captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r,data:n})=>lo("fieldset",{children:[ce("legend",{children:h("labels.sloppiness")}),ce("div",{className:"buttonList",children:ce(Jo,{group:"sloppiness",options:[{value:0,text:h("labels.architect"),icon:Qb},{value:1,text:h("labels.artist"),icon:e1},{value:2,text:h("labels.cartoonist"),icon:t1}],value:Qt(e,r,i=>i.roughness,i=>i.hasOwnProperty("roughness"),i=>i?null:t.currentItemRoughness),onChange:i=>o(i)})})]})}),cC=W({name:"changeFreedrawMode",label:"labels.pressure",trackEvent:!1,perform:(e,t,o)=>{let r=o||"constant";return{elements:xo(e,t,n=>n.type!=="freedraw"?n:se(n,{strokeOptions:{...n.strokeOptions,variability:r}})),appState:{...t,currentItemStrokeVariability:r},captureUpdate:O.IMMEDIATELY}},PanelComponent:({elements:e,appState:t,updateData:o,app:r,data:n})=>{let i=Qt(e,r,a=>a.strokeOptions?.variability,a=>a.type==="freedraw",a=>a?null:t.currentItemStrokeVariability)??t.currentItemStrokeVariability;if(n?.cycle){let a=i==="variable";return ce(ee,{type:"button",icon:a?du:cu,title:h("labels.pressure"),"aria-label":h("labels.pressure"),onClick:()=>o(a?"constant":"variable")})}return lo("fieldset",{children:[ce("legend",{children:h("labels.pressure")}),ce("div",{className:"buttonList",children:ce(Jo,{group:"strokeOptions.variability",options:[{value:"constant",text:h("labels.pressure_constant"),icon:cu},{value:"variable",text:h("labels.pressure_variable"),icon:du}],value:i,onChange:a=>o(a)})})]})}}),vY=W({name:"changeStrokeStyle",label:"labels.strokeStyle",trackEvent:!1,perform:(e,t,o)=>({elements:xo(e,t,r=>se(r,{strokeStyle:o})),appState:{...t,currentItemStrokeStyle:o},captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r,data:n})=>lo("fieldset",{children:[ce("legend",{children:h("labels.strokeStyle")}),ce("div",{className:"buttonList",children:ce(Jo,{group:"strokeStyle",options:[{value:"solid",text:h("labels.strokeStyle_solid"),icon:lu},{value:"dashed",text:h("labels.strokeStyle_dashed"),icon:qb},{value:"dotted",text:h("labels.strokeStyle_dotted"),icon:Jb}],value:Qt(e,r,i=>i.strokeStyle,i=>i.hasOwnProperty("strokeStyle"),i=>i?null:t.currentItemStrokeStyle),onChange:i=>o(i)})})]})}),dC=W({name:"changeOpacity",label:"labels.opacity",trackEvent:!1,perform:(e,t,o)=>({elements:xo(e,t,r=>se(r,{opacity:o}),!0),appState:{...t,currentItemOpacity:o},captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,app:o,updateData:r})=>{let n=Qt(e,o,i=>i.opacity,!0,i=>i?null:t.currentItemOpacity);return ce(tC,{label:h("labels.opacity"),value:n??t.currentItemOpacity,hasCommonValue:n!==null,onChange:r,min:0,max:100,step:10,testId:"opacity"})}}),mC=W({name:"changeFontSize",label:"labels.fontSize",trackEvent:!1,perform:(e,t,o,r)=>Ox(e,t,r,()=>(lt(o,"actionChangeFontSize: Expected a font size value"),o),o),PanelComponent:({elements:e,appState:t,updateData:o,app:r,data:n})=>{let{isCompact:i}=Za(r);return lo("fieldset",{children:[ce("legend",{children:h("labels.fontSize")}),ce("div",{className:"buttonList",children:ce(Jo,{group:"font-size",options:[{value:rr.sm,text:h("labels.small"),icon:E1,testId:"fontSize-small"},{value:rr.md,text:h("labels.medium"),icon:y1,testId:"fontSize-medium"},{value:rr.lg,text:h("labels.large"),icon:v1,testId:"fontSize-large"},{value:rr.xl,text:h("labels.veryLarge"),icon:w1,testId:"fontSize-veryLarge"}],value:Qt(e,r,a=>{let s=r.scene.getNonDeletedElementsMap();if(J(a))return jo(a,s);let l=we(a,s);return l?jo(l,s):null},a=>J(a)||we(a,r.scene.getNonDeletedElementsMap())!==null,a=>a?null:t.currentItemFontSize||hi),onChange:a=>{pd(()=>o(a),i,!!t.editingTextElement,n?.onPreventClose)}})})]})}}),Bx=W({name:"decreaseFontSize",label:"labels.decreaseFontSize",icon:Oi,trackEvent:!1,perform:(e,t,o,r)=>Ox(e,t,r,n=>Math.round(1/(1+rC)*jo(n,r.scene.getNonDeletedElementsMap()))),keyTest:e=>e[S.CTRL_OR_CMD]&&e.shiftKey&&(e.key===S.CHEVRON_LEFT||e.key===S.COMMA)}),Fx=W({name:"increaseFontSize",label:"labels.increaseFontSize",icon:Oi,trackEvent:!1,perform:(e,t,o,r)=>Ox(e,t,r,n=>Math.round(jo(n,r.scene.getNonDeletedElementsMap())*(1+rC))),keyTest:e=>e[S.CTRL_OR_CMD]&&e.shiftKey&&(e.key===S.CHEVRON_RIGHT||e.key===S.PERIOD)}),pC=W({name:"changeFontFamily",label:"labels.fontFamily",trackEvent:!1,perform:(e,t,o,r)=>{let{cachedElements:n,resetAll:i,resetContainers:a,...s}=o;if(i)return{elements:xo(e,t,f=>{let x=n?.get(f.id);return x?se(f,{...x}):f},!0),appState:{...t,...s},captureUpdate:O.NEVER};lt(o,"actionChangeFontFamily: value must be defined");let{currentItemFontFamily:l,currentHoveredFontFamily:c}=o,d=O.EVENTUALLY,p,m=!1;if(l)p=l,d=O.IMMEDIATELY;else if(c){p=c,d=O.EVENTUALLY;let b=ie(e,t,{includeBoundTextElement:!0}).filter(f=>J(f));if(b.length>200)m=!0;else{let f=0,x=0;for(;f<b.length&&x<5e3;){let v=b[f];x+=v?.originalText.length||0,f++}x>5e3&&(m=!0)}}let u={appState:{...t,...s},captureUpdate:d};if(p&&!m){let b=new Map,f=new Set,x=!1,v=Array.from(Hn.loadedFontsCache.values()),y=Object.entries(pt).find(([I,A])=>A===p)?.[0];c&&y&&v.some(I=>I.startsWith(y))&&(x=!0),Object.assign(u,{elements:xo(e,t,I=>{if(J(I)&&(I.fontFamily!==p||l)){let A=se(I,{fontFamily:p,lineHeight:wo(p)}),M=n?.get(I.containerId||"")||{},N=r.scene.getContainerElement(I);return a&&N&&M&&r.scene.mutateElement(N,{...M}),x||(f=new Set([...f,...Array.from(A.originalText)])),b.set(A,N),A}return I},!0)});let E=`10px ${wa({fontFamily:p})}`,w=Array.from(f.values()).join(),C=r.props.ownerDocument??document;if(x||C.fonts.check(E,w))for(let[I,A]of b)At(I,A,r.scene);else C.fonts.load(E,w).then(I=>{for(let[A,M]of b){let N=r.scene.getElement(A.id),P=M?r.scene.getElement(M.id):null;N&&At(N,P,r.scene)}r.fonts.onLoaded(I)})}return u},PanelComponent:({elements:e,appState:t,app:o,updateData:r})=>{let n=Rx(new Map),i=Rx(null),[a,s]=uL({}),l=Rx(!0),{stylesPanelMode:c,isCompact:d}=Za(o),p=Nx(()=>{let m=(u,b)=>Qt(u,o,f=>{if(J(f))return f.fontFamily;let x=we(f,b);return x?x.fontFamily:null},f=>J(f)||we(f,b)!==null,f=>f?null:t.currentItemFontFamily||bs);return a.openPopup==="fontFamily"&&t.openPopup==="fontFamily"?m(Array.from(n.current?.values()??[]),n.current):!a.openPopup&&t.openPopup!=="fontFamily"?m(e,o.scene.getNonDeletedElementsMap()):i.current},[a.openPopup,t,e,o]);return Dx(()=>{i.current=p},[p]),Dx(()=>{Object.keys(a).length&&(r(a),s({}))},[a]),Dx(()=>(l.current=!1,()=>{l.current=!0}),[]),lo(Uu,{children:[c==="full"&&ce("legend",{children:h("labels.fontFamily")}),ce($T,{isOpened:t.openPopup==="fontFamily",selectedFontFamily:p,hoveredFontFamily:t.currentHoveredFontFamily,compactMode:c!=="full",onSelect:m=>{pd(()=>{s({openPopup:null,currentHoveredFontFamily:null,currentItemFontFamily:m}),n.current.clear()},d,!!t.editingTextElement)},onHover:m=>{s({currentHoveredFontFamily:m,cachedElements:new Map(n.current),resetContainers:!0})},onLeave:()=>{s({currentHoveredFontFamily:null,cachedElements:new Map(n.current),resetAll:!0})},onPopupChange:m=>{if(m){n.current.clear();let{editingTextElement:u}=t;if(u?.type==="text"){let b=o.scene.getElement(u.id);n.current.set(u.id,se(b||u,{},!0))}else{let b=ie(e,t,{includeBoundTextElement:!0});for(let f of b)n.current.set(f.id,se(f,{},!0))}s({...a,openPopup:"fontFamily"})}else{let u={currentHoveredFontFamily:null,cachedElements:new Map(n.current),resetAll:!0};s({...u}),n.current.clear(),d&&t.editingTextElement&&md(null,o.ownerDocument)}}})]})}}),uC=W({name:"changeTextAlign",label:"Change text alignment",trackEvent:!1,perform:(e,t,o,r)=>({elements:xo(e,t,n=>{if(J(n)){let i=se(n,{textAlign:o});return At(i,r.scene.getContainerElement(n),r.scene),i}return n},!0),appState:{...t,currentItemTextAlign:o},captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r,data:n})=>{let i=r.scene.getNonDeletedElementsMap(),{isCompact:a}=Za(r);return lo("fieldset",{children:[ce("legend",{children:h("labels.textAlign")}),ce("div",{className:"buttonList",children:ce(Jo,{group:"text-align",options:[{value:"left",text:h("labels.left"),icon:C1,testId:"align-left"},{value:"center",text:h("labels.center"),icon:S1,testId:"align-horizontal-center"},{value:"right",text:h("labels.right"),icon:I1,testId:"align-right"}],value:Qt(e,r,s=>{if(J(s))return s.textAlign;let l=we(s,i);return l?l.textAlign:null},s=>J(s)||we(s,i)!==null,s=>s?null:t.currentItemTextAlign),onChange:s=>{pd(()=>o(s),a,!!t.editingTextElement,n?.onPreventClose)}})})]})}}),hC=W({name:"changeVerticalAlign",label:"Change vertical alignment",trackEvent:{category:"element"},perform:(e,t,o,r)=>({elements:xo(e,t,n=>{if(J(n)){let i=se(n,{verticalAlign:o});return At(i,r.scene.getContainerElement(n),r.scene),i}return n},!0),appState:{...t},captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r,data:n})=>{let{isCompact:i}=Za(r);return ce("fieldset",{children:ce("div",{className:"buttonList",children:ce(Jo,{group:"text-align",options:[{value:nr.TOP,text:h("labels.alignTop"),icon:ce(k1,{theme:t.theme}),testId:"align-top"},{value:nr.MIDDLE,text:h("labels.centerVertically"),icon:ce(A1,{theme:t.theme}),testId:"align-middle"},{value:nr.BOTTOM,text:h("labels.alignBottom"),icon:ce(M1,{theme:t.theme}),testId:"align-bottom"}],value:Qt(e,r,a=>{if(J(a)&&a.containerId)return a.verticalAlign;let s=we(a,r.scene.getNonDeletedElementsMap());return s?s.verticalAlign:null},a=>J(a)||we(a,r.scene.getNonDeletedElementsMap())!==null,a=>a?null:nr.MIDDLE),onChange:a=>{pd(()=>o(a),i,!!t.editingTextElement,n?.onPreventClose)}})})})}}),wY=W({name:"changeRoundness",label:"Change edge roundness",trackEvent:!1,perform:(e,t,o)=>({elements:xo(e,t,r=>He(r)?r:se(r,{roundness:o==="round"?{type:Ci(r.type)?Pt.ADAPTIVE_RADIUS:Pt.PROPORTIONAL_RADIUS}:null})),appState:{...t,currentItemRoundness:o},captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r,renderAction:n})=>{let a=As(me(e),t).some(s=>s.roundness?.type===Pt.LEGACY);return lo("fieldset",{children:[ce("legend",{children:h("labels.edges")}),lo("div",{className:"buttonList",children:[ce(Jo,{group:"edges",options:[{value:"sharp",text:h("labels.sharp"),icon:o1},{value:"round",text:h("labels.round"),icon:r1}],value:Qt(e,r,s=>a?null:s.roundness?"round":"sharp",s=>!Ee(s)&&s.hasOwnProperty("roundness"),s=>s?null:t.currentItemRoundness),onChange:s=>o(s)}),n("togglePolygon")]})]})}}),oC=e=>({visibleSections:[{name:"default",options:[{value:null,text:h("labels.arrowhead_none"),keyBinding:"q",icon:ce(n1,{flip:e})},{value:"arrow",text:h("labels.arrowhead_arrow"),keyBinding:"w",icon:ce(i1,{flip:e})},{value:"triangle",text:h("labels.arrowhead_triangle"),icon:ce(a1,{flip:e}),keyBinding:"e"},{value:"triangle_outline",text:h("labels.arrowhead_triangle_outline"),icon:ce(s1,{flip:e}),keyBinding:"r"}]}],hiddenSections:[{name:"default",options:[{value:"circle",text:h("labels.arrowhead_circle"),keyBinding:"a",icon:ce(l1,{flip:e})},{value:"circle_outline",text:h("labels.arrowhead_circle_outline"),keyBinding:"s",icon:ce(c1,{flip:e})},{value:"diamond",text:h("labels.arrowhead_diamond"),icon:ce(d1,{flip:e}),keyBinding:"d"},{value:"diamond_outline",text:h("labels.arrowhead_diamond_outline"),icon:ce(m1,{flip:e}),keyBinding:"f"},{value:"bar",text:h("labels.arrowhead_bar"),keyBinding:"z",icon:ce(p1,{flip:e})}]},{name:h("labels.cardinality"),options:[{value:"cardinality_one",text:h("labels.arrowhead_cardinality_one"),icon:ce(u1,{flip:e}),keyBinding:"x"},{value:"cardinality_many",text:h("labels.arrowhead_cardinality_many"),icon:ce(h1,{flip:e}),keyBinding:"c"},{value:"cardinality_one_or_many",text:h("labels.arrowhead_cardinality_one_or_many"),icon:ce(g1,{flip:e}),keyBinding:"v"},{value:"cardinality_exactly_one",text:h("labels.arrowhead_cardinality_exactly_one"),icon:ce(f1,{flip:e}),keyBinding:null},{value:"cardinality_zero_or_one",text:h("labels.arrowhead_cardinality_zero_or_one"),icon:ce(b1,{flip:e}),keyBinding:null},{value:"cardinality_zero_or_many",text:h("labels.arrowhead_cardinality_zero_or_many"),icon:ce(x1,{flip:e}),keyBinding:null}]}]}),TY=W({name:"changeArrowhead",label:"Change arrowheads",trackEvent:!1,perform:(e,t,o)=>(lt(o,"actionChangeArrowhead: value must be defined"),{elements:xo(e,t,r=>{if(Me(r)){let{position:n,type:i}=o;if(n==="start")return se(r,{startArrowhead:i});if(n==="end")return se(r,{endArrowhead:i})}return r}),appState:{...t,[o.position==="start"?"currentItemStartArrowhead":"currentItemEndArrowhead"]:o.type},captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>{let n=sn().rtl,i=Nx(()=>oC(!n),[n]),a=Nx(()=>oC(!!n),[n]);return lo("fieldset",{children:[ce("legend",{children:h("labels.arrowheads")}),lo("div",{className:"iconSelectList buttonList",children:[ce(_x,{visibleSections:i.visibleSections,hiddenSections:i.hiddenSections,label:"arrowhead_start",value:Qt(e,r,s=>Me(s)&&Ac(s.type)?ib(s.startArrowhead):t.currentItemStartArrowhead,!0,s=>s?null:t.currentItemStartArrowhead),onChange:s=>o({position:"start",type:s})}),ce(_x,{visibleSections:a.visibleSections,hiddenSections:a.hiddenSections,label:"arrowhead_end",value:Qt(e,r,s=>Me(s)&&Ac(s.type)?ib(s.endArrowhead):t.currentItemEndArrowhead,!0,s=>s?null:t.currentItemEndArrowhead),onChange:s=>o({position:"end",type:s})})]})]})}}),gC=W({name:"changeArrowProperties",label:"Change arrow properties",trackEvent:!1,perform:(e,t,o,r)=>!1,PanelComponent:({elements:e,appState:t,updateData:o,app:r,renderAction:n})=>lo("div",{className:"selected-shape-actions",children:[n("changeArrowhead"),n("changeArrowType")]})}),CY=W({name:"changeArrowType",label:"Change arrow types",trackEvent:!1,perform:(e,t,o,r)=>{let n=xo(e,t,s=>{if(!Ee(s))return s;let l=r.scene.getNonDeletedElementsMap(),c=j.getPointAtIndexGlobalCoordinates(s,0,l),d=j.getPointAtIndexGlobalCoordinates(s,-1,l),p=se(s,{x:o===Et.elbow?c[0]:s.x,y:o===Et.elbow?c[1]:s.y,roundness:o===Et.round?{type:Pt.PROPORTIONAL_RADIUS}:null,elbowed:o===Et.elbow,angle:o===Et.elbow?0:s.angle,points:o===Et.elbow||s.elbowed?[j.pointFromAbsoluteCoords({...s,x:c[0],y:c[1],angle:0},c,l),j.pointFromAbsoluteCoords({...s,x:c[0],y:c[1],angle:0},d,l)]:s.points});if(He(p)){p.fixedSegments=null;let m=r.scene.getNonDeletedElementsMap();r.dismissLinearEditor();let u=j.getPointAtIndexGlobalCoordinates(p,0,m),b=j.getPointAtIndexGlobalCoordinates(p,-1,m),f=p.startBinding&&m.get(p.startBinding.elementId),x=p.endBinding&&m.get(p.endBinding.elementId),v=f&&p.startBinding?{...p.startBinding,...zf(p,f,"start",m,t.isBindingEnabled)}:null,y=x&&p.endBinding?{...p.endBinding,...zf(p,x,"end",m,t.isBindingEnabled)}:null;p={...p,startBinding:v,endBinding:y,...Jm(p,m,{points:[u,b].map(E=>_(E[0]-p.x,E[1]-p.y)),startBinding:v,endBinding:y,fixedSegments:null})}}else{let m=r.scene.getNonDeletedElementsMap();if(p.startBinding){let u=m.get(p.startBinding.elementId);u&&Rc(p,u,t.bindMode==="inside"?"inside":"orbit","start",r.scene)}if(p.endBinding){let u=m.get(p.endBinding.elementId);u&&Rc(p,u,t.bindMode==="inside"?"inside":"orbit","end",r.scene)}}return p}),i={...t,currentItemArrowType:o},a=t.selectedLinearElement?.elementId;if(a){let s=n.find(l=>l.id===a);s&&(i.selectedLinearElement=new j(s,te(e)))}return{elements:n,appState:i,captureUpdate:O.IMMEDIATELY}},PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>lo("fieldset",{children:[ce("legend",{children:h("labels.arrowtypes")}),ce("div",{className:"buttonList",children:ce(Jo,{group:"arrowtypes",options:[{value:Et.sharp,text:h("labels.arrowtype_sharp"),icon:Kn,testId:"sharp-arrow"},{value:Et.round,text:h("labels.arrowtype_round"),icon:$n,testId:"round-arrow"},{value:Et.elbow,text:h("labels.arrowtype_elbowed"),icon:Xn,testId:"elbow-arrow"}],value:Qt(e,r,n=>Ee(n)?n.elbowed?Et.elbow:n.roundness?Et.round:Et.sharp:null,n=>Ee(n),n=>n?null:t.currentItemArrowType),onChange:n=>o(n)})})]})});import{useEffect as bL}from"react";import{jsx as EL}from"react/jsx-runtime";var rl=()=>{let e=document.querySelector(".excalidraw-tooltip");if(e)return e;let t=document.createElement("div");return document.body.appendChild(t),t.classList.add("excalidraw-tooltip"),t},zx=(e,t,o="bottom")=>{let r=e.getBoundingClientRect(),n=window.innerWidth,i=window.innerHeight,a=5,s=t.left+t.width/2-r.width/2;s<0?s=a:s+r.width>=n&&(s=n-r.width-a);let l;o==="bottom"?(l=t.top+t.height+a,l+r.height>=i&&(l=t.top-r.height-a)):(l=t.top-r.height-a,l<0&&(l=t.top+t.height+a)),Object.assign(e.style,{top:`${l}px`,left:`${s}px`})},xL=(e,t,o,r)=>{t.classList.add("excalidraw-tooltip--visible"),t.style.minWidth=r?"50ch":"10ch",t.style.maxWidth=r?"50ch":"15ch",t.textContent=o;let n=e.getBoundingClientRect();zx(t,n)},Mo=({children:e,label:t,long:o=!1,style:r,disabled:n})=>(bL(()=>()=>rl().classList.remove("excalidraw-tooltip--visible"),[]),n?null:EL("div",{className:"excalidraw-tooltip-wrapper",onPointerEnter:i=>xL(i.currentTarget,rl(),t,o),onPointerLeave:()=>rl().classList.remove("excalidraw-tooltip--visible"),style:r,children:e}));import{useEffect as fC,useRef as bC,useState as yL}from"react";var vL=(e,t)=>typeof t=="function"?t(e):Array.isArray(t)?e:e[t],Gu=(e,t,o)=>{if(e?.isDestroyed)return;let r=e?.getAppState();if(!r){if(!o)return;console.warn("useAppStateValue: excalidrawAPI not defined yet for internal component while it should always be defined. Are you sure you're rendering inside of <Excalidraw/> component tree?"),r=Object.assign({width:0,height:0,offsetLeft:0,offsetTop:0,scrollConstraints:null},Un())}return vL(r,t)};function nl(e,t=!0){let o=Wu(),[,r]=yL(0),n=bC(null);return n.current||(n.current={selector:e,isInitialized:!!o,latestValue:Gu(o,e,t)}),n.current.selector=e,!n.current.isInitialized&&o&&!o.isDestroyed&&(n.current.isInitialized=!0,n.current.latestValue=Gu(o,e,t)),fC(()=>{let i=n.current;if(!o||o.isDestroyed||!i)return;let a=Gu(o,i.selector,t);return a!==i.latestValue&&(i.latestValue=a,r(s=>s+1)),o.onStateChange(i.selector,s=>{i.latestValue=s,r(l=>l+1)})},[o,t]),n.current.latestValue}function wL(e,t){let o=Wu(),r=bC({selector:e,callback:t});r.current.selector=e,r.current.callback=t,fC(()=>{if(!(!o||o.isDestroyed))return r.current.callback(Gu(o,r.current.selector,!0),o.getAppState()),o.onStateChange(r.current.selector,(n,i)=>{r.current.callback(n,i)})},[o])}import{jsx as Vu,jsxs as TL}from"react/jsx-runtime";var xC=W({name:"changeViewBackgroundColor",label:"labels.canvasBackground",trackEvent:!1,predicate:(e,t,o,r)=>!!r.props.UIOptions.canvasActions.changeViewBackgroundColor&&!t.viewModeEnabled,perform:(e,t,o)=>({appState:{...t,...o},captureUpdate:o?.viewBackgroundColor?O.IMMEDIATELY:O.EVENTUALLY}),PanelComponent:({elements:e,appState:t,updateData:o,appProps:r,data:n})=>Vu(tl,{palette:null,topPicks:Fm,label:h("labels.canvasBackground"),type:"canvasBackground",color:t.viewBackgroundColor,onChange:i=>o({viewBackgroundColor:i}),"data-testid":"canvas-background-picker",elements:e,appState:t,updateData:o})}),pn=W({name:"clearCanvas",label:"labels.clearCanvas",icon:Jt,trackEvent:{category:"canvas"},predicate:(e,t,o,r)=>!!r.props.UIOptions.canvasActions.clearCanvas&&!t.viewModeEnabled&&t.openDialog?.name!=="elementLinkSelector",perform:(e,t,o,r)=>(r.imageCache.clear(),{elements:e.map(n=>se(n,{isDeleted:!0})),appState:{...Un(),files:{},theme:t.theme,penMode:t.penMode,penDetected:t.penDetected,exportBackground:t.exportBackground,exportEmbedScene:t.exportEmbedScene,gridSize:t.gridSize,gridStep:t.gridStep,gridModeEnabled:t.gridModeEnabled,stats:t.stats,colorTopPicks:t.colorTopPicks,activeTool:t.activeTool.type==="image"?{...t.activeTool,type:r.state.preferredSelectionTool.type}:t.activeTool},captureUpdate:O.IMMEDIATELY})}),wd=W({name:"zoomIn",label:"buttons.zoomIn",viewMode:!0,navigation:!0,icon:Vp,trackEvent:{category:"canvas"},predicate:(e,t,o,r)=>r.isNavigationEnabled(),perform:(e,t,o,r)=>(r.requestUnfollow(),{appState:{...t,...Fn({viewportX:t.width/2+t.offsetLeft,viewportY:t.height/2+t.offsetTop,nextZoom:zn(t.zoom.value+hc)},t)},captureUpdate:O.EVENTUALLY}),PanelComponent:({updateData:e})=>{let t=nl(o=>o.zoom.value);return Vu(ee,{type:"button",className:"zoom-in-button zoom-button",icon:Vp,title:`${h("buttons.zoomIn")} \u2014 ${z("CtrlOrCmd++")}`,"aria-label":h("buttons.zoomIn"),disabled:t>=Ly,onClick:()=>{e(null)}})},keyTest:e=>(e.code===ge.EQUAL||e.code===ge.NUM_ADD)&&(e[S.CTRL_OR_CMD]||e.shiftKey)}),Td=W({name:"zoomOut",label:"buttons.zoomOut",icon:Yp,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,t,o,r)=>r.isNavigationEnabled(),perform:(e,t,o,r)=>(r.requestUnfollow(),{appState:{...t,...Fn({viewportX:t.width/2+t.offsetLeft,viewportY:t.height/2+t.offsetTop,nextZoom:zn(t.zoom.value-hc)},t)},captureUpdate:O.EVENTUALLY}),PanelComponent:({updateData:e})=>{let t=nl(o=>o.zoom.value);return Vu(ee,{type:"button",className:"zoom-out-button zoom-button",icon:Yp,title:`${h("buttons.zoomOut")} \u2014 ${z("CtrlOrCmd+-")}`,"aria-label":h("buttons.zoomOut"),disabled:t<=Lm,onClick:()=>{e(null)}})},keyTest:e=>(e.code===ge.MINUS||e.code===ge.NUM_SUBTRACT)&&(e[S.CTRL_OR_CMD]||e.shiftKey)}),Cd=W({name:"resetZoom",label:"buttons.resetZoom",icon:Lb,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,t,o,r)=>r.isNavigationEnabled(),perform:(e,t,o,r)=>{r.requestUnfollow();let n=t.scrollConstraints?.lockZoom?t.scrollConstraints.zoom:1;return{appState:{...t,...Fn({viewportX:t.width/2+t.offsetLeft,viewportY:t.height/2+t.offsetTop,nextZoom:zn(n)},t)},captureUpdate:O.EVENTUALLY}},PanelComponent:({updateData:e})=>{let t=nl(o=>o.zoom.value);return Vu(Mo,{label:h("buttons.resetZoom"),style:{height:"100%"},children:TL(ee,{type:"button",className:"reset-zoom-button zoom-button",title:h("buttons.resetZoom"),"aria-label":h("buttons.resetZoom"),onClick:()=>{e(null)},children:[(t*100).toFixed(0),"%"]})})},keyTest:e=>(e.code===ge.ZERO||e.code===ge.NUM_ZERO)&&(e[S.CTRL_OR_CMD]||e.shiftKey)}),Hx=e=>[e.x,e.y,e.x+e.width,e.y+e.height],rK=W({name:"zoomToFitSelectionInViewport",label:"labels.zoomToFitViewport",icon:sd,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,t,o,r)=>r.isNavigationEnabled(),perform:(e,t,o,r)=>{r.requestUnfollow();let n=r.scene.getSelectedElements(t),i=n.length?Te(me(n)):t.scrollConstraints?Hx(t.scrollConstraints):Te(me(e)),a=Oa({bounds:i,appState:t,fit:"scale-down",canvasOffsets:r.viewport.getOffsets()});return{...a,appState:{...a.appState,...on(a.appState)}}},keyTest:e=>e.code===ge.TWO&&e.shiftKey&&!e.altKey&&!e[S.CTRL_OR_CMD]}),nK=W({name:"zoomToFitSelection",label:"helpDialog.zoomToSelection",icon:sd,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,t,o,r)=>r.isNavigationEnabled(),perform:(e,t,o,r)=>{r.requestUnfollow();let n=r.scene.getSelectedElements(t),i=n.length?Te(me(n)):t.scrollConstraints?Hx(t.scrollConstraints):Te(me(e)),a=Oa({bounds:i,appState:t,fit:"contain",canvasOffsets:r.viewport.getOffsets()});return{...a,appState:{...a.appState,...on(a.appState)}}},keyTest:e=>e.code===ge.THREE&&e.shiftKey&&!e.altKey&&!e[S.CTRL_OR_CMD]}),EC=W({name:"zoomToFit",label:"helpDialog.zoomToFit",icon:sd,viewMode:!0,navigation:!0,trackEvent:{category:"canvas"},predicate:(e,t,o,r)=>r.isNavigationEnabled(),perform:(e,t,o,r)=>{r.requestUnfollow();let n=t.scrollConstraints?Hx(t.scrollConstraints):Te(me(e)),i=Oa({bounds:n,appState:t,fit:"scale-down",canvasOffsets:r.viewport.getOffsets()});return{...i,appState:{...i.appState,...on(i.appState)}}},keyTest:e=>e.code===ge.ONE&&e.shiftKey&&!e.altKey&&!e[S.CTRL_OR_CMD]}),Qn=W({name:"toggleTheme",label:(e,t)=>t.theme===Q.DARK?"buttons.lightMode":"buttons.darkMode",keywords:["toggle","dark","light","mode","theme"],icon:(e,t)=>e.theme===Q.LIGHT?Vs:Ys,viewMode:!0,trackEvent:{category:"canvas"},perform:(e,t,o,r)=>{let n=o||(t.theme===Q.LIGHT?Q.DARK:Q.LIGHT);return r.props.onThemeChange?(r.props.onThemeChange(n),!1):{appState:{...t,theme:n},captureUpdate:O.EVENTUALLY}},keyTest:e=>!e[S.CTRL_OR_CMD]&&e.altKey&&e.shiftKey&&e.code===ge.D,predicate:(e,t,o,r)=>!!r.props.UIOptions.canvasActions.toggleTheme});import kL from"clsx";import{useEffect as ML,useState as AL}from"react";import{useEffect as CL,useState as SL}from"react";import yC from"clsx";import{Popover as Ux}from"radix-ui";import{jsx as Yu,jsxs as IL}from"react/jsx-runtime";var il=({app:e,options:t,activeTool:o,defaultOption:r,"data-testid":n,onToolChange:i,displayedOption:a})=>{let[s,l]=SL(!1),c=o.type,d=a.type===c,p=16,{container:m}=tt();return!t.some(u=>u.type===c)&&s&&l(!1),CL(()=>{let u=e.onPointerDownEmitter.on(()=>{l(!1)});return()=>u?.()},[e]),IL(Ux.Root,{open:s,children:[Yu(Ux.Trigger,{asChild:!0,children:Yu(ee,{className:yC({fillable:a.fillable}),type:"toggle",icon:a.icon,checked:d,disabled:t.every(u=>Mt(e,u.type)),title:jt(a.title),"aria-label":jt(a.title),"data-testid":n,onSelect:()=>{l(u=>!u),i(r)}})}),Yu(Ux.Content,{className:"tool-popover-content",sideOffset:p,collisionBoundary:m??void 0,children:t.map(({type:u,icon:b,title:f,fillable:x})=>Yu(ee,{className:yC({fillable:x}),type:"toggle",icon:b,checked:c===u,disabled:Mt(e,u),title:jt(u),"aria-label":jt(u),"data-testid":`toolbar-${u}`,onSelect:()=>{e.state.activeTool.type!==u&&(be("toolbar",u,"ui"),e.setActiveTool({type:u}),i?.(u))}},u))})]})};import{jsx as Gx}from"react/jsx-runtime";var LL=e=>e,St=LL({hand:{icon:_1,letterKey:S.H,toggle:!0},selection:{icon:Sb,letterKey:S.V,numericKey:S[1],fillable:!0},rectangle:{icon:qc,letterKey:S.R,numericKey:S[2],fillable:!0},diamond:{icon:Jc,letterKey:S.D,numericKey:S[3],fillable:!0},ellipse:{icon:Qc,letterKey:S.O,numericKey:S[4],fillable:!0},arrow:{icon:Ib,letterKey:S.A,numericKey:S[5],fillable:!0},line:{icon:Ha,letterKey:S.L,numericKey:S[6],fillable:!0},freedraw:{icon:Gn,letterKey:[S.P,S.X],numericKey:S[7]},text:{icon:ln,letterKey:S.T,numericKey:S[8]},stickynote:{icon:$s,letterKey:S.N},image:{icon:Wn,numericKey:S[9]},eraser:{icon:Ab,letterKey:S.E,numericKey:S[0],toggle:!0},frame:{icon:Br,letterKey:S.F},autoshape:{icon:Bi,letterKey:S.X,shiftKey:!0,fillable:!1},embeddable:{icon:Vn},laser:{icon:Fr,letterKey:S.K},bucketfill:{icon:Co,letterKey:S.B},lasso:{icon:Gs,fillable:!1}}),al=Object.keys(St).filter(e=>St[e].toggle),Ku=e=>{let{letterKey:t,shiftKey:o}=St[e];if(!t)return t;let r=jt(typeof t=="string"?t:t[0]);return o?z(`Shift+${r}`):r},Sd=e=>{let t=Ku(e),{numericKey:o}=St[e];return t&&o!=null?`${t} ${h("helpDialog.or")} ${o}`:`${t||o}`},vC=(e,t,o=!1)=>{let r=e.toLowerCase();for(let n of Object.keys(St)){let{letterKey:i,numericKey:a,shiftKey:s}=St[n];if(o===!!s&&(a!=null&&e===a||i&&(typeof i=="string"?i===r:i.includes(r))))return n==="selection"?t.state.preferredSelectionTool.type:n}return null},Mt=(e,t)=>e.props.activeTool!=null&&e.props.activeTool.type!==t,Uo=(e,t)=>{let o=St[e],r=t?.shortcutType??e,n=({app:i,activeTool:a,hideKeyBinding:s,hideShortcut:l})=>{let c=jt(h(`toolBar.${e}`)),d=l?null:Sd(r);return Gx(ee,{className:kL({fillable:o.fillable}),type:"toggle",icon:o.icon,checked:a.type===e,disabled:Mt(i,e),title:d?`${c} \u2014 ${d}`:c,keyBindingLabel:s||l?void 0:Ku(r)||St[r].numericKey,"aria-label":c,"aria-keyshortcuts":d??void 0,"data-testid":`toolbar-${e}`,onPointerDown:p=>{i.toolDrag.handleButtonPointerDown(e,p.nativeEvent)},onSelect:({pointerType:p})=>{if(!i.state.penDetected&&p==="pen"&&i.togglePenMode(!0),t?.onSelect){t.onSelect(i,{pointerType:p});return}i.state.activeTool.type!==e&&(be("toolbar",e,"ui"),i.setActiveTool({type:e}))}})};return n.displayName=`${jt(e)}IconButton`,n},Xu=Uo("hand"),wC=Uo("rectangle"),TC=Uo("diamond"),CC=Uo("ellipse"),SC=Uo("arrow"),IC=Uo("line"),kC=Uo("freedraw"),$u=Uo("text"),MC=Uo("stickynote"),AC=Uo("image"),Zu=Uo("eraser"),LC=Uo("frame"),_C=Uo("selection",{onSelect:(e,{pointerType:t})=>{if(e.state.activeTool.type==="selection"&&t!==null){e.setActiveTool({type:"lasso"});return}e.state.activeTool.type!=="selection"&&(be("toolbar","selection","ui"),e.setActiveTool({type:"selection"}))}}),PC=Uo("lasso",{shortcutType:"selection"}),ju=({app:e,activeTool:t,setAppState:o})=>{let r=[{type:"selection",icon:St.selection.icon,fillable:St.selection.fillable,title:jt(h("toolBar.selection"))},{type:"lasso",icon:St.lasso.icon,fillable:St.lasso.fillable,title:jt(h("toolBar.lasso"))}],n=r.find(i=>i.type===e.state.preferredSelectionTool.type)||r[0];return Gx(il,{app:e,options:r,activeTool:t,defaultOption:e.state.preferredSelectionTool.type,"data-testid":"toolbar-selection",onToolChange:i=>{(i==="selection"||i==="lasso")&&(e.setActiveTool({type:i}),o({preferredSelectionTool:{type:i,initialized:!0}}))},displayedOption:n})},qu=({app:e,activeTool:t})=>{let o=[{type:"freedraw",icon:St.freedraw.icon,fillable:St.freedraw.fillable,title:jt(h("toolBar.freedraw"))},{type:"autoshape",icon:St.autoshape.icon,fillable:St.autoshape.fillable,title:jt(h("toolBar.autoshape"))}],[r,n]=AL(t.type==="autoshape"?"autoshape":"freedraw");ML(()=>{(t.type==="freedraw"||t.type==="autoshape")&&n(t.type)},[t.type]);let i=o.find(a=>a.type===r)||o[0];return Gx(il,{app:e,options:o,activeTool:t,defaultOption:r,"data-testid":"toolbar-freedraw",onToolChange:a=>{(a==="freedraw"||a==="autoshape")&&(n(a),e.setActiveTool({type:a}))},displayedOption:i})};import{jsx as _L}from"react/jsx-runtime";var Xt=W({name:"finalize",label:"",trackEvent:!1,perform:(e,t,o,r)=>{let n=!0,i=e,{focusContainer:a,scene:s}=r,l=s.getNonDeletedElementsMap(),c=t.activeTool.type==="autoshape";if(o&&t.selectedLinearElement){let{event:x,sceneCoords:v}=o,y=j.getElement(t.selectedLinearElement.elementId,l);lt(y,"Arrow element should exist if selectedLinearElement is set"),lt(v,"sceneCoords should be defined if actionFinalize is called with event");let E=j.handlePointerUp(x,t.selectedLinearElement,t,r.scene);if(Vt(y)&&!t.selectedLinearElement.segmentMidPointHoveredCoords&&!o.hitBoundText){let w=!!t.newElement,C=w||!t.selectedLinearElement.selectedPointsIndices?[y.points.length-1]:t.selectedLinearElement.selectedPointsIndices,I=yi(x),A=x[S.CTRL_OR_CMD]?null:r.getEffectiveGridSize(),M=C.reduce((N,P)=>(N.set(P,{point:I?y.points[P]:j.createPointAt(y,l,v.x-E.pointerOffset.x,v.y-E.pointerOffset.y,A)}),N),new Map)??new Map;Pc(y,M,v.x,v.y,s,t,{newArrow:w,altKey:x.altKey,angleLocked:I,gridSize:r.getEffectiveGridSize()})}else ct(y)&&t.selectedLinearElement?.isEditing&&!t.newElement&&!Nf(y.points)&&s.mutateElement(y,{polygon:!1});if(E!==t.selectedLinearElement){y&&tn(y)&&(i=i.map(C=>C.id===y.id?se(C,{isDeleted:!0}):C));let w=t.activeTool?.locked;return{elements:y.points.length<2||tn(y)?e.map(C=>C.id===y.id?se(C,{isDeleted:!0}):C):i,appState:{...t,cursorButton:"up",selectedElementIds:c?{}:t.selectedElementIds,selectedLinearElement:w||c?null:{...E,selectedPointsIndices:null,isEditing:!1,initialState:{...E.initialState,lastClickedPoint:-1},pointerOffset:{x:0,y:0}},selectionElement:null,suggestedBinding:null,hoveredArrowTextAnchor:null,newElement:null,multiElement:null},captureUpdate:O.IMMEDIATELY}}}a();let d=r.drawShape.hasPendingGesture();(d||c)&&(r.drawShape.finalize(),d&&(i=r.scene.getElementsIncludingDeleted()));let p=null;if(t.multiElement)p=t.multiElement;else if(!c&&!d&&(t.newElement?.type==="freedraw"||Vt(t.newElement)))p=t.newElement;else if(Object.keys(t.selectedElementIds).length===1){let x=l.get(Object.keys(t.selectedElementIds)[0]);x&&(p=x)}if(p){if(t.selectedLinearElement&&t.multiElement&&p.type!=="freedraw"&&t.lastPointerDownWith!=="touch"){let{points:x}=p,{lastCommittedPoint:v}=t.selectedLinearElement;if((!v||x[x.length-1]!==v)&&(n=!1,s.mutateElement(p,{points:p.points.slice(0,-1)}),Vt(p)&&p.endBinding&&p.points.length>1)){let y=!!t.newElement,E=new Map([[p.points.length-1,{point:p.points[p.points.length-1],isDragging:!1}]]),w=j.getPointAtIndexGlobalCoordinates(p,-1,l);Pc(p,E,w[0],w[1],s,t,{newArrow:y})}}if(p&&tn(p)&&(i=i.map(x=>x.id===p?.id?se(x,{isDeleted:!0}):x)),Me(p)||Cs(p)){if(Mc(p.points,t.zoom.value)&&(ct(p)||Cs(p))){let v=p.points,y=v[0],E=v.map((w,C)=>C===v.length-1?_(y[0],y[1]):w);ct(p)?s.mutateElement(p,{points:E,polygon:!0}):s.mutateElement(p,{points:E})}ct(p)&&!Nf(p.points)&&s.mutateElement(p,{polygon:!1})}}let m;al.includes(t.activeTool.type)?m=ht(t,{...t.activeTool.lastActiveTool||{type:r.state.preferredSelectionTool.type},lastActiveTool:null}):m=ht(t,{type:r.state.preferredSelectionTool.type});let u=r.isToolLocked(),b=t.activeTool.type==="autoshape"||(u||t.activeTool.type==="freedraw")&&!!p;b||r.cursor.applyForTool(m);let f=p&&Me(p)?new j(p,te(i)):t.selectedLinearElement;return f=f&&{...f,isEditing:t.newElement?!1:f.isEditing,initialState:{...f.initialState,lastClickedPoint:-1,origin:null}},{elements:i,appState:{...t,cursorButton:"up",activeTool:b?t.activeTool:m,activeEmbeddable:null,newElement:null,selectionElement:null,multiElement:null,editingTextElement:null,suggestedBinding:null,hoveredArrowTextAnchor:null,frameToHighlight:null,selectedElementIds:c?{}:p&&!u&&t.activeTool.type!=="freedraw"?{...t.selectedElementIds,[p.id]:!0}:t.selectedElementIds,selectedLinearElement:c?null:f},captureUpdate:n?O.IMMEDIATELY:O.NEVER}},keyTest:(e,t)=>e.key===S.ESCAPE&&t.selectedLinearElement?.isEditing||(e.key===S.ESCAPE||e.key===S.ENTER)&&t.multiElement!==null,PanelComponent:({appState:e,updateData:t,data:o})=>_L(ee,{type:"button",icon:zb,title:h("buttons.done"),"aria-label":h("buttons.done"),onClick:t,visible:e.multiElement!=null,size:o?.size||"medium",style:{pointerEvents:"all"}})});var PL=(e,t)=>al.includes(e.activeTool.type)?ht(e,{...e.activeTool.lastActiveTool||{type:t.state.preferredSelectionTool.type},lastActiveTool:null}):ht(e,{type:t.state.preferredSelectionTool.type}),DL=(e,t,o)=>{if(!e.editingGroupId)return null;let r=t.scene.getNonDeletedElements(),n=t.scene.getSelectedElements({selectedElementIds:o,elements:r}),i=n.length?n:Ye(r,e.editingGroupId);for(let a of i){let s=a.groupIds.indexOf(e.editingGroupId);if(s!==-1&&a.groupIds[s+1])return a.groupIds[s+1]}return null},DC=W({name:"deselect",label:"",trackEvent:!1,perform:(e,t,o,r)=>{let n=PL(t,r);if(r.cursor.applyForTool(n),t.editingGroupId){let i=r.scene.getNonDeletedElements(),a=Object.keys(t.selectedElementIds).length>0?t.selectedElementIds:Ye(i,t.editingGroupId).reduce((s,l)=>(s[l.id]=!0,s),{});return{appState:{...t,...Lt({editingGroupId:DL(t,r,a),selectedElementIds:a},i,t,r),activeEmbeddable:null,activeTool:n,selectedLinearElement:null,selectionElement:null,showHyperlinkPopup:!1,suggestedBinding:null,hoveredArrowTextAnchor:null,frameToHighlight:null},captureUpdate:O.IMMEDIATELY}}return{appState:{...t,activeEmbeddable:null,activeTool:n,editingGroupId:null,selectedElementIds:Ue({},t),selectedGroupIds:{},selectedLinearElement:null,selectionElement:null,showHyperlinkPopup:!1,suggestedBinding:null,hoveredArrowTextAnchor:null,frameToHighlight:null},captureUpdate:O.IMMEDIATELY}},keyTest:(e,t,o,r)=>e.key!==S.ESCAPE||go(e.target)?!1:!t.newElement&&t.multiElement===null&&!t.selectedLinearElement?.isEditing&&(t.activeEmbeddable!==null||t.activeTool.type!==r.state.preferredSelectionTool.type||!!t.editingGroupId||!!t.selectedLinearElement||$e(r.scene.getNonDeletedElements(),t))});import RL from"clsx";import{jsx as RC,jsxs as NL}from"react/jsx-runtime";var Id=({children:e,checked:t,onChange:o,className:r})=>NL("div",{className:RL("Checkbox",r,{"is-checked":t}),onClick:n=>{o(!t,n),n.currentTarget.querySelector(".Checkbox-box").focus()},children:[RC("button",{type:"button",className:"Checkbox-box",role:"checkbox","aria-checked":t,children:td}),RC("div",{className:"Checkbox-label",children:e})]});import{jsx as kd}from"react/jsx-runtime";var OC=e=>{let t=e.title||(e.value===Q.DARK?h("buttons.lightMode"):h("buttons.darkMode"));return kd(ee,{type:"icon",icon:e.value===Q.LIGHT?NC.MOON:NC.SUN,title:t,"aria-label":t,onClick:()=>e.onChange(e.value===Q.DARK?Q.LIGHT:Q.DARK),"data-testid":"toggle-dark-mode"})},NC={SUN:kd("svg",{width:"512",height:"512",className:"rtl-mirror",viewBox:"0 0 512 512",children:kd("path",{fill:"currentColor",d:"M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z"})}),MOON:kd("svg",{width:"512",height:"512",className:"rtl-mirror",viewBox:"0 0 512 512",children:kd("path",{fill:"currentColor",d:"M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"})})};import{useState as OL}from"react";import{jsx as BC,jsxs as BL}from"react/jsx-runtime";var FC=e=>{let{id:t}=tt(),[o,r]=OL(e.value),n=a=>{e.ignoreFocus||pv(a.target);let s=a.target.value;s!==e.value&&e.onChange(s)},i=a=>{if(a.key===S.ENTER){if(a.preventDefault(),a.nativeEvent.isComposing||a.keyCode===229)return;a.currentTarget.blur()}};return BL("div",{className:"ProjectName",children:[BC("label",{className:"ProjectName-label",htmlFor:"filename",children:`${e.label}:`}),BC("input",{type:"text",className:"TextInput",onBlur:n,onKeyDown:i,id:`${t}-filename`,value:o,onChange:a=>r(a.target.value)})]})};import{useCallback as FL,useEffect as zL,useRef as HL}from"react";import{jsx as Ju,jsxs as VL}from"react/jsx-runtime";var UL=5e3,GL=({progress:e})=>Ju("div",{className:"Toast__progress-bar",children:Ju("div",{className:"Toast__progress-bar-fill",style:{width:`${Math.min(5,Math.round(e*100))}%`}})}),WL=({message:e,onClose:t,closable:o=!1,duration:r=UL,style:n})=>{let i=HL(0),a=r!==1/0,s=FL(()=>{a&&(i.current=window.setTimeout(()=>t(),r))},[t,r,a]);return zL(()=>{if(a)return s(),()=>clearTimeout(i.current)},[s,e,r,a]),VL("div",{className:"Toast",role:"status",onMouseEnter:a?()=>clearTimeout(i?.current):void 0,onMouseLeave:a?s:void 0,style:n,children:[Ju("div",{className:"Toast__message",children:e}),o&&Ju(ee,{icon:qo,"aria-label":"close",type:"icon",onClick:t,className:"close"})]})},Qu=Object.assign(WL,{ProgressBar:GL});var $X="clipboard"in navigator&&"readText"in navigator.clipboard,eh="clipboard"in navigator&&"writeText"in navigator.clipboard,sl="clipboard"in navigator&&"write"in navigator.clipboard&&"ClipboardItem"in window&&"toBlob"in HTMLCanvasElement.prototype,YL=e=>!!([gi.excalidraw,gi.excalidrawClipboard,gi.excalidrawClipboardWithAPI].includes(e?.type)&&Array.isArray(e.elements)),zC=({types:e,files:t})=>{!e&&!t&&console.warn("createPasteEvent: no types or files provided");let o=new ClipboardEvent("paste",{clipboardData:new DataTransfer});if(e)for(let[r,n]of Object.entries(e)){if(typeof n!="string"){t=t||[],t.push(n);continue}try{if(o.clipboardData?.items.add(n,r),o.clipboardData?.getData(r)!==n)throw new Error(`Failed to set "${r}" as clipboardData item`)}catch(i){throw new Error(i.message)}}if(t){let r=-1;for(let n of t){r++;try{if(o.clipboardData?.items.add(n),o.clipboardData?.files[r]!==n)throw new Error(`Failed to set file "${n.name}" as clipboardData item`)}catch(i){throw new Error(i.message)}}}return o},KL=({elements:e,files:t})=>{let o=te(e),r=new Set(e.filter(s=>ae(s))),n=!1,i=e.reduce((s,l)=>(Ti(l)&&(n=!0,t&&t[l.fileId]&&(s[l.fileId]=t[l.fileId])),s),{});n&&!t&&console.warn("copyToClipboard: attempting to file element(s) without providing associated `files` object.");let a={type:gi.excalidrawClipboard,elements:e.map(s=>{if(Nn(s,o)&&!r.has(Nn(s,o))){let l=mr(s);return bo(l,o,{frameId:null}),l}return s}),files:t?i:void 0};return JSON.stringify(a)},th=async(e,t,o)=>{let r=KL({elements:e,files:t});await zr({[ue.excalidrawClipboard]:r,[ue.text]:r},o)};function HC(e){let t=[];for(let o of e.childNodes)if(o.nodeType===3){let r=o.textContent?.trim();r&&t.push({type:"text",value:r})}else if(o instanceof HTMLImageElement){let r=o.getAttribute("src");r&&r.startsWith("http")&&t.push({type:"imageUrl",value:r})}else t=t.concat(HC(o));return t}var XL=e=>{let t=e.value;try{let o=new DOMParser().parseFromString(t,ue.html),r=HC(o.body);if(r.length)return{type:"mixedContent",value:r}}catch(o){console.error(`error in parseHTMLFromPaste: ${o.message}`)}return null},UC=async()=>{let e={},t;try{t=await navigator.clipboard?.read()}catch(o){try{if(navigator.clipboard?.readText){console.warn(`navigator.clipboard.readText() failed (${o.message}). Failling back to navigator.clipboard.read()`);let r=await navigator.clipboard?.readText();if(r)return{[ue.text]:r}}}catch(r){if(navigator.clipboard?.read)console.warn(`navigator.clipboard.readText() failed (${r.message}). Failling back to navigator.clipboard.read()`);else{if(r.name==="DataError")return console.warn(`navigator.clipboard.read() error, clipboard is probably empty: ${r.message}`),e;throw r}}throw o}for(let o of t)for(let r of o.types)if(Ym(Sy,r))try{if(r===ue.text||r===ue.html)e[r]=await(await o.getType(r)).text();else if(U2(r)){let n=await o.getType(r),i=$2(n,r,void 0);e[r]=i}else throw new db(`Unsupported clipboard type: ${r}`)}catch(n){console.warn(n instanceof db?n.message:`Cannot retrieve ${r} from clipboardItem: ${n.message}`)}return Object.keys(e).length===0&&console.warn("No clipboard data found from clipboard.read()."),e},$L=async(e,t=!1)=>{try{let o=e.findByType(ue.html),r=!t&&o&&XL(o);return r?r.value.every(n=>n.type==="text")?{type:"text",value:e.getData(ue.text)??r.value.map(n=>n.value).join(`
|
|
2
|
+
`).trim()}:r:{type:"text",value:(e.getData(ue.text)||"").trim()}}catch{return{type:"text",value:""}}},ZL=function(e){return this.find(t=>t.type===e)||null},jL=function(e){return this.find(o=>o.type===e)?.value??null},qL=function(){return this.filter(e=>e.kind==="file")},GC=e=>{let t;WC(e)?t=e.clipboardData?.items:t=e.dataTransfer?.items;let o=new Set;for(let r of Array.from(t||[]))o.has(r.type)||o.add(r.type);return o},ll=async e=>{let t;WC(e)?t=e.clipboardData?.items:t=e.dataTransfer?.items;let o=(await Promise.all(Array.from(t||[]).map(async r=>{if(r.kind==="file"){let n=r.getAsFile();if(n){let i=await X2(r);return n=await Zc(n),{type:n.type,kind:"file",file:n,fileHandle:i}}}else if(r.kind==="string"){let{type:n}=r,i;return"clipboardData"in e&&e.clipboardData?i=e.clipboardData?.getData(n):i=await new Promise(a=>{r.getAsString(s=>a(s))}),{type:n,kind:"string",value:i}}return null}))).filter(r=>r!=null);return Object.assign(o,{findByType:ZL,getData:jL,getFiles:qL})},oh=async(e,t=!1)=>{let o=await $L(e,t);if(o.type==="mixedContent")return{mixedContent:o.value};try{let r=JSON.parse(o.value),n=r.type===gi.excalidrawClipboardWithAPI;if(YL(r))return{elements:r.elements,files:r.files,text:t?JSON.stringify(r.elements,null,2):void 0,programmaticAPI:n}}catch{}return{text:o.value}},rh=async e=>{try{await navigator.clipboard.write([new ClipboardItem({[ue.png]:e})])}catch(t){if(vi(e))await navigator.clipboard.write([new ClipboardItem({[ue.png]:await e})]);else throw t}},zr=async(e,t)=>{e=e||"";let o=Object.entries(typeof e=="string"?{[ue.text]:e}:e);try{if(t){for(let[n,i]of o)if(t.clipboardData?.setData(n,i),t.clipboardData?.getData(n)!==i)throw new Error("Failed to setData on clipboardEvent");return}}catch(n){console.error(n)}let r=o.find(([n])=>n===ue.text);if(eh&&r)try{await navigator.clipboard.writeText(r[1]);return}catch(n){console.error(n)}if(r&&!JL(r[1]))throw new Error("Error copying to clipboard.")},JL=e=>{e||(e=" ");let t=document.documentElement.getAttribute("dir")==="rtl",o=document.createElement("textarea");o.style.border="0",o.style.padding="0",o.style.margin="0",o.style.position="absolute",o.style[t?"right":"left"]="-9999px";let r=window.pageYOffset||document.documentElement.scrollTop;o.style.top=`${r}px`,o.style.fontSize="12pt",o.setAttribute("readonly",""),o.value=e,document.body.appendChild(o);let n=!1;try{o.select(),o.setSelectionRange(0,o.value.length),n=document.execCommand("copy")}catch(i){console.error(i)}return o.remove(),n},WC=e=>e.type==="paste"||e.type==="copy"||e.type==="cut";var ja=(e,{selectedElementIds:t},o)=>{let r=me(e),n=te(r),i=o&&$e(r,{selectedElementIds:t}),a=null,s=i?ie(r,{selectedElementIds:t},{includeBoundTextElement:!0}):r;if(i){let l=s[0];s.length===1&&ae(l)?(a=l,s=fp(r,l,n)):s.length>1&&(s=ie(r,{selectedElementIds:t},{includeBoundTextElement:!0,includeElementsInFrames:!0}))}return{exportingFrame:a,exportedElements:Dr(s)}},qa=async({type:e,data:t,config:o})=>{let r=Object.assign({},o);if(r.padding=r.padding??fi,r.fileHandle=r.fileHandle??null,r.exportingFrame=r.exportingFrame??null,r.name=r.name||t.appState.name||Ry,t.elements.length===0)throw new Error(h("alerts.cannotExportEmptyCanvas"));if(e==="svg"||e==="clipboard-svg"){let i=Ba({data:{elements:t.elements,appState:{exportBackground:r.exportBackground,exportWithDarkMode:t.appState.exportWithDarkMode,viewBackgroundColor:t.appState.viewBackgroundColor,exportPadding:r.padding,exportScale:t.appState.exportScale,exportEmbedScene:t.appState.exportEmbedScene&&e==="svg"},files:t.files},config:{exportingFrame:r.exportingFrame}});if(e==="svg")return mb(i.then(a=>new Blob([Py+a.outerHTML],{type:ue.svg})),{description:"Export to SVG",name:r.name,extension:t.appState.exportEmbedScene?"excalidraw.svg":"svg",mimeTypes:[uc.svg],fileHandle:r.fileHandle});if(e==="clipboard-svg"){let a=await i.then(s=>s.outerHTML);try{await zr(a)}catch{throw new Error(h("errors.copyToSystemClipboardFailed"))}return}}let n=$c({data:t,config:{canvasBackgroundColor:r.exportBackground?r.viewBackgroundColor:!1,padding:r.padding,theme:t.appState.exportWithDarkMode?"dark":"light",scale:t.appState.exportScale,fit:"none",exportingFrame:r.exportingFrame}});if(e==="png"){let i=Fa(n);return t.appState.exportEmbedScene&&(i=i.then(a=>import("./data/image-USJGQDOA.js").then(({encodePngMetadata:s})=>s({blob:a,metadata:Gc(t.elements,t.appState,t.files,"local")})))),mb(i,{description:"Export to PNG",name:r.name,extension:t.appState.exportEmbedScene?"excalidraw.png":"png",mimeTypes:[uc.png],fileHandle:r.fileHandle})}else if(e==="clipboard")try{let i=Fa(n);await rh(i)}catch(i){throw console.warn(i),i.name==="CANVAS_POSSIBLY_TOO_BIG"?new Error(h("canvasError.canvasTooBig")):In&&i.name==="TypeError"?new Error(`${h("alerts.couldNotCopyToClipboard")}
|
|
3
3
|
|
|
4
|
-
${h("hints.firefox_clipboard_write")}`):new Error(h("alerts.couldNotCopyToClipboard"))}else throw new Error("Unsupported export type")};var AT=async(e,o,t)=>{let r=Nw(o);if(!Ow(r))throw new Error("fileHandle should exist and should be of type svg or png when resaving");let{elements:n,appState:i,files:a}=await e,{exportBackground:l,viewBackgroundColor:s}=i;i={...i,exportEmbedScene:!0};let{exportedElements:c,exportingFrame:d}=Ta(n,i,!1);return await Ca({type:r,data:{elements:c,appState:i,files:a},config:{exportBackground:l,viewBackgroundColor:s,name:t,fileHandle:o,exportingFrame:d}}),{fileHandle:o}};import{Fragment as DT,jsx as en,jsxs as RT}from"react/jsx-runtime";var vu=U({name:"changeProjectName",label:"labels.fileTitle",trackEvent:!1,perform:(e,o,t)=>({appState:{...o,name:t},captureUpdate:R.EVENTUALLY}),PanelComponent:({appState:e,updateData:o,appProps:t,data:r,app:n})=>en(TT,{label:h("labels.fileTitle"),value:n.getName(),onChange:i=>o(i),ignoreFocus:r?.ignoreFocus??!1})}),LT=U({name:"changeExportScale",label:"imageExportDialog.scale",trackEvent:{category:"export",action:"scale"},perform:(e,o,t)=>({appState:{...o,exportScale:t},captureUpdate:R.EVENTUALLY}),PanelComponent:({elements:e,appState:o,updateData:t})=>{let r=de(e),i=Ge(r,o)?ie(r,o):r,a=(l,s,c)=>{let[,,d,p]=Dw(l).map(m=>Math.trunc(m*c));return[d+s*2,p+s*2]};return en(DT,{children:am.map(l=>{let[s,c]=a(i,jn,l),d=`${h("imageExportDialog.label.scale")} ${l}x (${s}x${c})`;return en(q,{size:"small",type:"toggle",icon:`${l}x`,title:d,"aria-label":d,checked:l===o.exportScale,onSelect:()=>t(l)},l)})})}}),wu=U({name:"changeExportBackground",label:"imageExportDialog.label.withBackground",trackEvent:{category:"export",action:"toggleBackground"},perform:(e,o,t)=>({appState:{...o,exportBackground:t},captureUpdate:R.EVENTUALLY}),PanelComponent:({appState:e,updateData:o})=>en(rd,{checked:e.exportBackground,onChange:t=>o(t),children:h("imageExportDialog.label.withBackground")})}),Tu=U({name:"changeExportEmbedScene",label:"imageExportDialog.tooltip.embedScene",trackEvent:{category:"export",action:"embedScene"},perform:(e,o,t)=>({appState:{...o,exportEmbedScene:t},captureUpdate:R.EVENTUALLY}),PanelComponent:({appState:e,updateData:o})=>RT(rd,{checked:e.exportEmbedScene,onChange:t=>o(t),children:[h("imageExportDialog.label.embedScene"),en(fo,{label:h("imageExportDialog.tooltip.embedScene"),long:!0,children:en("div",{className:"excalidraw-tooltip-icon",children:Jf})})]})}),Hl=!1,e0=(e,o)=>{let t=o.message??h("progressDialog.defaultMessage");e.setAppState({toast:{message:o.progress!=null?RT(DT,{children:[t,en(fu.ProgressBar,{progress:o.progress})]}):t,duration:1/0}})};async function wA(e,o){if(o.app.state.isLoading&&(e0(o.app,{progress:null}),await o.app.onStateChange({predicate:t=>!t.isLoading})),e!=null&&typeof e=="object"&&Symbol.asyncIterator in e){for await(let t of e){if(o.signal.aborted){e.return();return}if(t.type==="progress")e0(o.app,{message:t.message,progress:t.progress??null});else if(t.type==="done")return}return}e instanceof Promise&&(e0(o.app,{progress:null}),await e)}function _T(e,o,t,r){let n=new AbortController,i=n.signal,a=new Promise(async l=>{try{r.props.onExport&&await wA(r.props.onExport("json",{elements:e,appState:o,files:t},{signal:i}),{app:r,signal:i})}catch(s){s?.name==="AbortError"?console.warn(`onExport() aborted by host app (signal aborted: ${i.aborted})`):console.error("Error during props.onExport() handling",s)}l({elements:e,appState:o,files:r.files})});return{abortController:n,data:a}}var ki=U({name:"saveToActiveFile",label:"buttons.save",icon:fi,trackEvent:{category:"export"},predicate:(e,o,t,r)=>!!r.props.UIOptions.canvasActions.saveToActiveFile&&!!o.fileHandle&&!o.viewModeEnabled,perform:async(e,o,t,r)=>{if(Hl)return!1;Hl=!0;let n=o.fileHandle,i=r.getName(),{abortController:a,data:l}=_T(e,o,r.files,r);try{let{fileHandle:s}=tp(n)?await AT(l,n,i):await qm({data:l,filename:i,fileHandle:n});return{captureUpdate:R.NEVER,appState:{fileHandle:s,toast:{message:n&&s?.name?h("toast.fileSavedToFilename").replace("{filename}",`"${s.name}"`):h("toast.fileSaved"),duration:1500}}}}catch(s){return a.abort(),s?.name!=="AbortError"?console.error(s):console.warn(s),{captureUpdate:R.NEVER,appState:{toast:null}}}finally{Hl=!1}},keyTest:e=>e.key===I.S&&e[I.CTRL_OR_CMD]&&!e.shiftKey}),Ul=U({name:"saveFileToDisk",label:"exportDialog.disk_title",icon:fi,viewMode:!0,trackEvent:{category:"export"},perform:async(e,o,t,r)=>{if(Hl)return!1;Hl=!0;let{abortController:n,data:i}=_T(e,o,r.files,r);try{let{fileHandle:a}=await qm({data:i,filename:r.getName(),fileHandle:null});return{captureUpdate:R.NEVER,appState:{openDialog:null,fileHandle:a,toast:{message:h("toast.fileSaved"),duration:3e3}}}}catch(a){return n.abort(),a?.name!=="AbortError"?console.error(a):console.warn(a),{captureUpdate:R.NEVER,appState:{toast:null}}}finally{Hl=!1}},keyTest:e=>e.key.toLowerCase()===I.S&&e.shiftKey&&e[I.CTRL_OR_CMD],PanelComponent:({updateData:e})=>en(q,{type:"button",icon:Zf,title:h("buttons.saveAs"),"aria-label":h("buttons.saveAs"),showAriaLabel:Me().formFactor==="phone",hidden:!hl,onClick:()=>e(null),"data-testid":"save-as-button"})}),Ia=U({name:"loadScene",label:"buttons.load",trackEvent:{category:"export"},predicate:(e,o,t,r)=>!!r.props.UIOptions.canvasActions.loadScene&&!o.viewModeEnabled,perform:async(e,o,t,r)=>{try{let{elements:n,appState:i,files:a}=await Cf(o,e);return{elements:n,appState:i,files:a,captureUpdate:R.IMMEDIATELY}}catch(n){return n?.name==="AbortError"?(console.warn(n),!1):{elements:e,appState:{...o,errorMessage:n.message},files:r.files,captureUpdate:R.EVENTUALLY}}},keyTest:e=>e[I.CTRL_OR_CMD]&&e.key===I.O}),PT=U({name:"exportWithDarkMode",label:"imageExportDialog.label.darkMode",trackEvent:{category:"export",action:"toggleTheme"},perform:(e,o,t,r)=>(r.setSessionExportThemeOverride(t?te.DARK:te.LIGHT),{appState:{...o,exportWithDarkMode:t},captureUpdate:R.EVENTUALLY}),PanelComponent:({appState:e,updateData:o})=>en("div",{style:{display:"flex",justifyContent:"flex-end",marginTop:"-45px",marginBottom:"10px"},children:en(vT,{value:e.exportWithDarkMode?te.DARK:te.LIGHT,onChange:t=>{o(t===te.DARK)},title:h("imageExportDialog.label.darkMode")})})});var NT="{}",Cu=U({name:"copyStyles",label:"labels.copyStyles",icon:Lp,trackEvent:{category:"element"},perform:(e,o,t,r)=>{let n=[],i=e.find(a=>o.selectedElementIds[a.id]);if(n.push(i),i&&zt(i)){let a=we(i,r.scene.getNonDeletedElementsMap());n.push(a)}return i&&(NT=JSON.stringify(n)),{appState:{...o,toast:{message:h("toast.copyStyles")}},captureUpdate:R.EVENTUALLY}},keyTest:e=>e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.C}),Iu=U({name:"pasteStyles",label:"labels.pasteStyles",icon:Lp,trackEvent:{category:"element"},perform:(e,o,t,r)=>{let n=JSON.parse(NT),i=n[0],a=n[1];if(!el(i))return{elements:e,captureUpdate:R.EVENTUALLY};let l=ie(e,o,{includeBoundTextElement:!0}),s=l.map(c=>c.id);return{elements:e.map(c=>{if(s.includes(c.id)){let d=i;if(j(c)&&c.containerId&&(d=a),!d)return c;let p=se(c,{backgroundColor:d?.backgroundColor,strokeWidth:d?.strokeWidth,strokeColor:d?.strokeColor,strokeStyle:d?.strokeStyle,fillStyle:d?.fillStyle,opacity:d?.opacity,roughness:d?.roughness,roundness:d.roundness?Py(d.roundness.type,c)?d.roundness:Dy(c):null});if(j(p)){let m=d.fontSize||Zn,u=d.fontFamily||Ka,b=se(p,{fontSize:m,fontFamily:u,textAlign:d.textAlign||tm,lineHeight:d.lineHeight||po(u)});p=b;let f=null;b.containerId&&(f=l.find(x=>x.id===b.containerId)||null),It(b,f,r.scene)}return p.type==="arrow"&&ve(d)&&(p=se(p,{startArrowhead:d.startArrowhead,endArrowhead:d.endArrowhead})),oe(c)&&(p=se(p,{roundness:null,backgroundColor:"transparent"})),p}return c}),captureUpdate:R.IMMEDIATELY}},keyTest:e=>e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.V});var Mi=U({name:"toggleShortcuts",label:"welcomeScreen.defaults.helpHint",icon:Vf,viewMode:!0,trackEvent:{category:"menu",action:"toggleHelpDialog"},perform:(e,o,t,{focusContainer:r})=>(o.openDialog?.name==="help"&&r(),{appState:{...o,openDialog:o.openDialog?.name==="help"?null:{name:"help"},openMenu:null,openPopup:null},captureUpdate:R.EVENTUALLY}),keyTest:e=>e.key===I.QUESTION_MARK});import{jsx as Gl}from"react/jsx-runtime";var TA=e=>{if(e.length>=2){let o=e[0].groupIds;for(let t of o)if(e.reduce((r,n)=>r&&nl(n,t),!0))return!0}return!1},OT=(e,o,t)=>{let r=t.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0});return r.length>=2&&!TA(r)&&!zm(r)},Su=U({name:"group",label:"labels.group",icon:e=>Gl(Tp,{theme:e.theme}),trackEvent:{category:"element"},perform:(e,o,t,r)=>{let n=Ev(r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0}));if(n.length<2)return{appState:o,elements:e,captureUpdate:R.EVENTUALLY};let i=wr(o);if(i.length===1){let x=i[0],v=new Set(He(e,x).map(w=>w.id)),y=new Set(n.map(w=>w.id));if(new Set([...Array.from(v),...Array.from(y)]).size===v.size)return{appState:o,elements:e,captureUpdate:R.EVENTUALLY}}let a=[...e];new Set(n.map(x=>x.frameId)).size>1&&bv(n).forEach((v,y)=>{Fm(v,r.scene.getNonDeletedElementsMap())});let s=vo(),c=ne(n);a=a.map(x=>c.get(x.id)?se(x,{groupIds:mv(x.groupIds,s,o.editingGroupId)}):x);let d=He(a,s),p=d[d.length-1],m=a.lastIndexOf(p),u=a.slice(m+1),b=a.slice(0,m).filter(x=>!nl(x,s)),f=Hr([...b,...d,...u],ne(d));return{appState:{...o,...sv(s,{...o,selectedGroupIds:{}},de(a))},elements:f,captureUpdate:R.IMMEDIATELY}},predicate:(e,o,t,r)=>OT(e,o,r),keyTest:e=>!e.shiftKey&&e[I.CTRL_OR_CMD]&&e.key===I.G,PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>Gl(q,{hidden:!OT(e,o,r),type:"button",icon:Gl(Tp,{theme:o.theme}),onClick:()=>t(null),title:`${h("labels.group")} \u2014 ${H("CtrlOrCmd+G")}`,"aria-label":h("labels.group"),visible:Ge(de(e),o)})}),ku=U({name:"ungroup",label:"labels.ungroup",icon:e=>Gl(Cp,{theme:e.theme}),trackEvent:{category:"element"},perform:(e,o,t,r)=>{let n=wr(o),i=ne(e);if(n.length===0)return{appState:o,elements:e,captureUpdate:R.EVENTUALLY};let a=[...e],l=[];a=a.map(m=>{xt(m)&&l.push(m.id);let u=pv(m.groupIds,o.selectedGroupIds);return u.length===m.groupIds.length?m:se(m,{groupIds:u})});let s=Tt(o,de(a),o,null),c=r.scene.getSelectedElements(o),d=new Set(c.filter(m=>m.frameId).map(m=>m.frameId));return xv(e).filter(m=>d.has(m.id)).forEach(m=>{m&&(a=Ur(a,To(a,m,o,i),m))}),s.selectedElementIds=Object.entries(s.selectedElementIds).reduce((m,[u,b])=>(b&&!l.includes(u)&&(m[u]=!0),m),{}),{appState:{...o,...s},elements:a,captureUpdate:R.IMMEDIATELY}},keyTest:e=>e.shiftKey&&e[I.CTRL_OR_CMD]&&e.key===I.G.toUpperCase(),predicate:(e,o)=>wr(o).length>0,PanelComponent:({elements:e,appState:o,updateData:t})=>Gl(q,{type:"button",hidden:wr(o).length===0,icon:Gl(Cp,{theme:o.theme}),onClick:()=>t(null),title:`${h("labels.ungroup")} \u2014 ${H("CtrlOrCmd+Shift+G")}`,"aria-label":h("labels.ungroup"),visible:Ge(de(e),o)})});import kA from"clsx";var Mu=(e,o,t,r,n,i,a)=>{e.beginPath(),e.moveTo(o+i,t),e.lineTo(o+r-i,t),e.quadraticCurveTo(o+r,t,o+r,t+i),e.lineTo(o+r,t+n-i),e.quadraticCurveTo(o+r,t+n,o+r-i,t+n),e.lineTo(o+i,t+n),e.quadraticCurveTo(o,t+n,o,t+n-i),e.lineTo(o,t+i),e.quadraticCurveTo(o,t,o+i,t),e.closePath(),e.fill(),a&&(e.strokeStyle=a),e.stroke()};function CA(e){let o=0;if(e.length===0)return o;for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);o=(o<<5)-o+r}return o}var Sa=(e,o)=>`hsl(${Math.abs(CA(o?.id||e))%37*10}, 100%, 83%)`,FT=e=>{let o=e?.trim()?.codePointAt(0);return(o?String.fromCodePoint(o):"?").toUpperCase()},BT=({context:e,renderConfig:o,appState:t,normalizedWidth:r,normalizedHeight:n})=>{for(let[i,a]of o.remotePointerViewportCoords){let{x:l,y:s}=a,c=t.collaborators.get(i);l-=t.offsetLeft,s-=t.offsetTop;let d=11,p=14,m=l<0||l>r-d||s<0||s>n-p;l=Math.max(l,0),l=Math.min(l,r-d),s=Math.max(s,0),s=Math.min(s,n-p);let u=Sa(i,c);e.save(),e.strokeStyle=u,e.fillStyle=u;let b=o.remotePointerUserStates.get(i),f=m||b==="idle"||b==="away";f&&(e.globalAlpha=.3),o.remotePointerButton.get(i)==="down"&&(e.beginPath(),e.arc(l,s,15,0,2*Math.PI,!1),e.lineWidth=3,e.strokeStyle="#ffffff88",e.stroke(),e.closePath(),e.beginPath(),e.arc(l,s,15,0,2*Math.PI,!1),e.lineWidth=1,e.strokeStyle=u,e.stroke(),e.closePath());let x=t.theme===te.DARK?"#2f6330":LE,v=c?.isSpeaking;v&&(e.fillStyle=x,e.strokeStyle=x,e.lineWidth=10,e.lineJoin="round",e.beginPath(),e.moveTo(l,s),e.lineTo(l+0,s+14),e.lineTo(l+4,s+9),e.lineTo(l+11,s+8),e.closePath(),e.stroke(),e.fill()),e.fillStyle=Ro,e.strokeStyle=Ro,e.lineWidth=6,e.lineJoin="round",e.beginPath(),e.moveTo(l,s),e.lineTo(l+0,s+14),e.lineTo(l+4,s+9),e.lineTo(l+11,s+8),e.closePath(),e.stroke(),e.fill(),e.fillStyle=u,e.strokeStyle=u,e.lineWidth=2,e.lineJoin="round",e.beginPath(),f?(e.moveTo(l-1,s-1),e.lineTo(l-1,s+15),e.lineTo(l+5,s+10),e.lineTo(l+12,s+9),e.closePath(),e.fill()):(e.moveTo(l,s),e.lineTo(l+0,s+14),e.lineTo(l+4,s+9),e.lineTo(l+11,s+8),e.closePath(),e.fill(),e.stroke());let y=o.remotePointerUsernames.get(i)||"";if(!m&&y){e.font="600 12px sans-serif";let E=(v?l+0:l)+d/2,w=(v?s+0:s)+p+2,T=5,S=3,_=e.measureText(y),M=_.actualBoundingBoxDescent+_.actualBoundingBoxAscent,N=Math.max(M,12),L=E-1,D=w-1,O=_.width+2+T*2+2,V=N+2+S*2+2;if(e.roundRect?(e.beginPath(),e.roundRect(L,D,O,V,8),e.fillStyle=u,e.fill(),e.strokeStyle=Ro,e.stroke(),v&&(e.beginPath(),e.roundRect(L-2,D-2,O+4,V+4,8),e.strokeStyle=x,e.stroke())):Mu(e,L,D,O,V,8,Ro),e.fillStyle=$i,e.fillText(y,E+T+1,w+S+_.actualBoundingBoxAscent+Math.floor((N-M)/2)+2),v){e.fillStyle=x;let K=8,z=8,J=5;e.fillRect(L+O+z,D+(V/2-K/2),2,K),e.fillRect(L+O+z+J,D+(V/2-K*2/2),2,K*2),e.fillRect(L+O+z+J*2,D+(V/2-K/2),2,K)}}e.restore(),e.closePath()}};import IA from"clsx";import{useState as SA}from"react";import{jsx as zT}from"react/jsx-runtime";var t0=({color:e,onClick:o,name:t,src:r,className:n})=>{let i=FT(t),[a,l]=SA(!1),s=!a&&r,c=s?void 0:{background:e};return zT("div",{className:IA("Avatar",n),style:c,onClick:o,children:s?zT("img",{className:"Avatar-img",src:r,alt:i,referrerPolicy:"no-referrer",onError:()=>l(!0)}):i})};import{jsx as tn,jsxs as Au}from"react/jsx-runtime";var HT=U({name:"goToCollaborator",label:"Go to a collaborator",viewMode:!0,trackEvent:{category:"collab"},perform:(e,o,t)=>(Qe(t,"actionGoToCollaborator: collaborator should be defined when actionGoToCollaborator is called"),!t.socketId||o.userToFollow?.socketId===t.socketId||t.isCurrentUser?{appState:{...o,userToFollow:null},captureUpdate:R.EVENTUALLY}:{appState:{...o,userToFollow:{socketId:t.socketId,username:t.username||""},openMenu:o.openMenu==="canvas"?null:o.openMenu},captureUpdate:R.EVENTUALLY}),PanelComponent:({updateData:e,data:o,appState:t})=>{let{socketId:r,collaborator:n,withName:i,isBeingFollowed:a}=o,l=Sa(r,n),s=kA({"is-followed":a,"is-current-user":n.isCurrentUser===!0,"is-speaking":n.isSpeaking,"is-in-call":n.isInCall,"is-muted":n.isMuted}),c=n.isInCall?n.isSpeaking?Au("div",{className:"UserList__collaborator-status-icon-speaking-indicator",title:h("userList.hint.isSpeaking"),children:[tn("div",{}),tn("div",{}),tn("div",{})]}):n.isMuted?tn("div",{className:"UserList__collaborator-status-icon-microphone-muted",title:h("userList.hint.micMuted"),children:r1}):tn("div",{title:h("userList.hint.inCall"),children:o1}):null;return i?Au("div",{className:`dropdown-menu-item dropdown-menu-item-base UserList__collaborator ${s}`,style:{"--avatar-size":"1.5rem"},onClick:()=>e(n),children:[tn(t0,{color:l,onClick:()=>{},name:n.username||"",src:n.avatarUrl,className:s}),tn("div",{className:"UserList__collaborator-name",children:n.username}),Au("div",{className:"UserList__collaborator-status-icons","aria-hidden":!0,children:[a&&tn("div",{className:"UserList__collaborator-status-icon-is-followed",title:h("userList.hint.followStatus"),children:ya}),c]})]}):Au("div",{className:`UserList__collaborator UserList__collaborator--avatar-only ${s}`,children:[tn(t0,{color:l,onClick:()=>{e(n)},name:n.username||"",src:n.avatarUrl,className:s}),c&&tn("div",{className:"UserList__collaborator-status-icon",children:c})]})}});var Lu=U({name:"addToLibrary",trackEvent:{category:"element"},perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});for(let i of sm)if(n.some(a=>a.type===i))return{captureUpdate:R.EVENTUALLY,appState:{...o,errorMessage:h(`errors.libraryElementTypeError.${i}`)}};return r.library.getLatestLibrary().then(i=>r.library.setLibrary([{id:vo(),status:"unpublished",elements:n.map(Tr),created:Date.now()},...i])).then(()=>({captureUpdate:R.EVENTUALLY,appState:{...o,toast:{message:h("toast.addedToLibrary")}}})).catch(i=>({captureUpdate:R.EVENTUALLY,appState:{...o,errorMessage:i.message}}))},label:"labels.addToLibrary"});import{jsx as Vl}from"react/jsx-runtime";var ko=(e,o)=>{let t=o.scene.getSelectedElements(e);return Dm(t,o.scene.getNonDeletedElementsMap(),e).length>1&&!t.some(r=>oe(r))},Wl=(e,o,t,r)=>{let n=t.scene.getSelectedElements(o),i=Dv(n,r,t.scene,o),a=ne(i);return Gr(e.map(l=>a.get(l.id)||l),o,t)},UT=U({name:"alignTop",label:"labels.alignTop",icon:bp,trackEvent:{category:"element"},predicate:(e,o,t,r)=>ko(o,r),perform:(e,o,t,r)=>({appState:o,elements:Wl(e,o,r,{position:"start",axis:"y"}),captureUpdate:R.IMMEDIATELY}),keyTest:e=>e[I.CTRL_OR_CMD]&&e.shiftKey&&e.key===I.ARROW_UP,PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>Vl(q,{hidden:!ko(o,r),type:"button",icon:bp,onClick:()=>t(null),title:`${h("labels.alignTop")} \u2014 ${H("CtrlOrCmd+Shift+Up")}`,"aria-label":h("labels.alignTop"),visible:Ge(de(e),o)})}),GT=U({name:"alignBottom",label:"labels.alignBottom",icon:xp,trackEvent:{category:"element"},predicate:(e,o,t,r)=>ko(o,r),perform:(e,o,t,r)=>({appState:o,elements:Wl(e,o,r,{position:"end",axis:"y"}),captureUpdate:R.IMMEDIATELY}),keyTest:e=>e[I.CTRL_OR_CMD]&&e.shiftKey&&e.key===I.ARROW_DOWN,PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>Vl(q,{hidden:!ko(o,r),type:"button",icon:xp,onClick:()=>t(null),title:`${h("labels.alignBottom")} \u2014 ${H("CtrlOrCmd+Shift+Down")}`,"aria-label":h("labels.alignBottom"),visible:Ge(de(e),o)})}),WT=U({name:"alignLeft",label:"labels.alignLeft",icon:Ep,trackEvent:{category:"element"},predicate:(e,o,t,r)=>ko(o,r),perform:(e,o,t,r)=>({appState:o,elements:Wl(e,o,r,{position:"start",axis:"x"}),captureUpdate:R.IMMEDIATELY}),keyTest:e=>e[I.CTRL_OR_CMD]&&e.shiftKey&&e.key===I.ARROW_LEFT,PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>Vl(q,{hidden:!ko(o,r),type:"button",icon:Ep,onClick:()=>t(null),title:`${h("labels.alignLeft")} \u2014 ${H("CtrlOrCmd+Shift+Left")}`,"aria-label":h("labels.alignLeft"),visible:Ge(de(e),o)})}),VT=U({name:"alignRight",label:"labels.alignRight",icon:yp,trackEvent:{category:"element"},predicate:(e,o,t,r)=>ko(o,r),perform:(e,o,t,r)=>({appState:o,elements:Wl(e,o,r,{position:"end",axis:"x"}),captureUpdate:R.IMMEDIATELY}),keyTest:e=>e[I.CTRL_OR_CMD]&&e.shiftKey&&e.key===I.ARROW_RIGHT,PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>Vl(q,{hidden:!ko(o,r),type:"button",icon:yp,onClick:()=>t(null),title:`${h("labels.alignRight")} \u2014 ${H("CtrlOrCmd+Shift+Right")}`,"aria-label":h("labels.alignRight"),visible:Ge(de(e),o)})}),YT=U({name:"alignVerticallyCentered",label:"labels.centerVertically",icon:vp,trackEvent:{category:"element"},predicate:(e,o,t,r)=>ko(o,r),perform:(e,o,t,r)=>({appState:o,elements:Wl(e,o,r,{position:"center",axis:"y"}),captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>Vl(q,{hidden:!ko(o,r),type:"button",icon:vp,onClick:()=>t(null),title:h("labels.centerVertically"),"aria-label":h("labels.centerVertically"),visible:Ge(de(e),o)})}),KT=U({name:"alignHorizontallyCentered",label:"labels.centerHorizontally",icon:wp,trackEvent:{category:"element"},predicate:(e,o,t,r)=>ko(o,r),perform:(e,o,t,r)=>({appState:o,elements:Wl(e,o,r,{position:"center",axis:"x"}),captureUpdate:R.IMMEDIATELY}),PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>Vl(q,{hidden:!ko(o,r),type:"button",icon:wp,onClick:()=>t(null),title:h("labels.centerHorizontally"),"aria-label":h("labels.centerHorizontally"),visible:Ge(de(e),o)})});import{jsx as qT}from"react/jsx-runtime";var XT=(e,o)=>{let t=o.scene.getSelectedElements(e);return Dm(t,o.scene.getNonDeletedElementsMap(),e).length>2&&!t.some(r=>oe(r))},ZT=(e,o,t,r)=>{let n=t.scene.getSelectedElements(o),i=$v(n,t.scene.getNonDeletedElementsMap(),r,o,t.scene),a=ne(i);return Gr(e.map(l=>a.get(l.id)||l),o,t)},$T=U({name:"distributeHorizontally",label:"labels.distributeHorizontally",trackEvent:{category:"element"},perform:(e,o,t,r)=>({appState:o,elements:ZT(e,o,r,{space:"between",axis:"x"}),captureUpdate:R.IMMEDIATELY}),keyTest:e=>!e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.H,PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>qT(q,{hidden:!XT(o,r),type:"button",icon:eb,onClick:()=>t(null),title:`${h("labels.distributeHorizontally")} \u2014 ${H("Alt+H")}`,"aria-label":h("labels.distributeHorizontally"),visible:Ge(de(e),o)})}),jT=U({name:"distributeVertically",label:"labels.distributeVertically",trackEvent:{category:"element"},perform:(e,o,t,r)=>({appState:o,elements:ZT(e,o,r,{space:"between",axis:"y"}),captureUpdate:R.IMMEDIATELY}),keyTest:e=>!e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.V,PanelComponent:({elements:e,appState:o,updateData:t,app:r})=>qT(q,{hidden:!XT(o,r),type:"button",icon:tb,onClick:()=>t(null),title:`${h("labels.distributeVertically")} \u2014 ${H("Alt+V")}`,"aria-label":h("labels.distributeVertically"),visible:Ge(de(e),o)})});var _u=U({name:"flipHorizontal",label:"labels.flipHorizontal",icon:l1,trackEvent:{category:"element"},perform:(e,o,t,r)=>({elements:Gr(JT(e,r.scene.getNonDeletedElementsMap(),o,"horizontal",r),o,r),appState:o,captureUpdate:R.IMMEDIATELY}),keyTest:e=>e.shiftKey&&e.code===he.H}),Pu=U({name:"flipVertical",label:"labels.flipVertical",icon:a1,trackEvent:{category:"element"},perform:(e,o,t,r)=>({elements:Gr(JT(e,r.scene.getNonDeletedElementsMap(),o,"vertical",r),o,r),appState:o,captureUpdate:R.IMMEDIATELY}),keyTest:e=>e.shiftKey&&e.code===he.V&&!e[I.CTRL_OR_CMD]}),JT=(e,o,t,r,n)=>{let i=ie(de(e),t,{includeBoundTextElement:!0,includeElementsInFrames:!0}),a=MA(i,o,r,n),l=ne(a);return e.map(s=>l.get(s.id)||s)},MA=(e,o,t,r)=>{if(e.every(m=>ve(m)&&(m.startBinding||m.endBinding)))return e.map(m=>{let u=m;return se(u,{startArrowhead:u.endArrowhead,endArrowhead:u.startArrowhead})});let{midX:n,midY:i}=wn(e);Ew(e,o,"nw",r.scene,new Map(Array.from(o.values()).map(m=>[m.id,Tr(m)])),{flipByX:t==="horizontal",flipByY:t==="vertical",shouldResizeFromCenter:!0,shouldMaintainAspectRatio:!0}),hc(e.filter(ve),r.scene,r.state);let{elbowArrows:a,otherElements:l}=e.reduce((m,u)=>Re(u)?{...m,elbowArrows:m.elbowArrows.concat(u)}:{...m,otherElements:m.otherElements.concat(u)},{elbowArrows:[],otherElements:[]}),{midX:s,midY:c}=wn(e),[d,p]=[n-s,i-c];return l.forEach(m=>r.scene.mutateElement(m,{x:m.x+d,y:m.y+p})),a.forEach(m=>r.scene.mutateElement(m,{x:m.x+d,y:m.y+p})),e};var ka=U({name:"copy",label:"labels.copy",icon:wl,trackEvent:{category:"element"},perform:async(e,o,t,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});try{await xu(n,r.files,t)}catch(i){return{captureUpdate:R.EVENTUALLY,appState:{...o,errorMessage:i.message}}}return{captureUpdate:R.EVENTUALLY}},keyTest:void 0}),o0=U({name:"paste",label:"labels.paste",trackEvent:{category:"element"},perform:async(e,o,t,r)=>{let n;try{n=await ST()}catch(i){return i.name==="AbortError"||i.name==="NotAllowedError"?!1:(console.error(`actionPaste ${i.name}: ${i.message}`),gn?{captureUpdate:R.EVENTUALLY,appState:{...o,errorMessage:h("hints.firefox_clipboard_write")}}:{captureUpdate:R.EVENTUALLY,appState:{...o,errorMessage:h("errors.asyncPasteFailedOnRead")}})}try{r.pasteFromClipboard(CT({types:n}))}catch(i){return console.error(i),{captureUpdate:R.EVENTUALLY,appState:{...o,errorMessage:h("errors.asyncPasteFailedOnParse")}}}return{captureUpdate:R.EVENTUALLY}},keyTest:void 0}),id=U({name:"cut",label:"labels.cut",icon:Vb,trackEvent:{category:"element"},perform:(e,o,t,r)=>(ka.perform(e,o,t,r),Ml.perform(e,o,null,r)),keyTest:e=>e[I.CTRL_OR_CMD]&&e.key===I.X}),ad=U({name:"copyAsSvg",label:"labels.copyAsSvg",icon:s1,trackEvent:{category:"element"},perform:async(e,o,t,r)=>{if(!r.canvas)return{captureUpdate:R.EVENTUALLY};let{exportedElements:n,exportingFrame:i}=Ta(e,o,!0);try{await Ca({type:"clipboard-svg",data:{elements:n,appState:o,files:r.files},config:{...o,exportingFrame:i,name:r.getName()}});let a=r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});return{appState:{toast:{message:h("toast.copyToClipboardAsSvg",{exportSelection:a.length?h("toast.selection"):h("toast.canvas"),exportColorScheme:o.exportWithDarkMode?h("buttons.darkMode"):h("buttons.lightMode")})}},captureUpdate:R.EVENTUALLY}}catch(a){return console.error(a),{appState:{errorMessage:a.message},captureUpdate:R.EVENTUALLY}}},predicate:e=>bu&&e.length>0,keywords:["svg","clipboard","copy"]}),ld=U({name:"copyAsPng",label:"labels.copyAsPng",icon:c1,trackEvent:{category:"element"},perform:async(e,o,t,r)=>{if(!r.canvas)return{captureUpdate:R.EVENTUALLY};let n=r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0}),{exportedElements:i,exportingFrame:a}=Ta(e,o,!0);try{return await Ca({type:"clipboard",data:{elements:i,appState:o,files:r.files},config:{...o,exportingFrame:a,name:o.name||r.getName()}}),{appState:{...o,toast:{message:h("toast.copyToClipboardAsPng",{exportSelection:n.length?h("toast.selection"):h("toast.canvas"),exportColorScheme:o.exportWithDarkMode?h("buttons.darkMode"):h("buttons.lightMode")})}},captureUpdate:R.EVENTUALLY}}catch(l){return console.error(l),{appState:{...o,errorMessage:l.message},captureUpdate:R.EVENTUALLY}}},predicate:e=>Bl&&e.length>0,keyTest:e=>e.code===he.C&&e.altKey&&e.shiftKey,keywords:["png","clipboard","copy"]}),sd=U({name:"copyText",label:"labels.copyText",trackEvent:{category:"element"},perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0});try{kr(cc(n))}catch{throw new Error(h("errors.copyToSystemClipboardFailed"))}return{captureUpdate:R.EVENTUALLY}},predicate:(e,o,t,r)=>bu&&r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0}).some(j),keywords:["text","clipboard","copy"]});var Ma=U({name:"gridMode",icon:h1,keywords:["snap"],label:"labels.toggleGrid",viewMode:!0,trackEvent:{category:"canvas",predicate:e=>e.gridModeEnabled},perform(e,o){return{appState:{...o,gridModeEnabled:!this.checked(o),objectsSnapModeEnabled:!1},captureUpdate:R.EVENTUALLY}},checked:e=>e.gridModeEnabled,predicate:(e,o,t)=>t.gridModeEnabled===void 0,keyTest:e=>e[I.CTRL_OR_CMD]&&e.code===he.QUOTE});var On=U({name:"zenMode",label:"buttons.zenMode",icon:m1,viewMode:!0,trackEvent:{category:"canvas",predicate:e=>!e.zenModeEnabled},perform(e,o){return{appState:{...o,zenModeEnabled:!this.checked(o)},captureUpdate:R.EVENTUALLY}},checked:e=>e.zenModeEnabled,predicate:(e,o,t,r)=>r.editorInterface.formFactor!=="phone"&&typeof t.zenModeEnabled>"u",keyTest:e=>!e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.Z});var Yl=U({name:"objectsSnapMode",label:"buttons.objectsSnapMode",icon:d1,viewMode:!1,trackEvent:{category:"canvas",predicate:e=>!e.objectsSnapModeEnabled},perform(e,o){return{appState:{...o,objectsSnapModeEnabled:!this.checked(o),gridModeEnabled:!1},captureUpdate:R.EVENTUALLY}},checked:e=>e.objectsSnapModeEnabled,predicate:(e,o,t)=>typeof t.objectsSnapModeEnabled>"u",keyTest:e=>!e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.S});var Kl=U({name:"arrowBinding",label:"labels.arrowBinding",viewMode:!1,trackEvent:{category:"canvas",predicate:e=>e.bindingPreference==="disabled"},perform(e,o){let t=o.bindingPreference==="enabled"?"disabled":"enabled";return{appState:{...o,bindingPreference:t,isBindingEnabled:t==="enabled"},captureUpdate:R.NEVER}},checked:e=>e.bindingPreference==="enabled"});var Xl=U({name:"midpointSnapping",label:"labels.midpointSnapping",viewMode:!1,trackEvent:{category:"canvas",predicate:e=>!e.isMidpointSnappingEnabled},perform(e,o){return{appState:{...o,isMidpointSnappingEnabled:!this.checked(o)},captureUpdate:R.NEVER}},checked:e=>e.isMidpointSnappingEnabled});var Fn=U({name:"stats",label:"stats.fullTitle",icon:i1,viewMode:!0,trackEvent:{category:"menu"},keywords:["edit","attributes","customize"],perform(e,o){return{appState:{...o,stats:{...o.stats,open:!this.checked(o)}},captureUpdate:R.EVENTUALLY}},checked:e=>e.stats.open,keyTest:e=>!e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.SLASH});var Du=U({name:"unbindText",label:"labels.unbindText",trackEvent:{category:"element"},predicate:(e,o,t,r)=>r.scene.getSelectedElements(o).some(i=>zt(i)),perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o),i=r.scene.getNonDeletedElementsMap();return n.forEach(a=>{let l=we(a,i);if(l){let{width:s,height:c}=it(l.originalText,ct(l),l.lineHeight),d=Hy(a.id);zy(a.id);let{x:p,y:m}=ii(a,l,i);r.scene.mutateElement(l,{containerId:null,width:s,height:c,text:l.originalText,x:p,y:m}),r.scene.mutateElement(a,{boundElements:a.boundElements?.filter(u=>u.id!==l.id),height:d||a.height})}}),{elements:e,appState:o,captureUpdate:R.IMMEDIATELY}}}),Ru=U({name:"bindText",label:"labels.bindText",trackEvent:{category:"element"},predicate:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o);if(n.length===2){let i=j(n[0])||j(n[1]),a;if(En(n[0])?a=n[0]:En(n[1])&&(a=n[1]),i&&a&&we(a,r.scene.getNonDeletedElementsMap())===null)return!0}return!1},perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o),i,a;j(n[0])&&En(n[1])?(i=n[0],a=n[1]):(i=n[1],a=n[0]),r.scene.mutateElement(i,{containerId:a.id,verticalAlign:Vo.MIDDLE,textAlign:Ng.CENTER,autoResize:!0,angle:ve(a)?0:a?.angle??0}),r.scene.mutateElement(a,{boundElements:(a.boundElements||[]).concat({type:"text",id:i.id})});let l=a.height;return It(i,a,r.scene),nc(a.id,l),{elements:AA(e,a,i),appState:{...o,selectedElementIds:{[a.id]:!0}},captureUpdate:R.IMMEDIATELY}}}),AA=(e,o,t)=>{let r=e.slice(),n=r.findIndex(a=>a.id===t.id);r.splice(n,1);let i=r.findIndex(a=>a.id===o.id);return r.splice(i+1,0,t),Hr(r,ne([o,t])),r},LA=(e,o,t)=>{let r=e.slice(),n=r.findIndex(a=>a.id===o.id);r.splice(n,1);let i=r.findIndex(a=>a.id===t.id);return r.splice(i,0,o),Hr(r,ne([o,t])),r},QT=U({name:"wrapTextInContainer",label:"labels.createContainerFromText",trackEvent:{category:"element"},predicate:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o),i=n.some(a=>j(a)&&!xt(a));return n.length>0&&i},perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o),i=e.slice(),a={};for(let l of n)if(j(l)&&!xt(l)){let s=Co({type:"rectangle",backgroundColor:o.currentItemBackgroundColor,boundElements:[...l.boundElements||[],{id:l.id,type:"text"}],angle:l.angle,fillStyle:o.currentItemFillStyle,strokeColor:o.currentItemStrokeColor,roughness:o.currentItemRoughness,strokeWidth:Br("rectangle",o.currentItemStrokeWidthKey),strokeStyle:o.currentItemStrokeStyle,roundness:o.currentItemRoundness==="round"?{type:ni("rectangle")?Mt.ADAPTIVE_RADIUS:Mt.PROPORTIONAL_RADIUS}:null,opacity:100,locked:!1,x:l.x-Rg,y:l.y-Rg,width:ol(l.width,"rectangle"),height:ol(l.height,"rectangle"),groupIds:l.groupIds,frameId:l.frameId});if(l.boundElements?.length){let c=l.boundElements.filter(p=>p.type==="arrow").map(p=>p.id);i.filter(p=>c.includes(p.id)).forEach(p=>{let m=p.startBinding,u=p.endBinding;m?.elementId===l.id&&(m={...m,elementId:s.id}),u?.elementId===l.id&&(u={...u,elementId:s.id}),(m||u)&&r.scene.mutateElement(p,{startBinding:m,endBinding:u})})}r.scene.mutateElement(l,{containerId:s.id,verticalAlign:Vo.MIDDLE,boundElements:null,textAlign:Ng.CENTER,autoResize:!0}),It(l,s,r.scene),i=LA([...i,s],s,l),a[s.id]=!0}return{elements:i,appState:{...o,selectedElementIds:a},captureUpdate:R.IMMEDIATELY}}});import _A from"clsx";import{useCallback as eC,useEffect as tC,useLayoutEffect as PA,useRef as DA,useState as RA}from"react";import{jsx as Zl,jsxs as oC}from"react/jsx-runtime";var i0=380,NA=42,r0=5,rC=85,OA=500,n0=!1,Nu=new Map,nC=({element:e,scene:o,setAppState:t,onLinkOpen:r,setToast:n,updateEmbedValidationStatus:i})=>{let a=o.getNonDeletedElementsMap(),l=jr(),s=Sr(),c=Me(),d=e.link||"",[p,m]=RA(d),u=DA(null),b=l.showHyperlinkPopup==="editor",f=eC(()=>{if(!u.current)return;let w=vr(u.current.value)||null;if(!e.link&&w&&xe("hyperlink","create"),ao(e)){if(l.activeEmbeddable?.element===e&&t({activeEmbeddable:null}),!w){o.mutateElement(e,{link:null}),i(e,!1);return}if(!cl(w,s.validateEmbeddable))w&&n({message:h("toast.unableToEmbed"),closable:!0}),e.link&&Nu.set(e.id,e.link),o.mutateElement(e,{link:w}),i(e,!1);else{let{width:T,height:S}=e,_=da(w);_?.error instanceof URIError&&n({message:h("toast.unrecognizedLinkFormat"),closable:!0});let M=_?_.intrinsicSize.w/_.intrinsicSize.h:1,N=Nu.get(e.id)!==e.link;o.mutateElement(e,{...N?{width:_?.type==="video"?T>S?T:S*M:T,height:_?.type==="video"&&T>S?T/M:S}:{},link:w}),i(e,!0),Nu.has(e.id)&&Nu.delete(e.id)}}else o.mutateElement(e,{link:w})},[e,o,n,s.validateEmbeddable,l.activeEmbeddable,t,i]);PA(()=>()=>{f()},[f]),tC(()=>{b&&u?.current&&!(c.formFactor==="phone"||c.isTouchScreen)&&u.current.select()},[b,c.formFactor,c.isTouchScreen]),tC(()=>{let w=null,T=S=>{if(b)return;w&&clearTimeout(w),BA(e,a,l,A(S.clientX,S.clientY))&&(w=window.setTimeout(()=>{t({showHyperlinkPopup:!1})},OA))};return window.addEventListener("pointermove",T,!1),()=>{window.removeEventListener("pointermove",T,!1),w&&clearTimeout(w)}},[l,e,b,t,a]);let x=eC(()=>{xe("hyperlink","delete"),o.mutateElement(e,{link:null}),t({showHyperlinkPopup:!1})},[t,e,o]),v=()=>{xe("hyperlink","edit","popup-ui"),t({showHyperlinkPopup:"editor"})},{x:y,y:E}=iC(e,l,a);return l.contextMenu||l.selectedElementsAreBeingDragged||l.resizingElement||l.isRotating||l.openMenu||l.viewModeEnabled?null:oC("div",{className:"excalidraw-hyperlinkContainer",style:{top:`${E}px`,left:`${y}px`,width:i0,padding:r0},children:[b?Zl("input",{className:_A("excalidraw-hyperlinkContainer-input"),placeholder:h("labels.link.hint"),ref:u,value:p,onChange:w=>m(w.target.value),autoFocus:!0,onKeyDown:w=>{w.stopPropagation(),w[I.CTRL_OR_CMD]&&w.key===I.K&&w.preventDefault(),(w.key===I.ENTER||w.key===I.ESCAPE)&&(f(),t({showHyperlinkPopup:"info"}))}}):e.link?Zl("a",{href:vr(e.link||""),className:"excalidraw-hyperlinkContainer-link",target:Em(e.link)?"_self":"_blank",onClick:w=>{if(e.link&&r){let T=fm("excalidraw-link",w.nativeEvent);r({...e,link:vr(e.link)},T),T.defaultPrevented&&w.preventDefault()}},rel:"noopener noreferrer",children:e.link}):Zl("div",{className:"excalidraw-hyperlinkContainer-link",children:h("labels.link.empty")}),oC("div",{className:"excalidraw-hyperlinkContainer__buttons",children:[!b&&Zl(q,{type:"button",title:h("buttons.edit"),"aria-label":h("buttons.edit"),label:h("buttons.edit"),onClick:v,className:"excalidraw-hyperlinkContainer--edit",icon:Sn}),Zl(q,{type:"button",title:h("labels.linkToElement"),"aria-label":h("labels.linkToElement"),label:h("labels.linkToElement"),onClick:()=>{t({openDialog:{name:"elementLinkSelector",sourceElementId:e.id}})},icon:Uc}),d&&!ao(e)&&Zl(q,{type:"button",title:h("buttons.remove"),"aria-label":h("buttons.remove"),label:h("buttons.remove"),onClick:x,className:"excalidraw-hyperlinkContainer--remove",icon:Kt})]})]})},iC=(e,o,t)=>{let[r,n]=Yt(e,t),{x:i,y:a}=Ot({sceneX:r+e.width/2,sceneY:n},o),l=i-o.offsetLeft-i0/2,s=a-o.offsetTop-rC;return{x:l,y:s}},a0=(e,o)=>{let t=ie(e,o);return ao(t[0])?"labels.link.editEmbed":t[0]?.link?"labels.link.edit":"labels.link.create"},cd=null,aC=(e,o,t)=>{cd&&clearTimeout(cd),cd=window.setTimeout(()=>FA(e,o,t),FE)},FA=(e,o,t)=>{if(!e.link)return;let r=Rl();r.classList.add("excalidraw-tooltip--visible"),r.style.maxWidth="20rem",r.textContent=ca(e.link)?h("labels.link.goToElement"):e.link;let[n,i,a,l]=Yt(e,t),[s,c,d,p]=Aw([n,i,a,l],e.angle,o),m=Ot({sceneX:s,sceneY:c},o);j1(r,{left:m.x,top:m.y,width:d,height:p},"top"),xe("hyperlink","tooltip","link-icon"),n0=!0},Ou=()=>{cd&&clearTimeout(cd),n0&&(n0=!1,Rl().classList.remove("excalidraw-tooltip--visible"))},BA=(e,o,t,[r,n])=>{let{x:i,y:a}=ze({clientX:r,clientY:n},t),l=15/t.zoom.value;if(Mm(A(i,a),e,o))return!1;let[s,c,d]=Yt(e,o);if(i>=s&&i<=d&&a>=c-rC&&a<=c)return!1;let{x:p,y:m}=iC(e,t,o);return!(r>=p-l&&r<=p+i0+r0*2+l&&n>=m-l&&n<=m+l+r0*2+NA)};import{jsx as zA}from"react/jsx-runtime";var $l=U({name:"hyperlink",label:(e,o)=>a0(de(e),o),icon:Il,perform:(e,o)=>o.showHyperlinkPopup==="editor"?!1:{elements:e,appState:{...o,showHyperlinkPopup:"editor",openMenu:null},captureUpdate:R.IMMEDIATELY},trackEvent:{category:"hyperlink",action:"click"},keyTest:e=>e[I.CTRL_OR_CMD]&&e.key===I.K,predicate:(e,o)=>ie(e,o).length===1,PanelComponent:({elements:e,appState:o,updateData:t})=>{let r=ie(e,o);return zA(q,{type:"toggle",icon:Il,"aria-label":h(a0(de(e),o)),title:`${ao(e[0])?h("labels.link.labelEmbed"):h("labels.link.label")} - ${H("CtrlOrCmd+K")}`,onSelect:()=>t(null),checked:r.length===1&&!!r[0].link})}});var l0=e=>e.every(o=>!o.locked),jl=U({name:"toggleElementLock",label:(e,o,t)=>{let r=t.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!1});return l0(r)?"labels.elementLock.lock":"labels.elementLock.unlock"},icon:(e,o)=>{let t=ie(o,e);return l0(t)?ha:gi},trackEvent:{category:"element"},predicate:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o);return n.length>0&&!n.some(i=>i.locked&&i.frameId)},perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});if(!n.length)return!1;let i=l0(n),a=ne(n),l=n.length>1&&Pm(n),c=n.length===1||l?null:vo(),d={...o.lockedMultiSelections};if(i)d={...o.lockedMultiSelections,...c?{[c]:!0}:{}};else if(l){let v=n[0].groupIds.at(-1);delete d[v]}let p=e.map(v=>{if(!a.has(v.id))return v;let y=v.groupIds;return i?c&&(y=[...y,c]):y=y.filter(E=>!o.lockedMultiSelections[E]),se(v,{locked:i,groupIds:y.length!==v.groupIds.length?y:v.groupIds})}),m=ne(p),u=i?{}:Object.fromEntries(n.map(v=>[v.id,!0])),b=n.map(v=>m.get(v.id)||v),f=i?{}:ia(de(b),o),x=i?c||(l?n[0].groupIds.at(-1):n[0].id):null;return{elements:p,appState:{...o,selectedElementIds:u,selectedGroupIds:f,selectedLinearElement:i?null:o.selectedLinearElement,lockedMultiSelections:d,activeLockedId:x},captureUpdate:R.IMMEDIATELY}},keyTest:(e,o,t,r)=>e.key.toLocaleLowerCase()===I.L&&e[I.CTRL_OR_CMD]&&e.shiftKey&&r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!1}).length>0}),lC=U({name:"unlockAllElements",trackEvent:{category:"canvas"},viewMode:!1,icon:gi,predicate:(e,o)=>ie(e,o).length===0&&e.some(r=>r.locked),perform:(e,o)=>{let t=e.filter(l=>l.locked),r=e.map(l=>{if(l.locked){let s=l.groupIds.filter(c=>!o.lockedMultiSelections[c]);return se(l,{locked:!1,groupIds:l.groupIds.length!==s.length?s:l.groupIds})}return l}),n=ne(r),i=t.map(l=>n.get(l.id)||l),a=de(i);return{elements:r,appState:{...o,selectedElementIds:Object.fromEntries(a.map(l=>[l.id,!0])),selectedGroupIds:ia(a,o),lockedMultiSelections:{},activeLockedId:null},captureUpdate:R.IMMEDIATELY}},label:"labels.elementLock.unlockAll"});import FI from"clsx";import J_ from"fuzzy";import{useEffect as nh,useRef as BI,useMemo as Q_,useState as rh}from"react";import{useEffect as pd,useMemo as sC,useRef as c0,useState as HA}from"react";import{jsx as p0}from"react/jsx-runtime";var UA=8,GA=10,dd=["rectangle","diamond","ellipse"],md=["line","sharpArrow","curvedArrow","elbowArrow"],WA=new Set(dd),VA=new Set(md),Jl=e=>WA.has(e),Bu=e=>e==="arrow"||VA.has(e),rr=Ce(null),ud=new Map,hd=new Map,YA=({app:e})=>{let o=e.scene.getSelectedElements(e.state),t=c0(null);return pd(()=>{if(o.length===0){e.updateEditorAtom(rr,null);return}let r=Ql(o);r&&!t.current?t.current=r:(t.current&&!r||t.current&&r!==t.current)&&(e.updateEditorAtom(rr,null),t.current=null)},[o,e]),pd(()=>()=>{ud.clear(),hd.clear()},[]),p0(KA,{app:e,elements:o})},KA=({app:e,elements:o})=>{let t=Ql(o),r=sC(()=>t==="generic"?pC(o):[],[t,o]),n=sC(()=>t==="linear"?m0(o):[],[t,o]),i=t==="generic"?r.every(p=>p.type===r[0].type):t==="linear"?n.every(p=>ra(p)===ra(n[0])):!1,[a,l]=HA({x:0,y:0}),s=c0(""),c=c0(null);pd(()=>{let p=[...r,...n].sort((x,v)=>x.id.localeCompare(v.id)),m=`
|
|
5
|
-
${e.state.scrollX}${e.state.scrollY}${e.state.offsetTop}${e.state.offsetLeft}${e.state.zoom.value}${p.map(x=>x.id).join(",")}`;if(m===s.current)return;s.current=m;let u;if(p.length===1){let[x,,,v,y,E]=Yt(p[0],e.scene.getNonDeletedElementsMap());u=ke(A(x,v),A(y,E),p[0].angle)}else{let{minX:x,maxY:v}=wn(p);u=A(x,v)}let{x:b,y:f}=Ot({sceneX:u[0],sceneY:u[1]},e.state);l({x:b,y:f})},[r,n,e.scene,e.state]),pd(()=>{for(let p of n){let m=d0(p.id,qA(p));hd.has(m)||hd.set(m,p)}},[n]),pd(()=>{for(let p of r)if(!ud.has(p.id)){let m=we(p,e.scene.getNonDeletedElementsMap());m&&ud.set(p.id,{fontSize:m.fontSize})}},[r,e.scene]);let d=t==="linear"?[["line",ga],["sharpArrow",An],["curvedArrow",_n],["elbowArrow",Ln]]:t==="generic"?[["rectangle",Ac],["diamond",Lc],["ellipse",_c]]:[];return p0("div",{ref:c,tabIndex:-1,style:{position:"absolute",top:`${a.y+(GA+8)*e.state.zoom.value-e.state.offsetTop}px`,left:`${a.x-e.state.offsetLeft-UA}px`,zIndex:2},className:qe.CONVERT_ELEMENT_TYPE_POPUP,children:d.map(([p,m])=>{let u=i&&(t==="generic"&&r[0].type===p||t==="linear"&&ra(n[0])===p);return p0(q,{type:"toggle",icon:m,checked:u,title:p,"aria-label":p,"data-testid":`toolbar-${p}`,onSelect:()=>{u||(e.state.activeTool.type!==p&&xe("convertElementType",p,"ui"),u0(e,{conversionType:t,nextType:p}),c.current?.focus())}},`${o[0].id}${o[0].version}_${p}`)})})},XA=(e,o,t)=>{let r=sc(e,o),n=km(e,o),i=yn(o.text,ct(o),r),a=it(i,ct(o),o.lineHeight),l=o.fontSize;for(;(a.width>r||a.height>n)&&l>0;){l-=1;let s={...o,fontSize:l};a=it(o.text,ct(s),o.lineHeight)}lo(o,t.getNonDeletedElementsMap(),{fontSize:l,width:a.width,height:a.height}),It(o,e,t)},u0=(e,{conversionType:o,nextType:t,direction:r="right"})=>{if(!o)return!1;let n=e.scene.getSelectedElements(e.state),i=n.reduce((l,s)=>({...l,[s.id]:!0}),{}),a=r==="right"?1:-1;if(o==="generic"){let l=pC(n),c=l.every(d=>d.type===l[0].type)?dd.indexOf(l[0].type):-1;if(t=t??dd[(c+dd.length+a)%dd.length],t&&Jl(t)){let d={};for(let m of l){let u=dC(m,t,e);d[u.id]=u}let p=[];for(let m of e.scene.getElementsIncludingDeleted())d[m.id]?p.push(d[m.id]):p.push(m);e.scene.replaceAllElements(p);for(let m of Object.values(d)){let u=we(m,e.scene.getNonDeletedElementsMap());u&&(ud.get(m.id)&&lo(u,e.scene.getNonDeletedElementsMap(),{fontSize:ud.get(m.id)?.fontSize??u.fontSize}),XA(m,u,e.scene))}e.setState(m=>({selectedElementIds:i,activeTool:gt(m,{type:"selection"})}))}}if(o==="linear"){let l=m0(n);if(!t){let c=xm(l,ra),d=c?md.indexOf(c):-1;t=md[(d+md.length+a)%md.length]}if(Bu(t)){let c=[],d=e.scene.getElementsMapIncludingDeleted();for(let p of l){let m=hd.get(d0(p.id,t));if(m&&ra(m)===t)d.set(m.id,m),c.push(m);else{let u=dC(p,t,e);d.set(u.id,u),c.push(u)}}e.scene.replaceAllElements(d);for(let p of c)if(Se(p))if(Re(p)){let m=ZA(p);if(m.length<2)continue;let u=[];for(let f=1;f<m.length-2;f++)u.push({start:m[f],end:m[f+1],index:f+1});let b=Am(p,e.scene.getNonDeletedElementsMap(),{points:m,fixedSegments:u});lo(p,e.scene.getNonDeletedElementsMap(),{...b,endArrowhead:"arrow"})}else{let m=uy(["line","sharpArrow","curvedArrow"],u=>hd.get(d0(p.id,u)));if(m){let u=m.points;e.scene.mutateElement(p,{points:u})}}}let s=m0(e.scene.getSelectedElements(e.state));e.setState(c=>({selectedElementIds:i,selectedLinearElement:s.length===1?new Z(s[0],e.scene.getNonDeletedElementsMap()):null,activeTool:gt(c,{type:"selection"})}))}return!0},Ql=e=>{if(e.length===0)return null;let o=!1;for(let t of e){if(Jl(t.type))return"generic";mC(t)&&(o=!0)}return o?"linear":null},mC=e=>Se(e)&&(!ve(e)||!_y(e)&&!zt(e)),d0=(e,o)=>`${e}:${o}`,pC=e=>e.filter(o=>Jl(o.type)),m0=e=>e.filter(o=>mC(o)),Fu=20,ql=(e,o)=>e[0]===o[0],s0=(e,o)=>e[1]===o[1],cC=(e,o)=>ql(e,o)?Math.abs(e[1]-o[1]):Math.abs(e[0]-o[0]),ZA=e=>{let o=[e.points[0]],t=$A(e.points);for(let i=1;i<t.length;++i){let a=o[o.length-1],l=[...t[i]];Math.abs(l[0]-a[0])<Fu?l[0]=a[0]:Math.abs(l[1]-a[1])<Fu&&(l[1]=a[1]),ql(a,l)||s0(a,l)||o.push(A(a[0],l[1])),o.push(l)}let r=[o[0]];for(let i=1;i<o.length-1;++i)ql(o[i-1],o[i])&&ql(o[i],o[i+1])||s0(o[i-1],o[i])&&s0(o[i],o[i+1])||r.push(o[i]);r.push(o[o.length-1]);let n=[r[0]];for(let i=1;i<r.length-1;++i){let a=n[n.length-1],l=r[i],s=r[i+1],c=ql(a,l),d=ql(l,s);if(c!==d){let p=cC(a,l),m=cC(l,s);if(p<Fu||m<Fu){if(m<p)c?s[0]=a[0]:s[1]=a[1];else if(d)for(let u=n.length-1;u>=0&&n[u][0]===a[0];--u)n[u][0]=l[0];else for(let u=n.length-1;u>=0&&n[u][1]===a[1];--u)n[u][1]=l[1];continue}}n.push(l)}return n.push(r[r.length-1]),n},$A=e=>{if(e.length===0)return[];let o=[e[0]];for(let t=1;t<e.length;t++){let[r,n]=o[o.length-1],[i,a]=e[t];(r!==i||n!==a)&&o.push(e[t])}return o},dC=(e,o,t)=>{if(!jA(e.type,o)){if(!Ey())throw Error(`Invalid conversion from ${e.type} to ${o}.`);return e}if(e.type===o)return e;if(qo.delete(e),Jl(o)){let r=vn(Co({...e,type:o,roundness:e.roundness?{type:ni(o)?Mt.ADAPTIVE_RADIUS:Mt.PROPORTIONAL_RADIUS}:e.roundness}));return ci(r,t.scene,t.state),r}if(Bu(o))switch(o){case"line":return vn(eo({...e,type:"line"}));case"sharpArrow":return vn(mi({...e,type:"arrow",elbowed:!1,roundness:null,startArrowhead:t.state.currentItemStartArrowhead,endArrowhead:t.state.currentItemEndArrowhead}));case"curvedArrow":return vn(mi({...e,type:"arrow",elbowed:!1,roundness:{type:Mt.PROPORTIONAL_RADIUS},startArrowhead:t.state.currentItemStartArrowhead,endArrowhead:t.state.currentItemEndArrowhead}));case"elbowArrow":return vn(mi({...e,type:"arrow",elbowed:!0,fixedSegments:null,roundness:null}))}return vy(o,`unhandled conversion type: ${o}`),e},jA=(e,o)=>!!(Jl(e)&&Jl(o)||Bu(e)&&Bu(o)),qA=e=>Se(e)?ra(e):e.type,uC=YA;var hC=U({name:"toggleShapeSwitch",label:"labels.shapeSwitch",icon:()=>null,viewMode:!0,trackEvent:{category:"shape_switch",action:"toggle"},keywords:["change","switch","swap"],perform(e,o,t,r){return St.set(rr,{type:"panel"}),{captureUpdate:R.NEVER}},checked:e=>e.gridModeEnabled,predicate:(e,o,t)=>Ql(e)!==null});var zu=U({name:"copyElementLink",label:"labels.copyElementLink",icon:xa,trackEvent:{category:"element"},perform:async(e,o,t,r)=>{let n=ie(e,o);try{if(window.location){let i=Km(n,o);return i?(await kr(r.props.generateLinkForSelection?r.props.generateLinkForSelection(i.id,i.type):Ym(i.id,i.type)),{appState:{toast:{message:h("toast.elementLinkCopied"),closable:!0}},captureUpdate:R.EVENTUALLY}):{appState:o,elements:e,app:r,captureUpdate:R.EVENTUALLY}}}catch(i){console.error(i)}return{appState:o,elements:e,app:r,captureUpdate:R.EVENTUALLY}},predicate:(e,o)=>Xm(ie(e,o))}),gC=U({name:"linkToElement",label:"labels.linkToElement",icon:Uc,perform:(e,o,t,r)=>{let n=ie(e,o);return n.length!==1||!Xm(n)?{elements:e,appState:o,app:r,captureUpdate:R.EVENTUALLY}:{appState:{...o,openDialog:{name:"elementLinkSelector",sourceElementId:ie(e,o)[0].id}},captureUpdate:R.IMMEDIATELY}},predicate:(e,o,t,r)=>{let n=ie(e,o);return o.openDialog?.name!=="elementLinkSelector"&&n.length===1&&Xm(n)},trackEvent:!1});var JA={toggleTheme:[H("Shift+Alt+D")],saveScene:[H("CtrlOrCmd+S")],loadScene:[H("CtrlOrCmd+O")],clearCanvas:[H("CtrlOrCmd+Delete")],imageExport:[H("CtrlOrCmd+Shift+E")],commandPalette:[H("CtrlOrCmd+/"),H("CtrlOrCmd+Shift+P")],cut:[H("CtrlOrCmd+X")],copy:[H("CtrlOrCmd+C")],paste:[H("CtrlOrCmd+V")],copyStyles:[H("CtrlOrCmd+Alt+C")],pasteStyles:[H("CtrlOrCmd+Alt+V")],selectAll:[H("CtrlOrCmd+A")],deleteSelectedElements:[H("Delete")],duplicateSelection:[H("CtrlOrCmd+D"),H(`Alt+${h("helpDialog.drag")}`)],sendBackward:[H("CtrlOrCmd+[")],bringForward:[H("CtrlOrCmd+]")],sendToBack:[yo?H("CtrlOrCmd+Alt+["):H("CtrlOrCmd+Shift+[")],bringToFront:[yo?H("CtrlOrCmd+Alt+]"):H("CtrlOrCmd+Shift+]")],copyAsPng:[H("Shift+Alt+C")],group:[H("CtrlOrCmd+G")],ungroup:[H("CtrlOrCmd+Shift+G")],gridMode:[H("CtrlOrCmd+'")],zenMode:[H("Alt+Z")],objectsSnapMode:[H("Alt+S")],stats:[H("Alt+/")],addToLibrary:[],flipHorizontal:[H("Shift+H")],flipVertical:[H("Shift+V")],viewMode:[H("Alt+R")],hyperlink:[H("CtrlOrCmd+K")],toggleElementLock:[H("CtrlOrCmd+Shift+L")],resetZoom:[H("CtrlOrCmd+0")],zoomOut:[H("CtrlOrCmd+-")],zoomIn:[H("CtrlOrCmd++")],zoomToFitSelection:[H("Shift+3")],zoomToFit:[H("Shift+1")],zoomToFitSelectionInViewport:[H("Shift+2")],saveFileToDisk:[H("CtrlOrCmd+S")],saveToActiveFile:[H("CtrlOrCmd+S")],toggleShortcuts:[H("?")],searchMenu:[H("CtrlOrCmd+F")],wrapSelectionInFrame:[],toolLock:[H("Q")]},tt=(e,o=0)=>{let t=JA[e];return t&&t.length>0?t[o]||t[0]:""};var QA="\\u0300-\\u036f",eL="\\ufe20-\\ufe2f",tL="\\u20d0-\\u20ff",oL=QA+eL+tL,rL=`[${oL}]`,nL=RegExp(rL,"g"),iL=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,aL={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"E",\u00E6:"e",\u00DE:"T",\u00FE:"t",\u00DF:"s",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"I",\u0133:"i",\u0152:"E",\u0153:"e",\u0149:"n",\u017F:"s"},Aa=e=>e.replace(iL,o=>aL[o]||o).replace(nL,"");import G_ from"clsx";import{useEffect as W_,useState as V_}from"react";import{useCallback as lL,useState as sL}from"react";var fC=()=>{let[e,o]=sL(null),t=lL(r=>o(r),[]);return[e,t]};import{useState as hI,useCallback as L0,useMemo as gI,useEffect as _0,memo as fI,useRef as N_}from"react";import{useEffect as yC,useRef as vC}from"react";var es=async({data:e,config:o})=>fl({data:e,config:o}),bC=async({data:e,config:o})=>{let{mimeType:t=ge.png,quality:r}=o||{};t===ge.png&&typeof r=="number"&&console.warn(`"quality" will be ignored for "${ge.png}" mimeType`),t==="image/jpg"&&(t=ge.jpg),t===ge.jpg&&o?.canvasBackgroundColor===!1&&(console.warn(`Defaulting "exportBackground" to "true" for "${ge.jpg}" mimeType`),o={...o,canvasBackgroundColor:e.appState?.viewBackgroundColor||Ro});let n=await fl({data:e,config:o});return r=r||(/image\/jpe?g/.test(t)?.92:.8),new Promise((i,a)=>{n.toBlob(async l=>{if(!l)return a(new Error("couldn't export to blob"));l&&t===ge.png&&e.appState?.exportEmbedScene&&(l=await Rw({blob:l,metadata:wc(e.elements,e.appState,e.files||{},"local")})),i(l)},t,r)})},ts=async({data:e,config:o})=>{let t=gl(e.elements,null,{deleteInvisibleElements:!0}),n={...Ic(e.appState,null),exportPadding:o?.padding},i=de(t),a=e.files||{};return pa({data:{elements:i,appState:n,files:a},config:{exportingFrame:o?.exportingFrame,renderEmbeddables:o?.renderEmbeddables,skipInliningFonts:o?.skipInliningFonts,reuseImages:o?.reuseImages}})},cL=async({type:e,data:o,config:t})=>{if(e==="svg"){let r=await ts({data:o,config:t});await kr(r.outerHTML)}else if(e==="png")await yu(bC({data:o,config:t}));else if(e==="json")await xu(o.elements,o.files);else throw new Error("Invalid export type")};import{useEffect as xC,useState as dL}from"react";var h0=Ce(new Map),EC=async e=>await ts({data:{elements:e,appState:{exportBackground:!1,viewBackgroundColor:Er.white},files:null},config:{renderEmbeddables:!1,skipInliningFonts:!0}}),Hu=(e,o,t,r)=>{let[n,i]=dL();return xC(()=>{if(o)if(e){let a=t.get(e);a?i(a):(async()=>{let l=await EC(o);l.querySelector(".style-fonts")?.remove(),l&&(t.set(e,l),i(l))})()}else(async()=>{let a=await EC(o);i(a)})()},[e,o,t,i]),xC(()=>{let a=r.current;if(a)return n&&(a.innerHTML=n.outerHTML),()=>{a.innerHTML=""}},[n,r]),n},os=()=>{let[e]=re(h0);return{clearLibraryCache:()=>e.clear(),deleteItemsFromLibraryCache:r=>{r.forEach(n=>e.delete(n))},svgCache:e}};var mL=["excalidraw.com","raw.githubusercontent.com/excalidraw/excalidraw-libraries"],TC=new Xo,on=Ce({status:"loaded",isInitialized:!1,libraryItems:[]}),gd=e=>yr(e),pL=(e,o)=>!e.find(t=>t.elements.length!==o.elements.length?!1:t.elements.every((r,n)=>r.id===o.elements[n].id&&r.versionNonce===o.elements[n].versionNonce)),CC=(e,o)=>{let t=[];for(let r of o)pL(e,r)&&t.push(r);return[...t,...e]},IC=(e,o)=>{let t=ne(o),r={deletedItems:new Map,addedItems:new Map,updatedItems:new Map};for(let i of e)t.has(i.id)||r.deletedItems.set(i.id,i);let n=ne(e);for(let i of o){let a=n.get(i.id);a?b0(a)!==b0(i)&&r.updatedItems.set(i.id,i):r.addedItems.set(i.id,i)}return r},g0=class{constructor(o){C(this,"currLibraryItems",[]);C(this,"prevLibraryItems",gd(this.currLibraryItems));C(this,"app");C(this,"updateQueue",[]);C(this,"getLastUpdateTask",()=>this.updateQueue[this.updateQueue.length-1]);C(this,"notifyListeners",()=>{if(this.updateQueue.length>0)St.set(on,o=>({status:"loading",libraryItems:this.currLibraryItems,isInitialized:o.isInitialized}));else{St.set(on,{status:"loaded",libraryItems:this.currLibraryItems,isInitialized:!0});try{let o=this.prevLibraryItems;this.prevLibraryItems=gd(this.currLibraryItems);let t=gd(this.currLibraryItems);this.app.props.onLibraryChange?.(t),TC.trigger(IC(o,t),t)}catch(o){console.error(o)}}});C(this,"destroy",()=>{this.updateQueue=[],this.currLibraryItems=[],St.set(h0,new Map)});C(this,"resetLibrary",()=>this.setLibrary([]));C(this,"getLatestLibrary",()=>new Promise(async o=>{try{let t=await(this.getLastUpdateTask()||this.currLibraryItems);this.updateQueue.length>0?o(this.getLatestLibrary()):o(gd(t))}catch{return o(this.currLibraryItems)}}));C(this,"updateLibrary",async({libraryItems:o,prompt:t=!1,merge:r=!1,openLibraryMenu:n=!1,defaultStatus:i="unpublished"})=>(n&&this.app.setState({openSidebar:{name:no.name,tab:Zs}}),this.setLibrary(()=>new Promise(async(a,l)=>{try{let s=await(typeof o=="function"&&!(o instanceof Blob)?o(this.currLibraryItems):o),c;s instanceof Blob?c=await kf(s,i):c=Sc(s,i),!t||window.confirm(h("alerts.confirmAddLibrary",{numShapes:c.length}))?(t&&this.app.focusContainer(),a(r?CC(this.currLibraryItems,c):c)):l(new ul)}catch(s){l(s)}}))));C(this,"setLibrary",o=>{let t=new Promise(async(r,n)=>{try{await this.getLastUpdateTask(),typeof o=="function"&&(o=o(this.currLibraryItems)),this.currLibraryItems=gd(await o),r(this.currLibraryItems)}catch(i){n(i)}}).catch(r=>{if(r.name==="AbortError")return console.warn("Library update aborted by user"),this.currLibraryItems;throw r}).finally(()=>{this.updateQueue=this.updateQueue.filter(r=>r!==t),this.notifyListeners()});return this.updateQueue.push(t),this.notifyListeners(),t});this.app=o}},SC=g0,ns=e=>{let t=Math.ceil(Math.sqrt(e.length)),r=[],n=u=>e.slice(u*t,u*t+t).reduce((f,x)=>{let{height:v}=wn(x.elements);return Math.max(f,v)},0),i=u=>{let b=0,f=0,x=0;for(let v of e){if(b%t===0&&(f=0),f===u){let{width:y}=wn(v.elements);x=Math.max(x,y)}b++,f++}return x},a=0,l=0,s=0,c=0,d=0,p=0,m=0;for(let u of e){d&&d%t===0&&(l+=s+50,a=0,p=0,m++),p===0&&(s=n(m)),c=i(p);let{minX:b,minY:f,width:x,height:v}=wn(u.elements),y=(c-x)/2,E=(s-v)/2;r.push(...u.elements.map(w=>({...w,x:w.x+a+y-b,y:w.y+l+E-f}))),a+=c+50,d++,p++}return r},uL=(e,o=mL)=>{if(typeof o=="function"?o(e):o.some(t=>{let r=new URL(`https://${t.replace(/^https?:\/\//,"")}`),{hostname:n,pathname:i}=new URL(e);return new RegExp(`(^|\\.)${r.hostname}$`).test(n)&&new RegExp(`^${r.pathname.replace(/\/+$/,"")}(/+|$)`).test(i)}))return!0;throw new Error(`Invalid or disallowed library URL: "${e}"`)},f0=()=>{let e=new URLSearchParams(window.location.hash.slice(1)).get(im.addLibrary)||new URLSearchParams(window.location.search).get(nm.addLibrary),o=e?new URLSearchParams(window.location.hash.slice(1)).get("token"):null;return e?{libraryUrl:e,idToken:o}:null},Ai=class Ai{constructor(o){C(this,"adapter");this.adapter=o}static async getLibraryItems(o,t,r=!0){let n=()=>new Promise(async(i,a)=>{try{let l=await o.load({source:t});i(Sc(l?.libraryItems||[],"published"))}catch(l){a(l)}});return r?Ai.queue.push(n):n()}getLibraryItems(o){return Ai.getLibraryItems(this.adapter,o,!1)}};C(Ai,"queue",new ey),C(Ai,"run",async(o,t)=>{let r=new Ai(o);return Ai.queue.push(()=>t(r))});var rs=Ai,fd=0,Uu=0,b0=e=>`${e.id}:${e.name||""}:${xf(e.elements)}`,Gu=e=>Ef(e.map(o=>b0(o)).sort().join()),wC=async(e,o)=>{try{return Uu++,await rs.run(e,async t=>{let r=ne(await t.getLibraryItems("save"));for(let[l]of o.deletedItems)r.delete(l);let n=[];for(let[l,s]of o.addedItems)r.has(l)?r.set(l,s):n.push(s);if(o.updatedItems)for(let[l,s]of o.updatedItems)r.set(l,s);let i=n.concat(Array.from(r.values())),a=Gu(i);return a!==fd&&await e.save({libraryItems:i}),fd=a,i})}finally{Uu--}},hL=e=>{let{excalidrawAPI:o}=e,t=vC(e);t.current=e;let r=vC(!1);yC(()=>{if(!o)return;r.current=!1;let n=async({libraryUrl:l,idToken:s})=>{let c=new Promise(async(p,m)=>{try{l=decodeURIComponent(l),l=ym(l),uL(l,t.current.validateLibraryUrl);let b=await(await fetch(l)).blob();p(b)}catch(u){m(u)}}),d=s!==o.id;await(d&&document.hidden?new Promise(p=>{window.addEventListener("focus",()=>p(),{once:!0})}):null);try{await o.updateLibrary({libraryItems:c,prompt:d,merge:!0,defaultStatus:"published",openLibraryMenu:!0})}catch(p){throw o.updateScene({appState:{errorMessage:p.message}}),p}finally{if(window.location.hash.includes(im.addLibrary)){let p=new URLSearchParams(window.location.hash.slice(1));p.delete(im.addLibrary),window.history.replaceState({},Vs,`#${p.toString()}`)}else if(window.location.search.includes(nm.addLibrary)){let p=new URLSearchParams(window.location.search);p.delete(nm.addLibrary),window.history.replaceState({},Vs,`?${p.toString()}`)}}},i=l=>{l.preventDefault();let s=f0();s&&(l.stopImmediatePropagation(),window.history.replaceState({},"",l.oldURL),n(s))},a=f0();if(a&&n(a),"getInitialLibraryItems"in t.current&&t.current.getInitialLibraryItems&&(console.warn("useHandleLibrar `opts.getInitialLibraryItems` is deprecated. Use `opts.adapter` instead."),Promise.resolve(t.current.getInitialLibraryItems()).then(l=>{o.updateLibrary({libraryItems:l,merge:!0})}).catch(l=>{console.error(`UseHandeLibrary getInitialLibraryItems failed: ${l?.message}`)})),"adapter"in t.current&&t.current.adapter){let l=t.current.adapter,s=t.current.migrationAdapter,c=hy();s?c.resolve(Wg(s.load).then(async d=>{let p=null;try{if(!d)return rs.getLibraryItems(l,"load");p=Sc(d.libraryItems||[],"published");let m=await wC(l,IC([],p));try{await s.clear()}catch(u){console.error(`couldn't delete legacy library data: ${u.message}`)}return m}catch(m){return console.error(`couldn't migrate legacy library data: ${m.message}`),p}}).catch(d=>(console.error(`error during library migration: ${d.message}`),rs.getLibraryItems(l,"load")))):c.resolve(Wg(rs.getLibraryItems,l,"load")),o.updateLibrary({libraryItems:c.then(d=>{let p=d||[];return fd=Gu(p),p}),merge:!0}).finally(()=>{r.current=!0})}return window.addEventListener("hashchange",i),()=>{window.removeEventListener("hashchange",i)}},[o]),yC(()=>{let n=TC.on(async(a,l)=>{let s=r.current,c="adapter"in t.current&&t.current.adapter||null;try{c&&fd!==Gu(l)&&await wC(c,a)}catch(d){console.error(`couldn't persist library update: ${d.message}`,a),s&&t.current.excalidrawAPI&&t.current.excalidrawAPI.updateScene({appState:{errorMessage:h("errors.saveLibraryError")}})}}),i=a=>{Uu&&by(a)};return window.addEventListener("beforeunload",i),()=>{window.removeEventListener("beforeunload",i),n(),fd=0,Uu=0}},[])};import bL from"clsx";import{jsx as fL}from"react/jsx-runtime";var gL=({theme:e,id:o,libraryReturnUrl:t})=>{let r=t||window.location.origin+window.location.pathname;return fL("a",{className:"library-menu-browse-button",href:`${k.VITE_APP_LIBRARY_URL}?target=${window.name||"_blank"}&referrer=${r}&useHash=true&token=${o}&theme=${e}&version=${lm.excalidrawLibrary}`,target:"_excalidraw_libraries",children:h("labels.libraries")})},kC=gL;import{jsx as xL,jsxs as EL}from"react/jsx-runtime";var Wu=({libraryReturnUrl:e,theme:o,id:t,style:r,children:n,className:i})=>EL("div",{className:bL("library-menu-control-buttons",i),style:r,children:[xL(kC,{id:t,libraryReturnUrl:e,theme:o}),n]});import{useCallback as ls,useEffect as S0,useMemo as k0,useRef as cI,useState as dI}from"react";import P_ from"clsx";import yL from"lodash.throttle";import{useEffect as vL}from"react";var wL=Ce(0),MC=e=>{let[o,t]=re(wL);return vL(()=>{let{current:r}=e;if(!r)return;let n=yL(()=>{let{scrollTop:i}=r;t(i)},200);return r.addEventListener("scroll",n),()=>{n.cancel(),r.removeEventListener("scroll",n)}},[e,t]),o};import d_ from"clsx";import{useCallback as m_,useState as T0}from"react";import{flushSync as AC}from"react-dom";import TL from"clsx";import{jsx as Vu,jsxs as IL}from"react/jsx-runtime";var CL=({label:e,onClick:o,className:t,children:r,actionType:n,type:i="button",isLoading:a,...l})=>{let s=n?`Dialog__action-button--${n}`:"";return IL("button",{className:TL("Dialog__action-button",s,t),type:i,"aria-label":e,onClick:o,...l,children:[r&&Vu("div",{style:a?{visibility:"hidden"}:{},children:r}),Vu("div",{style:a?{visibility:"hidden"}:{},children:e}),a&&Vu("div",{style:{position:"absolute",inset:0},children:Vu(Ht,{})})]})},Bn=CL;import{jsx as LC,jsxs as _C}from"react/jsx-runtime";var SL=e=>{let{onConfirm:o,onCancel:t,children:r,confirmText:n=h("buttons.confirm"),cancelText:i=h("buttons.cancel"),className:a="",...l}=e,s=Ie(),c=Kr(is),{container:d}=at();return _C(kt,{onCloseRequest:t,size:"small",...l,className:`confirm-dialog ${a}`,children:[r,_C("div",{className:"confirm-dialog-buttons",children:[LC(Bn,{label:i,onClick:()=>{s({openMenu:null}),c(!1),AC(()=>{t()}),d?.focus()}}),LC(Bn,{label:n,onClick:()=>{s({openMenu:null}),c(!1),AC(()=>{o()}),d?.focus()},actionType:"danger"})]})]})},Yu=SL;import{useCallback as DL,useEffect as E0,useRef as PC,useState as x0}from"react";var nr=class{static has(o){try{return!!window.localStorage.getItem(o)}catch(t){return console.warn(`localStorage.getItem error: ${t.message}`),!1}}static get(o){try{let t=window.localStorage.getItem(o);return t?JSON.parse(t):null}catch(t){return console.warn(`localStorage.getItem error: ${t.message}`),null}}};C(nr,"set",(o,t)=>{try{return window.localStorage.setItem(o,JSON.stringify(t)),!0}catch(r){return console.warn(`localStorage.setItem error: ${r.message}`),!1}}),C(nr,"delete",o=>{try{window.localStorage.removeItem(o)}catch(t){console.warn(`localStorage.removeItem error: ${t.message}`)}});import Ku from"react";var kL=/({{[\w-]+}})|(<[\w-]+>)|(<\/[\w-]+>)/g,ML=/{{([\w-]+)}}/,AL=/<([\w-]+)>/,LL=/<\/([\w-]+)>/,_L=(e,o)=>{let t=[{name:"",children:[]}];return e.split(kL).filter(Boolean).forEach(r=>{let n=r.match(AL),i=r.match(LL),a=r.match(ML);if(n!==null){let l=n[1];o.hasOwnProperty(l)?t.push({name:l,children:[]}):console.warn(`Trans: missed to pass in prop ${l} for interpolating ${e}`)}else if(i!==null)if(i[1]===t[t.length-1].name){let s=t.pop(),c=Ku.createElement(Ku.Fragment,{},...s.children),d=o[s.name];typeof d=="function"&&t[t.length-1].children.push(d(c))}else console.warn(`Trans: unexpected end tag ${r} for interpolating ${e}`);else if(a!==null){let l=a[1];o.hasOwnProperty(l)?t[t.length-1].children.push(o[l]):console.warn(`Trans: key ${l} not in props for interpolating ${e}`)}else t[t.length-1].children.push(r)}),t.length!==1&&console.warn(`Trans: stack not empty for interpolating ${e}`),t[0].children},PL=({i18nKey:e,children:o,...t})=>{let{t:r}=Ue();return Ku.createElement(Ku.Fragment,{},..._L(r(e),t))},bo=PL;import{jsx as Ae,jsxs as co}from"react/jsx-runtime";var RL=async e=>{let r=Math.round(8),n=Math.max(Math.round(128/64),2),i=my(e,6),a=document.createElement("canvas");a.width=i[0].length*128+(i[0].length+1)*(r*2)-r*2,a.height=i.length*128+(i.length+1)*(r*2)-r*2;let l=a.getContext("2d");l.fillStyle=Ro,l.fillRect(0,0,a.width,a.height);for(let[s,c]of e.entries()){let d=await es({data:{elements:c.elements,files:null},config:{maxWidthOrHeight:128}}),{width:p,height:m}=d,u=Math.floor(s/6)*(128+r*2),b=s%6*(128+r*2);l.drawImage(d,b+(128-p)/2+r,u+(128-m)/2+r),l.lineWidth=n,l.strokeStyle="#ced4da",l.strokeRect(b+r/2,u+r/2,128+r,128+r)}return await rp(new File([await ua(a)],"preview",{type:ge.png}),{outputType:ge.jpg,maxWidthOrHeight:5e3})},NL=({libItem:e,appState:o,index:t,onChange:r,onRemove:n})=>{let i=PC(null),a=PC(null);return E0(()=>{let l=i.current;l&&(async()=>{let s=await ts({data:{elements:e.elements,appState:{...o,viewBackgroundColor:Ro,exportBackground:!0},files:null},config:{skipInliningFonts:!0}});l.innerHTML=s.outerHTML})()},[e.elements,o]),co("div",{className:"single-library-item",children:[e.status==="published"&&Ae("span",{className:"single-library-item-status",children:h("labels.statusPublished")}),Ae("div",{ref:i,className:"single-library-item__svg"}),Ae(q,{"aria-label":h("buttons.remove"),type:"button",icon:No,className:"single-library-item--remove",onClick:n.bind(null,e.id),title:h("buttons.remove")}),co("div",{style:{display:"flex",margin:"0.8rem 0",width:"100%",fontSize:"14px",fontWeight:500,flexDirection:"column"},children:[co("label",{style:{display:"flex",justifyContent:"space-between",flexDirection:"column"},children:[co("div",{style:{padding:"0.5em 0"},children:[Ae("span",{style:{fontWeight:500,color:"#868e96"},children:h("publishDialog.itemName")}),Ae("span",{"aria-hidden":"true",className:"required",children:"*"})]}),Ae("input",{type:"text",ref:a,style:{width:"80%",padding:"0.2rem"},defaultValue:e.name,placeholder:"Item name",onChange:l=>{r(l.target.value,t)}})]}),Ae("span",{className:"error",children:e.error})]})]})},OL=({onClose:e,libraryItems:o,appState:t,onSuccess:r,onError:n,updateItemsInStorage:i,onRemove:a})=>{let[l,s]=x0({authorName:"",githubHandle:"",name:"",description:"",twitterHandle:"",website:""}),[c,d]=x0(!1);E0(()=>{let E=nr.get(qn.PUBLISH_LIBRARY);E&&s(E)},[]);let[p,m]=x0(o.slice());E0(()=>{m(o.slice())},[o]);let u=E=>{s({...l,[E.target.name]:E.target.value})},b=async E=>{E.preventDefault(),d(!0);let w=[],T=!1;if(p.forEach(D=>{let O="";D.name||(O=h("publishDialog.errors.required"),T=!0),w.push({...D,error:O})}),T){m(w),d(!1);return}let S=await RL(p),_={type:$n.excalidrawLibrary,version:lm.excalidrawLibrary,source:PE(),libraryItems:p},M=JSON.stringify(_,null,2),N=new Blob([M],{type:"application/json"}),L=new FormData;L.append("excalidrawLib",N),L.append("previewImage",S),L.append("previewImageType",S.type),L.append("title",l.name),L.append("authorName",l.authorName),L.append("githubHandle",l.githubHandle),L.append("name",l.name),L.append("description",l.description),L.append("twitterHandle",l.twitterHandle),L.append("website",l.website),fetch(`${k.VITE_APP_LIBRARY_BACKEND}/submit`,{method:"post",body:L}).then(D=>D.ok?D.json().then(({url:O})=>{nr.delete(qn.PUBLISH_LIBRARY),r({url:O,authorName:l.authorName,items:p})}):D.json().catch(()=>{throw new Error(D.statusText||"something went wrong")}).then(O=>{throw new Error(O.message||D.statusText||"something went wrong")}),D=>{console.error(D),n(D),d(!1)}).catch(D=>{console.error(D),n(D),d(!1)})},f=()=>{let E=[];return p.forEach((w,T)=>{E.push(Ae("div",{className:"single-library-item-wrapper",children:Ae(NL,{libItem:w,appState:t,index:T,onChange:(S,_)=>{let M=p.slice();M[_].name=S,m(M)},onRemove:a})},T))}),Ae("div",{className:"selected-library-items",children:E})},x=DL(()=>{i(p),nr.set(qn.PUBLISH_LIBRARY,l),e()},[p,e,i,l]),v=!!o.length,y=o.some(E=>E.status==="published");return Ae(kt,{onCloseRequest:x,title:h("publishDialog.title"),className:"publish-library",children:v?co("form",{onSubmit:b,children:[Ae("div",{className:"publish-library-note",children:Ae(bo,{i18nKey:"publishDialog.noteDescription",link:E=>Ae("a",{href:"https://libraries.excalidraw.com",target:"_blank",rel:"noopener",children:E})})}),Ae("span",{className:"publish-library-note",children:Ae(bo,{i18nKey:"publishDialog.noteGuidelines",link:E=>Ae("a",{href:"https://github.com/excalidraw/excalidraw-libraries#guidelines",target:"_blank",rel:"noopener noreferrer",children:E})})}),Ae("div",{className:"publish-library-note",children:h("publishDialog.noteItems")}),y&&Ae("span",{className:"publish-library-note publish-library-warning",children:h("publishDialog.republishWarning")}),f(),co("div",{className:"publish-library__fields",children:[co("label",{children:[co("div",{children:[Ae("span",{children:h("publishDialog.libraryName")}),Ae("span",{"aria-hidden":"true",className:"required",children:"*"})]}),Ae("input",{type:"text",name:"name",required:!0,value:l.name,onChange:u,placeholder:h("publishDialog.placeholder.libraryName")})]}),co("label",{style:{alignItems:"flex-start"},children:[co("div",{children:[Ae("span",{children:h("publishDialog.libraryDesc")}),Ae("span",{"aria-hidden":"true",className:"required",children:"*"})]}),Ae("textarea",{name:"description",rows:4,required:!0,value:l.description,onChange:u,placeholder:h("publishDialog.placeholder.libraryDesc")})]}),co("label",{children:[co("div",{children:[Ae("span",{children:h("publishDialog.authorName")}),Ae("span",{"aria-hidden":"true",className:"required",children:"*"})]}),Ae("input",{type:"text",name:"authorName",required:!0,value:l.authorName,onChange:u,placeholder:h("publishDialog.placeholder.authorName")})]}),co("label",{children:[Ae("span",{children:h("publishDialog.githubUsername")}),Ae("input",{type:"text",name:"githubHandle",value:l.githubHandle,onChange:u,placeholder:h("publishDialog.placeholder.githubHandle")})]}),co("label",{children:[Ae("span",{children:h("publishDialog.twitterUsername")}),Ae("input",{type:"text",name:"twitterHandle",value:l.twitterHandle,onChange:u,placeholder:h("publishDialog.placeholder.twitterHandle")})]}),co("label",{children:[Ae("span",{children:h("publishDialog.website")}),Ae("input",{type:"text",name:"website",pattern:"https?://.+",title:h("publishDialog.errors.website"),value:l.website,onChange:u,placeholder:h("publishDialog.placeholder.website")})]}),Ae("span",{className:"publish-library-note",children:Ae(bo,{i18nKey:"publishDialog.noteLicense",link:E=>Ae("a",{href:"https://github.com/excalidraw/excalidraw-libraries/blob/main/LICENSE",target:"_blank",rel:"noopener noreferrer",children:E})})})]}),co("div",{className:"publish-library__buttons",children:[Ae(Bn,{label:h("buttons.saveLibNames"),onClick:x,"data-testid":"cancel-clear-canvas-button"}),Ae(Bn,{type:"submit",label:h("buttons.submit"),actionType:"primary",isLoading:c})]})]}):Ae("p",{style:{padding:"1em",textAlign:"center",fontWeight:500},children:h("publishDialog.atleastOneLibItem")})})},DC=OL;import oI from"react";import{DropdownMenu as l_}from"radix-ui";import zL from"clsx";import{useCallback as HL,useEffect as UL,useRef as GL}from"react";import{DropdownMenu as WL}from"radix-ui";import{forwardRef as RC}from"react";import NC from"clsx";import{jsx as OC}from"react/jsx-runtime";var FL=RC(({children:e,gap:o,align:t,justifyContent:r,className:n,style:i},a)=>OC("div",{className:NC("Stack Stack_horizontal",n),style:{"--gap":o,alignItems:t,justifyContent:r,...i},ref:a,children:e})),BL=RC(({children:e,gap:o,align:t,justifyContent:r,className:n,style:i},a)=>OC("div",{className:NC("Stack Stack_vertical",n),style:{"--gap":o,justifyItems:t,justifyContent:r,...i},ref:a,children:e})),oo={Row:FL,Col:BL};import{jsx as Xu}from"react/jsx-runtime";var FC=({children:e,onClickOutside:o,className:t="",onSelect:r,open:n=!0,align:i="end",style:a})=>{let l=Me(),s=GL(null),c=yi({onClickOutside:o});Al(s,HL(p=>{s.current?.closest(`.${qe.DROPDOWN_MENU_EVENT_WRAPPER}`)?.contains(p.target)||c.onClickOutside?.()},[c])),UL(()=>{if(!n)return;let p=u=>{u.key===I.ESCAPE&&(u.preventDefault(),u.stopImmediatePropagation(),c.onClickOutside?.())},m={capture:!0};return document.addEventListener("keydown",p,m),()=>{document.removeEventListener("keydown",p,m)}},[c,n]);let d=zL(`dropdown-menu ${t}`,{"dropdown-menu--mobile":l.formFactor==="phone"}).trim();return Xu(B1.Provider,{value:{onSelect:r},children:Xu(WL.Content,{ref:s,className:d,style:a,"data-testid":"dropdown-menu",align:i,sideOffset:8,onCloseAutoFocus:p=>p.preventDefault(),children:l.formFactor==="phone"?Xu(oo.Col,{className:"dropdown-menu-container",children:e}):Xu(Et,{className:"dropdown-menu-container",padding:2,children:e})})})};FC.displayName="DropdownMenuContent";var BC=FC;import{jsx as YL}from"react/jsx-runtime";var VL=({children:e,className:o="",selected:t,...r})=>YL("div",{...r,className:`dropdown-menu-item-base dropdown-menu-item-custom ${o} ${t?"dropdown-menu-item--selected":""}`.trim(),children:e}),zC=VL;import{DropdownMenu as KL}from"radix-ui";import{jsx as y0}from"react/jsx-runtime";var HC=({icon:e,shortcut:o,href:t,children:r,onSelect:n,className:i="",selected:a,rel:l="noopener",...s})=>{let c=Jp(n);return y0(KL.Item,{className:"radix-menu-item",onSelect:c,asChild:!0,children:y0("a",{...s,href:t,target:"_blank",rel:`noopener ${l}`,className:Ci(i,a),title:s.title??s["aria-label"],children:y0(Ii,{icon:e,shortcut:o,children:r})})})},as=HC;HC.displayName="DropdownMenuItemLink";import{jsx as XL}from"react/jsx-runtime";var UC=()=>XL("div",{style:{height:"1px",backgroundColor:"var(--default-border-color)",margin:"6px 0",flex:"0 0 auto"}}),GC=UC;UC.displayName="DropdownMenuSeparator";import{DropdownMenu as e_}from"radix-ui";import ZL from"clsx";import{DropdownMenu as $L}from"radix-ui";import{useCallback as jL,useState as WC}from"react";import{jsx as w0}from"react/jsx-runtime";var v0=-4,qL=4,VC=({children:e,className:o})=>{let t=Me(),r=ZL(`dropdown-menu dropdown-submenu ${o}`,{"dropdown-menu--mobile":t.formFactor==="phone"}).trim(),n=jL(c=>{if(c){let p=c.closest(".dropdown-menu-container")?.getBoundingClientRect();if(p){let m=c.getBoundingClientRect().width,b=window.innerWidth-p.right;b<m+20&&(a(b-m+v0),s(v0+8))}}},[]),[i,a]=WC(qL),[l,s]=WC(v0);return w0($L.SubContent,{className:r,sideOffset:i,alignOffset:l,collisionPadding:8,ref:n,children:t.formFactor==="phone"?w0(oo.Col,{className:"dropdown-menu-container",children:e}):w0(Et,{className:"dropdown-menu-container",padding:2,style:{zIndex:1},children:e})})},YC=VC;VC.displayName="DropdownMenuSubContent";import{DropdownMenu as JL}from"radix-ui";import{jsx as KC,jsxs as QL}from"react/jsx-runtime";var XC=({children:e,icon:o,shortcut:t,className:r})=>QL(JL.SubTrigger,{className:`${Ci(r)} dropdown-menu__submenu-trigger`,children:[KC(Ii,{icon:o,shortcut:t,children:e}),KC("div",{className:"dropdown-menu__submenu-trigger-icon",children:w1})]}),ZC=XC;XC.displayName="DropdownMenuSubTrigger";import $C from"react";var Zu=e=>o=>{let t=$C.Children.toArray(o).find(r=>$C.isValidElement(r)&&typeof r.type!="string"&&r?.type.displayName&&r.type.displayName===e);return t||null},jC=Zu("DropdownMenuTrigger"),qC=Zu("DropdownMenuContent"),JC=Zu("DropdownMenuSubTrigger"),QC=Zu("DropdownMenuSubContent");import{jsxs as t_}from"react/jsx-runtime";var $u=({children:e})=>{let o=JC(e),t=QC(e);return t_(e_.Sub,{children:[o,t]})};$u.Trigger=ZC;$u.Content=YC;$u.displayName="DropdownMenuSub";var Li=$u;import o_ from"clsx";import{DropdownMenu as r_}from"radix-ui";import{jsx as n_}from"react/jsx-runtime";var eI=({className:e="",children:o,onToggle:t,title:r,...n})=>{let i=Me(),a=o_(`dropdown-menu-button ${e}`,"zen-mode-transition",{"dropdown-menu-button--mobile":i.formFactor==="phone"}).trim();return n_(r_.Trigger,{className:a,onClick:t,type:"button","data-testid":"dropdown-menu-button",title:r,...n,children:o})},tI=eI;eI.displayName="DropdownMenuTrigger";import{jsx as a_}from"react/jsx-runtime";var i_=e=>a_(go,{...e,icon:e.checked?Dc:Gc}),Mr=i_;import{jsx as c_,jsxs as s_}from"react/jsx-runtime";var Ar=({children:e,open:o})=>{let t=jC(e),r=qC(e),n=r&&oI.isValidElement(r)?oI.cloneElement(r,{open:o}):r;return c_(l_.Root,{open:o,modal:!1,children:s_("div",{className:qe.DROPDOWN_MENU_EVENT_WRAPPER,style:{display:"contents"},children:[t,n]})})};Ar.Trigger=tI;Ar.Content=BC;Ar.Item=go;Ar.ItemCheckbox=Mr;Ar.ItemLink=as;Ar.ItemCustom=zC;Ar.Group=$c;Ar.Separator=GC;Ar.Sub=Li;var pe=Ar;Ar.displayName="DropdownMenu";import{jsx as Mo,jsxs as ju}from"react/jsx-runtime";var p_=(e,o)=>e.filter(t=>o.includes(t.id)),u_=({setAppState:e,selectedItems:o,library:t,onRemoveFromLibrary:r,resetLibrary:n,onSelectItems:i,appState:a,className:l})=>{let[s]=re(on),[c,d]=re(is),p=()=>{let L=o.length?h("alerts.removeItemsFromsLibrary",{count:o.length}):h("alerts.resetLibrary"),D=o.length?h("confirmDialog.removeItemsFromLib"):h("confirmDialog.resetLibrary");return Mo(Yu,{onConfirm:()=>{o.length?r():n(),u(!1)},onCancel:()=>{u(!1)},title:D,children:Mo("p",{children:L})})},[m,u]=T0(!1),b=!!o.length,f=b?s.libraryItems.filter(L=>o.includes(L.id)):s.libraryItems,x=b?h("buttons.remove"):h("buttons.resetLibrary"),[v,y]=T0(!1),[E,w]=T0(null),T=m_(()=>ju(kt,{onCloseRequest:()=>w(null),title:h("publishSuccessDialog.title"),className:"publish-library-success",size:"small",children:[Mo("p",{children:Mo(bo,{i18nKey:"publishSuccessDialog.content",authorName:E.authorName,link:L=>Mo("a",{href:E?.url,target:"_blank",rel:"noopener noreferrer",children:L})})}),Mo(q,{type:"button",title:h("buttons.close"),"aria-label":h("buttons.close"),label:h("buttons.close"),onClick:()=>w(null),"data-testid":"publish-library-success-close",className:"publish-library-success-close"})]}),[w,E]),S=(L,D)=>{y(!1),w({url:L.url,authorName:L.authorName});let O=D.slice();O.forEach(V=>{o.includes(V.id)&&(V.status="published")}),t.setLibrary(O)},_=async()=>{try{await t.updateLibrary({libraryItems:jm({description:"Excalidraw library files"}),merge:!0,openLibraryMenu:!0})}catch(L){if(L?.name==="AbortError"){console.warn(L);return}e({errorMessage:h("errors.importLibraryError")})}},M=async()=>{let L=b?f:await t.getLatestLibrary();Mw(L).catch(hm).catch(D=>{e({errorMessage:D.message})})},N=()=>ju(pe,{open:c,children:[Mo(pe.Trigger,{onToggle:()=>d(!c),children:hi}),ju(pe.Content,{onClickOutside:()=>d(!1),onSelect:()=>d(!1),className:"library-menu",children:[!b&&Mo(pe.Item,{onSelect:_,icon:ba,"data-testid":"lib-dropdown--load",children:h("buttons.load")}),!!f.length&&Mo(pe.Item,{onSelect:M,icon:fi,"data-testid":"lib-dropdown--export",children:h("buttons.export")}),b&&Mo(pe.Item,{icon:Gb,onSelect:()=>y(!0),"data-testid":"lib-dropdown--remove",children:h("buttons.publishLibrary")}),!!f.length&&Mo(pe.Item,{onSelect:()=>u(!0),icon:Kt,children:x})]})]});return ju("div",{className:d_("library-menu-dropdown-container",l),children:[N(),o.length>0&&Mo("div",{className:"library-actions-counter",children:o.length}),m&&p(),v&&Mo(DC,{onClose:()=>y(!1),libraryItems:p_(s.libraryItems,o),appState:a,onSuccess:L=>S(L,s.libraryItems),onError:L=>window.alert(L),updateItemsInStorage:()=>t.setLibrary(s.libraryItems),onRemove:L=>i(o.filter(D=>D!==L))}),E&&T()]})},rI=({selectedItems:e,onSelectItems:o,className:t})=>{let{library:r}=Ke(),{clearLibraryCache:n,deleteItemsFromLibraryCache:i}=os(),a=fe(),l=Ie(),[s]=re(on),c=async p=>{let m=p.filter(u=>!e.includes(u.id));r.setLibrary(m).catch(()=>{l({errorMessage:h("alerts.errorRemovingFromLibrary")})}),i(e),o([])};return Mo(u_,{appState:a,setAppState:l,selectedItems:e,onSelectItems:o,library:r,onRemoveFromLibrary:()=>c(s.libraryItems),resetLibrary:()=>{r.resetLibrary(),n()},className:t})};import{memo as v_,useEffect as w_,useState as T_}from"react";import h_,{useCallback as g_}from"react";function f_(){return[!1,g_(o=>o(),[])]}var nI=h_.useTransition||f_;import iI from"clsx";import{memo as b_,useRef as x_,useState as E_}from"react";import{jsx as qu,jsxs as y_}from"react/jsx-runtime";var aI=b_(({id:e,elements:o,isPending:t,onClick:r,selected:n,onToggle:i,onDrag:a,svgCache:l})=>{let s=x_(null),c=Hu(e,o,l,s),[d,p]=E_(!1),m=Me().formFactor==="phone",u=t&&qu("div",{className:"library-unit__adder",children:Lf});return y_("div",{className:iI("library-unit",{"library-unit__active":o,"library-unit--hover":o&&d,"library-unit--selected":n,"library-unit--skeleton":!c}),onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),children:[qu("div",{className:iI("library-unit__dragger",{"library-unit__pulse":!!t}),ref:s,draggable:!!o,onClick:o||t?b=>{e&&b.shiftKey?i(e,b):r(e)}:void 0,onDragStart:b=>{if(!e){b.preventDefault();return}p(!1),a(e,b)}}),u,e&&o&&(d||m||n)&&qu(rd,{checked:n,onChange:(b,f)=>i(e,f),className:"library-unit__checkbox"})]})}),lI=()=>qu("div",{className:"library-unit library-unit--skeleton"});import{Fragment as C_,jsx as Ju}from"react/jsx-runtime";var Qu=({children:e})=>Ju("div",{className:"library-menu-items-container__grid",children:e}),bd=v_(({items:e,onItemSelectToggle:o,onItemDrag:t,isItemSelected:r,onClick:n,svgCache:i,itemsRenderedPerBatch:a})=>{let[,l]=nI(),[s,c]=T_(0);return w_(()=>{s<e.length&&l(()=>{c(s+a)})},[s,e.length,l,a]),Ju(C_,{children:e.map((d,p)=>p<s?Ju(aI,{elements:d?.elements,isPending:!d?.id&&!!d?.elements,onClick:n,svgCache:i,id:d?.id,selected:r(d.id),onToggle:o,onDrag:t},d?.id??p):Ju(lI,{},p))})});import C0 from"clsx";import{forwardRef as k_,useRef as M_,useImperativeHandle as A_,useLayoutEffect as L_,useState as __}from"react";import I_ from"clsx";import{jsx as S_}from"react/jsx-runtime";var ro=({type:e="button",onSelect:o,selected:t,children:r,className:n="",...i})=>S_("button",{onClick:oi(i.onClick,a=>{o()}),type:e,className:I_("excalidraw-button",n,{selected:t}),...i,children:r});import{jsx as I0,jsxs as sI}from"react/jsx-runtime";var _i=k_(({onChange:e,label:o,fullWidth:t,placeholder:r,readonly:n,selectOnRender:i,onKeyDown:a,isRedacted:l=!1,icon:s,className:c,type:d,...p},m)=>{let u=M_(null);A_(m,()=>u.current),L_(()=>{i&&(u.current?.focus(),u.current?.select())},[i]);let[b,f]=__(!1);return sI("div",{className:C0("ExcTextField",c,{"ExcTextField--fullWidth":t,"ExcTextField--hasIcon":!!s}),onClick:()=>{u.current?.focus()},children:[s,o&&I0("div",{className:"ExcTextField__label",children:o}),sI("div",{className:C0("ExcTextField__input",{"ExcTextField__input--readonly":n}),children:[I0("input",{className:C0({"is-redacted":"value"in p&&p.value&&l&&!b}),readOnly:n,value:"value"in p?p.value:void 0,defaultValue:"defaultValue"in p?p.defaultValue:void 0,placeholder:r,ref:u,onChange:x=>e?.(x.target.value),onKeyDown:a,type:d}),l&&I0(ro,{onSelect:()=>f(!b),style:{border:0,userSelect:"none"},children:b?qb:ya})]})]})});import{Fragment as mI,jsx as Zt,jsxs as rn}from"react/jsx-runtime";var D_=17,R_=64;function M0({isLoading:e,libraryItems:o,onAddToLibrary:t,onInsertLibraryItems:r,pendingElements:n,theme:i,id:a,libraryReturnUrl:l,onSelectItems:s,selectedItems:c}){let d=Me(),p=cI(null),m=MC(p);S0(()=>{m>0&&p.current?.scrollTo(0,m)},[]);let{svgCache:u}=os(),[b,f]=dI(null),[x,v]=dI(""),y=!o.length&&!n.length,E=!y&&!!x.trim(),w=k0(()=>{let X=Aa(x.trim().toLowerCase());return X?o.filter(le=>{let ce=le.name||"";return ce.trim()&&Aa(ce.toLowerCase()).includes(X)}):[]},[o,x]),T=k0(()=>o.filter(X=>X.status!=="published"),[o]),S=k0(()=>o.filter(X=>X.status==="published"),[o]),_=ls((X,le)=>{let ce=!c.includes(X),F=[...T,...S];if(ce){if(le.shiftKey&&b){let W=F.findIndex(Ee=>Ee.id===b),ee=F.findIndex(Ee=>Ee.id===X);if(W===-1||ee===-1){s([...c,X]);return}let Te=ne(c),Ne=Math.min(W,ee),Ze=Math.max(W,ee),pt=F.reduce((Ee,rt,Nt)=>((Nt>=Ne&&Nt<=Ze||Te.has(rt.id))&&Ee.push(rt.id),Ee),[]);s(pt)}else s([...c,X]);f(X)}else f(null),s(c.filter(W=>W!==X))},[b,s,S,c,T]);S0(()=>{c.length||f(null)},[c]);let M=ls(X=>{let le;return c.includes(X)?le=o.filter(ce=>c.includes(ce.id)):le=o.filter(ce=>ce.id===X),le.map(ce=>({...ce,elements:Tn({type:"everything",elements:ce.elements,randomizeSeed:!0,preserveFrameChildrenOrder:!0}).duplicatedElements}))},[o,c]),N=ls((X,le)=>{let ce={itemIds:c.includes(X)?c:[X]};le.dataTransfer.setData(ge.excalidrawlibIds,JSON.stringify(ce))},[c]),L=ls(X=>X?c.includes(X):!1,[c]),D=ls(()=>{t(n)},[n,t]),O=ls(X=>{X&&r(M(X))},[M,r]),V=u.size>=(w.length?w:o).length?R_:D_,K=cI(null);S0(()=>{dy(()=>{K.current?.focus()})},[]);let z=!E&&rn(mI,{children:[!y&&Zt("div",{className:"library-menu-items-container__header",children:h("labels.personalLib")}),!n.length&&!T.length?rn("div",{className:"library-menu-items__no-items",children:[!S.length&&Zt("div",{className:"library-menu-items__no-items__label",children:h("library.noItems")}),Zt("div",{className:"library-menu-items__no-items__hint",children:S.length>0?h("library.hint_emptyPrivateLibrary"):h("library.hint_emptyLibrary")})]}):rn(Qu,{children:[n.length>0&&Zt(bd,{itemsRenderedPerBatch:V,items:[{id:null,elements:n}],onItemSelectToggle:_,onItemDrag:N,onClick:D,isItemSelected:L,svgCache:u}),Zt(bd,{itemsRenderedPerBatch:V,items:T,onItemSelectToggle:_,onItemDrag:N,onClick:O,isItemSelected:L,svgCache:u})]}),S.length>0&&Zt("div",{className:"library-menu-items-container__header",style:{marginTop:"0.75rem"},children:h("labels.excalidrawLib")}),S.length>0&&Zt(Qu,{children:Zt(bd,{itemsRenderedPerBatch:V,items:S,onItemSelectToggle:_,onItemDrag:N,onClick:O,isItemSelected:L,svgCache:u})})]}),J=E&&rn(mI,{children:[rn("div",{className:"library-menu-items-container__header",children:[h("library.search.heading"),!e&&rn("div",{className:"library-menu-items-container__header__hint",style:{cursor:"pointer"},onPointerDown:X=>X.preventDefault(),onClick:X=>{v("")},children:[Zt("kbd",{children:"esc"})," to clear"]})]}),w.length>0?Zt(Qu,{children:Zt(bd,{itemsRenderedPerBatch:V,items:w,onItemSelectToggle:_,onItemDrag:N,onClick:O,isItemSelected:L,svgCache:u})}):rn("div",{className:"library-menu-items__no-items",children:[Zt("div",{className:"library-menu-items__no-items__hint",children:h("library.search.noResults")}),Zt(ro,{onPointerDown:X=>X.preventDefault(),onSelect:()=>{v("")},style:{width:"auto",marginTop:"1rem"},children:h("library.search.clearSearch")})]})]});return rn("div",{className:"library-menu-items-container",style:n.length||T.length||S.length?{justifyContent:"flex-start"}:{borderBottom:0},children:[rn("div",{className:"library-menu-items-header",children:[!y&&Zt(_i,{ref:K,type:"search",className:P_("library-menu-items-container__search",{hideCancelButton:d.formFactor!=="phone"}),placeholder:h("library.search.inputPlaceholder"),value:x,onChange:X=>v(X)}),Zt(rI,{selectedItems:c,onSelectItems:s,className:"library-menu-dropdown-container--in-heading"})]}),rn(oo.Col,{className:"library-menu-items-container__items",align:"start",gap:1,style:{flex:S.length>0?1:"0 1 auto",margin:y?"auto":0},ref:p,children:[e&&Zt("div",{style:{position:"absolute",top:"var(--container-padding-y)",right:"var(--container-padding-x)",transform:"translateY(50%)"},children:Zt(Ht,{})}),z,J,y&&Zt(Wu,{style:{padding:"16px 0",width:"100%"},id:a,libraryReturnUrl:l,theme:i})]})]})}import{jsx as Pi,jsxs as uI}from"react/jsx-runtime";var is=Ce(!1),pI=({children:e})=>Pi("div",{className:"layer-ui__library",children:e}),O_=fI(({onInsertLibraryItems:e,pendingElements:o,onAddToLibrary:t,setAppState:r,libraryReturnUrl:n,library:i,id:a,theme:l,selectedItems:s,onSelectItems:c})=>{let[d]=re(on),p=L0(b=>{(async(x,v)=>{xe("element","addToLibrary","ui");for(let E of sm)if(x.some(w=>w.type===E))return r({errorMessage:h(`errors.libraryElementTypeError.${E}`)});let y=[{status:"unpublished",elements:x,id:vo(),created:Date.now()},...v];t(),i.setLibrary(y).catch(()=>{r({errorMessage:h("alerts.errorAddingToLibrary")})})})(b,d.libraryItems)},[t,i,r,d.libraryItems]),m=gI(()=>d.libraryItems,[d]);if(d.status==="loading"&&!d.isInitialized)return Pi(pI,{children:Pi("div",{className:"layer-ui__library-message",children:uI("div",{children:[Pi(Ht,{size:"2em"}),Pi("span",{children:h("labels.libraryLoadingMessage")})]})})});let u=d.libraryItems.length>0||o.length>0;return uI(pI,{children:[Pi(M0,{isLoading:d.status==="loading",libraryItems:m,onAddToLibrary:p,onInsertLibraryItems:e,pendingElements:o,id:a,libraryReturnUrl:n,theme:l,onSelectItems:c,selectedItems:s}),u&&Pi(Wu,{className:"library-menu-control-buttons--at-bottom",style:{padding:"16px 12px 0 12px"},id:a,libraryReturnUrl:n,theme:l})]})}),A0=(e,o)=>({elements:e,pending:ie(e,{selectedElementIds:o},{includeBoundTextElement:!0,includeElementsInFrames:!0}),selectedElementIds:o}),F_=(e,o)=>{let t=vi(),[r,n]=hI(()=>A0(t,e.selectedElementIds)),i=N_(new Map);return _0(()=>{for(let a of r.pending)i.current.set(a.id,a.version)},[r.pending]),_0(()=>{o.state.cursorButton==="up"&&o.state.activeTool.type==="selection"&&n(a=>{if(!At(a.selectedElementIds,e.selectedElementIds))return i.current.clear(),A0(t,e.selectedElementIds);let l=o.scene.getNonDeletedElementsMap();for(let s of Object.keys(e.selectedElementIds)){let c=l.get(s)?.version;if(c&&c!==i.current.get(s))return A0(t,e.selectedElementIds)}return a})},[o,o.state.cursorButton,o.state.activeTool.type,e.selectedElementIds,t]),r.pending},bI=fI(()=>{let e=Ke(),{onInsertElements:o}=e,t=Sr(),r=fe(),n=Ie(),[i,a]=hI([]),l=gI(()=>e.library,[e.library]),s=F_(r,e);_0(()=>_e(document,"keydown",p=>{if(p.key===I.ESCAPE&&p.target instanceof HTMLElement){let m=p.target;if(m.closest(`.${qe.SIDEBAR}`))i.length>0?(p.stopPropagation(),a([])):io(m)&&m instanceof HTMLInputElement&&!m.value&&(p.stopPropagation(),n({openSidebar:null}),e.focusContainer());else if(i.length>0){let{x:u,y:b}=e.viewport.lastPosition;document.elementFromPoint(u,b)?.closest(`.${qe.SIDEBAR}`)&&(p.stopPropagation(),a([]))}}},{capture:!0}),[i,n,e]);let c=L0(p=>{o(ns(p)),e.focusContainer()},[o,e]),d=L0(()=>{n({selectedElementIds:{},selectedGroupIds:{},activeEmbeddable:null})},[n]);return Pi(O_,{pendingElements:s,onInsertLibraryItems:c,onAddToLibrary:d,setAppState:n,libraryReturnUrl:t.libraryReturnUrl,library:l,id:e.id,theme:r.theme,selectedItems:i,onSelectItems:a})});import B_ from"clsx";import{useRef as z_}from"react";import{createPortal as H_}from"react-dom";import{jsx as xI,jsxs as U_}from"react/jsx-runtime";var EI=e=>{let{closeOnClickOutside:o=!0}=e,t=Gp({className:"excalidraw-modal-container"}),r=z_(document.body.classList.contains("excalidraw-animations-disabled"));if(!t)return null;let n=i=>{i.key===I.ESCAPE&&(i.preventDefault(),i.nativeEvent.stopImmediatePropagation(),i.stopPropagation(),e.onCloseRequest())};return H_(U_("div",{className:B_("Modal",e.className,{"animations-disabled":r.current}),role:"dialog","aria-modal":"true",onKeyDown:n,"aria-labelledby":e.labelledBy,children:[xI("div",{className:"Modal__background",onClick:o?e.onCloseRequest:void 0}),xI("div",{className:"Modal__content",style:{"--max-width":`${e.maxWidth}px`},tabIndex:0,children:e.children})]}),t)};import{jsx as xd,jsxs as K_}from"react/jsx-runtime";function Y_(e){if(e&&typeof e=="number")return e;switch(e){case"small":return 550;case"wide":return 1024;case"regular":default:return 800}}var kt=e=>{let[o,t]=fC(),[r]=V_(document.activeElement),{id:n}=at(),i=Me().formFactor==="phone";W_(()=>{if(!o)return;let c=oc(o);setTimeout(()=>{c.length>0&&e.autofocus!==!1&&(c[1]||c[0]).focus()});let d=p=>{if(p.key===I.TAB){let m=oc(o),{activeElement:u}=document,b=m.findIndex(f=>f===u);b===0&&p.shiftKey?(m[m.length-1].focus(),p.preventDefault()):b===m.length-1&&!p.shiftKey&&(m[0].focus(),p.preventDefault())}};return o.addEventListener("keydown",d),()=>o.removeEventListener("keydown",d)},[o,e.autofocus]);let a=Ie(),l=Kr(is),s=()=>{a({openMenu:null}),l(!1),r.focus(),e.onCloseRequest()};return xd(EI,{className:G_("Dialog",e.className,{"Dialog--fullscreen":i}),labelledBy:"dialog-title",maxWidth:Y_(e.size),onCloseRequest:s,closeOnClickOutside:e.closeOnClickOutside,children:K_(Et,{ref:t,children:[e.title&&xd("h2",{id:`${n}-dialog-title`,className:"Dialog__title",children:xd("span",{className:"Dialog__titleContent",children:e.title})}),i&&xd("button",{className:"Dialog__close",onClick:s,title:h("buttons.close"),"aria-label":h("buttons.close"),type:"button",children:No}),xd("div",{className:"Dialog__content",children:e.children})]})})};import Ni from"clsx";import{useRef as X_}from"react";import{Popover as Ri}from"radix-ui";var Di=U({name:"viewMode",label:"labels.viewMode",icon:ya,viewMode:!0,trackEvent:{category:"canvas",predicate:e=>!e.viewModeEnabled},perform(e,o){return{appState:{...o,viewModeEnabled:!this.checked(o)},captureUpdate:R.EVENTUALLY}},checked:e=>e.viewModeEnabled,predicate:(e,o,t,r)=>typeof t.viewModeEnabled>"u"&&r.isInteractionEnabled(),keyTest:e=>!e[I.CTRL_OR_CMD]&&e.altKey&&e.code===he.R});var eh=(e,o)=>{let t=o[0]?.type||null;for(let r of o)if(r.type!==t){t=null;break}return dc(e.activeTool.type)&&t!=="image"&&t!=="frame"&&t!=="magicframe"||o.some(r=>dc(r.type))},th=(e,o)=>ai(e.activeTool.type)||o.some(t=>ai(t.type)),oh=(e,o,t,r)=>{let n=e.activeTool.type,i=d=>d(n)||o.some(p=>d(p.type)),a=o.length===1,l=o.length===2&&(zt(o[0])||zt(o[1])),s=!!(e.editingTextElement||e.newElement),c=o.length>0;return{hasSelection:c,showExtraActions:c&&!s,strokeColor:eh(e,o),backgroundColor:th(e,o),fill:n==="bucketfill"||ai(n)&&!hn(e.currentItemBackgroundColor)||o.some(d=>ai(d.type)&&!hn(d.backgroundColor)),strokeWidth:i(qy),freedrawMode:i(Jy),strokeStyle:i($g),sloppiness:i($g),roundness:i(Qy),arrowType:i(ev),arrowheads:i(mc),text:n==="text"||o.some(j),textAlign:n==="text"||jy(o,t),verticalAlign:$y(o,t),opacity:n!=="autoshape"||c,layers:n!=="freedraw"&&n!=="autoshape"&&!o.some(d=>d.type==="freedraw")||ie(t,e).some(d=>d.type==="freedraw"),align:!l&&ko(e,r),distribute:o.length>2,link:a||l,linkSingleOnly:a,cropEditor:!e.croppingElementId&&a&&et(o[0]),lineEditor:!e.selectedLinearElement?.isEditing&&a&&Se(o[0])&&!Re(o[0])}};import{Fragment as ir,jsx as Q,jsxs as Xe}from"react/jsx-runtime";var P0=Ni([qe.SHAPE_ACTIONS_THEME_SCOPE,"properties-content"]),yI=({renderAction:e})=>Xe("fieldset",{children:[Q("legend",{children:h("labels.layers")}),Xe("div",{className:"buttonList",children:[e("sendToBack"),e("sendBackward"),e("bringForward"),e("bringToFront")]})]}),vI=({renderAction:e,showDistribute:o})=>{let t=document.documentElement.getAttribute("dir")==="rtl";return Xe("fieldset",{children:[Q("legend",{children:h("labels.align")}),Xe("div",{className:"buttonList",children:[t?Xe(ir,{children:[e("alignRight"),e("alignHorizontallyCentered"),e("alignLeft")]}):Xe(ir,{children:[e("alignLeft"),e("alignHorizontallyCentered"),e("alignRight")]}),o&&e("distributeHorizontally"),Q("div",{style:{flexBasis:"100%",height:0}}),Xe("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:"-0.5rem"},children:[e("alignTop"),e("alignVerticallyCentered"),e("alignBottom"),o&&e("distributeVertically")]})]})]})},wI=({appState:e,elementsMap:o,renderAction:t,app:r})=>{let n=il(o,e),i=oh(e,n,o,r);return e.activeTool.type==="bucketfill"?Xe("div",{className:"selected-shape-actions",children:[Q("div",{children:t("changeBucketFillBackgroundColor")}),t("changeFillStyle"),t("changeOpacity")]}):Xe("div",{className:"selected-shape-actions",children:[Q("div",{children:i.strokeColor&&t("changeStrokeColor")}),i.backgroundColor&&Q("div",{children:t("changeBackgroundColor")}),i.fill&&t("changeFillStyle"),i.strokeWidth&&t("changeStrokeWidth"),i.strokeStyle&&Q(ir,{children:t("changeStrokeStyle")}),i.freedrawMode&&t("changeFreedrawMode"),i.sloppiness&&Q(ir,{children:t("changeSloppiness")}),i.roundness&&Q(ir,{children:t("changeRoundness")}),i.arrowType&&Q(ir,{children:t("changeArrowType")}),i.text&&Xe(ir,{children:[Q("fieldset",{children:t("changeFontFamily")}),t("changeFontSize"),i.textAlign&&t("changeTextAlign")]}),i.verticalAlign&&t("changeVerticalAlign"),i.arrowheads&&Q(ir,{children:t("changeArrowhead")}),i.opacity&&t("changeOpacity"),i.layers&&Q(yI,{renderAction:t}),i.align&&Q(vI,{renderAction:t,showDistribute:i.distribute}),i.showExtraActions&&Xe("fieldset",{children:[Q("legend",{children:h("labels.actions")}),Xe("div",{className:"buttonList",children:[t("duplicateSelection"),t("deleteSelectedElements"),t("group"),t("ungroup"),i.link&&t("hyperlink"),i.cropEditor&&t("cropEditor"),i.lineEditor&&t("toggleLinearEditor")]})]})]})},TI=({appState:e,renderAction:o,setAppState:t,predicates:r,container:n})=>{let i=r.hasSelection||e.activeTool.type!=="selection"&&e.activeTool.type!=="eraser"&&e.activeTool.type!=="hand"&&e.activeTool.type!=="laser"&&e.activeTool.type!=="lasso",a=e.openPopup==="compactStrokeStyles";return i?Q("div",{className:"compact-action-item",children:Xe(Ri.Root,{open:a,onOpenChange:l=>{t(l?{openPopup:"compactStrokeStyles"}:{openPopup:null})},children:[Q(Ri.Trigger,{asChild:!0,children:Q("button",{type:"button",className:Ni("compact-action-button properties-trigger",{active:a}),title:h("labels.stroke"),onClick:l=>{l.preventDefault(),l.stopPropagation(),t({openPopup:a?null:"compactStrokeStyles"})},children:x1})}),a&&Q(Dn,{className:P0,container:n,style:{maxWidth:"13rem"},onClose:()=>{},children:Xe("div",{className:"selected-shape-actions",children:[r.fill&&o("changeFillStyle"),r.strokeWidth&&o("changeStrokeWidth"),r.freedrawMode&&o("changeFreedrawMode"),r.strokeStyle&&Q(ir,{children:o("changeStrokeStyle")}),r.sloppiness&&Q(ir,{children:o("changeSloppiness")}),r.roundness&&o("changeRoundness"),r.opacity&&o("changeOpacity")]})})]})}):null},CI=({appState:e,renderAction:o,setAppState:t,targetElements:r,predicates:n,container:i,app:a})=>{if(!n.arrowType)return null;let l=e.openPopup==="compactArrowProperties";return Q("div",{className:"compact-action-item",children:Xe(Ri.Root,{open:l,onOpenChange:s=>{t(s?{openPopup:"compactArrowProperties"}:{openPopup:null})},children:[Q(Ri.Trigger,{asChild:!0,children:Q("button",{type:"button",className:Ni("compact-action-button properties-trigger",{active:l}),title:h("labels.arrowtypes"),onClick:s=>{s.preventDefault(),s.stopPropagation(),t({openPopup:l?null:"compactArrowProperties"})},children:(()=>{let s=Xt(r,a,c=>ve(c)?c.elbowed?"elbow":c.roundness?"round":"sharp":null,c=>ve(c),c=>c?null:e.currentItemArrowType);return s==="elbow"?Ln:s==="round"?_n:An})()})}),l&&Q(Dn,{container:i,className:"properties-content",style:{maxWidth:"13rem"},onClose:()=>{},children:o("changeArrowProperties")})]})})},II=({appState:e,renderAction:o,setAppState:t,predicates:r,container:n})=>{let{saveCaretPosition:i,restoreCaretPosition:a}=l2(),l=e.openPopup==="compactTextProperties";return Q("div",{className:"compact-action-item",children:Xe(Ri.Root,{open:l,onOpenChange:s=>{s?(e.editingTextElement&&i(),t({openPopup:"compactTextProperties"})):(t({openPopup:null}),e.editingTextElement&&a())},children:[Q(Ri.Trigger,{asChild:!0,children:Q("button",{type:"button",className:Ni("compact-action-button properties-trigger",{active:l}),title:h("labels.textAlign"),onClick:s=>{s.preventDefault(),s.stopPropagation(),l?t({openPopup:null}):(e.editingTextElement&&i(),t({openPopup:"compactTextProperties"}))},children:Hf})}),e.openPopup==="compactTextProperties"&&Q(Dn,{className:P0,container:n,style:{maxWidth:"13rem"},preventAutoFocusOnTouch:!!e.editingTextElement,onClose:()=>{e.editingTextElement&&a()},children:Xe("div",{className:"selected-shape-actions",children:[r.text&&o("changeFontSize"),r.textAlign&&o("changeTextAlign"),r.verticalAlign&&o("changeVerticalAlign")]})})]})})},SI=({appState:e,renderAction:o,predicates:t,setAppState:r,container:n,showDuplicate:i,showDelete:a})=>{let l=e.openPopup==="compactOtherProperties";return t.showExtraActions?Q("div",{className:"compact-action-item",children:Xe(Ri.Root,{open:l,onOpenChange:s=>{r(s?{openPopup:"compactOtherProperties"}:{openPopup:null})},children:[Q(Ri.Trigger,{asChild:!0,children:Q("button",{type:"button",className:Ni("compact-action-button properties-trigger",{active:l}),title:h("labels.actions"),onClick:s=>{s.preventDefault(),s.stopPropagation(),r({openPopup:l?null:"compactOtherProperties"})},children:_f})}),l&&Q(Dn,{className:P0,container:n,style:{maxWidth:"12rem",justifyContent:"center",alignItems:"center"},onClose:()=>{},children:Xe("div",{className:"selected-shape-actions",children:[t.layers&&Q(yI,{renderAction:o}),t.align&&Q(vI,{renderAction:o,showDistribute:t.distribute}),Xe("fieldset",{children:[Q("legend",{children:h("labels.actions")}),Xe("div",{className:"buttonList",children:[o("group"),o("ungroup"),t.linkSingleOnly&&o("hyperlink"),t.cropEditor&&o("cropEditor"),i&&o("duplicateSelection"),a&&o("deleteSelectedElements")]})]})]})})]})}):null},Z_=({renderAction:e,predicates:o})=>o.lineEditor?Q("div",{className:"compact-action-item",children:e("toggleLinearEditor")}):null,kI=({appState:e,elementsMap:o,renderAction:t,app:r,setAppState:n})=>{let i=il(o,e),a=oh(e,i,o,r),{container:l}=at();return Xe("div",{className:"compact-shape-actions",children:[a.strokeColor&&Q("div",{className:Ni("compact-action-item"),children:t("changeStrokeColor")}),a.backgroundColor&&Q("div",{className:"compact-action-item",children:t(e.activeTool.type==="bucketfill"?"changeBucketFillBackgroundColor":"changeBackgroundColor")}),a.freedrawMode&&Q("div",{className:"compact-action-item",children:t("changeFreedrawMode",{cycle:!0})}),Q(TI,{appState:e,renderAction:t,setAppState:n,predicates:a,container:l}),Q(CI,{appState:e,renderAction:t,setAppState:n,targetElements:i,predicates:a,container:l,app:r}),a.lineEditor&&Q("div",{className:"compact-action-item",children:t("toggleLinearEditor")}),a.text&&Xe(ir,{children:[Q("div",{className:"compact-action-item",children:t("changeFontFamily")}),Q(II,{appState:e,renderAction:t,setAppState:n,predicates:a,container:l})]}),a.showExtraActions&&Q("div",{className:"compact-action-item",children:t("duplicateSelection")}),a.showExtraActions&&Q("div",{className:"compact-action-item",children:t("deleteSelectedElements")}),Q(SI,{appState:e,renderAction:t,predicates:a,setAppState:n,container:l})]})},MI=({appState:e,elementsMap:o,renderAction:t,app:r,setAppState:n})=>{let i=il(o,e),a=oh(e,i,o,r),{container:l}=at(),s=X_(null),c=s.current?.getBoundingClientRect()?.width??0,d=9,p=6,m=32,u=d*m+(d-1)*p,b=m+p,f=c>=u+b,x=c>=u+2*b;return Xe(Et,{className:"compact-shape-actions mobile-shape-actions",style:{flexDirection:"row",boxShadow:"none",padding:0,zIndex:2,backgroundColor:"transparent",height:m*1.35,marginBottom:4,alignItems:"center",gap:p,pointerEvents:"none"},ref:s,children:[Xe("div",{style:{display:"flex",flexDirection:"row",gap:p,flex:1},children:[a.strokeColor&&Q("div",{className:Ni("compact-action-item"),children:t("changeStrokeColor")}),a.backgroundColor&&Q("div",{className:"compact-action-item",children:t(e.activeTool.type==="bucketfill"?"changeBucketFillBackgroundColor":"changeBackgroundColor")}),Q(TI,{appState:e,renderAction:t,setAppState:n,predicates:a,container:l}),Q(CI,{appState:e,renderAction:t,setAppState:n,targetElements:i,predicates:a,container:l,app:r}),Q(Z_,{renderAction:t,predicates:a}),a.text&&Xe(ir,{children:[Q("div",{className:"compact-action-item",children:t("changeFontFamily")}),Q(II,{appState:e,renderAction:t,setAppState:n,predicates:a,container:l})]}),Q(SI,{appState:e,renderAction:t,predicates:a,setAppState:n,container:l,showDuplicate:!x,showDelete:!f})]}),Xe("div",{style:{display:"flex",flexDirection:"row",gap:p},children:[Q("div",{className:"compact-action-item",children:t("undo")}),Q("div",{className:"compact-action-item",children:t("redo")}),x&&Q("div",{className:"compact-action-item",children:t("duplicateSelection")}),f&&Q("div",{className:"compact-action-item",children:t("deleteSelectedElements")})]})]})},AI=({renderAction:e})=>Q(oo.Col,{gap:1,className:qe.ZOOM_ACTIONS,children:Xe(oo.Row,{align:"center",children:[e("zoomOut"),e("resetZoom"),e("zoomIn")]})}),LI=({renderAction:e,className:o})=>Xe("div",{className:`undo-redo-buttons ${o}`,children:[Q("div",{className:"undo-button-container",children:Q(fo,{label:h("buttons.undo"),children:e("undo")})}),Q("div",{className:"redo-button-container",children:Xe(fo,{label:h("buttons.redo"),children:[" ",e("redo")]})})]}),_I=({actionManager:e,showExitZenModeBtn:o})=>Q("button",{type:"button",className:Ni("disable-zen-mode",{"disable-zen-mode--visible":o}),onClick:()=>e.executeAction(On),children:h("buttons.exitZenMode")}),PI=({actionManager:e})=>Q("button",{type:"button",className:"disable-view-mode",onClick:()=>e.executeAction(Di),children:y1});import{useRef as $_}from"react";var D0=e=>{let o=$_({userFn:e});return o.current.userFn=e,o.current.stableFn||(o.current.stableFn=(...t)=>o.current.userFn(...t)),o.current.stableFn};import{jsx as q_,jsxs as j_}from"react/jsx-runtime";var La=Ce(null),DI=()=>{let[e,o]=re(La),t=je();return e&&e==="clearCanvas"?q_(Yu,{onConfirm:()=>{t.executeAction(Qr),o(null)},onCancel:()=>o(null),title:h("clearCanvasDialog.title"),children:j_("p",{className:"clear-canvas__content",children:[" ",h("alerts.clearReset")]})}):null};var RI={};import{jsx as $t,jsxs as nn}from"react/jsx-runtime";var eP=Ce(null),ft={app:"App",export:"Export",tools:"Tools",editor:"Editor",elements:"Elements",links:"Links",library:"Library"},NI=e=>{switch(e){case ft.app:return 1;case ft.export:return 2;case ft.editor:return 3;case ft.tools:return 4;case ft.elements:return 5;case ft.links:return 6;default:return 10}},ih=({shortcut:e,className:o,children:t})=>{let r=e.replace("++","+$").split("+");return nn("div",{className:FI("shortcut",o),children:[r.map((n,i)=>$t("div",{className:"shortcut-wrapper",children:$t("div",{className:"shortcut-key",children:n==="$"?"+":n})},n)),$t("div",{className:"shortcut-desc",children:t})]})},zI=e=>!e.altKey&&e[I.CTRL_OR_CMD]&&(e.shiftKey&&e.key.toLowerCase()===I.P||e.key===I.SLASH),tP=Object.assign(e=>{let o=fe(),t=Ie();return nh(()=>{let r=n=>{zI(n)&&(n.preventDefault(),n.stopPropagation(),t(i=>{let a=i.openDialog?.name==="commandPalette"?null:{name:"commandPalette"};return a&&xe("command_palette","open","shortcut"),{openDialog:a}}))};return window.addEventListener("keydown",r,{capture:!0}),()=>window.removeEventListener("keydown",r,{capture:!0})},[t]),o.openDialog?.name!=="commandPalette"?null:$t(oP,{...e})},{defaultItems:RI});function oP({customCommandPaletteItems:e}){let o=Ke(),t=fe(),r=Ie(),n=Sr(),i=je(),[a,l]=re(eP),[s,c]=rh(null),d=BI(null),p=yi({uiAppState:t,customCommandPaletteItems:e,appProps:n}),[m]=re(on),u=Q_(()=>m.libraryItems?.filter(M=>!!M.name).map(M=>({label:M.name,icon:$t(rP,{id:M.id,elements:M.elements}),category:"Library",order:NI("Library"),haystack:Aa(M.name),perform:()=>{o.onInsertElements(ns([M]))}}))||[],[o,m.libraryItems]);nh(()=>{let{uiAppState:M,customCommandPaletteItems:N,appProps:L}=p,D=z=>{let J="";return z.label&&(typeof z.label=="function"?J=h(z.label(o.scene.getNonDeletedElements(),M,o)):J=h(z.label)),J},O=z=>typeof z.icon=="function"?z.icon(M,o.scene.getNonDeletedElements()):z.icon,V=[],K=(z,J,X)=>{let le={label:D(z),icon:O(z),category:J,shortcut:tt(z.name),keywords:z.keywords,predicate:z.predicate,viewMode:z.viewMode,perform:()=>{i.executeAction(z,"commandPalette")}};return X?X(le,z):le};if(M&&o.scene&&i){let z=[i.actions.group,i.actions.ungroup,i.actions.cut,i.actions.copy,i.actions.deleteSelectedElements,i.actions.wrapSelectionInFrame,i.actions.copyStyles,i.actions.pasteStyles,i.actions.bringToFront,i.actions.bringForward,i.actions.sendBackward,i.actions.sendToBack,i.actions.alignTop,i.actions.alignBottom,i.actions.alignLeft,i.actions.alignRight,i.actions.alignVerticallyCentered,i.actions.alignHorizontallyCentered,i.actions.duplicateSelection,i.actions.flipHorizontal,i.actions.flipVertical,i.actions.zoomToFitSelection,i.actions.zoomToFitSelectionInViewport,i.actions.increaseFontSize,i.actions.decreaseFontSize,i.actions.toggleLinearEditor,i.actions.cropEditor,i.actions.togglePolygon,$l,zu,gC].map(F=>K(F,ft.elements,(W,ee)=>({...W,predicate:ee.predicate?ee.predicate:(Te,Ne,Ze,pt)=>ie(Te,Ne).length>0}))),J=[i.actions.undo,i.actions.redo,i.actions.zoomIn,i.actions.zoomOut,i.actions.resetZoom,i.actions.zoomToFit,i.actions.zenMode,i.actions.viewMode,i.actions.gridMode,i.actions.objectsSnapMode,i.actions.toggleShortcuts,i.actions.selectAll,i.actions.toggleElementLock,i.actions.unlockAllElements,i.actions.stats].map(F=>K(F,ft.editor)),X=[i.actions.saveToActiveFile,i.actions.saveFileToDisk,i.actions.copyAsPng,i.actions.copyAsSvg].map(F=>K(F,ft.export));V=[...z,...J,{label:D(Qr),icon:O(Qr),shortcut:tt(Qr.name),category:ft.editor,keywords:["delete","destroy"],viewMode:!1,perform:()=>{St.set(La,"clearCanvas")}},{label:h("buttons.exportImage"),category:ft.export,icon:Rc,shortcut:tt("imageExport"),keywords:["export","image","png","jpeg","svg","clipboard","picture"],perform:()=>{r({openDialog:{name:"imageExport"}})}},...X];let le=[K(Nn,ft.app),{label:h("toolBar.library"),category:ft.app,icon:Mc,viewMode:!1,perform:()=>{M.openSidebar?r({openSidebar:null}):r({openSidebar:{name:no.name,tab:no.defaultTab}})}},{label:h("search.title"),category:ft.app,icon:Io,viewMode:!0,perform:()=>{i.executeAction(ss)}},{label:h("labels.shapeSwitch"),category:ft.elements,icon:kl,perform:()=>{i.executeAction(hC)}},{label:h("labels.changeStroke"),keywords:["color","outline"],category:ft.elements,icon:ho,viewMode:!1,predicate:(F,W)=>{let ee=ie(F,W);return ee.length>0&&eh(W,ee)},perform:()=>{r(F=>({openPopup:"elementStroke"}))}},{label:h("labels.changeBackground"),keywords:["color","fill"],icon:ho,category:ft.elements,viewMode:!1,predicate:(F,W)=>{let ee=ie(F,W);return ee.length>0&&th(W,ee)},perform:()=>{r(F=>({openPopup:"elementBackground"}))}},{label:h("labels.canvasBackground"),keywords:["color"],icon:ho,category:ft.editor,viewMode:!1,perform:()=>{r(F=>({openMenu:F.openMenu==="canvas"?null:"canvas",openPopup:"canvasBackground"}))}},...Object.keys(yt).reduce((F,W)=>{let ee=yt[W];if(L.UIOptions.tools?.[W]===!1)return F;let Te=su(W)||ee.numericKey,Ne={label:h(`toolBar.${W}`),category:ft.tools,shortcut:Te,icon:ee.icon,keywords:["toolbar"],viewMode:!1,perform:()=>{o.setActiveTool({type:W},{toggle:!1})}};return F.push(Ne),F},[]),{label:h("toolBar.lock"),category:ft.tools,icon:M.activeTool.locked?ha:gi,shortcut:I.Q.toLocaleUpperCase(),viewMode:!1,perform:()=>{o.toggleLock()}},{label:`${h("labels.textToDiagram")}...`,category:ft.tools,icon:Qb,viewMode:!1,predicate:L.aiEnabled,perform:()=>{r(F=>({...F,openDialog:{name:"ttd",tab:"text-to-diagram"}}))}},{label:`${h("toolBar.mermaidToExcalidraw")}...`,category:ft.tools,icon:Ea,viewMode:!1,predicate:L.aiEnabled,perform:()=>{r(F=>({...F,openDialog:{name:"ttd",tab:"mermaid"}}))}}],ce=[...V,...le,...N||[]].map(F=>({...F,icon:F.icon||kl,order:F.order??NI(F.category),haystack:`${Aa(F.label.toLocaleLowerCase())} ${F.keywords?.join(" ")||""}`}));c(ce),l([...ce,...u].find(F=>F.label===a?.label)??null)}},[p,o,i,c,a?.label,l,r,u]);let[b,f]=rh(""),[x,v]=rh(null),[y,E]=rh({}),w=M=>{r({openDialog:null},M),f("")},T=(M,N)=>{t.openDialog?.name==="commandPalette"&&(N.stopPropagation(),N.preventDefault(),document.body.classList.add("excalidraw-animations-disabled"),w(()=>{M.perform({actionManager:i,event:N}),l(M),requestAnimationFrame(()=>{document.body.classList.remove("excalidraw-animations-disabled")})}))},S=D0(M=>M.viewMode===!1&&t.viewModeEnabled?!1:typeof M.predicate=="function"?M.predicate(o.scene.getNonDeletedElements(),t,n,o):M.predicate===void 0||M.predicate),_=D0(M=>{let N=io(M.target)||zI(M)||M.key===I.ESCAPE;if(N&&M.key!==I.ARROW_UP&&M.key!==I.ARROW_DOWN&&M.key!==I.ENTER)return;let L=Object.values(y).flat(),D=a&&!b&&S(a);if(M.key===I.ARROW_UP){M.preventDefault();let O=L.findIndex(z=>z.label===x?.label);if(D){if(O===0){v(a);return}if(x===a){let z=L[L.length-1];z&&v(z);return}}let V;O===-1?V=L.length-1:V=O===0?L.length-1:(O-1)%L.length;let K=L[V];K&&v(K);return}if(M.key===I.ARROW_DOWN){M.preventDefault();let O=L.findIndex(z=>z.label===x?.label);if(D){if(!x||O===L.length-1){v(a);return}if(x===a){let z=L[0];z&&v(z);return}}let V=(O+1)%L.length,K=L[V];K&&v(K);return}if(M.key===I.ENTER&&x&&setTimeout(()=>{T(x,M)}),!N){if(M.stopPropagation(),/^[a-zA-Z0-9]$/.test(M.key)){d?.current?.focus();return}M.preventDefault()}});return nh(()=>(window.addEventListener("keydown",_,{capture:!0}),()=>window.removeEventListener("keydown",_,{capture:!0})),[_]),nh(()=>{if(!s)return;let M=O=>{let V={};for(let K of O)V[K.category]?V[K.category].push(K):V[K.category]=[K];return V},N=b?.length>1?[...s.filter(S).sort((O,V)=>O.order-V.order),...u]:s.filter(S).sort((O,V)=>O.order-V.order),L=!b&&a&&S(a);if(!b){E(M(L?N.filter(O=>O.label!==a?.label):N)),v(L?a:N[0]||null);return}let D=Aa(b.toLocaleLowerCase().replace(/[<>_| -]/g,""));N=J_.filter(D,N,{extract:O=>O.haystack??""}).sort((O,V)=>V.score-O.score).map(O=>O.original),E(M(N)),v(N[0]??null)},[b,s,S,a,u]),nn(kt,{onCloseRequest:()=>w(),closeOnClickOutside:!0,title:!1,size:720,autofocus:!0,className:"command-palette-dialog",children:[$t(_i,{value:b,placeholder:h("commandPalette.search.placeholder"),onChange:M=>{f(M)},selectOnRender:!0,ref:d}),o.editorInterface.formFactor!=="phone"&&nn("div",{className:"shortcuts-wrapper",children:[$t(ih,{shortcut:"\u2191\u2193",children:h("commandPalette.shortcuts.select")}),$t(ih,{shortcut:"\u21B5",children:h("commandPalette.shortcuts.confirm")}),$t(ih,{shortcut:H("Esc"),children:h("commandPalette.shortcuts.close")})]}),nn("div",{className:"commands",children:[a&&!b&&nn("div",{className:"command-category",children:[nn("div",{className:"command-category-title",children:[h("commandPalette.recents"),$t("div",{className:"icon",style:{marginLeft:"6px"},children:e1})]}),$t(OI,{command:a,isSelected:a.label===x?.label,onClick:M=>T(a,M),disabled:!S(a),onMouseMove:()=>v(a),showShortcut:o.editorInterface.formFactor!=="phone",appState:t})]}),Object.keys(y).length>0?Object.keys(y).map((M,N)=>nn("div",{className:"command-category",children:[$t("div",{className:"command-category-title",children:M}),y[M].map(L=>$t(OI,{command:L,isSelected:L.label===x?.label,onClick:D=>T(L,D),onMouseMove:()=>v(L),showShortcut:o.editorInterface.formFactor!=="phone",appState:t,size:M==="Library"?"large":"small"},L.label))]},M)):s?nn("div",{className:"no-match",children:[$t("div",{className:"icon",children:Io})," ",h("commandPalette.search.noMatch")]}):null]})]})}var rP=({id:e,elements:o})=>{let t=BI(null),{svgCache:r}=os();return Hu(e,o,r,t),$t("div",{className:"library-item-icon",ref:t})},OI=({command:e,isSelected:o,disabled:t,onMouseMove:r,onClick:n,showShortcut:i,appState:a,size:l="small"})=>{let s=()=>{};return nn("div",{className:FI("command-item",{"item-selected":o,"item-disabled":t,"command-item-large":l==="large"}),ref:c=>{o&&!t&&c?.scrollIntoView?.({block:"nearest"})},onClick:t?s:n,onMouseMove:t?s:r,title:t?h("commandPalette.itemNotAvailable"):"",children:[nn("div",{className:"name",children:[e.icon&&$t(qr,{className:"icon",size:"var(--icon-size, 1rem)",icon:typeof e.icon=="function"?e.icon(a,[]):e.icon}),$t(va,{children:e.label})]}),i&&e.shortcut&&$t(ih,{shortcut:e.shortcut})]})};import{jsx as HI}from"react/jsx-runtime";var _a=U({name:"toggleLinearEditor",category:ft.elements,label:(e,o,t)=>t.scene.getSelectedElements({selectedElementIds:o.selectedElementIds})[0]?.type==="arrow"?"labels.lineEditor.editArrow":"labels.lineEditor.edit",keywords:["line"],trackEvent:{category:"element"},predicate:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o);return!!(!o.selectedLinearElement?.isEditing&&n.length===1&&Se(n[0])&&!Re(n[0]))},perform(e,o,t,r){let n=r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0})[0];Qe(n,"No selected element found"),Qe(o.selectedLinearElement,"No selected linear element found"),Qe(n.id===o.selectedLinearElement.elementId,"Selected element ID and linear editor elementId does not match");let i={...o.selectedLinearElement,isEditing:!o.selectedLinearElement.isEditing};return{appState:{...o,selectedLinearElement:i},captureUpdate:R.IMMEDIATELY}},PanelComponent:({appState:e,updateData:o,app:t})=>{let r=t.scene.getSelectedElements({selectedElementIds:e.selectedElementIds})[0];if(!r)return null;let n=h(r.type==="arrow"?"labels.lineEditor.editArrow":"labels.lineEditor.edit");return HI(q,{type:"button",icon:g1,title:n,"aria-label":n,onClick:()=>o(null)})}}),Xne=U({name:"togglePolygon",category:ft.elements,icon:lp,keywords:["loop"],label:(e,o,t)=>!t.scene.getSelectedElements({selectedElementIds:o.selectedElementIds}).some(i=>!nt(i)||!i.polygon)?"labels.polygon.breakPolygon":"labels.polygon.convertToPolygon",trackEvent:{category:"element"},predicate:(e,o,t,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds});return n.length>0&&n.every(i=>nt(i)&&i.points.length>=4)},perform(e,o,t,r){let n=r.scene.getSelectedElements(o);if(n.some(s=>!nt(s)))return!1;let i=n,a=i.some(s=>!s.polygon),l=ne(i);return{elements:e.map(s=>!l.has(s.id)||!nt(s)?s:se(s,{backgroundColor:a?s.backgroundColor:"transparent",...Hm(s,a)})),appState:o,captureUpdate:R.IMMEDIATELY}},PanelComponent:({appState:e,updateData:o,app:t})=>{let r=t.scene.getSelectedElements({selectedElementIds:e.selectedElementIds});if(r.length===0||r.some(a=>!nt(a)||!a.polygon||a.points.length<3))return null;let n=r.every(a=>nt(a)&&a.polygon),i=h(n?"labels.polygon.breakPolygon":"labels.polygon.convertToPolygon");return HI(q,{type:"toggle",icon:lp,title:i,"aria-label":i,checked:n,onSelect:()=>o(null),style:{marginLeft:"auto"}})}});var ss=U({name:"searchMenu",icon:Io,keywords:["search","find"],label:"search.title",viewMode:!0,trackEvent:{category:"search_menu",action:"toggle",predicate:e=>e.gridModeEnabled},perform(e,o,t,r){if(o.openDialog)return!1;if(o.openSidebar?.name===no.name&&o.openSidebar.tab===pn){let n=r.excalidrawContainerValue.container?.querySelector(`.${qe.SEARCH_MENU_INPUT_WRAPPER} input`);return n?.focus(),n?.select(),!1}return{appState:{...o,openSidebar:{name:no.name,tab:pn},openDialog:null},captureUpdate:R.EVENTUALLY}},checked:e=>e.gridModeEnabled,predicate:(e,o,t)=>t.gridModeEnabled===void 0,keyTest:e=>e[I.CTRL_OR_CMD]&&e.key===I.F});import{jsx as nP}from"react/jsx-runtime";var ah=U({name:"cropEditor",label:"helpDialog.cropStart",icon:_p,viewMode:!0,trackEvent:{category:"menu"},keywords:["image","crop"],perform(e,o,t,r){let n=r.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!0})[0];return{appState:{...o,isCropping:!1,croppingElementId:n.id},captureUpdate:R.IMMEDIATELY}},predicate:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o);return!!(!o.croppingElementId&&n.length===1&&et(n[0]))},PanelComponent:({appState:e,updateData:o,app:t})=>{let r=h("helpDialog.cropStart");return nP(q,{type:"button",icon:_p,title:r,"aria-label":r,onClick:()=>o(null)})}});var GI=(e,o)=>{let t=o.scene.getSelectedElements(e);return t.length===1&&oe(t[0])},WI=U({name:"selectAllElementsInFrame",label:"labels.selectAllElementsInFrame",trackEvent:{category:"canvas"},perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o).at(0)||null;if(oe(n)){let i=jo(de(e),n.id).filter(a=>!(a.type==="text"&&a.containerId));return{elements:e,appState:{...o,selectedElementIds:i.reduce((a,l)=>(a[l.id]=!0,a),{})},captureUpdate:R.IMMEDIATELY}}return{elements:e,appState:o,captureUpdate:R.EVENTUALLY}},predicate:(e,o,t,r)=>GI(o,r)}),VI=U({name:"removeAllElementsFromFrame",label:"labels.removeAllElementsFromFrame",trackEvent:{category:"history"},perform:(e,o,t,r)=>{let n=r.scene.getSelectedElements(o).at(0)||null;return oe(n)?{elements:wv(e,n),appState:{...o,selectedElementIds:{[n.id]:!0}},captureUpdate:R.IMMEDIATELY}:{elements:e,appState:o,captureUpdate:R.EVENTUALLY}},predicate:(e,o,t,r)=>GI(o,r)}),eae=U({name:"updateFrameRendering",label:"labels.updateFrameRendering",viewMode:!0,trackEvent:{category:"canvas"},perform:(e,o)=>({elements:e,appState:{...o,frameRendering:{...o.frameRendering,enabled:!o.frameRendering.enabled}},captureUpdate:R.EVENTUALLY}),checked:e=>e.frameRendering.enabled}),YI=U({name:"wrapSelectionInFrame",label:"labels.wrapSelectionInFrame",trackEvent:{category:"element"},predicate:(e,o,t,r)=>{let n=ie(e,o);return n.length>0&&!n.some(i=>oe(i))},perform:(e,o,t,r)=>{let n=ie(e,o),i=r.scene.getNonDeletedElementsMap(),[a,l,s,c]=ye(n,i),d=16,p=Vm({x:a-d,y:l-d,width:s-a+d*2,height:c-l+d*2});if(o.editingGroupId){let u=He(n,o.editingGroupId);for(let b of u){let f=b.groupIds.indexOf(o.editingGroupId);lo(b,i,{groupIds:b.groupIds.slice(0,f)})}}return{elements:ll([...r.scene.getElementsIncludingDeleted(),p],n,p),appState:{selectedElementIds:{[p.id]:!0}},captureUpdate:R.IMMEDIATELY}}});var cs=class extends Ec{applyTo(o,t,r){let[n,i]=this.elements.applyTo(o,r.elements,{excludedProperties:new Set(["version","versionNonce"])}),[a,l]=this.appState.applyTo(t,n);return[n,a,i||l]}static calculate(o,t){return super.calculate(o,t)}static inverse(o){return super.inverse(o)}static applyLatestChanges(o,t,r,n){return super.applyLatestChanges(o,t,r,n)}},Pa=class{constructor(o=!0,t=!0){this.isUndoStackEmpty=o;this.isRedoStackEmpty=t}},Ed=class e{constructor(o){this.store=o;C(this,"onHistoryChangedEmitter",new Xo);C(this,"undoStack",[]);C(this,"redoStack",[])}get isUndoStackEmpty(){return this.undoStack.length===0}get isRedoStackEmpty(){return this.redoStack.length===0}clear(){this.undoStack.length=0,this.redoStack.length=0}record(o){if(o.isEmpty()||o instanceof cs)return;let t=cs.inverse(o);this.undoStack.push(t),t.elements.isEmpty()||(this.redoStack.length=0),this.onHistoryChangedEmitter.trigger(new Pa(this.isUndoStackEmpty,this.isRedoStackEmpty))}undo(o,t){return this.perform(o,t,()=>e.pop(this.undoStack),r=>e.push(this.redoStack,r))}redo(o,t){return this.perform(o,t,()=>e.pop(this.redoStack),r=>e.push(this.undoStack,r))}perform(o,t,r,n){try{let i=r();if(i===null)return;let a=R.IMMEDIATELY,l=this.store.snapshot,s=o,c=t,d=!1;for(;i;){try{[s,c,d]=i.applyTo(s,c,l);let p=l.elements,m=l.maybeClone(a,s,c),u=Xv.create(l,m),b=cs.applyLatestChanges(i,p,s);b.isEmpty()||(this.store.scheduleMicroAction({action:a,change:u,delta:b}),i=b),l=m}finally{n(i)}if(d)break;i=r()}return[s,c]}finally{this.onHistoryChangedEmitter.trigger(new Pa(this.isUndoStackEmpty,this.isRedoStackEmpty))}}static pop(o){if(!o.length)return null;let t=o.pop();return t!==void 0?t:null}static push(o,t){let r=cs.inverse(t);return o.push(r)}};import{useEffect as iP,useState as aP}from"react";var R0=(e,o)=>{let[t,r]=aP(o);return iP(()=>{let n=e.on(i=>{r(i)});return()=>{n()}},[e]),t};import{jsx as $I}from"react/jsx-runtime";var KI=(e,o,t)=>{if(!o.multiElement&&!o.resizingElement&&!o.editingTextElement&&!o.newElement&&!o.selectedElementsAreBeingDragged&&!o.selectionElement&&!e.flowchart.isCreatingChart&&!e.drawShape.hasPendingGesture()){let r=t();if(!r)return{captureUpdate:R.EVENTUALLY};let[n,i]=r,a=Nm(Array.from(n.values()));return{appState:i,elements:a,captureUpdate:R.NEVER}}return{captureUpdate:R.EVENTUALLY}},XI=e=>({name:"undo",label:"buttons.undo",icon:mp,trackEvent:{category:"history"},viewMode:!1,perform:(o,t,r,n)=>KI(n,t,()=>e.undo(ne(o),t)),keyTest:o=>o[I.CTRL_OR_CMD]&&pm(o,I.Z)&&!o.shiftKey,PanelComponent:({appState:o,updateData:t,data:r,app:n})=>{let{isUndoStackEmpty:i}=R0(e.onHistoryChangedEmitter,new Pa(e.isUndoStackEmpty,e.isRedoStackEmpty)),a=Ut()==="mobile";return $I(q,{type:"button",icon:mp,"aria-label":h("buttons.undo"),onClick:t,size:r?.size||"medium",disabled:i,"data-testid":"button-undo",style:{...a?un:{}}})}}),ZI=e=>({name:"redo",label:"buttons.redo",icon:pp,trackEvent:{category:"history"},viewMode:!1,perform:(o,t,r,n)=>KI(n,t,()=>e.redo(ne(o),t)),keyTest:o=>o[I.CTRL_OR_CMD]&&o.shiftKey&&pm(o,I.Z)||o[I.CTRL_OR_CMD]&&!o.shiftKey&&pm(o,I.Y),PanelComponent:({appState:o,updateData:t,data:r,app:n})=>{let{isRedoStackEmpty:i}=R0(e.onHistoryChangedEmitter,new Pa(e.isUndoStackEmpty,e.isRedoStackEmpty)),a=Ut()==="mobile";return $I(q,{type:"button",icon:pp,"aria-label":h("buttons.redo"),onClick:t,size:r?.size||"medium",disabled:i,"data-testid":"button-redo",style:{...a?un:{}}})}});var N0=U({name:"autoResize",label:"labels.autoResize",icon:null,trackEvent:{category:"element"},predicate:(e,o,t)=>{let r=ie(e,o);return r.length===1&&j(r[0])&&!r[0].autoResize},perform:(e,o,t,r)=>{let n=ie(e,o),i=el(t)&&j(t)?t:n[0],a=e.find(d=>d.id===i?.id);if(!a||!j(a))return!1;let l=it(a.originalText,ct(a),a.lineHeight),s=Nv(a),c=se(a,{autoResize:!0,width:l.width,height:l.height,x:a.x+(a.width-l.width)*s.x,y:a.y+(a.height-l.height)*s.y,text:a.originalText});return Jo(c)&&wo(c,r.scene,{changedElements:new Map([[c.id,c]])}),{appState:o,elements:e.map(d=>d.id===c.id?c:d),captureUpdate:R.IMMEDIATELY}}});import{jsx as lP}from"react/jsx-runtime";var O0=(e,o,t,r,n,i)=>{if(e.trackEvent)try{typeof e.trackEvent=="object"&&(!e.trackEvent.predicate||e.trackEvent.predicate(t,r,i))&&xe(e.trackEvent.category,e.trackEvent.action||e.name,`${o} (${n.editorInterface.formFactor==="phone"?"mobile":"desktop"})`)}catch(a){console.error("error while logging action:",a)}},lh=class{constructor(o,t,r,n){C(this,"actions",{});C(this,"updater");C(this,"getAppState");C(this,"getElementsIncludingDeleted");C(this,"app");C(this,"isActionBlockedByViewportTransition",o=>o.navigation===!0&&this.app.viewport.isLockedTransitionPending);C(this,"renderAction",(o,t)=>{let r=this.app.props.UIOptions.canvasActions;if(this.actions[o]&&"PanelComponent"in this.actions[o]&&(!(o in r)||r[o])){let n=this.actions[o],i=n.PanelComponent;i.displayName="PanelComponent";let a=this.getElementsIncludingDeleted(),l=this.getAppState(),s=c=>{this.isActionBlockedByViewportTransition(n)||(O0(n,"ui",l,a,this.app,c),this.updater(n.perform(this.getElementsIncludingDeleted(),this.getAppState(),c,this.app)))};return lP(i,{elements:this.getElementsIncludingDeleted(),appState:this.getAppState(),updateData:s,appProps:this.app.props,app:this.app,data:t,renderAction:this.renderAction})}return null});C(this,"isActionEnabled",o=>{let t=this.getElementsIncludingDeleted(),r=this.getAppState();return!o.predicate||o.predicate(t,r,this.app.props,this.app)});this.updater=i=>{if(ti(i))i.then(a=>o(a));else return o(i)},this.getAppState=t,this.getElementsIncludingDeleted=r,this.app=n}registerAction(o){this.actions[o.name]=o}registerAll(o){o.forEach(t=>this.registerAction(t))}handleKeyDown(o){if(!this.app.isInteractionEnabled()&&!this.app.isNavigationEnabled())return!1;let t=this.app.props.UIOptions.canvasActions,r=Object.values(this.actions).sort((s,c)=>(c.keyPriority||0)-(s.keyPriority||0)).filter(s=>(s.name in t?t[s.name]:!0)&&s.keyTest&&s.keyTest(o,this.getAppState(),this.getElementsIncludingDeleted(),this.app));if(r.length!==1)return r.length>1&&console.warn("Canceling as multiple actions match this shortcut",r),!1;let n=r[0];if(!this.app.isInteractionEnabled()&&n.navigation!==!0||this.getAppState().viewModeEnabled&&n.viewMode!==!0)return!1;if(this.isActionBlockedByViewportTransition(n))return o.preventDefault(),o.stopPropagation(),!0;let i=this.getElementsIncludingDeleted(),a=this.getAppState(),l=null;return O0(n,"keyboard",a,i,this.app,null),o.preventDefault(),o.stopPropagation(),this.updater(r[0].perform(i,a,l,this.app)),!0}executeAction(o,t="api",r=null){if(t!=="api"&&!this.app.isInteractionEnabled()&&!(this.app.isNavigationEnabled()&&o.navigation===!0)||this.isActionBlockedByViewportTransition(o))return;let n=this.getElementsIncludingDeleted(),i=this.getAppState();O0(o,t,i,n,this.app,r),this.updater(o.perform(n,i,r,this.app))}};var F0=e=>{let o=Array.from(e.values());return{x:jI(o,t=>t.x)/o.length,y:jI(o,t=>t.y)/o.length}},B0=([e,o])=>Math.hypot(e.x-o.x,e.y-o.y),jI=(e,o)=>e.reduce((t,r)=>t+o(r),0);var sP=8,qI=99999,sh=e=>sP/e,xo=class xo{};C(xo,"referenceSnapPoints",null),C(xo,"visibleGaps",null),C(xo,"setReferenceSnapPoints",o=>{xo.referenceSnapPoints=o}),C(xo,"getReferenceSnapPoints",()=>xo.referenceSnapPoints),C(xo,"setVisibleGaps",o=>{xo.visibleGaps=o}),C(xo,"getVisibleGaps",()=>xo.visibleGaps),C(xo,"destroy",()=>{xo.referenceSnapPoints=null,xo.visibleGaps=null});var ar=xo,Oi=e=>e.props.gridModeEnabled??e.state.gridModeEnabled,zn=({event:e,app:o,selectedElements:t})=>{if(e){let r=o.state.activeTool.type==="lasso"&&o.state.selectedElementsAreBeingDragged;return(o.state.activeTool.type!=="lasso"||r)&&(o.state.objectsSnapModeEnabled&&!e[I.CTRL_OR_CMD]||!o.state.objectsSnapModeEnabled&&e[I.CTRL_OR_CMD]&&!Oi(o))}return t.length===1&&t[0].type==="arrow"?!1:o.state.objectsSnapModeEnabled},cP=(e,o,t=.01)=>Math.abs(e-o)<=t,yd=(e,o,{omitCenter:t,boundingBoxCorners:r,dragOffset:n}={omitCenter:!1,boundingBoxCorners:!1})=>{let i=[];if(e.length===1){let a=e[0],[l,s,c,d,p,m]=Yt(a,o);n&&(l+=n.x,c+=n.x,p+=n.x,s+=n.y,d+=n.y,m+=n.y);let u=(c-l)/2,b=(d-s)/2;if((a.type==="diamond"||a.type==="ellipse")&&!r){let f=ke(A(l,s+b),A(p,m),a.angle),x=ke(A(l+u,s),A(p,m),a.angle),v=ke(A(c,s+b),A(p,m),a.angle),y=ke(A(l+u,d),A(p,m),a.angle),E=A(p,m);i=t?[f,x,v,y]:[f,x,v,y,E]}else{let f=ke(A(l,s),A(p,m),a.angle),x=ke(A(c,s),A(p,m),a.angle),v=ke(A(l,d),A(p,m),a.angle),y=ke(A(c,d),A(p,m),a.angle),E=A(p,m);i=t?[f,x,v,y]:[f,x,v,y,E]}}else if(e.length>1){let[a,l,s,c]=Gm(e,n??{x:0,y:0}),d=s-a,p=c-l,m=A(a,l),u=A(s,l),b=A(a,c),f=A(s,c),x=A(a+d/2,l+p/2);i=t?[m,u,b,f]:[m,u,b,f,x]}return i.map(a=>A(vt(a[0]),vt(a[1])))},e3=(e,o,t,r)=>tf(e,o,t,r),t3=(e,o,t,r)=>{let n=e3(e,o,t,r),i=ef(n,r).filter(p=>!(p.length===1&&xt(p[0]))).map(p=>ye(p).map(m=>vt(m))),a=i.sort((p,m)=>p[0]-m[0]),l=[],s=0;e:for(let p=0;p<a.length;p++){let m=a[p];for(let u=p+1;u<a.length;u++){if(++s>qI)break e;let b=a[u],[,f,x,v]=m,[y,E,,w]=b;x<y&&Us(Do(f,v),Do(E,w))&&l.push({startBounds:m,endBounds:b,startSide:[A(x,f),A(x,v)],endSide:[A(y,E),A(y,w)],length:y-x,overlap:Gs(Do(f,v),Do(E,w))})}}let c=i.sort((p,m)=>p[1]-m[1]),d=[];s=0;e:for(let p=0;p<c.length;p++){let m=c[p];for(let u=p+1;u<c.length;u++){if(++s>qI)break e;let b=c[u],[f,,x,v]=m,[y,E,w]=b;v<E&&Us(Do(f,x),Do(y,w))&&d.push({startBounds:m,endBounds:b,startSide:[A(f,v),A(x,v)],endSide:[A(y,E),A(w,E)],length:E-v,overlap:Gs(Do(f,x),Do(y,w))})}}return{horizontalGaps:l,verticalGaps:d}},JI=(e,o,t,r,n,i,a)=>{if(!zn({app:t,event:r,selectedElements:e}))return[];if(e.length===0)return[];let l=ar.getVisibleGaps();if(l){let{horizontalGaps:s,verticalGaps:c}=l,[d,p,m,u]=Gm(e,o).map(x=>vt(x)),b=(d+m)/2,f=(p+u)/2;for(let x of s){if(!Us(Do(p,u),x.overlap))continue;let v=x.startSide[0][0]+x.length/2,y=vt(v-b);if(x.length>m-d&&Math.abs(y)<=a.x){Math.abs(y)<a.x&&(n.length=0),a.x=Math.abs(y);let L={type:"gap",direction:"center_horizontal",gap:x,offset:y};n.push(L);continue}let[,,w]=x.endBounds,T=d-w,S=vt(x.length-T);if(Math.abs(S)<=a.x){Math.abs(S)<a.x&&(n.length=0),a.x=Math.abs(S);let L={type:"gap",direction:"side_right",gap:x,offset:S};n.push(L);continue}let[_,,,]=x.startBounds,M=_-m,N=vt(M-x.length);if(Math.abs(N)<=a.x){Math.abs(N)<a.x&&(n.length=0),a.x=Math.abs(N);let L={type:"gap",direction:"side_left",gap:x,offset:N};n.push(L);continue}}for(let x of c){if(!Us(Do(d,m),x.overlap))continue;let v=x.startSide[0][1]+x.length/2,y=vt(v-f);if(x.length>u-p&&Math.abs(y)<=a.y){Math.abs(y)<a.y&&(i.length=0),a.y=Math.abs(y);let L={type:"gap",direction:"center_vertical",gap:x,offset:y};i.push(L);continue}let[,w,,]=x.startBounds,T=w-u,S=vt(T-x.length);if(Math.abs(S)<=a.y){Math.abs(S)<a.y&&(i.length=0),a.y=Math.abs(S);let L={type:"gap",direction:"side_top",gap:x,offset:S};i.push(L);continue}let[,,,_]=x.endBounds,M=vt(p-_),N=x.length-M;if(Math.abs(N)<=a.y){Math.abs(N)<a.y&&(i.length=0),a.y=Math.abs(N);let L={type:"gap",direction:"side_bottom",gap:x,offset:N};i.push(L);continue}}}},o3=(e,o,t,r)=>{let n=e3(e,o,t,r);return ef(n,r).filter(i=>!(i.length===1&&xt(i[0]))).flatMap(i=>yd(i,r))},ds=(e,o,t,r,n,i,a)=>{if(!zn({app:t,event:r,selectedElements:e})||e.length===0&&o.length===0)return[];let l=ar.getReferenceSnapPoints();if(l)for(let s of o)for(let c of l){let d=c[0]-s[0],p=c[1]-s[1];Math.abs(d)<=a.x&&(Math.abs(d)<a.x&&(n.length=0),n.push({type:"point",points:[s,c],offset:d}),a.x=Math.abs(d)),Math.abs(p)<=a.y&&(Math.abs(p)<a.y&&(i.length=0),i.push({type:"point",points:[s,c],offset:p}),a.y=Math.abs(p))}},r3=(e,o,t,r,n)=>{let i=t.state,a=ie(e,i);if(!zn({app:t,event:r,selectedElements:a})||a.length===0)return{snapOffset:{x:0,y:0},snapLines:[]};o.x=vt(o.x),o.y=vt(o.y);let l=[],s=[],c=sh(i.zoom.value),d={x:c,y:c},p=yd(a,n,{dragOffset:o});ds(a,p,t,r,l,s,d),JI(a,o,t,r,l,s,d);let m={x:l[0]?.offset??0,y:s[0]?.offset??0};d.x=0,d.y=0,l.length=0,s.length=0;let u={x:vt(o.x+m.x),y:vt(o.y+m.y)};ds(a,yd(a,n,{dragOffset:u}),t,r,l,s,d),JI(a,u,t,r,l,s,d);let b=z0(l,s),f=mP(a,u,[...l,...s].filter(x=>x.type==="gap"));return{snapOffset:m,snapLines:[...b,...f]}},vt=e=>Math.round(e*10**6)/10**6,QI=e=>{let o=new Map;for(let t of e){let r=t.join(",");o.has(r)||o.set(r,t)}return Array.from(o.values())},z0=(e,o)=>{let t={},r={};if(e.length>0){for(let n of e)if(n.type==="point"){let i=vt(n.points[0][0]);t[i]||(t[i]=[]),t[i].push(...n.points.map(a=>A(vt(a[0]),vt(a[1]))))}}if(o.length>0){for(let n of o)if(n.type==="point"){let i=vt(n.points[0][1]);r[i]||(r[i]=[]),r[i].push(...n.points.map(a=>A(vt(a[0]),vt(a[1]))))}}return Object.entries(t).map(([n,i])=>({type:"points",points:QI(i.map(a=>A(Number(n),a[1])).sort((a,l)=>a[1]-l[1]))})).concat(Object.entries(r).map(([n,i])=>({type:"points",points:QI(i.map(a=>A(a[0],Number(n))).sort((a,l)=>a[0]-l[0]))})))},dP=e=>{let o=new Map;for(let t of e){let r=t.points.flat().map(n=>[vt(n)]).join(",");o.has(r)||o.set(r,t)}return Array.from(o.values())},mP=(e,o,t)=>{let[r,n,i,a]=Gm(e,o),l=[];for(let s of t){let[c,d,p,m]=s.gap.startBounds,[u,b,f,x]=s.gap.endBounds,v=Gs(Do(n,a),s.gap.overlap),y=Gs(Do(r,i),s.gap.overlap);switch(s.direction){case"center_horizontal":{if(v){let E=(v[0]+v[1])/2;l.push({type:"gap",direction:"horizontal",points:[A(s.gap.startSide[0][0],E),A(r,E)]},{type:"gap",direction:"horizontal",points:[A(i,E),A(s.gap.endSide[0][0],E)]})}break}case"center_vertical":{if(y){let E=(y[0]+y[1])/2;l.push({type:"gap",direction:"vertical",points:[A(E,s.gap.startSide[0][1]),A(E,n)]},{type:"gap",direction:"vertical",points:[A(E,a),A(E,s.gap.endSide[0][1])]})}break}case"side_right":{if(v){let E=(v[0]+v[1])/2;l.push({type:"gap",direction:"horizontal",points:[A(p,E),A(u,E)]},{type:"gap",direction:"horizontal",points:[A(f,E),A(r,E)]})}break}case"side_left":{if(v){let E=(v[0]+v[1])/2;l.push({type:"gap",direction:"horizontal",points:[A(i,E),A(c,E)]},{type:"gap",direction:"horizontal",points:[A(p,E),A(u,E)]})}break}case"side_top":{if(y){let E=(y[0]+y[1])/2;l.push({type:"gap",direction:"vertical",points:[A(E,a),A(E,d)]},{type:"gap",direction:"vertical",points:[A(E,m),A(E,b)]})}break}case"side_bottom":{if(y){let E=(y[0]+y[1])/2;l.push({type:"gap",direction:"vertical",points:[A(E,m),A(E,b)]},{type:"gap",direction:"vertical",points:[A(E,x),A(E,n)]})}break}}}return dP(l.map(s=>({...s,points:s.points.map(c=>A(vt(c[0]),vt(c[1])))})))},H0=(e,o,t,r,n,i)=>{if(!zn({event:r,selectedElements:e,app:t})||e.length===0||e.length===1&&!cP(e[0].angle,0))return{snapOffset:{x:0,y:0},snapLines:[]};let[a,l,s,c]=ye(o);i&&(i.includes("e")?s+=n.x:i.includes("w")&&(a+=n.x),i.includes("n")?l+=n.y:i.includes("s")&&(c+=n.y));let d=[];if(i)switch(i){case"e":{d.push(A(s,l),A(s,c));break}case"w":{d.push(A(a,l),A(a,c));break}case"n":{d.push(A(a,l),A(s,l));break}case"s":{d.push(A(a,c),A(s,c));break}case"ne":{d.push(A(s,l));break}case"nw":{d.push(A(a,l));break}case"se":{d.push(A(s,c));break}case"sw":{d.push(A(a,c));break}}let p=sh(t.state.zoom.value),m={x:p,y:p},u=[],b=[];ds(o,d,t,r,u,b,m);let f={x:u[0]?.offset??0,y:b[0]?.offset??0};m.x=0,m.y=0,u.length=0,b.length=0;let[x,v,y,E]=ye(e).map(S=>vt(S)),w=[A(x,v),A(x,E),A(y,v),A(y,E)];ds(e,w,t,r,u,b,m);let T=z0(u,b);return{snapOffset:f,snapLines:T}},n3=(e,o,t,r,n,i)=>{if(!zn({event:t,selectedElements:[e],app:o}))return{snapOffset:{x:0,y:0},snapLines:[]};let a=[A(r.x+n.x,r.y+n.y)],l=sh(o.state.zoom.value),s={x:l,y:l},c=[],d=[];ds([e],a,o,t,c,d,s);let p={x:c[0]?.offset??0,y:d[0]?.offset??0};s.x=0,s.y=0,c.length=0,d.length=0;let m=yd([e],i,{boundingBoxCorners:!0,omitCenter:!0});ds([e],m,o,t,c,d,s);let u=z0(c,d);return{snapOffset:p,snapLines:u}},i3=(e,o,t,r,n)=>{if(!zn({event:r,selectedElements:[],app:o}))return{originOffset:{x:0,y:0},snapLines:[]};let i=tf(e,[],o.state,n),a=sh(o.state.zoom.value),l={x:a,y:a},s=[],c=[];for(let d of i){let p=yd([d],n);for(let m of p){let u=m[0]-t.x;Math.abs(u)<=Math.abs(l.x)&&(Math.abs(u)<Math.abs(l.x)&&(c.length=0),c.push({type:"pointer",points:[m,A(m[0],t.y)],direction:"vertical"}),l.x=u);let b=m[1]-t.y;Math.abs(b)<=Math.abs(l.y)&&(Math.abs(b)<Math.abs(l.y)&&(s.length=0),s.push({type:"pointer",points:[m,A(t.x,m[1])],direction:"horizontal"}),l.y=b)}}return{originOffset:{x:c.length>0?c[0].points[0][0]-t.x:0,y:s.length>0?s[0].points[0][1]-t.y:0},snapLines:[...c,...s]}},a3=e=>e===ut.rectangle||e===ut.ellipse||e===ut.diamond||e===ut.frame||e===ut.magicframe||e===ut.image||e===ut.text;var vd=class{constructor(o){C(this,"scene");C(this,"_getRenderableElements",wy(({canvasNonce:o,zoom:t,offsetLeft:r,offsetTop:n,scrollX:i,scrollY:a,height:l,width:s,editingTextElement:c,newElement:d})=>{let p=this.scene.getNonDeletedElements(),{elementsMap:m,newElementCanvasElement:u}=this.getRenderableElementsMap({elements:p,editingTextElement:c,newElement:d}),b=this.getVisibleCanvasElements({elementsMap:m,zoom:t,offsetLeft:r,offsetTop:n,scrollX:i,scrollY:a,height:l,width:s});return{elementsMap:m,visibleElements:b,newElementCanvasElement:u,canvasNonce:o}}));C(this,"getRenderableElements",o=>{let{newElement:t}=o,r=`${this.scene.getSceneNonce()}${t?.frameId?`:${t.versionNonce}`:""}`,n=this._getRenderableElements({canvasNonce:r,zoom:o.zoom,offsetLeft:o.offsetLeft,offsetTop:o.offsetTop,scrollX:o.scrollX,scrollY:o.scrollY,height:o.height,width:o.width,editingTextElement:o.editingTextElement,newElement:o.newElement});if(o.frameToHighlight&&o.selectedElementsAreBeingDragged&&bc(o.selectedElements)!==o.frameToHighlight.id){let i=this.sortSelectedElementsIntoHighlightedFrame({visibleElements:n.visibleElements,selectedElements:o.selectedElements,frameToHighlight:o.frameToHighlight});return{...n,visibleElements:i}}return n});this.scene=o}getVisibleCanvasElements({elementsMap:o,zoom:t,offsetLeft:r,offsetTop:n,scrollX:i,scrollY:a,height:l,width:s}){let c=[];for(let d of o.values())xc(d,s,l,{zoom:t,offsetLeft:r,offsetTop:n,scrollX:i,scrollY:a},o)&&c.push(d);return c}getRenderableElementsMap({elements:o,editingTextElement:t,newElement:r}){let n=new Map,i=r?.frameId?null:r;for(let a of o)i?.id!==a.id&&(!t||t.type!=="text"||a.id!==t.id)&&n.set(a.id,a);return{elementsMap:n,newElementCanvasElement:i}}sortSelectedElementsIntoHighlightedFrame({visibleElements:o,selectedElements:t,frameToHighlight:r}){if(!t.length)return o;let n=ne(t),i=o.filter(l=>!n.has(l.id)),a=Om(i,r.id);return a===null?o:[...i.slice(0,a),...t,...i.slice(a)]}destroy(){_w.cancel(),this._getRenderableElements.clear()}};import{jsx as hP}from"react/jsx-runtime";var pP=5,uP=(e,o,t)=>{let[r,n]=Yt(e,t),{x:i,y:a}=Ot({sceneX:r+e.width,sceneY:n},o),l=i-o.offsetLeft+10,s=a-o.offsetTop;return{x:l,y:s}},U0=({children:e,element:o,elementsMap:t})=>{let r=jr();if(r.contextMenu||r.newElement||r.resizingElement||r.isRotating||r.openMenu||r.viewModeEnabled)return null;let{x:n,y:i}=uP(o,r,t);return hP("div",{className:"excalidraw-canvas-buttons",style:{top:`${i}px`,left:`${n}px`,padding:pP},children:e})};import{version as gP}from"react";import{unstable_batchedUpdates as l3}from"react-dom";var wt=e=>o=>{l3(e,o)},ch=e=>Qs(o=>{l3(e,o)}),ms=(()=>{let e;try{let t=gP.split(".");e=Number(t[0])>17}catch{e=!1}let o=!1;return()=>window.EXCALIDRAW_THROTTLE_RENDER===!0?e?!0:(o||(o=!0,console.warn("Excalidraw: render throttling is disabled on React versions < 18.")),!1):!1})();var Pe=class Pe{static start(o,t){if(Pe.animations.has(o))return;let r={animation:t,lastTime:0,state:void 0};Pe.animations.set(o,r);let n;try{n=t({deltaTime:0,state:void 0})}catch(i){throw Pe.animations.get(o)===r&&(Pe.animations.delete(o),Pe.cancelScheduledFrameIfIdle()),i}if(Pe.animations.get(o)===r){if(!n){Pe.animations.delete(o),Pe.cancelScheduledFrameIfIdle();return}r.state=n,Pe.scheduleNextFrame()}}static scheduleNextFrame(){Pe.scheduledFrame||(ms()?Pe.scheduledFrame={id:requestAnimationFrame(Pe.tick),type:"raf"}:Pe.scheduledFrame={id:setTimeout(Pe.tick,0),type:"timeout"})}static cancelScheduledFrame(){Pe.scheduledFrame&&(Pe.scheduledFrame.type==="raf"?cancelAnimationFrame(Pe.scheduledFrame.id):clearTimeout(Pe.scheduledFrame.id),Pe.scheduledFrame=null)}static cancelScheduledFrameIfIdle(){return Pe.animations.size>0?!1:(Pe.cancelScheduledFrame(),!0)}static tick(){if(Pe.scheduledFrame=null,Pe.animations.size>0){let o=[...Pe.animations];for(let[t,r]of o){if(Pe.animations.get(t)!==r)continue;let n=performance.now(),i=r.lastTime===0?0:n-r.lastTime,a=r.animation({deltaTime:i,state:r.state});if(Pe.animations.get(t)===r){if(a)r.lastTime=n,r.state=a;else if(Pe.animations.delete(t),Pe.cancelScheduledFrameIfIdle())return}}if(Pe.cancelScheduledFrameIfIdle())return;Pe.scheduleNextFrame()}}static running(o){return Pe.animations.has(o)}static cancel(o){Pe.animations.delete(o),Pe.cancelScheduledFrameIfIdle()}static reset(){Pe.animations.clear(),Pe.cancelScheduledFrame()}};C(Pe,"scheduledFrame",null),C(Pe,"animations",new Map);var Pt=Pe;var dh=class dh{constructor(o,t){this.app=o;this.options=t;C(this,"currentTrail");C(this,"pastTrails",[]);C(this,"container");C(this,"trailElement");C(this,"trailAnimation");C(this,"key");this.key=`animated-trail-${dh.counter++}`,this.trailElement=document.createElementNS(Dg,"path"),this.options.animateTrail&&(this.trailAnimation=document.createElementNS(Dg,"animate"),this.trailAnimation.setAttribute("attributeName","stroke-dashoffset"),this.trailElement.setAttribute("stroke-dasharray","7 7"),this.trailElement.setAttribute("stroke-dashoffset","10"),this.trailAnimation.setAttribute("from","0"),this.trailAnimation.setAttribute("to","-14"),this.trailAnimation.setAttribute("dur","0.3s"),this.trailElement.appendChild(this.trailAnimation))}get hasCurrentTrail(){return!!this.currentTrail}hasLastPoint(o,t){if(this.currentTrail){let r=this.currentTrail.originalPoints.length;return this.currentTrail.originalPoints[r-1][0]===o&&this.currentTrail.originalPoints[r-1][1]===t}return!1}cleanup(){this.pastTrails=[],this.currentTrail=void 0,this.trailElement.parentNode===this.container&&this.container?.removeChild(this.trailElement)}start(o){o&&(this.container=o),this.trailElement.parentNode!==this.container&&this.container&&this.container.appendChild(this.trailElement),Pt.running(this.key)||Pt.start(this.key,()=>this.onFrame()?{keep:!0}:(this.cleanup(),null))}stop(){Pt.cancel(this.key),this.cleanup()}startPath(o,t){this.currentTrail=new Sy(this.options),this.currentTrail.addPoint([o,t,performance.now()]),this.update()}addPointToPath(o,t){this.currentTrail&&(this.currentTrail.addPoint([o,t,performance.now()]),this.update())}endPath(){this.currentTrail&&(this.currentTrail.close(),this.currentTrail.options.keepHead=!1,this.pastTrails.push(this.currentTrail),this.currentTrail=void 0,this.update())}getCurrentTrail(){return this.currentTrail}clearTrails(){this.pastTrails=[],this.currentTrail=void 0,this.update()}update(){this.start(),this.trailAnimation&&(this.trailAnimation.setAttribute("begin","indefinite"),this.trailAnimation.setAttribute("repeatCount","indefinite"))}onFrame(){let o=[];for(let r of this.pastTrails)o.push(this.drawTrail(r,this.app.state));if(this.currentTrail){let r=this.drawTrail(this.currentTrail,this.app.state);o.push(r)}if(this.pastTrails=this.pastTrails.filter(r=>r.getStrokeOutline(r.options.size/this.app.state.zoom.value).length!==0),o.length===0)return this.trailElement.setAttribute("d",""),!1;let t=o.join(" ").trim();return this.trailElement.setAttribute("d",t),this.trailAnimation?(this.trailElement.setAttribute("fill",(this.options.fill??(()=>"black"))(this)),this.trailElement.setAttribute("stroke",(this.options.stroke??(()=>"black"))(this))):this.trailElement.setAttribute("fill",(this.options.fill??(()=>"black"))(this)),!0}drawTrail(o,t){let r=o.getStrokeOutline(o.options.size/t.zoom.value).map(([i,a])=>{let l=Ot({sceneX:i,sceneY:a},t);return[l.x,l.y]}),n=this.trailAnimation?r.slice(0,r.length/2):r;return Ty(n,!0)}};C(dh,"counter",0);var Lr=dh;var mh=class{constructor(o){this.app=o;C(this,"localTrail");C(this,"collabTrails",new Map);C(this,"container");this.localTrail=new Lr(o,{...this.getTrailOptions(),fill:()=>kg})}getTrailOptions(){return{simplify:0,streamline:.4,sizeMapping:o=>{let n=Math.max(0,1-(performance.now()-o.pressure)/1e3),i=(50-Math.min(50,o.totalLength-o.currentIndex))/50;return Math.min(Yo(i),Yo(n))}}}startPath(o,t){this.localTrail.startPath(o,t)}addPointToPath(o,t){this.localTrail.addPointToPath(o,t)}endPath(){this.localTrail.endPath()}start(o){this.container=o,this.localTrail.start(o)}stop(){this.localTrail.stop(),this.stopCollabTrails(),this.container=void 0}stopCollabTrails(o){for(let[t,r]of this.collabTrails)o?.get(t)||(r.stop(),this.collabTrails.delete(t))}updateCollabTrails(o){if(this.stopCollabTrails(o),!(!this.container||o.size===0))for(let[t,r]of o.entries()){if(r.isCurrentUser)continue;let n=this.collabTrails.get(t);if(n||(n=new Lr(this.app,{...this.getTrailOptions(),fill:()=>r.pointer?.laserColor||Sa(t,r)}),n.start(this.container),this.collabTrails.set(t,n)),r.pointer&&r.pointer.tool==="laser"){let i=r.button==="down",a=r.button==="up",l=n.hasCurrentTrail;i&&!l&&n.startPath(r.pointer.x,r.pointer.y);let s=!n.hasLastPoint(r.pointer.x,r.pointer.y);i&&s&&n.addPointToPath(r.pointer.x,r.pointer.y),a&&l&&(n.addPointToPath(r.pointer.x,r.pointer.y),n.endPath())}}}};var fP=12,G0=16,bP=10,xP=G0+2,EP=.8,W0=e=>Zi*2/e,V0=(e,o,t)=>{let r=W0(o);if(t!=="desktop"||G0>(e.height+r*2)*o*EP)return null;let n=fP/o,i=G0/o,a=A(e.x+e.width/2,e.y+e.height/2),l=ke(A(a[0]+e.width/2+r+n,a[1]),a,e.angle);return{center:l,start:ke(A(l[0],l[1]-i/2),l,e.angle),end:ke(A(l[0],l[1]+i/2),l,e.angle),hitboxWidth:bP/o,hitboxHeight:xP/o}},s3=(e,o,t,r)=>{let n=V0(o,t,r);if(!n)return!1;let i=ke(A(e.x,e.y),n.center,-o.angle);return Math.abs(i[0]-n.center[0])<=n.hitboxWidth/2&&Math.abs(i[1]-n.center[1])<=n.hitboxHeight/2};var yP=(e,o,t,r,n,i)=>{let{zoom:a}=r,l=180*t/Math.PI,s=e*(a.value-1)/2,c=o*(a.value-1)/2;return e>n&&a.value!==1&&(s=n*(a.value-1)/2),o>i&&a.value!==1&&(c=i*(a.value-1)/2),`translate(${s}px, ${c}px) scale(${a.value}) rotate(${l}deg)`},vP=(e,o)=>{let t=e.lastIndexOf(`
|
|
6
|
-
`,Math.max(0,
|
|
7
|
-
`,
|
|
8
|
-
`).reduce((Ze,pt,Ee,rt)=>Ze.concat(Ee?Ze[Ee-1]+rt[Ee-1].length+1:F),[]).reverse()},M=F=>{F.target instanceof HTMLCanvasElement&&(F.preventDefault(),F.stopPropagation())},N=!1,L=()=>{if(le)return;le=!0,D();let F=a.scene.getElement(r.id);if(!F)return;let W=Zo(F,a.scene.getNonDeletedElementsMap());if(W){if(u.value.trim()){let ee=lc(W);!ee||ee!==r.id?a.scene.mutateElement(W,{boundElements:(W.boundElements||[]).concat({type:"text",id:r.id})}):ve(W)&&vn(W)}else a.scene.mutateElement(W,{boundElements:W.boundElements?.filter(ee=>!j(ee))});It(F,W,a.scene)}o({viaKeyboard:N,nextOriginalText:u.value})},D=()=>{u.onblur=null,u.oninput=null,u.onkeydown=null,ce&&ce.disconnect(),window.removeEventListener("resize",m),window.removeEventListener("wheel",M,!0),window.removeEventListener("pointerdown",K),window.removeEventListener("pointerup",O),window.removeEventListener("blur",L),window.removeEventListener("beforeunload",L),J(),z(),X(),u.remove()},O=F=>{window.removeEventListener("pointerup",O);let W=F?.target,ee=W instanceof HTMLElement&&W.classList.contains("properties-trigger"),Te=(W instanceof HTMLElement||W instanceof SVGElement)&&!!W.closest(".properties-content"),Ne=(W instanceof HTMLElement||W instanceof SVGElement)&&(!!W.closest(`.${qe.SHAPE_ACTIONS_MENU}`)||!!W.closest(".compact-shape-actions-island"));setTimeout(()=>{Ne||ee||Te||(u.onblur=L,u.focus(),v&&(u.setSelectionRange(v.start,v.end),v=null))})},V=()=>{u.onblur=null,window.addEventListener("pointerup",O),window.addEventListener("blur",L)},K=F=>{let W=F?.target;if(F.button===Go.WHEEL){W instanceof HTMLTextAreaElement&&(F.preventDefault(),a.handleCanvasPanUsingWheelOrSpaceDrag(F)),V();return}let ee=W instanceof HTMLElement&&W.classList.contains("properties-trigger"),Te=(W instanceof HTMLElement||W instanceof SVGElement)&&!!W.closest(".properties-content");(F.target instanceof HTMLElement||F.target instanceof SVGElement)&&(F.target.closest(`.${qe.SHAPE_ACTIONS_MENU}, .${qe.ZOOM_ACTIONS}`)||F.target.closest(".compact-shape-actions-island"))&&!io(F.target)||ee||Te?V():F.target instanceof HTMLCanvasElement&&!zr()&&requestAnimationFrame(()=>{L()})},z=a.onChangeEmitter.on(F=>{a.state.theme!==p&&m()}),J=a.scene.onUpdate(()=>{m(),!!document.activeElement?.closest(".properties-content")||u.focus()}),X=a.onScrollChangeEmitter.on(()=>{m()}),le=!1;l&&!v&&u.select(),O();let ce=null;return n&&"ResizeObserver"in window?(ce=new window.ResizeObserver(()=>{m()}),ce.observe(n)):window.addEventListener("resize",m),u.onpointerdown=F=>F.stopPropagation(),requestAnimationFrame(()=>{window.addEventListener("pointerdown",K,{capture:!0})}),window.addEventListener("beforeunload",L),i?.querySelector(".excalidraw-textEditorContainer").appendChild(u),L};var Hn=4,lr=6,d3="rgba(0,0,0,0.3)",m3=(e,o,t,r)=>{if(!e.size)return{horizontal:null,vertical:null};let[n,i,a,l]=ye(e),s=o/r.zoom.value,c=t/r.zoom.value,d={top:parseInt(tc("sat"))||0,bottom:parseInt(tc("sab"))||0,left:parseInt(tc("sal"))||0,right:parseInt(tc("sar"))||0},p=Zr().rtl,m=-r.scrollX+d.left,u=-r.scrollY+d.top,b=m+s-d.right,f=u+c-d.bottom,x=Math.min(n,m),v=Math.min(i,u),y=Math.max(a,b),E=Math.max(l,f),w=a-n,T=l-i,S=y-x,_=E-v,M=Math.max(Hn*2,d.left+d.right)+lr*2,N=o*(s/S)-M,L=Math.max(Hn*2,d.top+d.bottom)+lr*2,D=t*(c/_)-L,O=S>w?S*r.zoom.value/(N+M):o/(N+M),V=_>T?_*r.zoom.value/(D+L):t/(D+L);return{horizontal:m===x&&b===y?null:{x:Math.max(d.left,Hn)+lr+(m-x)/S*o,y:t-lr-Math.max(Hn,d.bottom),width:N,height:lr,deltaMultiplier:O},vertical:u===v&&f===E?null:{x:p?Math.max(d.left,Hn):o-lr-Math.max(d.right,Hn),y:Math.max(d.top,Hn)+lr+(u-v)/_*t,width:lr,height:D,deltaMultiplier:V}}},Y0=(e,o,t)=>{let[r,n]=[e.horizontal,e.vertical].map(a=>a!=null&&a.x<=o&&o<=a.x+a.width&&a.y<=t&&t<=a.y+a.height);return{isOverEither:r||n,isOverHorizontal:r,isOverVertical:n}};var p3=e=>{let o=["flowchart","graph","sequenceDiagram","classDiagram","stateDiagram","stateDiagram-v2","erDiagram","journey","gantt","pie","quadrantChart","requirementDiagram","gitGraph","C4Context","mindmap","timeline","zenuml","sankey","xychart","block"];return new RegExp(`^(?:%%{.*?}%%[\\s\\n]*)?\\b(?:${o.map(r=>`\\s*${r}(-beta)?`).join("|")})\\b`).test(e.trim())};import{simplify as CP}from"points-on-curve";var u3=e=>{let{lassoPath:o,elements:t,elementsMap:r,elementsSegments:n,intersectedElements:i,enclosedElements:a,simplifyDistance:l}=e,s=o;l&&(s=CP(o,l));let c=t.filter(m=>!m.locked);a.clear(),i.clear();let d=o.reduce((m,u)=>[Math.min(m[0],u[0]),Math.min(m[1],u[1]),Math.max(m[2],u[0]),Math.max(m[3],u[1])],[1/0,1/0,-1/0,-1/0]);for(let m of c){let u=la(m,r);sl(d,u)&&!i.has(m.id)&&!a.has(m.id)&&(IP(s,m,n)?a.add(m.id):SP(s,m,r)&&i.add(m.id))}return{selectedElementIds:[...i,...a]}},IP=(e,o,t)=>{let r=SE(e),n=t.get(o.id);return n?n.some(i=>i.some(a=>Jd(a,r))):!1},SP=(e,o,t)=>{let r=e.slice(1).map((i,a)=>Ws(e[a],i)).concat([Ws(e[e.length-1],e[0])]),n=we(o,t);return r.some(i=>rl(o,t,i,0,!0).length>0||!!n&&rl({...n,...ii(o,n,t)},t,i,0,!0).length>0)};var ph=class extends Lr{constructor(t){super(t,{animateTrail:!0,streamline:.4,sizeMapping:r=>{let a=Math.max(0,1-(performance.now()-r.pressure)/(1/0)),l=(5e3-Math.min(5e3,r.totalLength-r.currentIndex))/5e3;return Math.min(Yo(l),Yo(a))},fill:()=>"rgba(105,101,219,0.05)",stroke:()=>"rgba(105,101,219)"});C(this,"intersectedElements",new Set);C(this,"enclosedElements",new Set);C(this,"elementsSegments",null);C(this,"canvasTranslate",null);C(this,"keepPreviousSelection",!1);C(this,"selectElementsFromIds",t=>{this.app.setState(r=>{let n=t.reduce((s,c)=>(s[c]=!0,s),{});if(this.keepPreviousSelection)for(let s of Object.keys(r.selectedElementIds))n[s]=!0;for(let[s]of Object.entries(n)){let c=this.app.scene.getNonDeletedElement(s);if(c&&j(c)){let d=Zo(c,this.app.scene.getNonDeletedElementsMap());d&&(n[d.id]=!0,delete n[c.id])}}for(let[s]of Object.entries(n)){let c=this.app.scene.getNonDeletedElement(s);if(c&&oe(c)){let d=jo(this.app.scene.getNonDeletedElementsMap(),c.id);for(let p of d)delete n[p.id]}}let i=Tt({editingGroupId:r.editingGroupId,selectedElementIds:n},this.app.scene.getNonDeletedElements(),r,this.app),a=[...Object.keys(i.selectedElementIds)],l=[...Object.keys(i.selectedGroupIds)];return{selectedElementIds:i.selectedElementIds,selectedGroupIds:i.selectedGroupIds,selectedLinearElement:a.length===1&&!l.length&&Se(this.app.scene.getNonDeletedElement(a[0]))?new Z(this.app.scene.getNonDeletedElement(a[0]),this.app.scene.getNonDeletedElementsMap()):null}})});C(this,"addPointToPath",(t,r,n=!1)=>{super.addPointToPath(t,r),this.keepPreviousSelection=n,this.updateSelection()});C(this,"updateSelection",()=>{let t=super.getCurrentTrail()?.originalPoints?.map(n=>A(n[0],n[1])),r={scrollX:this.app.state.scrollX,scrollY:this.app.state.scrollY,zoom:this.app.state.zoom.value};if(!this.elementsSegments||!At(r,this.canvasTranslate??{})){this.canvasTranslate=r,this.elementsSegments=new Map;let n=ne(this.app.visibleElements);for(let i of this.app.visibleElements){let a=Um(i,n);this.elementsSegments.set(i.id,a)}}if(t){let{selectedElementIds:n}=u3({lassoPath:t,elements:this.app.visibleElements,elementsMap:this.app.scene.getNonDeletedElementsMap(),elementsSegments:this.elementsSegments,intersectedElements:this.intersectedElements,enclosedElements:this.enclosedElements,simplifyDistance:5/this.app.state.zoom.value});this.selectElementsFromIds(n)}})}startPath(t,r,n=!1){this.endPath(),super.startPath(t,r),this.intersectedElements.clear(),this.enclosedElements.clear(),this.keepPreviousSelection=n,this.keepPreviousSelection||this.app.setState({selectedElementIds:{},selectedGroupIds:{},selectedLinearElement:null})}endPath(){super.endPath(),super.clearTrails(),this.intersectedElements.clear(),this.enclosedElements.clear(),this.elementsSegments=null}};var uh=class extends Lr{constructor(t){super(t,{streamline:.2,size:5,keepHead:!0,sizeMapping:r=>{let a=Math.max(0,1-(performance.now()-r.pressure)/200),l=(10-Math.min(10,r.totalLength-r.currentIndex))/10;return Math.min(Yo(l),Yo(a))},fill:()=>t.state.theme===te.LIGHT?"rgba(0, 0, 0, 0.2)":"rgba(255, 255, 255, 0.2)"});C(this,"elementsToErase",new Set);C(this,"groupsToErase",new Set)}startPath(t,r){this.endPath(),super.startPath(t,r),this.elementsToErase.clear()}addPointToPath(t,r,n=!1){return super.addPointToPath(t,r),this.updateElementsToBeErased(n)}updateElementsToBeErased(t){let r=super.getCurrentTrail()?.originalPoints?.map(l=>A(l[0],l[1]))||[];if(r.length<2)return[];let n=Ws(r[r.length-1],r[r.length-2]),i=this.app.visibleElements.filter(l=>!l.locked),a=ne(i);for(let l of i)if(t&&this.elementsToErase.has(l.id)){if(h3(n,l,a,this.app.state.zoom.value)){let c=l.groupIds.at(-1);if(this.groupsToErase.has(c)){let d=He(this.app.scene.getNonDeletedElementsMap(),c);for(let p of d)this.elementsToErase.delete(p.id);this.groupsToErase.delete(c)}if(xt(l)&&this.elementsToErase.delete(l.containerId),zt(l)){let d=lc(l);d&&this.elementsToErase.delete(d)}this.elementsToErase.delete(l.id)}}else if(!t&&!this.elementsToErase.has(l.id)&&h3(n,l,a,this.app.state.zoom.value)){let c=l.groupIds.at(-1);if(!this.groupsToErase.has(c)){let d=He(this.app.scene.getNonDeletedElementsMap(),c);for(let p of d)this.elementsToErase.add(p.id);this.groupsToErase.add(c)}if(zt(l)){let d=lc(l);d&&this.elementsToErase.add(d)}xt(l)&&this.elementsToErase.add(l.containerId),this.elementsToErase.add(l.id)}return Array.from(this.elementsToErase)}endPath(){super.endPath(),super.clearTrails(),this.elementsToErase.clear(),this.groupsToErase.clear()}},h3=(e,o,t,r)=>{let n=e[1],i=Qa(o)?15:o.strokeWidth/2,a=[Math.min(e[0][0],e[1][0])-i,Math.min(e[0][1],e[1][1])-i,Math.max(e[0][0],e[1][0])+i,Math.max(e[0][1],e[1][1])+i],l=la(o,t),s=[l[0]-i,l[1]-i,l[2]+i,l[3]+i];if(!sl(a,s))return!1;if(tv(o)&&pc(n,o,t))return!0;if(Qa(o)){let d=_v(o),p=Lv(o,d,t),m=Math.max(2.25,5/r);for(let b of p)if(Ig(b,e)<=m)return!0;let u=IE(...d.map(([b,f])=>A(o.x+b,o.y+f)));return!!Jd(e[0],u)}let c=we(o,t);if(ve(o)||nt(o)&&!o.polygon){let d=Math.max(o.strokeWidth,o.strokeWidth*2/r),p=Um(o,t);for(let m of p)if(Ig(m,e)<=d)return!0;return!1}return rl(o,t,e,0,!0).length>0||!!c&&rl({...c,...ii(o,c,t)},t,e,0,!0).length>0};var g3=44,f3=22,b3=66,x3=48,wd=14,E3=304,y3=320,K0=5.87,v3=28,w3=4,T3=2,X0=10,C3=10,I3=8,an=12,ps=256,Da=10,Z0=4,us=an*2,$0=an*2,S3=100,k3=140,Td=.35,M3=an/2,Fi=20,hh=an*2,j0=an,lt={fillStyle:"hachure",fontFamily:Ka,fontSize:Zn,opacity:100,roughness:1,strokeColor:$i,roundness:null,strokeStyle:"solid",strokeWidth:1,verticalAlign:Vo.MIDDLE,locked:!1};var Ra=qE(KE),kP=e=>e.labels?.length??e.series[0]?.values.length??0,hs=(e,o)=>{if(!e)return!1;let t=kP(e);return t<2?!1:o==="radar"?t>=3:!0},A3=(e,o)=>{let t=o<=1?0:Math.min(b3,(o-1)*f3);return e+t},gh=(e,o)=>{if(e==="line"){let r=A3(x3,o);return{slotWidth:r,gap:wd,chartHeight:y3,xLabelMaxWidth:r+wd*3+X0}}let t=A3(g3,o);return{slotWidth:t,gap:wd,chartHeight:E3,xLabelMaxWidth:t+wd*3+X0}},gs=(e,o)=>{let t=(o.slotWidth+o.gap)*e.series[0].values.length+o.gap,r=o.chartHeight+o.gap*2;return{chartWidth:t,chartHeight:r}},_3=()=>{let e=ps+$0*2,o=ps+$0*2;return{chartWidth:e,chartHeight:o}},MP=(e,o,t)=>{let r=Math.abs(e-o);return Math.min(r,t-r)},fs=(e,o)=>{if(e<=0||Ra.length===0)return[];let t=Ra.length,r=(o%t+t)%t,n=[r],i=Math.min(e,t),a=new Set(Array.from({length:t},(l,s)=>s).filter(l=>l!==r));for(;n.length<i;){let l=-1,s=-1,c=-1;for(let d of a){let p=n.map(b=>MP(d,b,t)),m=Math.min(...p),u=p.reduce((b,f)=>b+f,0)/p.length;(m>s||m===s&&u>c)&&(l=d,s=m,c=u)}n.push(l),a.delete(l)}return Array.from({length:e},(l,s)=>Ra[n[s%n.length]])},bs=e=>{if(Ra.length===0)return 0;if(typeof e!="number"||!Number.isFinite(e))return Math.floor(Math.random()*Ra.length);let o=e.toString(),t=0;for(let r=0;r<o.length;r++)t=t*31+o.charCodeAt(r)|0;return Math.abs(t)%Ra.length},xs=e=>Ra[e],P3=(e,o)=>{let t=e.flatMap(l=>l.values.map(s=>Math.max(0,s))),r=t.filter(l=>l>0),n=Math.max(1,...t),i=r.length>0?Math.min(...r):1,a=e.length===1&&i>0&&n/i>=S3;return{renderSteps:!1,normalize:(l,s)=>{let c=Math.max(0,l);return a?Math.log10(c+1)/Math.log10(n+1):c/n}}},AP=e=>/\s/.test(e.trim()),fh=(e,o,t)=>AP(e)?yn(e,o,t):e,D3=(e,o,t,r,n,i)=>{let a=st.Excalifont,l=Wo.sm,s=po(a),c=ct({fontFamily:a,fontSize:l}),d=Math.min(k3,n*(e.length>8?.56:.72)),p=tl(c,s),m=e.map((f,x)=>{let v=o[x],y=Math.max(0,...f.trim().split(/\s+/).filter(Boolean).map(z=>it(z,c,s).width)),E=Math.max(p,d,y),w=fh(f,c,E),T=it(w,c,s),S=Math.cos(v),_=Math.sin(v),M=S>Td?"left":S<-Td?"right":"center",N=M==="center"?T.width/2:0,L=Math.abs(S)*N+Math.abs(_)*(T.height/2),D=us+L+M3,O=t+S*(n+D),V=r+_*(n+D),K=_>Td?an/3:_<-Td?-an/3:0;return Qt({backgroundColor:i,...lt,text:w,originalText:f,x:O,y:V+K,fontFamily:a,fontSize:l,lineHeight:s,textAlign:M,verticalAlign:"middle"})}),u=Math.min(...m.map(f=>f.y)),b=Math.max(...m.map(f=>f.y+f.height));return{axisLabels:m,axisLabelTopY:u,axisLabelBottomY:b}},Es=(e,o,t,r,n,i)=>{if(e.length<=1)return[];let a=st["Lilita One"],l=Wo.lg,s=po(a),c=ct({fontFamily:a,fontSize:l}),d=e.map((w,T)=>{let S=w.title?.trim()||`Series ${T+1}`,_=fh(S,c,ps),M=it(_,c,s),N=Fi+j0+M.width;return{label:S,displayLabel:_,color:o[T],width:N,height:M.height}}),p=Math.max(Fi/2,...d.map(w=>w.height/2)),m=Math.max(n,r+p+us),u=hh,b=Fi*.6,f=d.reduce((w,T)=>w+T.width,0)+hh*Math.max(0,d.length-1),x=f+u*2,v=p*2+b*2,y=[];y.push(Co({...lt,backgroundColor:"transparent",type:"rectangle",fillStyle:"solid",strokeColor:$i,x:t-x/2,y:m-v/2,width:x,height:v,roughness:Xa.architect,roundness:{type:Mt.PROPORTIONAL_RADIUS}}));let E=t-f/2;return d.forEach(w=>{y.push(Co({...lt,backgroundColor:w.color,type:"rectangle",x:E,y:m-Fi/2,width:Fi,height:Fi,fillStyle:"solid",strokeColor:w.color,roughness:Xa.architect,roundness:{type:Mt.PROPORTIONAL_RADIUS}})),y.push(Qt({...lt,text:w.displayLabel,originalText:w.label,autoResize:!1,x:E+Fi+j0,y:m,fontFamily:a,fontSize:l,lineHeight:s,textAlign:"left",verticalAlign:"middle"})),E+=w.width+hh}),y},LP=(e,o,t,r)=>{if(it(e,t,r).width<=o)return e;let n=e.length;for(;n>1;){let i=`${e.slice(0,n)}...`;if(it(i,t,r).width<=o)return i;n--}return e[0]?`${e[0]}...`:e},_P=(e,o,t,r)=>{if(it(e,t,r).width<=o)return{wrapped:!1,text:e};let n=e.trim().split(/\s+/).filter(Boolean);return n.length>1&&!n.some(a=>it(a,t,r).width>o)&&o>=tl(t,r)?{wrapped:!0,text:yn(e,t,o)}:{wrapped:!1,text:LP(e,o,t,r)}},R3=(e,o,t)=>{let r=Math.abs(Math.cos(t)),n=Math.abs(Math.sin(t));return{width:e*r+o*n,height:e*n+o*r}},L3=e=>e.includes("..."),PP=(e,o,t,r,n)=>{let i=Math.max(v3,Math.ceil(tl(r,n))),a=Math.max(i,Math.floor(o)),l=[];for(let u=a;u>=i;u-=4)l.push(u);l[l.length-1]!==i&&l.push(i);let s=u=>{let b=L3(u.text),f=u.text.replace(/\.\.\./g,"").replace(/\n/g,"").length,x=u.text.split(`
|
|
9
|
-
`).length;return{ellipsified:b,visibleChars:f,lineCount:x}},c=(u,b)=>{let f=
|
|
4
|
+
${h("hints.firefox_clipboard_write")}`):new Error(h("alerts.couldNotCopyToClipboard"))}else throw new Error("Unsupported export type")};var VC=async(e,t,o)=>{let r=z2(t);if(!H2(r))throw new Error("fileHandle should exist and should be of type svg or png when resaving");let{elements:n,appState:i,files:a}=await e,{exportBackground:s,viewBackgroundColor:l}=i;i={...i,exportEmbedScene:!0};let{exportedElements:c,exportingFrame:d}=ja(n,i,!1);return await qa({type:r,data:{elements:c,appState:i,files:a},config:{exportBackground:s,viewBackgroundColor:l,name:o,fileHandle:t,exportingFrame:d}}),{fileHandle:t}};import{Fragment as $C,jsx as un,jsxs as ZC}from"react/jsx-runtime";var nh=W({name:"changeProjectName",label:"labels.fileTitle",trackEvent:!1,perform:(e,t,o)=>({appState:{...t,name:o},captureUpdate:O.EVENTUALLY}),PanelComponent:({appState:e,updateData:t,appProps:o,data:r,app:n})=>un(FC,{label:h("labels.fileTitle"),value:n.getName(),onChange:i=>t(i),ignoreFocus:r?.ignoreFocus??!1})}),YC=W({name:"changeExportScale",label:"imageExportDialog.scale",trackEvent:{category:"export",action:"scale"},perform:(e,t,o)=>({appState:{...t,exportScale:o},captureUpdate:O.EVENTUALLY}),PanelComponent:({elements:e,appState:t,updateData:o})=>{let r=me(e),i=$e(r,t)?ie(r,t):r,a=(s,l,c)=>{let[,,d,p]=B2(s).map(m=>Math.trunc(m*c));return[d+l*2,p+l*2]};return un($C,{children:Dm.map(s=>{let[l,c]=a(i,fi,s),d=`${h("imageExportDialog.label.scale")} ${s}x (${l}x${c})`;return un(ee,{size:"small",type:"toggle",icon:`${s}x`,title:d,"aria-label":d,checked:s===t.exportScale,onSelect:()=>o(s)},s)})})}}),ih=W({name:"changeExportBackground",label:"imageExportDialog.label.withBackground",trackEvent:{category:"export",action:"toggleBackground"},perform:(e,t,o)=>({appState:{...t,exportBackground:o},captureUpdate:O.EVENTUALLY}),PanelComponent:({appState:e,updateData:t})=>un(Id,{checked:e.exportBackground,onChange:o=>t(o),children:h("imageExportDialog.label.withBackground")})}),ah=W({name:"changeExportEmbedScene",label:"imageExportDialog.tooltip.embedScene",trackEvent:{category:"export",action:"embedScene"},perform:(e,t,o)=>({appState:{...t,exportEmbedScene:o},captureUpdate:O.EVENTUALLY}),PanelComponent:({appState:e,updateData:t})=>ZC(Id,{checked:e.exportEmbedScene,onChange:o=>t(o),children:[h("imageExportDialog.label.embedScene"),un(Mo,{label:h("imageExportDialog.tooltip.embedScene"),long:!0,children:un("div",{className:"excalidraw-tooltip-icon",children:Hb})})]})}),cl=!1,Wx=(e,t)=>{let o=t.message??h("progressDialog.defaultMessage");e.setAppState({toast:{message:t.progress!=null?ZC($C,{children:[o,un(Qu.ProgressBar,{progress:t.progress})]}):o,duration:1/0}})};async function QL(e,t){if(t.app.state.isLoading&&(Wx(t.app,{progress:null}),await t.app.onStateChange({predicate:o=>!o.isLoading})),e!=null&&typeof e=="object"&&Symbol.asyncIterator in e){for await(let o of e){if(t.signal.aborted){e.return();return}if(o.type==="progress")Wx(t.app,{message:o.message,progress:o.progress??null});else if(o.type==="done")return}return}e instanceof Promise&&(Wx(t.app,{progress:null}),await e)}function KC(e,t,o,r){let n=new AbortController,i=n.signal,a=new Promise(async s=>{try{r.props.onExport&&await QL(r.props.onExport("json",{elements:e,appState:t,files:o},{signal:i}),{app:r,signal:i})}catch(l){l?.name==="AbortError"?console.warn(`onExport() aborted by host app (signal aborted: ${i.aborted})`):console.error("Error during props.onExport() handling",l)}s({elements:e,appState:t,files:r.files})});return{abortController:n,data:a}}var Ki=W({name:"saveToActiveFile",label:"buttons.save",icon:Ni,trackEvent:{category:"export"},predicate:(e,t,o,r)=>!!r.props.UIOptions.canvasActions.saveToActiveFile&&!!t.fileHandle&&!t.viewModeEnabled,perform:async(e,t,o,r)=>{if(cl)return!1;cl=!0;let n=t.fileHandle,i=r.getName(),{abortController:a,data:s}=KC(e,t,r.files,r);try{let{fileHandle:l}=Bp(n)?await VC(s,n,i):await Pp({data:s,filename:i,fileHandle:n});return{captureUpdate:O.NEVER,appState:{fileHandle:l,toast:{message:n&&l?.name?h("toast.fileSavedToFilename").replace("{filename}",`"${l.name}"`):h("toast.fileSaved"),duration:1500}}}}catch(l){return a.abort(),l?.name!=="AbortError"?console.error(l):console.warn(l),{captureUpdate:O.NEVER,appState:{toast:null}}}finally{cl=!1}},keyTest:e=>e.key===S.S&&e[S.CTRL_OR_CMD]&&!e.shiftKey}),dl=W({name:"saveFileToDisk",label:"exportDialog.disk_title",icon:Ni,viewMode:!0,trackEvent:{category:"export"},perform:async(e,t,o,r)=>{if(cl)return!1;cl=!0;let{abortController:n,data:i}=KC(e,t,r.files,r);try{let{fileHandle:a}=await Pp({data:i,filename:r.getName(),fileHandle:null});return{captureUpdate:O.NEVER,appState:{openDialog:null,fileHandle:a,toast:{message:h("toast.fileSaved"),duration:3e3}}}}catch(a){return n.abort(),a?.name!=="AbortError"?console.error(a):console.warn(a),{captureUpdate:O.NEVER,appState:{toast:null}}}finally{cl=!1}},keyTest:e=>e.key.toLowerCase()===S.S&&e.shiftKey&&e[S.CTRL_OR_CMD],PanelComponent:({updateData:e})=>un(ee,{type:"button",icon:Ob,title:h("buttons.saveAs"),"aria-label":h("buttons.saveAs"),showAriaLabel:Le().formFactor==="phone",hidden:!Fs,onClick:()=>e(null),"data-testid":"save-as-button"})}),Ja=W({name:"loadScene",label:"buttons.load",trackEvent:{category:"export"},predicate:(e,t,o,r)=>!!r.props.UIOptions.canvasActions.loadScene&&!t.viewModeEnabled,perform:async(e,t,o,r)=>{try{let{elements:n,appState:i,files:a}=await pb(t,e);return{elements:n,appState:i,files:a,captureUpdate:O.IMMEDIATELY}}catch(n){return n?.name==="AbortError"?(console.warn(n),!1):{elements:e,appState:{...t,errorMessage:n.message},files:r.files,captureUpdate:O.EVENTUALLY}}},keyTest:e=>e[S.CTRL_OR_CMD]&&e.key===S.O}),XC=W({name:"exportWithDarkMode",label:"imageExportDialog.label.darkMode",trackEvent:{category:"export",action:"toggleTheme"},perform:(e,t,o,r)=>(r.setSessionExportThemeOverride(o?Q.DARK:Q.LIGHT),{appState:{...t,exportWithDarkMode:o},captureUpdate:O.EVENTUALLY}),PanelComponent:({appState:e,updateData:t})=>un("div",{style:{display:"flex",justifyContent:"flex-end",marginTop:"-45px",marginBottom:"10px"},children:un(OC,{value:e.exportWithDarkMode?Q.DARK:Q.LIGHT,onChange:o=>{t(o===Q.DARK)},title:h("imageExportDialog.label.darkMode")})})});var jC="{}",sh=W({name:"copyStyles",label:"labels.copyStyles",icon:hu,trackEvent:{category:"element"},perform:(e,t,o,r)=>{let n=[],i=e.find(a=>t.selectedElementIds[a.id]);if(n.push(i),i&&Yt(i)){let a=we(i,r.scene.getNonDeletedElementsMap());n.push(a)}return i&&(jC=JSON.stringify(n)),{appState:{...t,toast:{message:h("toast.copyStyles")}},captureUpdate:O.EVENTUALLY}},keyTest:e=>e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.C}),lh=W({name:"pasteStyles",label:"labels.pasteStyles",icon:hu,trackEvent:{category:"element"},perform:(e,t,o,r)=>{let n=JSON.parse(jC),i=n[0],a=n[1];if(!Ia(i))return{elements:e,captureUpdate:O.EVENTUALLY};let s=ie(e,t,{includeBoundTextElement:!0}),l=s.map(m=>m.id),c=te(e),d=te(n.filter(Ia)),p=qv(op(e.map(m=>{if(l.includes(m.id)){let u=i;if(J(m)&&m.containerId&&(u=a),!u)return m;let b=se(m,{backgroundColor:u?.backgroundColor,strokeWidth:u?.strokeWidth,strokeColor:u?.strokeColor,strokeStyle:u?.strokeStyle,fillStyle:u?.fillStyle,opacity:u?.opacity,roughness:u?.roughness,roundness:u.roundness?Mv(u.roundness.type,m)?u.roundness:Av(m):null});if(J(b)){let f=u,x=(J(u)?jo(u,d):f.fontSize)||hi,v=f.fontFamily||bs,y=null,E=b.containerId;E&&(y=s.find(C=>C.id===E)||null);let w=se(b,{...Rn(b,x,c),fontFamily:v,textAlign:f.textAlign||Mm,lineHeight:f.lineHeight||wo(v)});b=w,ks(w,c)?b=se(w,qr(w,"strokeColor",w.strokeColor,c)):At(w,y,r.scene)}return b.type==="arrow"&&Ee(u)&&(b=se(b,{startArrowhead:u.startArrowhead,endArrowhead:u.endArrowhead})),ae(m)&&(b=se(b,{roundness:null,backgroundColor:"transparent"})),et(b)&&(b=wp(b)),b}return m}),c),new Set(l),{prevElementsMap:c});for(let m of p){let u=c.get(m.id);et(m)&&Fo(m)&&u&&(u.height!==m.height||u.x!==m.x||u.y!==m.y)&&io(m,r.scene)}return{elements:p,captureUpdate:O.IMMEDIATELY}},keyTest:e=>e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.V});var Xi=W({name:"toggleShortcuts",label:"welcomeScreen.defaults.helpHint",icon:Pb,viewMode:!0,trackEvent:{category:"menu",action:"toggleHelpDialog"},perform:(e,t,o,{focusContainer:r})=>(t.openDialog?.name==="help"&&r(),{appState:{...t,openDialog:t.openDialog?.name==="help"?null:{name:"help"},openMenu:null,openPopup:null},captureUpdate:O.EVENTUALLY}),keyTest:e=>e.key===S.QUESTION_MARK});import{jsx as ml}from"react/jsx-runtime";var e_=(e,t)=>{if(e.length>=2){let o=t?e[0].groupIds.indexOf(t):-1,r=o>-1?e[0].groupIds.slice(0,o):e[0].groupIds;for(let n of r)if(e.every(i=>Ms(i,n)))return!0}return!1},Vx=(e,t)=>{let o=t.scene.getSelectedElements({selectedElementIds:e.selectedElementIds,includeBoundTextElement:!1});return o.length>=2&&!e_(o,e.editingGroupId)&&!bp(o)},ch=W({name:"group",label:"labels.group",icon:e=>ml(au,{theme:e.theme}),trackEvent:{category:"element"},perform:(e,t,o,r)=>{if(!Vx(t,r))return!1;let n=ww(r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0}));if(n.length<2)return{appState:t,elements:e,captureUpdate:O.EVENTUALLY};let i=Or(t);if(i.length===1){let x=i[0],v=new Set(Ye(e,x).map(w=>w.id)),y=new Set(n.map(w=>w.id));if(new Set([...Array.from(v),...Array.from(y)]).size===v.size)return{appState:t,elements:e,captureUpdate:O.EVENTUALLY}}let a=[...e];new Set(n.map(x=>x.frameId)).size>1&&yw(n).forEach((v,y)=>{gp(v,r.scene.getNonDeletedElementsMap())});let l=No(),c=te(n);a=a.map(x=>c.get(x.id)?se(x,{groupIds:gw(x.groupIds,l,t.editingGroupId)}):x);let d=Ye(a,l),p=d[d.length-1],m=a.lastIndexOf(p),u=a.slice(m+1),b=a.slice(0,m).filter(x=>!Ms(x,l)),f=Jr([...b,...d,...u],te(d));return{appState:{...t,...pw(l,{...t,selectedGroupIds:{}},me(a))},elements:f,captureUpdate:O.IMMEDIATELY}},predicate:(e,t,o,r)=>Vx(t,r),keyTest:e=>!e.shiftKey&&e[S.CTRL_OR_CMD]&&e.key===S.G,PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>ml(ee,{hidden:!Vx(t,r),type:"button",icon:ml(au,{theme:t.theme}),onClick:()=>o(null),title:`${h("labels.group")} \u2014 ${z("CtrlOrCmd+G")}`,"aria-label":h("labels.group"),visible:$e(me(e),t)})}),dh=W({name:"ungroup",label:"labels.ungroup",icon:e=>ml(su,{theme:e.theme}),trackEvent:{category:"element"},perform:(e,t,o,r)=>{let n=Or(t),i=te(e);if(n.length===0)return{appState:t,elements:e,captureUpdate:O.EVENTUALLY};let a=[...e],s=[];a=a.map(m=>{gt(m)&&s.push(m.id);let u=fw(m.groupIds,t.selectedGroupIds);return u.length===m.groupIds.length?m:se(m,{groupIds:u})});let l=Lt(t,me(a),t,null),c=r.scene.getSelectedElements(t),d=new Set(c.filter(m=>m.frameId).map(m=>m.frameId));return vw(e).filter(m=>d.has(m.id)).forEach(m=>{m&&(a=Qr(a,Oo(a,m,t,i),m))}),l.selectedElementIds=Object.entries(l.selectedElementIds).reduce((m,[u,b])=>(b&&!s.includes(u)&&(m[u]=!0),m),{}),{appState:{...t,...l},elements:a,captureUpdate:O.IMMEDIATELY}},keyTest:e=>e.shiftKey&&e[S.CTRL_OR_CMD]&&e.key===S.G.toUpperCase(),predicate:(e,t)=>Or(t).length>0,PanelComponent:({elements:e,appState:t,updateData:o})=>ml(ee,{type:"button",hidden:Or(t).length===0,icon:ml(su,{theme:t.theme}),onClick:()=>o(null),title:`${h("labels.ungroup")} \u2014 ${z("CtrlOrCmd+Shift+G")}`,"aria-label":h("labels.ungroup"),visible:$e(me(e),t)})});import n_ from"clsx";var mh=(e,t,o,r,n,i,a)=>{e.beginPath(),e.moveTo(t+i,o),e.lineTo(t+r-i,o),e.quadraticCurveTo(t+r,o,t+r,o+i),e.lineTo(t+r,o+n-i),e.quadraticCurveTo(t+r,o+n,t+r-i,o+n),e.lineTo(t+i,o+n),e.quadraticCurveTo(t,o+n,t,o+n-i),e.lineTo(t,o+i),e.quadraticCurveTo(t,o,t+i,o),e.closePath(),e.fill(),a&&(e.strokeStyle=a),e.stroke()};function t_(e){let t=0;if(e.length===0)return t;for(let o=0;o<e.length;o++){let r=e.charCodeAt(o);t=(t<<5)-t+r}return t}var Qa=(e,t)=>`hsl(${Math.abs(t_(t?.id||e))%37*10}, 100%, 83%)`,qC=e=>{let t=e?.trim()?.codePointAt(0);return(t?String.fromCodePoint(t):"?").toUpperCase()},JC=({context:e,renderConfig:t,appState:o,normalizedWidth:r,normalizedHeight:n})=>{for(let[i,a]of t.remotePointerViewportCoords){let{x:s,y:l}=a,c=o.collaborators.get(i);s-=o.offsetLeft,l-=o.offsetTop;let d=11,p=14,m=s<0||s>r-d||l<0||l>n-p;s=Math.max(s,0),s=Math.min(s,r-d),l=Math.max(l,0),l=Math.min(l,n-p);let u=Qa(i,c);e.save(),e.strokeStyle=u,e.fillStyle=u;let b=t.remotePointerUserStates.get(i),f=m||b==="idle"||b==="away";f&&(e.globalAlpha=.3),t.remotePointerButton.get(i)==="down"&&(e.beginPath(),e.arc(s,l,15,0,2*Math.PI,!1),e.lineWidth=3,e.strokeStyle="#ffffff88",e.stroke(),e.closePath(),e.beginPath(),e.arc(s,l,15,0,2*Math.PI,!1),e.lineWidth=1,e.strokeStyle=u,e.stroke(),e.closePath());let x=Cy,v=c?.isSpeaking;v&&(e.fillStyle=x,e.strokeStyle=x,e.lineWidth=10,e.lineJoin="round",e.beginPath(),e.moveTo(s,l),e.lineTo(s+0,l+14),e.lineTo(s+4,l+9),e.lineTo(s+11,l+8),e.closePath(),e.stroke(),e.fill()),e.fillStyle=Zo,e.strokeStyle=Zo,e.lineWidth=6,e.lineJoin="round",e.beginPath(),e.moveTo(s,l),e.lineTo(s+0,l+14),e.lineTo(s+4,l+9),e.lineTo(s+11,l+8),e.closePath(),e.stroke(),e.fill(),e.fillStyle=u,e.strokeStyle=u,e.lineWidth=2,e.lineJoin="round",e.beginPath(),f?(e.moveTo(s-1,l-1),e.lineTo(s-1,l+15),e.lineTo(s+5,l+10),e.lineTo(s+12,l+9),e.closePath(),e.fill()):(e.moveTo(s,l),e.lineTo(s+0,l+14),e.lineTo(s+4,l+9),e.lineTo(s+11,l+8),e.closePath(),e.fill(),e.stroke());let y=t.remotePointerUsernames.get(i)||"";if(!m&&y){e.font="600 12px sans-serif";let E=(v?s+0:s)+d/2,w=(v?l+0:l)+p+2,C=5,I=3,A=e.measureText(y),M=A.actualBoundingBoxDescent+A.actualBoundingBoxAscent,N=Math.max(M,12),P=E-1,L=w-1,R=A.width+2+C*2+2,H=N+2+I*2+2;if(e.roundRect?(e.beginPath(),e.roundRect(P,L,R,H,8),e.fillStyle=u,e.fill(),e.strokeStyle=Zo,e.stroke(),v&&(e.beginPath(),e.roundRect(P-2,L-2,R+4,H+4,8),e.strokeStyle=x,e.stroke())):mh(e,P,L,R,H,8,Zo),e.fillStyle=ba,e.fillText(y,E+C+1,w+I+A.actualBoundingBoxAscent+Math.floor((N-M)/2)+2),v){e.fillStyle=x;let K=8,F=8,U=5;e.fillRect(P+R+F,L+(H/2-K/2),2,K),e.fillRect(P+R+F+U,L+(H/2-K*2/2),2,K*2),e.fillRect(P+R+F+U*2,L+(H/2-K/2),2,K)}}e.restore(),e.closePath()}};import o_ from"clsx";import{useState as r_}from"react";import{jsx as QC}from"react/jsx-runtime";var Yx=({color:e,onClick:t,name:o,src:r,className:n})=>{let i=qC(o),[a,s]=r_(!1),l=!a&&r,c=l?void 0:{background:e};return QC("div",{className:o_("Avatar",n),style:c,onClick:t,children:l?QC("img",{className:"Avatar-img",src:r,alt:i,referrerPolicy:"no-referrer",onError:()=>s(!0)}):i})};import{jsx as hn,jsxs as ph}from"react/jsx-runtime";var eS=W({name:"goToCollaborator",label:"Go to a collaborator",viewMode:!0,trackEvent:{category:"collab"},perform:(e,t,o,r)=>(lt(o,"actionGoToCollaborator: collaborator should be defined when actionGoToCollaborator is called"),!o.socketId||r.props.userToFollow?.socketId===o.socketId||o.isCurrentUser?(r.requestUnfollow(),{appState:t,captureUpdate:O.EVENTUALLY}):(r.emitUserFollowIntent({userToFollow:{socketId:o.socketId,username:o.username||""},action:"FOLLOW"}),{appState:{...t,openMenu:t.openMenu==="canvas"?null:t.openMenu},captureUpdate:O.EVENTUALLY})),PanelComponent:({updateData:e,data:t,appState:o})=>{let{socketId:r,collaborator:n,withName:i,isBeingFollowed:a}=t,s=Qa(r,n),l=n_({"is-followed":a,"is-current-user":n.isCurrentUser===!0,"is-speaking":n.isSpeaking,"is-in-call":n.isInCall,"is-muted":n.isMuted}),c=n.isInCall?n.isSpeaking?ph("div",{className:"UserList__collaborator-status-icon-speaking-indicator",title:h("userList.hint.isSpeaking"),children:[hn("div",{}),hn("div",{}),hn("div",{})]}):n.isMuted?hn("div",{className:"UserList__collaborator-status-icon-microphone-muted",title:h("userList.hint.micMuted"),children:Y1}):hn("div",{title:h("userList.hint.inCall"),children:V1}):null;return i?ph("div",{className:`dropdown-menu-item dropdown-menu-item-base UserList__collaborator ${l}`,style:{"--avatar-size":"1.5rem"},onClick:n.isCurrentUser?void 0:()=>e(n),children:[hn(Yx,{color:s,onClick:()=>{},name:n.username||"",src:n.avatarUrl,className:l}),hn("div",{className:"UserList__collaborator-name",children:n.username}),ph("div",{className:"UserList__collaborator-status-icons","aria-hidden":!0,children:[a&&hn("div",{className:"UserList__collaborator-status-icon-is-followed",title:h("userList.hint.followStatus"),children:Ya}),n.isCurrentUser&&` (${h("labels.you")})`,c]})]}):ph("div",{className:`UserList__collaborator UserList__collaborator--avatar-only ${l}`,children:[hn(Yx,{color:s,onClick:()=>{e(n)},name:n.username||"",src:n.avatarUrl,className:l}),c&&hn("div",{className:"UserList__collaborator-status-icon",children:c})]})}});var uh=W({name:"addToLibrary",trackEvent:{category:"element"},perform:(e,t,o,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});for(let i of Nm)if(n.some(a=>a.type===i))return{captureUpdate:O.EVENTUALLY,appState:{...t,errorMessage:h(`errors.libraryElementTypeError.${i}`)}};return r.library.getLatestLibrary().then(i=>r.library.setLibrary([{id:No(),status:"unpublished",elements:n.map(mr),created:Date.now()},...i])).then(()=>({captureUpdate:O.EVENTUALLY,appState:{...t,toast:{message:h("toast.addedToLibrary")}}})).catch(i=>({captureUpdate:O.EVENTUALLY,appState:{...t,errorMessage:i.message}}))},label:"labels.addToLibrary"});import{jsx as ul}from"react/jsx-runtime";var Go=(e,t)=>{let o=t.scene.getSelectedElements(e);return mp(o,t.scene.getNonDeletedElementsMap(),e).length>1&&!o.some(r=>ae(r))},pl=(e,t,o,r)=>{let n=o.scene.getSelectedElements(t),i=Bw(n,r,o.scene,t),a=te(i);return en(e.map(s=>a.get(s.id)||s),t,o)},tS=W({name:"alignTop",label:"labels.alignTop",icon:eu,trackEvent:{category:"element"},predicate:(e,t,o,r)=>Go(t,r),perform:(e,t,o,r)=>({appState:t,elements:pl(e,t,r,{position:"start",axis:"y"}),captureUpdate:O.IMMEDIATELY}),keyTest:e=>e[S.CTRL_OR_CMD]&&e.shiftKey&&e.key===S.ARROW_UP,PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>ul(ee,{hidden:!Go(t,r),type:"button",icon:eu,onClick:()=>o(null),title:`${h("labels.alignTop")} \u2014 ${z("CtrlOrCmd+Shift+Up")}`,"aria-label":h("labels.alignTop"),visible:$e(me(e),t)})}),oS=W({name:"alignBottom",label:"labels.alignBottom",icon:tu,trackEvent:{category:"element"},predicate:(e,t,o,r)=>Go(t,r),perform:(e,t,o,r)=>({appState:t,elements:pl(e,t,r,{position:"end",axis:"y"}),captureUpdate:O.IMMEDIATELY}),keyTest:e=>e[S.CTRL_OR_CMD]&&e.shiftKey&&e.key===S.ARROW_DOWN,PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>ul(ee,{hidden:!Go(t,r),type:"button",icon:tu,onClick:()=>o(null),title:`${h("labels.alignBottom")} \u2014 ${z("CtrlOrCmd+Shift+Down")}`,"aria-label":h("labels.alignBottom"),visible:$e(me(e),t)})}),rS=W({name:"alignLeft",label:"labels.alignLeft",icon:ou,trackEvent:{category:"element"},predicate:(e,t,o,r)=>Go(t,r),perform:(e,t,o,r)=>({appState:t,elements:pl(e,t,r,{position:"start",axis:"x"}),captureUpdate:O.IMMEDIATELY}),keyTest:e=>e[S.CTRL_OR_CMD]&&e.shiftKey&&e.key===S.ARROW_LEFT,PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>ul(ee,{hidden:!Go(t,r),type:"button",icon:ou,onClick:()=>o(null),title:`${h("labels.alignLeft")} \u2014 ${z("CtrlOrCmd+Shift+Left")}`,"aria-label":h("labels.alignLeft"),visible:$e(me(e),t)})}),nS=W({name:"alignRight",label:"labels.alignRight",icon:ru,trackEvent:{category:"element"},predicate:(e,t,o,r)=>Go(t,r),perform:(e,t,o,r)=>({appState:t,elements:pl(e,t,r,{position:"end",axis:"x"}),captureUpdate:O.IMMEDIATELY}),keyTest:e=>e[S.CTRL_OR_CMD]&&e.shiftKey&&e.key===S.ARROW_RIGHT,PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>ul(ee,{hidden:!Go(t,r),type:"button",icon:ru,onClick:()=>o(null),title:`${h("labels.alignRight")} \u2014 ${z("CtrlOrCmd+Shift+Right")}`,"aria-label":h("labels.alignRight"),visible:$e(me(e),t)})}),iS=W({name:"alignVerticallyCentered",label:"labels.centerVertically",icon:nu,trackEvent:{category:"element"},predicate:(e,t,o,r)=>Go(t,r),perform:(e,t,o,r)=>({appState:t,elements:pl(e,t,r,{position:"center",axis:"y"}),captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>ul(ee,{hidden:!Go(t,r),type:"button",icon:nu,onClick:()=>o(null),title:h("labels.centerVertically"),"aria-label":h("labels.centerVertically"),visible:$e(me(e),t)})}),aS=W({name:"alignHorizontallyCentered",label:"labels.centerHorizontally",icon:iu,trackEvent:{category:"element"},predicate:(e,t,o,r)=>Go(t,r),perform:(e,t,o,r)=>({appState:t,elements:pl(e,t,r,{position:"center",axis:"x"}),captureUpdate:O.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>ul(ee,{hidden:!Go(t,r),type:"button",icon:iu,onClick:()=>o(null),title:h("labels.centerHorizontally"),"aria-label":h("labels.centerHorizontally"),visible:$e(me(e),t)})});import{jsx as mS}from"react/jsx-runtime";var sS=(e,t)=>{let o=t.scene.getSelectedElements(e);return mp(o,t.scene.getNonDeletedElementsMap(),e).length>2&&!o.some(r=>ae(r))},lS=(e,t,o,r)=>{let n=o.scene.getSelectedElements(t),i=Qw(n,o.scene.getNonDeletedElementsMap(),r,t,o.scene),a=te(i);return en(e.map(s=>a.get(s.id)||s),t,o)},cS=W({name:"distributeHorizontally",label:"labels.distributeHorizontally",trackEvent:{category:"element"},perform:(e,t,o,r)=>({appState:t,elements:lS(e,t,r,{space:"between",axis:"x"}),captureUpdate:O.IMMEDIATELY}),keyTest:e=>!e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.H,PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>mS(ee,{hidden:!sS(t,r),type:"button",icon:Gb,onClick:()=>o(null),title:`${h("labels.distributeHorizontally")} \u2014 ${z("Alt+H")}`,"aria-label":h("labels.distributeHorizontally"),visible:$e(me(e),t)})}),dS=W({name:"distributeVertically",label:"labels.distributeVertically",trackEvent:{category:"element"},perform:(e,t,o,r)=>({appState:t,elements:lS(e,t,r,{space:"between",axis:"y"}),captureUpdate:O.IMMEDIATELY}),keyTest:e=>!e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.V,PanelComponent:({elements:e,appState:t,updateData:o,app:r})=>mS(ee,{hidden:!sS(t,r),type:"button",icon:Wb,onClick:()=>o(null),title:`${h("labels.distributeVertically")} \u2014 ${z("Alt+V")}`,"aria-label":h("labels.distributeVertically"),visible:$e(me(e),t)})});var hh=W({name:"flipHorizontal",label:"labels.flipHorizontal",icon:Z1,trackEvent:{category:"element"},perform:(e,t,o,r)=>({elements:en(pS(e,r.scene.getNonDeletedElementsMap(),t,"horizontal",r),t,r),appState:t,captureUpdate:O.IMMEDIATELY}),keyTest:e=>e.shiftKey&&e.code===ge.H}),gh=W({name:"flipVertical",label:"labels.flipVertical",icon:$1,trackEvent:{category:"element"},perform:(e,t,o,r)=>({elements:en(pS(e,r.scene.getNonDeletedElementsMap(),t,"vertical",r),t,r),appState:t,captureUpdate:O.IMMEDIATELY}),keyTest:e=>e.shiftKey&&e.code===ge.V&&!e[S.CTRL_OR_CMD]}),pS=(e,t,o,r,n)=>{let i=ie(me(e),o,{includeBoundTextElement:!0,includeElementsInFrames:!0}),a=i_(i,t,r,n),s=te(a);return e.map(l=>s.get(l.id)||l)},i_=(e,t,o,r)=>{if(e.every(m=>Ee(m)&&(m.startBinding||m.endBinding)))return e.map(m=>{let u=m;return se(u,{startArrowhead:u.endArrowhead,endArrowhead:u.startArrowhead})});let{midX:n,midY:i}=On(e);T2(e,t,"nw",r.scene,new Map(Array.from(t.values()).map(m=>[m.id,mr(m)])),{flipByX:o==="horizontal",flipByY:o==="vertical",shouldResizeFromCenter:!0,shouldMaintainAspectRatio:!0}),Dc(e.filter(Ee),r.scene,r.state);let{elbowArrows:a,otherElements:s}=e.reduce((m,u)=>He(u)?{...m,elbowArrows:m.elbowArrows.concat(u)}:{...m,otherElements:m.otherElements.concat(u)},{elbowArrows:[],otherElements:[]}),{midX:l,midY:c}=On(e),[d,p]=[n-l,i-c];return s.forEach(m=>r.scene.mutateElement(m,{x:m.x+d,y:m.y+p})),a.forEach(m=>r.scene.mutateElement(m,{x:m.x+d,y:m.y+p})),e};var es=W({name:"copy",label:"labels.copy",icon:Ws,trackEvent:{category:"element"},perform:async(e,t,o,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});try{await th(n,r.files,o)}catch(i){return{captureUpdate:O.EVENTUALLY,appState:{...t,errorMessage:i.message}}}return{captureUpdate:O.EVENTUALLY}},keyTest:void 0}),Kx=W({name:"paste",label:"labels.paste",trackEvent:{category:"element"},perform:async(e,t,o,r)=>{let n;try{n=await UC()}catch(i){return i.name==="AbortError"||i.name==="NotAllowedError"?!1:(console.error(`actionPaste ${i.name}: ${i.message}`),In?{captureUpdate:O.EVENTUALLY,appState:{...t,errorMessage:h("hints.firefox_clipboard_write")}}:{captureUpdate:O.EVENTUALLY,appState:{...t,errorMessage:h("errors.asyncPasteFailedOnRead")}})}try{r.pasteFromClipboard(zC({types:n}))}catch(i){return console.error(i),{captureUpdate:O.EVENTUALLY,appState:{...t,errorMessage:h("errors.asyncPasteFailedOnParse")}}}return{captureUpdate:O.EVENTUALLY}},keyTest:void 0}),Md=W({name:"cut",label:"labels.cut",icon:P1,trackEvent:{category:"element"},perform:(e,t,o,r)=>(es.perform(e,t,o,r),qs.perform(e,t,null,r)),keyTest:e=>e[S.CTRL_OR_CMD]&&e.key===S.X}),Ad=W({name:"copyAsSvg",label:"labels.copyAsSvg",icon:j1,trackEvent:{category:"element"},perform:async(e,t,o,r)=>{if(!r.canvas)return{captureUpdate:O.EVENTUALLY};let{exportedElements:n,exportingFrame:i}=ja(e,t,!0);try{await qa({type:"clipboard-svg",data:{elements:n,appState:t,files:r.files},config:{...t,exportingFrame:i,name:r.getName()}});let a=r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});return{appState:{toast:{message:h("toast.copyToClipboardAsSvg",{exportSelection:a.length?h("toast.selection"):h("toast.canvas"),exportColorScheme:t.exportWithDarkMode?h("buttons.darkMode"):h("buttons.lightMode")})}},captureUpdate:O.EVENTUALLY}}catch(a){return console.error(a),{appState:{errorMessage:a.message},captureUpdate:O.EVENTUALLY}}},predicate:e=>eh&&e.length>0,keywords:["svg","clipboard","copy"]}),Ld=W({name:"copyAsPng",label:"labels.copyAsPng",icon:q1,trackEvent:{category:"element"},perform:async(e,t,o,r)=>{if(!r.canvas)return{captureUpdate:O.EVENTUALLY};let n=r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0}),{exportedElements:i,exportingFrame:a}=ja(e,t,!0);try{return await qa({type:"clipboard",data:{elements:i,appState:t,files:r.files},config:{...t,exportingFrame:a,name:t.name||r.getName()}}),{appState:{...t,toast:{message:h("toast.copyToClipboardAsPng",{exportSelection:n.length?h("toast.selection"):h("toast.canvas"),exportColorScheme:t.exportWithDarkMode?h("buttons.darkMode"):h("buttons.lightMode")})}},captureUpdate:O.EVENTUALLY}}catch(s){return console.error(s),{appState:{...t,errorMessage:s.message},captureUpdate:O.EVENTUALLY}}},predicate:e=>sl&&e.length>0,keyTest:e=>e.code===ge.C&&e.altKey&&e.shiftKey,keywords:["png","clipboard","copy"]}),_d=W({name:"copyText",label:"labels.copyText",trackEvent:{category:"element"},perform:(e,t,o,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0});try{zr(kc(n))}catch{throw new Error(h("errors.copyToSystemClipboardFailed"))}return{captureUpdate:O.EVENTUALLY}},predicate:(e,t,o,r)=>eh&&r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0}).some(J),keywords:["text","clipboard","copy"]});var ts=W({name:"gridMode",icon:ox,keywords:["snap"],label:"labels.toggleGrid",viewMode:!0,trackEvent:{category:"canvas",predicate:e=>e.gridModeEnabled},perform(e,t){return{appState:{...t,gridModeEnabled:!this.checked(t),objectsSnapModeEnabled:!1},captureUpdate:O.EVENTUALLY}},checked:e=>e.gridModeEnabled,predicate:(e,t,o)=>o.gridModeEnabled===void 0,keyTest:e=>e[S.CTRL_OR_CMD]&&e.code===ge.QUOTE});var ei=W({name:"zenMode",label:"buttons.zenMode",icon:Q1,viewMode:!0,trackEvent:{category:"canvas",predicate:e=>!e.zenModeEnabled},perform(e,t){return{appState:{...t,zenModeEnabled:!this.checked(t)},captureUpdate:O.EVENTUALLY}},checked:e=>e.zenModeEnabled,predicate:(e,t,o,r)=>r.editorInterface.formFactor!=="phone"&&typeof o.zenModeEnabled>"u",keyTest:e=>!e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.Z});var hl=W({name:"objectsSnapMode",label:"buttons.objectsSnapMode",icon:J1,viewMode:!1,trackEvent:{category:"canvas",predicate:e=>!e.objectsSnapModeEnabled},perform(e,t){return{appState:{...t,objectsSnapModeEnabled:!this.checked(t),gridModeEnabled:!1},captureUpdate:O.EVENTUALLY}},checked:e=>e.objectsSnapModeEnabled,predicate:(e,t,o)=>typeof o.objectsSnapModeEnabled>"u",keyTest:e=>!e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.S});var gl=W({name:"arrowBinding",label:"labels.arrowBinding",viewMode:!1,trackEvent:{category:"canvas",predicate:e=>e.bindingPreference==="disabled"},perform(e,t){let o=t.bindingPreference==="enabled"?"disabled":"enabled";return{appState:{...t,bindingPreference:o,isBindingEnabled:o==="enabled"},captureUpdate:O.NEVER}},checked:e=>e.bindingPreference==="enabled"});var fl=W({name:"midpointSnapping",label:"labels.midpointSnapping",viewMode:!1,trackEvent:{category:"canvas",predicate:e=>!e.isMidpointSnappingEnabled},perform(e,t){return{appState:{...t,isMidpointSnappingEnabled:!this.checked(t)},captureUpdate:O.NEVER}},checked:e=>e.isMidpointSnappingEnabled});var ti=W({name:"stats",label:"stats.fullTitle",icon:X1,viewMode:!0,trackEvent:{category:"menu"},keywords:["edit","attributes","customize"],perform(e,t){return{appState:{...t,stats:{...t.stats,open:!this.checked(t)}},captureUpdate:O.EVENTUALLY}},checked:e=>e.stats.open,keyTest:e=>!e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.SLASH});var fh=W({name:"unbindText",label:"labels.unbindText",trackEvent:{category:"element"},predicate:(e,t,o,r)=>r.scene.getSelectedElements(t).some(i=>Yt(i)),perform:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t),i=r.scene.getNonDeletedElementsMap();return n.forEach(a=>{let s=we(a,i);if(s){let{width:l,height:c}=dt(s.originalText,ut(s),s.lineHeight),d=Rv(a.id);Dv(a.id);let{x:p,y:m}=Dn(a,s,i);r.scene.mutateElement(s,{containerId:null,width:l,height:c,text:s.originalText,baseFontSize:null,x:p,y:m,labelPosition:null}),r.scene.mutateElement(a,{boundElements:a.boundElements?.filter(u=>u.id!==s.id)}),et(a)?rp(a,r.scene):r.scene.mutateElement(a,{height:d||a.height})}}),{elements:e,appState:t,captureUpdate:O.IMMEDIATELY}}}),bh=W({name:"bindText",label:"labels.bindText",trackEvent:{category:"element"},predicate:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t);if(n.length===2){let i=J(n[0])||J(n[1]),a;if(Ln(n[0])?a=n[0]:Ln(n[1])&&(a=n[1]),i&&a&&we(a,r.scene.getNonDeletedElementsMap())===null)return!0}return!1},perform:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t),i,a;J(n[0])&&Ln(n[1])?(i=n[0],a=n[1]):(i=n[1],a=n[0]);let s=et(a)?vo(i.strokeColor)?a.strokeColor:i.strokeColor:null;r.scene.mutateElement(i,{containerId:a.id,verticalAlign:nr.MIDDLE,textAlign:Cf.CENTER,autoResize:!0,angle:Ee(a)?0:a?.angle??0,labelPosition:Ee(a)?tp:null,...s?{baseFontSize:Xv(i.baseFontSize??i.fontSize),strokeColor:s}:null}),r.scene.mutateElement(a,{boundElements:(a.boundElements||[]).concat({type:"text",id:i.id}),...s?{strokeColor:s}:null});let l=a.height;return At(i,a,r.scene),wc(a.id,l),{elements:a_(e,a,i),appState:{...t,selectedElementIds:{[a.id]:!0}},captureUpdate:O.IMMEDIATELY}}}),a_=(e,t,o)=>{let r=e.slice(),n=r.findIndex(a=>a.id===o.id);r.splice(n,1);let i=r.findIndex(a=>a.id===t.id);return r.splice(i+1,0,o),Jr(r,te([t,o])),r},s_=(e,t,o)=>{let r=e.slice(),n=r.findIndex(a=>a.id===t.id);r.splice(n,1);let i=r.findIndex(a=>a.id===o.id);return r.splice(i,0,t),Jr(r,te([t,o])),r},uS=W({name:"wrapTextInContainer",label:"labels.createContainerFromText",trackEvent:{category:"element"},predicate:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t),i=n.some(a=>J(a)&&!gt(a));return n.length>0&&i},perform:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t),i=e.slice(),a={};for(let s of n)if(J(s)&&!gt(s)){let l=Bo({type:"rectangle",backgroundColor:t.currentItemBackgroundColor,boundElements:[...s.boundElements||[],{id:s.id,type:"text"}],angle:s.angle,fillStyle:t.currentItemFillStyle,strokeColor:t.currentItemStrokeColor,roughness:t.currentItemRoughness,strokeWidth:Zr("rectangle",t.currentItemStrokeWidthKey),strokeStyle:t.currentItemStrokeStyle,roundness:t.currentItemRoundness==="round"?{type:Ci("rectangle")?Pt.ADAPTIVE_RADIUS:Pt.PROPORTIONAL_RADIUS}:null,opacity:100,locked:!1,x:s.x-Tf,y:s.y-Tf,width:Is(s.width,"rectangle"),height:Is(s.height,"rectangle"),groupIds:s.groupIds,frameId:s.frameId});if(s.boundElements?.length){let c=s.boundElements.filter(p=>p.type==="arrow").map(p=>p.id);i.filter(p=>c.includes(p.id)).forEach(p=>{let m=p.startBinding,u=p.endBinding;m?.elementId===s.id&&(m={...m,elementId:l.id}),u?.elementId===s.id&&(u={...u,elementId:l.id}),(m||u)&&r.scene.mutateElement(p,{startBinding:m,endBinding:u})})}r.scene.mutateElement(s,{containerId:l.id,verticalAlign:nr.MIDDLE,boundElements:null,textAlign:Cf.CENTER,autoResize:!0}),At(s,l,r.scene),i=s_([...i,l],l,s),a[l.id]=!0}return{elements:i,appState:{...t,selectedElementIds:a},captureUpdate:O.IMMEDIATELY}}});import l_ from"clsx";import{useCallback as hS,useEffect as gS,useLayoutEffect as c_,useRef as d_,useState as m_}from"react";import{jsx as bl,jsxs as fS}from"react/jsx-runtime";var Zx=380,p_=42,Xx=5,bS=85,u_=500,$x=!1,xh=new Map,xS=({element:e,scene:t,setAppState:o,onLinkOpen:r,setToast:n,updateEmbedValidationStatus:i})=>{let a=t.getNonDeletedElementsMap(),s=cn(),l=ko(),c=Le(),d=e.link||"",[p,m]=m_(d),u=d_(null),b=s.showHyperlinkPopup==="editor",f=hS(()=>{if(!u.current)return;let w=Rr(u.current.value)||null;if(!e.link&&w&&be("hyperlink","create"),fo(e)){if(s.activeEmbeddable?.element===e&&o({activeEmbeddable:null}),!w){t.mutateElement(e,{link:null}),i(e,!1);return}if(!Ds(w,l.validateEmbeddable))w&&n({message:h("toast.unableToEmbed"),closable:!0}),e.link&&xh.set(e.id,e.link),t.mutateElement(e,{link:w}),i(e,!1);else{let{width:C,height:I}=e,A=Na(w);A?.error instanceof URIError&&n({message:h("toast.unrecognizedLinkFormat"),closable:!0});let M=A?A.intrinsicSize.w/A.intrinsicSize.h:1,N=xh.get(e.id)!==e.link;t.mutateElement(e,{...N?{width:A?.type==="video"?C>I?C:I*M:C,height:A?.type==="video"&&C>I?C/M:I}:{},link:w}),i(e,!0),xh.has(e.id)&&xh.delete(e.id)}}else t.mutateElement(e,{link:w})},[e,t,n,l.validateEmbeddable,s.activeEmbeddable,o,i]);c_(()=>()=>{f()},[f]),gS(()=>{b&&u?.current&&!(c.formFactor==="phone"||c.isTouchScreen)&&u.current.select()},[b,c.formFactor,c.isTouchScreen]),gS(()=>{let w=null,C=I=>{if(b)return;w&&clearTimeout(w),g_(e,a,s,_(I.clientX,I.clientY))&&(w=window.setTimeout(()=>{o({showHyperlinkPopup:!1})},u_))};return window.addEventListener("pointermove",C,!1),()=>{window.removeEventListener("pointermove",C,!1),w&&clearTimeout(w)}},[s,e,b,o,a]);let x=hS(()=>{be("hyperlink","delete"),t.mutateElement(e,{link:null}),o({showHyperlinkPopup:!1})},[o,e,t]),v=()=>{be("hyperlink","edit","popup-ui"),o({showHyperlinkPopup:"editor"})},{x:y,y:E}=ES(e,s,a);return s.contextMenu||s.selectedElementsAreBeingDragged||s.resizingElement||s.isRotating||s.openMenu||s.viewModeEnabled?null:fS("div",{className:"excalidraw-hyperlinkContainer",style:{top:`${E}px`,left:`${y}px`,width:Zx,padding:Xx},children:[b?bl("input",{className:l_("excalidraw-hyperlinkContainer-input"),placeholder:h("labels.link.hint"),ref:u,value:p,onChange:w=>m(w.target.value),autoFocus:!0,onKeyDown:w=>{w.stopPropagation(),w[S.CTRL_OR_CMD]&&w.key===S.K&&w.preventDefault(),(w.key===S.ENTER||w.key===S.ESCAPE)&&(f(),o({showHyperlinkPopup:"info"}))}}):e.link?bl("a",{href:Rr(e.link||""),className:"excalidraw-hyperlinkContainer-link",target:Xm(e.link)?"_self":"_blank",onClick:w=>{if(e.link&&r){let C=Vm("excalidraw-link",w.nativeEvent);r({...e,link:Rr(e.link)},C),C.defaultPrevented&&w.preventDefault()}},rel:"noopener noreferrer",children:e.link}):bl("div",{className:"excalidraw-hyperlinkContainer-link",children:h("labels.link.empty")}),fS("div",{className:"excalidraw-hyperlinkContainer__buttons",children:[!b&&bl(ee,{type:"button",title:h("buttons.edit"),"aria-label":h("buttons.edit"),label:h("buttons.edit"),onClick:v,className:"excalidraw-hyperlinkContainer--edit",icon:Gn}),bl(ee,{type:"button",title:h("labels.linkToElement"),"aria-label":h("labels.linkToElement"),label:h("labels.linkToElement"),onClick:()=>{o({openDialog:{name:"elementLinkSelector",sourceElementId:e.id}})},icon:cd}),d&&!fo(e)&&bl(ee,{type:"button",title:h("buttons.remove"),"aria-label":h("buttons.remove"),label:h("buttons.remove"),onClick:x,className:"excalidraw-hyperlinkContainer--remove",icon:Jt})]})]})},ES=(e,t,o)=>{let[r,n]=qt(e,o),{x:i,y:a}=Gt({sceneX:r+e.width/2,sceneY:n},t),s=i-t.offsetLeft-Zx/2,l=a-t.offsetTop-bS;return{x:s,y:l}},jx=(e,t)=>{let o=ie(e,t);return fo(o[0])?"labels.link.editEmbed":o[0]?.link?"labels.link.edit":"labels.link.create"},Pd=null,yS=(e,t,o)=>{Pd&&clearTimeout(Pd),Pd=window.setTimeout(()=>h_(e,t,o),_y)},h_=(e,t,o)=>{if(!e.link)return;let r=rl();r.classList.add("excalidraw-tooltip--visible"),r.style.maxWidth="20rem",r.textContent=Ra(e.link)?h("labels.link.goToElement"):e.link;let[n,i,a,s]=qt(e,o),[l,c,d,p]=D2([n,i,a,s],e.angle,t),m=Gt({sceneX:l,sceneY:c},t);zx(r,{left:m.x,top:m.y,width:d,height:p},"top"),be("hyperlink","tooltip","link-icon"),$x=!0},Eh=()=>{Pd&&clearTimeout(Pd),$x&&($x=!1,rl().classList.remove("excalidraw-tooltip--visible"))},g_=(e,t,o,[r,n])=>{let{x:i,y:a}=ze({clientX:r,clientY:n},o),s=15/o.zoom.value;if(ap(_(i,a),e,t))return!1;let[l,c,d]=qt(e,t);if(i>=l&&i<=d&&a>=c-bS&&a<=c)return!1;let{x:p,y:m}=ES(e,o,t);return!(r>=p-s&&r<=p+Zx+Xx*2+s&&n>=m-s&&n<=m+s+Xx*2+p_)};import{jsx as f_}from"react/jsx-runtime";var xl=W({name:"hyperlink",label:(e,t)=>jx(me(e),t),icon:Ks,perform:(e,t)=>t.showHyperlinkPopup==="editor"?!1:{elements:e,appState:{...t,showHyperlinkPopup:"editor",openMenu:null},captureUpdate:O.IMMEDIATELY},trackEvent:{category:"hyperlink",action:"click"},keyTest:e=>e[S.CTRL_OR_CMD]&&e.key===S.K,predicate:(e,t)=>ie(e,t).length===1,PanelComponent:({elements:e,appState:t,updateData:o})=>{let r=ie(e,t);return f_(ee,{type:"toggle",icon:Ks,"aria-label":h(jx(me(e),t)),title:`${fo(e[0])?h("labels.link.labelEmbed"):h("labels.link.label")} - ${z("CtrlOrCmd+K")}`,onSelect:()=>o(null),checked:r.length===1&&!!r[0].link})}});var qx=e=>e.every(t=>!t.locked),El=W({name:"toggleElementLock",label:(e,t,o)=>{let r=o.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!1});return qx(r)?"labels.elementLock.lock":"labels.elementLock.unlock"},icon:(e,t)=>{let o=ie(t,e);return qx(o)?za:Ri},trackEvent:{category:"element"},predicate:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t);return n.length>0&&!n.some(i=>i.locked&&i.frameId)},perform:(e,t,o,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});if(!n.length)return!1;let i=qx(n),a=te(n),s=n.length>1&&dp(n),c=n.length===1||s?null:No(),d={...t.lockedMultiSelections};if(i)d={...t.lockedMultiSelections,...c?{[c]:!0}:{}};else if(s){let v=n[0].groupIds.at(-1);delete d[v]}let p=e.map(v=>{if(!a.has(v.id))return v;let y=v.groupIds;return i?c&&(y=[...y,c]):y=y.filter(E=>!t.lockedMultiSelections[E]),se(v,{locked:i,groupIds:y.length!==v.groupIds.length?y:v.groupIds})}),m=te(p),u=i?{}:Object.fromEntries(n.map(v=>[v.id,!0])),b=n.map(v=>m.get(v.id)||v),f=i?{}:Pa(me(b),t),x=i?c||(s?n[0].groupIds.at(-1):n[0].id):null;return{elements:p,appState:{...t,selectedElementIds:u,selectedGroupIds:f,selectedLinearElement:i?null:t.selectedLinearElement,lockedMultiSelections:d,activeLockedId:x},captureUpdate:O.IMMEDIATELY}},keyTest:(e,t,o,r)=>e.key.toLocaleLowerCase()===S.L&&e[S.CTRL_OR_CMD]&&e.shiftKey&&r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!1}).length>0}),vS=W({name:"unlockAllElements",trackEvent:{category:"canvas"},viewMode:!1,icon:Ri,predicate:(e,t)=>ie(e,t).length===0&&e.some(r=>r.locked),perform:(e,t)=>{let o=e.filter(s=>s.locked),r=e.map(s=>{if(s.locked){let l=s.groupIds.filter(c=>!t.lockedMultiSelections[c]);return se(s,{locked:!1,groupIds:s.groupIds.length!==l.length?l:s.groupIds})}return s}),n=te(r),i=o.map(s=>n.get(s.id)||s),a=me(i);return{elements:r,appState:{...t,selectedElementIds:Object.fromEntries(a.map(s=>[s.id,!0])),selectedGroupIds:Pa(a,t),lockedMultiSelections:{},activeLockedId:null},captureUpdate:O.IMMEDIATELY}},label:"labels.elementLock.unlockAll"});import qI from"clsx";import AD from"fuzzy";import{useEffect as Gh,useRef as JI,useMemo as LD,useState as Uh}from"react";import{useEffect as Nd,useMemo as wS,useRef as Qx,useState as b_}from"react";import{jsx as o0}from"react/jsx-runtime";var x_=8,E_=10,Dd=["rectangle","diamond","ellipse"],Rd=["line","sharpArrow","curvedArrow","elbowArrow"],y_=new Set(Dd),v_=new Set(Rd),vl=e=>y_.has(e),vh=e=>e==="arrow"||v_.has(e),br=Ie(null),Od=new Map,Bd=new Map,w_=({app:e})=>{let t=e.scene.getSelectedElements(e.state),o=Qx(null);return Nd(()=>{if(t.length===0){e.updateEditorAtom(br,null);return}let r=wl(t);r&&!o.current?o.current=r:(o.current&&!r||o.current&&r!==o.current)&&(e.updateEditorAtom(br,null),o.current=null)},[t,e]),Nd(()=>()=>{Od.clear(),Bd.clear()},[]),o0(T_,{app:e,elements:t})},T_=({app:e,elements:t})=>{let o=wl(t),r=wS(()=>o==="generic"?IS(t):[],[o,t]),n=wS(()=>o==="linear"?t0(t):[],[o,t]),i=o==="generic"?r.every(p=>p.type===r[0].type):o==="linear"?n.every(p=>ka(p)===ka(n[0])):!1,[a,s]=b_({x:0,y:0}),l=Qx(""),c=Qx(null);Nd(()=>{let p=[...r,...n].sort((x,v)=>x.id.localeCompare(v.id)),m=`
|
|
5
|
+
${e.state.scrollX}${e.state.scrollY}${e.state.offsetTop}${e.state.offsetLeft}${e.state.zoom.value}${p.map(x=>x.id).join(",")}`;if(m===l.current)return;l.current=m;let u;if(p.length===1){let[x,,,v,y,E]=qt(p[0],e.scene.getNonDeletedElementsMap());u=Ae(_(x,v),_(y,E),p[0].angle)}else{let{minX:x,maxY:v}=On(p);u=_(x,v)}let{x:b,y:f}=Gt({sceneX:u[0],sceneY:u[1]},e.state);s({x:b,y:f})},[r,n,e.scene,e.state]),Nd(()=>{for(let p of n){let m=e0(p.id,M_(p));Bd.has(m)||Bd.set(m,p)}},[n]),Nd(()=>{for(let p of r)if(!Od.has(p.id)){let m=we(p,e.scene.getNonDeletedElementsMap());m&&Od.set(p.id,{fontSize:m.fontSize})}},[r,e.scene]);let d=o==="linear"?[["line",Ha],["sharpArrow",Kn],["curvedArrow",$n],["elbowArrow",Xn]]:o==="generic"?[["rectangle",qc],["diamond",Jc],["ellipse",Qc]]:[];return o0("div",{ref:c,tabIndex:-1,style:{position:"absolute",top:`${a.y+(E_+8)*e.state.zoom.value-e.state.offsetTop}px`,left:`${a.x-e.state.offsetLeft-x_}px`,zIndex:2},className:Qe.CONVERT_ELEMENT_TYPE_POPUP,children:d.map(([p,m])=>{let u=i&&(o==="generic"&&r[0].type===p||o==="linear"&&ka(n[0])===p);return o0(ee,{type:"toggle",icon:m,checked:u,title:p,"aria-label":p,"data-testid":`toolbar-${p}`,onSelect:()=>{u||(e.state.activeTool.type!==p&&be("convertElementType",p,"ui"),r0(e,{conversionType:o,nextType:p}),c.current?.focus())}},`${t[0].id}${t[0].version}_${p}`)})})},C_=(e,t,o)=>{let r=Ic(e,t),n=ep(e,t),i=Pn(t.text,ut(t),r),a=dt(i,ut(t),t.lineHeight),s=t.fontSize;for(;(a.width>r||a.height>n)&&s>0;){s-=1;let l={...t,fontSize:s};a=dt(t.text,ut(l),t.lineHeight)}bo(t,o.getNonDeletedElementsMap(),{fontSize:s,width:a.width,height:a.height}),At(t,e,o)},r0=(e,{conversionType:t,nextType:o,direction:r="right"})=>{if(!t)return!1;let n=e.scene.getSelectedElements(e.state),i=n.reduce((s,l)=>({...s,[l.id]:!0}),{}),a=r==="right"?1:-1;if(t==="generic"){let s=IS(n),c=s.every(d=>d.type===s[0].type)?Dd.indexOf(s[0].type):-1;if(o=o??Dd[(c+Dd.length+a)%Dd.length],o&&vl(o)){let d={};for(let m of s){let u=CS(m,o,e);d[u.id]=u}let p=[];for(let m of e.scene.getElementsIncludingDeleted())d[m.id]?p.push(d[m.id]):p.push(m);e.scene.replaceAllElements(p);for(let m of Object.values(d)){let u=we(m,e.scene.getNonDeletedElementsMap());u&&(Od.get(m.id)&&bo(u,e.scene.getNonDeletedElementsMap(),{fontSize:Od.get(m.id)?.fontSize??u.fontSize}),C_(m,u,e.scene))}e.setState(m=>({selectedElementIds:i,activeTool:ht(m,{type:"selection"})}))}}if(t==="linear"){let s=t0(n);if(!o){let c=Km(s,ka),d=c?Rd.indexOf(c):-1;o=Rd[(d+Rd.length+a)%Rd.length]}if(vh(o)){let c=[],d=e.scene.getElementsMapIncludingDeleted();for(let p of s){let m=Bd.get(e0(p.id,o));if(m&&ka(m)===o)d.set(m.id,m),c.push(m);else{let u=CS(p,o,e);d.set(u.id,u),c.push(u)}}e.scene.replaceAllElements(d);for(let p of c)if(Me(p))if(He(p)){let m=S_(p);if(m.length<2)continue;let u=[];for(let f=1;f<m.length-2;f++)u.push({start:m[f],end:m[f+1],index:f+1});let b=Jm(p,e.scene.getNonDeletedElementsMap(),{points:m,fixedSegments:u});bo(p,e.scene.getNonDeletedElementsMap(),{...b,endArrowhead:"arrow"})}else{let m=cv(["line","sharpArrow","curvedArrow"],u=>Bd.get(e0(p.id,u)));if(m){let u=m.points;e.scene.mutateElement(p,{points:u})}}}let l=t0(e.scene.getSelectedElements(e.state));e.setState(c=>({selectedElementIds:i,selectedLinearElement:l.length===1?new j(l[0],e.scene.getNonDeletedElementsMap()):null,activeTool:ht(c,{type:"selection"})}))}return!0},wl=e=>{if(e.length===0)return null;let t=!1;for(let o of e){if(vl(o.type))return"generic";SS(o)&&(t=!0)}return t?"linear":null},SS=e=>Me(e)&&(!Ee(e)||!kv(e)&&!Yt(e)),e0=(e,t)=>`${e}:${t}`,IS=e=>e.filter(t=>vl(t.type)),t0=e=>e.filter(t=>SS(t)),yh=20,yl=(e,t)=>e[0]===t[0],Jx=(e,t)=>e[1]===t[1],TS=(e,t)=>yl(e,t)?Math.abs(e[1]-t[1]):Math.abs(e[0]-t[0]),S_=e=>{let t=[e.points[0]],o=I_(e.points);for(let i=1;i<o.length;++i){let a=t[t.length-1],s=[...o[i]];Math.abs(s[0]-a[0])<yh?s[0]=a[0]:Math.abs(s[1]-a[1])<yh&&(s[1]=a[1]),yl(a,s)||Jx(a,s)||t.push(_(a[0],s[1])),t.push(s)}let r=[t[0]];for(let i=1;i<t.length-1;++i)yl(t[i-1],t[i])&&yl(t[i],t[i+1])||Jx(t[i-1],t[i])&&Jx(t[i],t[i+1])||r.push(t[i]);r.push(t[t.length-1]);let n=[r[0]];for(let i=1;i<r.length-1;++i){let a=n[n.length-1],s=r[i],l=r[i+1],c=yl(a,s),d=yl(s,l);if(c!==d){let p=TS(a,s),m=TS(s,l);if(p<yh||m<yh){if(m<p)c?l[0]=a[0]:l[1]=a[1];else if(d)for(let u=n.length-1;u>=0&&n[u][0]===a[0];--u)n[u][0]=s[0];else for(let u=n.length-1;u>=0&&n[u][1]===a[1];--u)n[u][1]=s[1];continue}}n.push(s)}return n.push(r[r.length-1]),n},I_=e=>{if(e.length===0)return[];let t=[e[0]];for(let o=1;o<e.length;o++){let[r,n]=t[t.length-1],[i,a]=e[o];(r!==i||n!==a)&&t.push(e[o])}return t},CS=(e,t,o)=>{if(!k_(e.type,t)){if(!gv())throw Error(`Invalid conversion from ${e.type} to ${t}.`);return e}if(e.type===t)return e;if(dr.delete(e),vl(t)){let r=_n(Bo({...e,type:t,roundness:e.roundness?{type:Ci(t)?Pt.ADAPTIVE_RADIUS:Pt.PROPORTIONAL_RADIUS}:e.roundness}));return Mi(r,o.scene,o.state),r}if(vh(t))switch(t){case"line":return _n(so({...e,type:"line"}));case"sharpArrow":return _n(_i({...e,type:"arrow",elbowed:!1,roundness:null,startArrowhead:o.state.currentItemStartArrowhead,endArrowhead:o.state.currentItemEndArrowhead}));case"curvedArrow":return _n(_i({...e,type:"arrow",elbowed:!1,roundness:{type:Pt.PROPORTIONAL_RADIUS},startArrowhead:o.state.currentItemStartArrowhead,endArrowhead:o.state.currentItemEndArrowhead}));case"elbowArrow":return _n(_i({...e,type:"arrow",elbowed:!0,fixedSegments:null,roundness:null}))}return bv(t,`unhandled conversion type: ${t}`),e},k_=(e,t)=>!!(vl(e)&&vl(t)||vh(e)&&vh(t)),M_=e=>Me(e)?ka(e):e.type,kS=w_;var MS=W({name:"toggleShapeSwitch",label:"labels.shapeSwitch",icon:()=>null,viewMode:!0,trackEvent:{category:"shape_switch",action:"toggle"},keywords:["change","switch","swap"],perform(e,t,o,r){return yt.set(br,{type:"panel"}),{captureUpdate:O.NEVER}},checked:e=>e.gridModeEnabled,predicate:(e,t,o)=>wl(e)!==null});var wh=W({name:"copyElementLink",label:"labels.copyElementLink",icon:Wa,trackEvent:{category:"element"},perform:async(e,t,o,r)=>{let n=ie(e,t);try{if(window.location){let i=Ip(n,t);return i?(await zr(r.props.generateLinkForSelection?r.props.generateLinkForSelection(i.id,i.type):Sp(i.id,i.type)),{appState:{toast:{message:h("toast.elementLinkCopied"),closable:!0}},captureUpdate:O.EVENTUALLY}):{appState:t,elements:e,app:r,captureUpdate:O.EVENTUALLY}}}catch(i){console.error(i)}return{appState:t,elements:e,app:r,captureUpdate:O.EVENTUALLY}},predicate:(e,t)=>kp(ie(e,t))}),AS=W({name:"linkToElement",label:"labels.linkToElement",icon:cd,perform:(e,t,o,r)=>{let n=ie(e,t);return n.length!==1||!kp(n)?{elements:e,appState:t,app:r,captureUpdate:O.EVENTUALLY}:{appState:{...t,openDialog:{name:"elementLinkSelector",sourceElementId:ie(e,t)[0].id}},captureUpdate:O.IMMEDIATELY}},predicate:(e,t,o,r)=>{let n=ie(e,t);return t.openDialog?.name!=="elementLinkSelector"&&n.length===1&&kp(n)},trackEvent:!1});var A_={toggleTheme:[z("Shift+Alt+D")],saveScene:[z("CtrlOrCmd+S")],loadScene:[z("CtrlOrCmd+O")],clearCanvas:[z("CtrlOrCmd+Delete")],imageExport:[z("CtrlOrCmd+Shift+E")],commandPalette:[z("CtrlOrCmd+/"),z("CtrlOrCmd+Shift+P")],cut:[z("CtrlOrCmd+X")],copy:[z("CtrlOrCmd+C")],paste:[z("CtrlOrCmd+V")],copyStyles:[z("CtrlOrCmd+Alt+C")],pasteStyles:[z("CtrlOrCmd+Alt+V")],selectAll:[z("CtrlOrCmd+A")],deleteSelectedElements:[z("Delete")],duplicateSelection:[z("CtrlOrCmd+D"),z(`Alt+${h("helpDialog.drag")}`)],sendBackward:[z("CtrlOrCmd+[")],bringForward:[z("CtrlOrCmd+]")],sendToBack:[Ro?z("CtrlOrCmd+Alt+["):z("CtrlOrCmd+Shift+[")],bringToFront:[Ro?z("CtrlOrCmd+Alt+]"):z("CtrlOrCmd+Shift+]")],copyAsPng:[z("Shift+Alt+C")],group:[z("CtrlOrCmd+G")],ungroup:[z("CtrlOrCmd+Shift+G")],gridMode:[z("CtrlOrCmd+'")],zenMode:[z("Alt+Z")],objectsSnapMode:[z("Alt+S")],stats:[z("Alt+/")],addToLibrary:[],flipHorizontal:[z("Shift+H")],flipVertical:[z("Shift+V")],viewMode:[z("Alt+R")],hyperlink:[z("CtrlOrCmd+K")],toggleElementLock:[z("CtrlOrCmd+Shift+L")],resetZoom:[z("CtrlOrCmd+0")],zoomOut:[z("CtrlOrCmd+-")],zoomIn:[z("CtrlOrCmd++")],zoomToFitSelection:[z("Shift+3")],zoomToFit:[z("Shift+1")],zoomToFitSelectionInViewport:[z("Shift+2")],saveFileToDisk:[z("CtrlOrCmd+S")],saveToActiveFile:[z("CtrlOrCmd+S")],toggleShortcuts:[z("?")],searchMenu:[z("CtrlOrCmd+F")],wrapSelectionInFrame:[],toolLock:[z("Q")]},it=(e,t=0)=>{let o=A_[e];return o&&o.length>0?o[t]||o[0]:""};var L_="\\u0300-\\u036f",__="\\ufe20-\\ufe2f",P_="\\u20d0-\\u20ff",D_=L_+__+P_,R_=`[${D_}]`,N_=RegExp(R_,"g"),O_=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,B_={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"E",\u00E6:"e",\u00DE:"T",\u00FE:"t",\u00DF:"s",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"I",\u0133:"i",\u0152:"E",\u0153:"e",\u0149:"n",\u017F:"s"},os=e=>e.replace(O_,t=>B_[t]||t).replace(N_,"");import ED from"clsx";import{useEffect as yD,useState as vD}from"react";import{useCallback as F_,useState as z_}from"react";var Th=()=>{let[e,t]=z_(null),o=F_(r=>t(r),[]);return[e,o]};import{useState as MI,useCallback as y0,useMemo as AI,useEffect as v0,memo as LI,useRef as pD}from"react";import{useEffect as RS,useRef as NS}from"react";var LS=e=>me(Pi(e,null,{deleteInvisibleElements:!0})),rs=async({data:e,config:t})=>$c({data:{...e,elements:LS(e.elements)},config:t}),_S=async({data:e,config:t})=>{let{mimeType:o=ue.png,quality:r}=t||{};o===ue.png&&typeof r=="number"&&console.warn(`"quality" will be ignored for "${ue.png}" mimeType`),o==="image/jpg"&&(o=ue.jpg),o===ue.jpg&&t?.canvasBackgroundColor===!1&&(console.warn(`Defaulting "exportBackground" to "true" for "${ue.jpg}" mimeType`),t={...t,canvasBackgroundColor:e.appState?.viewBackgroundColor||Zo});let n=await rs({data:e,config:t});return r=r||(/image\/jpe?g/.test(o)?.92:.8),new Promise((i,a)=>{n.toBlob(async s=>{if(!s)return a(new Error("couldn't export to blob"));s&&o===ue.png&&e.appState?.exportEmbedScene&&(s=await F2({blob:s,metadata:Gc(Pi(e.elements,null),e.appState,e.files||{},"local")})),i(s)},o,r)})},Tl=async({data:e,config:t})=>{let r={...Kc(e.appState,null),exportPadding:t?.padding},n=LS(e.elements),i=e.files||{};return Ba({data:{elements:n,appState:r,files:i},config:{exportingFrame:t?.exportingFrame,renderEmbeddables:t?.renderEmbeddables,skipInliningFonts:t?.skipInliningFonts,reuseImages:t?.reuseImages}})},H_=async({type:e,data:t,config:o})=>{if(e==="svg"){let r=await Tl({data:t,config:o});await zr(r.outerHTML)}else if(e==="png")await rh(_S({data:t,config:o}));else if(e==="json")await th(me(Pi(t.elements,null)),t.files);else throw new Error("Invalid export type")};import{useEffect as PS,useState as U_}from"react";var n0=Ie(new Map),DS=async e=>await Tl({data:{elements:e,appState:{exportBackground:!1,viewBackgroundColor:ho.white},files:null},config:{renderEmbeddables:!1,skipInliningFonts:!0}}),Ch=(e,t,o,r)=>{let[n,i]=U_();return PS(()=>{if(t)if(e){let a=o.get(e);a?i(a):(async()=>{let s=await DS(t);s.querySelector(".style-fonts")?.remove(),s&&(o.set(e,s),i(s))})()}else(async()=>{let a=await DS(t);i(a)})()},[e,t,o,i]),PS(()=>{let a=r.current;if(a)return n&&(a.innerHTML=n.outerHTML),()=>{a.innerHTML=""}},[n,r]),n},Cl=()=>{let[e]=le(n0);return{clearLibraryCache:()=>e.clear(),deleteItemsFromLibraryCache:r=>{r.forEach(n=>e.delete(n))},svgCache:e}};var G_=["excalidraw.com","raw.githubusercontent.com/excalidraw/excalidraw-libraries"],BS=new sr,gn=Ie({status:"loaded",isInitialized:!1,libraryItems:[]}),Fd=e=>Dr(e),W_=(e,t)=>!e.find(o=>o.elements.length!==t.elements.length?!1:o.elements.every((r,n)=>r.id===t.elements[n].id&&r.versionNonce===t.elements[n].versionNonce)),FS=(e,t)=>{let o=[];for(let r of t)W_(e,r)&&o.push(r);return[...o,...e]},zS=(e,t)=>{let o=te(t),r={deletedItems:new Map,addedItems:new Map,updatedItems:new Map};for(let i of e)o.has(i.id)||r.deletedItems.set(i.id,i);let n=te(e);for(let i of t){let a=n.get(i.id);a?s0(a)!==s0(i)&&r.updatedItems.set(i.id,i):r.addedItems.set(i.id,i)}return r},i0=class{constructor(t){T(this,"currLibraryItems",[]);T(this,"prevLibraryItems",Fd(this.currLibraryItems));T(this,"app");T(this,"updateQueue",[]);T(this,"getLastUpdateTask",()=>this.updateQueue[this.updateQueue.length-1]);T(this,"notifyListeners",()=>{if(this.updateQueue.length>0)yt.set(gn,t=>({status:"loading",libraryItems:this.currLibraryItems,isInitialized:t.isInitialized}));else{yt.set(gn,{status:"loaded",libraryItems:this.currLibraryItems,isInitialized:!0});try{let t=this.prevLibraryItems;this.prevLibraryItems=Fd(this.currLibraryItems);let o=Fd(this.currLibraryItems);this.app.props.onLibraryChange?.(o),BS.trigger(zS(t,o),o)}catch(t){console.error(t)}}});T(this,"destroy",()=>{this.updateQueue=[],this.currLibraryItems=[],yt.set(n0,new Map)});T(this,"resetLibrary",()=>this.setLibrary([]));T(this,"getLatestLibrary",()=>new Promise(async t=>{try{let o=await(this.getLastUpdateTask()||this.currLibraryItems);this.updateQueue.length>0?t(this.getLatestLibrary()):t(Fd(o))}catch{return t(this.currLibraryItems)}}));T(this,"updateLibrary",async({libraryItems:t,prompt:o=!1,merge:r=!1,openLibraryMenu:n=!1,defaultStatus:i="unpublished"})=>(n&&this.app.setState({openSidebar:{name:uo.name,tab:gc}}),this.setLibrary(()=>new Promise(async(a,s)=>{try{let l=await(typeof t=="function"&&!(t instanceof Blob)?t(this.currLibraryItems):t),c;l instanceof Blob?c=await gb(l,i):c=Xc(l,i),!o||window.confirm(h("alerts.confirmAddLibrary",{numShapes:c.length}))?(o&&this.app.focusContainer(),a(r?FS(this.currLibraryItems,c):c)):s(new Bs)}catch(l){s(l)}}))));T(this,"setLibrary",t=>{let o=new Promise(async(r,n)=>{try{await this.getLastUpdateTask(),typeof t=="function"&&(t=t(this.currLibraryItems)),this.currLibraryItems=Fd(await t),r(this.currLibraryItems)}catch(i){n(i)}}).catch(r=>{if(r.name==="AbortError")return console.warn("Library update aborted by user"),this.currLibraryItems;throw r}).finally(()=>{this.updateQueue=this.updateQueue.filter(r=>r!==o),this.notifyListeners()});return this.updateQueue.push(o),this.notifyListeners(),o});this.app=t}},HS=i0,Il=e=>{let o=Math.ceil(Math.sqrt(e.length)),r=[],n=u=>e.slice(u*o,u*o+o).reduce((f,x)=>{let{height:v}=On(x.elements);return Math.max(f,v)},0),i=u=>{let b=0,f=0,x=0;for(let v of e){if(b%o===0&&(f=0),f===u){let{width:y}=On(v.elements);x=Math.max(x,y)}b++,f++}return x},a=0,s=0,l=0,c=0,d=0,p=0,m=0;for(let u of e){d&&d%o===0&&(s+=l+50,a=0,p=0,m++),p===0&&(l=n(m)),c=i(p);let{minX:b,minY:f,width:x,height:v}=On(u.elements),y=(c-x)/2,E=(l-v)/2;r.push(...u.elements.map(w=>({...w,x:w.x+a+y-b,y:w.y+s+E-f}))),a+=c+50,d++,p++}return r},V_=(e,t=G_)=>{if(typeof t=="function"?t(e):t.some(o=>{let r=new URL(`https://${o.replace(/^https?:\/\//,"")}`),{hostname:n,pathname:i}=new URL(e);return new RegExp(`(^|\\.)${r.hostname}$`).test(n)&&new RegExp(`^${r.pathname.replace(/\/+$/,"")}(/+|$)`).test(i)}))return!0;throw new Error(`Invalid or disallowed library URL: "${e}"`)},a0=()=>{let e=new URLSearchParams(window.location.hash.slice(1)).get(Pm.addLibrary)||new URLSearchParams(window.location.search).get(_m.addLibrary),t=e?new URLSearchParams(window.location.hash.slice(1)).get("token"):null;return e?{libraryUrl:e,idToken:t}:null},$i=class $i{constructor(t){T(this,"adapter");this.adapter=t}static async getLibraryItems(t,o,r=!0){let n=()=>new Promise(async(i,a)=>{try{let s=await t.load({source:o});i(Xc(s?.libraryItems||[],"published"))}catch(s){a(s)}});return r?$i.queue.push(n):n()}getLibraryItems(t){return $i.getLibraryItems(this.adapter,t,!1)}};T($i,"queue",new jy),T($i,"run",async(t,o)=>{let r=new $i(t);return $i.queue.push(()=>o(r))});var Sl=$i,zd=0,Sh=0,s0=e=>`${e.id}:${e.name||""}:${ab(e.elements)}`,Ih=e=>sb(e.map(t=>s0(t)).sort().join()),OS=async(e,t)=>{try{return Sh++,await Sl.run(e,async o=>{let r=te(await o.getLibraryItems("save"));for(let[s]of t.deletedItems)r.delete(s);let n=[];for(let[s,l]of t.addedItems)r.has(s)?r.set(s,l):n.push(l);if(t.updatedItems)for(let[s,l]of t.updatedItems)r.set(s,l);let i=n.concat(Array.from(r.values())),a=Ih(i);return a!==zd&&await e.save({libraryItems:i}),zd=a,i})}finally{Sh--}},Y_=e=>{let{excalidrawAPI:t}=e,o=NS(e);o.current=e;let r=NS(!1);RS(()=>{if(!t)return;r.current=!1;let n=async({libraryUrl:s,idToken:l})=>{let c=new Promise(async(p,m)=>{try{s=decodeURIComponent(s),s=$m(s),V_(s,o.current.validateLibraryUrl);let b=await(await fetch(s)).blob();p(b)}catch(u){m(u)}}),d=l!==t.id;await(d&&document.hidden?new Promise(p=>{window.addEventListener("focus",()=>p(),{once:!0})}):null);try{await t.updateLibrary({libraryItems:c,prompt:d,merge:!0,defaultStatus:"published",openLibraryMenu:!0})}catch(p){throw t.updateScene({appState:{errorMessage:p.message}}),p}finally{if(window.location.hash.includes(Pm.addLibrary)){let p=new URLSearchParams(window.location.hash.slice(1));p.delete(Pm.addLibrary),window.history.replaceState({},mc,`#${p.toString()}`)}else if(window.location.search.includes(_m.addLibrary)){let p=new URLSearchParams(window.location.search);p.delete(_m.addLibrary),window.history.replaceState({},mc,`?${p.toString()}`)}}},i=s=>{s.preventDefault();let l=a0();l&&(s.stopImmediatePropagation(),window.history.replaceState({},"",s.oldURL),n(l))},a=a0();if(a&&n(a),"getInitialLibraryItems"in o.current&&o.current.getInitialLibraryItems&&(console.warn("useHandleLibrar `opts.getInitialLibraryItems` is deprecated. Use `opts.adapter` instead."),Promise.resolve(o.current.getInitialLibraryItems()).then(s=>{t.updateLibrary({libraryItems:s,merge:!0})}).catch(s=>{console.error(`UseHandeLibrary getInitialLibraryItems failed: ${s?.message}`)})),"adapter"in o.current&&o.current.adapter){let s=o.current.adapter,l=o.current.migrationAdapter,c=dv();l?c.resolve(Pf(l.load).then(async d=>{let p=null;try{if(!d)return Sl.getLibraryItems(s,"load");p=Xc(d.libraryItems||[],"published");let m=await OS(s,zS([],p));try{await l.clear()}catch(u){console.error(`couldn't delete legacy library data: ${u.message}`)}return m}catch(m){return console.error(`couldn't migrate legacy library data: ${m.message}`),p}}).catch(d=>(console.error(`error during library migration: ${d.message}`),Sl.getLibraryItems(s,"load")))):c.resolve(Pf(Sl.getLibraryItems,s,"load")),t.updateLibrary({libraryItems:c.then(d=>{let p=d||[];return zd=Ih(p),p}),merge:!0}).finally(()=>{r.current=!0})}return window.addEventListener("hashchange",i),()=>{window.removeEventListener("hashchange",i)}},[t]),RS(()=>{let n=BS.on(async(a,s)=>{let l=r.current,c="adapter"in o.current&&o.current.adapter||null;try{c&&zd!==Ih(s)&&await OS(c,a)}catch(d){console.error(`couldn't persist library update: ${d.message}`,a),l&&o.current.excalidrawAPI&&o.current.excalidrawAPI.updateScene({appState:{errorMessage:h("errors.saveLibraryError")}})}}),i=a=>{Sh&&uv(a)};return window.addEventListener("beforeunload",i),()=>{window.removeEventListener("beforeunload",i),n(),zd=0,Sh=0}},[])};import $_ from"clsx";import{jsx as X_}from"react/jsx-runtime";var K_=({theme:e,id:t,libraryReturnUrl:o})=>{let r=o||window.location.origin+window.location.pathname;return X_("a",{className:"library-menu-browse-button",href:`${k.VITE_APP_LIBRARY_URL}?target=${window.name||"_blank"}&referrer=${r}&useHash=true&token=${t}&theme=${e}&version=${Rm.excalidrawLibrary}`,target:"_excalidraw_libraries",children:h("labels.libraries")})},US=K_;import{jsx as Z_,jsxs as j_}from"react/jsx-runtime";var kh=({libraryReturnUrl:e,theme:t,id:o,style:r,children:n,className:i})=>j_("div",{className:$_("library-menu-control-buttons",i),style:r,children:[Z_(US,{id:o,libraryReturnUrl:e,theme:t}),n]});import{useCallback as Al,useEffect as f0,useMemo as b0,useRef as TI,useState as CI}from"react";import cD from"clsx";import q_ from"lodash.throttle";import{useEffect as J_}from"react";var Q_=Ie(0),GS=e=>{let[t,o]=le(Q_);return J_(()=>{let{current:r}=e;if(!r)return;let n=q_(()=>{let{scrollTop:i}=r;o(i)},200);return r.addEventListener("scroll",n),()=>{n.cancel(),r.removeEventListener("scroll",n)}},[e,o]),t};import UP from"clsx";import{useCallback as GP,useState as u0}from"react";import{flushSync as WS}from"react-dom";import eP from"clsx";import{jsx as Mh,jsxs as oP}from"react/jsx-runtime";var tP=({label:e,onClick:t,className:o,children:r,actionType:n,type:i="button",isLoading:a,...s})=>{let l=n?`Dialog__action-button--${n}`:"";return oP("button",{className:eP("Dialog__action-button",l,o),type:i,"aria-label":e,onClick:t,...s,children:[r&&Mh("div",{style:a?{visibility:"hidden"}:{},children:r}),Mh("div",{style:a?{visibility:"hidden"}:{},children:e}),a&&Mh("div",{style:{position:"absolute",inset:0},children:Mh(Nt,{})})]})},oi=tP;import{jsx as VS,jsxs as YS}from"react/jsx-runtime";var rP=e=>{let{onConfirm:t,onCancel:o,children:r,confirmText:n=h("buttons.confirm"),cancelText:i=h("buttons.cancel"),className:a="",...s}=e,l=Ce(),c=nn(kl),{container:d}=tt();return YS(_t,{onCloseRequest:o,size:"small",...s,className:`confirm-dialog ${a}`,children:[r,YS("div",{className:"confirm-dialog-buttons",children:[VS(oi,{label:i,onClick:()=>{l({openMenu:null}),c(!1),WS(()=>{o()}),d?.focus()}}),VS(oi,{label:n,onClick:()=>{l({openMenu:null}),c(!1),WS(()=>{t()}),d?.focus()},actionType:"danger"})]})]})},Ah=rP;import{useCallback as dP,useEffect as c0,useRef as KS,useState as l0}from"react";var xr=class{static has(t){try{return!!window.localStorage.getItem(t)}catch(o){return console.warn(`localStorage.getItem error: ${o.message}`),!1}}static get(t){try{let o=window.localStorage.getItem(t);return o?JSON.parse(o):null}catch(o){return console.warn(`localStorage.getItem error: ${o.message}`),null}}};T(xr,"set",(t,o)=>{try{return window.localStorage.setItem(t,JSON.stringify(o)),!0}catch(r){return console.warn(`localStorage.setItem error: ${r.message}`),!1}}),T(xr,"delete",t=>{try{window.localStorage.removeItem(t)}catch(o){console.warn(`localStorage.removeItem error: ${o.message}`)}});import Lh from"react";var nP=/({{[\w-]+}})|(<[\w-]+>)|(<\/[\w-]+>)/g,iP=/{{([\w-]+)}}/,aP=/<([\w-]+)>/,sP=/<\/([\w-]+)>/,lP=(e,t)=>{let o=[{name:"",children:[]}];return e.split(nP).filter(Boolean).forEach(r=>{let n=r.match(aP),i=r.match(sP),a=r.match(iP);if(n!==null){let s=n[1];t.hasOwnProperty(s)?o.push({name:s,children:[]}):console.warn(`Trans: missed to pass in prop ${s} for interpolating ${e}`)}else if(i!==null)if(i[1]===o[o.length-1].name){let l=o.pop(),c=Lh.createElement(Lh.Fragment,{},...l.children),d=t[l.name];typeof d=="function"&&o[o.length-1].children.push(d(c))}else console.warn(`Trans: unexpected end tag ${r} for interpolating ${e}`);else if(a!==null){let s=a[1];t.hasOwnProperty(s)?o[o.length-1].children.push(t[s]):console.warn(`Trans: key ${s} not in props for interpolating ${e}`)}else o[o.length-1].children.push(r)}),o.length!==1&&console.warn(`Trans: stack not empty for interpolating ${e}`),o[0].children},cP=({i18nKey:e,children:t,...o})=>{let{t:r}=Ge();return Lh.createElement(Lh.Fragment,{},...lP(r(e),o))},Ao=cP;import{jsx as _e,jsxs as Eo}from"react/jsx-runtime";var mP=async e=>{let r=Math.round(8),n=Math.max(Math.round(128/64),2),i=sv(e,6),a=document.createElement("canvas");a.width=i[0].length*128+(i[0].length+1)*(r*2)-r*2,a.height=i.length*128+(i.length+1)*(r*2)-r*2;let s=a.getContext("2d");s.fillStyle=Zo,s.fillRect(0,0,a.width,a.height);for(let[l,c]of e.entries()){let d=await rs({data:{elements:c.elements,files:null},config:{maxWidthOrHeight:128}}),{width:p,height:m}=d,u=Math.floor(l/6)*(128+r*2),b=l%6*(128+r*2);s.drawImage(d,b+(128-p)/2+r,u+(128-m)/2+r),s.lineWidth=n,s.strokeStyle="#ced4da",s.strokeRect(b+r/2,u+r/2,128+r,128+r)}return await zp(new File([await Fa(a)],"preview",{type:ue.png}),{outputType:ue.jpg,maxWidthOrHeight:5e3})},pP=({libItem:e,appState:t,index:o,onChange:r,onRemove:n})=>{let i=KS(null),a=KS(null);return c0(()=>{let s=i.current;s&&(async()=>{let l=await Tl({data:{elements:e.elements,appState:{...t,viewBackgroundColor:Zo,exportBackground:!0},files:null},config:{skipInliningFonts:!0}});s.innerHTML=l.outerHTML})()},[e.elements,t]),Eo("div",{className:"single-library-item",children:[e.status==="published"&&_e("span",{className:"single-library-item-status",children:h("labels.statusPublished")}),_e("div",{ref:i,className:"single-library-item__svg"}),_e(ee,{"aria-label":h("buttons.remove"),type:"button",icon:qo,className:"single-library-item--remove",onClick:n.bind(null,e.id),title:h("buttons.remove")}),Eo("div",{style:{display:"flex",margin:"0.8rem 0",width:"100%",fontSize:"14px",fontWeight:500,flexDirection:"column"},children:[Eo("label",{style:{display:"flex",justifyContent:"space-between",flexDirection:"column"},children:[Eo("div",{style:{padding:"0.5em 0"},children:[_e("span",{style:{fontWeight:500,color:"#868e96"},children:h("publishDialog.itemName")}),_e("span",{"aria-hidden":"true",className:"required",children:"*"})]}),_e("input",{type:"text",ref:a,style:{width:"80%",padding:"0.2rem"},defaultValue:e.name,placeholder:"Item name",onChange:s=>{r(s.target.value,o)}})]}),_e("span",{className:"error",children:e.error})]})]})},uP=({onClose:e,libraryItems:t,appState:o,onSuccess:r,onError:n,updateItemsInStorage:i,onRemove:a})=>{let[s,l]=l0({authorName:"",githubHandle:"",name:"",description:"",twitterHandle:"",website:""}),[c,d]=l0(!1);c0(()=>{let E=xr.get(bi.PUBLISH_LIBRARY);E&&l(E)},[]);let[p,m]=l0(t.slice());c0(()=>{m(t.slice())},[t]);let u=E=>{l({...s,[E.target.name]:E.target.value})},b=async E=>{E.preventDefault(),d(!0);let w=[],C=!1;if(p.forEach(L=>{let R="";L.name||(R=h("publishDialog.errors.required"),C=!0),w.push({...L,error:R})}),C){m(w),d(!1);return}let I=await mP(p),A={type:gi.excalidrawLibrary,version:Rm.excalidrawLibrary,source:Iy(),libraryItems:p},M=JSON.stringify(A,null,2),N=new Blob([M],{type:"application/json"}),P=new FormData;P.append("excalidrawLib",N),P.append("previewImage",I),P.append("previewImageType",I.type),P.append("title",s.name),P.append("authorName",s.authorName),P.append("githubHandle",s.githubHandle),P.append("name",s.name),P.append("description",s.description),P.append("twitterHandle",s.twitterHandle),P.append("website",s.website),fetch(`${k.VITE_APP_LIBRARY_BACKEND}/submit`,{method:"post",body:P}).then(L=>L.ok?L.json().then(({url:R})=>{xr.delete(bi.PUBLISH_LIBRARY),r({url:R,authorName:s.authorName,items:p})}):L.json().catch(()=>{throw new Error(L.statusText||"something went wrong")}).then(R=>{throw new Error(R.message||L.statusText||"something went wrong")}),L=>{console.error(L),n(L),d(!1)}).catch(L=>{console.error(L),n(L),d(!1)})},f=()=>{let E=[];return p.forEach((w,C)=>{E.push(_e("div",{className:"single-library-item-wrapper",children:_e(pP,{libItem:w,appState:o,index:C,onChange:(I,A)=>{let M=p.slice();M[A].name=I,m(M)},onRemove:a})},C))}),_e("div",{className:"selected-library-items",children:E})},x=dP(()=>{i(p),xr.set(bi.PUBLISH_LIBRARY,s),e()},[p,e,i,s]),v=!!t.length,y=t.some(E=>E.status==="published");return _e(_t,{onCloseRequest:x,title:h("publishDialog.title"),className:"publish-library",children:v?Eo("form",{onSubmit:b,children:[_e("div",{className:"publish-library-note",children:_e(Ao,{i18nKey:"publishDialog.noteDescription",link:E=>_e("a",{href:"https://libraries.excalidraw.com",target:"_blank",rel:"noopener",children:E})})}),_e("span",{className:"publish-library-note",children:_e(Ao,{i18nKey:"publishDialog.noteGuidelines",link:E=>_e("a",{href:"https://github.com/excalidraw/excalidraw-libraries#guidelines",target:"_blank",rel:"noopener noreferrer",children:E})})}),_e("div",{className:"publish-library-note",children:h("publishDialog.noteItems")}),y&&_e("span",{className:"publish-library-note publish-library-warning",children:h("publishDialog.republishWarning")}),f(),Eo("div",{className:"publish-library__fields",children:[Eo("label",{children:[Eo("div",{children:[_e("span",{children:h("publishDialog.libraryName")}),_e("span",{"aria-hidden":"true",className:"required",children:"*"})]}),_e("input",{type:"text",name:"name",required:!0,value:s.name,onChange:u,placeholder:h("publishDialog.placeholder.libraryName")})]}),Eo("label",{style:{alignItems:"flex-start"},children:[Eo("div",{children:[_e("span",{children:h("publishDialog.libraryDesc")}),_e("span",{"aria-hidden":"true",className:"required",children:"*"})]}),_e("textarea",{name:"description",rows:4,required:!0,value:s.description,onChange:u,placeholder:h("publishDialog.placeholder.libraryDesc")})]}),Eo("label",{children:[Eo("div",{children:[_e("span",{children:h("publishDialog.authorName")}),_e("span",{"aria-hidden":"true",className:"required",children:"*"})]}),_e("input",{type:"text",name:"authorName",required:!0,value:s.authorName,onChange:u,placeholder:h("publishDialog.placeholder.authorName")})]}),Eo("label",{children:[_e("span",{children:h("publishDialog.githubUsername")}),_e("input",{type:"text",name:"githubHandle",value:s.githubHandle,onChange:u,placeholder:h("publishDialog.placeholder.githubHandle")})]}),Eo("label",{children:[_e("span",{children:h("publishDialog.twitterUsername")}),_e("input",{type:"text",name:"twitterHandle",value:s.twitterHandle,onChange:u,placeholder:h("publishDialog.placeholder.twitterHandle")})]}),Eo("label",{children:[_e("span",{children:h("publishDialog.website")}),_e("input",{type:"text",name:"website",pattern:"https?://.+",title:h("publishDialog.errors.website"),value:s.website,onChange:u,placeholder:h("publishDialog.placeholder.website")})]}),_e("span",{className:"publish-library-note",children:_e(Ao,{i18nKey:"publishDialog.noteLicense",link:E=>_e("a",{href:"https://github.com/excalidraw/excalidraw-libraries/blob/main/LICENSE",target:"_blank",rel:"noopener noreferrer",children:E})})})]}),Eo("div",{className:"publish-library__buttons",children:[_e(oi,{label:h("buttons.saveLibNames"),onClick:x,"data-testid":"cancel-clear-canvas-button"}),_e(oi,{type:"submit",label:h("buttons.submit"),actionType:"primary",isLoading:c})]})]}):_e("p",{style:{padding:"1em",textAlign:"center",fontWeight:500},children:h("publishDialog.atleastOneLibItem")})})},XS=uP;import fI from"react";import{DropdownMenu as FP}from"radix-ui";import fP from"clsx";import{useCallback as bP,useEffect as xP,useMemo as EP}from"react";import{DropdownMenu as yP}from"radix-ui";import{forwardRef as $S}from"react";import ZS from"clsx";import{jsx as jS}from"react/jsx-runtime";var hP=$S(({children:e,gap:t,align:o,justifyContent:r,className:n,style:i},a)=>jS("div",{className:ZS("Stack Stack_horizontal",n),style:{"--gap":t,alignItems:o,justifyContent:r,...i},ref:a,children:e})),gP=$S(({children:e,gap:t,align:o,justifyContent:r,className:n,style:i},a)=>jS("div",{className:ZS("Stack Stack_vertical",n),style:{"--gap":t,justifyItems:o,justifyContent:r,...i},ref:a,children:e})),co={Row:hP,Col:gP};import{jsx as _h}from"react/jsx-runtime";var qS=({children:e,onClickOutside:t,className:o="",onSelect:r,open:n=!0,align:i="end",style:a})=>{let s=Le(),[l,c]=Th(),d=EP(()=>({current:l}),[l]),p=zi({onClickOutside:t});Js(d,bP(u=>{d.current?.closest(`.${Qe.DROPDOWN_MENU_EVENT_WRAPPER}`)?.contains(u.target)||p.onClickOutside?.()},[p,d])),xP(()=>{if(!n||!l)return;let u=x=>{x.key===S.ESCAPE&&(x.preventDefault(),x.stopImmediatePropagation(),p.onClickOutside?.())},b={capture:!0},f=l.ownerDocument;return f.addEventListener("keydown",u,b),()=>{f.removeEventListener("keydown",u,b)}},[p,n,l]);let m=fP(`dropdown-menu ${o}`,{"dropdown-menu--mobile":s.formFactor==="phone"}).trim();return _h(kx.Provider,{value:{onSelect:r},children:_h(yP.Content,{ref:c,className:m,style:a,"data-testid":"dropdown-menu",align:i,sideOffset:8,onCloseAutoFocus:u=>u.preventDefault(),children:s.formFactor==="phone"?_h(co.Col,{className:"dropdown-menu-container",children:e}):_h(Ct,{className:"dropdown-menu-container",padding:2,children:e})})})};qS.displayName="DropdownMenuContent";var JS=qS;import{jsx as wP}from"react/jsx-runtime";var vP=({children:e,className:t="",selected:o,...r})=>wP("div",{...r,className:`dropdown-menu-item-base dropdown-menu-item-custom ${t} ${o?"dropdown-menu-item--selected":""}`.trim(),children:e}),QS=vP;import{DropdownMenu as TP}from"radix-ui";import{jsx as d0}from"react/jsx-runtime";var eI=({icon:e,shortcut:t,href:o,children:r,onSelect:n,className:i="",selected:a,rel:s="noopener",...l})=>{let c=Ou(n);return d0(TP.Item,{className:"radix-menu-item",onSelect:c,asChild:!0,children:d0("a",{...l,href:o,target:"_blank",rel:`noopener ${s}`,className:Wi(i,a),title:l.title??l["aria-label"],children:d0(Vi,{icon:e,shortcut:t,children:r})})})},Ml=eI;eI.displayName="DropdownMenuItemLink";import{jsx as CP}from"react/jsx-runtime";var tI=()=>CP("div",{style:{height:"1px",backgroundColor:"var(--default-border-color)",margin:"6px 0",flex:"0 0 auto"}}),oI=tI;tI.displayName="DropdownMenuSeparator";import{DropdownMenu as _P}from"radix-ui";import SP from"clsx";import{DropdownMenu as IP}from"radix-ui";import{useCallback as kP,useState as rI}from"react";import{jsx as p0}from"react/jsx-runtime";var m0=-4,MP=4,nI=({children:e,className:t})=>{let o=Le(),r=SP(`dropdown-menu dropdown-submenu ${t}`,{"dropdown-menu--mobile":o.formFactor==="phone"}).trim(),n=kP(c=>{if(c){let p=c.closest(".dropdown-menu-container")?.getBoundingClientRect();if(p){let m=c.getBoundingClientRect().width,b=window.innerWidth-p.right;b<m+20&&(a(b-m+m0),l(m0+8))}}},[]),[i,a]=rI(MP),[s,l]=rI(m0);return p0(IP.SubContent,{className:r,sideOffset:i,alignOffset:s,collisionPadding:8,ref:n,children:o.formFactor==="phone"?p0(co.Col,{className:"dropdown-menu-container",children:e}):p0(Ct,{className:"dropdown-menu-container",padding:2,style:{zIndex:1},children:e})})},iI=nI;nI.displayName="DropdownMenuSubContent";import{DropdownMenu as AP}from"radix-ui";import{jsx as aI,jsxs as LP}from"react/jsx-runtime";var sI=({children:e,icon:t,shortcut:o,className:r})=>LP(AP.SubTrigger,{className:`${Wi(r)} dropdown-menu__submenu-trigger`,children:[aI(Vi,{icon:t,shortcut:o,children:e}),aI("div",{className:"dropdown-menu__submenu-trigger-icon",children:mx})]}),lI=sI;sI.displayName="DropdownMenuSubTrigger";import cI from"react";var Ph=e=>t=>{let o=cI.Children.toArray(t).find(r=>cI.isValidElement(r)&&typeof r.type!="string"&&r?.type.displayName&&r.type.displayName===e);return o||null},dI=Ph("DropdownMenuTrigger"),mI=Ph("DropdownMenuContent"),pI=Ph("DropdownMenuSubTrigger"),uI=Ph("DropdownMenuSubContent");import{jsxs as PP}from"react/jsx-runtime";var Dh=({children:e})=>{let t=pI(e),o=uI(e);return PP(_P.Sub,{children:[t,o]})};Dh.Trigger=lI;Dh.Content=iI;Dh.displayName="DropdownMenuSub";var Zi=Dh;import DP from"clsx";import{DropdownMenu as RP}from"radix-ui";import{jsx as NP}from"react/jsx-runtime";var hI=({className:e="",children:t,onToggle:o,title:r,...n})=>{let i=Le(),a=DP(`dropdown-menu-button ${e}`,"zen-mode-transition",{"dropdown-menu-button--mobile":i.formFactor==="phone"}).trim();return NP(RP.Trigger,{className:a,onClick:o,type:"button","data-testid":"dropdown-menu-button",title:r,...n,children:t})},gI=hI;hI.displayName="DropdownMenuTrigger";import{jsx as BP}from"react/jsx-runtime";var OP=e=>BP(Io,{...e,icon:e.checked?td:js}),Hr=OP;import{jsx as HP,jsxs as zP}from"react/jsx-runtime";var Ur=({children:e,open:t})=>{let o=dI(e),r=mI(e),n=r&&fI.isValidElement(r)?fI.cloneElement(r,{open:t}):r;return HP(FP.Root,{open:t,modal:!1,children:zP("div",{className:Qe.DROPDOWN_MENU_EVENT_WRAPPER,style:{display:"contents"},children:[o,n]})})};Ur.Trigger=gI;Ur.Content=JS;Ur.Item=Io;Ur.ItemCheckbox=Hr;Ur.ItemLink=Ml;Ur.ItemCustom=QS;Ur.Group=bd;Ur.Separator=oI;Ur.Sub=Zi;var pe=Ur;Ur.displayName="DropdownMenu";import{jsx as Wo,jsxs as Rh}from"react/jsx-runtime";var WP=(e,t)=>e.filter(o=>t.includes(o.id)),VP=({setAppState:e,selectedItems:t,library:o,onRemoveFromLibrary:r,resetLibrary:n,onSelectItems:i,appState:a,className:s})=>{let[l]=le(gn),[c,d]=le(kl),p=()=>{let P=t.length?h("alerts.removeItemsFromsLibrary",{count:t.length}):h("alerts.resetLibrary"),L=t.length?h("confirmDialog.removeItemsFromLib"):h("confirmDialog.resetLibrary");return Wo(Ah,{onConfirm:()=>{t.length?r():n(),u(!1)},onCancel:()=>{u(!1)},title:L,children:Wo("p",{children:P})})},[m,u]=u0(!1),b=!!t.length,f=b?l.libraryItems.filter(P=>t.includes(P.id)):l.libraryItems,x=b?h("buttons.remove"):h("buttons.resetLibrary"),[v,y]=u0(!1),[E,w]=u0(null),C=GP(()=>Rh(_t,{onCloseRequest:()=>w(null),title:h("publishSuccessDialog.title"),className:"publish-library-success",size:"small",children:[Wo("p",{children:Wo(Ao,{i18nKey:"publishSuccessDialog.content",authorName:E.authorName,link:P=>Wo("a",{href:E?.url,target:"_blank",rel:"noopener noreferrer",children:P})})}),Wo(ee,{type:"button",title:h("buttons.close"),"aria-label":h("buttons.close"),label:h("buttons.close"),onClick:()=>w(null),"data-testid":"publish-library-success-close",className:"publish-library-success-close"})]}),[w,E]),I=(P,L)=>{y(!1),w({url:P.url,authorName:P.authorName});let R=L.slice();R.forEach(H=>{t.includes(H.id)&&(H.status="published")}),o.setLibrary(R)},A=async()=>{try{await o.updateLibrary({libraryItems:_p({description:"Excalidraw library files"}),merge:!0,openLibraryMenu:!0})}catch(P){if(P?.name==="AbortError"){console.warn(P);return}e({errorMessage:h("errors.importLibraryError")})}},M=async()=>{let P=b?f:await o.getLatestLibrary();P2(P).catch(Gm).catch(L=>{e({errorMessage:L.message})})},N=()=>Rh(pe,{open:c,children:[Wo(pe.Trigger,{onToggle:()=>d(!c),children:Di}),Rh(pe.Content,{onClickOutside:()=>d(!1),onSelect:()=>d(!1),className:"library-menu",children:[!b&&Wo(pe.Item,{onSelect:A,icon:Ga,"data-testid":"lib-dropdown--load",children:h("buttons.load")}),!!f.length&&Wo(pe.Item,{onSelect:M,icon:Ni,"data-testid":"lib-dropdown--export",children:h("buttons.export")}),b&&Wo(pe.Item,{icon:L1,onSelect:()=>y(!0),"data-testid":"lib-dropdown--remove",children:h("buttons.publishLibrary")}),!!f.length&&Wo(pe.Item,{onSelect:()=>u(!0),icon:Jt,children:x})]})]});return Rh("div",{className:UP("library-menu-dropdown-container",s),children:[N(),t.length>0&&Wo("div",{className:"library-actions-counter",children:t.length}),m&&p(),v&&Wo(XS,{onClose:()=>y(!1),libraryItems:WP(l.libraryItems,t),appState:a,onSuccess:P=>I(P,l.libraryItems),onError:P=>window.alert(P),updateItemsInStorage:()=>o.setLibrary(l.libraryItems),onRemove:P=>i(t.filter(L=>L!==P))}),E&&C()]})},bI=({selectedItems:e,onSelectItems:t,className:o})=>{let{library:r}=Ke(),{clearLibraryCache:n,deleteItemsFromLibraryCache:i}=Cl(),a=fe(),s=Ce(),[l]=le(gn),c=async p=>{let m=p.filter(u=>!e.includes(u.id));r.setLibrary(m).catch(()=>{s({errorMessage:h("alerts.errorRemovingFromLibrary")})}),i(e),t([])};return Wo(VP,{appState:a,setAppState:s,selectedItems:e,onSelectItems:t,library:r,onRemoveFromLibrary:()=>c(l.libraryItems),resetLibrary:()=>{r.resetLibrary(),n()},className:o})};import{memo as JP,useEffect as QP,useState as eD}from"react";import YP,{useCallback as KP}from"react";function XP(){return[!1,KP(t=>t(),[])]}var xI=YP.useTransition||XP;import EI from"clsx";import{memo as $P,useRef as ZP,useState as jP}from"react";import{jsx as Nh,jsxs as qP}from"react/jsx-runtime";var yI=$P(({id:e,elements:t,isPending:o,onClick:r,selected:n,onToggle:i,onDrag:a,svgCache:s})=>{let l=ZP(null),c=Ch(e,t,s,l),[d,p]=jP(!1),m=Le().formFactor==="phone",u=o&&Nh("div",{className:"library-unit__adder",children:xb});return qP("div",{className:EI("library-unit",{"library-unit__active":t,"library-unit--hover":t&&d,"library-unit--selected":n,"library-unit--skeleton":!c}),onMouseEnter:()=>p(!0),onMouseLeave:()=>p(!1),children:[Nh("div",{className:EI("library-unit__dragger",{"library-unit__pulse":!!o}),ref:l,draggable:!!t,onClick:t||o?b=>{e&&b.shiftKey?i(e,b):r(e)}:void 0,onDragStart:b=>{if(!e){b.preventDefault();return}p(!1),a(e,b)}}),u,e&&t&&(d||m||n)&&Nh(Id,{checked:n,onChange:(b,f)=>i(e,f),className:"library-unit__checkbox"})]})}),vI=()=>Nh("div",{className:"library-unit library-unit--skeleton"});import{Fragment as tD,jsx as Oh}from"react/jsx-runtime";var Bh=({children:e})=>Oh("div",{className:"library-menu-items-container__grid",children:e}),Hd=JP(({items:e,onItemSelectToggle:t,onItemDrag:o,isItemSelected:r,onClick:n,svgCache:i,itemsRenderedPerBatch:a})=>{let[,s]=xI(),[l,c]=eD(0);return QP(()=>{l<e.length&&s(()=>{c(l+a)})},[l,e.length,s,a]),Oh(tD,{children:e.map((d,p)=>p<l?Oh(yI,{elements:d?.elements,isPending:!d?.id&&!!d?.elements,onClick:n,svgCache:i,id:d?.id,selected:r(d.id),onToggle:t,onDrag:o},d?.id??p):Oh(vI,{},p))})});import h0 from"clsx";import{forwardRef as nD,useRef as iD,useImperativeHandle as aD,useLayoutEffect as sD,useState as lD}from"react";import oD from"clsx";import{jsx as rD}from"react/jsx-runtime";var mo=({type:e="button",onSelect:t,selected:o,children:r,className:n="",...i})=>rD("button",{onClick:wi(i.onClick,a=>{t()}),type:e,className:oD("excalidraw-button",n,{selected:o}),...i,children:r});import{jsx as g0,jsxs as wI}from"react/jsx-runtime";var ji=nD(({onChange:e,label:t,fullWidth:o,placeholder:r,readonly:n,selectOnRender:i,onKeyDown:a,isRedacted:s=!1,icon:l,className:c,type:d,...p},m)=>{let u=iD(null);aD(m,()=>u.current),sD(()=>{i&&(u.current?.focus(),u.current?.select())},[i]);let[b,f]=lD(!1);return wI("div",{className:h0("ExcTextField",c,{"ExcTextField--fullWidth":o,"ExcTextField--hasIcon":!!l}),onClick:()=>{u.current?.focus()},children:[l,t&&g0("div",{className:"ExcTextField__label",children:t}),wI("div",{className:h0("ExcTextField__input",{"ExcTextField__input--readonly":n}),children:[g0("input",{className:h0({"is-redacted":"value"in p&&p.value&&s&&!b}),readOnly:n,value:"value"in p?p.value:void 0,defaultValue:"defaultValue"in p?p.defaultValue:void 0,placeholder:r,ref:u,onChange:x=>e?.(x.target.value),onKeyDown:a,type:d}),s&&g0(mo,{onSelect:()=>f(!b),style:{border:0,userSelect:"none"},children:b?z1:Ya})]})]})});import{Fragment as SI,jsx as eo,jsxs as fn}from"react/jsx-runtime";var dD=17,mD=64;function x0({isLoading:e,libraryItems:t,onAddToLibrary:o,onInsertLibraryItems:r,pendingElements:n,theme:i,id:a,libraryReturnUrl:s,onSelectItems:l,selectedItems:c}){let d=Le(),p=TI(null),m=GS(p);f0(()=>{m>0&&p.current?.scrollTo(0,m)},[]);let{svgCache:u}=Cl(),[b,f]=CI(null),[x,v]=CI(""),y=!t.length&&!n.length,E=!y&&!!x.trim(),w=b0(()=>{let V=os(x.trim().toLowerCase());return V?t.filter($=>{let oe=$.name||"";return oe.trim()&&os(oe.toLowerCase()).includes(V)}):[]},[t,x]),C=b0(()=>t.filter(V=>V.status!=="published"),[t]),I=b0(()=>t.filter(V=>V.status==="published"),[t]),A=Al((V,$)=>{let oe=!c.includes(V),re=[...C,...I];if(oe){if($.shiftKey&&b){let ke=re.findIndex(Se=>Se.id===b),G=re.findIndex(Se=>Se.id===V);if(ke===-1||G===-1){l([...c,V]);return}let Z=te(c),Re=Math.min(ke,G),ve=Math.max(ke,G),Ve=re.reduce((Se,Ze,xe)=>((xe>=Re&&xe<=ve||Z.has(Ze.id))&&Se.push(Ze.id),Se),[]);l(Ve)}else l([...c,V]);f(V)}else f(null),l(c.filter(ke=>ke!==V))},[b,l,I,c,C]);f0(()=>{c.length||f(null)},[c]);let M=Al(V=>{let $;return c.includes(V)?$=t.filter(oe=>c.includes(oe.id)):$=t.filter(oe=>oe.id===V),$.map(oe=>({...oe,elements:Bn({type:"everything",elements:oe.elements,randomizeSeed:!0,preserveFrameChildrenOrder:!0}).duplicatedElements}))},[t,c]),N=Al((V,$)=>{let oe={itemIds:c.includes(V)?c:[V]};$.dataTransfer.setData(ue.excalidrawlibIds,JSON.stringify(oe))},[c]),P=Al(V=>V?c.includes(V):!1,[c]),L=Al(()=>{o(n)},[n,o]),R=Al(V=>{V&&r(M(V))},[M,r]),H=u.size>=(w.length?w:t).length?mD:dD,K=TI(null);f0(()=>{av(()=>{K.current?.focus()})},[]);let F=!E&&fn(SI,{children:[!y&&eo("div",{className:"library-menu-items-container__header",children:h("labels.personalLib")}),!n.length&&!C.length?fn("div",{className:"library-menu-items__no-items",children:[!I.length&&eo("div",{className:"library-menu-items__no-items__label",children:h("library.noItems")}),eo("div",{className:"library-menu-items__no-items__hint",children:I.length>0?h("library.hint_emptyPrivateLibrary"):h("library.hint_emptyLibrary")})]}):fn(Bh,{children:[n.length>0&&eo(Hd,{itemsRenderedPerBatch:H,items:[{id:null,elements:n}],onItemSelectToggle:A,onItemDrag:N,onClick:L,isItemSelected:P,svgCache:u}),eo(Hd,{itemsRenderedPerBatch:H,items:C,onItemSelectToggle:A,onItemDrag:N,onClick:R,isItemSelected:P,svgCache:u})]}),I.length>0&&eo("div",{className:"library-menu-items-container__header",style:{marginTop:"0.75rem"},children:h("labels.excalidrawLib")}),I.length>0&&eo(Bh,{children:eo(Hd,{itemsRenderedPerBatch:H,items:I,onItemSelectToggle:A,onItemDrag:N,onClick:R,isItemSelected:P,svgCache:u})})]}),U=E&&fn(SI,{children:[fn("div",{className:"library-menu-items-container__header",children:[h("library.search.heading"),!e&&fn("div",{className:"library-menu-items-container__header__hint",style:{cursor:"pointer"},onPointerDown:V=>V.preventDefault(),onClick:V=>{v("")},children:[eo("kbd",{children:"esc"})," to clear"]})]}),w.length>0?eo(Bh,{children:eo(Hd,{itemsRenderedPerBatch:H,items:w,onItemSelectToggle:A,onItemDrag:N,onClick:R,isItemSelected:P,svgCache:u})}):fn("div",{className:"library-menu-items__no-items",children:[eo("div",{className:"library-menu-items__no-items__hint",children:h("library.search.noResults")}),eo(mo,{onPointerDown:V=>V.preventDefault(),onSelect:()=>{v("")},style:{width:"auto",marginTop:"1rem"},children:h("library.search.clearSearch")})]})]});return fn("div",{className:"library-menu-items-container",style:n.length||C.length||I.length?{justifyContent:"flex-start"}:{borderBottom:0},children:[fn("div",{className:"library-menu-items-header",children:[!y&&eo(ji,{ref:K,type:"search",className:cD("library-menu-items-container__search",{hideCancelButton:d.formFactor!=="phone"}),placeholder:h("library.search.inputPlaceholder"),value:x,onChange:V=>v(V)}),eo(bI,{selectedItems:c,onSelectItems:l,className:"library-menu-dropdown-container--in-heading"})]}),fn(co.Col,{className:"library-menu-items-container__items",align:"start",gap:1,style:{flex:I.length>0?1:"0 1 auto",margin:y?"auto":0},ref:p,children:[e&&eo("div",{style:{position:"absolute",top:"var(--container-padding-y)",right:"var(--container-padding-x)",transform:"translateY(50%)"},children:eo(Nt,{})}),F,U,y&&eo(kh,{style:{padding:"16px 0",width:"100%"},id:a,libraryReturnUrl:s,theme:i})]})]})}import{jsx as qi,jsxs as kI}from"react/jsx-runtime";var kl=Ie(!1),II=({children:e})=>qi("div",{className:"layer-ui__library",children:e}),uD=LI(({onInsertLibraryItems:e,pendingElements:t,onAddToLibrary:o,setAppState:r,libraryReturnUrl:n,library:i,id:a,theme:s,selectedItems:l,onSelectItems:c})=>{let[d]=le(gn),p=y0(b=>{(async(x,v)=>{be("element","addToLibrary","ui");for(let E of Nm)if(x.some(w=>w.type===E))return r({errorMessage:h(`errors.libraryElementTypeError.${E}`)});let y=[{status:"unpublished",elements:x,id:No(),created:Date.now()},...v];o(),i.setLibrary(y).catch(()=>{r({errorMessage:h("alerts.errorAddingToLibrary")})})})(b,d.libraryItems)},[o,i,r,d.libraryItems]),m=AI(()=>d.libraryItems,[d]);if(d.status==="loading"&&!d.isInitialized)return qi(II,{children:qi("div",{className:"layer-ui__library-message",children:kI("div",{children:[qi(Nt,{size:"2em"}),qi("span",{children:h("labels.libraryLoadingMessage")})]})})});let u=d.libraryItems.length>0||t.length>0;return kI(II,{children:[qi(x0,{isLoading:d.status==="loading",libraryItems:m,onAddToLibrary:p,onInsertLibraryItems:e,pendingElements:t,id:a,libraryReturnUrl:n,theme:s,onSelectItems:c,selectedItems:l}),u&&qi(kh,{className:"library-menu-control-buttons--at-bottom",style:{padding:"16px 12px 0 12px"},id:a,libraryReturnUrl:n,theme:s})]})}),E0=(e,t)=>({elements:e,pending:ie(e,{selectedElementIds:t},{includeBoundTextElement:!0,includeElementsInFrames:!0}),selectedElementIds:t}),hD=(e,t)=>{let o=Hi(),[r,n]=MI(()=>E0(o,e.selectedElementIds)),i=pD(new Map);return v0(()=>{for(let a of r.pending)i.current.set(a.id,a.version)},[r.pending]),v0(()=>{t.state.cursorButton==="up"&&t.state.activeTool.type==="selection"&&n(a=>{if(!Dt(a.selectedElementIds,e.selectedElementIds))return i.current.clear(),E0(o,e.selectedElementIds);let s=t.scene.getNonDeletedElementsMap();for(let l of Object.keys(e.selectedElementIds)){let c=s.get(l)?.version;if(c&&c!==i.current.get(l))return E0(o,e.selectedElementIds)}return a})},[t,t.state.cursorButton,t.state.activeTool.type,e.selectedElementIds,o]),r.pending},_I=LI(()=>{let e=Ke(),{onInsertElements:t}=e,o=ko(),r=fe(),n=Ce(),[i,a]=MI([]),s=AI(()=>e.library,[e.library]),l=hD(r,e);v0(()=>{let p=e.ownerDocument,m=e.ownerWindow;return Ne(p,"keydown",u=>{if(u.key===S.ESCAPE&&u.target instanceof m.HTMLElement){let b=u.target;if(b.closest(`.${Qe.SIDEBAR}`))i.length>0?(u.stopPropagation(),a([])):b instanceof m.HTMLInputElement&&go(b)&&!b.value&&(u.stopPropagation(),n({openSidebar:null}),e.focusContainer());else if(i.length>0){let{x:f,y:x}=e.viewport.lastPosition;p.elementFromPoint(f,x)?.closest(`.${Qe.SIDEBAR}`)&&(u.stopPropagation(),a([]))}}},{capture:!0})},[i,n,e]);let c=y0(p=>{t(Il(p)),e.focusContainer()},[t,e]),d=y0(()=>{n({selectedElementIds:{},selectedGroupIds:{},activeEmbeddable:null})},[n]);return qi(uD,{pendingElements:l,onInsertLibraryItems:c,onAddToLibrary:d,setAppState:n,libraryReturnUrl:o.libraryReturnUrl,library:s,id:e.id,theme:r.theme,selectedItems:i,onSelectItems:a})});import gD from"clsx";import{useMemo as fD}from"react";import{createPortal as bD}from"react-dom";import{jsx as PI,jsxs as xD}from"react/jsx-runtime";var DI=e=>{let{closeOnClickOutside:t=!0}=e,o=Iu({className:"excalidraw-modal-container"}),r=fD(()=>o?.ownerDocument.body.classList.contains("excalidraw-animations-disabled")??!1,[o]);if(!o)return null;let n=i=>{i.key===S.ESCAPE&&(i.preventDefault(),i.nativeEvent.stopImmediatePropagation(),i.stopPropagation(),e.onCloseRequest())};return bD(xD("div",{className:gD("Modal",e.className,{"animations-disabled":r}),role:"dialog","aria-modal":"true",onKeyDown:n,"aria-labelledby":e.labelledBy,children:[PI("div",{className:"Modal__background",onClick:t?e.onCloseRequest:void 0}),PI("div",{className:"Modal__content",style:{"--max-width":`${e.maxWidth}px`},tabIndex:0,children:e.children})]}),o)};import{jsx as Ud,jsxs as TD}from"react/jsx-runtime";function wD(e){if(e&&typeof e=="number")return e;switch(e){case"small":return 550;case"wide":return 1024;case"regular":default:return 800}}var _t=e=>{let[t,o]=Th(),[r]=vD(document.activeElement),{id:n}=tt(),i=Le().formFactor==="phone";yD(()=>{if(!t)return;let c=vc(t);setTimeout(()=>{c.length>0&&e.autofocus!==!1&&(c[1]||c[0]).focus()});let d=p=>{if(p.key===S.TAB){let m=vc(t),{activeElement:u}=document,b=m.findIndex(f=>f===u);b===0&&p.shiftKey?(m[m.length-1].focus(),p.preventDefault()):b===m.length-1&&!p.shiftKey&&(m[0].focus(),p.preventDefault())}};return t.addEventListener("keydown",d),()=>t.removeEventListener("keydown",d)},[t,e.autofocus]);let a=Ce(),s=nn(kl),l=()=>{a({openMenu:null}),s(!1),r.focus(),e.onCloseRequest()};return Ud(DI,{className:ED("Dialog",e.className,{"Dialog--fullscreen":i}),labelledBy:"dialog-title",maxWidth:wD(e.size),onCloseRequest:l,closeOnClickOutside:e.closeOnClickOutside,children:TD(Ct,{ref:o,children:[e.title&&Ud("h2",{id:`${n}-dialog-title`,className:"Dialog__title",children:Ud("span",{className:"Dialog__titleContent",children:e.title})}),i&&Ud("button",{className:"Dialog__close",onClick:l,title:h("buttons.close"),"aria-label":h("buttons.close"),type:"button",children:qo}),Ud("div",{className:"Dialog__content",children:e.children})]})})};import ea from"clsx";import{useRef as CD}from"react";import{Popover as Qi}from"radix-ui";var Ji=W({name:"viewMode",label:"labels.viewMode",icon:Ya,viewMode:!0,trackEvent:{category:"canvas",predicate:e=>!e.viewModeEnabled},perform(e,t){return{appState:{...t,viewModeEnabled:!this.checked(t)},captureUpdate:O.EVENTUALLY}},checked:e=>e.viewModeEnabled,predicate:(e,t,o,r)=>typeof o.viewModeEnabled>"u"&&r.isInteractionEnabled(),keyTest:e=>!e[S.CTRL_OR_CMD]&&e.altKey&&e.code===ge.R});var Fh=(e,t)=>{let o=t[0]?.type||null;for(let r of t)if(r.type!==o){o=null;break}return Aa(e.activeTool.type)&&o!=="image"&&o!=="frame"&&o!=="magicframe"||t.some(r=>Aa(r.type))},zh=(e,t,o)=>Ii(e.activeTool.type)||t.some(r=>Ii(Si(r,"backgroundColor",o).type)),Hh=(e,t,o,r)=>{let n=e.activeTool.type,i=d=>d(n)||t.some(p=>d(p.type)),a=t.length===1,s=t.length===2&&(Yt(t[0])||Yt(t[1])),l=!!(e.editingTextElement||e.newElement),c=t.length>0;return{hasSelection:c,showExtraActions:c&&!l,strokeColor:Fh(e,t),backgroundColor:zh(e,t,o),fill:n==="bucketfill"||Ma(n)&&!vo(e.currentItemBackgroundColor)||t.some(d=>Ma(d.type)&&!vo(d.backgroundColor)),strokeWidth:i(ew),freedrawMode:i(rw),strokeStyle:i(tw),sloppiness:i(ow),roundness:i(nw),arrowType:i(iw),arrowheads:i(Ac),text:n==="text"||t.some(J),textAlign:n==="text"||Vv(t,o),verticalAlign:Wv(t,o),opacity:n!=="autoshape"||c,layers:n!=="freedraw"&&n!=="autoshape"&&!t.some(d=>d.type==="freedraw")||ie(o,e).some(d=>d.type==="freedraw"),align:!s&&Go(e,r),distribute:t.length>2,link:a||s,linkSingleOnly:a,cropEditor:!e.croppingElementId&&a&&nt(t[0]),lineEditor:!e.selectedLinearElement?.isEditing&&a&&Me(t[0])&&!He(t[0])}};import{Fragment as Er,jsx as ne,jsxs as qe}from"react/jsx-runtime";var w0=ea([Qe.SHAPE_ACTIONS_THEME_SCOPE,"properties-content"]),RI=({renderAction:e})=>qe("fieldset",{children:[ne("legend",{children:h("labels.layers")}),qe("div",{className:"buttonList",children:[e("sendToBack"),e("sendBackward"),e("bringForward"),e("bringToFront")]})]}),NI=({renderAction:e,showDistribute:t})=>{let o=document.documentElement.getAttribute("dir")==="rtl";return qe("fieldset",{children:[ne("legend",{children:h("labels.align")}),qe("div",{className:"buttonList",children:[o?qe(Er,{children:[e("alignRight"),e("alignHorizontallyCentered"),e("alignLeft")]}):qe(Er,{children:[e("alignLeft"),e("alignHorizontallyCentered"),e("alignRight")]}),t&&e("distributeHorizontally"),ne("div",{style:{flexBasis:"100%",height:0}}),qe("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:"-0.5rem"},children:[e("alignTop"),e("alignVerticallyCentered"),e("alignBottom"),t&&e("distributeVertically")]})]})]})},OI=({appState:e,elementsMap:t,renderAction:o,app:r})=>{let n=As(t,e),i=Hh(e,n,t,r);return e.activeTool.type==="bucketfill"?qe("div",{className:"selected-shape-actions",children:[ne("div",{children:o("changeBucketFillBackgroundColor")}),o("changeFillStyle"),o("changeOpacity")]}):qe("div",{className:"selected-shape-actions",children:[ne("div",{children:i.strokeColor&&o("changeStrokeColor")}),i.backgroundColor&&ne("div",{children:o("changeBackgroundColor")}),i.fill&&o("changeFillStyle"),i.strokeWidth&&o("changeStrokeWidth"),i.strokeStyle&&ne(Er,{children:o("changeStrokeStyle")}),i.freedrawMode&&o("changeFreedrawMode"),i.sloppiness&&ne(Er,{children:o("changeSloppiness")}),i.roundness&&ne(Er,{children:o("changeRoundness")}),i.arrowType&&ne(Er,{children:o("changeArrowType")}),i.text&&qe(Er,{children:[ne("fieldset",{children:o("changeFontFamily")}),o("changeFontSize"),i.textAlign&&o("changeTextAlign")]}),i.verticalAlign&&o("changeVerticalAlign"),i.arrowheads&&ne(Er,{children:o("changeArrowhead")}),i.opacity&&o("changeOpacity"),i.layers&&ne(RI,{renderAction:o}),i.align&&ne(NI,{renderAction:o,showDistribute:i.distribute}),i.showExtraActions&&qe("fieldset",{children:[ne("legend",{children:h("labels.actions")}),qe("div",{className:"buttonList",children:[o("duplicateSelection"),o("deleteSelectedElements"),o("group"),o("ungroup"),i.link&&o("hyperlink"),i.cropEditor&&o("cropEditor"),i.lineEditor&&o("toggleLinearEditor")]})]})]})},BI=({appState:e,renderAction:t,setAppState:o,predicates:r,container:n})=>{let i=r.hasSelection||e.activeTool.type!=="selection"&&e.activeTool.type!=="eraser"&&e.activeTool.type!=="hand"&&e.activeTool.type!=="laser"&&e.activeTool.type!=="lasso",a=e.openPopup==="compactStrokeStyles";return i?ne("div",{className:"compact-action-item",children:qe(Qi.Root,{open:a,onOpenChange:s=>{o(s?{openPopup:"compactStrokeStyles"}:{openPopup:null})},children:[ne(Qi.Trigger,{asChild:!0,children:ne("button",{type:"button",className:ea("compact-action-button properties-trigger",{active:a}),title:h("labels.stroke"),onClick:s=>{s.preventDefault(),s.stopPropagation(),o({openPopup:a?null:"compactStrokeStyles"})},children:ax})}),a&&ne(Zn,{className:w0,container:n,style:{maxWidth:"13rem"},onClose:()=>{},children:qe("div",{className:"selected-shape-actions",children:[r.fill&&t("changeFillStyle"),r.strokeWidth&&t("changeStrokeWidth"),r.freedrawMode&&t("changeFreedrawMode"),r.strokeStyle&&ne(Er,{children:t("changeStrokeStyle")}),r.sloppiness&&ne(Er,{children:t("changeSloppiness")}),r.roundness&&t("changeRoundness"),r.opacity&&t("changeOpacity")]})})]})}):null},FI=({appState:e,renderAction:t,setAppState:o,targetElements:r,predicates:n,container:i,app:a})=>{if(!n.arrowType)return null;let s=e.openPopup==="compactArrowProperties";return ne("div",{className:"compact-action-item",children:qe(Qi.Root,{open:s,onOpenChange:l=>{o(l?{openPopup:"compactArrowProperties"}:{openPopup:null})},children:[ne(Qi.Trigger,{asChild:!0,children:ne("button",{type:"button",className:ea("compact-action-button properties-trigger",{active:s}),title:h("labels.arrowtypes"),onClick:l=>{l.preventDefault(),l.stopPropagation(),o({openPopup:s?null:"compactArrowProperties"})},children:(()=>{let l=Qt(r,a,c=>Ee(c)?c.elbowed?"elbow":c.roundness?"round":"sharp":null,c=>Ee(c),c=>c?null:e.currentItemArrowType);return l==="elbow"?Xn:l==="round"?$n:Kn})()})}),s&&ne(Zn,{container:i,className:"properties-content",style:{maxWidth:"13rem"},onClose:()=>{},children:t("changeArrowProperties")})]})})},zI=({appState:e,renderAction:t,setAppState:o,predicates:r,container:n})=>{let{saveCaretPosition:i,restoreCaretPosition:a}=pT(n?.ownerDocument),s=e.openPopup==="compactTextProperties";return ne("div",{className:"compact-action-item",children:qe(Qi.Root,{open:s,onOpenChange:l=>{l?(e.editingTextElement&&i(),o({openPopup:"compactTextProperties"})):(o({openPopup:null}),e.editingTextElement&&a())},children:[ne(Qi.Trigger,{asChild:!0,children:ne("button",{type:"button",className:ea("compact-action-button properties-trigger",{active:s}),title:h("labels.textAlign"),onClick:l=>{l.preventDefault(),l.stopPropagation(),s?o({openPopup:null}):(e.editingTextElement&&i(),o({openPopup:"compactTextProperties"}))},children:Mb})}),e.openPopup==="compactTextProperties"&&ne(Zn,{className:w0,container:n,style:{maxWidth:"13rem"},preventAutoFocusOnTouch:!!e.editingTextElement,onClose:()=>{e.editingTextElement&&a()},children:qe("div",{className:"selected-shape-actions",children:[r.text&&t("changeFontSize"),r.textAlign&&t("changeTextAlign"),r.verticalAlign&&t("changeVerticalAlign")]})})]})})},HI=({appState:e,renderAction:t,predicates:o,setAppState:r,container:n,showDuplicate:i,showDelete:a})=>{let s=e.openPopup==="compactOtherProperties";return o.showExtraActions?ne("div",{className:"compact-action-item",children:qe(Qi.Root,{open:s,onOpenChange:l=>{r(l?{openPopup:"compactOtherProperties"}:{openPopup:null})},children:[ne(Qi.Trigger,{asChild:!0,children:ne("button",{type:"button",className:ea("compact-action-button properties-trigger",{active:s}),title:h("labels.actions"),onClick:l=>{l.preventDefault(),l.stopPropagation(),r({openPopup:s?null:"compactOtherProperties"})},children:Eb})}),s&&ne(Zn,{className:w0,container:n,style:{maxWidth:"12rem",justifyContent:"center",alignItems:"center"},onClose:()=>{},children:qe("div",{className:"selected-shape-actions",children:[o.layers&&ne(RI,{renderAction:t}),o.align&&ne(NI,{renderAction:t,showDistribute:o.distribute}),qe("fieldset",{children:[ne("legend",{children:h("labels.actions")}),qe("div",{className:"buttonList",children:[t("group"),t("ungroup"),o.linkSingleOnly&&t("hyperlink"),o.cropEditor&&t("cropEditor"),i&&t("duplicateSelection"),a&&t("deleteSelectedElements")]})]})]})})]})}):null},SD=({renderAction:e,predicates:t})=>t.lineEditor?ne("div",{className:"compact-action-item",children:e("toggleLinearEditor")}):null,UI=({appState:e,elementsMap:t,renderAction:o,app:r,setAppState:n})=>{let i=As(t,e),a=Hh(e,i,t,r),{container:s}=tt();return qe("div",{className:"compact-shape-actions",children:[a.strokeColor&&ne("div",{className:ea("compact-action-item"),children:o("changeStrokeColor")}),a.backgroundColor&&ne("div",{className:"compact-action-item",children:o(e.activeTool.type==="bucketfill"?"changeBucketFillBackgroundColor":"changeBackgroundColor")}),a.freedrawMode&&ne("div",{className:"compact-action-item",children:o("changeFreedrawMode",{cycle:!0})}),ne(BI,{appState:e,renderAction:o,setAppState:n,predicates:a,container:s}),ne(FI,{appState:e,renderAction:o,setAppState:n,targetElements:i,predicates:a,container:s,app:r}),a.lineEditor&&ne("div",{className:"compact-action-item",children:o("toggleLinearEditor")}),a.text&&qe(Er,{children:[ne("div",{className:"compact-action-item",children:o("changeFontFamily")}),ne(zI,{appState:e,renderAction:o,setAppState:n,predicates:a,container:s})]}),a.showExtraActions&&ne("div",{className:"compact-action-item",children:o("duplicateSelection")}),a.showExtraActions&&ne("div",{className:"compact-action-item",children:o("deleteSelectedElements")}),ne(HI,{appState:e,renderAction:o,predicates:a,setAppState:n,container:s})]})},GI=({appState:e,elementsMap:t,renderAction:o,app:r,setAppState:n})=>{let i=As(t,e),a=Hh(e,i,t,r),{container:s}=tt(),l=CD(null),c=l.current?.getBoundingClientRect()?.width??0,d=9,p=6,m=32,u=d*m+(d-1)*p,b=m+p,f=c>=u+b,x=c>=u+2*b;return qe(Ct,{className:"compact-shape-actions mobile-shape-actions",style:{flexDirection:"row",boxShadow:"none",padding:0,zIndex:2,backgroundColor:"transparent",height:m*1.35,marginBottom:4,alignItems:"center",gap:p,pointerEvents:"none"},ref:l,children:[qe("div",{style:{display:"flex",flexDirection:"row",gap:p,flex:1},children:[a.strokeColor&&ne("div",{className:ea("compact-action-item"),children:o("changeStrokeColor")}),a.backgroundColor&&ne("div",{className:"compact-action-item",children:o(e.activeTool.type==="bucketfill"?"changeBucketFillBackgroundColor":"changeBackgroundColor")}),ne(BI,{appState:e,renderAction:o,setAppState:n,predicates:a,container:s}),ne(FI,{appState:e,renderAction:o,setAppState:n,targetElements:i,predicates:a,container:s,app:r}),ne(SD,{renderAction:o,predicates:a}),a.text&&qe(Er,{children:[ne("div",{className:"compact-action-item",children:o("changeFontFamily")}),ne(zI,{appState:e,renderAction:o,setAppState:n,predicates:a,container:s})]}),ne(HI,{appState:e,renderAction:o,predicates:a,setAppState:n,container:s,showDuplicate:!x,showDelete:!f})]}),qe("div",{style:{display:"flex",flexDirection:"row",gap:p},children:[ne("div",{className:"compact-action-item",children:o("undo")}),ne("div",{className:"compact-action-item",children:o("redo")}),x&&ne("div",{className:"compact-action-item",children:o("duplicateSelection")}),f&&ne("div",{className:"compact-action-item",children:o("deleteSelectedElements")})]})]})},WI=({renderAction:e})=>ne(co.Col,{gap:1,className:Qe.ZOOM_ACTIONS,children:qe(co.Row,{align:"center",children:[e("zoomOut"),e("resetZoom"),e("zoomIn")]})}),VI=({renderAction:e,className:t})=>qe("div",{className:`undo-redo-buttons ${t}`,children:[ne("div",{className:"undo-button-container",children:ne(Mo,{label:h("buttons.undo"),children:e("undo")})}),ne("div",{className:"redo-button-container",children:qe(Mo,{label:h("buttons.redo"),children:[" ",e("redo")]})})]}),YI=({actionManager:e,showExitZenModeBtn:t})=>ne("button",{type:"button",className:ea("disable-zen-mode",{"disable-zen-mode--visible":t}),onClick:()=>e.executeAction(ei),children:h("buttons.exitZenMode")}),KI=({actionManager:e})=>ne("button",{type:"button",className:"disable-view-mode",onClick:()=>e.executeAction(Ji),children:lx});import{useRef as ID}from"react";var T0=e=>{let t=ID({userFn:e});return t.current.userFn=e,t.current.stableFn||(t.current.stableFn=(...o)=>t.current.userFn(...o)),t.current.stableFn};import{jsx as MD,jsxs as kD}from"react/jsx-runtime";var ns=Ie(null),XI=()=>{let[e,t]=le(ns),o=ot();return e&&e==="clearCanvas"?MD(Ah,{onConfirm:()=>{o.executeAction(pn),t(null)},onCancel:()=>t(null),title:h("clearCanvasDialog.title"),children:kD("p",{className:"clear-canvas__content",children:[" ",h("alerts.clearReset")]})}):null};var $I={};import{jsx as to,jsxs as bn}from"react/jsx-runtime";var _D=Ie(null),vt={app:"App",export:"Export",tools:"Tools",editor:"Editor",elements:"Elements",links:"Links",library:"Library"},ZI=e=>{switch(e){case vt.app:return 1;case vt.export:return 2;case vt.editor:return 3;case vt.tools:return 4;case vt.elements:return 5;case vt.links:return 6;default:return 10}},Wh=({shortcut:e,className:t,children:o})=>{let r=e.replace("++","+$").split("+");return bn("div",{className:qI("shortcut",t),children:[r.map((n,i)=>to("div",{className:"shortcut-wrapper",children:to("div",{className:"shortcut-key",children:n==="$"?"+":n})},n)),to("div",{className:"shortcut-desc",children:o})]})},QI=e=>!e.altKey&&e[S.CTRL_OR_CMD]&&(e.shiftKey&&e.key.toLowerCase()===S.P||e.key===S.SLASH),PD=Object.assign(e=>{let t=fe(),o=Ce();return Gh(()=>{let r=n=>{QI(n)&&(n.preventDefault(),n.stopPropagation(),o(i=>{let a=i.openDialog?.name==="commandPalette"?null:{name:"commandPalette"};return a&&be("command_palette","open","shortcut"),{openDialog:a}}))};return window.addEventListener("keydown",r,{capture:!0}),()=>window.removeEventListener("keydown",r,{capture:!0})},[o]),t.openDialog?.name!=="commandPalette"?null:to(DD,{...e})},{defaultItems:$I});function DD({customCommandPaletteItems:e}){let t=Ke(),o=fe(),r=Ce(),n=ko(),i=ot(),[a,s]=le(_D),[l,c]=Uh(null),d=JI(null),p=zi({uiAppState:o,customCommandPaletteItems:e,appProps:n}),[m]=le(gn),u=LD(()=>m.libraryItems?.filter(M=>!!M.name).map(M=>({label:M.name,icon:to(RD,{id:M.id,elements:M.elements}),category:"Library",order:ZI("Library"),haystack:os(M.name),perform:()=>{t.onInsertElements(Il([M]))}}))||[],[t,m.libraryItems]);Gh(()=>{let{uiAppState:M,customCommandPaletteItems:N,appProps:P}=p,L=F=>{let U="";return F.label&&(typeof F.label=="function"?U=h(F.label(t.scene.getNonDeletedElements(),M,t)):U=h(F.label)),U},R=F=>typeof F.icon=="function"?F.icon(M,t.scene.getNonDeletedElements()):F.icon,H=[],K=(F,U,V)=>{let $={label:L(F),icon:R(F),category:U,shortcut:it(F.name),keywords:F.keywords,predicate:F.predicate,viewMode:F.viewMode,perform:()=>{i.executeAction(F,"commandPalette")}};return V?V($,F):$};if(M&&t.scene&&i){let F=[i.actions.group,i.actions.ungroup,i.actions.cut,i.actions.copy,i.actions.deleteSelectedElements,i.actions.wrapSelectionInFrame,i.actions.copyStyles,i.actions.pasteStyles,i.actions.bringToFront,i.actions.bringForward,i.actions.sendBackward,i.actions.sendToBack,i.actions.alignTop,i.actions.alignBottom,i.actions.alignLeft,i.actions.alignRight,i.actions.alignVerticallyCentered,i.actions.alignHorizontallyCentered,i.actions.duplicateSelection,i.actions.flipHorizontal,i.actions.flipVertical,i.actions.zoomToFitSelection,i.actions.zoomToFitSelectionInViewport,i.actions.increaseFontSize,i.actions.decreaseFontSize,i.actions.toggleLinearEditor,i.actions.cropEditor,i.actions.togglePolygon,xl,wh,AS].map(re=>K(re,vt.elements,(ke,G)=>({...ke,predicate:G.predicate?G.predicate:(Z,Re,ve,Ve)=>ie(Z,Re).length>0}))),U=[i.actions.undo,i.actions.redo,i.actions.zoomIn,i.actions.zoomOut,i.actions.resetZoom,i.actions.zoomToFit,i.actions.zenMode,i.actions.viewMode,i.actions.gridMode,i.actions.objectsSnapMode,i.actions.toggleShortcuts,i.actions.selectAll,i.actions.toggleElementLock,i.actions.unlockAllElements,i.actions.stats].map(re=>K(re,vt.editor)),V=[i.actions.saveToActiveFile,i.actions.saveFileToDisk,i.actions.copyAsPng,i.actions.copyAsSvg].map(re=>K(re,vt.export));H=[...F,...U,{label:L(pn),icon:R(pn),shortcut:it(pn.name),category:vt.editor,keywords:["delete","destroy"],viewMode:!1,perform:()=>{yt.set(ns,"clearCanvas")}},{label:h("buttons.exportImage"),category:vt.export,icon:od,shortcut:it("imageExport"),keywords:["export","image","png","jpeg","svg","clipboard","picture"],perform:()=>{r({openDialog:{name:"imageExport"}})}},...V];let $=[K(Qn,vt.app),{label:h("toolBar.library"),category:vt.app,icon:jc,viewMode:!1,perform:()=>{M.openSidebar?r({openSidebar:null}):r({openSidebar:{name:uo.name,tab:uo.defaultTab}})}},{label:h("search.title"),category:vt.app,icon:zo,viewMode:!0,perform:()=>{i.executeAction(Ll)}},{label:h("labels.shapeSwitch"),category:vt.elements,icon:Zs,perform:()=>{i.executeAction(MS)}},{label:h("labels.changeStroke"),keywords:["color","outline"],category:vt.elements,icon:Co,viewMode:!1,predicate:(re,ke)=>{let G=ie(re,ke);return G.length>0&&Fh(ke,G)},perform:()=>{r(re=>({openPopup:"elementStroke"}))}},{label:h("labels.changeBackground"),keywords:["color","fill"],icon:Co,category:vt.elements,viewMode:!1,predicate:(re,ke)=>{let G=ie(re,ke);return G.length>0&&zh(ke,G,te(re))},perform:()=>{r(re=>({openPopup:"elementBackground"}))}},{label:h("labels.canvasBackground"),keywords:["color"],icon:Co,category:vt.editor,viewMode:!1,perform:()=>{r(re=>({openMenu:re.openMenu==="canvas"?null:"canvas",openPopup:"canvasBackground"}))}},...Object.keys(St).reduce((re,ke)=>{let G=St[ke];if(P.UIOptions.tools?.[ke]===!1)return re;let Z=Ku(ke)||G.numericKey,Re={label:h(`toolBar.${ke}`),category:vt.tools,shortcut:Z,icon:G.icon,keywords:["toolbar"],viewMode:!1,perform:()=>{t.setActiveTool({type:ke},{toggle:!1})}};return re.push(Re),re},[]),{label:h("toolBar.lock"),category:vt.tools,icon:M.activeTool.locked?za:Ri,shortcut:S.Q.toLocaleUpperCase(),viewMode:!1,perform:()=>{t.toggleLock()}},{label:`${h("labels.textToDiagram")}...`,category:vt.tools,icon:U1,viewMode:!1,predicate:P.aiEnabled,perform:()=>{r(re=>({...re,openDialog:{name:"ttd",tab:"text-to-diagram"}}))}},{label:`${h("toolBar.mermaidToExcalidraw")}...`,category:vt.tools,icon:Va,viewMode:!1,predicate:P.aiEnabled,perform:()=>{r(re=>({...re,openDialog:{name:"ttd",tab:"mermaid"}}))}}],oe=[...H,...$,...N||[]].map(re=>({...re,icon:re.icon||Zs,order:re.order??ZI(re.category),haystack:`${os(re.label.toLocaleLowerCase())} ${re.keywords?.join(" ")||""}`}));c(oe),s([...oe,...u].find(re=>re.label===a?.label)??null)}},[p,t,i,c,a?.label,s,r,u]);let[b,f]=Uh(""),[x,v]=Uh(null),[y,E]=Uh({}),w=M=>{r({openDialog:null},M),f("")},C=(M,N)=>{o.openDialog?.name==="commandPalette"&&(N.stopPropagation(),N.preventDefault(),document.body.classList.add("excalidraw-animations-disabled"),w(()=>{M.perform({actionManager:i,event:N}),s(M),requestAnimationFrame(()=>{document.body.classList.remove("excalidraw-animations-disabled")})}))},I=T0(M=>M.viewMode===!1&&o.viewModeEnabled?!1:typeof M.predicate=="function"?M.predicate(t.scene.getNonDeletedElements(),o,n,t):M.predicate===void 0||M.predicate),A=T0(M=>{let N=go(M.target)||QI(M)||M.key===S.ESCAPE;if(N&&M.key!==S.ARROW_UP&&M.key!==S.ARROW_DOWN&&M.key!==S.ENTER)return;let P=Object.values(y).flat(),L=a&&!b&&I(a);if(M.key===S.ARROW_UP){M.preventDefault();let R=P.findIndex(F=>F.label===x?.label);if(L){if(R===0){v(a);return}if(x===a){let F=P[P.length-1];F&&v(F);return}}let H;R===-1?H=P.length-1:H=R===0?P.length-1:(R-1)%P.length;let K=P[H];K&&v(K);return}if(M.key===S.ARROW_DOWN){M.preventDefault();let R=P.findIndex(F=>F.label===x?.label);if(L){if(!x||R===P.length-1){v(a);return}if(x===a){let F=P[0];F&&v(F);return}}let H=(R+1)%P.length,K=P[H];K&&v(K);return}if(M.key===S.ENTER&&x&&setTimeout(()=>{C(x,M)}),!N){if(M.stopPropagation(),/^[a-zA-Z0-9]$/.test(M.key)){d?.current?.focus();return}M.preventDefault()}});return Gh(()=>(window.addEventListener("keydown",A,{capture:!0}),()=>window.removeEventListener("keydown",A,{capture:!0})),[A]),Gh(()=>{if(!l)return;let M=R=>{let H={};for(let K of R)H[K.category]?H[K.category].push(K):H[K.category]=[K];return H},N=b?.length>1?[...l.filter(I).sort((R,H)=>R.order-H.order),...u]:l.filter(I).sort((R,H)=>R.order-H.order),P=!b&&a&&I(a);if(!b){E(M(P?N.filter(R=>R.label!==a?.label):N)),v(P?a:N[0]||null);return}let L=os(b.toLocaleLowerCase().replace(/[<>_| -]/g,""));N=AD.filter(L,N,{extract:R=>R.haystack??""}).sort((R,H)=>H.score-R.score).map(R=>R.original),E(M(N)),v(N[0]??null)},[b,l,I,a,u]),bn(_t,{onCloseRequest:()=>w(),closeOnClickOutside:!0,title:!1,size:720,autofocus:!0,className:"command-palette-dialog",children:[to(ji,{value:b,placeholder:h("commandPalette.search.placeholder"),onChange:M=>{f(M)},selectOnRender:!0,ref:d}),t.editorInterface.formFactor!=="phone"&&bn("div",{className:"shortcuts-wrapper",children:[to(Wh,{shortcut:"\u2191\u2193",children:h("commandPalette.shortcuts.select")}),to(Wh,{shortcut:"\u21B5",children:h("commandPalette.shortcuts.confirm")}),to(Wh,{shortcut:z("Esc"),children:h("commandPalette.shortcuts.close")})]}),bn("div",{className:"commands",children:[a&&!b&&bn("div",{className:"command-category",children:[bn("div",{className:"command-category-title",children:[h("commandPalette.recents"),to("div",{className:"icon",style:{marginLeft:"6px"},children:G1})]}),to(jI,{command:a,isSelected:a.label===x?.label,onClick:M=>C(a,M),disabled:!I(a),onMouseMove:()=>v(a),showShortcut:t.editorInterface.formFactor!=="phone",appState:o})]}),Object.keys(y).length>0?Object.keys(y).map((M,N)=>bn("div",{className:"command-category",children:[to("div",{className:"command-category-title",children:M}),y[M].map(P=>to(jI,{command:P,isSelected:P.label===x?.label,onClick:L=>C(P,L),onMouseMove:()=>v(P),showShortcut:t.editorInterface.formFactor!=="phone",appState:o,size:M==="Library"?"large":"small"},P.label))]},M)):l?bn("div",{className:"no-match",children:[to("div",{className:"icon",children:zo})," ",h("commandPalette.search.noMatch")]}):null]})]})}var RD=({id:e,elements:t})=>{let o=JI(null),{svgCache:r}=Cl();return Ch(e,t,r,o),to("div",{className:"library-item-icon",ref:o})},jI=({command:e,isSelected:t,disabled:o,onMouseMove:r,onClick:n,showShortcut:i,appState:a,size:s="small"})=>{let l=()=>{};return bn("div",{className:qI("command-item",{"item-selected":t,"item-disabled":o,"command-item-large":s==="large"}),ref:c=>{t&&!o&&c?.scrollIntoView?.({block:"nearest"})},onClick:o?l:n,onMouseMove:o?l:r,title:o?h("commandPalette.itemNotAvailable"):"",children:[bn("div",{className:"name",children:[e.icon&&to(dn,{className:"icon",size:"var(--icon-size, 1rem)",icon:typeof e.icon=="function"?e.icon(a,[]):e.icon}),to(Xa,{children:e.label})]}),i&&e.shortcut&&to(Wh,{shortcut:e.shortcut})]})};import{jsx as ek}from"react/jsx-runtime";var is=W({name:"toggleLinearEditor",category:vt.elements,label:(e,t,o)=>o.scene.getSelectedElements({selectedElementIds:t.selectedElementIds})[0]?.type==="arrow"?"labels.lineEditor.editArrow":"labels.lineEditor.edit",keywords:["line"],trackEvent:{category:"element"},predicate:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t);return!!(!t.selectedLinearElement?.isEditing&&n.length===1&&Me(n[0])&&!He(n[0]))},perform(e,t,o,r){lt(t.selectedLinearElement,"No selected linear element found");let n=r.scene.getElement(t.selectedLinearElement.elementId);lt(n,"No selected element found");let i={...t.selectedLinearElement,isEditing:!t.selectedLinearElement.isEditing};return{appState:{...t,selectedLinearElement:i},captureUpdate:O.IMMEDIATELY}},PanelComponent:({appState:e,updateData:t,app:o})=>{let r=o.scene.getSelectedElements({selectedElementIds:e.selectedElementIds})[0];if(!r)return null;let n=h(r.type==="arrow"?"labels.lineEditor.editArrow":"labels.lineEditor.edit");return ek(ee,{type:"button",icon:rx,title:n,"aria-label":n,onClick:()=>t(null)})}}),ase=W({name:"togglePolygon",category:vt.elements,icon:Wp,keywords:["loop"],label:(e,t,o)=>!o.scene.getSelectedElements({selectedElementIds:t.selectedElementIds}).some(i=>!ct(i)||!i.polygon)?"labels.polygon.breakPolygon":"labels.polygon.convertToPolygon",trackEvent:{category:"element"},predicate:(e,t,o,r)=>{let n=r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds});return n.length>0&&n.every(i=>ct(i)&&i.points.length>=4)},perform(e,t,o,r){let n=r.scene.getSelectedElements(t);if(n.some(l=>!ct(l)))return!1;let i=n,a=i.some(l=>!l.polygon),s=te(i);return{elements:e.map(l=>!s.has(l.id)||!ct(l)?l:se(l,{backgroundColor:a?l.backgroundColor:"transparent",...xp(l,a)})),appState:t,captureUpdate:O.IMMEDIATELY}},PanelComponent:({appState:e,updateData:t,app:o})=>{let r=o.scene.getSelectedElements({selectedElementIds:e.selectedElementIds});if(r.length===0||r.some(a=>!ct(a)||!a.polygon||a.points.length<3))return null;let n=r.every(a=>ct(a)&&a.polygon),i=h(n?"labels.polygon.breakPolygon":"labels.polygon.convertToPolygon");return ek(ee,{type:"toggle",icon:Wp,title:i,"aria-label":i,checked:n,onSelect:()=>t(null),style:{marginLeft:"auto"}})}});var Ll=W({name:"searchMenu",icon:zo,keywords:["search","find"],label:"search.title",viewMode:!0,trackEvent:{category:"search_menu",action:"toggle",predicate:e=>e.gridModeEnabled},perform(e,t,o,r){if(t.openDialog)return!1;if(t.openSidebar?.name===uo.name&&t.openSidebar.tab===Cn){let n=r.excalidrawContainerValue.container?.querySelector(`.${Qe.SEARCH_MENU_INPUT_WRAPPER} input`);return n?.focus(),n?.select(),!1}return{appState:{...t,openSidebar:{name:uo.name,tab:Cn},openDialog:null},captureUpdate:O.EVENTUALLY}},checked:e=>e.gridModeEnabled,predicate:(e,t,o)=>o.gridModeEnabled===void 0,keyTest:e=>e[S.CTRL_OR_CMD]&&e.key===S.F});import{jsx as ND}from"react/jsx-runtime";var Vh=W({name:"cropEditor",label:"helpDialog.cropStart",icon:gu,viewMode:!0,trackEvent:{category:"menu"},keywords:["image","crop"],perform(e,t,o,r){let n=r.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0})[0];return{appState:{...t,isCropping:!1,croppingElementId:n.id},captureUpdate:O.IMMEDIATELY}},predicate:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t);return!!(!t.croppingElementId&&n.length===1&&nt(n[0]))},PanelComponent:({appState:e,updateData:t,app:o})=>{let r=h("helpDialog.cropStart");return ND(ee,{type:"button",icon:gu,title:r,"aria-label":r,onClick:()=>t(null)})}});var ok=(e,t)=>{let o=t.scene.getSelectedElements(e);return o.length===1&&ae(o[0])},rk=W({name:"selectAllElementsInFrame",label:"labels.selectAllElementsInFrame",trackEvent:{category:"canvas"},perform:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t).at(0)||null;if(ae(n)){let i=cr(me(e),n.id).filter(a=>!(a.type==="text"&&a.containerId));return{elements:e,appState:{...t,selectedElementIds:i.reduce((a,s)=>(a[s.id]=!0,a),{})},captureUpdate:O.IMMEDIATELY}}return{elements:e,appState:t,captureUpdate:O.EVENTUALLY}},predicate:(e,t,o,r)=>ok(t,r)}),nk=W({name:"removeAllElementsFromFrame",label:"labels.removeAllElementsFromFrame",trackEvent:{category:"history"},perform:(e,t,o,r)=>{let n=r.scene.getSelectedElements(t).at(0)||null;return ae(n)?{elements:Sw(e,n),appState:{...t,selectedElementIds:{[n.id]:!0}},captureUpdate:O.IMMEDIATELY}:{elements:e,appState:t,captureUpdate:O.EVENTUALLY}},predicate:(e,t,o,r)=>ok(t,r)}),ule=W({name:"updateFrameRendering",label:"labels.updateFrameRendering",viewMode:!0,trackEvent:{category:"canvas"},perform:(e,t)=>({elements:e,appState:{...t,frameRendering:{...t.frameRendering,enabled:!t.frameRendering.enabled}},captureUpdate:O.EVENTUALLY}),checked:e=>e.frameRendering.enabled}),ik=W({name:"wrapSelectionInFrame",label:"labels.wrapSelectionInFrame",trackEvent:{category:"element"},predicate:(e,t,o,r)=>{let n=ie(e,t);return n.length>0&&!n.some(i=>ae(i))},perform:(e,t,o,r)=>{let n=ie(e,t),i=r.scene.getNonDeletedElementsMap(),[a,s,l,c]=Te(n,i),d=16,p=Cp({x:a-d,y:s-d,width:l-a+d*2,height:c-s+d*2});if(t.editingGroupId){let u=Ye(n,t.editingGroupId);for(let b of u){let f=b.groupIds.indexOf(t.editingGroupId);bo(b,i,{groupIds:b.groupIds.slice(0,f)})}}return{elements:_s([...r.scene.getElementsIncludingDeleted(),p],n,p),appState:{selectedElementIds:{[p.id]:!0}},captureUpdate:O.IMMEDIATELY}}});var _l=class extends zc{applyTo(t,o,r){let[n,i]=this.elements.applyTo(t,r.elements,{excludedProperties:new Set(["version","versionNonce"])}),[a,s]=this.appState.applyTo(o,n);return[n,a,i||s]}static calculate(t,o){return super.calculate(t,o)}static inverse(t){return super.inverse(t)}static applyLatestChanges(t,o,r,n){return super.applyLatestChanges(t,o,r,n)}},as=class{constructor(t=!0,o=!0){this.isUndoStackEmpty=t;this.isRedoStackEmpty=o}},Gd=class e{constructor(t){this.store=t;T(this,"onHistoryChangedEmitter",new sr);T(this,"undoStack",[]);T(this,"redoStack",[])}get isUndoStackEmpty(){return this.undoStack.length===0}get isRedoStackEmpty(){return this.redoStack.length===0}clear(){this.undoStack.length=0,this.redoStack.length=0}record(t){if(t.isEmpty()||t instanceof _l)return;let o=_l.inverse(t);this.undoStack.push(o),o.elements.isEmpty()||(this.redoStack.length=0),this.onHistoryChangedEmitter.trigger(new as(this.isUndoStackEmpty,this.isRedoStackEmpty))}undo(t,o){return this.perform(t,o,()=>e.pop(this.undoStack),r=>e.push(this.redoStack,r))}redo(t,o){return this.perform(t,o,()=>e.pop(this.redoStack),r=>e.push(this.undoStack,r))}perform(t,o,r,n){try{let i=r();if(i===null)return;let a=O.IMMEDIATELY,s=this.store.snapshot,l=t,c=o,d=!1;for(;i;){try{[l,c,d]=i.applyTo(l,c,s);let p=s.elements,m=s.maybeClone(a,l,c),u=qw.create(s,m),b=_l.applyLatestChanges(i,p,l);b.isEmpty()||(this.store.scheduleMicroAction({action:a,change:u,delta:b}),i=b),s=m}finally{n(i)}if(d)break;i=r()}return[l,c]}finally{this.onHistoryChangedEmitter.trigger(new as(this.isUndoStackEmpty,this.isRedoStackEmpty))}}static pop(t){if(!t.length)return null;let o=t.pop();return o!==void 0?o:null}static push(t,o){let r=_l.inverse(o);return t.push(r)}};import{useEffect as OD,useState as BD}from"react";var C0=(e,t)=>{let[o,r]=BD(t);return OD(()=>{let n=e.on(i=>{r(i)});return()=>{n()}},[e]),o};import{jsx as ck}from"react/jsx-runtime";var ak=(e,t,o)=>{if(!t.multiElement&&!t.resizingElement&&!t.editingTextElement&&!t.newElement&&!t.selectedElementsAreBeingDragged&&!t.selectionElement&&!e.flowchart.isCreatingChart&&!e.drawShape.hasPendingGesture()){let r=o();if(!r)return{captureUpdate:O.EVENTUALLY};let[n,i]=r,a=pp(Array.from(n.values()));return{appState:i,elements:a,captureUpdate:O.NEVER}}return{captureUpdate:O.EVENTUALLY}},sk=e=>({name:"undo",label:"buttons.undo",icon:$p,trackEvent:{category:"history"},viewMode:!1,perform:(t,o,r,n)=>ak(n,o,()=>e.undo(te(t),o)),keyTest:t=>t[S.CTRL_OR_CMD]&&Hm(t,S.Z)&&!t.shiftKey,PanelComponent:({appState:t,updateData:o,data:r,app:n})=>{let{isUndoStackEmpty:i}=C0(e.onHistoryChangedEmitter,new as(e.isUndoStackEmpty,e.isRedoStackEmpty)),a=Kt()==="mobile";return ck(ee,{type:"button",icon:$p,"aria-label":h("buttons.undo"),onClick:o,size:r?.size||"medium",disabled:i,"data-testid":"button-undo",style:{...a?Sn:{}}})}}),lk=e=>({name:"redo",label:"buttons.redo",icon:Zp,trackEvent:{category:"history"},viewMode:!1,perform:(t,o,r,n)=>ak(n,o,()=>e.redo(te(t),o)),keyTest:t=>t[S.CTRL_OR_CMD]&&t.shiftKey&&Hm(t,S.Z)||t[S.CTRL_OR_CMD]&&!t.shiftKey&&Hm(t,S.Y),PanelComponent:({appState:t,updateData:o,data:r,app:n})=>{let{isRedoStackEmpty:i}=C0(e.onHistoryChangedEmitter,new as(e.isUndoStackEmpty,e.isRedoStackEmpty)),a=Kt()==="mobile";return ck(ee,{type:"button",icon:Zp,"aria-label":h("buttons.redo"),onClick:o,size:r?.size||"medium",disabled:i,"data-testid":"button-redo",style:{...a?Sn:{}}})}});var S0=W({name:"autoResize",label:"labels.autoResize",icon:null,trackEvent:{category:"element"},predicate:(e,t,o)=>{let r=ie(e,t);return r.length===1&&J(r[0])&&!r[0].autoResize},perform:(e,t,o,r)=>{let n=ie(e,t),i=Ia(o)&&J(o)?o:n[0],a=e.find(d=>d.id===i?.id);if(!a||!J(a))return!1;let s=dt(a.originalText,ut(a),a.lineHeight),l=zw(a),c=se(a,{autoResize:!0,width:s.width,height:s.height,x:a.x+(a.width-s.width)*l.x,y:a.y+(a.height-s.height)*l.y,text:a.originalText});return Fo(c)&&io(c,r.scene,{changedElements:new Map([[c.id,c]])}),{appState:t,elements:e.map(d=>d.id===c.id?c:d),captureUpdate:O.IMMEDIATELY}}});import{jsx as FD}from"react/jsx-runtime";var I0=(e,t,o,r,n,i)=>{if(e.trackEvent)try{typeof e.trackEvent=="object"&&(!e.trackEvent.predicate||e.trackEvent.predicate(o,r,i))&&be(e.trackEvent.category,e.trackEvent.action||e.name,`${t} (${n.editorInterface.formFactor==="phone"?"mobile":"desktop"})`)}catch(a){console.error("error while logging action:",a)}},Yh=class{constructor(t,o,r,n){T(this,"actions",{});T(this,"updater");T(this,"getAppState");T(this,"getElementsIncludingDeleted");T(this,"app");T(this,"isActionBlockedByViewportTransition",t=>t.navigation===!0&&this.app.viewport.isLockedTransitionPending);T(this,"renderAction",(t,o)=>{let r=this.app.props.UIOptions.canvasActions;if(this.actions[t]&&"PanelComponent"in this.actions[t]&&(!(t in r)||r[t])){let n=this.actions[t],i=n.PanelComponent;i.displayName="PanelComponent";let a=s=>{this.isActionBlockedByViewportTransition(n)||(I0(n,"ui",this.getAppState(),this.getElementsIncludingDeleted(),this.app,s),this.updater(n.perform(this.getElementsIncludingDeleted(),this.getAppState(),s,this.app)))};return FD(i,{elements:this.getElementsIncludingDeleted(),appState:this.getAppState(),updateData:a,appProps:this.app.props,app:this.app,data:o,renderAction:this.renderAction})}return null});T(this,"isActionEnabled",t=>{let o=this.getElementsIncludingDeleted(),r=this.getAppState();return!t.predicate||t.predicate(o,r,this.app.props,this.app)});this.updater=i=>{if(vi(i))i.then(a=>t(a));else return t(i)},this.getAppState=o,this.getElementsIncludingDeleted=r,this.app=n}registerAction(t){this.actions[t.name]=t}registerAll(t){t.forEach(o=>this.registerAction(o))}handleKeyDown(t){if(!this.app.isInteractionEnabled()&&!this.app.isNavigationEnabled())return!1;let o=this.app.props.UIOptions.canvasActions,r=Object.values(this.actions).sort((l,c)=>(c.keyPriority||0)-(l.keyPriority||0)).filter(l=>(l.name in o?o[l.name]:!0)&&l.keyTest&&l.keyTest(t,this.getAppState(),this.getElementsIncludingDeleted(),this.app));if(r.length!==1)return r.length>1&&console.warn("Canceling as multiple actions match this shortcut",r),!1;let n=r[0];if(!this.app.isInteractionEnabled()&&n.navigation!==!0||this.getAppState().viewModeEnabled&&n.viewMode!==!0)return!1;if(this.isActionBlockedByViewportTransition(n))return t.preventDefault(),t.stopPropagation(),!0;let i=this.getElementsIncludingDeleted(),a=this.getAppState(),s=null;return I0(n,"keyboard",a,i,this.app,null),t.preventDefault(),t.stopPropagation(),this.updater(r[0].perform(i,a,s,this.app)),!0}executeAction(t,o="api",r=null){if(o!=="api"&&!this.app.isInteractionEnabled()&&!(this.app.isNavigationEnabled()&&t.navigation===!0)||this.isActionBlockedByViewportTransition(t))return;let n=this.getElementsIncludingDeleted(),i=this.getAppState();I0(t,o,i,n,this.app,r),this.updater(t.perform(n,i,r,this.app))}};var k0=e=>{let t=Array.from(e.values());return{x:dk(t,o=>o.x)/t.length,y:dk(t,o=>o.y)/t.length}},M0=([e,t])=>Math.hypot(e.x-t.x,e.y-t.y),dk=(e,t)=>e.reduce((o,r)=>o+t(r),0);var zD=8,mk=99999,Kh=e=>zD/e,Lo=class Lo{};T(Lo,"referenceSnapPoints",null),T(Lo,"visibleGaps",null),T(Lo,"setReferenceSnapPoints",t=>{Lo.referenceSnapPoints=t}),T(Lo,"getReferenceSnapPoints",()=>Lo.referenceSnapPoints),T(Lo,"setVisibleGaps",t=>{Lo.visibleGaps=t}),T(Lo,"getVisibleGaps",()=>Lo.visibleGaps),T(Lo,"destroy",()=>{Lo.referenceSnapPoints=null,Lo.visibleGaps=null});var yr=Lo,ta=e=>e.props.gridModeEnabled??e.state.gridModeEnabled,ri=({event:e,app:t,selectedElements:o})=>{if(e){let r=t.state.activeTool.type==="lasso"&&t.state.selectedElementsAreBeingDragged;return(t.state.activeTool.type!=="lasso"||r)&&(t.state.objectsSnapModeEnabled&&!e[S.CTRL_OR_CMD]||!t.state.objectsSnapModeEnabled&&e[S.CTRL_OR_CMD]&&!ta(t))}return o.length===1&&o[0].type==="arrow"?!1:t.state.objectsSnapModeEnabled},HD=(e,t,o=.01)=>Math.abs(e-t)<=o,Wd=(e,t,{omitCenter:o,boundingBoxCorners:r,dragOffset:n}={omitCenter:!1,boundingBoxCorners:!1})=>{let i=[];if(e.length===1){let a=e[0],[s,l,c,d,p,m]=qt(a,t);n&&(s+=n.x,c+=n.x,p+=n.x,l+=n.y,d+=n.y,m+=n.y);let u=(c-s)/2,b=(d-l)/2;if((a.type==="diamond"||a.type==="ellipse")&&!r){let f=Ae(_(s,l+b),_(p,m),a.angle),x=Ae(_(s+u,l),_(p,m),a.angle),v=Ae(_(c,l+b),_(p,m),a.angle),y=Ae(_(s+u,d),_(p,m),a.angle),E=_(p,m);i=o?[f,x,v,y]:[f,x,v,y,E]}else{let f=Ae(_(s,l),_(p,m),a.angle),x=Ae(_(c,l),_(p,m),a.angle),v=Ae(_(s,d),_(p,m),a.angle),y=Ae(_(c,d),_(p,m),a.angle),E=_(p,m);i=o?[f,x,v,y]:[f,x,v,y,E]}}else if(e.length>1){let[a,s,l,c]=yp(e,n??{x:0,y:0}),d=l-a,p=c-s,m=_(a,s),u=_(l,s),b=_(a,c),f=_(l,c),x=_(a+d/2,s+p/2);i=o?[m,u,b,f]:[m,u,b,f,x]}return i.map(a=>_(It(a[0]),It(a[1])))},hk=(e,t,o,r)=>Wf(e,t,o,r),gk=(e,t,o,r)=>{let n=hk(e,t,o,r),i=Gf(n,r).filter(p=>!(p.length===1&>(p[0]))).map(p=>Te(p).map(m=>It(m))),a=i.sort((p,m)=>p[0]-m[0]),s=[],l=0;e:for(let p=0;p<a.length;p++){let m=a[p];for(let u=p+1;u<a.length;u++){if(++l>mk)break e;let b=a[u],[,f,x,v]=m,[y,E,,w]=b;x<y&&cc($o(f,v),$o(E,w))&&s.push({startBounds:m,endBounds:b,startSide:[_(x,f),_(x,v)],endSide:[_(y,E),_(y,w)],length:y-x,overlap:dc($o(f,v),$o(E,w))})}}let c=i.sort((p,m)=>p[1]-m[1]),d=[];l=0;e:for(let p=0;p<c.length;p++){let m=c[p];for(let u=p+1;u<c.length;u++){if(++l>mk)break e;let b=c[u],[f,,x,v]=m,[y,E,w]=b;v<E&&cc($o(f,x),$o(y,w))&&d.push({startBounds:m,endBounds:b,startSide:[_(f,v),_(x,v)],endSide:[_(y,E),_(w,E)],length:E-v,overlap:dc($o(f,x),$o(y,w))})}}return{horizontalGaps:s,verticalGaps:d}},pk=(e,t,o,r,n,i,a)=>{if(!ri({app:o,event:r,selectedElements:e}))return[];if(e.length===0)return[];let s=yr.getVisibleGaps();if(s){let{horizontalGaps:l,verticalGaps:c}=s,[d,p,m,u]=yp(e,t).map(x=>It(x)),b=(d+m)/2,f=(p+u)/2;for(let x of l){if(!cc($o(p,u),x.overlap))continue;let v=x.startSide[0][0]+x.length/2,y=It(v-b);if(x.length>m-d&&Math.abs(y)<=a.x){Math.abs(y)<a.x&&(n.length=0),a.x=Math.abs(y);let P={type:"gap",direction:"center_horizontal",gap:x,offset:y};n.push(P);continue}let[,,w]=x.endBounds,C=d-w,I=It(x.length-C);if(Math.abs(I)<=a.x){Math.abs(I)<a.x&&(n.length=0),a.x=Math.abs(I);let P={type:"gap",direction:"side_right",gap:x,offset:I};n.push(P);continue}let[A,,,]=x.startBounds,M=A-m,N=It(M-x.length);if(Math.abs(N)<=a.x){Math.abs(N)<a.x&&(n.length=0),a.x=Math.abs(N);let P={type:"gap",direction:"side_left",gap:x,offset:N};n.push(P);continue}}for(let x of c){if(!cc($o(d,m),x.overlap))continue;let v=x.startSide[0][1]+x.length/2,y=It(v-f);if(x.length>u-p&&Math.abs(y)<=a.y){Math.abs(y)<a.y&&(i.length=0),a.y=Math.abs(y);let P={type:"gap",direction:"center_vertical",gap:x,offset:y};i.push(P);continue}let[,w,,]=x.startBounds,C=w-u,I=It(C-x.length);if(Math.abs(I)<=a.y){Math.abs(I)<a.y&&(i.length=0),a.y=Math.abs(I);let P={type:"gap",direction:"side_top",gap:x,offset:I};i.push(P);continue}let[,,,A]=x.endBounds,M=It(p-A),N=x.length-M;if(Math.abs(N)<=a.y){Math.abs(N)<a.y&&(i.length=0),a.y=Math.abs(N);let P={type:"gap",direction:"side_bottom",gap:x,offset:N};i.push(P);continue}}}},fk=(e,t,o,r)=>{let n=hk(e,t,o,r);return Gf(n,r).filter(i=>!(i.length===1&>(i[0]))).flatMap(i=>Wd(i,r))},Pl=(e,t,o,r,n,i,a)=>{if(!ri({app:o,event:r,selectedElements:e})||e.length===0&&t.length===0)return[];let s=yr.getReferenceSnapPoints();if(s)for(let l of t)for(let c of s){let d=c[0]-l[0],p=c[1]-l[1];Math.abs(d)<=a.x&&(Math.abs(d)<a.x&&(n.length=0),n.push({type:"point",points:[l,c],offset:d}),a.x=Math.abs(d)),Math.abs(p)<=a.y&&(Math.abs(p)<a.y&&(i.length=0),i.push({type:"point",points:[l,c],offset:p}),a.y=Math.abs(p))}},bk=(e,t,o,r,n)=>{let i=o.state,a=ie(e,i);if(!ri({app:o,event:r,selectedElements:a})||a.length===0)return{snapOffset:{x:0,y:0},snapLines:[]};t.x=It(t.x),t.y=It(t.y);let s=[],l=[],c=Kh(i.zoom.value),d={x:c,y:c},p=Wd(a,n,{dragOffset:t});Pl(a,p,o,r,s,l,d),pk(a,t,o,r,s,l,d);let m={x:s[0]?.offset??0,y:l[0]?.offset??0};d.x=0,d.y=0,s.length=0,l.length=0;let u={x:It(t.x+m.x),y:It(t.y+m.y)};Pl(a,Wd(a,n,{dragOffset:u}),o,r,s,l,d),pk(a,u,o,r,s,l,d);let b=A0(s,l),f=GD(a,u,[...s,...l].filter(x=>x.type==="gap"));return{snapOffset:m,snapLines:[...b,...f]}},It=e=>Math.round(e*10**6)/10**6,uk=e=>{let t=new Map;for(let o of e){let r=o.join(",");t.has(r)||t.set(r,o)}return Array.from(t.values())},A0=(e,t)=>{let o={},r={};if(e.length>0){for(let n of e)if(n.type==="point"){let i=It(n.points[0][0]);o[i]||(o[i]=[]),o[i].push(...n.points.map(a=>_(It(a[0]),It(a[1]))))}}if(t.length>0){for(let n of t)if(n.type==="point"){let i=It(n.points[0][1]);r[i]||(r[i]=[]),r[i].push(...n.points.map(a=>_(It(a[0]),It(a[1]))))}}return Object.entries(o).map(([n,i])=>({type:"points",points:uk(i.map(a=>_(Number(n),a[1])).sort((a,s)=>a[1]-s[1]))})).concat(Object.entries(r).map(([n,i])=>({type:"points",points:uk(i.map(a=>_(a[0],Number(n))).sort((a,s)=>a[0]-s[0]))})))},UD=e=>{let t=new Map;for(let o of e){let r=o.points.flat().map(n=>[It(n)]).join(",");t.has(r)||t.set(r,o)}return Array.from(t.values())},GD=(e,t,o)=>{let[r,n,i,a]=yp(e,t),s=[];for(let l of o){let[c,d,p,m]=l.gap.startBounds,[u,b,f,x]=l.gap.endBounds,v=dc($o(n,a),l.gap.overlap),y=dc($o(r,i),l.gap.overlap);switch(l.direction){case"center_horizontal":{if(v){let E=(v[0]+v[1])/2;s.push({type:"gap",direction:"horizontal",points:[_(l.gap.startSide[0][0],E),_(r,E)]},{type:"gap",direction:"horizontal",points:[_(i,E),_(l.gap.endSide[0][0],E)]})}break}case"center_vertical":{if(y){let E=(y[0]+y[1])/2;s.push({type:"gap",direction:"vertical",points:[_(E,l.gap.startSide[0][1]),_(E,n)]},{type:"gap",direction:"vertical",points:[_(E,a),_(E,l.gap.endSide[0][1])]})}break}case"side_right":{if(v){let E=(v[0]+v[1])/2;s.push({type:"gap",direction:"horizontal",points:[_(p,E),_(u,E)]},{type:"gap",direction:"horizontal",points:[_(f,E),_(r,E)]})}break}case"side_left":{if(v){let E=(v[0]+v[1])/2;s.push({type:"gap",direction:"horizontal",points:[_(i,E),_(c,E)]},{type:"gap",direction:"horizontal",points:[_(p,E),_(u,E)]})}break}case"side_top":{if(y){let E=(y[0]+y[1])/2;s.push({type:"gap",direction:"vertical",points:[_(E,a),_(E,d)]},{type:"gap",direction:"vertical",points:[_(E,m),_(E,b)]})}break}case"side_bottom":{if(y){let E=(y[0]+y[1])/2;s.push({type:"gap",direction:"vertical",points:[_(E,m),_(E,b)]},{type:"gap",direction:"vertical",points:[_(E,x),_(E,n)]})}break}}}return UD(s.map(l=>({...l,points:l.points.map(c=>_(It(c[0]),It(c[1])))})))},L0=(e,t,o,r,n,i)=>{if(!ri({event:r,selectedElements:e,app:o})||e.length===0||e.length===1&&!HD(e[0].angle,0))return{snapOffset:{x:0,y:0},snapLines:[]};let[a,s,l,c]=Te(t);i&&(i.includes("e")?l+=n.x:i.includes("w")&&(a+=n.x),i.includes("n")?s+=n.y:i.includes("s")&&(c+=n.y));let d=[];if(i)switch(i){case"e":{d.push(_(l,s),_(l,c));break}case"w":{d.push(_(a,s),_(a,c));break}case"n":{d.push(_(a,s),_(l,s));break}case"s":{d.push(_(a,c),_(l,c));break}case"ne":{d.push(_(l,s));break}case"nw":{d.push(_(a,s));break}case"se":{d.push(_(l,c));break}case"sw":{d.push(_(a,c));break}}let p=Kh(o.state.zoom.value),m={x:p,y:p},u=[],b=[];Pl(t,d,o,r,u,b,m);let f={x:u[0]?.offset??0,y:b[0]?.offset??0};m.x=0,m.y=0,u.length=0,b.length=0;let[x,v,y,E]=Te(e).map(I=>It(I)),w=[_(x,v),_(x,E),_(y,v),_(y,E)];Pl(e,w,o,r,u,b,m);let C=A0(u,b);return{snapOffset:f,snapLines:C}},xk=(e,t,o,r,n,i)=>{if(!ri({event:o,selectedElements:[e],app:t}))return{snapOffset:{x:0,y:0},snapLines:[]};let a=[_(r.x+n.x,r.y+n.y)],s=Kh(t.state.zoom.value),l={x:s,y:s},c=[],d=[];Pl([e],a,t,o,c,d,l);let p={x:c[0]?.offset??0,y:d[0]?.offset??0};l.x=0,l.y=0,c.length=0,d.length=0;let m=Wd([e],i,{boundingBoxCorners:!0,omitCenter:!0});Pl([e],m,t,o,c,d,l);let u=A0(c,d);return{snapOffset:p,snapLines:u}},Ek=(e,t,o,r,n)=>{if(!ri({event:r,selectedElements:[],app:t}))return{originOffset:{x:0,y:0},snapLines:[]};let i=Wf(e,[],t.state,n),a=Kh(t.state.zoom.value),s={x:a,y:a},l=[],c=[];for(let d of i){let p=Wd([d],n);for(let m of p){let u=m[0]-o.x;Math.abs(u)<=Math.abs(s.x)&&(Math.abs(u)<Math.abs(s.x)&&(c.length=0),c.push({type:"pointer",points:[m,_(m[0],o.y)],direction:"vertical"}),s.x=u);let b=m[1]-o.y;Math.abs(b)<=Math.abs(s.y)&&(Math.abs(b)<Math.abs(s.y)&&(l.length=0),l.push({type:"pointer",points:[m,_(o.x,m[1])],direction:"horizontal"}),s.y=b)}}return{originOffset:{x:c.length>0?c[0].points[0][0]-o.x:0,y:l.length>0?l[0].points[0][1]-o.y:0},snapLines:[...c,...l]}},yk=e=>e===xt.rectangle||e===xt.ellipse||e===xt.diamond||e===xt.frame||e===xt.magicframe||e===xt.image||e===xt.text;var Vd=class{constructor(t){T(this,"scene");T(this,"_getRenderableElements",xv(({canvasNonce:t,zoom:o,offsetLeft:r,offsetTop:n,scrollX:i,scrollY:a,height:s,width:l,editingTextElement:c,newElement:d})=>{let p=this.scene.getNonDeletedElements(),{elementsMap:m,newElementCanvasElement:u}=this.getRenderableElementsMap({elements:p,editingTextElement:c,newElement:d}),b=this.getVisibleCanvasElements({elementsMap:m,zoom:o,offsetLeft:r,offsetTop:n,scrollX:i,scrollY:a,height:s,width:l});return{elementsMap:m,visibleElements:b,newElementCanvasElement:u,canvasNonce:t}}));T(this,"getRenderableElements",t=>{let{newElement:o}=t,r=`${this.scene.getSceneNonce()}${o?.frameId?`:${o.versionNonce}`:""}`,n=this._getRenderableElements({canvasNonce:r,zoom:t.zoom,offsetLeft:t.offsetLeft,offsetTop:t.offsetTop,scrollX:t.scrollX,scrollY:t.scrollY,height:t.height,width:t.width,editingTextElement:t.editingTextElement,newElement:t.newElement});if(t.frameToHighlight&&t.selectedElementsAreBeingDragged&&Bc(t.selectedElements)!==t.frameToHighlight.id){let i=this.sortSelectedElementsIntoHighlightedFrame({visibleElements:n.visibleElements,selectedElements:t.selectedElements,frameToHighlight:t.frameToHighlight});return{...n,visibleElements:i}}return n});this.scene=t}getVisibleCanvasElements({elementsMap:t,zoom:o,offsetLeft:r,offsetTop:n,scrollX:i,scrollY:a,height:s,width:l}){let c=[];for(let d of t.values())Fc(d,l,s,{zoom:o,offsetLeft:r,offsetTop:n,scrollX:i,scrollY:a},t)&&c.push(d);return c}getRenderableElementsMap({elements:t,editingTextElement:o,newElement:r}){let n=new Map,i=r?.frameId?null:r;for(let a of t)i?.id!==a.id&&(!o||o.type!=="text"||a.id!==o.id)&&n.set(a.id,a);return{elementsMap:n,newElementCanvasElement:i}}sortSelectedElementsIntoHighlightedFrame({visibleElements:t,selectedElements:o,frameToHighlight:r}){if(!o.length)return t;let n=te(o),i=t.filter(s=>!n.has(s.id)),a=hp(i,r.id);return a===null?t:[...i.slice(0,a),...o,...i.slice(a)]}destroy(){N2.cancel(),this._getRenderableElements.clear()}};import{jsx as YD}from"react/jsx-runtime";var WD=5,VD=(e,t,o)=>{let[r,n]=qt(e,o),{x:i,y:a}=Gt({sceneX:r+e.width,sceneY:n},t),s=i-t.offsetLeft+10,l=a-t.offsetTop;return{x:s,y:l}},_0=({children:e,element:t,elementsMap:o})=>{let r=cn();if(r.contextMenu||r.newElement||r.resizingElement||r.isRotating||r.openMenu||r.viewModeEnabled)return null;let{x:n,y:i}=VD(t,r,o);return YD("div",{className:"excalidraw-canvas-buttons",style:{top:`${i}px`,left:`${n}px`,padding:WD},children:e})};import{version as KD}from"react";import{unstable_batchedUpdates as vk}from"react-dom";var wt=e=>t=>{vk(e,t)},Xh=e=>xc(t=>{vk(e,t)}),Dl=(()=>{let e;try{let o=KD.split(".");e=Number(o[0])>17}catch{e=!1}let t=!1;return()=>window.EXCALIDRAW_THROTTLE_RENDER===!0?e?!0:(t||(t=!0,console.warn("Excalidraw: render throttling is disabled on React versions < 18.")),!1):!1})();var Oe=class Oe{static start(t,o){if(Oe.animations.has(t))return;let r={animation:o,lastTime:0,state:void 0};Oe.animations.set(t,r);let n;try{n=o({deltaTime:0,state:void 0})}catch(i){throw Oe.animations.get(t)===r&&(Oe.animations.delete(t),Oe.cancelScheduledFrameIfIdle()),i}if(Oe.animations.get(t)===r){if(!n){Oe.animations.delete(t),Oe.cancelScheduledFrameIfIdle();return}r.state=n,Oe.scheduleNextFrame()}}static scheduleNextFrame(){Oe.scheduledFrame||(Dl()?Oe.scheduledFrame={id:requestAnimationFrame(Oe.tick),type:"raf"}:Oe.scheduledFrame={id:setTimeout(Oe.tick,0),type:"timeout"})}static cancelScheduledFrame(){Oe.scheduledFrame&&(Oe.scheduledFrame.type==="raf"?cancelAnimationFrame(Oe.scheduledFrame.id):clearTimeout(Oe.scheduledFrame.id),Oe.scheduledFrame=null)}static cancelScheduledFrameIfIdle(){return Oe.animations.size>0?!1:(Oe.cancelScheduledFrame(),!0)}static tick(){if(Oe.scheduledFrame=null,Oe.animations.size>0){let t=[...Oe.animations];for(let[o,r]of t){if(Oe.animations.get(o)!==r)continue;let n=performance.now(),i=r.lastTime===0?0:n-r.lastTime,a=r.animation({deltaTime:i,state:r.state});if(Oe.animations.get(o)===r){if(a)r.lastTime=n,r.state=a;else if(Oe.animations.delete(o),Oe.cancelScheduledFrameIfIdle())return}}if(Oe.cancelScheduledFrameIfIdle())return;Oe.scheduleNextFrame()}}static running(t){return Oe.animations.has(t)}static cancel(t){Oe.animations.delete(t),Oe.cancelScheduledFrameIfIdle()}static reset(){Oe.animations.clear(),Oe.cancelScheduledFrame()}};T(Oe,"scheduledFrame",null),T(Oe,"animations",new Map);var Bt=Oe;var $h=class $h{constructor(t,o){this.app=t;this.options=o;T(this,"currentTrail");T(this,"pastTrails",[]);T(this,"container");T(this,"trailElement");T(this,"trailAnimation");T(this,"key");this.key=`animated-trail-${$h.counter++}`,this.trailElement=document.createElementNS(wf,"path"),this.options.animateTrail&&(this.trailAnimation=document.createElementNS(wf,"animate"),this.trailAnimation.setAttribute("attributeName","stroke-dashoffset"),this.trailElement.setAttribute("stroke-dasharray","7 7"),this.trailElement.setAttribute("stroke-dashoffset","10"),this.trailAnimation.setAttribute("from","0"),this.trailAnimation.setAttribute("to","-14"),this.trailAnimation.setAttribute("dur","0.3s"),this.trailElement.appendChild(this.trailAnimation))}get hasCurrentTrail(){return!!this.currentTrail}hasLastPoint(t,o){if(this.currentTrail){let r=this.currentTrail.originalPoints.length;return this.currentTrail.originalPoints[r-1][0]===t&&this.currentTrail.originalPoints[r-1][1]===o}return!1}cleanup(){this.pastTrails=[],this.currentTrail=void 0,this.trailElement.parentNode===this.container&&this.container?.removeChild(this.trailElement)}start(t){t&&(this.container=t),this.trailElement.parentNode!==this.container&&this.container&&this.container.appendChild(this.trailElement),Bt.running(this.key)||Bt.start(this.key,()=>this.onFrame()?{keep:!0}:(this.cleanup(),null))}stop(){Bt.cancel(this.key),this.cleanup()}startPath(t,o){this.currentTrail=new wv(this.options),this.currentTrail.addPoint([t,o,performance.now()]),this.update()}addPointToPath(t,o){this.currentTrail&&(this.currentTrail.addPoint([t,o,performance.now()]),this.update())}endPath(){this.currentTrail&&(this.currentTrail.close(),this.currentTrail.options.keepHead=!1,this.pastTrails.push(this.currentTrail),this.currentTrail=void 0,this.update())}getCurrentTrail(){return this.currentTrail}clearTrails(){this.pastTrails=[],this.currentTrail=void 0,this.update()}update(){this.start(),this.trailAnimation&&(this.trailAnimation.setAttribute("begin","indefinite"),this.trailAnimation.setAttribute("repeatCount","indefinite"))}onFrame(){let t=[];for(let r of this.pastTrails)t.push(this.drawTrail(r,this.app.state));if(this.currentTrail){let r=this.drawTrail(this.currentTrail,this.app.state);t.push(r)}if(this.pastTrails=this.pastTrails.filter(r=>r.getStrokeOutline(r.options.size/this.app.state.zoom.value).length!==0),t.length===0)return this.trailElement.setAttribute("d",""),!1;let o=t.join(" ").trim();return this.trailElement.setAttribute("d",o),this.trailAnimation?(this.trailElement.setAttribute("fill",(this.options.fill??(()=>"black"))(this)),this.trailElement.setAttribute("stroke",(this.options.stroke??(()=>"black"))(this))):this.trailElement.setAttribute("fill",(this.options.fill??(()=>"black"))(this)),!0}drawTrail(t,o){let r=t.getStrokeOutline(t.options.size/o.zoom.value).map(([i,a])=>{let s=Gt({sceneX:i,sceneY:a},o);return[s.x,s.y]}),n=this.trailAnimation?r.slice(0,r.length/2):r;return Ev(n,!0)}};T($h,"counter",0);var Gr=$h;var Zh=class{constructor(t){this.app=t;T(this,"localTrail");T(this,"collabTrails",new Map);T(this,"container");this.localTrail=new Gr(t,{...this.getTrailOptions(),fill:()=>ff})}getTrailOptions(){return{simplify:0,streamline:.4,sizeMapping:t=>{let n=Math.max(0,1-(performance.now()-t.pressure)/1e3),i=(50-Math.min(50,t.totalLength-t.currentIndex))/50;return Math.min(ir(i),ir(n))}}}startPath(t,o){this.localTrail.startPath(t,o)}addPointToPath(t,o){this.localTrail.addPointToPath(t,o)}endPath(){this.localTrail.endPath()}start(t){this.container=t,this.localTrail.start(t)}stop(){this.localTrail.stop(),this.stopCollabTrails(),this.container=void 0}stopCollabTrails(t){for(let[o,r]of this.collabTrails)t?.get(o)||(r.stop(),this.collabTrails.delete(o))}updateCollabTrails(t){if(this.stopCollabTrails(t),!(!this.container||t.size===0))for(let[o,r]of t.entries()){if(r.isCurrentUser)continue;let n=this.collabTrails.get(o);if(n||(n=new Gr(this.app,{...this.getTrailOptions(),fill:()=>r.pointer?.laserColor||Qa(o,r)}),n.start(this.container),this.collabTrails.set(o,n)),r.pointer&&r.pointer.tool==="laser"){let i=r.button==="down",a=r.button==="up",s=n.hasCurrentTrail;i&&!s&&n.startPath(r.pointer.x,r.pointer.y);let l=!n.hasLastPoint(r.pointer.x,r.pointer.y);i&&l&&n.addPointToPath(r.pointer.x,r.pointer.y),a&&s&&(n.addPointToPath(r.pointer.x,r.pointer.y),n.endPath())}}}};var XD=12,P0=16,$D=10,ZD=P0+2,jD=.8,D0=e=>fa*2/e,R0=(e,t,o)=>{let r=D0(t);if(o!=="desktop"||P0>(e.height+r*2)*t*jD)return null;let n=XD/t,i=P0/t,a=_(e.x+e.width/2,e.y+e.height/2),s=Ae(_(a[0]+e.width/2+r+n,a[1]),a,e.angle);return{center:s,start:Ae(_(s[0],s[1]-i/2),s,e.angle),end:Ae(_(s[0],s[1]+i/2),s,e.angle),hitboxWidth:$D/t,hitboxHeight:ZD/t}},wk=(e,t,o,r)=>{let n=R0(t,o,r);if(!n)return!1;let i=Ae(_(e.x,e.y),n.center,-t.angle);return Math.abs(i[0]-n.center[0])<=n.hitboxWidth/2&&Math.abs(i[1]-n.center[1])<=n.hitboxHeight/2};var qD=(e,t,o,r,n,i)=>{let{zoom:a}=r,s=180*o/Math.PI,l=e*(a.value-1)/2,c=t*(a.value-1)/2;return e>n&&a.value!==1&&(l=n*(a.value-1)/2),t>i&&a.value!==1&&(c=i*(a.value-1)/2),`translate(${l}px, ${c}px) scale(${a.value}) rotate(${s}deg)`},JD=(e,t)=>{let o=e.lastIndexOf(`
|
|
6
|
+
`,Math.max(0,t-1))+1,r=e.indexOf(`
|
|
7
|
+
`,t),n=e.slice(o,r===-1?e.length:r);return lv(n)?"rtl":"ltr"},QD=e=>{let t=[0],o=0;for(let r of Array.from(e))o+=r.length,t.push(o);return t},e8=({text:e,font:t,lineHeightPx:o,direction:r,targetX:n,ownerDocument:i})=>{if(!e||!i.body||typeof i.createRange!="function")return null;let a=QD(e),s=i.createElement("div"),l=i.createTextNode(e),c=i.createRange(),d=[];s.dir=r,Object.assign(s.style,{position:"fixed",top:"0",left:"0",margin:0,padding:0,border:0,opacity:"0",pointerEvents:"none",whiteSpace:"pre",font:t,lineHeight:`${o}px`}),s.append(l),i.body.append(s);try{for(let b of a){c.setStart(l,b),c.setEnd(l,b);let f=c.getBoundingClientRect();if(!Number.isFinite(f.left))return null;d.push(f.left)}}catch{return null}finally{s.remove()}let p=Math.min(...d),m=a[0],u=1/0;for(let b=0;b<a.length;b++){let f=Math.abs(d[b]-p-n);f<u&&(u=f,m=a[b])}return m},Tk=({onChange:e,onSubmit:t,getViewportCoords:o,element:r,canvas:n,excalidrawContainer:i,app:a,autoSelect:s=!0,initialCaretSceneCoords:l=null})=>{let c=i?.ownerDocument??document,d=c.defaultView??window,p=null,m=(G,Z)=>{if(!Z.style.fontFamily||!Z.style.fontSize)return!1;let Re=Z.style.fontFamily.replace(/"/g,"");return wa({fontFamily:G.fontFamily})!==Re||`${G.fontSize}px`!==Z.style.fontSize},u=a.state.theme,b=()=>{u=a.state.theme;let G=a.state,Z=a.scene.getElement(r.id);if(!Z)return;let{textAlign:Re,verticalAlign:ve}=Z,Ve=a.scene.getNonDeletedElementsMap();if(Z&&J(Z)){let Se=Z.x,Ze=Z.y,xe=Nr(Z,a.scene.getNonDeletedElementsMap()),st=Z.width,no=Z.height,Zt=Z.width,er=Z.height;if(xe&&Z.containerId){if(Ee(xe)){let Tn=j.getBoundTextElementPosition(xe,Z,Ve);Se=Tn.x,Ze=Tn.y}if(Zt=Ic(xe,Z),er=ep(xe,Z),et(xe)){let{x:Tn,y:Xr}=Dn(xe,Z,Ve);Se=Tn,Ze=Xr}else{let Tn=m(Z,f),Xr;if(Tn?Xr=wc(xe.id,xe.height):(Xr=Pv[xe.id],Xr||(Xr=wc(xe.id,xe.height))),!Ee(xe)&&no>er){let ua=Is(no,xe.type);a.scene.mutateElement(xe,{height:ua}),io(xe,a.scene);return}else if(!Ee(xe)&&xe.height>Xr.height&&no<er){let ua=Is(no,xe.type);a.scene.mutateElement(xe,{height:ua}),io(xe,a.scene)}else{let{x:ua,y:Tm}=Dn(xe,Z,Ve);Se=ua,Ze=Tm}}}let[pi,wn]=o(Se,Ze);xe?st+=.5:(Zt=(G.width-8-pi)/G.zoom.value,st=Math.min(st,Zt)),no*=1.05;let ui=ut(Z),pa=Gv(Z,xe),wm=(G.height-wn)/G.zoom.value;Object.assign(f.style,{font:ui,lineHeight:Z.lineHeight,width:`${st}px`,height:`${no}px`,left:`${pi}px`,top:`${wn}px`,transform:qD(st,no,pa,G,Zt,wm),textAlign:Re,verticalAlign:ve,color:Ut(Z.strokeColor,G.theme===Q.DARK),opacity:Z.opacity/100,maxHeight:`${wm}px`}),p={angle:pa,font:ui,height:Z.height,lineHeightPx:Cc(Z.fontSize,Z.lineHeight),textAlign:Re,width:Z.width,x:Se,y:Ze},f.scrollTop=0,jr()&&(f.style.fontFamily=wa(Z)),a.scene.mutateElement(Z,{x:Se,y:Ze})}},f=c.createElement("textarea");f.dir="auto",f.tabIndex=0,f.dataset.type="wysiwyg",f.wrap="off",f.classList.add("excalidraw-wysiwyg");let x="pre",v="normal";(gt(r)||!r.autoResize)&&(x="pre-wrap",v="break-word"),Object.assign(f.style,{position:"absolute",display:"inline-block",minHeight:"1em",backfaceVisibility:"hidden",margin:0,padding:0,border:0,outline:0,resize:"none",background:"transparent",overflow:"hidden",zIndex:"var(--zIndex-wysiwyg)",wordBreak:v,whiteSpace:x,overflowWrap:"break-word",boxSizing:"content-box"}),f.value=r.originalText,b();let y=()=>{if(!l||!p)return null;let G=p,Z=_(G.x+G.width/2,G.y+G.height/2),[Re,ve]=Ae(_(l.x,l.y),Z,-G.angle),Ve=Re-G.x,Se=ve-G.y,Ze=Hv(f.value,G.font,x==="pre-wrap"?G.width:1/0),xe=Math.max(0,Math.min(Ze.length-1,Math.floor(Se/G.lineHeightPx))),st=Ze[xe],no=JD(f.value,st.start),Zt=Fv(st.text,G.font),er=G.textAlign==="center"?(G.width-Zt)/2:G.textAlign==="right"?G.width-Zt:0,pi=Ve-er;if(!st.text)return st.start;let wn=e8({text:st.text,font:G.font,lineHeightPx:G.lineHeightPx,direction:no,targetX:pi,ownerDocument:c});return st.start+(wn||0)},E=(()=>{let G=y();return G===null?null:{start:G,end:G}})();e&&(f.onpaste=async G=>{let Z=GC(G),Re=null;if(Z.has(ue.excalidrawClipboard)||Z.has(ue.excalidraw)){G.preventDefault(),Re=await ll(G);try{let Ze=await oh(Re);if(Ze.elements){let xe=kc(Ze.elements);if(xe){let{selectionStart:st,selectionEnd:no,value:Zt}=f;f.value=Zt.slice(0,st)+xe+Zt.slice(no);let er=st+xe.length;f.selectionStart=f.selectionEnd=er,f.dispatchEvent(new Event("input"))}}return}catch{console.warn("failed to parse excalidraw clipboard data")}}Re=Re||await ll(G);let ve=Re.findByType(ue.text);if(!ve)return;let Ve=Tc(ve.value);if(!Ve)return;let Se=Nr(r,a.scene.getNonDeletedElementsMap());if(Se){let Ze=we(Se,a.scene.getNonDeletedElementsMap()),xe=ut({fontSize:et(Se)&&Ze?Ze.fontSize:a.state.currentItemFontSize,fontFamily:et(Se)&&Ze?Ze.fontFamily:a.state.currentItemFontFamily}),st=Ic(Se,Ze),{selectionStart:no,selectionEnd:Zt,value:er}=f,pi=er.slice(0,no)+Ve+er.slice(Zt),wn=Pn(pi,xe,st),ui=Math.min(zv(wn,xe),st);f.style.width=`${ui}px`}},f.oninput=()=>{let G=Tc(f.value);if(f.value!==G){let Z=f.selectionStart;f.value=G,f.selectionStart=Z,f.selectionEnd=Z}e(f.value)}),f.onkeydown=G=>{if(!G.shiftKey&&wd.keyTest(G))G.preventDefault(),a.actionManager.executeAction(wd),b();else if(!G.shiftKey&&Td.keyTest(G))G.preventDefault(),a.actionManager.executeAction(Td),b();else if(!G.shiftKey&&Cd.keyTest(G))G.preventDefault(),a.actionManager.executeAction(Cd),b();else if(Bx.keyTest(G))a.actionManager.executeAction(Bx);else if(Fx.keyTest(G))a.actionManager.executeAction(Fx);else if(G.key===S.ESCAPE)G.preventDefault(),L=!0,R();else if(Ki.keyTest(G))G.preventDefault(),R(),a.actionManager.executeAction(Ki);else if(G.key===S.ENTER&&G[S.CTRL_OR_CMD]){if(G.preventDefault(),G.isComposing||G.keyCode===229)return;L=!0,R()}else if(G.key===S.TAB||G[S.CTRL_OR_CMD]&&(G.code===ge.BRACKET_LEFT||G.code===ge.BRACKET_RIGHT)){if(G.preventDefault(),G.isComposing)return;G.shiftKey||G.code===ge.BRACKET_LEFT?M():A(),f.dispatchEvent(new Event("input"))}};let w=4,C=" ".repeat(w),I=new RegExp(`^ {1,${w}}`),A=()=>{let{selectionStart:G,selectionEnd:Z}=f,Re=N(),ve=f.value;Re.forEach(Ve=>{let Se=ve.slice(0,Ve),Ze=ve.slice(Ve);ve=`${Se}${C}${Ze}`}),f.value=ve,f.selectionStart=G+w,f.selectionEnd=Z+w*Re.length},M=()=>{let{selectionStart:G,selectionEnd:Z}=f,Re=N(),ve=[],Ve=f.value;Re.forEach(Se=>{let Ze=Ve.slice(Se,Se+w).match(I);if(Ze){let xe=Ve.slice(0,Se),st=Ve.slice(Se+Ze[0].length);Ve=`${xe}${st}`,ve.push(Se)}}),f.value=Ve,ve.length&&(G>ve[ve.length-1]?f.selectionStart=Math.max(G-w,ve[ve.length-1]):f.selectionStart=G,f.selectionEnd=Math.max(f.selectionStart,Z-w*ve.length))},N=()=>{let{selectionStart:G,selectionEnd:Z,value:Re}=f,ve=Re.slice(0,G).match(/[^\n]*$/)[0].length;return G=G-ve,Re.slice(G,Z).split(`
|
|
8
|
+
`).reduce((Se,Ze,xe,st)=>Se.concat(xe?Se[xe-1]+st[xe-1].length+1:G),[]).reverse()},P=G=>{G.target instanceof d.HTMLCanvasElement&&(G.preventDefault(),G.stopPropagation())},L=!1,R=()=>{if(re)return;re=!0,H();let G=a.scene.getElement(r.id);if(!G)return;let Z=Nr(G,a.scene.getNonDeletedElementsMap());if(Z){if(f.value.trim()){let Re=Sc(Z);!Re||Re!==r.id?a.scene.mutateElement(Z,{boundElements:(Z.boundElements||[]).concat({type:"text",id:r.id})}):Ee(Z)&&_n(Z)}else a.scene.mutateElement(Z,{boundElements:Z.boundElements?.filter(Re=>!J(Re))});At(G,Z,a.scene)}t({viaKeyboard:L,nextOriginalText:f.value})},H=()=>{f.onblur=null,f.oninput=null,f.onkeydown=null,ke&&ke.disconnect(),d.removeEventListener("resize",b),d.removeEventListener("wheel",P,!0),d.removeEventListener("pointerdown",U),d.removeEventListener("pointerup",K),d.removeEventListener("blur",R),d.removeEventListener("beforeunload",R),$(),V(),oe(),f.remove()},K=G=>{d.removeEventListener("pointerup",K);let Z=G?.target,Re=Z instanceof d.HTMLElement&&Z.classList.contains("properties-trigger"),ve=(Z instanceof d.HTMLElement||Z instanceof d.SVGElement)&&!!Z.closest(".properties-content"),Ve=(Z instanceof d.HTMLElement||Z instanceof d.SVGElement)&&(!!Z.closest(`.${Qe.SHAPE_ACTIONS_MENU}`)||!!Z.closest(".compact-shape-actions-island"));d.setTimeout(()=>{Ve||Re||ve||(f.onblur=R,f.focus(),E&&(f.setSelectionRange(E.start,E.end),E=null))})},F=()=>{f.onblur=null,d.addEventListener("pointerup",K),d.addEventListener("blur",R)},U=G=>{let Z=G?.target;if(G.button===or.WHEEL){Z instanceof d.HTMLTextAreaElement&&(G.preventDefault(),a.handleCanvasPanUsingWheelOrSpaceDrag(G)),F();return}let Re=Z instanceof d.HTMLElement&&Z.classList.contains("properties-trigger"),ve=(Z instanceof d.HTMLElement||Z instanceof d.SVGElement)&&!!Z.closest(".properties-content");(G.target instanceof d.HTMLElement||G.target instanceof d.SVGElement)&&(G.target.closest(`.${Qe.SHAPE_ACTIONS_MENU}, .${Qe.ZOOM_ACTIONS}`)||G.target.closest(".compact-shape-actions-island"))&&!go(G.target)||Re||ve?F():G.target instanceof d.HTMLCanvasElement&&!jr()&&d.requestAnimationFrame(()=>{R()})},V=a.onChangeEmitter.on(G=>{a.state.theme!==u&&b()}),$=a.scene.onUpdate(()=>{b(),!!c.activeElement?.closest(".properties-content")||f.focus()}),oe=a.onScrollChangeEmitter.on(()=>{b()}),re=!1;s&&!E&&f.select(),K();let ke=null;return n&&"ResizeObserver"in d?(ke=new d.ResizeObserver(()=>{b()}),ke.observe(n)):d.addEventListener("resize",b),f.onpointerdown=G=>G.stopPropagation(),d.requestAnimationFrame(()=>{d.addEventListener("pointerdown",U,{capture:!0})}),d.addEventListener("beforeunload",R),i?.querySelector(".excalidraw-textEditorContainer").appendChild(f),R};var ni=4,vr=6,Ck="rgba(0,0,0,0.3)",Sk=(e,t,o,r)=>{if(!e.size)return{horizontal:null,vertical:null};let[n,i,a,s]=Te(e),l=t/r.zoom.value,c=o/r.zoom.value,d={top:parseInt(yc("sat"))||0,bottom:parseInt(yc("sab"))||0,left:parseInt(yc("sal"))||0,right:parseInt(yc("sar"))||0},p=sn().rtl,m=-r.scrollX+d.left,u=-r.scrollY+d.top,b=m+l-d.right,f=u+c-d.bottom,x=Math.min(n,m),v=Math.min(i,u),y=Math.max(a,b),E=Math.max(s,f),w=a-n,C=s-i,I=y-x,A=E-v,M=Math.max(ni*2,d.left+d.right)+vr*2,N=t*(l/I)-M,P=Math.max(ni*2,d.top+d.bottom)+vr*2,L=o*(c/A)-P,R=I>w?I*r.zoom.value/(N+M):t/(N+M),H=A>C?A*r.zoom.value/(L+P):o/(L+P);return{horizontal:m===x&&b===y?null:{x:Math.max(d.left,ni)+vr+(m-x)/I*t,y:o-vr-Math.max(ni,d.bottom),width:N,height:vr,deltaMultiplier:R},vertical:u===v&&f===E?null:{x:p?Math.max(d.left,ni):t-vr-Math.max(d.right,ni),y:Math.max(d.top,ni)+vr+(u-v)/A*o,width:vr,height:L,deltaMultiplier:H}}},N0=(e,t,o)=>{let[r,n]=[e.horizontal,e.vertical].map(a=>a!=null&&a.x<=t&&t<=a.x+a.width&&a.y<=o&&o<=a.y+a.height);return{isOverEither:r||n,isOverHorizontal:r,isOverVertical:n}};var Ik=e=>{let t=["flowchart","graph","sequenceDiagram","classDiagram","stateDiagram","stateDiagram-v2","erDiagram","journey","gantt","pie","quadrantChart","requirementDiagram","gitGraph","C4Context","mindmap","timeline","zenuml","sankey","xychart","block"];return new RegExp(`^(?:%%{.*?}%%[\\s\\n]*)?\\b(?:${t.map(r=>`\\s*${r}(-beta)?`).join("|")})\\b`).test(e.trim())};import{simplify as t8}from"points-on-curve";var Mk=e=>{let{lassoPath:t,elements:o,elementsMap:r,elementsSegments:n,intersectedElements:i,enclosedElements:a,simplifyDistance:s,mode:l="contain"}=e,c=t;s&&(c=t8(t,s));let d=o.filter(f=>!f.locked&&!gt(f));a.clear(),i.clear();let p=t.reduce((f,x)=>[Math.min(f[0],x[0]),Math.min(f[1],x[1]),Math.max(f[2],x[0]),Math.max(f[3],x[1])],[1/0,1/0,-1/0,-1/0]),m=Ey(c),u=[p[0]-1e-4,p[1]-1e-4,p[2]+1e-4,p[3]+1e-4];for(let f of d){let x=Li(f,r),v=o8(f,x,r),y=r8(x,v);if(Ps(p,y)&&!i.has(f.id)&&!a.has(f.id)){if(l==="contain"&&!$f(u,y))continue;let E=n8(f,r,n,v),w=s8(m,E,y,l);l==="contain"?w&&!kk(c,f,r,v)&&a.add(f.id):w?a.add(f.id):kk(c,f,r,v)&&i.add(f.id)}}return{selectedElementIds:l==="contain"?a8([...a],r):[...i,...a]}},o8=(e,t,o)=>{let r=Nn(e,o);if(!r)return null;let n=Li(r,o);return $f(n,t)?null:up(e,r,o)?n:null},r8=(e,t)=>t?[Math.max(e[0],t[0]),Math.max(e[1],t[1]),Math.min(e[2],t[2]),Math.min(e[3],t[3])]:e,n8=(e,t,o,r)=>{let n=o.get(e.id)??[],i=we(e,t),a=i?o.get(i.id):null,s=a?.length?[...n,...a]:n;return r?i8(s,r):s},i8=(e,t)=>{let[o,r,n,i]=t,a=[];for(let[[s,l],[c,d]]of e){let p=c-s,m=d-l,u=0,b=1,f=!0;for(let[x,v]of[[-p,s-o],[p,n-s],[-m,l-r],[m,i-l]]){if(x===0){if(v<0){f=!1;break}continue}let y=v/x;if(x<0){if(y>b){f=!1;break}u=Math.max(u,y)}else{if(y<u){f=!1;break}b=Math.min(b,y)}}f&&a.push(ha(_(s+u*p,l+u*m),_(s+b*p,l+b*m)))}return a},a8=(e,t)=>{if(!e.some(n=>t.get(n)?.groupIds.length))return e;let o=new Map;for(let n of t.values()){let i=n.groupIds.at(-1);if(!i||n.locked||gt(n))continue;let a=o.get(i);a?a.push(n.id):o.set(i,[n.id])}if(!o.size)return e;let r=new Set(e);return e.filter(n=>{let i=t.get(n)?.groupIds.at(-1),a=i?o.get(i):null;return!a||a.every(s=>r.has(s))})},s8=(e,t,o,r)=>{let n=r==="contain"?"every":"some",i=a=>Sm(a,e)||r==="contain"&&c8(a,e);return t.length===0?l8(o)[n](i):t[n](a=>a[n](i))},l8=([e,t,o,r])=>[_(e,t),_(o,t),_(o,r),_(e,r)],c8=(e,t)=>t.some((o,r)=>r>0&&yy(e,ha(t[r-1],o))),kk=(e,t,o,r)=>{let n=e.slice(1).map((s,l)=>ha(e[l],s)).concat([ha(e[e.length-1],e[0])]),i=we(t,o),a=(s,l)=>{let c=Lc(s,o,l,0,!r);return r?c.some(d=>Nw(d,r)):c.length>0};return n.some(s=>a(t,s)||!!i&&a({...i,...Dn(t,i,o)},s))};var qh=class extends Gr{constructor(o){super(o,{animateTrail:!0,streamline:.4,sizeMapping:r=>{let a=Math.max(0,1-(performance.now()-r.pressure)/(1/0)),s=(5e3-Math.min(5e3,r.totalLength-r.currentIndex))/5e3;return Math.min(ir(s),ir(a))},fill:()=>$y(Wc(o.interactiveCanvas),.05),stroke:()=>Wc(o.interactiveCanvas)});T(this,"intersectedElements",new Set);T(this,"enclosedElements",new Set);T(this,"elementsSegments",null);T(this,"canvasTranslate",null);T(this,"keepPreviousSelection",!1);T(this,"selectElementsFromIds",o=>{this.app.setState(r=>{let n=o.reduce((l,c)=>(l[c]=!0,l),{});if(this.keepPreviousSelection)for(let l of Object.keys(r.selectedElementIds))n[l]=!0;for(let[l]of Object.entries(n)){let c=this.app.scene.getNonDeletedElement(l);if(c&&ae(c)){let d=cr(this.app.scene.getNonDeletedElementsMap(),c.id);for(let p of d)delete n[p.id]}}let i=Lt({editingGroupId:r.editingGroupId,selectedElementIds:n},this.app.scene.getNonDeletedElements(),r,this.app),a=[...Object.keys(i.selectedElementIds)],s=[...Object.keys(i.selectedGroupIds)];return{selectedElementIds:i.selectedElementIds,selectedGroupIds:i.selectedGroupIds,selectedLinearElement:a.length===1&&!s.length&&Me(this.app.scene.getNonDeletedElement(a[0]))?new j(this.app.scene.getNonDeletedElement(a[0]),this.app.scene.getNonDeletedElementsMap()):null}})});T(this,"addPointToPath",(o,r,n=!1)=>{super.addPointToPath(o,r),this.keepPreviousSelection=n,this.updateSelection()});T(this,"updateSelection",()=>{let o=super.getCurrentTrail()?.originalPoints?.map(n=>_(n[0],n[1])),r={scrollX:this.app.state.scrollX,scrollY:this.app.state.scrollY,zoom:this.app.state.zoom.value};if(!this.elementsSegments||!Dt(r,this.canvasTranslate??{})){this.canvasTranslate=r,this.elementsSegments=new Map;let n=te(this.app.visibleElements);for(let i of this.app.visibleElements){let a=Ep(i,n);this.elementsSegments.set(i.id,a)}}if(o){let{selectedElementIds:n}=Mk({lassoPath:o,elements:this.app.visibleElements,elementsMap:this.app.scene.getNonDeletedElementsMap(),elementsSegments:this.elementsSegments,intersectedElements:this.intersectedElements,enclosedElements:this.enclosedElements,simplifyDistance:5/this.app.state.zoom.value,mode:this.app.state.boxSelectionMode});this.selectElementsFromIds(n)}})}startPath(o,r,n=!1){this.endPath(),super.startPath(o,r),this.intersectedElements.clear(),this.enclosedElements.clear(),this.keepPreviousSelection=n,this.keepPreviousSelection||this.app.setState({selectedElementIds:{},selectedGroupIds:{},selectedLinearElement:null})}endPath(){super.endPath(),super.clearTrails(),this.intersectedElements.clear(),this.enclosedElements.clear(),this.elementsSegments=null}};var Jh=class extends Gr{constructor(o){super(o,{streamline:.2,size:5,keepHead:!0,sizeMapping:r=>{let a=Math.max(0,1-(performance.now()-r.pressure)/200),s=(10-Math.min(10,r.totalLength-r.currentIndex))/10;return Math.min(ir(s),ir(a))},fill:()=>o.state.theme===Q.LIGHT?"rgba(0, 0, 0, 0.2)":"rgba(255, 255, 255, 0.2)"});T(this,"elementsToErase",new Set);T(this,"groupsToErase",new Set)}startPath(o,r){this.endPath(),super.startPath(o,r),this.elementsToErase.clear()}addPointToPath(o,r,n=!1){return super.addPointToPath(o,r),this.updateElementsToBeErased(n)}updateElementsToBeErased(o){let r=super.getCurrentTrail()?.originalPoints?.map(s=>_(s[0],s[1]))||[];if(r.length<2)return[];let n=ha(r[r.length-1],r[r.length-2]),i=this.app.visibleElements.filter(s=>!s.locked),a=te(i);for(let s of i)if(o&&this.elementsToErase.has(s.id)){if(Ak(n,s,a,this.app.state.zoom.value)){let c=s.groupIds.at(-1);if(this.groupsToErase.has(c)){let d=Ye(this.app.scene.getNonDeletedElementsMap(),c);for(let p of d)this.elementsToErase.delete(p.id);this.groupsToErase.delete(c)}if(gt(s)&&this.elementsToErase.delete(s.containerId),Yt(s)){let d=Sc(s);d&&this.elementsToErase.delete(d)}this.elementsToErase.delete(s.id)}}else if(!o&&!this.elementsToErase.has(s.id)&&Ak(n,s,a,this.app.state.zoom.value)){let c=s.groupIds.at(-1);if(!this.groupsToErase.has(c)){let d=Ye(this.app.scene.getNonDeletedElementsMap(),c);for(let p of d)this.elementsToErase.add(p.id);this.groupsToErase.add(c)}if(Yt(s)){let d=Sc(s);d&&this.elementsToErase.add(d)}gt(s)&&this.elementsToErase.add(s.containerId),this.elementsToErase.add(s.id)}return Array.from(this.elementsToErase)}endPath(){super.endPath(),super.clearTrails(),this.elementsToErase.clear(),this.groupsToErase.clear()}},Ak=(e,t,o,r)=>{let n=e[1],i=Cs(t)?15:t.strokeWidth/2,a=[Math.min(e[0][0],e[1][0])-i,Math.min(e[0][1],e[1][1])-i,Math.max(e[0][0],e[1][0])+i,Math.max(e[0][1],e[1][1])+i],s=Li(t,o),l=[s[0]-i,s[1]-i,s[2]+i,s[3]+i];if(!Ps(a,l))return!1;if(aw(t)&&_c(n,t,o))return!0;if(Cs(t)){let d=Rw(t),p=Dw(t,d,o),m=Math.max(2.25,5/r);for(let b of p)if(hf(b,e)<=m)return!0;let u=xy(...d.map(([b,f])=>_(t.x+b,t.y+f)));return!!Sm(e[0],u)}let c=we(t,o);if(Ee(t)||ct(t)&&!t.polygon){let d=Math.max(t.strokeWidth,t.strokeWidth*2/r),p=Ep(t,o);for(let m of p)if(hf(m,e)<=d)return!0;return!1}return Lc(t,o,e,0,!0).length>0||!!c&&Lc({...c,...Dn(t,c,o)},o,e,0,!0).length>0};var Lk=44,_k=22,Pk=66,Dk=48,Yd=14,Rk=304,Nk=320,O0=5.87,Ok=28,Bk=4,Fk=2,B0=10,zk=10,Hk=8,xn=12,Rl=256,ss=10,F0=4,Nl=xn*2,z0=xn*2,Uk=100,Gk=140,Kd=.35,Wk=xn/2,oa=20,Qh=xn*2,H0=xn,mt={fillStyle:"hachure",fontFamily:bs,fontSize:hi,opacity:100,roughness:1,strokeColor:ba,roundness:null,strokeStyle:"solid",strokeWidth:1,verticalAlign:nr.MIDDLE,locked:!1};var ls=Ky(Uy),d8=e=>e.labels?.length??e.series[0]?.values.length??0,Ol=(e,t)=>{if(!e)return!1;let o=d8(e);return o<2?!1:t==="radar"?o>=3:!0},Vk=(e,t)=>{let o=t<=1?0:Math.min(Pk,(t-1)*_k);return e+o},eg=(e,t)=>{if(e==="line"){let r=Vk(Dk,t);return{slotWidth:r,gap:Yd,chartHeight:Nk,xLabelMaxWidth:r+Yd*3+B0}}let o=Vk(Lk,t);return{slotWidth:o,gap:Yd,chartHeight:Rk,xLabelMaxWidth:o+Yd*3+B0}},Bl=(e,t)=>{let o=(t.slotWidth+t.gap)*e.series[0].values.length+t.gap,r=t.chartHeight+t.gap*2;return{chartWidth:o,chartHeight:r}},Kk=()=>{let e=Rl+z0*2,t=Rl+z0*2;return{chartWidth:e,chartHeight:t}},m8=(e,t,o)=>{let r=Math.abs(e-t);return Math.min(r,o-r)},Fl=(e,t)=>{if(e<=0||ls.length===0)return[];let o=ls.length,r=(t%o+o)%o,n=[r],i=Math.min(e,o),a=new Set(Array.from({length:o},(s,l)=>l).filter(s=>s!==r));for(;n.length<i;){let s=-1,l=-1,c=-1;for(let d of a){let p=n.map(b=>m8(d,b,o)),m=Math.min(...p),u=p.reduce((b,f)=>b+f,0)/p.length;(m>l||m===l&&u>c)&&(s=d,l=m,c=u)}n.push(s),a.delete(s)}return Array.from({length:e},(s,l)=>ls[n[l%n.length]])},zl=e=>{if(ls.length===0)return 0;if(typeof e!="number"||!Number.isFinite(e))return Math.floor(Math.random()*ls.length);let t=e.toString(),o=0;for(let r=0;r<t.length;r++)o=o*31+t.charCodeAt(r)|0;return Math.abs(o)%ls.length},Hl=e=>ls[e],Xk=(e,t)=>{let o=e.flatMap(s=>s.values.map(l=>Math.max(0,l))),r=o.filter(s=>s>0),n=Math.max(1,...o),i=r.length>0?Math.min(...r):1,a=e.length===1&&i>0&&n/i>=Uk;return{renderSteps:!1,normalize:(s,l)=>{let c=Math.max(0,s);return a?Math.log10(c+1)/Math.log10(n+1):c/n}}},p8=e=>/\s/.test(e.trim()),tg=(e,t,o)=>p8(e)?Pn(e,t,o):e,$k=(e,t,o,r,n,i)=>{let a=pt.Excalifont,s=rr.sm,l=wo(a),c=ut({fontFamily:a,fontSize:s}),d=Math.min(Gk,n*(e.length>8?.56:.72)),p=Ss(c,l),m=e.map((f,x)=>{let v=t[x],y=Math.max(0,...f.trim().split(/\s+/).filter(Boolean).map(F=>dt(F,c,l).width)),E=Math.max(p,d,y),w=tg(f,c,E),C=dt(w,c,l),I=Math.cos(v),A=Math.sin(v),M=I>Kd?"left":I<-Kd?"right":"center",N=M==="center"?C.width/2:0,P=Math.abs(I)*N+Math.abs(A)*(C.height/2),L=Nl+P+Wk,R=o+I*(n+L),H=r+A*(n+L),K=A>Kd?xn/3:A<-Kd?-xn/3:0;return ao({backgroundColor:i,...mt,text:w,originalText:f,x:R,y:H+K,fontFamily:a,fontSize:s,lineHeight:l,textAlign:M,verticalAlign:"middle"})}),u=Math.min(...m.map(f=>f.y)),b=Math.max(...m.map(f=>f.y+f.height));return{axisLabels:m,axisLabelTopY:u,axisLabelBottomY:b}},Ul=(e,t,o,r,n,i)=>{if(e.length<=1)return[];let a=pt["Lilita One"],s=rr.lg,l=wo(a),c=ut({fontFamily:a,fontSize:s}),d=e.map((w,C)=>{let I=w.title?.trim()||`Series ${C+1}`,A=tg(I,c,Rl),M=dt(A,c,l),N=oa+H0+M.width;return{label:I,displayLabel:A,color:t[C],width:N,height:M.height}}),p=Math.max(oa/2,...d.map(w=>w.height/2)),m=Math.max(n,r+p+Nl),u=Qh,b=oa*.6,f=d.reduce((w,C)=>w+C.width,0)+Qh*Math.max(0,d.length-1),x=f+u*2,v=p*2+b*2,y=[];y.push(Bo({...mt,backgroundColor:"transparent",type:"rectangle",fillStyle:"solid",strokeColor:ba,x:o-x/2,y:m-v/2,width:x,height:v,roughness:xs.architect,roundness:{type:Pt.PROPORTIONAL_RADIUS}}));let E=o-f/2;return d.forEach(w=>{y.push(Bo({...mt,backgroundColor:w.color,type:"rectangle",x:E,y:m-oa/2,width:oa,height:oa,fillStyle:"solid",strokeColor:w.color,roughness:xs.architect,roundness:{type:Pt.PROPORTIONAL_RADIUS}})),y.push(ao({...mt,text:w.displayLabel,originalText:w.label,autoResize:!1,x:E+oa+H0,y:m,fontFamily:a,fontSize:s,lineHeight:l,textAlign:"left",verticalAlign:"middle"})),E+=w.width+Qh}),y},u8=(e,t,o,r)=>{if(dt(e,o,r).width<=t)return e;let n=e.length;for(;n>1;){let i=`${e.slice(0,n)}...`;if(dt(i,o,r).width<=t)return i;n--}return e[0]?`${e[0]}...`:e},h8=(e,t,o,r)=>{if(dt(e,o,r).width<=t)return{wrapped:!1,text:e};let n=e.trim().split(/\s+/).filter(Boolean);return n.length>1&&!n.some(a=>dt(a,o,r).width>t)&&t>=Ss(o,r)?{wrapped:!0,text:Pn(e,o,t)}:{wrapped:!1,text:u8(e,t,o,r)}},Zk=(e,t,o)=>{let r=Math.abs(Math.cos(o)),n=Math.abs(Math.sin(o));return{width:e*r+t*n,height:e*n+t*r}},Yk=e=>e.includes("..."),g8=(e,t,o,r,n)=>{let i=Math.max(Ok,Math.ceil(Ss(r,n))),a=Math.max(i,Math.floor(t)),s=[];for(let u=a;u>=i;u-=4)s.push(u);s[s.length-1]!==i&&s.push(i);let l=u=>{let b=Yk(u.text),f=u.text.replace(/\.\.\./g,"").replace(/\n/g,"").length,x=u.text.split(`
|
|
9
|
+
`).length;return{ellipsified:b,visibleChars:f,lineCount:x}},c=(u,b)=>{let f=l(u),x=l(b);return f.ellipsified!==x.ellipsified?!f.ellipsified:f.visibleChars!==x.visibleChars?f.visibleChars>x.visibleChars:f.lineCount!==x.lineCount?f.lineCount<x.lineCount:u.rotatedHeight<b.rotatedHeight},d=null,p=null,m=null;for(let u of s){let{wrapped:b,text:f}=h8(e,u,r,n),x=dt(f,r,n),v=Zk(x.width,x.height,O0),y={originalText:e,text:f,metrics:x,rotatedWidth:v.width,rotatedHeight:v.height,wrapped:b},E=v.width-o;if(E<=0){(!d||c(y,d))&&(d=y);continue}(!p||E<p.overflow||E===p.overflow&&c(y,p.spec))&&(p={overflow:E,spec:y}),!Yk(y.text)&&(!m||E<m.overflow||E===m.overflow&&c(y,m.spec))&&(m={overflow:E,spec:y})}return d||(m&&p&&m.overflow<=p.overflow+Hk?m.spec:p.spec)},og=e=>{if(e.type!=="text")return e.y+e.height;let t=Zk(e.width,e.height,e.angle);return e.y+e.height/2+t.height/2},Xd=(e,t,o,r,n)=>{let i=mt.fontFamily,a=rr.sm,s=wo(i),l=ut({fontFamily:i,fontSize:a}),c=Math.max(1,n.slotWidth+n.gap-Bk*2+zk),d=o;return e.labels?.map((p,m)=>{let u=g8(p,n.xLabelMaxWidth,c,l,s),b=t+m*(n.slotWidth+n.gap)+n.gap+n.slotWidth/2,f=d+Fk+(u.rotatedHeight-u.metrics.height)/2;return ao({backgroundColor:r,...mt,text:u.text,originalText:u.wrapped?p:u.text,autoResize:!u.wrapped,x:b,y:f,angle:O0,fontSize:a,lineHeight:s,textAlign:"center",verticalAlign:"top"})})||[]},f8=(e,t,o,r,n,i=Math.max(...e.series[0].values))=>{let a=ao({backgroundColor:r,...mt,x:t-n.gap,y:o-n.gap,text:"0",textAlign:"right"}),s=ao({backgroundColor:r,...mt,x:t-n.gap,y:o-n.chartHeight-a.height/2,text:i.toLocaleString(),textAlign:"right"});return[a,s]},b8=(e,t,o,r,n)=>{let{chartWidth:i,chartHeight:a}=Bl(e,n),s=so({backgroundColor:r,...mt,type:"line",x:t,y:o,width:i,points:[_(0,0),_(i,0)]}),l=so({backgroundColor:r,...mt,type:"line",x:t,y:o,height:a,points:[_(0,0),_(0,-a)]}),c=so({backgroundColor:r,...mt,type:"line",x:t,y:o-n.chartHeight-n.gap,strokeStyle:"dotted",width:i,opacity:ss,points:[_(0,0),_(i,0)]});return[s,l,c]},rg=(e,t,o,r,n,i=Math.max(...e.series[0].values),a)=>{let{chartWidth:s,chartHeight:l}=Bl(e,n),c=e.title?ao({backgroundColor:r,...mt,text:e.title,x:t+s/2,y:o-n.chartHeight-n.gap*2-hi,roundness:null,textAlign:"center",fontSize:rr.xl,fontFamily:pt["Lilita One"]}):null,d=a?Bo({backgroundColor:r,...mt,type:"rectangle",x:t,y:o-l,width:s,height:l,strokeColor:ba,fillStyle:"solid",opacity:6}):null;return[...d?[d]:[],...c?[c]:[],...Xd(e,t,o,r,n),...f8(e,t,o,r,n,i),...b8(e,t,o,r,n)]};var jk=(e,t,o,r)=>{let n=e.series,i=eg("bar",n.length),a=Math.max(1,...n.flatMap(w=>w.values.map(C=>Math.max(0,C)))),s=zl(r),l=Hl(s),c=Fl(n.length,s),d=n.length>1?Math.max(1,Math.floor(i.gap/(n.length+1))):0,p=n.length>1?Math.max(2,(i.slotWidth-d*(n.length-1))/n.length):i.slotWidth,m=n.length*p+d*(n.length-1),u=(i.slotWidth-m)/2,b=n[0].values.flatMap((w,C)=>n.map((I,A)=>{let N=Math.max(0,I.values[C]??0)/a*i.chartHeight,P=n.length>1?c[A]:l;return Bo({backgroundColor:P,...mt,type:"rectangle",fillStyle:n.length>1?"solid":mt.fillStyle,strokeColor:n.length>1?P:mt.strokeColor,x:t+C*(i.slotWidth+i.gap)+i.gap+u+A*(p+d),y:o-N-i.gap,width:p,height:N})})),f=rg(e,t,o,l,i,a,Wt()),x=Xd(e,t,o,l,i),v=Math.max(o+i.gap/2,...x.map(w=>og(w))),{chartWidth:y}=Bl(e,i),E=Ul(n,c,t+y/2,v,o+i.gap*5,l);return[...f,...b,...E]};var qk=(e,t,o,r)=>{let n=e.series,i=eg("line",n.length),a=Math.max(1,...n.flatMap(E=>E.values)),s=zl(r),l=Hl(s),c=Fl(n.length,s),d=n.map((E,w)=>{let C=E.values.map((P,L)=>_(L*(i.slotWidth+i.gap),-(P/a)*i.chartHeight)),I=Math.max(...C.map(P=>P[0])),A=Math.max(...C.map(P=>P[1])),M=Math.min(...C.map(P=>P[0])),N=Math.min(...C.map(P=>P[1]));return so({backgroundColor:"transparent",...mt,type:"line",x:t+i.gap+i.slotWidth/2,y:o-i.gap,height:A-N,width:I-M,strokeColor:c[w],strokeWidth:2,points:C})}),p=n.flatMap((E,w)=>E.values.map((C,I)=>{let A=I*(i.slotWidth+i.gap)+i.gap/2,M=-(C/a)*i.chartHeight+i.gap/2;return Bo({backgroundColor:c[w],...mt,fillStyle:"solid",strokeColor:c[w],strokeWidth:2,type:"ellipse",x:t+A+i.slotWidth/2,y:o+M-i.gap*2,width:i.gap,height:i.gap})})),u=n[0].values.map((E,w)=>Math.max(0,...n.map(C=>C.values[w]??0))).map((E,w)=>{let C=w*(i.slotWidth+i.gap)+i.gap/2,I=E/a*i.chartHeight+i.gap/2+i.gap;return so({backgroundColor:l,...mt,type:"line",x:t+C+i.slotWidth/2+i.gap/2,y:o-I,height:I,strokeStyle:"dotted",opacity:ss,points:[_(0,0),_(0,I)]})}),b=rg(e,t,o,l,i,a,Wt()),f=Xd(e,t,o,l,i),x=Math.max(o+i.gap/2,...f.map(E=>og(E))),{chartWidth:v}=Bl(e,i),y=Ul(n,c,t+v/2,x,o+i.gap*5,l);return[...b,...d,...u,...p,...y]};var Wr=e=>{let t=/^([-+]?)[$\u20AC\u00A3\u00A5\u20A9]?([-+]?)([\d.,]+)[%]?$/.exec(e);return t?parseFloat(`${(t[1]||t[2])+t[3]}`.replace(/,/g,"")):null},x8=(e,t)=>e.slice(1).every(o=>Wr(o[t])!==null),Jk=e=>{let t=e[0].length;if(t>2){let a=e[0].every(p=>Wr(p)===null),s=a?e.slice(1):e;if(s.length<1)return{ok:!1,reason:"No data rows"};if(s.some(p=>p.slice(1).some(m=>Wr(m)===null)))return{ok:!1,reason:"Value is not numeric"};if(t-1>s.length){let p=a?e[0].slice(1).map(b=>b.trim()):null,m=s.map(b=>({title:b[0]?.trim()||null,values:b.slice(1).map(f=>Wr(f))}));return{ok:!0,data:{title:m.length===1?m[0].title:a&&e[0][0].trim()||null,labels:p,series:m}}}let d=e[0].slice(1).map((p,m)=>{let u=m+1,b=`Series ${u}`;return{title:a&&p.trim()||b,values:s.map(f=>Wr(f[u]))}});return{ok:!0,data:{title:a&&e[0][0].trim()||null,labels:s.map(p=>p[0]),series:d}}}if(t===1){if(!x8(e,0))return{ok:!1,reason:"Value is not numeric"};let a=Wr(e[0][0])===null,s=a?e[0][0]:null,l=(a?e.slice(1):e).map(c=>Wr(c[0]));return l.length<2?{ok:!1,reason:"Less than two rows"}:{ok:!0,data:{title:s,labels:null,series:[{title:s,values:l}]}}}let o=Wr(e[0][1])===null,r=o?e.slice(1):e;if(r.length<2)return{ok:!1,reason:"Less than 2 rows"};if(r.some(a=>Wr(a[1])===null))return{ok:!1,reason:"Value is not numeric"};let i=o?e[0][1]:null;return{ok:!0,data:{title:i,labels:r.map(a=>a[0]),series:[{title:i,values:r.map(a=>Wr(a[1]))}]}}},ng=e=>{let t=s=>e.replace(/\r\n?/g,`
|
|
10
10
|
`).split(`
|
|
11
|
-
`).filter(s=>s.trim().length>0).map(s=>s.split(l).map(c=>c.trim())),t=[" ",",",";"].map(l=>{let s=o(l),c=s[0]?.length??0,d=s.length>0&&s.every(p=>p.length===c);return{delimiter:l,parsed:s,numCols:c,isConsistent:d}}),n=(t.find(l=>l.isConsistent&&l.numCols>1)??t.find(l=>l.isConsistent)??t[0]).parsed;if(n.length===0)return{ok:!1,reason:"No values"};let i=n[0].length;return n.every(l=>l.length===i)?F3(n):{ok:!1,reason:"All rows don't have same number of columns"}};var B3=(e,o,t,r)=>{if(!hs(e,"radar"))return null;let n=e.labels??e.series[0].values.map((z,J)=>`Value ${J+1}`),i=e.series,{normalize:a,renderSteps:l}=P3(i,n.length),s=bs(r),c=xs(s),d=fs(i.length,s),{chartWidth:p,chartHeight:m}=_3(),u=o+p/2,b=t-m/2,f=ps/2,x=n.map((z,J)=>-Math.PI/2+Math.PI*2*J/n.length),{axisLabels:v,axisLabelTopY:y,axisLabelBottomY:E}=D3(n,x,u,b,f,c),w=st["Lilita One"],T=Wo.xl,S=po(w),_=ct({fontFamily:w,fontSize:T}),M=e.title?fh(e.title,_,p+us*2):null,N=M?it(M,_,S):null,L=M?Qt({backgroundColor:c,...lt,text:M,originalText:e.title??M,x:o+p/2,y:y-us-N.height/2,fontFamily:w,fontSize:T,lineHeight:S,textAlign:"center"}):null,D=l?Array.from({length:Z0},(z,J)=>{let X=(J+1)/Z0,le=f*X,ce=x.map(F=>A(Math.cos(F)*le,Math.sin(F)*le));return ce.push(A(ce[0][0],ce[0][1])),eo({backgroundColor:"transparent",...lt,type:"line",x:u,y:b,width:le*2,height:le*2,strokeStyle:"solid",roughness:Xa.architect,opacity:Da,polygon:!0,points:ce})}):[],O=x.map(z=>{let J=Math.cos(z)*f,X=Math.sin(z)*f;return eo({backgroundColor:"transparent",...lt,type:"line",x:u,y:b,width:Math.abs(J),height:Math.abs(X),strokeStyle:"solid",roughness:Xa.architect,opacity:Da,points:[A(0,0),A(J,X)]})}),V=i.map((z,J)=>{let X=x.map((le,ce)=>{let F=z.values[ce]??0,W=a(F,ce)*f;return A(Math.cos(le)*W,Math.sin(le)*W)});return X.push(A(X[0][0],X[0][1])),eo({backgroundColor:"transparent",...lt,type:"line",x:u,y:b,width:f*2,height:f*2,strokeColor:d[J],strokeWidth:2,polygon:!0,points:X})}),K=Es(i,d,u,E,t+an*5,c);return[...L?[L]:[],...v,...D,...O,...V,...K]};var q0=(e,o,t,r,n)=>e==="line"?O3(o,t,r,n):e==="radar"?B3(o,t,r,n):N3(o,t,r,n);var yh=class{constructor(o){this.app=o;C(this,"updateHoveredAnchor",o=>{let t=this.app.state.activeTool.type==="text"&&!this.app.state.editingTextElement&&!this.app.state.newElement?this.getAnchorAtPosition(o.x,o.y):null,r=this.app.state.hoveredArrowTextAnchor;return(r?.elementId!==t?.elementId||r?.anchor!==t?.anchor)&&this.app.setState({hoveredArrowTextAnchor:t}),t});C(this,"refresh",()=>{this.app.lastPointerMoveCoords&&this.updateHoveredAnchor(this.app.lastPointerMoveCoords)})}getBindableEndpointAtPosition(o,t){if(!na(this.app.state))return null;let r=zv(A(o,t),this.app.scene.getNonDeletedElements(),this.app.scene.getNonDeletedElementsMap(),this.app.state.zoom);if(!r||this.app.getTextElementAtPosition(o,t))return null;let n=this.app.getElementAtPosition(o,t,{includeLockedElements:!0});return n&&n.id!==r.arrow.id&&this.app.scene.getElementIndex(n.id)>this.app.scene.getElementIndex(r.arrow.id)?null:r}getAnchorAtPosition(o,t){let r=this.getBindableEndpointAtPosition(o,t);if(r)return{elementId:r.arrow.id,anchor:r.startOrEnd};let n=this.app.getTextBindableContainerAtPosition(o,t);return!ve(n)||we(n,this.app.scene.getNonDeletedElementsMap())?null:this.app.getTextWysiwygSnappedToCenterPosition(o,t,this.app.state,n)?{elementId:n.id,anchor:"label"}:null}getTextBinding({arrow:o,startOrEnd:t},r){return Hv(o,t,this.app.scene.getNonDeletedElementsMap(),r)}bindText({arrow:o,startOrEnd:t},r,n){lv(o,r,t,n,this.app.scene)}maybeDragNewText(o,t){return!j(o)||!Uv(o,this.app.scene.getNonDeletedElementsMap())?!1:(Jv({newElement:o,...Gv(o),pointerX:t.x,zoom:this.app.state.zoom.value,scene:this.app.scene}),!0)}};var vh=class{constructor(o){this.app=o;C(this,"pending",null);C(this,"handlePointerDown",o=>{this.pending=o});C(this,"handlePointerUp",()=>{let o=this.pending;this.pending=null,o&&this.fill(o)});C(this,"cancel",()=>{this.pending=null});C(this,"restyle",o=>{let t=qs(this.app.state.currentItemBackgroundColor);o.backgroundColor===t&&o.fillStyle===this.app.state.currentItemFillStyle&&o.opacity===this.app.state.currentItemOpacity||(this.app.scene.mutateElement(o,{backgroundColor:t,fillStyle:this.app.state.currentItemFillStyle,opacity:this.app.state.currentItemOpacity}),qo.delete(o),this.app.scheduleCapture())});C(this,"fill",o=>{let t=qs(this.app.state.currentItemBackgroundColor),r=this.app.scene.getNonDeletedElements(),n=this.app.scene.getNonDeletedElementsMap(),i=A(o.x,o.y),a=this.app.getElementAtPosition(i[0],i[1]),l=Vv({point:i,elements:r,elementsMap:n});if(!l.ok){if(a&&Wv(a)){this.restyle(a);return}l.reason==="too_complex"?this.app.setToast({message:h("bucketfill.tooComplex"),duration:3e3}):(l.reason==="open_region"||l.reason==="too_small"||l.reason==="invalid_polygon")&&this.app.setToast({message:h("bucketfill.noRegion"),duration:3e3});return}if(a&&Yv({hitElement:a,scenePoints:l.scenePoints,elementsMap:n})){this.restyle(a);return}let{width:s,height:c}=ly(l.scenePoints),[d,p]=l.scenePoints[0],m=l.scenePoints.map(y=>A(y[0]-d,y[1]-p)),u=l.ownerId?n.get(l.ownerId):null,b=u?oe(u)?u.id:u.frameId:this.app.getTopLayerFrameAtSceneCoords(o)?.id??null,f=u?u.groupIds:l.boundaryElementIds.map(y=>n.get(y)?.groupIds).filter(y=>!!y).reduce((y,E)=>y===null?E:y.filter(w=>E.includes(w)),null)??[],x=eo({type:"line",x:d,y:p,width:s,height:c,points:m,polygon:!0,strokeColor:"transparent",backgroundColor:t,fillStyle:this.app.state.currentItemFillStyle,strokeWidth:1,strokeStyle:"solid",roughness:0,roundness:null,opacity:this.app.state.currentItemOpacity,frameId:b,groupIds:f}),v=this.app.scene.getElementsIncludingDeleted().findIndex(y=>y.id===l.insertion.elementId);this.app.scene.insertElementsAtIndex([x],v<0?null:l.insertion.placement==="above"?v+1:v),this.app.scheduleCapture()})}};var z3='<svg viewBox="0 0 24 24" stroke-width="1" width="28" height="28" xmlns="http://www.w3.org/2000/svg">',OP='<path d="M6.164 11.755a5.314 5.314 0 0 1-4.932-5.298 5.314 5.314 0 0 1 5.311-5.311 5.314 5.314 0 0 1 5.307 5.113l8.773 8.773a3.322 3.322 0 0 1 0 4.696l-.895.895a3.322 3.322 0 0 1-4.696 0l-8.868-8.868Z" style="fill:#fff"/>',H3='<path stroke="#1b1b1f" fill="#fff" d="m7.868 11.113 7.773 7.774a2.359 2.359 0 0 0 1.667.691 2.368 2.368 0 0 0 2.357-2.358c0-.625-.248-1.225-.69-1.667L11.201 7.78 9.558 9.469l-1.69 1.643v.001Zm10.273 3.606-3.333 3.333m-3.25-6.583 2 2m-7-7 3 3M3.664 3.625l1 1M2.529 6.922l1.407-.144m5.735-2.932-1.118.866M4.285 9.823l.758-1.194m1.863-6.207-.13 1.408"/>',FP=`data:${ge.svg},${encodeURIComponent(`${z3}${H3}</svg>`)}`,BP=`data:${ge.svg},${encodeURIComponent(`${z3}${OP}${H3}</svg>`)}`,wh=class{constructor(o){this.app=o;C(this,"eraserCanvasCache",null);C(this,"eraserPreviewDataURL",null);C(this,"drawShapeCanvasCache",null);C(this,"drawShapePreviewDataURL",null);C(this,"set",o=>{this.canvas&&(this.canvas.style.cursor=o)});C(this,"reset",()=>{this.app.state.viewModeEnabled&&!this.app.isActiveToolPointerCapturing()?this.app.isNavigationEnabled()?this.set(Oe.GRAB):this.clear():this.applyForTool()});C(this,"applyForTool",(o=this.app.state.activeTool)=>{if(this.canvas)if(o.type==="selection")this.clear();else if(vc({activeTool:o}))this.set(Oe.GRAB);else if(Qo({activeTool:o}))this.applyEraser();else if(o.type==="autoshape")this.set(Oe.CROSSHAIR);else if(o.type==="laser"){let t=this.app.state.theme===te.LIGHT?FP:BP;this.set(`url(${t}), auto`)}else if(o.type==="custom"&&o.customType==="comment"){let t=`data:${ge.svg},${encodeURIComponent(`
|
|
11
|
+
`).filter(l=>l.trim().length>0).map(l=>l.split(s).map(c=>c.trim())),o=[" ",",",";"].map(s=>{let l=t(s),c=l[0]?.length??0,d=l.length>0&&l.every(p=>p.length===c);return{delimiter:s,parsed:l,numCols:c,isConsistent:d}}),n=(o.find(s=>s.isConsistent&&s.numCols>1)??o.find(s=>s.isConsistent)??o[0]).parsed;if(n.length===0)return{ok:!1,reason:"No values"};let i=n[0].length;return n.every(s=>s.length===i)?Jk(n):{ok:!1,reason:"All rows don't have same number of columns"}};var Qk=(e,t,o,r)=>{if(!Ol(e,"radar"))return null;let n=e.labels??e.series[0].values.map((F,U)=>`Value ${U+1}`),i=e.series,{normalize:a,renderSteps:s}=Xk(i,n.length),l=zl(r),c=Hl(l),d=Fl(i.length,l),{chartWidth:p,chartHeight:m}=Kk(),u=t+p/2,b=o-m/2,f=Rl/2,x=n.map((F,U)=>-Math.PI/2+Math.PI*2*U/n.length),{axisLabels:v,axisLabelTopY:y,axisLabelBottomY:E}=$k(n,x,u,b,f,c),w=pt["Lilita One"],C=rr.xl,I=wo(w),A=ut({fontFamily:w,fontSize:C}),M=e.title?tg(e.title,A,p+Nl*2):null,N=M?dt(M,A,I):null,P=M?ao({backgroundColor:c,...mt,text:M,originalText:e.title??M,x:t+p/2,y:y-Nl-N.height/2,fontFamily:w,fontSize:C,lineHeight:I,textAlign:"center"}):null,L=s?Array.from({length:F0},(F,U)=>{let V=(U+1)/F0,$=f*V,oe=x.map(re=>_(Math.cos(re)*$,Math.sin(re)*$));return oe.push(_(oe[0][0],oe[0][1])),so({backgroundColor:"transparent",...mt,type:"line",x:u,y:b,width:$*2,height:$*2,strokeStyle:"solid",roughness:xs.architect,opacity:ss,polygon:!0,points:oe})}):[],R=x.map(F=>{let U=Math.cos(F)*f,V=Math.sin(F)*f;return so({backgroundColor:"transparent",...mt,type:"line",x:u,y:b,width:Math.abs(U),height:Math.abs(V),strokeStyle:"solid",roughness:xs.architect,opacity:ss,points:[_(0,0),_(U,V)]})}),H=i.map((F,U)=>{let V=x.map(($,oe)=>{let re=F.values[oe]??0,ke=a(re,oe)*f;return _(Math.cos($)*ke,Math.sin($)*ke)});return V.push(_(V[0][0],V[0][1])),so({backgroundColor:"transparent",...mt,type:"line",x:u,y:b,width:f*2,height:f*2,strokeColor:d[U],strokeWidth:2,polygon:!0,points:V})}),K=Ul(i,d,u,E,o+xn*5,c);return[...P?[P]:[],...v,...L,...R,...H,...K]};var U0=(e,t,o,r,n)=>e==="line"?qk(t,o,r,n):e==="radar"?Qk(t,o,r,n):jk(t,o,r,n);var ig=class{constructor(t){this.app=t;T(this,"updateHoveredAnchor",t=>{let o=this.app.state.activeTool.type==="text"&&!this.app.state.editingTextElement&&!this.app.state.newElement?this.getAnchorAtPosition(t.x,t.y):null,r=this.app.state.hoveredArrowTextAnchor;return(r?.elementId!==o?.elementId||r?.anchor!==o?.anchor)&&this.app.setState({hoveredArrowTextAnchor:o}),o});T(this,"refresh",()=>{this.app.lastPointerMoveCoords&&this.updateHoveredAnchor(this.app.lastPointerMoveCoords)})}getBindableEndpointAtPosition(t,o){if(!_a(this.app.state))return null;let r=Ww(_(t,o),this.app.scene.getNonDeletedElements(),this.app.scene.getNonDeletedElementsMap(),this.app.state.zoom);if(!r||this.app.getTextElementAtPosition(t,o))return null;let n=this.app.getElementAtPosition(t,o,{includeLockedElements:!0});return n&&n.id!==r.arrow.id&&this.app.scene.getElementIndex(n.id)>this.app.scene.getElementIndex(r.arrow.id)?null:r}getAnchorAtPosition(t,o){let r=this.getBindableEndpointAtPosition(t,o);if(r)return{elementId:r.arrow.id,anchor:r.startOrEnd};let n=this.app.getTextBindableContainerAtPosition(t,o);return!Ee(n)||we(n,this.app.scene.getNonDeletedElementsMap())?null:this.app.getTextWysiwygSnappedToCenterPosition(t,o,this.app.state,n)?{elementId:n.id,anchor:"label"}:null}getTextBinding({arrow:t,startOrEnd:o},r){return Vw(t,o,this.app.scene.getNonDeletedElementsMap(),r)}bindText({arrow:t,startOrEnd:o},r,n){mw(t,r,o,n,this.app.scene)}maybeDragNewText(t,o){return!J(t)||!Yw(t,this.app.scene.getNonDeletedElementsMap())?!1:(o2({newElement:t,...Kw(t),pointerX:o.x,zoom:this.app.state.zoom.value,scene:this.app.scene}),!0)}isBoundTextGrabbable(t,o,r){if(!Ee(t)||!sp(_(o,r),t,this.app.scene.getNonDeletedElementsMap()))return!1;let n=this.app.getElementsAtPosition(o,r),i=n.findIndex(a=>a.id===t.id);return i!==-1&&!n.slice(i+1).some(a=>this.app.hitElement(o,r,a,!1))}maybeDragLabel(t,o,r){if(!o.hit.arrowLabel)return!1;if(this.app.cursor.set(Be.GRABBING),t.isDragging||Po(_(o.origin.x,o.origin.y),_(r.x,r.y))>=tr/this.app.state.zoom.value){let n=j.handleBoundTextDragging(t,this.app.scene,r.x,r.y);n&&(o.drag.hasOccurred=!0,this.app.setState({selectedLinearElement:n}))}return!0}getLabelCenter(t){let o=this.app.scene.getNonDeletedElementsMap();if(!Ee(t))return null;let r=we(t,o);if(!r)return null;let{x:n,y:i}=j.getBoundTextElementPosition(t,r,o);return{x:n+r.width/2,y:i+r.height/2}}};var G0=Bm.filter(e=>e!==ho.white),ag=class{constructor(t){this.app=t;T(this,"temporaryEyeDropper",null);T(this,"pending",null);T(this,"handlePointerDown",t=>{this.pending=t});T(this,"handlePointerUp",()=>{let t=this.pending;this.pending=null,t&&this.fill(t)});T(this,"cancel",()=>{this.pending=null});T(this,"cycleBackgroundColor",()=>{let t=this.getBucketFillBackgroundColor(this.app.state.currentItemBackgroundColor),o=G0.indexOf(t),r=G0[(o+1)%G0.length];this.app.actionManager.executeAction(vd,"keyboard",{currentItemBackgroundColor:r})});T(this,"openTemporaryEyeDropper",()=>{if(yt.get(Ho))return;let t={colorPickerType:"elementBackground",keepOpenOnAlt:!0,onSelect:o=>{this.app.actionManager.executeAction(vd,"ui",{currentItemBackgroundColor:o})}};this.temporaryEyeDropper=t,this.app.updateEditorAtom(Ho,t)});T(this,"closeTemporaryEyeDropper",()=>{let t=this.temporaryEyeDropper;this.temporaryEyeDropper=null,t&&yt.get(Ho)===t&&this.app.updateEditorAtom(Ho,null)});T(this,"restyle",t=>{let o=this.getBucketFillBackgroundColor(this.app.state.currentItemBackgroundColor);t.backgroundColor===o&&t.fillStyle===this.app.state.currentItemFillStyle&&t.opacity===this.app.state.currentItemOpacity||(this.app.scene.mutateElement(t,{backgroundColor:o,fillStyle:this.app.state.currentItemFillStyle,opacity:this.app.state.currentItemOpacity}),dr.delete(t),this.app.scheduleCapture())});T(this,"fill",t=>{let o=this.getBucketFillBackgroundColor(this.app.state.currentItemBackgroundColor),r=this.app.scene.getNonDeletedElements(),n=this.app.scene.getNonDeletedElementsMap(),i=_(t.x,t.y),a=this.app.getElementAtPosition(i[0],i[1]),s=$w({point:i,elements:r,elementsMap:n});if(!s.ok){if(a&&Xw(a)){this.restyle(a);return}s.reason==="too_complex"?this.app.setToast({message:h("bucketfill.tooComplex"),duration:3e3}):(s.reason==="open_region"||s.reason==="too_small"||s.reason==="invalid_polygon")&&this.app.setToast({message:h("bucketfill.noRegion"),duration:3e3});return}if(a&&Zw({hitElement:a,scenePoints:s.scenePoints,elementsMap:n})){this.restyle(a);return}let{width:l,height:c}=rv(s.scenePoints),[d,p]=s.scenePoints[0],m=s.scenePoints.map(y=>_(y[0]-d,y[1]-p)),u=s.ownerId?n.get(s.ownerId):null,b=u?ae(u)?u.id:u.frameId:this.app.getTopLayerFrameAtSceneCoords(t)?.id??null,f=u?u.groupIds:s.boundaryElementIds.map(y=>n.get(y)?.groupIds).filter(y=>!!y).reduce((y,E)=>y===null?E:y.filter(w=>E.includes(w)),null)??[],x=so({type:"line",x:d,y:p,width:l,height:c,points:m,polygon:!0,strokeColor:"transparent",backgroundColor:o,fillStyle:this.app.state.currentItemFillStyle,strokeWidth:1,strokeStyle:"solid",roughness:0,roundness:null,opacity:this.app.state.currentItemOpacity,frameId:b,groupIds:f}),v=this.app.scene.getElementsIncludingDeleted().findIndex(y=>y.id===s.insertion.elementId);this.app.scene.insertElementsAtIndex([x],v<0?null:s.insertion.placement==="above"?v+1:v),this.app.scheduleCapture()});T(this,"getBucketFillBackgroundColor",(t,o)=>vo(t)?ho.green[Om]:Ut(t,o===Q.DARK))}};var E8=(e,t,o)=>({x:e.x-t/2,y:e.y-o/2,width:t,height:o}),e3={stickynote:{createElement:(e,t)=>{let o=km,{state:r}=e;return Tp({type:"stickynote",...E8(t,o,o),baseHeight:o,strokeColor:r.currentItemStickynoteStrokeColor,backgroundColor:r.currentItemStickynoteBackgroundColor,fillStyle:r.currentItemFillStyle,strokeWidth:e.getCurrentItemStrokeWidth("stickynote"),strokeStyle:r.currentItemStrokeStyle,roughness:r.currentItemRoughness,opacity:r.currentItemOpacity,roundness:e.getCurrentItemRoundness("stickynote"),locked:!1,frameId:e.getTopLayerFrameAtSceneCoords(t)?.id??null})},onDrop:(e,t)=>{et(t)&&e.startTextEditing({sceneX:t.x+t.width/2,sceneY:t.y+t.height/2,container:t})}}},t3=.5,$d=class{constructor(t){this.app=t;T(this,"preview",null);T(this,"armed",null);T(this,"tool",null);T(this,"type",null);T(this,"isDragging",()=>this.preview!==null);T(this,"handleButtonPointerDown",(t,o)=>{let r=e3[t];return!r||o.button!==0||!this.app.isInteractionEnabled()?!1:(this.cancel(),this.armed={type:t,pointerId:o.pointerId,clientX:o.clientX,clientY:o.clientY},this.tool=r,this.type=t,this.addListeners(),!0)});T(this,"onPointerMove",t=>{if(!this.armed||t.pointerId!==this.armed.pointerId)return;if(!this.preview){if(Math.hypot(t.clientX-this.armed.clientX,t.clientY-this.armed.clientY)<tr)return;be("toolbar",this.armed.type,"drag")}let o=this.tool.createElement(this.app,ze(t,this.app.state)),[r,n]=Ot(o.x,o.y,t[S.CTRL_OR_CMD]?null:this.app.getEffectiveGridSize());this.preview={...o,x:r,y:n},this.app.triggerRender()});T(this,"onPointerUp",t=>{if(!this.armed||t.pointerId!==this.armed.pointerId)return;let{preview:o,tool:r,type:n}=this;if(!o){this.cancel();return}if(this.cancel(),!this.isOverCanvas(t))return;let{app:i}=this;i.insertNewElement(o),i.store.scheduleCapture(),i.setState({selectedElementIds:{[o.id]:!0},selectedGroupIds:{}}),i.setActiveTool({type:i.state.preferredSelectionTool.type},{keepSelection:!0}),be("toolbar",n,"drop"),r.onDrop?.(i,o)});T(this,"onKeyDown",t=>{t.key===S.ESCAPE&&(t.stopPropagation(),this.cancel())});T(this,"cancel",()=>{let t=this.preview!==null;this.armed=null,this.tool=null,this.type=null,this.preview=null,this.removeListeners(),t&&this.app.triggerRender()});T(this,"isOverCanvas",t=>!!(this.app.ownerDocument.elementFromPoint?.(t.clientX,t.clientY)??t.target)?.closest?.(".excalidraw__canvas"));T(this,"addListeners",()=>{let{ownerWindow:t}=this.app;t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp),t.addEventListener("pointercancel",this.cancel),t.addEventListener("blur",this.cancel),t.addEventListener("keydown",this.onKeyDown,!0)});T(this,"removeListeners",()=>{let{ownerWindow:t}=this.app;t.removeEventListener("pointermove",this.onPointerMove),t.removeEventListener("pointerup",this.onPointerUp),t.removeEventListener("pointercancel",this.cancel),t.removeEventListener("blur",this.cancel),t.removeEventListener("keydown",this.onKeyDown,!0)})}};T($d,"isDraggable",t=>t in e3);var o3='<svg viewBox="0 0 24 24" stroke-width="1" width="28" height="28" xmlns="http://www.w3.org/2000/svg">',y8='<path d="M6.164 11.755a5.314 5.314 0 0 1-4.932-5.298 5.314 5.314 0 0 1 5.311-5.311 5.314 5.314 0 0 1 5.307 5.113l8.773 8.773a3.322 3.322 0 0 1 0 4.696l-.895.895a3.322 3.322 0 0 1-4.696 0l-8.868-8.868Z" style="fill:#fff"/>',r3='<path stroke="#1b1b1f" fill="#fff" d="m7.868 11.113 7.773 7.774a2.359 2.359 0 0 0 1.667.691 2.368 2.368 0 0 0 2.357-2.358c0-.625-.248-1.225-.69-1.667L11.201 7.78 9.558 9.469l-1.69 1.643v.001Zm10.273 3.606-3.333 3.333m-3.25-6.583 2 2m-7-7 3 3M3.664 3.625l1 1M2.529 6.922l1.407-.144m5.735-2.932-1.118.866M4.285 9.823l.758-1.194m1.863-6.207-.13 1.408"/>',v8=`data:${ue.svg},${encodeURIComponent(`${o3}${r3}</svg>`)}`,w8=`data:${ue.svg},${encodeURIComponent(`${o3}${y8}${r3}</svg>`)}`,T8=e=>{let t=Xp.map((o,r)=>`<path d="${o}" ${r<2?`fill="${e}"`:""} />`).join("");return`data:${ue.svg},${encodeURIComponent(`<svg viewBox="0 0 24 24" width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke-linecap="round" stroke-linejoin="round"><g stroke="#fff" fill="#fff" stroke-width="5">${t}</g><g stroke="#1b1b1f" stroke-width="1.25">${t}</g></svg>`)}`},sg=class{constructor(t){this.app=t;T(this,"toolCursorMemo",null);T(this,"eraserCanvasCache",null);T(this,"eraserPreviewDataURL",null);T(this,"set",t=>{this.toolCursorMemo=null,this.canvas&&(this.canvas.style.cursor=t)});T(this,"reset",()=>{this.app.state.viewModeEnabled&&!this.app.isActiveToolPointerCapturing()?this.app.isNavigationEnabled()?this.set(Be.GRAB):this.clear():this.applyForTool()});T(this,"applyForTool",(t=this.app.state.activeTool)=>{let o=this.canvas;if(!o)return;let r=t.type==="eraser"||t.type==="laser"||t.type==="bucketfill"?this.app.state.theme:void 0,n=t.type==="bucketfill"?this.app.bucketFill.getBucketFillBackgroundColor(this.app.state.currentItemBackgroundColor,r):void 0,i=this.toolCursorMemo;if(!(i?.canvas===o&&i.type===t.type&&i.bucketFillColor===n&&i.theme===r)){if(t.type==="selection")this.clear();else if(Uc({activeTool:t}))this.set(Be.GRAB);else if(pr({activeTool:t}))this.applyEraser();else if(t.type==="autoshape")this.set(Be.CROSSHAIR);else if(t.type==="bucketfill")this.set(`url(${T8(n)}) 5 18, auto`);else if(t.type==="laser"){let a=this.app.state.theme===Q.LIGHT?v8:w8;this.set(`url(${a}), auto`)}else if(t.type==="custom"&&t.customType==="comment"){let a=`data:${ue.svg},${encodeURIComponent(`
|
|
12
12
|
<svg
|
|
13
13
|
width="24"
|
|
14
14
|
height="24"
|
|
@@ -17,105 +17,74 @@ ${h("hints.firefox_clipboard_write")}`):new Error(h("alerts.couldNotCopyToClipbo
|
|
|
17
17
|
>
|
|
18
18
|
<path
|
|
19
19
|
d="M5.25 18A3.25 3.25 0 0 1 2 14.75v-8.5A3.25 3.25 0 0 1 5.25 3h13.5A3.25 3.25 0 0 1 22 6.25v8.5A3.25 3.25 0 0 1 18.75 18h-5.738L8 21.75a1.25 1.25 0 0 1-1.999-1V18h-.75Zm7.264-1.5h6.236a1.75 1.75 0 0 0 1.75-1.75v-8.5a1.75 1.75 0 0 0-1.75-1.75H5.25A1.75 1.75 0 0 0 3.5 6.25v8.5c0 .966.784 1.75 1.75 1.75h2.249v3.75l5.015-3.75Z"
|
|
20
|
-
fill="${this.app.state.theme===
|
|
20
|
+
fill="${this.app.state.theme===Q.LIGHT?"#000":"#fff"}"
|
|
21
21
|
/>
|
|
22
22
|
</svg>
|
|
23
|
-
`)}`;this.set(`url(${t}) 5 20, auto`)}else["image","custom"].includes(o.type)?o.type!=="image"&&this.set(Oe.AUTO):this.set(Oe.CROSSHAIR)});C(this,"clear",()=>{this.canvas&&(this.canvas.style.cursor="")});C(this,"applyEraser",()=>{let t=this.app.state.theme;if(!this.eraserCanvasCache||this.eraserCanvasCache.theme!==t){let r=t===te.DARK;this.eraserCanvasCache=document.createElement("canvas"),this.eraserCanvasCache.theme=t,this.eraserCanvasCache.height=20,this.eraserCanvasCache.width=20;let n=this.eraserCanvasCache.getContext("2d");n.lineWidth=1,n.beginPath(),n.arc(this.eraserCanvasCache.width/2,this.eraserCanvasCache.height/2,5,0,2*Math.PI),n.fillStyle=r?"#000":"#fff",n.fill(),n.strokeStyle=r?"#fff":"#000",n.stroke(),this.eraserPreviewDataURL=this.eraserCanvasCache.toDataURL(ge.svg)}this.set(`url(${this.eraserPreviewDataURL}) ${20/2} ${20/2}, auto`)})}get canvas(){return this.app.interactiveCanvas}};var Th=class{constructor(o){this.app=o;C(this,"trail");this.trail=new Lr(this.app,{...this.getTrailOptions(),fill:()=>o.state.theme===te.LIGHT?"rgba(0, 0, 0, 0.2)":"rgba(255, 255, 255, 0.2)"})}getTrailOptions(){return{simplify:0,streamline:.4,size:1,sizeMapping:()=>$e(Br("line",this.app.state.currentItemStrokeWidthKey)*.65*this.app.state.zoom.value,1.25,4)}}startPath(o,t){this.trail.startPath(o,t)}addPointToPath(o,t){this.trail.addPointToPath(o,t)}endPath(){this.trail.endPath()}clearTrails(){this.trail.clearTrails()}getCurrentPoints(){let o=this.trail.getCurrentTrail();return o?o.originalPoints.map(([t,r])=>A(t,r)):[]}start(o){this.trail.start(o)}stop(){this.trail.stop()}};var Ch=class{constructor(o){this.app=o;C(this,"trail");C(this,"gestureInProgress",!1);C(this,"stop",()=>{this.trail.stop()});C(this,"hasPendingGesture",()=>this.gestureInProgress);C(this,"handlePointerDown",o=>{this.gestureInProgress&&this.app.actionManager.executeAction(Gt),this.gestureInProgress=!0,this.trail.startPath(o.lastCoords.x,o.lastCoords.y)});C(this,"handlePointerMove",o=>Cw(this.app,o));C(this,"bindRecognizedArrow",o=>{let{app:t}=this,r=t.scene.getNonDeletedElementsMap(),n=t.scene.getNonDeletedElements(),i=si(t.state.zoom),a=["start","end"].map(d=>{let p=Z.getPointAtIndexGlobalCoordinates(o,d==="start"?0:-1,r);return{startOrEnd:d,globalPoint:p,target:$o(p,n,r,i)}}),l=!!a[0].target&&a[0].target===a[1].target,s=t.state.isMidpointSnappingEnabled&&!t.state.gridModeEnabled;for(let{startOrEnd:d,globalPoint:p,target:m}of a)m&&gc(o,m,l?"inside":"orbit",d,t.scene,p,t.state.isBindingEnabled,s);if(l)return;let c=new Map;for(let{startOrEnd:d,target:p}of a){if(!p)continue;let m=av(o,d==="start"?"startBinding":"endBinding",d==="start"?o.startBinding:o.endBinding,p,r);m&&c.set(d==="start"?0:o.points.length-1,{point:m})}c.size&&Z.movePoints(o,t.scene,c)});C(this,"maybeUpgradeLineToArrow",o=>{let{app:t}=this,r=t.scene.getNonDeletedElementsMap(),n=t.scene.getNonDeletedElements(),i=si(t.state.zoom),[a,l]=[0,-1].map(s=>$o(Z.getPointAtIndexGlobalCoordinates(o,s,r),n,r,i));return!a&&!l||a===l?null:mi({type:"arrow",x:o.x,y:o.y,width:o.width,height:o.height,startArrowhead:null,endArrowhead:t.state.currentItemEndArrowhead,points:o.points,groupIds:o.groupIds,frameId:o.frameId,locked:!1,angle:o.angle,strokeColor:o.strokeColor,backgroundColor:o.backgroundColor,fillStyle:o.fillStyle,roughness:o.roughness,opacity:o.opacity,strokeStyle:o.strokeStyle,strokeWidth:o.strokeWidth})});C(this,"finalize",()=>{let{app:o}=this,t=this.gestureInProgress?this.trail.getCurrentPoints():[];if(this.gestureInProgress=!1,this.trail.endPath(),t.length>=3){let r=o.state.newElement||Tw(t,o.state,o.scene.getNonDeletedElementsMap(),o.state.newElement,o.scene.getNonDeletedFramesLikes());if(r){let n={...r,seed:bn(),opacity:o.state.currentItemOpacity};o.state.isBindingEnabled&&nt(n)&&(n=this.maybeUpgradeLineToArrow(n)??n),o.insertNewElement(n),o.state.isBindingEnabled&&Bt(n)&&this.bindRecognizedArrow(n)}}this.trail.clearTrails()});this.trail=new Th(o)}};var Ih=class e{constructor(o){this.app=o;C(this,"creator",new ow);C(this,"navigator",new tw);C(this,"clear",()=>{this.creator.clear(),this.navigator.clear()});C(this,"handleKeyEvent",o=>{let t=this.resolveKeyboardEventToOperation(o);switch(t.type){case"none":return!1;case"canceled":return this.app.triggerRender(!0),!0;case"creating":return o.preventDefault(),t.pending.length&&this.app.revealIfHidden(t.pending),!0;case"navigating":{o.preventDefault();let r=t.nodeId&&this.app.scene.getNonDeletedElementsMap().get(t.nodeId);return r&&this.selectAndReveal(r),!0}case"committed":{t.nodes.length&&this.app.insertNewElements(t.nodes);let r=t.nodes[0];return r&&this.selectAndReveal(r),this.captureUpdate(),!0}case"navigationEnded":return this.captureUpdate(),!0}})}get pendingNodes(){return this.creator.pendingNodes}get isCreatingChart(){return this.creator.isCreatingChart}resolveKeyboardEventToOperation(o){let{creator:t,navigator:r,app:n}=this;if(o.type==="keydown"){if(o.key===I.ESCAPE&&t.isCreatingChart)return t.clear(),{type:"canceled"};if(!Qn(o.key))return{type:"none"};if(o[I.CTRL_OR_CMD]&&!o.shiftKey){let a=ie(n.scene.getNonDeletedElementsMap(),n.state);return a.length===1&&Tm(a[0])&&t.createNodes(a[0],n.state,e.getLinkDirectionFromKey(o.key),n.scene),{type:"creating",pending:t.pendingNodes??[]}}if(o.altKey){let a=n.scene.getNonDeletedElementsMap(),l=ie(a,n.state);if(l.length===1)return{type:"navigating",nodeId:r.exploreByDirection(l[0],a,e.getLinkDirectionFromKey(o.key))}}return{type:"none"}}let i=!o.altKey&&r.isExploring;if(i&&r.clear(),!o[I.CTRL_OR_CMD]&&t.isCreatingChart){let a=t.pendingNodes??[];return t.clear(),{type:"committed",nodes:a}}return i?{type:"navigationEnded"}:{type:"none"}}selectAndReveal(o){this.app.setState(t=>({selectedElementIds:Be({[o.id]:!0},t)})),this.app.revealIfHidden([o])}captureUpdate(){this.app.syncActionResult({captureUpdate:R.IMMEDIATELY})}static getLinkDirectionFromKey(o){switch(o){case I.ARROW_UP:return"up";case I.ARROW_DOWN:return"down";case I.ARROW_RIGHT:return"right";case I.ARROW_LEFT:return"left";default:return"right"}}};var Sh="animateScrollToContent",ys="animateScrollConstraintsSnapBack",U3=500,zP=250,HP=200,J0=302,G3={full:216,compact:64},UP=e=>{if(!e||typeof e!="object"||Array.isArray(e))return!1;let o=e;return typeof o.x=="number"&&typeof o.y=="number"&&(o.width==null||typeof o.width=="number")&&(o.height==null||typeof o.height=="number")},GP=(e,o)=>{let t=o.get(e);return t?[t]:He(o,e)},W3=(e,o,t)=>{if(typeof e=="string"){let a=ca(e),l=a?"link":"element",s=a?Qv(e):e,c=s?GP(s,o):[];return c.length?{bounds:ye(c,o),type:l}:{bounds:null,type:l}}if(TE(e))return{bounds:e,type:"area"};if(UP(e)&&!el(e)){let a=e.width??t.width,l=e.height??t.height;return{bounds:[e.x,e.y,e.x+a,e.y+l],type:"area"}}let r=Array.isArray(e)?e:[e],n=r.reduce((a,l)=>{if(l&&!l.isDeleted){let s=o.get(l.id);s&&a.push(s)}return a},[]),i=!n.length;return(n.length!==r.length||i)&&console.warn("supplied element target(s) for setViewport contain deleted or non-existent elements which have been filtered out"),i?{bounds:null,type:"element"}:{bounds:ye(n,o),type:"element"}},WP=e=>e===!1?0:e===!0||e==null?vf:Math.max(e,0),VP=(e,o,t="scale-down",r)=>{let{appState:n}=ma({bounds:o,appState:e,fit:t,canvasOffsets:r,steppedZoom:!1});return{scrollX:n.scrollX,scrollY:n.scrollY,zoom:n.zoom}},V3=(e,o,{fit:t,offsets:r,lock:n})=>{let i=VP(e,o,t,r);if(!n?.scroll&&!n?.zoom)return{...i,scrollConstraints:null};let[a,l,s,c]=o,d={x:a,y:l,width:s-a,height:c-l,lockScroll:!!n.scroll,lockZoom:!!n.zoom,zoom:i.zoom.value,overscroll:WP(n.overscroll),offsets:r};return{...Vr({...e,...i,scrollConstraints:d}),scrollConstraints:d}},YP=({from:e,target:o,factor:t})=>{if(t>=1)return{...o};let r=e.zoom.value*Math.pow(o.zoom.value/e.zoom.value,t),n=o.zoom.value===e.zoom.value?t:(r-e.zoom.value)/(o.zoom.value-e.zoom.value);return{scrollX:((1-n)*e.scrollX*e.zoom.value+n*o.scrollX*o.zoom.value)/r,scrollY:((1-n)*e.scrollY*e.zoom.value+n*o.scrollY*o.zoom.value)/r,zoom:{value:r}}},KP=e=>e===!1?null:e===!0||e==null?U3:e.duration??U3,XP=(e,o,t,r,n)=>{Pt.start(Sh,({deltaTime:i,state:a})=>{let l=(a?.elapsed??0)+i,s=Math.min(l/t,1),c=Yo($e(s,0,1));return s<1?(r({...YP({from:e,target:o,factor:c}),shouldCacheIgnoreZoom:!0}),{elapsed:l}):(n(),null)})},ZP=(e,o,t=zP)=>{let r=Vr(e);if(r.scrollX===e.scrollX&&r.scrollY===e.scrollY&&r.zoom.value===e.zoom.value||Pt.running(Sh))return;let n=(e.scrollX-r.scrollX)*e.zoom.value,i=(e.scrollY-r.scrollY)*e.zoom.value;Pt.start(ys,({deltaTime:a,state:l})=>{let s=(l?.elapsed??0)+a,c=Math.min(s/t,1),d=1-Yo($e(c,0,1));return o(p=>{if(!p.scrollConstraints)return null;let m=Vr(p),u=m.zoom.value;return{scrollX:m.scrollX+n*d/u,scrollY:m.scrollY+i*d/u,zoom:m.zoom}}),c<1?{elapsed:s}:null})},kh=class{constructor(o,t){this.app=o;this.dependencies=t;C(this,"lastPosition",{x:0,y:0});C(this,"activeTransition",null);C(this,"uiLastMeasured",new Map);C(this,"invalidateUIOffset",o=>{this.uiLastMeasured.delete(o)});C(this,"resolveOffsets",o=>{if(!o)return o;let{ui:t,...r}=o;if(!t)return r;let n=this.getOffsets(t===!0?void 0:t);return{top:r.top??n.top,right:r.right??n.right,bottom:r.bottom??n.bottom,left:r.left??n.left}});C(this,"getOffsets",o=>{let t=this.dependencies.getContainer(),r=t?.getBoundingClientRect(),n=Zr().rtl,i={top:0,right:0,bottom:0,left:0},a=new Set;if(t&&r)for(let u of t.querySelectorAll("[data-viewport-ui]")){let b=u.getBoundingClientRect(),f={top:b.top-r.top,right:b.right-r.left,bottom:b.bottom-r.top,left:b.left-r.left,width:b.width};switch(u.dataset.viewportUi){case"top":i.top=Math.max(i.top,f.bottom);break;case"bottom":i.bottom=Math.max(i.bottom,this.app.state.height-f.top);break;case"side":{let[x,v]=f.left+f.width/2<this.app.state.width/2?["left",f.right]:["right",this.app.state.width-f.left];i[x]=Math.max(i[x],v);let y=u.dataset.viewportUiName;y&&(a.add(y),v>0&&this.uiLastMeasured.set(y,{side:x,offset:v}));break}}}if(o?.reserve&&this.app.editorInterface.formFactor!=="phone"){let u=(b,f)=>{if(a.has(b))return;let{side:x,offset:v}=this.uiLastMeasured.get(b)??f;i[x]=Math.max(i[x],v)};o.reserve.stylesPanel&&u("stylesPanel",{side:n?"right":"left",offset:this.dependencies.getStylesPanelMode()==="compact"?G3.compact:G3.full}),o.reserve.sidebar&&u("sidebar",{side:n?"left":"right",offset:J0})}let l=o?.padding??24,s=o?.paddingTop??l,c=(n?o?.paddingLeft:o?.paddingRight)??l,d=o?.paddingBottom??l,p=(n?o?.paddingRight:o?.paddingLeft)??l,m={top:i.top+s,right:i.right+c,bottom:i.bottom+d,left:i.left+p};return{top:o?.top??m.top,right:(n?o?.left:o?.right)??m.right,bottom:o?.bottom??m.bottom,left:(n?o?.right:o?.left)??m.left}});C(this,"resolveInitialViewport",(o,t,r)=>{let{bounds:n}=W3(o.target,t,r);return n?V3(r,n,{...o,offsets:this.resolveOffsets(o.offsets)}):null});C(this,"setViewport",o=>{if(o===null){this.cancelTransition(),Pt.cancel(ys),this.snapBackDebounced.cancel(),this.app.setState({scrollConstraints:null,shouldCacheIgnoreZoom:!1});return}let{target:t,fit:r,lock:n,animation:i}=o,a=this.resolveOffsets(o.offsets),{bounds:l,type:s}=W3(t,this.app.scene.getNonDeletedElementsMap(),this.app.state);if(!l){s==="link"&&this.app.setState({toast:{message:h("elementLink.notFound"),duration:3e3,closable:!0}});return}let c=V3(this.app.state,l,{fit:r,offsets:a,lock:n}),d=KP(i),p={scrollX:this.app.state.scrollX,scrollY:this.app.state.scrollY,zoom:this.app.state.zoom};if(this.cancelTransition(),Pt.cancel(ys),this.snapBackDebounced.cancel(),d===null){this.app.setState({...c,shouldCacheIgnoreZoom:!1});return}let m={target:c};this.activeTransition=m,this.app.state.scrollConstraints&&this.app.setState({scrollConstraints:null}),XP(p,c,d,u=>{this.activeTransition===m&&this.app.setState(u)},()=>{this.activeTransition===m&&(this.activeTransition=null,this.app.setState({...m.target,shouldCacheIgnoreZoom:!1}))})});C(this,"translate",(o,t)=>{if(this.isLockedTransitionPending)return!1;this.cancelTransition(),t?.preserveScrollConstraintsSnapBack||Pt.cancel(ys),this.app.setState({shouldCacheIgnoreZoom:!1}),this.app.state.userToFollow&&this.app.setState({userToFollow:null});let r=this.app.state.zoom.value;return this.app.setState(o),this.app.setState(n=>{if(!n.scrollConstraints)return null;let a=!t?.zoomPreConstrained&&n.zoom.value!==r?0:n.scrollConstraints.overscroll;return a>0&&this.snapBackDebounced(),Vr(n,a)}),!0});C(this,"constrain",(o=0)=>{this.app.setState(t=>t.scrollConstraints?Vr(t,o):null)});C(this,"releaseOverscroll",()=>{this.app.state.scrollConstraints&&(this.snapBackDebounced.cancel(),this.snapBack())});C(this,"snapBack",()=>{this.app.unmounted||this.dependencies.isGestureActive()||ZP(this.app.state,o=>this.app.setState(t=>o(t)))});C(this,"snapBackDebounced",fn(this.snapBack,HP));C(this,"cancelTransition",()=>{this.activeTransition=null,Pt.cancel(Sh)});C(this,"destroy",()=>{this.cancelTransition(),Pt.cancel(ys),this.snapBackDebounced.cancel()})}get isAnimating(){return Pt.running(Sh)||Pt.running(ys)}get isLockedTransitionPending(){return!!this.activeTransition?.target.scrollConstraints}};import{jsx as sr,jsxs as Y3}from"react/jsx-runtime";var $P=()=>Y3("div",{"data-testid":"brave-measure-text-error",children:[sr("p",{children:sr(bo,{i18nKey:"errors.brave_measure_text_error.line1",bold:e=>sr("span",{style:{fontWeight:600},children:e})})}),sr("p",{children:sr(bo,{i18nKey:"errors.brave_measure_text_error.line2",bold:e=>sr("span",{style:{fontWeight:600},children:e})})}),sr("p",{children:sr(bo,{i18nKey:"errors.brave_measure_text_error.line3",link:e=>sr("a",{href:"http://docs.excalidraw.com/docs/@excalidraw/excalidraw/faq#turning-off-aggresive-block-fingerprinting-in-brave-browser",children:e})})}),sr("p",{children:sr(bo,{i18nKey:"errors.brave_measure_text_error.line4",issueLink:e=>sr("a",{href:"https://github.com/excalidraw/excalidraw/issues/new",children:e}),discordLink:e=>Y3("a",{href:"https://discord.gg/UexuTaE",children:[e,"."]})})})]}),K3=$P;import eD from"clsx";import tD from"react";import{useLayoutEffect as jP,useRef as X3,useEffect as Z3}from"react";import{unstable_batchedUpdates as qP}from"react-dom";import JP from"clsx";import{jsx as QP}from"react/jsx-runtime";var Bi=10,$3=({children:e,left:o,top:t,onCloseRequest:r,fitInViewport:n=!1,viewportWidth:i=window.innerWidth,viewportHeight:a=window.innerHeight,className:l})=>{let s=X3(null);Z3(()=>{let d=s.current;if(!d)return;d.contains(document.activeElement)||d.focus();let p=m=>{if(m.key===I.TAB){let u=oc(d),{activeElement:b}=document,f=u.findIndex(x=>x===b);b===d?(m.shiftKey?u[u.length-1]?.focus():u[0].focus(),m.preventDefault(),m.stopImmediatePropagation()):f===0&&m.shiftKey?(u[u.length-1]?.focus(),m.preventDefault(),m.stopImmediatePropagation()):f===u.length-1&&!m.shiftKey&&(u[0]?.focus(),m.preventDefault(),m.stopImmediatePropagation())}};return d.addEventListener("keydown",p),()=>d.removeEventListener("keydown",p)},[]);let c=X3(null);return jP(()=>{if(n&&s.current&&t!=null&&o!=null){let d=s.current,{width:p,height:m}=d.getBoundingClientRect();if(c.current?.top===t&&c.current?.left===o)return;c.current={top:t,left:o};let u=Math.max(0,i-Bi*2);p>=u?(d.style.width=`${u}px`,d.style.left=`${Bi}px`,d.style.overflowX="scroll"):d.style.left=`${$e(o,Bi,i-Bi-p)}px`;let b=Math.max(0,a-Bi*2);m>=b?(d.style.height=`${b}px`,d.style.top=`${Bi}px`,d.style.overflowY="scroll"):d.style.top=`${$e(t,Bi,a-Bi-m)}px`}},[t,o,n,i,a]),Z3(()=>{if(r){let d=p=>{s.current?.contains(p.target)||qP(()=>r(p))};return document.addEventListener("pointerdown",d,!1),()=>document.removeEventListener("pointerdown",d,!1)}},[r]),QP("div",{className:JP("popover",l),ref:s,tabIndex:-1,children:e})};import{jsx as vs,jsxs as oD}from"react/jsx-runtime";var Dt="separator",j3=tD.memo(({actionManager:e,items:o,top:t,left:r,onClose:n})=>{let i=jr(),a=vi(),l=o.reduce((s,c)=>(c&&(c===Dt||!c.predicate||c.predicate(a,i,e.app.props,e.app))&&s.push(c),s),[]);return vs($3,{onCloseRequest:()=>{n()},top:t,left:r,fitInViewport:!0,viewportWidth:i.width,viewportHeight:i.height,className:"context-menu-popover",children:vs("ul",{className:"context-menu",onContextMenu:s=>s.preventDefault(),children:l.map((s,c)=>{if(s===Dt)return!l[c-1]||l[c-1]===Dt?null:vs("hr",{className:"context-menu-item-separator"},c);let d=s.name,p="";return s.label&&(typeof s.label=="function"?p=h(s.label(a,i,e.app)):p=h(s.label)),vs("li",{"data-testid":d,onClick:()=>{n(()=>{e.executeAction(s,"contextMenu")})},children:oD("button",{type:"button",className:eD("context-menu-item",{dangerous:d==="deleteSelectedElements",checkmark:s.checked?.(i)}),children:[vs("div",{className:"context-menu-item__label",children:p}),vs("kbd",{className:"context-menu-item__shortcut",children:d?tt(d):""})]})},c)})})})});import{jsx as Q0,jsxs as q3}from"react/jsx-runtime";var rD=({height:e,width:o,userToFollow:t,onDisconnect:r})=>Q0("div",{className:"follow-mode",style:{width:o,height:e},children:q3("div",{className:"follow-mode__badge",children:[q3("div",{className:"follow-mode__badge__label",children:["Following"," ",Q0("span",{className:"follow-mode__badge__username",title:t.username,children:t.username})]}),Q0("button",{type:"button",onClick:r,className:"follow-mode__disconnect-btn",children:No})]})}),J3=rD;import Rs from"clsx";import XR from"react";import{createIsolation as nD}from"jotai-scope";import ex from"react";import ln from"tunnel-rat";var tx=ex.createContext(null),ot=()=>ex.useContext(tx),iD=nD(),Q3=()=>ex.useMemo(()=>({MainMenuTunnel:ln(),WelcomeScreenMenuHintTunnel:ln(),WelcomeScreenToolbarHintTunnel:ln(),WelcomeScreenHelpHintTunnel:ln(),WelcomeScreenCenterTunnel:ln(),FooterCenterTunnel:ln(),DefaultSidebarTriggerTunnel:ln(),DefaultSidebarTabTriggersTunnel:ln(),OverwriteConfirmDialogTunnel:ln(),TTDDialogTriggerTunnel:ln(),tunnelsJotai:iD}),[]);import aD from"clsx";import{useState as lD,useEffect as sD}from"react";import{jsx as ox,jsxs as cD}from"react/jsx-runtime";var Mh=({delay:e,theme:o})=>{let[t,r]=lD(!!e);return sD(()=>{if(!e)return;let n=setTimeout(()=>{r(!1)},e);return()=>clearTimeout(n)},[e]),t?null:cD("div",{className:aD("LoadingMessage",{"LoadingMessage--dark":o===te.DARK}),children:[ox("div",{children:ox(Ht,{})}),ox("div",{className:"LoadingMessage-text",children:h("labels.loadingScene")})]})};import{useState as Ah,useEffect as eS}from"react";import dD from"clsx";import{Fragment as mD,jsx as Ct,jsxs as rx}from"react/jsx-runtime";var tS=({app:e,setAppState:o})=>{let t=e.state.activeTool,[r,n]=Ah(!1),[i,a]=Ah("rectangle"),[l,s]=Ah("arrow");eS(()=>{(t.type==="rectangle"||t.type==="diamond"||t.type==="ellipse")&&a(t.type)},[t.type]),eS(()=>{(t.type==="arrow"||t.type==="line")&&s(t.type)},[t.type]);let c=t.type==="frame",d=t.type==="autoshape",p=t.type==="laser",m=t.type==="embeddable",u=t.type==="bucketfill",{TTDDialogTriggerTunnel:b}=ot(),f=["rectangle","diamond","ellipse"].map(z=>({type:z,icon:yt[z].icon,title:Vt(h(`toolBar.${z}`)),fillable:yt[z].fillable})),x=["arrow","line"].map(z=>({type:z,icon:yt[z].icon,title:Vt(h(`toolBar.${z}`)),fillable:yt[z].fillable})),[v,y]=Ah(0),E=36,w=4,T=7,S=T*E+(T-1)*w,_=E+w,M=v>=S+1*_,N=v>=S+2*_,L=v>=S+3*_,O=["text","frame","embeddable","laser","bucketfill","magicframe"].filter(z=>!(M&&z==="text"||L&&z==="frame")).includes(t.type),V=O?t.type==="text"?$r:t.type==="image"?vl:t.type==="frame"?Cr:t.type==="embeddable"?kn:t.type==="laser"?Ir:t.type==="bucketfill"?ho:t.type==="magicframe"?Ei:hi:hi,K={app:e,activeTool:t};return rx("div",{className:"mobile-toolbar",ref:z=>{z&&y(z.getBoundingClientRect().width)},children:[Ct(cu,{...K,hideKeyBinding:!0}),Ct(uu,{...K,setAppState:o}),Ct(hu,{...K}),Ct(pu,{...K,hideShortcut:!0}),Ct(Ol,{app:e,options:f,activeTool:t,defaultOption:i,"data-testid":"toolbar-rectangle",onToolChange:z=>{(z==="rectangle"||z==="diamond"||z==="ellipse")&&(a(z),e.setActiveTool({type:z}))},displayedOption:f.find(z=>z.type===i)||f[0]}),Ct(Ol,{app:e,options:x,activeTool:t,defaultOption:l,"data-testid":"toolbar-arrow",onToolChange:z=>{(z==="arrow"||z==="line")&&(s(z),e.setActiveTool({type:z}))},displayedOption:x.find(z=>z.type===l)||x[0]}),M&&Ct(du,{...K,hideShortcut:!0}),N&&Ct(mu,{...K,hideShortcut:!0}),L&&Ct(gT,{...K,hideShortcut:!0}),rx(pe,{open:r,children:[Ct(pe.Trigger,{className:dD("App-toolbar__extra-tools-trigger App-toolbar__extra-tools-trigger--mobile",{"App-toolbar__extra-tools-trigger--selected":O||r}),onToggle:()=>{n(!r),o({openMenu:null,openPopup:null})},title:h("toolBar.extraTools"),style:{width:E,height:E,display:"flex",alignItems:"center",justifyContent:"center"},children:V}),rx(pe.Content,{onClickOutside:()=>n(!1),onSelect:()=>n(!1),className:"App-toolbar__extra-tools-dropdown",align:"start",children:[!M&&Ct(pe.Item,{onSelect:()=>e.setActiveTool({type:"text"}),icon:$r,shortcut:I.T.toLocaleUpperCase(),"data-testid":"toolbar-text",selected:t.type==="text",disabled:_t(e,"text"),children:h("toolBar.text")}),!N&&Ct(pe.Item,{onSelect:()=>e.setActiveTool({type:"image"}),icon:vl,"data-testid":"toolbar-image",selected:t.type==="image",disabled:_t(e,"image"),children:h("toolBar.image")}),!L&&Ct(pe.Item,{onSelect:()=>e.setActiveTool({type:"frame"}),icon:Cr,shortcut:I.F.toLocaleUpperCase(),"data-testid":"toolbar-frame",selected:c,disabled:_t(e,"frame"),children:h("toolBar.frame")}),Ct(pe.Item,{onSelect:()=>e.setActiveTool({type:"embeddable"}),icon:kn,"data-testid":"toolbar-embeddable",selected:m,disabled:_t(e,"embeddable"),children:h("toolBar.embeddable")}),Ct(pe.Item,{onSelect:()=>e.setActiveTool({type:"autoshape"}),icon:xi,shortcut:od("autoshape"),"data-testid":"toolbar-autoshape",selected:d,disabled:_t(e,"autoshape"),children:h("toolBar.autoshape")}),Ct(pe.Item,{onSelect:()=>e.setActiveTool({type:"laser"}),icon:Ir,"data-testid":"toolbar-laser",selected:p,shortcut:I.K.toLocaleUpperCase(),disabled:_t(e,"laser"),children:h("toolBar.laser")}),Ct(pe.Item,{onSelect:()=>e.setActiveTool({type:"bucketfill"}),icon:ho,"data-testid":"toolbar-bucketfill",selected:u,shortcut:I.B.toLocaleUpperCase(),disabled:_t(e,"bucketfill"),children:h("toolBar.bucketfill")}),Ct("div",{style:{margin:"6px 0",fontSize:14,fontWeight:600},children:"Generate"}),e.props.aiEnabled!==!1&&Ct(b.Out,{}),Ct(pe.Item,{onSelect:()=>e.setOpenDialog({name:"ttd",tab:"mermaid"}),icon:Ea,"data-testid":"toolbar-embeddable",children:h("toolBar.mermaidToExcalidraw")}),e.props.aiEnabled!==!1&&e.plugins.diagramToCode&&Ct(mD,{children:Ct(pe.Item,{onSelect:()=>e.onMagicframeToolSelect(),icon:Ei,"data-testid":"toolbar-magicframe",badge:Ct(pe.Item.Badge,{children:"AI"}),disabled:_t(e,"magicframe"),children:h("toolBar.magicframe")})})]})]})]})};import pD from"clsx";import{jsx as uD}from"react/jsx-runtime";var Lh=({children:e,side:o,className:t})=>uD("div",{className:pD("FixedSideContainer",`FixedSideContainer_side_${o}`,t),children:e});import hD from"clsx";import{jsx as gD}from"react/jsx-runtime";var ws=e=>e.penDetected?gD(q,{className:hD("ToolIcon__penMode",{"is-mobile":e.isMobile}),type:"toggle",icon:zf,checked:e.checked,title:`${e.title}`,"aria-label":`${e.title}`,onSelect:()=>e.onChange?.()}):null;import{Fragment as oS,jsx as Pr,jsxs as Na}from"react/jsx-runtime";var rS=({appState:e,elements:o,actionManager:t,setAppState:r,renderTopLeftUI:n,renderTopRightUI:i,renderSidebars:a,renderWelcomeScreen:l,defaultUIEnabled:s,scrollBackToContentUIEnabled:c,app:d,onPenModeToggle:p})=>{let{WelcomeScreenCenterTunnel:m,MainMenuTunnel:u,DefaultSidebarTriggerTunnel:b}=ot(),f=()=>{if(e.openDialog?.name==="elementLinkSelector")return null;let w=Na("div",{className:"excalidraw-ui-top-right",children:[i?.(!0,e),!e.viewModeEnabled&&Na(oS,{children:[s&&Pr(ws,{checked:e.penMode,onChange:()=>p(null),title:h("toolBar.penMode"),isMobile:!0,penDetected:e.penDetected}),Pr(b.Out,{})]}),s&&e.viewModeEnabled&&d.isInteractionEnabled()&&Pr(PI,{actionManager:t})]}),T=Na("div",{className:"excalidraw-ui-top-left",children:[n?.(!0,e),Pr(u.Out,{})]});return Na("div",{className:"App-toolbar-content",style:{display:"flex",flexDirection:"row",justifyContent:"space-between"},children:[T,w]})},x=()=>Pr(tS,{app:d,setAppState:r}),v=c&&e.scrolledOutside,y=s&&!e.viewModeEnabled,E=v&&!e.openMenu&&!e.openSidebar?Pr("button",{type:"button",className:"scroll-back-to-content",onClick:()=>{r(w=>({...pl(o,w)}))},children:h("buttons.scrollBackToContent")}):null;return Na(oS,{children:[a(),Pr("div",{className:"App-welcome-screen",children:l&&Pr(m.Out,{})}),y&&Na("div",{className:"App-bottom-bar",style:{marginBottom:lr+Hn},"data-viewport-ui":"bottom",children:[Pr(MI,{appState:e,elementsMap:d.scene.getNonDeletedElementsMap(),renderAction:t.renderAction,app:d,setAppState:r}),Na(Et,{className:"App-toolbar",children:[e.openDialog?.name!=="elementLinkSelector"&&x(),E]})]}),!y&&E&&Pr("div",{className:"floating-status-stack",children:E}),Pr(Lh,{side:"top",className:"App-top-bar",children:f()})]})};import nS,{useLayoutEffect as iS,useRef as aS,useState as lS}from"react";import{jsx as Un,jsxs as _h}from"react/jsx-runtime";var fD=e=>{switch(e){case"bar":return h("labels.chartType_bar");case"line":return h("labels.chartType_line");case"radar":return h("labels.chartType_radar");default:return e}},bD=e=>{let o=aS(null),[t,r]=lS(null),{theme:n}=fe();iS(()=>{if(!e.spreadsheet){r(null);return}let a=q0(e.chartType,e.spreadsheet,0,0,e.colorSeed);if(!a){r(null),o.current?.replaceChildren();return}r(a);let l,s=o.current;return(async()=>(l=await pa({data:{elements:a,appState:{exportBackground:!1,viewBackgroundColor:Ro,exportWithDarkMode:n==="dark"},files:null},config:{skipInliningFonts:!0}}),l.querySelector(".style-fonts")?.remove(),s.replaceChildren(),s.appendChild(l)))(),()=>{s.replaceChildren()}},[e.spreadsheet,e.chartType,e.colorSeed,n]);let i=fD(e.chartType);return _h("button",{type:"button",className:"ChartPreview","aria-label":i,onClick:()=>{t&&e.onClick(e.chartType,t)},children:[Un("div",{className:"ChartPreview__canvas",ref:o}),Un("div",{className:"ChartPreview__label",children:i})]})},xD=e=>{let o=aS(null),{theme:t}=fe();return iS(()=>{if(!e.rawText)return;let r=Qt({text:e.rawText,x:0,y:0}),n=o.current;return(async()=>{let i=await pa({data:{elements:[r],appState:{exportBackground:!1,viewBackgroundColor:Ro,exportWithDarkMode:t==="dark"},files:null},config:{skipInliningFonts:!0}});i.querySelector(".style-fonts")?.remove(),n.replaceChildren(),n.appendChild(i)})(),()=>{n.replaceChildren()}},[e.rawText,t]),_h("button",{type:"button",className:"ChartPreview","aria-label":h("labels.chartType_plaintext"),onClick:()=>{e.onClick(e.rawText)},children:[Un("div",{className:"ChartPreview__canvas",ref:o}),Un("div",{className:"ChartPreview__label",children:h("labels.chartType_plaintext")})]})},sS=({data:e,rawText:o,onClose:t})=>{let{onInsertElements:r,focusContainer:n}=Ke(),[i,a]=lS(Math.random()),l=nS.useCallback(()=>{a(Math.random())},[]),s=nS.useCallback(()=>{t&&t()},[t]),c=(p,m)=>{r(m),xe("paste","chart",p),t(),n()},d=p=>{let m=Qt({text:p,x:0,y:0});r([m]),xe("paste","chart","plaintext"),t(),n()};return Un(kt,{size:"regular",onCloseRequest:s,title:_h("div",{className:"PasteChartDialog__title",children:[Un("div",{className:"PasteChartDialog__titleText",children:h("labels.pasteCharts")}),Un("div",{className:"PasteChartDialog__reshuffleBtn",onClick:l,role:"button",tabIndex:0,onKeyDown:p=>{(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),l())},children:ho})]}),className:"PasteChartDialog",autofocus:!1,children:_h("div",{className:"container",children:[["bar","line","radar"].map(p=>hs(e,p)?Un(bD,{chartType:p,spreadsheet:e,colorSeed:i,onClick:c},p):null),o&&Un(xD,{rawText:o,onClick:d})]})})};import{Fragment as ED,jsx as cS,jsxs as yD}from"react/jsx-runtime";var Id=({heading:e,children:o,...t})=>{let{id:r}=at(),n=cS("h2",{className:"visually-hidden",id:`${r}-${e}-title`,children:h(`headings.${e}`)});return cS("section",{...t,"aria-labelledby":`${r}-${e}-title`,children:typeof o=="function"?o(n):yD(ED,{children:[n,o]})})};import{Popover as Ph}from"radix-ui";import dS from"clsx";import Dh,{useLayoutEffect as vD}from"react";import{Fragment as SD,jsx as sn,jsxs as Rh}from"react/jsx-runtime";var wD=4,TD=8,CD=({shouldWrap:e,children:o,username:t})=>e?sn(fo,{label:t||"Unknown user",children:o}):sn(SD,{children:o}),nx=({actionManager:e,collaborator:o,socketId:t,withName:r=!1,shouldWrapWithTooltip:n=!1,isBeingFollowed:i})=>{let a={socketId:t,collaborator:o,withName:r,isBeingFollowed:i},l=e.renderAction("goToCollaborator",a);return sn(CD,{username:o.username,shouldWrap:n,children:l},t)},ID=["avatarUrl","id","socketId","username","isInCall","isSpeaking","isMuted"],Nh=Dh.memo(({className:e,mobile:o,collaborators:t,userToFollow:r})=>{let n=je(),i=new Map;t.forEach((f,x)=>{let v=f.id||x;i.set(v,{...f,socketId:x})});let a=Array.from(i.values()).filter(f=>f.username?.trim()),[l,s]=Dh.useState(""),c=a.filter(f=>f.username?.toLowerCase().includes(l)),d=Dh.useRef(null);vD(()=>{if(d.current){let f=v=>{let y=Math.max(1,Math.min(8,Math.floor(v/38)));m(y)};if(f(d.current.clientWidth),!Qd)return;let x=new ResizeObserver(v=>{for(let y of v){let{width:E}=y.contentRect;f(E)}});return x.observe(d.current),()=>{x.disconnect()}}},[]);let[p,m]=Dh.useState(wD),b=a.slice(0,p-1).map(f=>nx({actionManager:n,collaborator:f,socketId:f.socketId,shouldWrapWithTooltip:!0,isBeingFollowed:f.socketId===r}));return o?sn("div",{className:dS("UserList UserList_mobile",e),children:a.map(f=>nx({actionManager:n,collaborator:f,socketId:f.socketId,shouldWrapWithTooltip:!0,isBeingFollowed:f.socketId===r}))}):sn("div",{className:"UserList__wrapper",ref:d,children:Rh("div",{className:dS("UserList",e),style:{"--max-avatars":p},children:[b,a.length>p-1&&Rh(Ph.Root,{children:[Rh(Ph.Trigger,{className:"UserList__more",children:["+",a.length-p+1]}),sn(Ph.Content,{style:{zIndex:2,width:"15rem",textAlign:"left"},align:"end",sideOffset:10,children:Rh(Et,{padding:2,children:[a.length>=TD&&sn(jp,{placeholder:h("quickSearch.placeholder"),onChange:s}),sn(qp,{className:"dropdown-menu UserList__collaborators",placeholder:h("userList.empty"),children:c.length>0?[sn("div",{className:"hint",children:h("userList.hint.text")}),c.map(f=>nx({actionManager:n,collaborator:f,socketId:f.socketId,withName:!0,isBeingFollowed:f.socketId===r}))]:[]}),sn(Ph.Arrow,{width:20,height:10,style:{fill:"var(--popup-bg-color)",filter:"drop-shadow(rgba(0, 0, 0, 0.05) 0px 3px 2px)"}})]})})]})]})})},(e,o)=>{if(e.collaborators.size!==o.collaborators.size||e.mobile!==o.mobile||e.className!==o.className||e.userToFollow!==o.userToFollow)return!1;let t=o.collaborators.keys();for(let[r,n]of e.collaborators){let i=o.collaborators.get(r);if(!i||r!==t.next().value||!At(n,i,ID))return!1}return!0});import ix from"clsx";import{jsx as mS}from"react/jsx-runtime";var pS=e=>mS(fo,{label:`${h("helpDialog.title")} \u2014 ?`,children:mS("button",{className:"help-icon",onClick:e.onClick,type:"button","aria-label":h("helpDialog.title"),children:fa})});import{jsx as Gn,jsxs as ax}from"react/jsx-runtime";var uS=({appState:e,actionManager:o,showExitZenModeBtn:t,renderWelcomeScreen:r,defaultUIEnabled:n,zoomUIEnabled:i})=>{let{FooterCenterTunnel:a,WelcomeScreenHelpHintTunnel:l}=ot(),s=Ke();return ax("footer",{role:"contentinfo",className:"layer-ui__wrapper__footer App-menu App-menu_bottom",children:[(n||i&&s.isNavigationEnabled())&&Gn("div",{className:ix("layer-ui__wrapper__footer-left zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-left":e.zenModeEnabled}),children:Gn(oo.Col,{gap:2,children:ax(Id,{heading:"canvasActions",children:[i&&s.isNavigationEnabled()&&Gn(AI,{renderAction:o.renderAction}),n&&!e.viewModeEnabled&&Gn(LI,{renderAction:o.renderAction,className:ix("zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-bottom":e.zenModeEnabled})})]})})}),Gn(a.Out,{}),(n||r)&&Gn("div",{className:ix("layer-ui__wrapper__footer-right zen-mode-transition",{"transition-right":e.zenModeEnabled}),children:ax("div",{style:{position:"relative"},children:[r&&Gn(l.Out,{}),n&&Gn(pS,{onClick:()=>o.executeAction(Mi)})]})}),n&&Gn(_I,{actionManager:o,showExitZenModeBtn:t})]})},hS=uS;uS.displayName="Footer";import zD from"clsx";import{useEffect as ES,useLayoutEffect as yS,useRef as gx,useState as HD,forwardRef as vS,useImperativeHandle as UD,useCallback as bS}from"react";import MD from"clsx";import{useContext as AD}from"react";import kD from"react";var Oh=kD.createContext({});import{jsx as lx,jsxs as gS}from"react/jsx-runtime";var sx=({children:e,className:o})=>{let t=Me(),r=AD(Oh),n=!!(t.canFitSidebar&&r.shouldRenderDockButton);return gS("div",{className:MD("sidebar__header",o),"data-testid":"sidebar-header",children:[e,gS("div",{className:"sidebar__header__buttons",children:[n&&lx(fo,{label:h("labels.sidebarLock"),children:lx(ro,{onSelect:()=>r.onDock?.(!r.docked),selected:!!r.docked,className:"sidebar__dock","data-testid":"sidebar-dock","aria-label":h("labels.sidebarLock"),children:Pf})}),lx(ro,{"data-testid":"sidebar-close",className:"sidebar__close",onSelect:r.onCloseRequest,"aria-label":h("buttons.close"),children:No})]})]})};sx.displayName="SidebarHeader";import{Tabs as LD}from"radix-ui";import{jsx as fS}from"react/jsx-runtime";var cx=({children:e,tab:o,onSelect:t,...r})=>fS(LD.Trigger,{value:o,asChild:!0,onSelect:t,children:fS("button",{type:"button",className:"excalidraw-button sidebar-tab-trigger",...r,children:e})});cx.displayName="SidebarTabTrigger";import{Tabs as _D}from"radix-ui";import{jsx as PD}from"react/jsx-runtime";var dx=({children:e,...o})=>PD(_D.List,{className:"sidebar-triggers",...o,children:e});dx.displayName="SidebarTabTriggers";import DD from"clsx";import{jsx as mx,jsxs as RD}from"react/jsx-runtime";var px=({name:e,tab:o,icon:t,title:r,children:n,onToggle:i,className:a,style:l})=>{let s=Ie(),d=fe().openSidebar?.name===e;return mx("button",{type:"button",title:r,className:"sidebar-trigger__label-element","aria-label":r,"aria-keyshortcuts":"0","aria-pressed":d,onClick:()=>{document.querySelector(".layer-ui__wrapper")?.classList.remove("animate");let p=!d;s({openSidebar:p?{name:e,tab:o}:null,openMenu:null,openPopup:null}),i?.(p)},children:RD("div",{className:DD("sidebar-trigger",a),style:l,children:[t&&mx("div",{children:t}),n&&mx("div",{className:"sidebar-trigger__label",children:n})]})})};px.displayName="SidebarTrigger";import{Tabs as ND}from"radix-ui";import{jsx as OD}from"react/jsx-runtime";var ux=({children:e,...o})=>{let t=fe(),r=Ie();if(!t.openSidebar)return null;let{name:n}=t.openSidebar;return OD(ND.Root,{className:"sidebar-tabs-root",value:t.openSidebar.tab,onValueChange:i=>r(a=>({...a,openSidebar:{...a.openSidebar,name:n,tab:i}})),...o,children:e})};ux.displayName="SidebarTabs";import{Tabs as FD}from"radix-ui";import{jsx as BD}from"react/jsx-runtime";var hx=({tab:e,children:o,...t})=>BD(FD.Content,{...t,value:e,"data-testid":e,children:o});hx.displayName="SidebarTab";import{jsx as xS}from"react/jsx-runtime";import{createElement as GD}from"react";var Sd=Ce(!1),wS=vS(({name:e,children:o,onDock:t,docked:r,className:n,...i},a)=>{Ft()&&t&&r==null&&console.warn("Sidebar: `docked` must be set when `onDock` is supplied for the sidebar to be user-dockable. To hide this message, either pass `docked` or remove `onDock`");let l=Ie(),s=Kr(Sd);yS(()=>(s(!!r),()=>{s(!1)}),[s,r]);let c=gx({});c.current.onCloseRequest=()=>{l({openSidebar:null})},c.current.onDock=u=>t?.(u),c.current=$a(c.current,{docked:r,shouldRenderDockButton:!!t&&r!=null});let d=gx(null);UD(a,()=>d.current);let p=Me(),m=bS(()=>{document.querySelector(".Dialog")||l({openSidebar:null})},[l]);return Al(d,bS(u=>{u.target.closest(".sidebar-trigger")||(!r||!p.canFitSidebar)&&m()},[m,r,p.canFitSidebar])),ES(()=>{let u=b=>{b.key===I.ESCAPE&&(!r||!p.canFitSidebar)&&m()};return document.addEventListener("keydown",u),()=>{document.removeEventListener("keydown",u)}},[m,r,p.canFitSidebar]),xS(Et,{...i,className:zD(qe.SIDEBAR,{"sidebar--docked":r},n),"data-viewport-ui":p.formFactor!=="phone"?"side":void 0,"data-viewport-ui-name":p.formFactor!=="phone"?"sidebar":void 0,ref:d,children:xS(Oh.Provider,{value:c.current,children:o})})});wS.displayName="SidebarInner";var cr=Object.assign(vS((e,o)=>{let t=fe(),{onStateChange:r}=e,n=gx(t.openSidebar);ES(()=>{(!t.openSidebar&&n?.current?.name===e.name||t.openSidebar?.name===e.name&&n?.current?.name!==e.name||n.current?.name===e.name)&&t.openSidebar!==n.current&&r?.(t.openSidebar?.name!==e.name?null:t.openSidebar),n.current=t.openSidebar},[t.openSidebar,r,e.name]);let[i,a]=HD(!1);return yS(()=>(a(!0),()=>a(!1)),[]),i&&t.openSidebar?.name===e.name?GD(wS,{...e,ref:o,key:e.name}):null}),{Header:sx,TabTriggers:dx,TabTrigger:cx,Tabs:ux,Tab:hx,Trigger:px});cr.displayName="Sidebar";import{useLayoutEffect as WD,useRef as VD}from"react";import{jsx as YD}from"react/jsx-runtime";var Wn=(e,o)=>{let t=Ce(0),r=n=>{let{tunnelsJotai:{useAtom:i}}=ot(),[,a]=i(t),l=VD({preferHost:!1,counter:0});return WD(()=>{let s=l.current;return a(c=>{let d=c+1;return s.counter=d,d}),()=>{a(c=>{let d=c-1;return s.counter=d,d||(s.preferHost=!1),d})}},[a]),n.__fallback||(l.current.preferHost=!0),!l.current.counter&&n.__fallback&&l.current.preferHost||l.current.counter>1&&n.__fallback?null:YD(o,{...n})};return r.displayName=e,r};var yx={};xg(yx,{ChangeCanvasBackground:()=>NS,ClearCanvas:()=>DS,CommandPalette:()=>LS,Export:()=>OS,Help:()=>PS,LiveCollaborationTrigger:()=>BS,LoadScene:()=>kS,Preferences:()=>Dr,PreferencesToggleGridModeItem:()=>xx,PreferencesToggleZenModeItem:()=>Ex,SaveAsImage:()=>AS,SaveToActiveFile:()=>MS,SearchMenu:()=>_S,Socials:()=>FS,ToggleTheme:()=>RS});import $D from"clsx";var fx=Ce({active:!1});async function TS({title:e,description:o,actionLabel:t,color:r}){return new Promise(n=>{St.set(fx,{active:!0,onConfirm:()=>n(!0),onClose:()=>n(!1),onReject:()=>n(!1),title:e,description:o,actionLabel:t,color:r})})}import KD from"clsx";import{jsx as CS,jsxs as XD}from"react/jsx-runtime";var Fh=function({onChange:e,value:o,choices:t,name:r}){return CS("div",{className:"RadioGroup",children:t.map(n=>XD("div",{className:KD("RadioGroup__choice",{active:n.value===o}),title:n.ariaLabel,children:[CS("input",{name:r,type:"radio",checked:n.value===o,onChange:()=>e(n.value),"aria-label":n.ariaLabel}),n.label]},String(n.value)))})};import{Fragment as ZD,jsx as kd,jsxs as IS}from"react/jsx-runtime";var SS=({value:e,shortcut:o,onChange:t,choices:r,children:n,name:i,icon:a})=>{let l=Me();return IS(ZD,{children:[IS("div",{className:"dropdown-menu-item-base dropdown-menu-item-bare",children:[a&&kd("div",{className:"dropdown-menu-item__icon",children:a}),kd("label",{className:"dropdown-menu-item__text",children:kd(va,{children:n})}),kd(Fh,{name:i,value:e,onChange:t,choices:r})]}),o&&l.formFactor!=="phone"&&kd("div",{className:"dropdown-menu-item__shortcut dropdown-menu-item__shortcut--orphaned",children:o})]})};SS.displayName="DropdownMenuItemContentRadio";var bx=SS;import{Fragment as KS,jsx as De,jsxs as Md}from"react/jsx-runtime";var kS=()=>{let{t:e}=Ue(),o=je(),t=vi();return o.isActionEnabled(Ia)?De(go,{icon:ba,onSelect:async()=>{(!t.length||await TS({title:e("overwriteConfirm.modal.loadFromFile.title"),actionLabel:e("overwriteConfirm.modal.loadFromFile.button"),color:"warning",description:De(bo,{i18nKey:"overwriteConfirm.modal.loadFromFile.description",bold:n=>De("strong",{children:n}),br:()=>De("br",{})})}))&&o.executeAction(Ia)},"data-testid":"load-button",shortcut:tt("loadScene"),"aria-label":e("buttons.load"),children:e("buttons.load")}):null};kS.displayName="LoadScene";var MS=()=>{let{t:e}=Ue(),o=je();return o.isActionEnabled(ki)?De(go,{shortcut:tt("saveScene"),"data-testid":"save-button",onSelect:()=>o.executeAction(ki),icon:Xf,"aria-label":`${e("buttons.save")}`,children:`${e("buttons.save")}`}):null};MS.displayName="SaveToActiveFile";var AS=()=>{let e=Ie(),{t:o}=Ue();return De(go,{icon:Rc,"data-testid":"image-export-button",onSelect:()=>e({openDialog:{name:"imageExport"}}),shortcut:tt("imageExport"),"aria-label":o("buttons.exportImage"),children:o("buttons.exportImage")})};AS.displayName="SaveAsImage";var LS=e=>{let o=Ie(),{t}=Ue();return De(go,{icon:kl,"data-testid":"command-palette-button",onSelect:()=>{xe("command_palette","open","menu"),o({openDialog:{name:"commandPalette"}})},shortcut:tt("commandPalette"),"aria-label":t("commandPalette.title"),className:e?.className,children:t("commandPalette.title")})};LS.displayName="CommandPalette";var _S=e=>{let{t:o}=Ue(),t=je();return De(go,{icon:Io,"data-testid":"search-menu-button",onSelect:()=>{t.executeAction(ss)},shortcut:tt("searchMenu"),"aria-label":o("search.title"),className:e?.className,children:o("search.title")})};_S.displayName="SearchMenu";var PS=()=>{let{t:e}=Ue(),o=je();return De(go,{"data-testid":"help-menu-item",icon:fa,onSelect:()=>o.executeAction(Mi),shortcut:"?","aria-label":e("helpDialog.title"),children:e("helpDialog.title")})};PS.displayName="Help";var DS=()=>{let{t:e}=Ue(),o=Kr(La);return je().isActionEnabled(Qr)?De(go,{icon:Kt,onSelect:()=>o("clearCanvas"),"data-testid":"clear-canvas-button","aria-label":e("buttons.clearReset"),children:e("buttons.clearReset")}):null};DS.displayName="ClearCanvas";var RS=e=>{let{t:o}=Ue(),t=fe(),r=je(),n=tt("toggleTheme"),i=Sr();return r.isActionEnabled(Nn)?e?.allowSystemTheme?De(bx,{name:"theme",value:e.theme,onChange:a=>{if(i.onThemeChange){i.onThemeChange(a);return}console.warn("MainMenu.DefaultItems.ToggleTheme: `<Excalidraw/> props.onThemeChange` must be defined to use system theme selection.")},choices:[{value:te.LIGHT,label:Cl,ariaLabel:`${o("buttons.lightMode")} - ${n}`},{value:te.DARK,label:Tl,ariaLabel:`${o("buttons.darkMode")} - ${n}`},{value:"system",label:p1,ariaLabel:o("buttons.systemMode")}],children:o("labels.theme")}):De(go,{onSelect:a=>{a.preventDefault(),r.executeAction(Nn)},icon:t.theme===te.DARK?Cl:Tl,"data-testid":"toggle-dark-mode",shortcut:n,"aria-label":t.theme===te.DARK?o("buttons.lightMode"):o("buttons.darkMode"),children:t.theme===te.DARK?o("buttons.lightMode"):o("buttons.darkMode")}):null};RS.displayName="ToggleTheme";var NS=()=>{let{t:e}=Ue(),o=fe(),t=je(),r=Sr();return o.viewModeEnabled||!r.UIOptions.canvasActions.changeViewBackgroundColor?null:Md("div",{style:{marginTop:"0.75rem"},children:[De("div",{"data-testid":"canvas-background-label",style:{fontSize:"0.875rem",marginBottom:"0.25rem",marginLeft:"0.5rem"},children:e("labels.canvasBackground")}),De("div",{style:{padding:"0 0.625rem"},children:t.renderAction("changeViewBackgroundColor")})]})};NS.displayName="ChangeCanvasBackground";var OS=()=>{let{t:e}=Ue(),o=Ie();return De(go,{icon:fi,onSelect:()=>{o({openDialog:{name:"jsonExport"}})},"data-testid":"json-export-button","aria-label":e("buttons.export"),children:e("buttons.export")})};OS.displayName="Export";var FS=()=>{let{t:e}=Ue();return Md(KS,{children:[De(as,{icon:Pc,href:"https://github.com/excalidraw/excalidraw","aria-label":"GitHub",children:"GitHub"}),De(as,{icon:Kf,href:"https://x.com/excalidraw","aria-label":"X",children:e("labels.followUs")}),De(as,{icon:Yf,href:"https://discord.gg/UexuTaE","aria-label":"Discord",children:e("labels.discordChat")})]})};FS.displayName="Socials";var BS=({onSelect:e,isCollaborating:o})=>{let{t}=Ue();return De(go,{"data-testid":"collab-button",icon:Nc,className:$D({"active-collab":o}),onSelect:e,children:t("labels.liveCollaboration")})};BS.displayName="LiveCollaborationTrigger";var zS=()=>{let{t:e}=Ue(),o=Ke(),t=fe();return De(Mr,{checked:t.activeTool.locked,shortcut:tt("toolLock"),onSelect:r=>{o.toggleLock(),r.preventDefault()},children:e("labels.preferences_toolLock")})},HS=()=>{let{t:e}=Ue(),o=fe(),t=Ie();return De(bx,{name:"boxSelectionMode",icon:Gc,value:o.boxSelectionMode,onChange:r=>{t({boxSelectionMode:r})},choices:[{value:"contain",label:e("labels.boxSelectionContain"),ariaLabel:e("labels.boxSelectionContain")},{value:"overlap",label:e("labels.boxSelectionOverlap"),ariaLabel:e("labels.boxSelectionOverlap")}],children:e("labels.boxSelectionMode")})},US=()=>{let{t:e}=Ue(),o=je(),t=fe();return De(Mr,{checked:t.objectsSnapModeEnabled,shortcut:tt("objectsSnapMode"),onSelect:r=>{o.executeAction(Yl),r.preventDefault()},children:e("buttons.objectsSnapMode")})},GS=()=>{let{t:e}=Ue(),o=je(),t=fe();return De(Mr,{checked:t.bindingPreference==="enabled",onSelect:r=>{o.executeAction(Kl),r.preventDefault()},children:e("labels.arrowBinding")})},WS=()=>{let{t:e}=Ue(),o=je(),t=fe();return De(Mr,{checked:t.isMidpointSnappingEnabled,onSelect:r=>{o.executeAction(Xl),r.preventDefault()},children:e("labels.midpointSnapping")})},xx=()=>{let{t:e}=Ue(),o=je(),t=fe();return De(Mr,{checked:t.gridModeEnabled,shortcut:tt("gridMode"),onSelect:r=>{o.executeAction(Ma),r.preventDefault()},children:e("labels.toggleGrid")})},Ex=()=>{let{t:e}=Ue(),o=je(),t=fe();return De(Mr,{checked:t.zenModeEnabled,shortcut:tt("zenMode"),onSelect:r=>{o.executeAction(On),r.preventDefault()},children:e("buttons.zenMode")})},VS=()=>{let{t:e}=Ue(),o=je(),t=fe();return o.isActionEnabled(Di)?De(Mr,{checked:t.viewModeEnabled,shortcut:tt("viewMode"),onSelect:r=>{o.executeAction(Di),r.preventDefault()},children:e("labels.viewMode")}):null},YS=()=>{let{t:e}=Ue(),o=je(),t=fe();return De(Mr,{checked:t.stats.open,shortcut:tt("stats"),onSelect:r=>{o.executeAction(Fn),r.preventDefault()},children:e("stats.fullTitle")})},Dr=({children:e,additionalItems:o})=>{let{t}=Ue();return Md(Li,{children:[De(Li.Trigger,{icon:T1,children:t("labels.preferences")}),Md(Li.Content,{className:"excalidraw-main-menu-preferences-submenu",children:[e||Md(KS,{children:[De(HS,{}),De(zS,{}),De(US,{}),De(xx,{}),De(Ex,{}),De(VS,{}),De(YS,{}),De(GS,{}),De(WS,{})]}),o]})]})};Dr.ToggleToolLock=zS;Dr.BoxSelectionMode=HS;Dr.ToggleSnapMode=US;Dr.ToggleArrowBinding=GS;Dr.ToggleMidpointSnapping=WS;Dr.ToggleGridMode=xx;Dr.ToggleZenMode=Ex;Dr.ToggleViewMode=VS;Dr.ToggleElementProperties=YS;Dr.displayName="Preferences";import{jsx as Bh,jsxs as vx}from"react/jsx-runtime";var jD=Object.assign(Wn("MainMenu",({children:e,onSelect:o})=>{let{MainMenuTunnel:t}=ot(),r=Me(),n=fe(),i=Ie();return Bh(t.In,{children:vx(pe,{open:n.openMenu==="canvas",children:[Bh(pe.Trigger,{onToggle:()=>{i({openMenu:n.openMenu==="canvas"?null:"canvas",openPopup:null,openDialog:null})},"data-testid":"main-menu-trigger",className:"main-menu-trigger",children:Wf}),vx(pe.Content,{onClickOutside:()=>i({openMenu:null}),onSelect:oi(o,()=>{i({openMenu:null})}),className:"main-menu",align:"start",children:[e,r.formFactor==="phone"&&n.collaborators.size>0&&vx("fieldset",{className:"UserList-Wrapper",children:[Bh("legend",{children:h("labels.collaborators")}),Bh(Nh,{mobile:!0,collaborators:n.collaborators,userToFollow:n.userToFollow?.socketId||null})]})]})]})})}),{Trigger:pe.Trigger,Item:pe.Item,ItemLink:pe.ItemLink,ItemCustom:pe.ItemCustom,Group:pe.Group,Separator:pe.Separator,Sub:Li,DefaultItems:yx}),mo=jD;import qD from"clsx";import{forwardRef as JD,useState as QD}from"react";import{jsx as zh,jsxs as e8}from"react/jsx-runtime";var dr=JD(({children:e,icon:o,onClick:t,label:r,variant:n="filled",color:i="primary",size:a="medium",fullWidth:l,className:s,status:c,disabled:d},p)=>{let[m,u]=QD(!1),b=async x=>{let v=t?.(x);if(ti(v)){let y=window.setTimeout(()=>{u(!0)},50);try{await v}catch(E){if(E instanceof ul)console.warn(E);else throw E}finally{clearTimeout(y),u(!1)}}},f=m?"loading":c;return i=f==="success"?"success":i,zh("button",{className:qD("ExcButton",`ExcButton--color-${i}`,`ExcButton--variant-${n}`,`ExcButton--size-${a}`,`ExcButton--status-${f}`,{"ExcButton--fullWidth":l},s),onClick:b,type:"button","aria-label":r,ref:p,disabled:d||f==="loading"||f==="success",children:e8("div",{className:"ExcButton__contents",children:[f==="loading"?zh(Ht,{className:"ExcButton__statusIcon"}):f==="success"&&zh("div",{className:"ExcButton__statusIcon",children:Kb}),o&&zh("div",{className:"ExcButton__icon","aria-hidden":!0,children:o}),n!=="icon"&&(e??r)]})})});import{jsx as Ts,jsxs as r8}from"react/jsx-runtime";var Hh=({title:e,children:o,actionLabel:t,onClick:r})=>r8("div",{className:"OverwriteConfirm__Actions__Action",children:[Ts("h4",{children:e}),Ts("div",{className:"OverwriteConfirm__Actions__Action__content",children:o}),Ts(dr,{variant:"outlined",color:"muted",label:t,size:"large",fullWidth:!0,onClick:r})]}),t8=()=>{let{t:e}=Ue(),o=je(),t=Ie();return Ts(Hh,{title:e("overwriteConfirm.action.exportToImage.title"),actionLabel:e("overwriteConfirm.action.exportToImage.button"),onClick:()=>{o.executeAction(Tu,"ui",!0),t({openDialog:{name:"imageExport"}})},children:e("overwriteConfirm.action.exportToImage.description")})},o8=()=>{let{t:e}=Ue(),o=je();return Ts(Hh,{title:e("overwriteConfirm.action.saveToDisk.title"),actionLabel:e("overwriteConfirm.action.saveToDisk.button"),onClick:()=>{o.executeAction(Ul,"ui")},children:e("overwriteConfirm.action.saveToDisk.description")})},wx=Object.assign(({children:e})=>Ts("div",{className:"OverwriteConfirm__Actions",children:e}),{ExportToImage:t8,SaveToDisk:o8});import{jsx as zi,jsxs as XS}from"react/jsx-runtime";var Uh=Object.assign(Wn("OverwriteConfirmDialog",({children:e})=>{let{OverwriteConfirmDialogTunnel:o}=ot(),[t,r]=re(fx);if(!t.active)return null;let n=()=>{t.onClose(),r(a=>({...a,active:!1}))},i=()=>{t.onConfirm(),r(a=>({...a,active:!1}))};return zi(o.In,{children:zi(kt,{onCloseRequest:n,title:!1,size:916,children:XS("div",{className:"OverwriteConfirm",children:[zi("h3",{children:t.title}),XS("div",{className:`OverwriteConfirm__Description OverwriteConfirm__Description--color-${t.color}`,children:[zi("div",{className:"OverwriteConfirm__Description__icon",children:Bc}),zi("div",{children:t.description}),zi("div",{className:"OverwriteConfirm__Description__spacer"}),zi(dr,{color:t.color,size:"large",label:t.actionLabel,onClick:i})]}),zi(wx,{children:e})]})})})}),{Actions:wx,Action:Hh});import x8 from"clsx";import n8 from"clsx";import i8 from"lodash.debounce";import{Fragment as a8,memo as l8,useEffect as Ad,useMemo as ZS,useRef as Tx,useState as $S}from"react";import{Fragment as b8,jsx as jt,jsxs as cn}from"react/jsx-runtime";var s8=Ce(""),Cx=Ce(null),c8=350,QS=()=>{let e=Ke(),o=Ie(),t=Tx(null),[r,n]=re(s8),i=r.trim(),[a,l]=$S(!1),[s,c]=$S({nonce:null,items:[]}),d=Tx(null),p=Tx(void 0),[m,u]=re(Cx),b=e.scene.getNonDeletedElementsMap();Ad(()=>{a||(i!==d.current||e.scene.getSceneNonce()!==p.current)&&(d.current=null,JS(i,e,(E,w)=>{c({nonce:bn(),items:E}),d.current=i,p.current=e.scene.getSceneNonce(),o({searchMatches:E.length?{focusedId:null,matches:E.map(T=>({id:T.element.id,focus:!1,matchedLines:T.matchedLines}))}:null})}))},[a,i,b,e,o,u,p]);let f=()=>{s.items.length>0&&u(E=>E===null?0:(E+1)%s.items.length)},x=()=>{s.items.length>0&&u(E=>E===null?0:E-1<0?s.items.length-1:E-1)};Ad(()=>{o(E=>E.searchMatches?{searchMatches:{focusedId:m!==null&&E.searchMatches?.matches[m]?.id||null,matches:E.searchMatches.matches.map((T,S)=>S===m?{...T,focus:!0}:{...T,focus:!1})}}:null)},[m,o]),Ad(()=>{if(s.items.length>0&&m!==null){let E=s.items[m];if(E){let w=e.state.zoom.value,T=Qt({text:E.searchQuery,x:E.element.x+(E.matchedLines[0]?.offsetX??0),y:E.element.y+(E.matchedLines[0]?.offsetY??0),width:E.matchedLines[0]?.width,height:E.matchedLines[0]?.height,fontSize:oe(E.element)?Je.nameFontSize:E.element.fontSize,fontFamily:oe(E.element)?st.Assistant:E.element.fontFamily}),S=14,_=T.fontSize,M=_*w<S;if(!Wm([T],e.canvas.width/window.devicePixelRatio,e.canvas.height/window.devicePixelRatio,{offsetLeft:e.state.offsetLeft,offsetTop:e.state.offsetTop,scrollX:e.state.scrollX,scrollY:e.state.scrollY,zoom:e.state.zoom},e.scene.getNonDeletedElementsMap(),e.viewport.getOffsets())||M){let N=M&&_<S?"contain":"scale-down";e.viewport.setViewport({target:ye([T]),fit:N,animation:{duration:300},offsets:{ui:!0}})}}}},[m,s,e]),Ad(()=>()=>{u(null),d.current=null,p.current=void 0,o({searchMatches:null}),l(!1)},[o,u]);let v=yi({goToNextItem:f,goToPreviousItem:x,searchMatches:s});Ad(()=>{let E=w=>{if(w.key===I.ESCAPE&&!e.state.openDialog&&!e.state.openPopup){w.preventDefault(),w.stopPropagation(),o({openSidebar:null});return}if(w[I.CTRL_OR_CMD]&&w.key===I.F){if(w.preventDefault(),w.stopPropagation(),e.state.openDialog)return;t.current?.matches(":focus")||(e.state.openDialog&&o({openDialog:null}),t.current?.focus(),t.current?.select())}w.target instanceof HTMLElement&&w.target.closest(".layer-ui__search")&&v.searchMatches.items.length&&(w.key===I.ENTER&&(w.stopPropagation(),v.goToNextItem()),w.key===I.ARROW_UP?(w.stopPropagation(),v.goToPreviousItem()):w.key===I.ARROW_DOWN&&(w.stopPropagation(),v.goToNextItem()))};return _e(window,"keydown",E,{capture:!0,passive:!1})},[o,v,e]);let y=`${s.items.length} ${s.items.length===1?h("search.singleResult"):h("search.multipleResults")}`;return cn("div",{className:"layer-ui__search",children:[jt("div",{className:"layer-ui__search-header",children:jt(_i,{className:qe.SEARCH_MENU_INPUT_WRAPPER,value:r,ref:t,placeholder:h("search.placeholder"),icon:Io,onChange:E=>{n(E),l(!0);let w=E.trim();JS(w,e,(T,S)=>{c({nonce:bn(),items:T}),u(S),d.current=w,p.current=e.scene.getSceneNonce(),o({searchMatches:T.length?{focusedId:null,matches:T.map(_=>({id:_.element.id,focus:!1,matchedLines:_.matchedLines}))}:null}),l(!1)})},selectOnRender:!0})}),cn("div",{className:"layer-ui__search-count",children:[s.items.length>0&&cn(b8,{children:[m!==null&&m>-1?cn("div",{children:[m+1," / ",y]}):jt("div",{children:y}),cn("div",{className:"result-nav",children:[jt(ro,{onSelect:()=>{f()},className:"result-nav-btn",children:Hc}),jt(ro,{onSelect:()=>{x()},className:"result-nav-btn",children:b1})]})]}),s.items.length===0&&i&&d.current&&jt("div",{style:{margin:"1rem auto"},children:h("search.noMatch")})]}),jt(p8,{matches:s,onItemClick:u,focusIndex:m,searchQuery:i})]})},jS=e=>{let o=[e.preview.moreBefore?"...":"",e.preview.previewText.slice(0,e.preview.indexInSearchQuery),e.preview.previewText.slice(e.preview.indexInSearchQuery,e.preview.indexInSearchQuery+e.searchQuery.length),e.preview.previewText.slice(e.preview.indexInSearchQuery+e.searchQuery.length),e.preview.moreAfter?"...":""];return jt("div",{tabIndex:-1,className:n8("layer-ui__result-item",{active:e.highlighted}),onClick:e.onClick,ref:t=>{e.highlighted&&t?.scrollIntoView({behavior:"auto",block:"nearest"})},children:jt("div",{className:"preview-text",children:o.flatMap((t,r)=>jt(a8,{children:r===2?jt("b",{children:t}):t},r))})})},d8=e=>{let o=ZS(()=>e.matches.items.filter(r=>oe(r.element)),[e.matches]),t=ZS(()=>e.matches.items.filter(r=>j(r.element)),[e.matches]);return cn("div",{children:[o.length>0&&cn("div",{className:"layer-ui__search-result-container",children:[cn("div",{className:"layer-ui__search-result-title",children:[jt("div",{className:"title-icon",children:Cr}),jt("div",{children:h("search.frames")})]}),o.map((r,n)=>jt(jS,{searchQuery:e.searchQuery,preview:r.preview,highlighted:n===e.focusIndex,onClick:()=>e.onItemClick(n)},r.element.id+r.index)),t.length>0&&jt("div",{className:"layer-ui__divider"})]}),t.length>0&&cn("div",{className:"layer-ui__search-result-container",children:[cn("div",{className:"layer-ui__search-result-title",children:[jt("div",{className:"title-icon",children:$r}),jt("div",{children:h("search.texts")})]}),t.map((r,n)=>jt(jS,{searchQuery:e.searchQuery,preview:r.preview,highlighted:n+o.length===e.focusIndex,onClick:()=>e.onItemClick(n+o.length)},r.element.id+r.index))]})]})},m8=(e,o)=>e.matches.nonce===o.matches.nonce&&e.focusIndex===o.focusIndex,p8=l8(d8,m8),qS=(e,o,t)=>{let i=e.slice(0,o),a=i.split(/\s+/),l=i.endsWith(" "),s=a.length-2-1-(l?0:1),c=a.slice(s<=0?0:s).join(" ")+(l?" ":""),d=20;c=c.length>d?c.slice(-d):c;let p=e.slice(o+t.length),m=p.split(/\s+/),u=!p.startsWith(" "),b=u?6:5,f=(u?"":" ")+m.slice(0,b).join(" ");return{indexInSearchQuery:c.length,previewText:c+t+f,moreBefore:s>0,moreAfter:m.length>b}},u8=(e,o)=>{let t=e.split(`
|
|
24
|
-
`),r=[],n=0;for(let i=0;i<
|
|
25
|
-
`)},
|
|
26
|
-
`),i=[],a=0,
|
|
27
|
-
`:""]},`error-line-${m}`))}),!r&&
|
|
28
|
-
`)},
|
|
29
|
-
`);return null},
|
|
30
|
-
`):null},
|
|
23
|
+
`)}`;this.set(`url(${a}) 5 20, auto`)}else["image","custom"].includes(t.type)?t.type!=="image"&&this.set(Be.AUTO):this.set(Be.CROSSHAIR);this.toolCursorMemo={canvas:o,type:t.type,bucketFillColor:n,theme:r}}});T(this,"refreshHover",()=>{let t=this.app.lastPointerMoveEvent??this.app.lastPointerUpEvent;if(!t||!this.canvas)return;let o=t.pointerType;if(o&&o!=="mouse")return;let r=typeof PointerEvent<"u"?PointerEvent:MouseEvent;this.canvas.dispatchEvent(new r("pointermove",{bubbles:!0,cancelable:!0,clientX:t.clientX,clientY:t.clientY}))});T(this,"clear",()=>{this.set("")});T(this,"applyEraser",()=>{let o=this.app.state.theme;if(!this.eraserCanvasCache||this.eraserCanvasCache.theme!==o){let r=o===Q.DARK;this.eraserCanvasCache=document.createElement("canvas"),this.eraserCanvasCache.theme=o,this.eraserCanvasCache.height=20,this.eraserCanvasCache.width=20;let n=this.eraserCanvasCache.getContext("2d");n.lineWidth=1,n.beginPath(),n.arc(this.eraserCanvasCache.width/2,this.eraserCanvasCache.height/2,5,0,2*Math.PI),n.fillStyle=r?"#000":"#fff",n.fill(),n.strokeStyle=r?"#fff":"#000",n.stroke(),this.eraserPreviewDataURL=this.eraserCanvasCache.toDataURL(ue.svg)}this.set(`url(${this.eraserPreviewDataURL}) ${20/2} ${20/2}, auto`)})}get canvas(){return this.app.interactiveCanvas}};var lg=class{constructor(t){this.app=t;T(this,"trail");this.trail=new Gr(this.app,{...this.getTrailOptions(),fill:()=>t.state.theme===Q.LIGHT?"rgba(0, 0, 0, 0.2)":"rgba(255, 255, 255, 0.2)"})}getTrailOptions(){return{simplify:0,streamline:.4,size:1,sizeMapping:()=>Je(Zr("line",this.app.state.currentItemStrokeWidthKey)*.65*this.app.state.zoom.value,1.25,4)}}startPath(t,o){this.trail.startPath(t,o)}addPointToPath(t,o){this.trail.addPointToPath(t,o)}endPath(){this.trail.endPath()}clearTrails(){this.trail.clearTrails()}getCurrentPoints(){let t=this.trail.getCurrentTrail();return t?t.originalPoints.map(([o,r])=>_(o,r)):[]}start(t){this.trail.start(t)}stop(){this.trail.stop()}};var cg=class{constructor(t){this.app=t;T(this,"trail");T(this,"gestureInProgress",!1);T(this,"stop",()=>{this.trail.stop()});T(this,"hasPendingGesture",()=>this.gestureInProgress);T(this,"handlePointerDown",t=>{this.gestureInProgress&&this.app.actionManager.executeAction(Xt),this.gestureInProgress=!0,this.trail.startPath(t.lastCoords.x,t.lastCoords.y)});T(this,"handlePointerMove",t=>M2(this.app,t));T(this,"bindRecognizedArrow",t=>{let{app:o}=this,r=o.scene.getNonDeletedElementsMap(),n=o.scene.getNonDeletedElements(),i=ki(o.state.zoom),a=["start","end"].map(d=>{let p=j.getPointAtIndexGlobalCoordinates(t,d==="start"?0:-1,r);return{startOrEnd:d,globalPoint:p,target:lr(p,n,r,i)}}),s=!!a[0].target&&a[0].target===a[1].target,l=o.state.isMidpointSnappingEnabled&&!o.state.gridModeEnabled;for(let{startOrEnd:d,globalPoint:p,target:m}of a)m&&Rc(t,m,s?"inside":"orbit",d,o.scene,p,o.state.isBindingEnabled,l);if(s)return;let c=new Map;for(let{startOrEnd:d,target:p}of a){if(!p)continue;let m=dw(t,d==="start"?"startBinding":"endBinding",d==="start"?t.startBinding:t.endBinding,p,r);m&&c.set(d==="start"?0:t.points.length-1,{point:m})}c.size&&j.movePoints(t,o.scene,c)});T(this,"maybeUpgradeLineToArrow",t=>{let{app:o}=this,r=o.scene.getNonDeletedElementsMap(),n=o.scene.getNonDeletedElements(),i=ki(o.state.zoom),[a,s]=[0,-1].map(l=>lr(j.getPointAtIndexGlobalCoordinates(t,l,r),n,r,i));return!a&&!s||a===s?null:_i({type:"arrow",x:t.x,y:t.y,width:t.width,height:t.height,startArrowhead:null,endArrowhead:o.state.currentItemEndArrowhead,points:t.points,groupIds:t.groupIds,frameId:t.frameId,locked:!1,angle:t.angle,strokeColor:t.strokeColor,backgroundColor:t.backgroundColor,fillStyle:t.fillStyle,roughness:t.roughness,opacity:t.opacity,strokeStyle:t.strokeStyle,strokeWidth:t.strokeWidth})});T(this,"finalize",()=>{let{app:t}=this,o=this.gestureInProgress?this.trail.getCurrentPoints():[];if(this.gestureInProgress=!1,this.trail.endPath(),o.length>=3){let r=t.state.newElement||k2(o,t.state,t.scene.getNonDeletedElementsMap(),t.state.newElement,t.scene.getNonDeletedFramesLikes());if(r){let n={...r,seed:Mn(),opacity:t.state.currentItemOpacity};t.state.isBindingEnabled&&ct(n)&&(n=this.maybeUpgradeLineToArrow(n)??n),t.insertNewElement(n),t.state.isBindingEnabled&&Vt(n)&&this.bindRecognizedArrow(n)}}this.trail.clearTrails()});this.trail=new lg(t)}};var dg=class e{constructor(t){this.app=t;T(this,"creator",new a2);T(this,"navigator",new i2);T(this,"clear",()=>{this.creator.clear(),this.navigator.clear()});T(this,"handleKeyEvent",t=>{let o=this.resolveKeyboardEventToOperation(t);switch(o.type){case"none":return!1;case"canceled":return this.app.triggerRender(!0),!0;case"creating":return t.preventDefault(),o.pending.length&&this.app.revealIfHidden(o.pending),!0;case"navigating":{t.preventDefault();let r=o.nodeId&&this.app.scene.getNonDeletedElementsMap().get(o.nodeId);return r&&this.selectAndReveal(r),!0}case"committed":{o.nodes.length&&this.app.insertNewElements(o.nodes);let r=o.nodes[0];return r&&this.selectAndReveal(r),this.captureUpdate(),!0}case"navigationEnded":return this.captureUpdate(),!0}})}get pendingNodes(){return this.creator.pendingNodes}get isCreatingChart(){return this.creator.isCreatingChart}resolveKeyboardEventToOperation(t){let{creator:o,navigator:r,app:n}=this;if(t.type==="keydown"){if(t.key===S.ESCAPE&&o.isCreatingChart)return o.clear(),{type:"canceled"};if(!Ei(t.key))return{type:"none"};if(t[S.CTRL_OR_CMD]&&!t.shiftKey){let a=ie(n.scene.getNonDeletedElementsMap(),n.state);return a.length===1&&qm(a[0])&&o.createNodes(a[0],n.state,e.getLinkDirectionFromKey(t.key),n.scene),{type:"creating",pending:o.pendingNodes??[]}}if(t.altKey){let a=n.scene.getNonDeletedElementsMap(),s=ie(a,n.state);if(s.length===1)return{type:"navigating",nodeId:r.exploreByDirection(s[0],a,e.getLinkDirectionFromKey(t.key))}}return{type:"none"}}let i=!t.altKey&&r.isExploring;if(i&&r.clear(),!t[S.CTRL_OR_CMD]&&o.isCreatingChart){let a=o.pendingNodes??[];return o.clear(),{type:"committed",nodes:a}}return i?{type:"navigationEnded"}:{type:"none"}}selectAndReveal(t){this.app.setState(o=>({selectedElementIds:Ue({[t.id]:!0},o)})),this.app.revealIfHidden([t])}captureUpdate(){this.app.syncActionResult({captureUpdate:O.IMMEDIATELY})}static getLinkDirectionFromKey(t){switch(t){case S.ARROW_UP:return"up";case S.ARROW_DOWN:return"down";case S.ARROW_RIGHT:return"right";case S.ARROW_LEFT:return"left";default:return"right"}}};var mg="animateScrollToContent",Gl="animateScrollConstraintsSnapBack",n3=500,C8=250,S8=200,W0=302,i3={full:216,compact:64},I8=e=>{if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return typeof t.x=="number"&&typeof t.y=="number"&&(t.width==null||typeof t.width=="number")&&(t.height==null||typeof t.height=="number")},k8=(e,t)=>{let o=t.get(e);return o?[o]:Ye(t,e)},a3=(e,t,o)=>{if(typeof e=="string"){let a=Ra(e),s=a?"link":"element",l=a?r2(e):e,c=l?k8(l,t):[];return c.length?{bounds:Te(c,t),type:s}:{bounds:null,type:s}}if(fy(e))return{bounds:e,type:"area"};if(I8(e)&&!Ia(e)){let a=e.width??o.width,s=e.height??o.height;return{bounds:[e.x,e.y,e.x+a,e.y+s],type:"area"}}let r=Array.isArray(e)?e:[e],n=r.reduce((a,s)=>{if(s&&!s.isDeleted){let l=t.get(s.id);l&&a.push(l)}return a},[]),i=!n.length;return(n.length!==r.length||i)&&console.warn("supplied element target(s) for setViewport contain deleted or non-existent elements which have been filtered out"),i?{bounds:null,type:"element"}:{bounds:Te(n,t),type:"element"}},M8=e=>e===!1?0:e===!0||e==null?cb:Math.max(e,0),A8=(e,t,o="scale-down",r)=>{let{appState:n}=Oa({bounds:t,appState:e,fit:o,canvasOffsets:r,steppedZoom:!1});return{scrollX:n.scrollX,scrollY:n.scrollY,zoom:n.zoom}},s3=(e,t,{fit:o,offsets:r,lock:n})=>{let i=A8(e,t,o,r);if(!n?.scroll&&!n?.zoom)return{...i,scrollConstraints:null};let[a,s,l,c]=t,d={x:a,y:s,width:l-a,height:c-s,lockScroll:!!n.scroll,lockZoom:!!n.zoom,zoom:i.zoom.value,overscroll:M8(n.overscroll),offsets:r};return{...on({...e,...i,scrollConstraints:d}),scrollConstraints:d}},L8=({from:e,target:t,factor:o})=>{if(o>=1)return{...t};let r=e.zoom.value*Math.pow(t.zoom.value/e.zoom.value,o),n=t.zoom.value===e.zoom.value?o:(r-e.zoom.value)/(t.zoom.value-e.zoom.value);return{scrollX:((1-n)*e.scrollX*e.zoom.value+n*t.scrollX*t.zoom.value)/r,scrollY:((1-n)*e.scrollY*e.zoom.value+n*t.scrollY*t.zoom.value)/r,zoom:{value:r}}},_8=e=>e===!1?null:e===!0||e==null?n3:e.duration??n3,P8=(e,t,o,r,n)=>{Bt.start(mg,({deltaTime:i,state:a})=>{let s=(a?.elapsed??0)+i,l=Math.min(s/o,1),c=ir(Je(l,0,1));return l<1?(r({...L8({from:e,target:t,factor:c}),shouldCacheIgnoreZoom:!0}),{elapsed:s}):(n(),null)})},D8=(e,t,o=C8)=>{let r=on(e);if(r.scrollX===e.scrollX&&r.scrollY===e.scrollY&&r.zoom.value===e.zoom.value||Bt.running(mg))return;let n=(e.scrollX-r.scrollX)*e.zoom.value,i=(e.scrollY-r.scrollY)*e.zoom.value;Bt.start(Gl,({deltaTime:a,state:s})=>{let l=(s?.elapsed??0)+a,c=Math.min(l/o,1),d=1-ir(Je(c,0,1));return t(p=>{if(!p.scrollConstraints)return null;let m=on(p),u=m.zoom.value;return{scrollX:m.scrollX+n*d/u,scrollY:m.scrollY+i*d/u,zoom:m.zoom}}),c<1?{elapsed:l}:null})},pg=class{constructor(t,o){this.app=t;this.dependencies=o;T(this,"lastPosition",{x:0,y:0});T(this,"activeTransition",null);T(this,"uiLastMeasured",new Map);T(this,"invalidateUIOffset",t=>{this.uiLastMeasured.delete(t)});T(this,"resolveOffsets",t=>{if(!t)return t;let{ui:o,...r}=t;if(!o)return r;let n=this.getOffsets(o===!0?void 0:o);return{top:r.top??n.top,right:r.right??n.right,bottom:r.bottom??n.bottom,left:r.left??n.left}});T(this,"getOffsets",t=>{let o=this.dependencies.getContainer(),r=o?.getBoundingClientRect(),n=sn().rtl,i={top:0,right:0,bottom:0,left:0},a=new Set;if(o&&r)for(let u of o.querySelectorAll("[data-viewport-ui]")){let b=u.getBoundingClientRect(),f={top:b.top-r.top,right:b.right-r.left,bottom:b.bottom-r.top,left:b.left-r.left,width:b.width};switch(u.dataset.viewportUi){case"top":i.top=Math.max(i.top,f.bottom);break;case"bottom":i.bottom=Math.max(i.bottom,this.app.state.height-f.top);break;case"side":{let[x,v]=f.left+f.width/2<this.app.state.width/2?["left",f.right]:["right",this.app.state.width-f.left];i[x]=Math.max(i[x],v);let y=u.dataset.viewportUiName;y&&(a.add(y),v>0&&this.uiLastMeasured.set(y,{side:x,offset:v}));break}}}if(t?.reserve&&this.app.editorInterface.formFactor!=="phone"){let u=(b,f)=>{if(a.has(b))return;let{side:x,offset:v}=this.uiLastMeasured.get(b)??f;i[x]=Math.max(i[x],v)};t.reserve.stylesPanel&&u("stylesPanel",{side:n?"right":"left",offset:this.dependencies.getStylesPanelMode()==="compact"?i3.compact:i3.full}),t.reserve.sidebar&&u("sidebar",{side:n?"left":"right",offset:W0})}let s=t?.padding??24,l=t?.paddingTop??s,c=(n?t?.paddingLeft:t?.paddingRight)??s,d=t?.paddingBottom??s,p=(n?t?.paddingRight:t?.paddingLeft)??s,m={top:i.top+l,right:i.right+c,bottom:i.bottom+d,left:i.left+p};return{top:t?.top??m.top,right:(n?t?.left:t?.right)??m.right,bottom:t?.bottom??m.bottom,left:(n?t?.right:t?.left)??m.left}});T(this,"resolveInitialViewport",(t,o,r)=>{let{bounds:n}=a3(t.target,o,r);return n?s3(r,n,{...t,offsets:this.resolveOffsets(t.offsets)}):null});T(this,"setViewport",t=>{if(t===null){this.cancelTransition(),Bt.cancel(Gl),this.snapBackDebounced.cancel(),this.app.setState({scrollConstraints:null,shouldCacheIgnoreZoom:!1});return}let{target:o,fit:r,lock:n,animation:i}=t,a=this.resolveOffsets(t.offsets),{bounds:s,type:l}=a3(o,this.app.scene.getNonDeletedElementsMap(),this.app.state);if(!s){l==="link"&&this.app.setState({toast:{message:h("elementLink.notFound"),duration:3e3,closable:!0}});return}let c=s3(this.app.state,s,{fit:r,offsets:a,lock:n}),d=_8(i),p={scrollX:this.app.state.scrollX,scrollY:this.app.state.scrollY,zoom:this.app.state.zoom};if(this.cancelTransition(),Bt.cancel(Gl),this.snapBackDebounced.cancel(),d===null){this.app.setState({...c,shouldCacheIgnoreZoom:!1});return}let m={target:c};this.activeTransition=m,this.app.state.scrollConstraints&&this.app.setState({scrollConstraints:null}),P8(p,c,d,u=>{this.activeTransition===m&&this.app.setState(u)},()=>{this.activeTransition===m&&(this.activeTransition=null,this.app.setState({...m.target,shouldCacheIgnoreZoom:!1}))})});T(this,"translate",(t,o)=>this.isLockedTransitionPending?!1:(this.activeTransition&&this.app.setState({shouldCacheIgnoreZoom:!1}),this.cancelTransition(),o?.preserveScrollConstraintsSnapBack||Bt.cancel(Gl),this.app.requestUnfollow(),this.app.setState((r,n)=>{let i=typeof t=="function"?t(r,n):t;if(!i)return null;let a={...r,...i};if(!a.scrollConstraints)return i;let l=!o?.zoomPreConstrained&&a.zoom.value!==r.zoom.value?0:a.scrollConstraints.overscroll;return l>0&&this.snapBackDebounced(),{...a,...on(a,l)}}),!0));T(this,"constrain",(t=0)=>{this.app.setState(o=>o.scrollConstraints?on(o,t):null)});T(this,"releaseOverscroll",()=>{this.app.state.scrollConstraints&&(this.snapBackDebounced.cancel(),this.snapBack())});T(this,"snapBack",()=>{this.app.unmounted||this.dependencies.isGestureActive()||D8(this.app.state,t=>this.app.setState(o=>t(o)))});T(this,"snapBackDebounced",kn(this.snapBack,S8));T(this,"cancelTransition",()=>{this.activeTransition=null,Bt.cancel(mg)});T(this,"destroy",()=>{this.cancelTransition(),Bt.cancel(Gl),this.snapBackDebounced.cancel()})}get isAnimating(){return Bt.running(mg)||Bt.running(Gl)}get isLockedTransitionPending(){return!!this.activeTransition?.target.scrollConstraints}};var R8=4,ug=class{constructor(t,o){this.app=t;this.dependencies=o;T(this,"isOverEditorSurface",t=>{let{ownerWindow:o}=this.app;return t.target instanceof o.HTMLCanvasElement||t.target instanceof o.HTMLTextAreaElement||t.target instanceof o.HTMLIFrameElement||t.target instanceof o.HTMLElement&&t.target.classList.contains(Qe.FRAME_NAME)});T(this,"handle",wt(t=>{if(!this.app.isNavigationEnabled())return;if(!this.isOverEditorSurface(t)){t[S.CTRL_OR_CMD]&&t.preventDefault();return}t.preventDefault();let o=!!(t.buttons&R8);if(this.dependencies.isPanning()){if(!o)return;this.dependencies.flushPanMove()}let{deltaX:r,deltaY:n}=t;if(!r&&!n)return;let i=t.metaKey||t.ctrlKey;if(n!==0&&(o||(Lp(this.app.state.inputDevice)==="mouse"?!i&&!t.shiftKey:i))){this.zoomBy(n);return}if(t.shiftKey){this.app.viewport.translate(({zoom:s,scrollX:l})=>({scrollX:l-(n||r)/s.value}));return}this.app.viewport.translate(({zoom:s,scrollX:l,scrollY:c})=>({scrollX:l-r/s.value,scrollY:c-n/s.value}))}));T(this,"preventBrowserZoom",t=>{t[S.CTRL_OR_CMD]&&t.preventDefault()});T(this,"zoomBy",t=>{let{viewport:o}=this.app,r=Math.sign(t),n=hc*100,i=Math.abs(t),a=t;i>n&&(a=n*r);let{x:s,y:l}=o.lastPosition;o.translate(d=>{let p=d.zoom.value-a/100;p+=Math.log10(Math.max(1,d.zoom.value))*-r*Math.min(1,i/20);let m=d.scrollConstraints?.lockZoom?d.scrollConstraints.zoom:Lm,u=zn(Math.max(p,m));return u===d.zoom.value?null:{...Fn({viewportX:s,viewportY:l,nextZoom:u},d),shouldCacheIgnoreZoom:!0}},{zoomPreConstrained:!0,preserveScrollConstraintsSnapBack:!0})&&this.app.resetShouldCacheIgnoreZoomDebounced()})}};import{jsx as wr,jsxs as l3}from"react/jsx-runtime";var N8=()=>l3("div",{"data-testid":"brave-measure-text-error",children:[wr("p",{children:wr(Ao,{i18nKey:"errors.brave_measure_text_error.line1",bold:e=>wr("span",{style:{fontWeight:600},children:e})})}),wr("p",{children:wr(Ao,{i18nKey:"errors.brave_measure_text_error.line2",bold:e=>wr("span",{style:{fontWeight:600},children:e})})}),wr("p",{children:wr(Ao,{i18nKey:"errors.brave_measure_text_error.line3",link:e=>wr("a",{href:"http://docs.excalidraw.com/docs/@excalidraw/excalidraw/faq#turning-off-aggresive-block-fingerprinting-in-brave-browser",children:e})})}),wr("p",{children:wr(Ao,{i18nKey:"errors.brave_measure_text_error.line4",issueLink:e=>wr("a",{href:"https://github.com/excalidraw/excalidraw/issues/new",children:e}),discordLink:e=>l3("a",{href:"https://discord.gg/UexuTaE",children:[e,"."]})})})]}),c3=N8;import H8 from"clsx";import U8 from"react";import{useLayoutEffect as O8,useRef as d3,useEffect as m3}from"react";import{unstable_batchedUpdates as B8}from"react-dom";import F8 from"clsx";import{jsx as z8}from"react/jsx-runtime";var ra=10,p3=({children:e,left:t,top:o,onCloseRequest:r,fitInViewport:n=!1,viewportWidth:i=window.innerWidth,viewportHeight:a=window.innerHeight,className:s})=>{let l=d3(null);m3(()=>{let d=l.current;if(!d)return;d.contains(document.activeElement)||d.focus();let p=m=>{if(m.key===S.TAB){let u=vc(d),{activeElement:b}=document,f=u.findIndex(x=>x===b);b===d?(m.shiftKey?u[u.length-1]?.focus():u[0].focus(),m.preventDefault(),m.stopImmediatePropagation()):f===0&&m.shiftKey?(u[u.length-1]?.focus(),m.preventDefault(),m.stopImmediatePropagation()):f===u.length-1&&!m.shiftKey&&(u[0]?.focus(),m.preventDefault(),m.stopImmediatePropagation())}};return d.addEventListener("keydown",p),()=>d.removeEventListener("keydown",p)},[]);let c=d3(null);return O8(()=>{if(n&&l.current&&o!=null&&t!=null){let d=l.current,{width:p,height:m}=d.getBoundingClientRect();if(c.current?.top===o&&c.current?.left===t)return;c.current={top:o,left:t};let u=Math.max(0,i-ra*2);p>=u?(d.style.width=`${u}px`,d.style.left=`${ra}px`,d.style.overflowX="scroll"):d.style.left=`${Je(t,ra,i-ra-p)}px`;let b=Math.max(0,a-ra*2);m>=b?(d.style.height=`${b}px`,d.style.top=`${ra}px`,d.style.overflowY="scroll"):d.style.top=`${Je(o,ra,a-ra-m)}px`}},[o,t,n,i,a]),m3(()=>{if(r){let d=p=>{l.current?.contains(p.target)||B8(()=>r(p))};return document.addEventListener("pointerdown",d,!1),()=>document.removeEventListener("pointerdown",d,!1)}},[r]),z8("div",{className:F8("popover",s),ref:l,tabIndex:-1,children:e})};import{jsx as Wl,jsxs as G8}from"react/jsx-runtime";var Ft="separator",u3=U8.memo(({actionManager:e,items:t,top:o,left:r,onClose:n})=>{let i=cn(),a=Hi(),s=t.reduce((l,c)=>(c&&(c===Ft||!c.predicate||c.predicate(a,i,e.app.props,e.app))&&l.push(c),l),[]);return Wl(p3,{onCloseRequest:()=>{n()},top:o,left:r,fitInViewport:!0,viewportWidth:i.width,viewportHeight:i.height,className:"context-menu-popover",children:Wl("ul",{className:"context-menu",onContextMenu:l=>l.preventDefault(),children:s.map((l,c)=>{if(l===Ft)return!s[c-1]||s[c-1]===Ft?null:Wl("hr",{className:"context-menu-item-separator"},c);let d=l.name,p="";return l.label&&(typeof l.label=="function"?p=h(l.label(a,i,e.app)):p=h(l.label)),Wl("li",{"data-testid":d,onClick:()=>{n(()=>{e.executeAction(l,"contextMenu")})},children:G8("button",{type:"button",className:H8("context-menu-item",{dangerous:d==="deleteSelectedElements",checkmark:l.checked?.(i)}),children:[Wl("div",{className:"context-menu-item__label",children:p}),Wl("kbd",{className:"context-menu-item__shortcut",children:d?it(d):""})]})},c)})})})});import{useId as W8}from"react";import V8 from"clsx";import{Fragment as Y8,jsx as Zd,jsxs as h3}from"react/jsx-runtime";var hg=({border:e,style:t})=>Zd("div",{className:"viewport-status-frame__border",style:{borderColor:e,...t}}),gg=({label:e,border:t})=>{let o=W8(),r=h3(Y8,{children:[e.icon&&Zd("span",{className:"viewport-status-frame__badge-icon",children:e.icon}),e.label]});return h3("div",{className:V8("viewport-status-frame__badge",{"viewport-status-frame__badge--clickable":e.onClick}),role:"status",style:{"--viewport-status-frame-badge-background":e.background||t||"var(--color-primary)",color:e.color},children:[e.onClick&&Zd("button",{type:"button",className:"viewport-status-frame__badge-action","aria-labelledby":o,onClick:e.onClick}),Zd("div",{className:"viewport-status-frame__badge-label",id:e.onClick?o:void 0,children:r}),e.onClose&&Zd("button",{type:"button",className:"viewport-status-frame__badge-close","aria-label":h("buttons.close"),onClick:e.onClose,children:qo})]})};import nc from"clsx";import R9 from"react";import{createIsolation as K8}from"jotai-scope";import V0 from"react";import En from"tunnel-rat";var Y0=V0.createContext(null),at=()=>V0.useContext(Y0),X8=K8(),g3=()=>V0.useMemo(()=>({MainMenuTunnel:En(),WelcomeScreenMenuHintTunnel:En(),WelcomeScreenToolbarHintTunnel:En(),WelcomeScreenHelpHintTunnel:En(),WelcomeScreenCenterTunnel:En(),FooterCenterTunnel:En(),DefaultSidebarTriggerTunnel:En(),DefaultSidebarTabTriggersTunnel:En(),OverwriteConfirmDialogTunnel:En(),TTDDialogTriggerTunnel:En(),tunnelsJotai:X8}),[]);import $8 from"clsx";import{useState as Z8,useEffect as j8}from"react";import{jsx as K0,jsxs as q8}from"react/jsx-runtime";var fg=({delay:e,theme:t})=>{let[o,r]=Z8(!!e);return j8(()=>{if(!e)return;let n=setTimeout(()=>{r(!1)},e);return()=>clearTimeout(n)},[e]),o?null:q8("div",{className:$8("LoadingMessage",{"LoadingMessage--dark":t===Q.DARK}),children:[K0("div",{children:K0(Nt,{})}),K0("div",{className:"LoadingMessage-text",children:h("labels.loadingScene")})]})};import{useState as bg,useEffect as f3}from"react";import J8 from"clsx";import{Fragment as Q8,jsx as kt,jsxs as X0}from"react/jsx-runtime";var b3=({app:e,setAppState:t})=>{let o=e.state.activeTool,[r,n]=bg(!1),[i,a]=bg("rectangle"),[s,l]=bg("arrow");f3(()=>{(o.type==="rectangle"||o.type==="diamond"||o.type==="ellipse")&&a(o.type)},[o.type]),f3(()=>{(o.type==="arrow"||o.type==="line")&&l(o.type)},[o.type]);let c=o.type==="frame",d=o.type==="autoshape",p=o.type==="laser",m=o.type==="embeddable",u=o.type==="bucketfill",b=o.type==="stickynote",{TTDDialogTriggerTunnel:f}=at(),x=["rectangle","diamond","ellipse"].map(U=>({type:U,icon:St[U].icon,title:jt(h(`toolBar.${U}`)),fillable:St[U].fillable})),v=["arrow","line"].map(U=>({type:U,icon:St[U].icon,title:jt(h(`toolBar.${U}`)),fillable:St[U].fillable})),[y,E]=bg(0),w=36,C=4,I=7,A=I*w+(I-1)*C,M=w+C,N=y>=A+1*M,P=y>=A+2*M,L=y>=A+3*M,H=["text","stickynote","frame","embeddable","laser","bucketfill","magicframe"].filter(U=>!(N&&U==="text"||L&&U==="frame")).includes(o.type),K=H?o.type==="text"?ln:o.type==="image"?Wn:o.type==="frame"?Br:o.type==="stickynote"?$s:o.type==="embeddable"?Vn:o.type==="laser"?Fr:o.type==="bucketfill"?Co:o.type==="magicframe"?Fi:Di:Di,F={app:e,activeTool:o};return X0("div",{className:"mobile-toolbar",ref:U=>{U&&E(U.getBoundingClientRect().width)},children:[kt(Xu,{...F,hideKeyBinding:!0}),kt(ju,{...F,setAppState:t}),kt(qu,{...F}),kt(Zu,{...F,hideShortcut:!0}),kt(il,{app:e,options:x,activeTool:o,defaultOption:i,"data-testid":"toolbar-rectangle",onToolChange:U=>{(U==="rectangle"||U==="diamond"||U==="ellipse")&&(a(U),e.setActiveTool({type:U}))},displayedOption:x.find(U=>U.type===i)||x[0]}),kt(il,{app:e,options:v,activeTool:o,defaultOption:s,"data-testid":"toolbar-arrow",onToolChange:U=>{(U==="arrow"||U==="line")&&(l(U),e.setActiveTool({type:U}))},displayedOption:v.find(U=>U.type===s)||v[0]}),N&&kt($u,{...F,hideShortcut:!0}),P&&kt(AC,{...F,hideShortcut:!0}),L&&kt(LC,{...F,hideShortcut:!0}),X0(pe,{open:r,children:[kt(pe.Trigger,{className:J8("App-toolbar__extra-tools-trigger App-toolbar__extra-tools-trigger--mobile",{"App-toolbar__extra-tools-trigger--selected":H||r}),onToggle:()=>{n(!r),t({openMenu:null,openPopup:null})},title:h("toolBar.extraTools"),style:{width:w,height:w,display:"flex",alignItems:"center",justifyContent:"center"},children:K}),X0(pe.Content,{onClickOutside:()=>n(!1),onSelect:()=>n(!1),className:"App-toolbar__extra-tools-dropdown",align:"start",children:[!N&&kt(pe.Item,{onSelect:()=>e.setActiveTool({type:"text"}),icon:ln,shortcut:S.T.toLocaleUpperCase(),"data-testid":"toolbar-text",selected:o.type==="text",disabled:Mt(e,"text"),children:h("toolBar.text")}),!P&&kt(pe.Item,{onSelect:()=>e.setActiveTool({type:"image"}),icon:Wn,"data-testid":"toolbar-image",selected:o.type==="image",disabled:Mt(e,"image"),children:h("toolBar.image")}),kt(pe.Item,{onSelect:()=>e.setActiveTool({type:"stickynote"}),icon:$s,shortcut:S.N.toLocaleUpperCase(),"data-testid":"toolbar-stickynote",selected:b,disabled:Mt(e,"stickynote"),children:h("toolBar.stickynote")}),!L&&kt(pe.Item,{onSelect:()=>e.setActiveTool({type:"frame"}),icon:Br,shortcut:S.F.toLocaleUpperCase(),"data-testid":"toolbar-frame",selected:c,disabled:Mt(e,"frame"),children:h("toolBar.frame")}),kt(pe.Item,{onSelect:()=>e.setActiveTool({type:"embeddable"}),icon:Vn,"data-testid":"toolbar-embeddable",selected:m,disabled:Mt(e,"embeddable"),children:h("toolBar.embeddable")}),kt(pe.Item,{onSelect:()=>e.setActiveTool({type:"autoshape"}),icon:Bi,shortcut:Sd("autoshape"),"data-testid":"toolbar-autoshape",selected:d,disabled:Mt(e,"autoshape"),children:h("toolBar.autoshape")}),kt(pe.Item,{onSelect:()=>e.setActiveTool({type:"laser"}),icon:Fr,"data-testid":"toolbar-laser",selected:p,shortcut:S.K.toLocaleUpperCase(),disabled:Mt(e,"laser"),children:h("toolBar.laser")}),kt(pe.Item,{onSelect:()=>e.setActiveTool({type:"bucketfill"}),icon:Co,"data-testid":"toolbar-bucketfill",selected:u,shortcut:S.B.toLocaleUpperCase(),disabled:Mt(e,"bucketfill"),children:h("toolBar.bucketfill")}),kt("div",{style:{margin:"6px 0",fontSize:14,fontWeight:600},children:"Generate"}),e.props.aiEnabled!==!1&&kt(f.Out,{}),kt(pe.Item,{onSelect:()=>e.setOpenDialog({name:"ttd",tab:"mermaid"}),icon:Va,"data-testid":"toolbar-embeddable",children:h("toolBar.mermaidToExcalidraw")}),e.props.aiEnabled!==!1&&e.plugins.diagramToCode&&kt(Q8,{children:kt(pe.Item,{onSelect:()=>e.onMagicframeToolSelect(),icon:Fi,"data-testid":"toolbar-magicframe",badge:kt(pe.Item.Badge,{children:"AI"}),disabled:Mt(e,"magicframe"),children:h("toolBar.magicframe")})})]})]})]})};import e7 from"clsx";import{jsx as t7}from"react/jsx-runtime";var xg=({children:e,side:t,className:o})=>t7("div",{className:e7("FixedSideContainer",`FixedSideContainer_side_${t}`,o),children:e});import o7 from"clsx";import{jsx as r7}from"react/jsx-runtime";var Vl=e=>e.penDetected?r7(ee,{className:o7("ToolIcon__penMode",{"is-mobile":e.isMobile}),type:"toggle",icon:kb,checked:e.checked,title:`${e.title}`,"aria-label":`${e.title}`,onSelect:()=>e.onChange?.()}):null;import{Fragment as x3,jsx as _o,jsxs as Yl}from"react/jsx-runtime";var E3=({appState:e,elements:t,actionManager:o,setAppState:r,renderTopLeftUI:n,renderTopRightUI:i,renderSidebars:a,renderWelcomeScreen:s,defaultUIEnabled:l,scrollBackToContentUIEnabled:c,app:d,onPenModeToggle:p})=>{let{WelcomeScreenCenterTunnel:m,MainMenuTunnel:u,DefaultSidebarTriggerTunnel:b}=at(),f=()=>{if(e.openDialog?.name==="elementLinkSelector")return null;let I=Yl("div",{className:"excalidraw-ui-top-right",children:[i?.(!0,e),!e.viewModeEnabled&&Yl(x3,{children:[l&&_o(Vl,{checked:e.penMode,onChange:()=>p(null),title:h("toolBar.penMode"),isMobile:!0,penDetected:e.penDetected}),_o(b.Out,{})]}),l&&e.viewModeEnabled&&d.isInteractionEnabled()&&_o(KI,{actionManager:o})]}),A=Yl("div",{className:"excalidraw-ui-top-left",children:[n?.(!0,e),_o(u.Out,{})]});return Yl("div",{className:"App-toolbar-content",style:{display:"flex",flexDirection:"row",justifyContent:"space-between"},children:[A,I]})},x=()=>_o(b3,{app:d,setAppState:r}),v=c&&e.scrolledOutside,y=l&&!e.viewModeEnabled,E=v&&!e.openMenu&&!e.openSidebar?_o("button",{type:"button",className:"scroll-back-to-content",onClick:()=>{r(I=>({...Os(t,I)}))},children:h("buttons.scrollBackToContent")}):null,w=d.props.viewportStatusFrame?.label,C=w?_o(gg,{label:w,border:d.props.viewportStatusFrame?.border}):null;return Yl(x3,{children:[a(),_o("div",{className:"App-welcome-screen",children:s&&_o(m.Out,{})}),y&&Yl("div",{className:"App-bottom-bar",style:{marginBottom:vr+ni},"data-viewport-ui":"bottom",children:[E&&_o("div",{className:"floating-status-stack",children:E}),_o(GI,{appState:e,elementsMap:d.scene.getNonDeletedElementsMap(),renderAction:o.renderAction,app:d,setAppState:r}),_o(Ct,{className:"App-toolbar",children:e.openDialog?.name!=="elementLinkSelector"&&x()})]}),!y&&E&&_o("div",{className:"floating-status-stack",children:E}),C&&_o("div",{className:"viewport-status-frame__badge-row",children:C}),_o(xg,{side:"top",className:"App-top-bar",children:f()})]})};import y3,{useLayoutEffect as v3,useRef as w3,useState as T3}from"react";import{jsx as ii,jsxs as Eg}from"react/jsx-runtime";var n7=e=>{switch(e){case"bar":return h("labels.chartType_bar");case"line":return h("labels.chartType_line");case"radar":return h("labels.chartType_radar");default:return e}},i7=e=>{let t=w3(null),[o,r]=T3(null),{theme:n}=fe();v3(()=>{if(!e.spreadsheet){r(null);return}let a=U0(e.chartType,e.spreadsheet,0,0,e.colorSeed);if(!a){r(null),t.current?.replaceChildren();return}r(a);let s,l=t.current;return(async()=>(s=await Ba({data:{elements:a,appState:{exportBackground:!1,viewBackgroundColor:Zo,exportWithDarkMode:n==="dark"},files:null},config:{skipInliningFonts:!0}}),s.querySelector(".style-fonts")?.remove(),l.replaceChildren(),l.appendChild(s)))(),()=>{l.replaceChildren()}},[e.spreadsheet,e.chartType,e.colorSeed,n]);let i=n7(e.chartType);return Eg("button",{type:"button",className:"ChartPreview","aria-label":i,onClick:()=>{o&&e.onClick(e.chartType,o)},children:[ii("div",{className:"ChartPreview__canvas",ref:t}),ii("div",{className:"ChartPreview__label",children:i})]})},a7=e=>{let t=w3(null),{theme:o}=fe();return v3(()=>{if(!e.rawText)return;let r=ao({text:e.rawText,x:0,y:0}),n=t.current;return(async()=>{let i=await Ba({data:{elements:[r],appState:{exportBackground:!1,viewBackgroundColor:Zo,exportWithDarkMode:o==="dark"},files:null},config:{skipInliningFonts:!0}});i.querySelector(".style-fonts")?.remove(),n.replaceChildren(),n.appendChild(i)})(),()=>{n.replaceChildren()}},[e.rawText,o]),Eg("button",{type:"button",className:"ChartPreview","aria-label":h("labels.chartType_plaintext"),onClick:()=>{e.onClick(e.rawText)},children:[ii("div",{className:"ChartPreview__canvas",ref:t}),ii("div",{className:"ChartPreview__label",children:h("labels.chartType_plaintext")})]})},C3=({data:e,rawText:t,onClose:o})=>{let{onInsertElements:r,focusContainer:n}=Ke(),[i,a]=T3(Math.random()),s=y3.useCallback(()=>{a(Math.random())},[]),l=y3.useCallback(()=>{o&&o()},[o]),c=(p,m)=>{r(m),be("paste","chart",p),o(),n()},d=p=>{let m=ao({text:p,x:0,y:0});r([m]),be("paste","chart","plaintext"),o(),n()};return ii(_t,{size:"regular",onCloseRequest:l,title:Eg("div",{className:"PasteChartDialog__title",children:[ii("div",{className:"PasteChartDialog__titleText",children:h("labels.pasteCharts")}),ii("div",{className:"PasteChartDialog__reshuffleBtn",onClick:s,role:"button",tabIndex:0,onKeyDown:p=>{(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),s())},children:Co})]}),className:"PasteChartDialog",autofocus:!1,children:Eg("div",{className:"container",children:[["bar","line","radar"].map(p=>Ol(e,p)?ii(i7,{chartType:p,spreadsheet:e,colorSeed:i,onClick:c},p):null),t&&ii(a7,{rawText:t,onClick:d})]})})};import{Fragment as s7,jsx as S3,jsxs as l7}from"react/jsx-runtime";var jd=({heading:e,children:t,...o})=>{let{id:r}=tt(),n=S3("h2",{className:"visually-hidden",id:`${r}-${e}-title`,children:h(`headings.${e}`)});return S3("section",{...o,"aria-labelledby":`${r}-${e}-title`,children:typeof t=="function"?t(n):l7(s7,{children:[n,t]})})};import{Popover as qd}from"radix-ui";import I3 from"clsx";import yg,{useLayoutEffect as c7}from"react";import{Fragment as j0,jsx as po,jsxs as Kl}from"react/jsx-runtime";var d7=4,m7=8,$0=38,k3=21,p7=({shouldWrap:e,children:t,username:o})=>e?po(Mo,{label:o||"Unknown user",children:t}):po(j0,{children:t}),Z0=({actionManager:e,collaborator:t,socketId:o,withName:r=!1,shouldWrapWithTooltip:n=!1,isBeingFollowed:i})=>{let a={socketId:o,collaborator:t,withName:r,isBeingFollowed:i},s=e.renderAction("goToCollaborator",a);return po(p7,{username:t.username,shouldWrap:n,children:s},o)},u7=["avatarUrl","id","socketId","username","isInCall","isSpeaking","isMuted","isCurrentUser"],vg=yg.memo(({className:e,mobile:t,collaborators:o,userToFollow:r,currentUserControls:n})=>{let i=ot(),a=typeof n=="function"?n(!!t):n,s=Array.from(o,([I,A])=>({...A,socketId:I})).filter(I=>I.username?.trim()),l=s.find(I=>I.isCurrentUser),c=s.filter(I=>!I.isCurrentUser),[d,p]=yg.useState(""),m=s.filter(I=>I.username?.toLowerCase().includes(d)),u=yg.useRef(null);c7(()=>{if(u.current){let I=u.current.ownerDocument.defaultView,A=N=>{f(N)};if(A(u.current.clientWidth),!I||typeof I.ResizeObserver!="function")return;let M=new I.ResizeObserver(N=>{for(let P of N){let{width:L}=P.contentRect;A(L)}});return M.observe(u.current),()=>{M.disconnect()}}},[]);let[b,f]=yg.useState(d7*$0),x=l?b-k3:b,v=Math.max(1,Math.min(8,Math.floor(x/$0))),y=l?Math.max(0,v-1):v,E=c.slice(0,y),w=l?[...E,l]:E,C=w.map(I=>{let A=Z0({actionManager:i,collaborator:I,socketId:I.socketId,shouldWrapWithTooltip:!0,isBeingFollowed:I.socketId===r});return I.isCurrentUser?Kl(qd.Root,{children:[po(qd.Trigger,{asChild:!0,children:Kl("div",{className:"UserList__pill",children:[A,po("div",{className:"UserList__pill-chevron",children:dx})]})}),po(qd.Content,{className:"focus-visible-none",style:{zIndex:2,width:"15rem",textAlign:"left"},align:"end",sideOffset:10,children:Kl(Ct,{padding:2,children:[s.length>=m7&&po(Ru,{placeholder:h("quickSearch.placeholder"),onChange:p}),po(Nu,{className:"dropdown-menu UserList__collaborators",placeholder:h("userList.empty"),children:m.length>0?[po("div",{className:"hint",children:h("userList.hint.text")},"hint"),m.map(M=>Z0({actionManager:i,collaborator:M,socketId:M.socketId,withName:!0,isBeingFollowed:M.socketId===r}))]:[]}),a&&Kl(j0,{children:[po("div",{className:"UserList__menu-divider"}),po(qd.Close,{asChild:!0,children:po("div",{className:"dropdown-menu",children:a})})]}),po(qd.Arrow,{width:20,height:10,style:{fill:"var(--popup-bg-color)",filter:"drop-shadow(rgba(0, 0, 0, 0.05) 0px 3px 2px)"}})]})})]},I.socketId):A});return t?Kl("div",{className:I3("UserList UserList_mobile",e),children:[po("div",{className:"UserList_mobile__avatars",children:s.map(I=>Z0({actionManager:i,collaborator:I,socketId:I.socketId,shouldWrapWithTooltip:!0,isBeingFollowed:I.socketId===r}))}),a&&Kl(j0,{children:[po("div",{className:"UserList__menu-divider"}),a]})]}):po("div",{className:"UserList__wrapper",ref:u,children:po("div",{className:I3("UserList",e),style:{"--max-avatars":w.length+(l?k3/$0:0)},children:C})})},(e,t)=>{if(e.collaborators.size!==t.collaborators.size||e.mobile!==t.mobile||e.className!==t.className||e.userToFollow!==t.userToFollow||e.currentUserControls!==t.currentUserControls)return!1;let o=t.collaborators.keys();for(let[r,n]of e.collaborators){let i=t.collaborators.get(r);if(!i||r!==o.next().value||!Dt(n,i,u7))return!1}return!0});import q0 from"clsx";import{jsx as M3}from"react/jsx-runtime";var A3=e=>M3(Mo,{label:`${h("helpDialog.title")} \u2014 ?`,children:M3("button",{className:"help-icon",onClick:e.onClick,type:"button","aria-label":h("helpDialog.title"),children:Ua})});import{jsx as ai,jsxs as J0}from"react/jsx-runtime";var L3=({appState:e,actionManager:t,showExitZenModeBtn:o,renderWelcomeScreen:r,defaultUIEnabled:n,zoomUIEnabled:i})=>{let{FooterCenterTunnel:a,WelcomeScreenHelpHintTunnel:s}=at(),l=Ke();return J0("footer",{role:"contentinfo",className:"layer-ui__wrapper__footer App-menu App-menu_bottom",children:[(n||i&&l.isNavigationEnabled())&&ai("div",{className:q0("layer-ui__wrapper__footer-left zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-left":e.zenModeEnabled}),children:ai(co.Col,{gap:2,children:J0(jd,{heading:"canvasActions",children:[i&&l.isNavigationEnabled()&&ai(WI,{renderAction:t.renderAction}),n&&!e.viewModeEnabled&&ai(VI,{renderAction:t.renderAction,className:q0("zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-bottom":e.zenModeEnabled})})]})})}),ai(a.Out,{}),(n||r)&&ai("div",{className:q0("layer-ui__wrapper__footer-right zen-mode-transition",{"transition-right":e.zenModeEnabled}),children:J0("div",{style:{position:"relative"},children:[r&&ai(s.Out,{}),n&&ai(A3,{onClick:()=>t.executeAction(Xi)})]})}),n&&ai(YI,{actionManager:t,showExitZenModeBtn:o})]})},_3=L3;L3.displayName="Footer";import I7 from"clsx";import{useEffect as O3,useLayoutEffect as B3,useRef as sE,useState as k7,forwardRef as F3,useImperativeHandle as M7,useCallback as R3}from"react";import g7 from"clsx";import{useContext as f7}from"react";import h7 from"react";var wg=h7.createContext({});import{jsx as Q0,jsxs as P3}from"react/jsx-runtime";var eE=({children:e,className:t})=>{let o=Le(),r=f7(wg),n=!!(o.canFitSidebar&&r.shouldRenderDockButton);return P3("div",{className:g7("sidebar__header",t),"data-testid":"sidebar-header",children:[e,P3("div",{className:"sidebar__header__buttons",children:[n&&Q0(Mo,{label:h("labels.sidebarLock"),children:Q0(mo,{onSelect:()=>r.onDock?.(!r.docked),selected:!!r.docked,className:"sidebar__dock","data-testid":"sidebar-dock","aria-label":h("labels.sidebarLock"),children:yb})}),Q0(mo,{"data-testid":"sidebar-close",className:"sidebar__close",onSelect:r.onCloseRequest,"aria-label":h("buttons.close"),children:qo})]})]})};eE.displayName="SidebarHeader";import{Tabs as b7}from"radix-ui";import{jsx as D3}from"react/jsx-runtime";var tE=({children:e,tab:t,onSelect:o,...r})=>D3(b7.Trigger,{value:t,asChild:!0,onSelect:o,children:D3("button",{type:"button",className:"excalidraw-button sidebar-tab-trigger",...r,children:e})});tE.displayName="SidebarTabTrigger";import{Tabs as x7}from"radix-ui";import{jsx as E7}from"react/jsx-runtime";var oE=({children:e,...t})=>E7(x7.List,{className:"sidebar-triggers",...t,children:e});oE.displayName="SidebarTabTriggers";import y7 from"clsx";import{jsx as rE,jsxs as v7}from"react/jsx-runtime";var nE=({name:e,tab:t,icon:o,title:r,children:n,onToggle:i,className:a,style:s})=>{let l=Ce(),d=fe().openSidebar?.name===e;return rE("button",{type:"button",title:r,className:"sidebar-trigger__label-element","aria-label":r,"aria-keyshortcuts":"0","aria-pressed":d,onClick:()=>{document.querySelector(".layer-ui__wrapper")?.classList.remove("animate");let p=!d;l({openSidebar:p?{name:e,tab:t}:null,openMenu:null,openPopup:null}),i?.(p)},children:v7("div",{className:y7("sidebar-trigger",a),style:s,children:[o&&rE("div",{children:o}),n&&rE("div",{className:"sidebar-trigger__label",children:n})]})})};nE.displayName="SidebarTrigger";import{Tabs as w7}from"radix-ui";import{jsx as T7}from"react/jsx-runtime";var iE=({children:e,...t})=>{let o=fe(),r=Ce();if(!o.openSidebar)return null;let{name:n}=o.openSidebar;return T7(w7.Root,{className:"sidebar-tabs-root",value:o.openSidebar.tab,onValueChange:i=>r(a=>({...a,openSidebar:{...a.openSidebar,name:n,tab:i}})),...t,children:e})};iE.displayName="SidebarTabs";import{Tabs as C7}from"radix-ui";import{jsx as S7}from"react/jsx-runtime";var aE=({tab:e,children:t,...o})=>S7(C7.Content,{...o,value:e,"data-testid":e,children:t});aE.displayName="SidebarTab";import{jsx as N3}from"react/jsx-runtime";import{createElement as A7}from"react";var Jd=Ie(!1),z3=F3(({name:e,children:t,onDock:o,docked:r,className:n,...i},a)=>{Wt()&&o&&r==null&&console.warn("Sidebar: `docked` must be set when `onDock` is supplied for the sidebar to be user-dockable. To hide this message, either pass `docked` or remove `onDock`");let s=Ce(),l=nn(Jd);B3(()=>(l(!!r),()=>{l(!1)}),[l,r]);let c=sE({});c.current.onCloseRequest=()=>{s({openSidebar:null})},c.current.onDock=u=>o?.(u),c.current=vs(c.current,{docked:r,shouldRenderDockButton:!!o&&r!=null});let d=sE(null);M7(a,()=>d.current);let p=Le(),m=R3(()=>{document.querySelector(".Dialog")||s({openSidebar:null})},[s]);return Js(d,R3(u=>{u.target.closest(".sidebar-trigger")||(!r||!p.canFitSidebar)&&m()},[m,r,p.canFitSidebar])),O3(()=>{let u=b=>{b.key===S.ESCAPE&&(!r||!p.canFitSidebar)&&m()};return document.addEventListener("keydown",u),()=>{document.removeEventListener("keydown",u)}},[m,r,p.canFitSidebar]),N3(Ct,{...i,className:I7(Qe.SIDEBAR,{"sidebar--docked":r},n),"data-viewport-ui":p.formFactor!=="phone"?"side":void 0,"data-viewport-ui-name":p.formFactor!=="phone"?"sidebar":void 0,ref:d,children:N3(wg.Provider,{value:c.current,children:t})})});z3.displayName="SidebarInner";var Tr=Object.assign(F3((e,t)=>{let o=fe(),{onStateChange:r}=e,n=sE(o.openSidebar);O3(()=>{(!o.openSidebar&&n?.current?.name===e.name||o.openSidebar?.name===e.name&&n?.current?.name!==e.name||n.current?.name===e.name)&&o.openSidebar!==n.current&&r?.(o.openSidebar?.name!==e.name?null:o.openSidebar),n.current=o.openSidebar},[o.openSidebar,r,e.name]);let[i,a]=k7(!1);return B3(()=>(a(!0),()=>a(!1)),[]),i&&o.openSidebar?.name===e.name?A7(z3,{...e,ref:t,key:e.name}):null}),{Header:eE,TabTriggers:oE,TabTrigger:tE,Tabs:iE,Tab:aE,Trigger:nE});Tr.displayName="Sidebar";import{useLayoutEffect as L7,useRef as _7}from"react";import{jsx as P7}from"react/jsx-runtime";var si=(e,t)=>{let o=Ie(0),r=n=>{let{tunnelsJotai:{useAtom:i}}=at(),[,a]=i(o),s=_7({preferHost:!1,counter:0});return L7(()=>{let l=s.current;return a(c=>{let d=c+1;return l.counter=d,d}),()=>{a(c=>{let d=c-1;return l.counter=d,d||(l.preferHost=!1),d})}},[a]),n.__fallback||(s.current.preferHost=!0),!s.current.counter&&n.__fallback&&s.current.preferHost||s.current.counter>1&&n.__fallback?null:P7(t,{...n})};return r.displayName=e,r};var mE={};sf(mE,{ChangeCanvasBackground:()=>J3,ClearCanvas:()=>j3,CommandPalette:()=>X3,Export:()=>Q3,Help:()=>Z3,LiveCollaborationTrigger:()=>t5,LoadScene:()=>V3,Preferences:()=>Cr,PreferencesToggleGridModeItem:()=>cE,PreferencesToggleZenModeItem:()=>dE,SaveAsImage:()=>K3,SaveToActiveFile:()=>Y3,SearchMenu:()=>$3,Socials:()=>e5,ToggleTheme:()=>q3});import O7 from"clsx";var lE=Ie({active:!1});async function H3({title:e,description:t,actionLabel:o,color:r}){return new Promise(n=>{yt.set(lE,{active:!0,onConfirm:()=>n(!0),onClose:()=>n(!1),onReject:()=>n(!1),title:e,description:t,actionLabel:o,color:r})})}import D7 from"clsx";import{jsx as U3,jsxs as R7}from"react/jsx-runtime";var Tg=function({onChange:e,value:t,choices:o,name:r}){return U3("div",{className:"RadioGroup",children:o.map(n=>R7("div",{className:D7("RadioGroup__choice",{active:n.value===t}),title:n.ariaLabel,children:[U3("input",{name:r,type:"radio",checked:n.value===t,onChange:()=>e(n.value),"aria-label":n.ariaLabel}),n.label]},String(n.value)))})};import{Fragment as N7,jsx as Qd,jsxs as G3}from"react/jsx-runtime";var W3=({value:e,shortcut:t,onChange:o,choices:r,children:n,name:i,icon:a})=>{let s=Le();return G3(N7,{children:[G3("div",{className:"dropdown-menu-item-base dropdown-menu-item-bare",children:[a&&Qd("div",{className:"dropdown-menu-item__icon",children:a}),Qd("label",{className:"dropdown-menu-item__text",children:Qd(Xa,{children:n})}),Qd(Tg,{name:i,value:e,onChange:o,choices:r})]}),t&&s.formFactor!=="phone"&&Qd("div",{className:"dropdown-menu-item__shortcut dropdown-menu-item__shortcut--orphaned",children:t})]})};W3.displayName="DropdownMenuItemContentRadio";var Cg=W3;import{Fragment as d5,jsx as Pe,jsxs as em}from"react/jsx-runtime";var V3=()=>{let{t:e}=Ge(),t=ot(),o=Hi();return t.isActionEnabled(Ja)?Pe(Io,{icon:Ga,onSelect:async()=>{(!o.length||await H3({title:e("overwriteConfirm.modal.loadFromFile.title"),actionLabel:e("overwriteConfirm.modal.loadFromFile.button"),color:"warning",description:Pe(Ao,{i18nKey:"overwriteConfirm.modal.loadFromFile.description",bold:n=>Pe("strong",{children:n}),br:()=>Pe("br",{})})}))&&t.executeAction(Ja)},"data-testid":"load-button",shortcut:it("loadScene"),"aria-label":e("buttons.load"),children:e("buttons.load")}):null};V3.displayName="LoadScene";var Y3=()=>{let{t:e}=Ge(),t=ot();return t.isActionEnabled(Ki)?Pe(Io,{shortcut:it("saveScene"),"data-testid":"save-button",onSelect:()=>t.executeAction(Ki),icon:Nb,"aria-label":`${e("buttons.save")}`,children:`${e("buttons.save")}`}):null};Y3.displayName="SaveToActiveFile";var K3=()=>{let e=Ce(),{t}=Ge();return Pe(Io,{icon:od,"data-testid":"image-export-button",onSelect:()=>e({openDialog:{name:"imageExport"}}),shortcut:it("imageExport"),"aria-label":t("buttons.exportImage"),children:t("buttons.exportImage")})};K3.displayName="SaveAsImage";var X3=e=>{let t=Ce(),{t:o}=Ge();return Pe(Io,{icon:Zs,"data-testid":"command-palette-button",onSelect:()=>{be("command_palette","open","menu"),t({openDialog:{name:"commandPalette"}})},shortcut:it("commandPalette"),"aria-label":o("commandPalette.title"),className:e?.className,children:o("commandPalette.title")})};X3.displayName="CommandPalette";var $3=e=>{let{t}=Ge(),o=ot();return Pe(Io,{icon:zo,"data-testid":"search-menu-button",onSelect:()=>{o.executeAction(Ll)},shortcut:it("searchMenu"),"aria-label":t("search.title"),className:e?.className,children:t("search.title")})};$3.displayName="SearchMenu";var Z3=()=>{let{t:e}=Ge(),t=ot();return Pe(Io,{"data-testid":"help-menu-item",icon:Ua,onSelect:()=>t.executeAction(Xi),shortcut:"?","aria-label":e("helpDialog.title"),children:e("helpDialog.title")})};Z3.displayName="Help";var j3=()=>{let{t:e}=Ge(),t=nn(ns);return ot().isActionEnabled(pn)?Pe(Io,{icon:Jt,onSelect:()=>t("clearCanvas"),"data-testid":"clear-canvas-button","aria-label":e("buttons.clearReset"),children:e("buttons.clearReset")}):null};j3.displayName="ClearCanvas";var q3=e=>{let{t}=Ge(),o=fe(),r=ot(),n=it("toggleTheme"),i=ko();return r.isActionEnabled(Qn)?e?.allowSystemTheme?Pe(Cg,{name:"theme",value:e.theme,onChange:a=>{if(i.onThemeChange){i.onThemeChange(a);return}console.warn("MainMenu.DefaultItems.ToggleTheme: `<Excalidraw/> props.onThemeChange` must be defined to use system theme selection.")},choices:[{value:Q.LIGHT,label:Ys,ariaLabel:`${t("buttons.lightMode")} - ${n}`},{value:Q.DARK,label:Vs,ariaLabel:`${t("buttons.darkMode")} - ${n}`},{value:"system",label:ex,ariaLabel:t("buttons.systemMode")}],children:t("labels.theme")}):Pe(Io,{onSelect:a=>{a.preventDefault(),r.executeAction(Qn)},icon:o.theme===Q.DARK?Ys:Vs,"data-testid":"toggle-dark-mode",shortcut:n,"aria-label":o.theme===Q.DARK?t("buttons.lightMode"):t("buttons.darkMode"),children:o.theme===Q.DARK?t("buttons.lightMode"):t("buttons.darkMode")}):null};q3.displayName="ToggleTheme";var J3=()=>{let{t:e}=Ge(),t=fe(),o=ot(),r=ko();return t.viewModeEnabled||!r.UIOptions.canvasActions.changeViewBackgroundColor?null:em("div",{style:{marginTop:"0.75rem"},children:[Pe("div",{"data-testid":"canvas-background-label",style:{fontSize:"0.875rem",marginBottom:"0.25rem",marginLeft:"0.5rem"},children:e("labels.canvasBackground")}),Pe("div",{style:{padding:"0 0.625rem"},children:o.renderAction("changeViewBackgroundColor")})]})};J3.displayName="ChangeCanvasBackground";var Q3=()=>{let{t:e}=Ge(),t=Ce();return Pe(Io,{icon:Ni,onSelect:()=>{t({openDialog:{name:"jsonExport"}})},"data-testid":"json-export-button","aria-label":e("buttons.export"),children:e("buttons.export")})};Q3.displayName="Export";var e5=()=>{let{t:e}=Ge();return em(d5,{children:[Pe(Ml,{icon:ed,href:"https://github.com/excalidraw/excalidraw","aria-label":"GitHub",children:"GitHub"}),Pe(Ml,{icon:Rb,href:"https://x.com/excalidraw","aria-label":"X",children:e("labels.followUs")}),Pe(Ml,{icon:Db,href:"https://discord.gg/UexuTaE","aria-label":"Discord",children:e("labels.discordChat")})]})};e5.displayName="Socials";var t5=({onSelect:e,isCollaborating:t})=>{let{t:o}=Ge();return Pe(Io,{"data-testid":"collab-button",icon:rd,className:O7({"active-collab":t}),onSelect:e,children:o("labels.liveCollaboration")})};t5.displayName="LiveCollaborationTrigger";var o5=()=>{let{t:e}=Ge(),t=Ke(),o=fe();return Pe(Hr,{checked:o.activeTool.locked,shortcut:it("toolLock"),onSelect:r=>{t.toggleLock(),r.preventDefault()},children:e("labels.preferences_toolLock")})},r5=()=>{let{t:e}=Ge(),t=fe(),o=Ce();return Pe(Cg,{name:"boxSelectionMode",icon:js,value:t.boxSelectionMode,onChange:r=>{o({boxSelectionMode:r})},choices:[{value:"contain",label:e("labels.boxSelectionContain"),ariaLabel:e("labels.boxSelectionContain")},{value:"overlap",label:e("labels.boxSelectionOverlap"),ariaLabel:e("labels.boxSelectionOverlap")}],children:e("labels.boxSelectionMode")})},n5=()=>{let{t:e}=Ge(),t=fe(),o=Ce();return Pe(Cg,{name:"inputDevice",icon:js,value:Lp(t.inputDevice),onChange:r=>{o({inputDevice:r})},choices:[{value:"trackpad",label:e("labels.inputDeviceTrackpad"),ariaLabel:e("labels.inputDeviceTrackpad")},{value:"mouse",label:e("labels.inputDeviceMouse"),ariaLabel:e("labels.inputDeviceMouse")}],children:e("labels.inputDevice")})},i5=()=>{let{t:e}=Ge(),t=ot(),o=fe();return Pe(Hr,{checked:o.objectsSnapModeEnabled,shortcut:it("objectsSnapMode"),onSelect:r=>{t.executeAction(hl),r.preventDefault()},children:e("buttons.objectsSnapMode")})},a5=()=>{let{t:e}=Ge(),t=ot(),o=fe();return Pe(Hr,{checked:o.bindingPreference==="enabled",onSelect:r=>{t.executeAction(gl),r.preventDefault()},children:e("labels.arrowBinding")})},s5=()=>{let{t:e}=Ge(),t=ot(),o=fe();return Pe(Hr,{checked:o.isMidpointSnappingEnabled,onSelect:r=>{t.executeAction(fl),r.preventDefault()},children:e("labels.midpointSnapping")})},cE=()=>{let{t:e}=Ge(),t=ot(),o=fe();return Pe(Hr,{checked:o.gridModeEnabled,shortcut:it("gridMode"),onSelect:r=>{t.executeAction(ts),r.preventDefault()},children:e("labels.toggleGrid")})},dE=()=>{let{t:e}=Ge(),t=ot(),o=fe();return Pe(Hr,{checked:o.zenModeEnabled,shortcut:it("zenMode"),onSelect:r=>{t.executeAction(ei),r.preventDefault()},children:e("buttons.zenMode")})},l5=()=>{let{t:e}=Ge(),t=ot(),o=fe();return t.isActionEnabled(Ji)?Pe(Hr,{checked:o.viewModeEnabled,shortcut:it("viewMode"),onSelect:r=>{t.executeAction(Ji),r.preventDefault()},children:e("labels.viewMode")}):null},c5=()=>{let{t:e}=Ge(),t=ot(),o=fe();return Pe(Hr,{checked:o.stats.open,shortcut:it("stats"),onSelect:r=>{t.executeAction(ti),r.preventDefault()},children:e("stats.fullTitle")})},Cr=({children:e,additionalItems:t})=>{let{t:o}=Ge();return em(Zi,{children:[Pe(Zi.Trigger,{icon:px,children:o("labels.preferences")}),em(Zi.Content,{className:"excalidraw-main-menu-preferences-submenu",children:[e||em(d5,{children:[Pe(r5,{}),Pe(n5,{}),Pe(o5,{}),Pe(i5,{}),Pe(cE,{}),Pe(dE,{}),Pe(l5,{}),Pe(c5,{}),Pe(a5,{}),Pe(s5,{})]}),t]})]})};Cr.ToggleToolLock=o5;Cr.BoxSelectionMode=r5;Cr.InputDevice=n5;Cr.ToggleSnapMode=i5;Cr.ToggleArrowBinding=a5;Cr.ToggleMidpointSnapping=s5;Cr.ToggleGridMode=cE;Cr.ToggleZenMode=dE;Cr.ToggleViewMode=l5;Cr.ToggleElementProperties=c5;Cr.displayName="Preferences";import{jsx as Sg,jsxs as pE}from"react/jsx-runtime";var B7=Object.assign(si("MainMenu",({children:e,onSelect:t})=>{let{MainMenuTunnel:o}=at(),r=Le(),n=fe(),i=ko(),a=Ce();return Sg(o.In,{children:pE(pe,{open:n.openMenu==="canvas",children:[Sg(pe.Trigger,{onToggle:()=>{a({openMenu:n.openMenu==="canvas"?null:"canvas",openPopup:null,openDialog:null})},"data-testid":"main-menu-trigger",className:"main-menu-trigger",children:_b}),pE(pe.Content,{onClickOutside:()=>a({openMenu:null}),onSelect:wi(t,()=>{a({openMenu:null})}),className:"main-menu",align:"start",children:[e,r.formFactor==="phone"&&n.collaborators.size>0&&pE("fieldset",{className:"UserList-Wrapper",children:[Sg("legend",{children:h("labels.collaborators")}),Sg(vg,{mobile:!0,collaborators:n.collaborators,userToFollow:i.userToFollow?.socketId||null,currentUserControls:i.currentUserControls})]})]})]})})}),{Trigger:pe.Trigger,Item:pe.Item,ItemLink:pe.ItemLink,ItemCustom:pe.ItemCustom,Group:pe.Group,Separator:pe.Separator,Sub:Zi,DefaultItems:mE}),yo=B7;import F7 from"clsx";import{forwardRef as z7,useState as H7}from"react";import{jsx as Ig,jsxs as U7}from"react/jsx-runtime";var Sr=z7(({children:e,icon:t,onClick:o,label:r,variant:n="filled",color:i="primary",size:a="medium",fullWidth:s,className:l,status:c,disabled:d},p)=>{let[m,u]=H7(!1),b=async x=>{let v=o?.(x);if(vi(v)){let y=window.setTimeout(()=>{u(!0)},50);try{await v}catch(E){if(E instanceof Bs)console.warn(E);else throw E}finally{clearTimeout(y),u(!1)}}},f=m?"loading":c;return i=f==="success"?"success":i,Ig("button",{className:F7("ExcButton",`ExcButton--color-${i}`,`ExcButton--variant-${n}`,`ExcButton--size-${a}`,`ExcButton--status-${f}`,{"ExcButton--fullWidth":s},l),onClick:b,type:"button","aria-label":r,ref:p,disabled:d||f==="loading"||f==="success",children:U7("div",{className:"ExcButton__contents",children:[f==="loading"?Ig(Nt,{className:"ExcButton__statusIcon"}):f==="success"&&Ig("div",{className:"ExcButton__statusIcon",children:R1}),t&&Ig("div",{className:"ExcButton__icon","aria-hidden":!0,children:t}),n!=="icon"&&(e??r)]})})});import{jsx as Xl,jsxs as V7}from"react/jsx-runtime";var kg=({title:e,children:t,actionLabel:o,onClick:r})=>V7("div",{className:"OverwriteConfirm__Actions__Action",children:[Xl("h4",{children:e}),Xl("div",{className:"OverwriteConfirm__Actions__Action__content",children:t}),Xl(Sr,{variant:"outlined",color:"muted",label:o,size:"large",fullWidth:!0,onClick:r})]}),G7=()=>{let{t:e}=Ge(),t=ot(),o=Ce();return Xl(kg,{title:e("overwriteConfirm.action.exportToImage.title"),actionLabel:e("overwriteConfirm.action.exportToImage.button"),onClick:()=>{t.executeAction(ah,"ui",!0),o({openDialog:{name:"imageExport"}})},children:e("overwriteConfirm.action.exportToImage.description")})},W7=()=>{let{t:e}=Ge(),t=ot();return Xl(kg,{title:e("overwriteConfirm.action.saveToDisk.title"),actionLabel:e("overwriteConfirm.action.saveToDisk.button"),onClick:()=>{t.executeAction(dl,"ui")},children:e("overwriteConfirm.action.saveToDisk.description")})},uE=Object.assign(({children:e})=>Xl("div",{className:"OverwriteConfirm__Actions",children:e}),{ExportToImage:G7,SaveToDisk:W7});import{jsx as na,jsxs as m5}from"react/jsx-runtime";var Mg=Object.assign(si("OverwriteConfirmDialog",({children:e})=>{let{OverwriteConfirmDialogTunnel:t}=at(),[o,r]=le(lE);if(!o.active)return null;let n=()=>{o.onClose(),r(a=>({...a,active:!1}))},i=()=>{o.onConfirm(),r(a=>({...a,active:!1}))};return na(t.In,{children:na(_t,{onCloseRequest:n,title:!1,size:916,children:m5("div",{className:"OverwriteConfirm",children:[na("h3",{children:o.title}),m5("div",{className:`OverwriteConfirm__Description OverwriteConfirm__Description--color-${o.color}`,children:[na("div",{className:"OverwriteConfirm__Description__icon",children:ad}),na("div",{children:o.description}),na("div",{className:"OverwriteConfirm__Description__spacer"}),na(Sr,{color:o.color,size:"large",label:o.actionLabel,onClick:i})]}),na(uE,{children:e})]})})})}),{Actions:uE,Action:kg});import iR from"clsx";import Y7 from"clsx";import K7 from"lodash.debounce";import{Fragment as X7,memo as $7,useEffect as tm,useMemo as p5,useRef as hE,useState as u5}from"react";import{Fragment as nR,jsx as oo,jsxs as yn}from"react/jsx-runtime";var Z7=Ie(""),gE=Ie(null),j7=350,b5=()=>{let e=Ke(),t=Ce(),o=hE(null),[r,n]=le(Z7),i=r.trim(),[a,s]=u5(!1),[l,c]=u5({nonce:null,items:[]}),d=hE(null),p=hE(void 0),[m,u]=le(gE),b=e.scene.getNonDeletedElementsMap();tm(()=>{a||(i!==d.current||e.scene.getSceneNonce()!==p.current)&&(d.current=null,f5(i,e,(E,w)=>{c({nonce:Mn(),items:E}),d.current=i,p.current=e.scene.getSceneNonce(),t({searchMatches:E.length?{focusedId:null,matches:E.map(C=>({id:C.element.id,focus:!1,matchedLines:C.matchedLines}))}:null})}))},[a,i,b,e,t,u,p]);let f=()=>{l.items.length>0&&u(E=>E===null?0:(E+1)%l.items.length)},x=()=>{l.items.length>0&&u(E=>E===null?0:E-1<0?l.items.length-1:E-1)};tm(()=>{t(E=>E.searchMatches?{searchMatches:{focusedId:m!==null&&E.searchMatches?.matches[m]?.id||null,matches:E.searchMatches.matches.map((C,I)=>I===m?{...C,focus:!0}:{...C,focus:!1})}}:null)},[m,t]),tm(()=>{if(l.items.length>0&&m!==null){let E=l.items[m];if(E){let w=e.state.zoom.value,C=ao({text:E.searchQuery,x:E.element.x+(E.matchedLines[0]?.offsetX??0),y:E.element.y+(E.matchedLines[0]?.offsetY??0),width:E.matchedLines[0]?.width,height:E.matchedLines[0]?.height,fontSize:ae(E.element)?rt.nameFontSize:E.element.fontSize,fontFamily:ae(E.element)?pt.Assistant:E.element.fontFamily}),I=14,A=C.fontSize,M=A*w<I;if(!vp([C],e.canvas.width/e.ownerWindow.devicePixelRatio,e.canvas.height/e.ownerWindow.devicePixelRatio,{offsetLeft:e.state.offsetLeft,offsetTop:e.state.offsetTop,scrollX:e.state.scrollX,scrollY:e.state.scrollY,zoom:e.state.zoom},e.scene.getNonDeletedElementsMap(),e.viewport.getOffsets())||M){let N=M&&A<I?"contain":"scale-down";e.viewport.setViewport({target:Te([C]),fit:N,animation:{duration:300},offsets:{ui:!0}})}}}},[m,l,e]),tm(()=>()=>{u(null),d.current=null,p.current=void 0,t({searchMatches:null}),s(!1)},[t,u]);let v=zi({goToNextItem:f,goToPreviousItem:x,searchMatches:l});tm(()=>{let E=w=>{let C=w.target;if(w.key===S.ESCAPE&&!e.state.openDialog&&!e.state.openPopup){w.preventDefault(),w.stopPropagation(),t({openSidebar:null});return}if(w[S.CTRL_OR_CMD]&&w.key===S.F){if(w.preventDefault(),w.stopPropagation(),e.state.openDialog)return;o.current?.matches(":focus")||(e.state.openDialog&&t({openDialog:null}),o.current?.focus(),o.current?.select())}C instanceof e.ownerWindow.HTMLElement&&C.closest(".layer-ui__search")&&v.searchMatches.items.length&&(w.key===S.ENTER&&(w.stopPropagation(),v.goToNextItem()),w.key===S.ARROW_UP?(w.stopPropagation(),v.goToPreviousItem()):w.key===S.ARROW_DOWN&&(w.stopPropagation(),v.goToNextItem()))};return Ne(e.ownerWindow,"keydown",E,{capture:!0,passive:!1})},[t,v,e]);let y=`${l.items.length} ${l.items.length===1?h("search.singleResult"):h("search.multipleResults")}`;return yn("div",{className:"layer-ui__search",children:[oo("div",{className:"layer-ui__search-header",children:oo(ji,{className:Qe.SEARCH_MENU_INPUT_WRAPPER,value:r,ref:o,placeholder:h("search.placeholder"),icon:zo,onChange:E=>{n(E),s(!0);let w=E.trim();f5(w,e,(C,I)=>{c({nonce:Mn(),items:C}),u(I),d.current=w,p.current=e.scene.getSceneNonce(),t({searchMatches:C.length?{focusedId:null,matches:C.map(A=>({id:A.element.id,focus:!1,matchedLines:A.matchedLines}))}:null}),s(!1)})},selectOnRender:!0})}),yn("div",{className:"layer-ui__search-count",children:[l.items.length>0&&yn(nR,{children:[m!==null&&m>-1?yn("div",{children:[m+1," / ",y]}):oo("div",{children:y}),yn("div",{className:"result-nav",children:[oo(mo,{onSelect:()=>{f()},className:"result-nav-btn",children:ld}),oo(mo,{onSelect:()=>{x()},className:"result-nav-btn",children:ix})]})]}),l.items.length===0&&i&&d.current&&oo("div",{style:{margin:"1rem auto"},children:h("search.noMatch")})]}),oo(Q7,{matches:l,onItemClick:u,focusIndex:m,searchQuery:i})]})},h5=e=>{let t=[e.preview.moreBefore?"...":"",e.preview.previewText.slice(0,e.preview.indexInSearchQuery),e.preview.previewText.slice(e.preview.indexInSearchQuery,e.preview.indexInSearchQuery+e.searchQuery.length),e.preview.previewText.slice(e.preview.indexInSearchQuery+e.searchQuery.length),e.preview.moreAfter?"...":""];return oo("div",{tabIndex:-1,className:Y7("layer-ui__result-item",{active:e.highlighted}),onClick:e.onClick,ref:o=>{e.highlighted&&o?.scrollIntoView({behavior:"auto",block:"nearest"})},children:oo("div",{className:"preview-text",children:t.flatMap((o,r)=>oo(X7,{children:r===2?oo("b",{children:o}):o},r))})})},q7=e=>{let t=p5(()=>e.matches.items.filter(r=>ae(r.element)),[e.matches]),o=p5(()=>e.matches.items.filter(r=>J(r.element)),[e.matches]);return yn("div",{children:[t.length>0&&yn("div",{className:"layer-ui__search-result-container",children:[yn("div",{className:"layer-ui__search-result-title",children:[oo("div",{className:"title-icon",children:Br}),oo("div",{children:h("search.frames")})]}),t.map((r,n)=>oo(h5,{searchQuery:e.searchQuery,preview:r.preview,highlighted:n===e.focusIndex,onClick:()=>e.onItemClick(n)},r.element.id+r.index)),o.length>0&&oo("div",{className:"layer-ui__divider"})]}),o.length>0&&yn("div",{className:"layer-ui__search-result-container",children:[yn("div",{className:"layer-ui__search-result-title",children:[oo("div",{className:"title-icon",children:ln}),oo("div",{children:h("search.texts")})]}),o.map((r,n)=>oo(h5,{searchQuery:e.searchQuery,preview:r.preview,highlighted:n+t.length===e.focusIndex,onClick:()=>e.onItemClick(n+t.length)},r.element.id+r.index))]})]})},J7=(e,t)=>e.matches.nonce===t.matches.nonce&&e.focusIndex===t.focusIndex,Q7=$7(q7,J7),g5=(e,t,o)=>{let i=e.slice(0,t),a=i.split(/\s+/),s=i.endsWith(" "),l=a.length-2-1-(s?0:1),c=a.slice(l<=0?0:l).join(" ")+(s?" ":""),d=20;c=c.length>d?c.slice(-d):c;let p=e.slice(t+o.length),m=p.split(/\s+/),u=!p.startsWith(" "),b=u?6:5,f=(u?"":" ")+m.slice(0,b).join(" ");return{indexInSearchQuery:c.length,previewText:c+o+f,moreBefore:l>0,moreAfter:m.length>b}},eR=(e,t)=>{let o=e.split(`
|
|
24
|
+
`),r=[],n=0;for(let i=0;i<o.length;i++){let a=o[i],s=o[i+1];if(s){let l=t.indexOf(s,n);if(l>a.length+n){let c=l-(a.length+n);for(;c>0;)a+=" ",c--}}r.push(a),n=n+a.length}return r.join(`
|
|
25
|
+
`)},tR=(e,t,o)=>{let n=eR(e.text,e.originalText).split(`
|
|
26
|
+
`),i=[],a=0,s=0;for(let p of n){let m=a,u=m+p.length-1;i.push({line:p,startIndex:m,endIndex:u,lineNumber:s}),a=u+1,s++}let l=o,c=e.originalText.slice(o,o+t.length),d=[];for(let p of i){if(c==="")break;if(l>=p.startIndex&&l<=p.endIndex){let m=p.endIndex+1-l,u=p.line.slice(0,l-p.startIndex),b=c.slice(0,m);c=c.slice(m);let f=dt(u,ut(e),e.lineHeight);if(u===""&&(f.width=0),e.textAlign!=="left"&&p.line.length>0){let w=dt(p.line,ut(e),e.lineHeight),C=e.textAlign==="center"?(e.width-w.width)/2:e.width-w.width;f.width+=C}let{width:x,height:v}=dt(b,ut(e),e.lineHeight),y=f.width,E=p.lineNumber*f.height;d.push({offsetX:y,offsetY:E,width:x,height:v,showOnCanvas:!0}),l+=m}}return d},oR=(e,t,o,r)=>{let n=e.name??Kf(e),i=n.slice(o,o+t.length),a=n.slice(0,o),s=ut({fontSize:rt.nameFontSize,fontFamily:pt.Assistant}),l=wo(pt.Assistant),c=dt(a,s,l);a===""&&(c.width=0);let d=dt(i,s,l),p=c.width,m=-c.height-rt.strokeWidth,u=d.width;return[{offsetX:p,offsetY:m,width:u,height:d.height,showOnCanvas:p+u<=e.width*r}]},rR=e=>e.replace(/[.*+?^${}()|[\]\\-]/g,"\\$&"),f5=K7((e,t,o)=>{if(!e||e===""){o([],null);return}let r=t.scene.getNonDeletedElements(),n=r.filter(m=>J(m)),i=r.filter(m=>ae(m));n.sort((m,u)=>m.y-u.y),i.sort((m,u)=>m.y-u.y);let a=[],s=new RegExp(rR(e),"gi");for(let m of n){let u=null,b=m.originalText;for(;(u=s.exec(b))!==null;){let f=g5(b,u.index,e),x=tR(m,e,u.index);x.length>0&&a.push({element:m,searchQuery:e,preview:f,index:u.index,matchedLines:x})}}let l=[];for(let m of i){let u=null,b=m.name??Kf(m);for(;(u=s.exec(b))!==null;){let f=g5(b,u.index,e),x=oR(m,e,u.index,t.state.zoom.value);x.length>0&&l.push({element:m,searchQuery:e,preview:f,index:u.index,matchedLines:x})}}let c=new Set(t.visibleElements.map(m=>m.id)),d=[...l,...a],p=d.findIndex(m=>c.has(m.element.id))??null;o(d,p)},j7);import{jsx as Vr,jsxs as x5}from"react/jsx-runtime";import{createElement as aR}from"react";var E5=si("DefaultSidebarTrigger",e=>{let{DefaultSidebarTriggerTunnel:t}=at();return Vr(t.In,{children:Vr(Tr.Trigger,{...e,className:"default-sidebar-trigger",name:uo.name})})});E5.displayName="DefaultSidebarTrigger";var y5=({children:e})=>{let{DefaultSidebarTabTriggersTunnel:t}=at();return Vr(t.In,{children:e})};y5.displayName="DefaultTabTriggers";var Ag=Object.assign(si("DefaultSidebar",({children:e,className:t,onDock:o,docked:r,...n})=>{let i=fe(),a=Ce(),{DefaultSidebarTabTriggersTunnel:s}=at(),l=i.openSidebar?.tab===Cn;return aR(Tr,{...n,name:"default",key:"default",className:iR("default-sidebar",t),docked:l||(r??i.defaultSidebarDockedPreference),onDock:l||o===!1||!o&&r!=null?void 0:wi(o,c=>{a({defaultSidebarDockedPreference:c})})},x5(Tr.Tabs,{children:[Vr(Tr.Header,{children:x5(Tr.TabTriggers,{children:[Vr(Tr.TabTrigger,{tab:Cn,children:zo}),Vr(Tr.TabTrigger,{tab:gc,children:jc}),Vr(s.Out,{})]})}),Vr(Tr.Tab,{tab:gc,children:Vr(_I,{})}),Vr(Tr.Tab,{tab:Cn,children:Vr(b5,{})}),e]}))}),{Trigger:E5,TabTriggers:y5});import{useEffect as iN,useState as aN}from"react";import{useState as EE,useRef as O5,useEffect as yE,useDeferredValue as vR}from"react";import{useEffect as v5,useRef as w5,useState as T5}from"react";import{jsx as Lg}from"react/jsx-runtime";var sR=300,C5=({input:e,placeholder:t,onChange:o,onKeyboardSubmit:r,errorLine:n})=>{let i=w5(null),a=w5(r);a.current=r;let[s,l]=T5({type:"loading"}),[c,d]=T5(!1),{theme:p}=fe();if(v5(()=>{let m=!1,u=setTimeout(()=>{m||d(!0)},sR);return import("./components/TTDDialog/CodeMirrorEditor-WLFHUPRX.js").then(b=>{m||l({type:"ready",component:b.default})}).catch(()=>{m||l({type:"fallback"})}).finally(()=>{clearTimeout(u)}),()=>{m=!0,clearTimeout(u)}},[]),v5(()=>{if(s.type!=="fallback"||!a.current)return;let m=i.current;if(m){let u=b=>{b[S.CTRL_OR_CMD]&&b.key===S.ENTER&&(b.preventDefault(),a.current?.())};return m.focus(),m.addEventListener("keydown",u),()=>{m.removeEventListener("keydown",u)}}},[s.type]),s.type==="ready"){let m=s.component;return Lg(m,{value:e,onChange:o,onKeyboardSubmit:r,placeholder:t,theme:p,errorLine:n})}return s.type==="fallback"?Lg("textarea",{className:"ttd-dialog-input",onChange:m=>o(m.target.value),value:e,placeholder:t,ref:i}):c?Lg("div",{className:"ttd-dialog-input ttd-dialog-input--loading",children:Lg(Nt,{})}):null};import mR from"clsx";var S5=/(?:Parse|Lexical) error on line (\d+)[.:]/i,I5=/Trying to inactivate an inactive participant \((.+)\)/i,lR=/^\s*-+\^\s*$/,om=e=>S5.test(e),_g=e=>om(e)||I5.test(e),k5=e=>lR.test(e),fE=e=>{let t=e.match(I5);return t?.[1]?t[1].trim():null},cR=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),dR=(e,t)=>{let o=fE(e);if(!o)return null;let r=new RegExp(`^\\s*deactivate\\s+${cR(o)}(?:\\s+%%.*)?\\s*$`),n=t.split(/\r?\n/);for(let i=n.length-1;i>=0;i--)if(r.test(n[i]))return i+1;return null},rm=(e,t)=>{let o=e.match(S5);return o?Number.parseInt(o[1],10):t?dR(e,t):null},ia=(e,t)=>(e.match(t)||[]).length,M5=(e,t)=>{if(!om(e))return null;let o=rm(e,t),r=o?`Syntax error near line ${o}.`:"Syntax error in Mermaid diagram.",n=[];if(t){let i=ia(t,/\[/g),a=ia(t,/\]/g);i!==a&&n.push("Unbalanced square brackets in a node label.");let s=ia(t,/\(/g),l=ia(t,/\)/g);s!==l&&n.push("Unbalanced parentheses in a node shape.");let c=ia(t,/\{/g),d=ia(t,/\}/g);c!==d&&n.push("Unbalanced braces in a decision node.");let p=ia(t,/^\s*subgraph\b/gm),m=ia(t,/^\s*end\s*$/gm);p>m&&n.push("A block is missing an `end` statement.")}return(/got 'NODE_STRING'/.test(e)||/got 'PS'/.test(e))&&n.push("An extra character/token may appear after a node or label definition."),n.length===0&&(n.push("A node or edge line is malformed (missing/extra delimiters)."),n.push("A block (`subgraph`, `class`, etc.) may be incomplete.")),{summary:r,likelyCauses:[...new Set(n)]}},A5=e=>om(e)?e.replace(/\n\s*Expecting[\s\S]*$/,"").trimEnd():e;import{jsx as Ir,jsxs as Pg}from"react/jsx-runtime";var Dg=({error:e,canvasRef:t,loaded:o,hideErrorDetails:r,sourceText:n,autoFixAvailable:i,onApplyAutoFix:a})=>{let s=e?r?h("chat.errors.mermaidParseError"):A5(e.message):null,l=e&&!r?M5(e.message,n):null,c=!!i&&!!a&&!r,d=s?.split(/\r?\n/)??[];return Pg("div",{className:`ttd-dialog-output-wrapper ${e?"ttd-dialog-output-wrapper--error":""}`,children:[e&&Ir("div",{"data-testid":"ttd-dialog-output-error",className:"ttd-dialog-output-error",children:Pg("div",{className:"ttd-dialog-output-error-content",children:[Ir("div",{className:"ttd-dialog-output-error-icon",children:ad}),l&&Pg("div",{className:"ttd-dialog-output-error-summary",children:[Ir("div",{className:"ttd-dialog-output-error-summary__headline",children:l.summary}),Ir("div",{className:"ttd-dialog-output-error-summary__label",children:"Likely causes:"}),Ir("ul",{className:"ttd-dialog-output-error-summary__causes",children:l.likelyCauses.map(p=>Ir("li",{children:p},p))})]}),Ir("div",{className:"ttd-dialog-output-error-message",children:d.map((p,m)=>Pg("span",{className:k5(p)?"ttd-dialog-output-error-message__caret":void 0,children:[p,m<d.length-1?`
|
|
27
|
+
`:""]},`error-line-${m}`))}),!r&&Ir("div",{className:"ttd-dialog-output-error-autofix-slot",children:c?Ir(mo,{className:"ttd-dialog-panel-button ttd-dialog-output-error-autofix",onSelect:a,children:h("mermaid.autoFixAvailable")}):null})]})},"error"),o?Ir("div",{className:mR("ttd-dialog-output-canvas-container",{invisible:!!e}),children:Ir("div",{ref:t,className:"ttd-dialog-output-canvas-content"})},"canvas"):Ir(Nt,{size:"2rem"})]})};import $l from"clsx";import{Fragment as pR}from"react";import{jsx as Zl,jsxs as jl}from"react/jsx-runtime";var cs=({label:e,children:t,panelActions:o=[],onTextSubmitInProgess:r,renderTopRight:n,renderSubmitShortcut:i,className:a,panelActionJustifyContent:s="flex-start"})=>{let l=c=>{if(c?.variant==="link")return jl("button",{className:$l("ttd-dialog-panel-action-link",c.className),onClick:c.action,disabled:c?.disabled||r,type:"button",children:[c.label,c.icon&&Zl("span",{className:"ttd-dialog-panel-action-link__icon",children:c.icon})]});if(c?.variant==="button")return jl(mo,{className:$l("ttd-dialog-panel-button",c.className),onSelect:c.action?c.action:()=>{},disabled:c?.disabled||r,children:[jl("div",{className:$l({invisible:r}),children:[c?.label,c?.icon&&Zl("span",{children:c.icon})]}),r&&Zl(Nt,{})]});if(c?.variant==="rateLimit")return Zl("div",{className:$l("ttd-dialog-panel__rate-limit",c.className),children:c.label})};return jl("div",{className:$l("ttd-dialog-panel",a),children:[(e||n)&&jl("div",{className:"ttd-dialog-panel__header",children:[typeof e=="string"?Zl("label",{children:e}):e,n?.()]}),t,jl("div",{className:$l("ttd-dialog-panel-button-container",{invisible:!o.length}),style:{justifyContent:s},children:[o.filter(Boolean).map(c=>Zl(pR,{children:l(c)},c.label)),!r&&i?.()]})]})};import{jsx as uR}from"react/jsx-runtime";var L5=({children:e})=>uR("div",{className:"ttd-dialog-panels",children:e});import{jsx as _5,jsxs as hR}from"react/jsx-runtime";var P5=()=>hR("div",{className:"ttd-dialog-submit-shortcut",children:[_5("div",{className:"ttd-dialog-submit-shortcut__key",children:z("CtrlOrCmd")}),_5("div",{className:"ttd-dialog-submit-shortcut__key",children:z("Enter")})]});var gR=(e,t)=>{let o=rm(e,t);return o==null?null:o-1},D5=(e,t,o)=>{if(t<0||t>=e.length)return null;let r=o(e[t]);if(r===e[t])return null;let n=[...e];return n[t]=r,n.join(`
|
|
28
|
+
`)},fR=e=>{let t=e.match(/^(.*(?:\[[^\]]*]|\([^)]*\)|\{[^}]*}|"(?:[^"]*)"|'(?:[^']*)'))([A-Za-z]+)\s*$/);if(t)return t[1];let o=e.match(/^(.*(?:\[[^\]]*]|\([^)]*\)|\{[^}]*}|"(?:[^"]*)"|'(?:[^']*)'))([,;:])\s*$/);return o?o[1]:e},R5=e=>e.replace(/(\|[^|\n]+\|)\s*>\s*(?=[A-Za-z0-9_("[{'`])/g,"$1 "),N5=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),bR=(e,t)=>{let o=new RegExp(`^\\s*deactivate\\s+${N5(t)}(?:\\s+%%.*)?\\s*$`),r=e.split(/\r?\n/);for(let n=r.length-1;n>=0;n--)if(o.test(r[n]))return r.filter((i,a)=>a!==n).join(`
|
|
29
|
+
`);return null},xR=(e,t)=>{let o=new RegExp(`^\\s*deactivate\\s+${N5(t)}(?:\\s+%%.*)?\\s*$`),r=e.split(/\r?\n/),n=!1,i=r.filter(a=>o.test(a)?(n=!0,!1):!0);return n?i.join(`
|
|
30
|
+
`):null},ER=e=>{let t=(e.match(/^\s*subgraph\b/gm)||[]).length,o=(e.match(/^\s*end\s*$/gm)||[]).length,r=t-o;if(r<=0)return null;let n=Array.from({length:r},()=>"end").join(`
|
|
31
31
|
`);return`${e.trimEnd()}
|
|
32
|
-
${n}`},
|
|
32
|
+
${n}`},yR=e=>e.replace(/[“”]/g,'"').replace(/[‘’]/g,"'"),bE=(e,t)=>{if(!_g(t)||!e.trim())return[];let o=[],r=new Set,n=a=>{!a||a===e||r.has(a)||(r.add(a),o.push(a))},i=fE(t);if(i&&(n(bR(e,i)),n(xR(e,i))),om(t)){let a=e.split(/\r?\n/),s=gR(t,e),l=s==null?[]:[s,s-1,s+1];for(let d of l)n(D5(a,d,p=>fR(p))),n(D5(a,d,p=>R5(p)));n(R5(e)),n(ER(e));let c=yR(e);n(c===e?null:c)}return o};var xE=({canvasRef:e,setError:t})=>{let o=e.current;if(!o)return;let r=o.parentElement;r&&(r.style.background="",t(null),o.replaceChildren())},ql=async({canvasRef:e,mermaidToExcalidrawLib:t,mermaidDefinition:o,setError:r,data:n,theme:i})=>{let a=e.current,s=a?.parentElement;if(!a||!s)return{success:!1};if(!o)return xE({canvasRef:e,setError:r}),{success:!1};let l;try{let c=await t.api;try{l=await c.parseMermaidToExcalidraw(o)}catch(u){let b=u;if(!o.includes('"'))return{success:!1,error:b};try{l=await c.parseMermaidToExcalidraw(o.replace(/"/g,"'"))}catch{return{success:!1,error:b}}}let{elements:d,files:p={}}=l;r(null),n.current={elements:Ns(d,{regenerateIds:!0}),files:p};let m=await rs({data:{elements:n.current.elements,files:n.current.files},config:{theme:i,padding:fi,maxWidthOrHeight:Math.max(s.offsetWidth,s.offsetHeight)*window.devicePixelRatio}});return s.style.background="var(--default-bg-color)",a.replaceChildren(m),{success:!0}}catch(c){return s.style.background="var(--default-bg-color)",o&&r(c),{success:!1,error:c}}},Jl=e=>{xr.set(bi.MERMAID_TO_EXCALIDRAW,e)},nm=({app:e,data:t,text:o,shouldSaveMermaidDataToStorage:r})=>{let{elements:n,files:i}=t.current;n.length&&(e.addElementsFromPasteOrLibrary({elements:n,files:i,position:"center",fit:"scale-down"}),e.setOpenDialog(null),r&&o&&Jl(o))};import{Fragment as MR,jsx as Yr,jsxs as F5}from"react/jsx-runtime";var wR=`flowchart TD
|
|
33
33
|
A[Christmas] -->|Get money| B(Go shopping)
|
|
34
34
|
B --> C{Let me think}
|
|
35
35
|
C -->|One| D[Laptop]
|
|
36
36
|
C -->|Two| E[iPhone]
|
|
37
|
-
C -->|Three| F[Car]`,E5=fn(Ms,300),O8=500,F8=4,B8=30,z8=e=>e instanceof Error?e.message:typeof e=="string"?e:e&&typeof e=="object"&&"message"in e&&typeof e.message=="string"?e.message:"",H8=({mermaidToExcalidrawLib:e,isActive:o})=>{let[t,r]=Mx(()=>nr.get(qn.MERMAID_TO_EXCALIDRAW)||N8),n=R8(t),[i,a]=Mx(null),[l,s]=Mx(null),c=i?.message?_d(i.message,n):null,d=x5(null),p=x5({elements:[],files:null}),m=Ke(),{theme:u}=fe();Ax(()=>{o&&((async()=>{try{if(!n.trim()){kx({canvasRef:d,setError:a});return}let v=await ks({canvasRef:d,data:p,mermaidToExcalidrawLib:e,setError:a,mermaidDefinition:n,theme:u});if(!v.success){let y=v.error??new Error("Invalid mermaid definition");a(y)}}catch(v){Ft()&&console.error("Failed to parse mermaid definition",v)}})(),E5(n))},[n,e,o,u]),Ax(()=>()=>{E5.flush()},[]),Ax(()=>{let x=i?.message??"",v=n;if(!(o&&Vh(x)&&!!v.trim()&&e.loaded)){s(null);return}let E=Sx(v,x);if(!E.length){s(null);return}let w=!1,T=setTimeout(async()=>{try{let S=await e.api,_=new Set([v]),M=E.map(L=>({text:L,depth:1})),N=0;for(;M.length>0&&N<B8;){let L=M.shift();if(!(!L||_.has(L.text))){_.add(L.text),N+=1;try{await S.parseMermaidToExcalidraw(L.text),w||s(L.text);return}catch(D){if(L.depth>=F8)continue;let O=z8(D);if(!O)continue;let V=Sx(L.text,O);for(let K of V)_.has(K)||M.push({text:K,depth:L.depth+1})}}}}catch{}w||s(null)},O8);return()=>{w=!0,clearTimeout(T)}},[n,i?.message,o,e]);let b=()=>{Pd({app:m,data:p,text:t,shouldSaveMermaidDataToStorage:!0})},f=()=>{l&&r(l)};return y5(U8,{children:[Nr("div",{className:"ttd-dialog-desc",children:Nr(bo,{i18nKey:"mermaid.description",flowchartLink:x=>Nr("a",{href:"https://mermaid.js.org/syntax/flowchart.html",target:"_blank",rel:"noreferrer",children:x}),sequenceLink:x=>Nr("a",{href:"https://mermaid.js.org/syntax/sequenceDiagram.html",target:"_blank",rel:"noreferrer",children:x}),classLink:x=>Nr("a",{href:"https://mermaid.js.org/syntax/classDiagram.html",target:"_blank",rel:"noreferrer",children:x}),erdLink:x=>Nr("a",{href:"https://mermaid.js.org/syntax/entityRelationshipDiagram.html",target:"_blank",rel:"noreferrer",children:x})})}),y5(p5,{children:[Nr(Oa,{children:Nr(a5,{input:t,placeholder:h("mermaid.inputPlaceholder"),onChange:x=>r(x),errorLine:c,onKeyboardSubmit:()=>{b()}})}),Nr(Oa,{panelActions:[{action:()=>{b()},label:h("mermaid.button"),icon:Mn,variant:"button"}],renderSubmitShortcut:()=>Nr(h5,{}),children:Nr(Kh,{canvasRef:d,loaded:e.loaded,error:i,sourceText:t,autoFixAvailable:!!l,onApplyAutoFix:f})})]})]})},v5=H8;import{useRef as l7}from"react";import{useRef as T5,useEffect as K8,useLayoutEffect as X8}from"react";import{jsx as Lx,jsxs as G8}from"react/jsx-runtime";var Xh=()=>G8("div",{className:"chat-interface__welcome-screen__welcome-message",children:[Lx("h3",{children:h("chat.placeholder.title")}),Lx("p",{children:h("chat.placeholder.description")}),Lx("p",{children:h("chat.placeholder.hint")})]});import W8 from"clsx";import{useState as V8,useEffect as Y8}from"react";import{Fragment as w5,jsx as Wt,jsxs as pr}from"react/jsx-runtime";var _x=({message:e,onMermaidTabClick:o,onAiRepairClick:t,onDeleteMessage:r,onInsertMessage:n,onRetry:i,rateLimitRemaining:a,isLastMessage:l,renderWarning:s,allowFixingParseError:c})=>{let[d,p]=V8(!1);Y8(()=>{if(!e.error||!l)return;if(e.error&&!e.lastAttemptAt){p(!0);return}let u=Date.now()-e.lastAttemptAt,b=Math.max(0,5e3-u);if(b===0){p(!0);return}p(!1);let f=setTimeout(()=>{p(!0)},b);return()=>clearTimeout(f)},[e.error,e.lastAttemptAt,l]);let m=u=>u.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});if(e.type==="warning"){let u=s?.(e);return Wt("div",{className:"chat-message chat-message--system",children:pr("div",{className:"chat-message__content",children:[pr("div",{className:"chat-message__header",children:[Wt("span",{className:"chat-message__role",children:h("chat.role.system")}),Wt("span",{className:"chat-message__timestamp",children:m(e.timestamp)})]}),Wt("div",{className:"chat-message__body",children:Wt("div",{className:"chat-message__text",children:u||(e.warningType==="messageLimitExceeded"?pr(w5,{children:[h("chat.rateLimit.messageLimit"),Wt("div",{style:{marginTop:"10px"},children:Wt(dr,{onClick:()=>{window.open(`${k.VITE_APP_PLUS_LP}/plus?utm_source=excalidraw&utm_medium=app&utm_content=ttdChatBanner#excalidraw-redirect`,"_blank","noopener")},children:h("chat.upsellBtnLabel")})})]}):h("chat.rateLimit.generalRateLimit"))})})]})})}return pr("div",{className:`chat-message chat-message--${e.type}`,children:[pr("div",{className:"chat-message__content",children:[pr("div",{className:"chat-message__header",children:[Wt("span",{className:"chat-message__role",children:e.type==="user"?h("chat.role.user"):h("chat.role.assistant")}),Wt("span",{className:"chat-message__timestamp",children:m(e.timestamp)})]}),Wt("div",{className:"chat-message__body",children:e.error?pr(w5,{children:[Wt("div",{className:"chat-message__error",children:e.content}),e.errorType!=="parse"&&pr("div",{className:"chat-message__error_message",children:["Error: ",e.error||h("chat.errors.generationFailed")]}),e.errorType==="parse"&&c&&pr("div",{className:"chat-message__error_message",children:[Wt("p",{children:h("chat.errors.invalidDiagram")}),pr("div",{className:"chat-message__error-actions",children:[o&&Wt("button",{className:"chat-message__error-link",onClick:()=>o(e),type:"button",children:h("chat.errors.fixInMermaid")}),t&&Wt("button",{className:"chat-message__error-link",onClick:()=>t(e),disabled:a===0,type:"button",children:h("chat.errors.aiRepair")})]})]})]}):pr("div",{className:"chat-message__text",children:[e.content,e.isGenerating&&Wt("span",{className:"chat-message__cursor",children:"\u258B"})]})})]}),e.type==="assistant"&&!e.isGenerating&&pr("div",{className:"chat-message__actions",children:[!e.error&&n&&Wt("button",{className:"chat-message__action",onClick:()=>n(e),type:"button","aria-label":h("chat.insert"),title:h("chat.insert"),children:$b}),o&&e.content&&Wt("button",{className:"chat-message__action",onClick:()=>o(e),type:"button","aria-label":h("chat.viewAsMermaid"),title:h("chat.viewAsMermaid"),children:Mp}),r&&e.errorType!=="network"&&Wt("button",{className:"chat-message__action chat-message__action--danger",onClick:()=>r(e.id),type:"button","aria-label":h("chat.deleteMessage"),title:h("chat.deleteMessage"),children:Kt}),e.errorType==="network"&&i&&l&&Wt("button",{className:W8("chat-message__action",{invisible:!d}),onClick:()=>i(e),type:"button","aria-label":h("chat.retry"),title:h("chat.retry"),children:Zb})]})]})};import{jsx as Vn,jsxs as Px}from"react/jsx-runtime";var Dx=({chatId:e,messages:o,currentPrompt:t,onPromptChange:r,onGenerate:n,isGenerating:i,rateLimits:a,onAbort:l,onMermaidTabClick:s,onAiRepairClick:c,onDeleteMessage:d,onInsertMessage:p,onRetry:m,renderWelcomeScreen:u,renderWarning:b})=>{let f=T5(null),x=T5(null);X8(()=>{f.current?.scrollIntoView()},[o]),K8(()=>{x.current&&x.current.focus()},[e]);let v=_=>{let M=_.target.value;r(M)},y=()=>{if(i&&l){l();return}let _=t.trim();_&&(n({prompt:_}),r(""))},E=_=>{_.key===I.ENTER&&!_.shiftKey&&(_.preventDefault(),i||y())},w=t.trim().length>3&&!i&&(a?.rateLimitRemaining??1)>0,T=i&&!!l,S=_=>{let M=_.target;M.style.height="auto",M.style.height=`${Math.min(M.scrollHeight,120)}px`};return Px("div",{className:"chat-interface",children:[Px("div",{className:"chat-interface__messages",children:[o.length===0?Vn("div",{className:"chat-interface__welcome-screen",children:u?u({rateLimits:a??null}):Vn(Xh,{})}):o.map((_,M)=>Vn(_x,{message:_,onMermaidTabClick:s,onAiRepairClick:c,onDeleteMessage:d,onInsertMessage:p,onRetry:m,rateLimitRemaining:a?.rateLimitRemaining,isLastMessage:M===o.length-1,renderWarning:b,allowFixingParseError:_.errorType==="parse"&&M===o.length-1},_.id)),Vn("div",{ref:f,id:"messages-end"})]}),Vn("div",{className:"chat-interface__input-container",children:Vn("div",{className:"chat-interface__input-outer",children:Px("div",{className:"chat-interface__input-wrapper",style:{borderColor:i?"var(--dialog-border-color)":void 0},children:[Vn("textarea",{ref:x,autoFocus:!0,className:"chat-interface__input",value:t,onChange:v,onKeyDown:E,placeholder:i?h("chat.generating"):a?.rateLimitRemaining===0?h("chat.rateLimit.messageLimitInputPlaceholder"):o.length>0?h("chat.inputPlaceholderWithMessages"):h("chat.inputPlaceholder",{shortcut:"Shift + Enter"}),disabled:a?.rateLimitRemaining===0,rows:1,cols:30,onInput:S}),Vn("button",{className:"chat-interface__send-button",onClick:y,disabled:!w&&!T,type:"button",children:Vn(qr,{size:"1.5em",icon:i?ob:Mn})})]})})})]})};var Zh=Ce(null),$h=Ce(!1),Ui=Ce(null),ur=Ce({id:vo(),messages:[],currentPrompt:""});var Gi=(e,o)=>{let{messages:t}=e,r=gm(t,a=>a.type==="assistant");if(r===-1)return e;let n=t[r],i=t.slice();return i[r]={...n,...o},{...e,messages:i}},Wi=e=>{let{messages:o}=e,t=gm(o,r=>r.type==="assistant");return o[t]},Dd=(e,o)=>{let t=o.map(r=>({...r,id:vo(),timestamp:new Date}));return{...e,messages:[...e.messages,...t]}},C5=e=>{let o=gm(e.messages??[],t=>t.type==="assistant");return o!==-1?{...e,messages:e.messages.filter((t,r)=>r!==o)}:e},I5=e=>{let o=[];for(let t of e.messages)t.content&&(t.type==="user"||t.type==="assistant")&&o.push({role:t.type,content:t.content});return o};var Rd=()=>{let[e,o]=re(ur);return{addUserMessage:a=>{o(l=>Dd(l,[{type:"user",content:a}]))},addAssistantMessage:()=>{o(a=>Dd(a,[{type:"assistant",content:"",isGenerating:!0}]))},setAssistantError:(a,l="other",s)=>{let c=s?JSON.stringify({name:s instanceof Error?s.name:"Error",message:s instanceof Error?s.message:String(s),stack:s instanceof Error?s.stack:void 0}):void 0;o(d=>Gi(d,{isGenerating:!1,error:a,errorType:l,errorDetails:c}))},chatHistory:e,setChatHistory:o,setLastRetryAttempt:()=>{o(a=>Gi(a,{lastAttemptAt:Date.now()}))}}};import{useCallback as Nd,useEffect as S5,useRef as Z8}from"react";var $8=e=>{let o=e.trim();return o.length<=50?o:`${o.substring(0,47)}...`},j8=Ce([]),q8=Ce(!1),J8=Ce(!1),jh=({persistenceAdapter:e})=>{let[o]=re(ur),[t,r]=re(j8),[n,i]=re(q8),[a,l]=re(J8),s=Z8(t);s.current=t;let c=o?.messages[o?.messages.length-1],d=Nd(async()=>{if(!(a||n)){i(!0);try{let f=await e.loadChats();r(f),l(!0)}catch(f){console.warn("Failed to load chats:",f),r([]),l(!0)}finally{i(!1)}}},[a,n,r,i,l,e]);S5(()=>{d()},[]);let p=Nd(async()=>{if(o.messages.length===0)return;let f=o.messages.find(S=>S.type==="user");if(!f||typeof f.content!="string")return;let x=$8(f.content),v=s.current,y=v.find(S=>S.id===o.id),E=!y||y.messages.length!==o.messages.length||y.messages.some((S,_)=>S.id!==o.messages[_]?.id||S.content!==o.messages[_]?.content),w={id:o.id,title:x,messages:o.messages.filter(S=>S.type==="user"||S.type==="assistant").map(S=>({...S,timestamp:S.timestamp instanceof Date?S.timestamp:new Date(S.timestamp)})),currentPrompt:o.currentPrompt,timestamp:E?Date.now():y?.timestamp??Date.now()},T=[...v.filter(S=>S.id!==o.id),w].sort((S,_)=>_.timestamp-S.timestamp).slice(0,10);r(T);try{await e.saveChats(T)}catch(S){console.warn("Failed to save chats:",S)}},[o,r,e]);S5(()=>{c?.isGenerating||p()},[o.messages?.length,c?.id,c?.isGenerating]);let m=Nd(async f=>{let x=s.current.filter(v=>v.id!==f);r(x);try{await e.saveChats(x)}catch(v){console.warn("Failed to save after delete:",v)}return x},[r,e]),u=Nd(f=>f,[]),b=Nd(async()=>(await p(),vo()),[p]);return{savedChats:t,saveCurrentChat:p,deleteChat:m,restoreChat:u,createNewChatId:b}};import{useCallback as M5,useEffect as qh,useMemo as A5,useRef as Fa}from"react";var k5=e=>{let o=e.trim();if(!o)return!1;let t=(o.match(/\[/g)||[]).length,r=(o.match(/\]/g)||[]).length,n=(o.match(/\{/g)||[]).length,i=(o.match(/\}/g)||[]).length,a=(o.match(/\(/g)||[]).length,l=(o.match(/\)/g)||[]).length;if(t!==r||n!==i||a!==l)return!1;let s=o.split(`
|
|
38
|
-
`).pop()?.trim()||"";return![/-->$/,/--$/,/-\.$/,/==>$/,/==$/,/~~$/,/::$/,/:$/,/\|$/,/&$/].some(d=>d.test(
|
|
37
|
+
C -->|Three| F[Car]`,B5=kn(Jl,300),TR=500,CR=4,SR=30,IR=e=>e instanceof Error?e.message:typeof e=="string"?e:e&&typeof e=="object"&&"message"in e&&typeof e.message=="string"?e.message:"",kR=({mermaidToExcalidrawLib:e,isActive:t})=>{let[o,r]=EE(()=>xr.get(bi.MERMAID_TO_EXCALIDRAW)||wR),n=vR(o),[i,a]=EE(null),[s,l]=EE(null),c=i?.message?rm(i.message,n):null,d=O5(null),p=O5({elements:[],files:null}),m=Ke(),{theme:u}=fe();yE(()=>{t&&((async()=>{try{if(!n.trim()){xE({canvasRef:d,setError:a});return}let v=await ql({canvasRef:d,data:p,mermaidToExcalidrawLib:e,setError:a,mermaidDefinition:n,theme:u});if(!v.success){let y=v.error??new Error("Invalid mermaid definition");a(y)}}catch(v){Wt()&&console.error("Failed to parse mermaid definition",v)}})(),B5(n))},[n,e,t,u]),yE(()=>()=>{B5.flush()},[]),yE(()=>{let x=i?.message??"",v=n;if(!(t&&_g(x)&&!!v.trim()&&e.loaded)){l(null);return}let E=bE(v,x);if(!E.length){l(null);return}let w=!1,C=setTimeout(async()=>{try{let I=await e.api,A=new Set([v]),M=E.map(P=>({text:P,depth:1})),N=0;for(;M.length>0&&N<SR;){let P=M.shift();if(!(!P||A.has(P.text))){A.add(P.text),N+=1;try{await I.parseMermaidToExcalidraw(P.text),w||l(P.text);return}catch(L){if(P.depth>=CR)continue;let R=IR(L);if(!R)continue;let H=bE(P.text,R);for(let K of H)A.has(K)||M.push({text:K,depth:P.depth+1})}}}}catch{}w||l(null)},TR);return()=>{w=!0,clearTimeout(C)}},[n,i?.message,t,e]);let b=()=>{nm({app:m,data:p,text:o,shouldSaveMermaidDataToStorage:!0})},f=()=>{s&&r(s)};return F5(MR,{children:[Yr("div",{className:"ttd-dialog-desc",children:Yr(Ao,{i18nKey:"mermaid.description",flowchartLink:x=>Yr("a",{href:"https://mermaid.js.org/syntax/flowchart.html",target:"_blank",rel:"noreferrer",children:x}),sequenceLink:x=>Yr("a",{href:"https://mermaid.js.org/syntax/sequenceDiagram.html",target:"_blank",rel:"noreferrer",children:x}),classLink:x=>Yr("a",{href:"https://mermaid.js.org/syntax/classDiagram.html",target:"_blank",rel:"noreferrer",children:x}),erdLink:x=>Yr("a",{href:"https://mermaid.js.org/syntax/entityRelationshipDiagram.html",target:"_blank",rel:"noreferrer",children:x})})}),F5(L5,{children:[Yr(cs,{children:Yr(C5,{input:o,placeholder:h("mermaid.inputPlaceholder"),onChange:x=>r(x),errorLine:c,onKeyboardSubmit:()=>{b()}})}),Yr(cs,{panelActions:[{action:()=>{b()},label:h("mermaid.button"),icon:Yn,variant:"button"}],renderSubmitShortcut:()=>Yr(P5,{}),children:Yr(Dg,{canvasRef:d,loaded:e.loaded,error:i,sourceText:o,autoFixAvailable:!!s,onApplyAutoFix:f})})]})]})},z5=kR;import{useRef as $R}from"react";import{useRef as U5,useEffect as DR,useLayoutEffect as RR}from"react";import{jsx as vE,jsxs as AR}from"react/jsx-runtime";var Rg=()=>AR("div",{className:"chat-interface__welcome-screen__welcome-message",children:[vE("h3",{children:h("chat.placeholder.title")}),vE("p",{children:h("chat.placeholder.description")}),vE("p",{children:h("chat.placeholder.hint")})]});import LR from"clsx";import{useState as _R,useEffect as PR}from"react";import{Fragment as H5,jsx as $t,jsxs as kr}from"react/jsx-runtime";var wE=({message:e,onMermaidTabClick:t,onAiRepairClick:o,onDeleteMessage:r,onInsertMessage:n,onRetry:i,rateLimitRemaining:a,isLastMessage:s,renderWarning:l,allowFixingParseError:c})=>{let[d,p]=_R(!1);PR(()=>{if(!e.error||!s)return;if(e.error&&!e.lastAttemptAt){p(!0);return}let u=Date.now()-e.lastAttemptAt,b=Math.max(0,5e3-u);if(b===0){p(!0);return}p(!1);let f=setTimeout(()=>{p(!0)},b);return()=>clearTimeout(f)},[e.error,e.lastAttemptAt,s]);let m=u=>u.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});if(e.type==="warning"){let u=l?.(e);return $t("div",{className:"chat-message chat-message--system",children:kr("div",{className:"chat-message__content",children:[kr("div",{className:"chat-message__header",children:[$t("span",{className:"chat-message__role",children:h("chat.role.system")}),$t("span",{className:"chat-message__timestamp",children:m(e.timestamp)})]}),$t("div",{className:"chat-message__body",children:$t("div",{className:"chat-message__text",children:u||(e.warningType==="messageLimitExceeded"?kr(H5,{children:[h("chat.rateLimit.messageLimit"),$t("div",{style:{marginTop:"10px"},children:$t(Sr,{onClick:()=>{window.open(`${k.VITE_APP_PLUS_LP}/plus?utm_source=excalidraw&utm_medium=app&utm_content=ttdChatBanner#excalidraw-redirect`,"_blank","noopener")},children:h("chat.upsellBtnLabel")})})]}):h("chat.rateLimit.generalRateLimit"))})})]})})}return kr("div",{className:`chat-message chat-message--${e.type}`,children:[kr("div",{className:"chat-message__content",children:[kr("div",{className:"chat-message__header",children:[$t("span",{className:"chat-message__role",children:e.type==="user"?h("chat.role.user"):h("chat.role.assistant")}),$t("span",{className:"chat-message__timestamp",children:m(e.timestamp)})]}),$t("div",{className:"chat-message__body",children:e.error?kr(H5,{children:[$t("div",{className:"chat-message__error",children:e.content}),e.errorType!=="parse"&&kr("div",{className:"chat-message__error_message",children:["Error: ",e.error||h("chat.errors.generationFailed")]}),e.errorType==="parse"&&c&&kr("div",{className:"chat-message__error_message",children:[$t("p",{children:h("chat.errors.invalidDiagram")}),kr("div",{className:"chat-message__error-actions",children:[t&&$t("button",{className:"chat-message__error-link",onClick:()=>t(e),type:"button",children:h("chat.errors.fixInMermaid")}),o&&$t("button",{className:"chat-message__error-link",onClick:()=>o(e),disabled:a===0,type:"button",children:h("chat.errors.aiRepair")})]})]})]}):kr("div",{className:"chat-message__text",children:[e.content,e.isGenerating&&$t("span",{className:"chat-message__cursor",children:"\u258B"})]})})]}),e.type==="assistant"&&!e.isGenerating&&kr("div",{className:"chat-message__actions",children:[!e.error&&n&&$t("button",{className:"chat-message__action",onClick:()=>n(e),type:"button","aria-label":h("chat.insert"),title:h("chat.insert"),children:B1}),t&&e.content&&$t("button",{className:"chat-message__action",onClick:()=>t(e),type:"button","aria-label":h("chat.viewAsMermaid"),title:h("chat.viewAsMermaid"),children:mu}),r&&e.errorType!=="network"&&$t("button",{className:"chat-message__action chat-message__action--danger",onClick:()=>r(e.id),type:"button","aria-label":h("chat.deleteMessage"),title:h("chat.deleteMessage"),children:Jt}),e.errorType==="network"&&i&&s&&$t("button",{className:LR("chat-message__action",{invisible:!d}),onClick:()=>i(e),type:"button","aria-label":h("chat.retry"),title:h("chat.retry"),children:O1})]})]})};import{jsx as li,jsxs as TE}from"react/jsx-runtime";var CE=({chatId:e,messages:t,currentPrompt:o,onPromptChange:r,onGenerate:n,isGenerating:i,rateLimits:a,onAbort:s,onMermaidTabClick:l,onAiRepairClick:c,onDeleteMessage:d,onInsertMessage:p,onRetry:m,renderWelcomeScreen:u,renderWarning:b})=>{let f=U5(null),x=U5(null);RR(()=>{f.current?.scrollIntoView()},[t]),DR(()=>{x.current&&x.current.focus()},[e]);let v=A=>{let M=A.target.value;r(M)},y=()=>{if(i&&s){s();return}let A=o.trim();A&&(n({prompt:A}),r(""))},E=A=>{A.key===S.ENTER&&!A.shiftKey&&(A.preventDefault(),i||y())},w=o.trim().length>3&&!i&&(a?.rateLimitRemaining??1)>0,C=i&&!!s,I=A=>{let M=A.target;M.style.height="auto",M.style.height=`${Math.min(M.scrollHeight,120)}px`};return TE("div",{className:"chat-interface",children:[TE("div",{className:"chat-interface__messages",children:[t.length===0?li("div",{className:"chat-interface__welcome-screen",children:u?u({rateLimits:a??null}):li(Rg,{})}):t.map((A,M)=>li(wE,{message:A,onMermaidTabClick:l,onAiRepairClick:c,onDeleteMessage:d,onInsertMessage:p,onRetry:m,rateLimitRemaining:a?.rateLimitRemaining,isLastMessage:M===t.length-1,renderWarning:b,allowFixingParseError:A.errorType==="parse"&&M===t.length-1},A.id)),li("div",{ref:f,id:"messages-end"})]}),li("div",{className:"chat-interface__input-container",children:li("div",{className:"chat-interface__input-outer",children:TE("div",{className:"chat-interface__input-wrapper",style:{borderColor:i?"var(--dialog-border-color)":void 0},children:[li("textarea",{ref:x,autoFocus:!0,className:"chat-interface__input",value:o,onChange:v,onKeyDown:E,placeholder:i?h("chat.generating"):a?.rateLimitRemaining===0?h("chat.rateLimit.messageLimitInputPlaceholder"):t.length>0?h("chat.inputPlaceholderWithMessages"):h("chat.inputPlaceholder",{shortcut:"Shift + Enter"}),disabled:a?.rateLimitRemaining===0,rows:1,cols:30,onInput:I}),li("button",{className:"chat-interface__send-button",onClick:y,disabled:!w&&!C,type:"button",children:li(dn,{size:"1.5em",icon:i?Vb:Yn})})]})})})]})};var Ng=Ie(null),Og=Ie(!1),aa=Ie(null),Mr=Ie({id:No(),messages:[],currentPrompt:""});var sa=(e,t)=>{let{messages:o}=e,r=Wm(o,a=>a.type==="assistant");if(r===-1)return e;let n=o[r],i=o.slice();return i[r]={...n,...t},{...e,messages:i}},la=e=>{let{messages:t}=e,o=Wm(t,r=>r.type==="assistant");return t[o]},im=(e,t)=>{let o=t.map(r=>({...r,id:No(),timestamp:new Date}));return{...e,messages:[...e.messages,...o]}},G5=e=>{let t=Wm(e.messages??[],o=>o.type==="assistant");return t!==-1?{...e,messages:e.messages.filter((o,r)=>r!==t)}:e},W5=e=>{let t=[];for(let o of e.messages)o.content&&(o.type==="user"||o.type==="assistant")&&t.push({role:o.type,content:o.content});return t};var am=()=>{let[e,t]=le(Mr);return{addUserMessage:a=>{t(s=>im(s,[{type:"user",content:a}]))},addAssistantMessage:()=>{t(a=>im(a,[{type:"assistant",content:"",isGenerating:!0}]))},setAssistantError:(a,s="other",l)=>{let c=l?JSON.stringify({name:l instanceof Error?l.name:"Error",message:l instanceof Error?l.message:String(l),stack:l instanceof Error?l.stack:void 0}):void 0;t(d=>sa(d,{isGenerating:!1,error:a,errorType:s,errorDetails:c}))},chatHistory:e,setChatHistory:t,setLastRetryAttempt:()=>{t(a=>sa(a,{lastAttemptAt:Date.now()}))}}};import{useCallback as sm,useEffect as V5,useRef as NR}from"react";var OR=e=>{let t=e.trim();return t.length<=50?t:`${t.substring(0,47)}...`},BR=Ie([]),FR=Ie(!1),zR=Ie(!1),Bg=({persistenceAdapter:e})=>{let[t]=le(Mr),[o,r]=le(BR),[n,i]=le(FR),[a,s]=le(zR),l=NR(o);l.current=o;let c=t?.messages[t?.messages.length-1],d=sm(async()=>{if(!(a||n)){i(!0);try{let f=await e.loadChats();r(f),s(!0)}catch(f){console.warn("Failed to load chats:",f),r([]),s(!0)}finally{i(!1)}}},[a,n,r,i,s,e]);V5(()=>{d()},[]);let p=sm(async()=>{if(t.messages.length===0)return;let f=t.messages.find(I=>I.type==="user");if(!f||typeof f.content!="string")return;let x=OR(f.content),v=l.current,y=v.find(I=>I.id===t.id),E=!y||y.messages.length!==t.messages.length||y.messages.some((I,A)=>I.id!==t.messages[A]?.id||I.content!==t.messages[A]?.content),w={id:t.id,title:x,messages:t.messages.filter(I=>I.type==="user"||I.type==="assistant").map(I=>({...I,timestamp:I.timestamp instanceof Date?I.timestamp:new Date(I.timestamp)})),currentPrompt:t.currentPrompt,timestamp:E?Date.now():y?.timestamp??Date.now()},C=[...v.filter(I=>I.id!==t.id),w].sort((I,A)=>A.timestamp-I.timestamp).slice(0,10);r(C);try{await e.saveChats(C)}catch(I){console.warn("Failed to save chats:",I)}},[t,r,e]);V5(()=>{c?.isGenerating||p()},[t.messages?.length,c?.id,c?.isGenerating]);let m=sm(async f=>{let x=l.current.filter(v=>v.id!==f);r(x);try{await e.saveChats(x)}catch(v){console.warn("Failed to save after delete:",v)}return x},[r,e]),u=sm(f=>f,[]),b=sm(async()=>(await p(),No()),[p]);return{savedChats:o,saveCurrentChat:p,deleteChat:m,restoreChat:u,createNewChatId:b}};import{useCallback as K5,useEffect as Fg,useMemo as X5,useRef as ds}from"react";var Y5=e=>{let t=e.trim();if(!t)return!1;let o=(t.match(/\[/g)||[]).length,r=(t.match(/\]/g)||[]).length,n=(t.match(/\{/g)||[]).length,i=(t.match(/\}/g)||[]).length,a=(t.match(/\(/g)||[]).length,s=(t.match(/\)/g)||[]).length;if(o!==r||n!==i||a!==s)return!1;let l=t.split(`
|
|
38
|
+
`).pop()?.trim()||"";return![/-->$/,/--$/,/-\.$/,/==>$/,/==$/,/~~$/,/::$/,/:$/,/\|$/,/&$/].some(d=>d.test(l))};var SE=300,HR=3e3,UR=100,$5=100,Z5=({mermaidToExcalidrawLib:e,canvasRef:t})=>{let[o]=le(Mr),[,r]=le(aa),[n,i]=le(Og),a=ds(!1),s=X5(()=>la(o),[o]),l=ds(s);Fg(()=>{l.current=s},[s]);let c=ds({elements:[],files:null}),d=ds(0),p=ds(null),m=ds(!1),u=ds(SE),{theme:b}=fe(),f=K5(async y=>{if(!y.trim()||!e.loaded||a.current)return!1;a.current=!0;let E=performance.now(),w=await ql({canvasRef:t,data:c,mermaidToExcalidrawLib:e,setError:r,mermaidDefinition:y,theme:b});return performance.now()-E<UR?u.current=SE:u.current=HR,a.current=!1,w.success},[t,e,r,b]),x=X5(()=>{let y=async E=>{let w=Date.now(),C=w-d.current,I=u.current;if(!Y5(E)){m.current||(d.current=Math.max(d.current,w-I+$5),m.current=!0),p.current=E;return}if(m.current=!1,C<I){p.current=E;return}p.current=null;let A=await f(E);d.current=Date.now(),A||(d.current=d.current-I+$5,m.current=!0)};return y.flush=async()=>{if(p.current){let E=p.current;p.current=null,await f(E),d.current=Date.now()}},y.cancel=()=>{p.current=null},y},[f]),v=K5(()=>{d.current=0,p.current=null,m.current=!1,u.current=SE},[]);return Fg(()=>{s?.content&&s?.isGenerating?x(s.content):s?.isGenerating||(x.flush(),v(),s?.content&&x(s.content))},[v,x,s?.isGenerating,s?.content]),Fg(()=>{let y=l.current;!y?.content||y.error||n&&f(y.content)},[o?.id,f,n]),Fg(()=>{if(o.messages?.filter(y=>y.type==="assistant").length)n||i(!0);else{let y=t.current;if(y){let E=y.parentElement;E&&(E.style.background="",y.replaceChildren())}i(!1)}},[o.messages,i,t,n]),{data:c}};import{useRef as GR}from"react";import{parseMermaidToExcalidraw as WR}from"@excalidraw/mermaid-to-excalidraw";var IE=3,kE=1e4,j5=({onTextSubmit:e})=>{let[,t]=le(aa),[o,r]=le(Ng),[n,i]=le(Mr),{addUserMessage:a,addAssistantMessage:s,setAssistantError:l}=am(),c=GR(null),d=u=>u.length>kE||u.length<IE||o?.rateLimitRemaining===0?(u.length<IE&&t(new Error(h("chat.errors.promptTooShort",{min:IE}))),u.length>kE&&t(new Error(h("chat.errors.promptTooLong",{max:kE}))),!1):!0;return{onGenerate:async({prompt:u,isRepairFlow:b=!1})=>{if(!d(u))return;c.current&&c.current.abort(),t(null);let f=new AbortController;c.current=f,b?i(x=>sa(x,{isGenerating:!0,content:"",error:void 0,errorType:void 0,errorDetails:void 0})):(a(u),s());try{be("ai","generate","ttd");let v=[...W5(n).slice(-3),{role:"user",content:u}],{generatedResponse:y,error:E,rateLimit:w,rateLimitRemaining:C}=await e({messages:v,onStreamCreated:()=>{b&&i(I=>sa(I,{content:"",error:"",isGenerating:!0}))},onChunk:I=>{i(A=>{let M=la(A);return sa(A,{content:M.content+I})})},signal:f.signal});if(i(I=>sa(I,{isGenerating:!1})),lf(w)&&lf(C)&&r({rateLimit:w,rateLimitRemaining:C}),(E?.status===429||C===0)&&i(I=>(E?.status===429&&(I=G5(I)),I={...I,messages:I.messages.filter(M=>M.type!=="warning"||M.warningType==="rateLimitExceeded"||M.warningType==="messageLimitExceeded")},im(I,[{type:"warning",warningType:C===0?"messageLimitExceeded":"rateLimitExceeded"}]))),E){if(E.name==="AbortError"||E.message==="Aborted"||f.signal.aborted)return;let A=new Error(E.message||h("chat.errors.requestFailed"));E.status!==429&&l(A.message,"network"),t(A);return}try{await WR(y??""),be("ai","mermaid parse success","ttd")}catch(I){be("ai","mermaid parse failed","ttd");let A=new Error(I.message||h("chat.errors.mermaidParseError"));l(A.message,"parse"),t(A)}}catch(x){let v=new Error(x.message||h("chat.errors.generationFailed"));l(v.message,"other"),t(v)}finally{c.current=null}},handleAbort:()=>{c.current&&c.current.abort()}}};import{useCallback as ms,useState as VR}from"react";var q5=({persistenceAdapter:e})=>{let t=nn(aa),[o,r]=le(Mr),[n,i]=VR(!1),{restoreChat:a,deleteChat:s,createNewChatId:l}=Bg({persistenceAdapter:e}),c=ms(x=>{let v=x.messages.map(w=>({...w,timestamp:w.timestamp instanceof Date?w.timestamp:new Date(w.timestamp)})),y={id:x.id,messages:v,currentPrompt:""},E=la(y);t(E?.error?new Error(E?.error):null),r(y)},[t,r]),d=ms(async()=>{let x=await l();r({id:x,messages:[],currentPrompt:""}),t(null)},[l,r,t]),p=ms(x=>{let v=a(x);c(v),i(!1)},[a,c]),m=ms(async(x,v)=>{v.stopPropagation();let y=x===o.id,E=await s(x);if(y)if(E.length>0){let w=E[0];c(w)}else await d()},[o.id,s,c,d]),u=ms(async()=>{await d(),i(!1)},[d]),b=ms(()=>{i(x=>!x)},[]),f=ms(()=>{i(!1)},[]);return{isMenuOpen:n,onRestoreChat:p,handleDeleteChat:m,handleNewChat:u,handleMenuToggle:b,handleMenuClose:f}};import YR from"clsx";import{Fragment as KR,jsx as ps,jsxs as ME}from"react/jsx-runtime";var J5=({isOpen:e,onToggle:t,onClose:o,onNewChat:r,onRestoreChat:n,onDeleteChat:i,isNewChatBtnVisible:a,savedChats:s,activeSessionId:l,disabled:c})=>ME("div",{className:"ttd-chat-history-menu",children:[a&&ps(Sr,{onClick:r,disabled:c,children:h("chat.newChat")}),s.length>0&&ps("div",{className:"ttd-dialog-panel__menu-wrapper",children:ME(pe,{open:e,children:[ps(pe.Trigger,{onToggle:t,className:"ttd-dialog-menu-trigger",disabled:c,title:h("chat.menu"),"aria-label":h("chat.menu"),children:W1}),ps(pe.Content,{onClickOutside:o,onSelect:o,children:ps(KR,{children:s.map(d=>ME(pe.ItemCustom,{className:YR("ttd-chat-menu-item",{"ttd-chat-menu-item--active":d.id===l}),onClick:()=>{n(d)},children:[ps("span",{className:"ttd-chat-menu-item__title",children:d.title}),ps("button",{className:"ttd-chat-menu-item__delete",onClick:p=>i(d.id,p),title:h("chat.deleteChat"),"aria-label":h("chat.deleteChat"),type:"button",children:Jt})]},d.id))})})]})})]});import{jsx as Ql,jsxs as XR}from"react/jsx-runtime";var Q5=({chatId:e,messages:t,currentPrompt:o,onPromptChange:r,onGenerate:n,isGenerating:i,generatedResponse:a,isMenuOpen:s,onMenuToggle:l,onMenuClose:c,onNewChat:d,onRestoreChat:p,onDeleteChat:m,savedChats:u,activeSessionId:b,onAbort:f,onMermaidTabClick:x,onAiRepairClick:v,onDeleteMessage:y,onInsertMessage:E,onRetry:w,onViewAsMermaid:C,renderWelcomeScreen:I,renderWarning:A})=>{let[M]=le(Ng),P=(()=>{let R=[];return M&&R.push({label:h("chat.rateLimitRemaining",{count:M.rateLimitRemaining}),variant:"rateLimit",className:M.rateLimitRemaining<5?"ttd-dialog-panel__rate-limit--danger":""}),a&&R.push({action:C,label:h("chat.viewAsMermaid"),icon:Ql(dn,{icon:Yn}),variant:"link"}),R})(),L=()=>P.length===2?"space-between":P.length===1&&P[0].variant==="rateLimit"?"flex-start":"flex-end";return Ql(cs,{label:XR("div",{className:"ttd-dialog-panel__label-wrapper",children:[Ql("div",{className:"ttd-dialog-panel__label-group"}),Ql("div",{className:"ttd-dialog-panel__header-right",children:Ql(J5,{isNewChatBtnVisible:!!t.length,isOpen:s,onToggle:l,onClose:c,onNewChat:d,onRestoreChat:p,onDeleteChat:m,savedChats:u,activeSessionId:b,disabled:i})})]}),className:"ttd-dialog-chat-panel",panelActionJustifyContent:L(),panelActions:P,children:Ql(CE,{chatId:e,messages:t,currentPrompt:o,onPromptChange:r,onGenerate:n,isGenerating:i,generatedResponse:a,onAbort:f,onMermaidTabClick:x,onAiRepairClick:v,onDeleteMessage:y,onInsertMessage:E,onRetry:w,rateLimits:M,renderWelcomeScreen:I,renderWarning:A})})};import{jsx as eM}from"react/jsx-runtime";var tM=({canvasRef:e,error:t,loaded:o,onInsert:r,hideErrorDetails:n})=>{let i=[{action:r,label:h("chat.insert"),icon:Yn,variant:"button"}];return eM(cs,{panelActionJustifyContent:"flex-end",panelActions:i,className:"ttd-dialog-preview-panel",children:eM(Dg,{canvasRef:e,error:t,loaded:o,hideErrorDetails:n})})};import{jsx as AE,jsxs as qR}from"react/jsx-runtime";var ZR=({mermaidToExcalidrawLib:e,onTextSubmit:t,renderWelcomeScreen:o,renderWarning:r,persistenceAdapter:n})=>{let i=Ke(),a=Ce(),s=$R(null),[l,c]=le(aa),[d,p]=le(Mr),m=zs(Og),{savedChats:u}=Bg({persistenceAdapter:n}),b=la(d),{setLastRetryAttempt:f}=am(),{data:x}=Z5({canvasRef:s,mermaidToExcalidrawLib:e}),{onGenerate:v,handleAbort:y}=j5({onTextSubmit:t}),{isMenuOpen:E,onRestoreChat:w,handleDeleteChat:C,handleNewChat:I,handleMenuToggle:A,handleMenuClose:M}=q5({persistenceAdapter:n}),N=()=>{typeof b?.content=="string"&&(Jl(b.content),a({openDialog:{name:"ttd",tab:"mermaid"}}))},P=V=>{let $=V.content||"";$&&(Jl($),a({openDialog:{name:"ttd",tab:"mermaid"}}))},L=async V=>{let $=V.content||"";if(!$.trim()||!e.loaded)return;let oe={current:{elements:[],files:null}};(await ql({canvasRef:s,data:oe,mermaidToExcalidrawLib:e,setError:c,mermaidDefinition:$,theme:i.state.theme})).success&&nm({app:i,data:oe,text:$,shouldSaveMermaidDataToStorage:!0})},R=async V=>{let $=V.content||"",oe=V.error||"";if(!$)return;let re=`Fix the error in this Mermaid diagram. The diagram is:
|
|
39
39
|
|
|
40
40
|
\`\`\`mermaid
|
|
41
|
-
${
|
|
41
|
+
${$}
|
|
42
42
|
\`\`\`
|
|
43
43
|
|
|
44
|
-
The exception/error is: ${
|
|
44
|
+
The exception/error is: ${oe}
|
|
45
45
|
|
|
46
|
-
Please fix the Mermaid syntax and regenerate a valid diagram.`;await v({prompt:F,isRepairFlow:!0})},V=async X=>{let le=d.messages.findIndex(ce=>ce.id===X.id);if(le>0){let ce=d.messages[le-1];ce.type==="user"&&typeof ce.content=="string"&&(f(),await v({prompt:ce.content,isRepairFlow:!0}))}},K=()=>{Pd({app:i,data:x})},z=X=>{let le=d.messages.findIndex(F=>F.id===X&&F.type==="assistant"),ce=d.messages.slice(0,le-1);p({...d,messages:ce})},J=X=>{p(le=>({...le,currentPrompt:X}))};return d7("div",{className:`ttd-dialog-layout ${m?"ttd-dialog-layout--split":"ttd-dialog-layout--chat-only"}`,children:[Bx(N5,{chatId:d.id,messages:d.messages,currentPrompt:d.currentPrompt,onPromptChange:J,onGenerate:v,isGenerating:b?.isGenerating??!1,generatedResponse:b?.content,isMenuOpen:E,onMenuToggle:_,onMenuClose:M,onNewChat:S,onRestoreChat:w,onDeleteChat:T,savedChats:u,activeSessionId:d.id,onAbort:y,onMermaidTabClick:L,onAiRepairClick:O,onDeleteMessage:z,onInsertMessage:D,onRetry:V,onViewAsMermaid:N,renderWarning:r,renderWelcomeScreen:t}),m&&Bx(F5,{canvasRef:l,hideErrorDetails:b?.errorType==="parse",error:s,loaded:e.loaded,onInsert:K})]})},c7=({mermaidToExcalidrawLib:e,onTextSubmit:o,renderWelcomeScreen:t,renderWarning:r,persistenceAdapter:n})=>Bx(s7,{mermaidToExcalidrawLib:e,onTextSubmit:o,renderWelcomeScreen:t,renderWarning:r,persistenceAdapter:n}),B5=c7;import{Tabs as m7}from"radix-ui";import{useRef as z5}from"react";import{jsx as p7}from"react/jsx-runtime";var H5=e=>{let o=Ie(),t=z5(null),r=z5(0);return p7(m7.Root,{ref:t,className:"ttd-dialog-tabs-root",value:e.tab,onValueChange:n=>{if(!n)return;let i=t.current?.closest(".Modal__content");if(i){let a=i.offsetHeight||0;a>r.current&&(r.current=a,i.style.minHeight=`min(${r.current}px, 100%)`)}e.dialog==="ttd"&&bm(["text-to-diagram","mermaid"],n)&&o({openDialog:{name:e.dialog,tab:n}})},children:e.children})};H5.displayName="TTDDialogTabs";var U5=H5;import{Tabs as u7}from"radix-ui";import{jsx as h7}from"react/jsx-runtime";var zx=({children:e,...o})=>h7(u7.List,{className:"ttd-dialog-triggers",...o,children:e});zx.displayName="TTDDialogTabTriggers";import{Tabs as g7}from"radix-ui";import{jsx as G5}from"react/jsx-runtime";var Jh=({children:e,tab:o,onSelect:t,...r})=>G5(g7.Trigger,{value:o,asChild:!0,onSelect:t,children:G5("button",{type:"button",className:"ttd-dialog-tab-trigger",...r,children:e})});Jh.displayName="TTDDialogTabTrigger";import{Tabs as f7}from"radix-ui";import{jsx as b7}from"react/jsx-runtime";var Qh=({tab:e,children:o,...t})=>b7(f7.Content,{...t,value:e,children:o});Qh.displayName="TTDDialogTab";import{jsx as dn,jsxs as Hx}from"react/jsx-runtime";var eg=e=>{let o=fe();return o.openDialog?.name!=="ttd"?null:dn(y7,{...e,tab:o.openDialog.tab})};eg.WelcomeMessage=Xh;var y7=Wn("TTDDialogBase",({tab:e,...o})=>{let t=Ke(),[r,n]=E7({loaded:!1,api:import("@excalidraw/mermaid-to-excalidraw")});return x7(()=>{(async()=>{await r.api,n(a=>({...a,loaded:!0}))})()},[r.api]),dn(kt,{className:"ttd-dialog",onCloseRequest:()=>{t.setOpenDialog(null)},size:1520,title:!1,...o,autofocus:!1,children:Hx(U5,{dialog:"ttd",tab:e,children:["__fallback"in o&&o.__fallback?dn("p",{className:"dialog-mermaid-title",children:h("mermaid.title")}):Hx(zx,{children:[dn(Jh,{tab:"text-to-diagram",children:Hx("div",{className:"ttd-dialog-tab-trigger__content",children:[h("labels.textToDiagram"),dn("div",{className:"ttd-dialog-tab-trigger__badge",children:h("chat.aiBeta")})]})}),dn(Jh,{tab:"mermaid",children:h("mermaid.label")})]}),!("__fallback"in o)&&dn(Qh,{className:"ttd-dialog-content",tab:"text-to-diagram",children:dn(B5,{mermaidToExcalidrawLib:r,onTextSubmit:o.onTextSubmit,renderWelcomeScreen:o.renderWelcomeScreen,renderWarning:o.renderWarning,persistenceAdapter:o.persistenceAdapter})}),dn(Qh,{className:"ttd-dialog-content",tab:"mermaid",children:dn(v5,{mermaidToExcalidrawLib:r,isActive:e==="mermaid"})})]})})});import mR from"clsx";import pR from"lodash.throttle";import{useEffect as tk,useMemo as Kx,useState as uR,memo as hR}from"react";import v7 from"clsx";import{useEffect as V5,useRef as tg,useState as w7}from"react";var W5=.01,Od=10,Ao=(e,o)=>!(o==="angle"&&oe(e)),bt=(e,o)=>{let t=e+o/2;return t-t%o},Ls=(e,o,t)=>Object.keys(e).map(r=>({original:(t??o).get(r),latest:o.get(r)})).filter(r=>r.original!==void 0&&r.latest!==void 0);var Ha=(e,o,t,r,n,i,a=!0)=>{if(Bt(t)&&(t.startBinding||t.endBinding)){if(Math.abs(e-t.x)<Ya&&Math.abs(o-t.y)<Ya)return;jg(t,"start",r),jg(t,"end",r)}let l=r.getNonDeletedElementsMap(),s=l.get(t.id);if(!s)return;let[c,d]=[t.x+t.width/2,t.y+t.height/2],[p,m]=ke(A(t.x,t.y),A(c,d),t.angle),u=e-p,b=o-m,[f,x]=ke(A(e,o),A(c+u,d+b),-t.angle);r.mutateElement(s,{x:f,y:x},{informMutation:a,isDragging:!1}),ci(s,r,n);let v=we(t,i);if(v){let y=l.get(v.id);y&&r.mutateElement(y,{x:v.x+u,y:v.y+b},{informMutation:a,isDragging:!1})}if(oe(t)){let y=jo(i,t.id);y.forEach(E=>{let w=l.get(E.id);if(!w)return;let[T,S]=[E.x+E.width/2,E.y+E.height/2],[_,M]=ke(A(E.x,E.y),A(T,S),E.angle),N=Math.round(_+u),L=Math.round(M+b),[D,O]=ke(A(N,L),A(T+u,S+b),-E.angle);r.mutateElement(w,{x:D,y:O},{informMutation:a,isDragging:!1}),ci(w,r,n,{simultaneouslyUpdated:de(y)})})}},_s=(e,o)=>{let r=wr(o).map(n=>He(e,n).reduce((i,a)=>(i[a.id]=!0,i),{}));return e.filter(n=>!di(n)).forEach(n=>{r.push({[n.id]:!0})}),r};import{jsx as Ux,jsxs as C7}from"react/jsx-runtime";var T7=({label:e,icon:o,dragInputCallback:t,value:r,elements:n,editable:i=!0,shouldKeepAspectRatio:a,property:l,scene:s,appState:c,sensitivity:d=1,dragFinishedCallback:p})=>{let m=Ke(),u=Ie(),b=tg(null),f=tg(null),[x,v]=w7(r.toString()),y=tg(null);y.current||(y.current={originalAppState:yr(c),originalElements:n,lastUpdatedValue:x,updatePending:!1}),V5(()=>{let T=r.toString();v(T),y.current.lastUpdatedValue=T},[r]);let E=(T,S,_)=>{if(!y.current.updatePending)return!1;y.current.updatePending=!1;let M=Number(T);if(isNaN(M)){v(r.toString());return}let N=Number(M.toFixed(2)),L=Number(r);(isNaN(L)||Math.abs(N-L)>=W5)&&(y.current.lastUpdatedValue=T,t({accumulatedChange:0,instantChange:0,originalElements:S,originalElementsMap:m.scene.getNonDeletedElementsMap(),shouldKeepAspectRatio:a,shouldChangeByStepSize:!1,scene:s,nextValue:N,property:l,originalAppState:_,setInputValue:D=>v(String(D)),app:m,setAppState:u}),m.syncActionResult({captureUpdate:R.IMMEDIATELY}))},w=tg({});return w.current.handleInputValue=E,V5(()=>{let T=b.current,S=w.current;return()=>{let _=T?.value;_&&S.handleInputValue?.(_,y.current.originalElements,y.current.originalAppState),window.removeEventListener("pointermove",S.onPointerMove,!1),window.removeEventListener("pointerup",S.onPointerUp,!1)}},[i]),i?C7("div",{className:v7("drag-input-container",!i&&"disabled"),"data-testid":e,children:[Ux("div",{className:"drag-input-label",ref:f,onPointerDown:T=>{if(b.current&&i){document.body.classList.add("excalidraw-cursor-resize");let S=Number(b.current.value);isNaN(S)&&(S=0);let _=null,M=m.scene.getNonDeletedElements().reduce((z,J)=>(z.set(J.id,Tr(J)),z),new Map),N=n.map(z=>M.get(z.id)),L=yr(c),D=0,O=0,V=z=>{if(_&&M!==null&&N!==null){let J=z.clientX-_.x;J!==0&&(O+=J,Math.abs(O)>=d&&(O=Math.sign(O)*Math.floor(Math.abs(O)/d),D+=O,t({accumulatedChange:D,instantChange:O,originalElements:N,originalElementsMap:M,shouldKeepAspectRatio:a,shouldChangeByStepSize:z.shiftKey,property:l,scene:s,originalAppState:L,setInputValue:X=>v(String(X)),app:m,setAppState:u}),O=0))}_={x:z.clientX,y:z.clientY}},K=()=>{window.removeEventListener("pointermove",V,!1),m.syncActionResult({captureUpdate:R.IMMEDIATELY}),p?.({app:m,setAppState:u,originalElements:N,originalAppState:L}),_=null,D=0,O=0,N=null,M=null,document.body.classList.remove("excalidraw-cursor-resize"),window.removeEventListener("pointerup",K,!1)};w.current.onPointerMove=V,w.current.onPointerUp=K,window.addEventListener("pointermove",V,!1),window.addEventListener("pointerup",K,!1)}},onPointerEnter:()=>{f.current&&(f.current.style.cursor="ew-resize")},children:o?Ux(qr,{icon:o}):e}),Ux("input",{className:"drag-input",autoComplete:"off",spellCheck:"false",onKeyDown:T=>{if(i){let S=T.target;S instanceof HTMLInputElement&&T.key===I.ENTER&&(E(S.value,n,c),m.focusContainer())}},ref:b,value:x,onChange:T=>{y.current.updatePending=!0,v(T.target.value)},onFocus:T=>{T.target.select(),y.current.originalElements=n,y.current.originalAppState=yr(c)},onBlur:T=>{x?i&&E(T.target.value,y.current.originalElements,y.current.originalAppState):v(r.toString())},disabled:!i})]}):null},qt=T7;import{jsx as M7}from"react/jsx-runtime";var I7=15,S7=({accumulatedChange:e,originalElements:o,shouldChangeByStepSize:t,nextValue:r,scene:n,app:i})=>{let a=n.getNonDeletedElementsMap(),l=o[0];if(l&&!Re(l)){let s=a.get(l.id);if(!s)return;if(r!==void 0){let b=Wa(r);n.mutateElement(s,{angle:b}),ci(s,n,i.state);let f=we(s,a);f&&!ve(s)&&n.mutateElement(f,{angle:b});return}let c=Math.round(Va(l.angle)*100)/100,d=Math.round(e),p=(c+d)%360;t&&(p=bt(p,I7)),p=p<0?p+360:p;let m=Wa(p);n.mutateElement(s,{angle:m}),ci(s,n,i.state);let u=we(s,a);u&&!ve(s)&&n.mutateElement(u,{angle:m})}},k7=({element:e,scene:o,appState:t,property:r})=>M7(qt,{label:"A",icon:Fc,value:Math.round(Va(e.angle)%360*100)/100,elements:[e],dragInputCallback:S7,editable:Ao(e,"angle"),scene:o,appState:t,property:r}),Y5=k7;import{jsx as L7}from"react/jsx-runtime";var K5=5,A7=({property:e,scene:o,appState:t,setAppState:r})=>L7(qt,{label:"Grid step",sensitivity:8,elements:[],dragInputCallback:({nextValue:n,instantChange:i,shouldChangeByStepSize:a,setInputValue:l})=>{r(s=>{let c;return n?c=n:i&&(c=a?bt(s.gridStep+K5*Math.sign(i),K5):s.gridStep+i),c?(c=Sw(c),l(c),{gridStep:c}):(l(s.gridStep),null)})},scene:o,value:t.gridStep,property:e,appState:t}),X5=A7;import{jsx as N7}from"react/jsx-runtime";var Z5=10,_7=e=>e.type==="image",P7=({accumulatedChange:e,originalElements:o,originalElementsMap:t,shouldKeepAspectRatio:r,shouldChangeByStepSize:n,nextValue:i,property:a,originalAppState:l,instantChange:s,scene:c,app:d,setAppState:p})=>{let m=c.getNonDeletedElementsMap(),u=o[0],b=m.get(u.id);if(u&&b){let f=r||_7(u),x=u.width/u.height;if(l.croppingElementId===u.id){let v=m.get(u.id);if(!v||!et(v)||!v.crop)return;let y=v.crop,E={...y},w=v.scale[0]===-1,T=v.scale[1]===-1,{width:S,height:_}=xn(v),M=y.naturalWidth/S,N=y.naturalHeight/_,L=w?y.width+y.x:y.naturalWidth-y.x,D=T?y.height+y.y:y.naturalHeight-y.y,O=Yg*M,V=Yg*N;if(i!==void 0){if(a==="width"){let le=i*M,ce=$e(le,O,L);E={...E,width:ce,x:w?y.x+y.width-ce:y.x}}else if(a==="height"){let le=i*N,ce=$e(le,V,D);E={...E,height:ce,y:T?y.y+y.height-ce:y.y}}c.mutateElement(v,{crop:E,width:E.width/(y.naturalWidth/S),height:E.height/(y.naturalHeight/_)});return}let K=a==="width"?s:0,z=a==="height"?s:0,J=$e(y.width+K,O,L),X=$e(y.height+z,O,D);E={...y,x:w?y.x+y.width-J:y.x,y:T?y.y+y.height-X:y.y,width:J,height:X},c.mutateElement(v,{crop:E,width:E.width/(y.naturalWidth/S),height:E.height/(y.naturalHeight/_)});return}if(i!==void 0){let v=Math.max(a==="width"?i:f?i*x:u.width,Eo),y=Math.max(a==="height"?i:f?i/x:u.height,Eo);if(dl(v,y,b,u,t,c,a==="width"?"e":"s",{shouldMaintainAspectRatio:f}),oe(b)){let E=To(c.getElementsIncludingDeleted(),b,l,c.getNonDeletedElementsMap()),w=Ur(c.getElementsIncludingDeleted(),E,b);c.replaceAllElements(w)}return}{let v=a==="width"?e:0,y=a==="height"?e:0,E=Math.max(0,u.width+v);a==="width"&&(n?E=bt(E,Z5):E=Math.round(E));let w=Math.max(0,u.height+y);if(a==="height"&&(n?w=bt(w,Z5):w=Math.round(w)),f&&(a==="width"?w=Math.round(E/x*100)/100:E=Math.round(w*x*100)/100),w=Math.max(Eo,w),E=Math.max(Eo,E),dl(E,w,b,u,t,c,a==="width"?"e":"s",{shouldMaintainAspectRatio:f}),oe(b)){let T=de(To(c.getElementsIncludingDeleted(),b,l,c.getNonDeletedElementsMap()));p({elementsToHighlight:T})}}}},D7=({setAppState:e,app:o,originalElements:t,originalAppState:r})=>{let n=o.scene.getNonDeletedElementsMap(),i=t?.[0],a=i&&n.get(i.id);if(a&&oe(a)){let l=To(o.scene.getElementsIncludingDeleted(),a,r,o.scene.getNonDeletedElementsMap()),s=Ur(o.scene.getElementsIncludingDeleted(),l,a);o.scene.replaceAllElements(s),e({elementsToHighlight:null})}},R7=({property:e,element:o,scene:t,appState:r})=>{let n=Fr(e==="width"?o.width:o.height,2);if(r.croppingElementId&&r.croppingElementId===o.id&&et(o)&&o.crop){let{width:i,height:a}=xn(o);if(e==="width"){let l=i/o.crop.naturalWidth;n=Fr(o.crop.width*l,2)}if(e==="height"){let l=a/o.crop.naturalHeight;n=Fr(o.crop.height*l,2)}}return N7(qt,{label:e==="width"?"W":"H",elements:[o],dragInputCallback:P7,value:n,editable:Ao(o,e),scene:t,appState:r,property:e,dragFinishedCallback:D7})},Gx=R7;import{jsx as z7}from"react/jsx-runtime";var $5=4,O7=4,F7=({accumulatedChange:e,originalElements:o,shouldChangeByStepSize:t,nextValue:r,scene:n})=>{let i=n.getNonDeletedElementsMap(),a=o[0];if(a){let l=i.get(a.id);if(!l||!j(l))return;let s;if(r!==void 0)s=Math.max(Math.round(r),$5);else if(a.type==="text"){let c=Math.round(a.fontSize),d=Math.round(e);s=Math.max(c+d,$5),t&&(s=bt(s,O7))}s&&(n.mutateElement(l,{fontSize:s}),It(l,n.getContainerElement(l),n))}},B7=({element:e,scene:o,appState:t,property:r})=>{let n=j(e)?e:zt(e)?we(e,o.getNonDeletedElementsMap()):null;return n?z7(qt,{label:"F",value:Math.round(n.fontSize*10)/10,elements:[n],dragInputCallback:F7,icon:bi,appState:t,scene:o,property:r}):null},j5=B7;import{jsx as W7}from"react/jsx-runtime";var H7=15,U7=({accumulatedChange:e,originalElements:o,shouldChangeByStepSize:t,nextValue:r,property:n,scene:i})=>{let a=i.getNonDeletedElementsMap(),l=o.map(c=>a.get(c.id)).filter(c=>c&&!di(c)&&Ao(c,n)),s=o.filter(c=>!di(c)&&Ao(c,n));if(r!==void 0){let c=Wa(r);for(let d of l){if(!d)continue;i.mutateElement(d,{angle:c});let p=we(d,a);p&&!ve(d)&&i.mutateElement(p,{angle:c})}i.triggerUpdate();return}for(let c=0;c<l.length;c++){let d=l[c];if(!d)continue;let p=s[c],m=Math.round(Va(p.angle)*100)/100,u=Math.round(e),b=(m+u)%360;t&&(b=bt(b,H7)),b=b<0?b+360:b;let f=Wa(b);i.mutateElement(d,{angle:f});let x=we(d,a);x&&!ve(d)&&i.mutateElement(x,{angle:f})}i.triggerUpdate()},G7=({elements:e,scene:o,appState:t,property:r})=>{let n=e.filter(s=>!di(s)&&Ao(s,"angle")),i=n.map(s=>Math.round(Va(s.angle)%360*100)/100),a=new Set(i).size===1?i[0]:"Mixed",l=n.some(s=>Ao(s,"angle"));return W7(qt,{label:"A",icon:Fc,value:a,elements:e,dragInputCallback:U7,editable:l,appState:t,scene:o,property:r})},q5=G7;import{useMemo as V7}from"react";import{jsx as j7}from"react/jsx-runtime";var Ps=10,Y7=(e,o,t,r)=>{let n=r.x-e,i=r.y-o,a=r.width*t,l=r.height*t,s=e+n*t,c=o+i*t;return{width:a,height:l,x:s,y:c,...fw(r,a,l,!1),...j(r)?{fontSize:r.fontSize*t}:{}}},K7=(e,o,t,r,n,i,a,l)=>{let s=l.getNonDeletedElementsMap(),c=Y7(e,o,r,i);l.mutateElement(n,c);let d=we(i,a);if(d){let p=d.fontSize*r;wo(n,l);let m=s.get(d.id);m&&j(m)&&(l.mutateElement(m,{fontSize:p}),Xy(n,l,t==="width"?"e":"s",!0))}},J5=(e,o,t,r,n,i,a,l,s,c)=>{i==="width"?o=Math.round(e/r*100)/100:e=Math.round(o*r*100)/100;let d=o/t;for(let p=0;p<l.length;p++){let m=l[p],u=a[p];K7(n[0],n[1],i,d,u,m,s,c)}},X7=({accumulatedChange:e,originalElements:o,originalElementsMap:t,originalAppState:r,shouldChangeByStepSize:n,nextValue:i,scene:a,property:l,setAppState:s,app:c})=>{let d=a.getNonDeletedElementsMap(),p=_s(o,r);if(i!==void 0){for(let f of p){let x=Ls(f,d,t);if(x.length>1){let v=x.map(O=>O.latest),y=x.map(O=>O.original),[E,w,T,S]=ye(y),_=T-E,M=S-w,N=_/M,L=Math.max(Eo,l==="width"?Math.max(0,i):_),D=Math.max(Eo,l==="height"?Math.max(0,i):M);J5(L,D,M,N,A(E,w),l,v,y,t,a)}else{let[v]=x,y=v?.latest,E=v?.original;if(y&&E&&Ao(y,l)){let w=l==="width"?Math.max(0,i):y.width;l==="width"&&(n?w=bt(w,Ps):w=Math.round(w));let T=l==="height"?Math.max(0,i):y.height;if(l==="height"&&(n?T=bt(T,Ps):T=Math.round(T)),w=Math.max(Eo,w),T=Math.max(Eo,T),dl(w,T,y,E,t,a,l==="width"?"e":"s",{shouldInformMutation:!1}),oe(y)){let S=To(a.getElementsIncludingDeleted(),y,r,a.getNonDeletedElementsMap()),_=Ur(a.getElementsIncludingDeleted(),S,y);a.replaceAllElements(_)}}}}a.triggerUpdate();return}let m=l==="width"?e:0,u=l==="height"?e:0,b=[];for(let f of p){let x=Ls(f,d,t);if(x.length>1){let v=x.map(O=>O.latest),y=x.map(O=>O.original),[E,w,T,S]=ye(y),_=T-E,M=S-w,N=_/M,L=Math.max(0,_+m);l==="width"&&(n?L=bt(L,Ps):L=Math.round(L));let D=Math.max(0,M+u);l==="height"&&(n?D=bt(D,Ps):D=Math.round(D)),L=Math.max(Eo,L),D=Math.max(Eo,D),J5(L,D,M,N,A(E,w),l,v,y,t,a)}else{let[v]=x,y=v?.latest,E=v?.original;if(y&&E&&Ao(y,l)){let w=Math.max(0,E.width+m);l==="width"&&(n?w=bt(w,Ps):w=Math.round(w));let T=Math.max(0,E.height+u);if(l==="height"&&(n?T=bt(T,Ps):T=Math.round(T)),w=Math.max(Eo,w),T=Math.max(Eo,T),dl(w,T,y,E,t,a,l==="width"?"e":"s",{shouldInformMutation:!1}),oe(y)){let S=de(To(a.getElementsIncludingDeleted(),y,r,a.getNonDeletedElementsMap()));b.push(...S)}}}}s({elementsToHighlight:b}),a.triggerUpdate()},Z7=({setAppState:e,app:o,originalElements:t,originalAppState:r})=>{let n=o.scene.getNonDeletedElementsMap(),i=t?.[0],a=i&&n.get(i.id);if(a&&oe(a)){let l=To(o.scene.getElementsIncludingDeleted(),a,r,o.scene.getNonDeletedElementsMap()),s=Ur(o.scene.getElementsIncludingDeleted(),l,a);o.scene.replaceAllElements(s),e({elementsToHighlight:null})}},$7=({property:e,elements:o,elementsMap:t,atomicUnits:r,scene:n,appState:i})=>{let a=V7(()=>r.map(c=>{let d=Ls(c,t);if(d.length>1){let[m,u,b,f]=ye(d.map(x=>x.latest));return Math.round((e==="width"?b-m:f-u)*100)/100}let[p]=d;return Math.round((e==="width"?p.latest.width:p.latest.height)*100)/100}),[t,r,e]),l=new Set(a).size===1?Math.round(a[0]*100)/100:"Mixed",s=a.length>0;return j7(qt,{label:e==="width"?"W":"H",elements:o,dragInputCallback:X7,value:l,editable:s,appState:i,property:e,scene:n,dragFinishedCallback:Z7})},Wx=$7;import{jsx as tR}from"react/jsx-runtime";var Q5=4,q7=4,J7=(e,o)=>e.reduce((t,r)=>{if(!r||di(r))return t;if(j(r))return t.push(r),t;if(zt(r)){let n=we(r,o);if(n)return t.push(n),t}return t},[]),Q7=({accumulatedChange:e,originalElements:o,shouldChangeByStepSize:t,nextValue:r,scene:n})=>{let i=n.getNonDeletedElementsMap(),a=o.map(s=>i.get(s.id)),l;if(r){l=Math.max(Math.round(r),Q5);for(let s of a)n.mutateElement(s,{fontSize:l}),It(s,n.getContainerElement(s),n);n.triggerUpdate()}else{let s=o;for(let c=0;c<a.length;c++){let d=a[c],p=s[c],m=Math.round(p.fontSize),u=Math.round(e),b=Math.max(m+u,Q5);t&&(b=bt(b,q7)),n.mutateElement(d,{fontSize:b}),It(d,n.getContainerElement(d),n)}n.triggerUpdate()}},eR=({elements:e,scene:o,appState:t,property:r,elementsMap:n})=>{let i=J7(e,n);if(!i.length)return null;let a=i.map(c=>Math.round(c.fontSize*10)/10),l=new Set(a).size===1?a[0]:"Mixed",s=a.length>0;return tR(qt,{label:"F",icon:bi,elements:i,dragInputCallback:Q7,value:l,editable:s,scene:o,property:r,appState:t})},ek=eR;import{useMemo as oR}from"react";import{jsx as lR}from"react/jsx-runtime";var rR=(e,o,t,r,n,i,a)=>{for(let l=0;l<r.length;l++){let s=r[l],[c,d]=[s.x+s.width/2,s.y+s.height/2],[p,m]=ke(A(s.x,s.y),A(c,d),s.angle),u=e==="x"?Math.round(p+o):p,b=e==="y"?Math.round(m+t):m;Ha(u,b,s,i,a,n,!1)}},nR=(e,o,t,r,n,i)=>{let a=n.getNonDeletedElementsMap(),[l,s,,]=ye(t),c=e-l,d=o-s;for(let p=0;p<t.length;p++){let m=t[p],u=a.get(m.id);if(u&&(!j(u)||!u.containerId)){let[b,f]=[u.x+u.width/2,u.y+u.height/2],[x,v]=ke(A(u.x,u.y),A(b,f),u.angle);Ha(x+c,v+d,m,n,i,r,!1)}}},iR=({accumulatedChange:e,originalElements:o,originalElementsMap:t,shouldChangeByStepSize:r,nextValue:n,property:i,scene:a,originalAppState:l,app:s})=>{let c=a.getNonDeletedElementsMap();if(n!==void 0){for(let u of _s(o,l)){let b=Ls(u,c,t);if(b.length>1){let[f,x,,]=ye(b.map(E=>E.latest));nR(i==="x"?n:f,i==="y"?n:x,b.map(E=>E.original),t,a,s.state)}else{let f=b[0]?.original,x=b[0]?.latest;if(f&&x&&Ao(x,i)){let[v,y]=[f.x+f.width/2,f.y+f.height/2],[E,w]=ke(A(f.x,f.y),A(v,y),f.angle);Ha(i==="x"?n:E,i==="y"?n:w,f,a,s.state,t,!1)}}}a.triggerUpdate();return}let d=r?bt(e,Od):e;rR(i,i==="x"?d:0,i==="y"?d:0,o,t,a,s.state),a.triggerUpdate()},aR=({property:e,elements:o,elementsMap:t,atomicUnits:r,scene:n,appState:i})=>{let a=oR(()=>r.map(s=>{let c=Object.keys(s).map(f=>t.get(f)).filter(f=>f!==void 0);if(c.length>1){let[f,x]=ye(c);return Math.round((e==="x"?f:x)*100)/100}let[d]=c,[p,m]=[d.x+d.width/2,d.y+d.height/2],[u,b]=ke(A(d.x,d.y),A(p,m),d.angle);return Math.round((e==="x"?u:b)*100)/100}),[r,t,e]),l=new Set(a).size===1?a[0]:"Mixed";return lR(qt,{label:e==="x"?"X":"Y",elements:o,dragInputCallback:iR,value:l,property:e,scene:n,appState:i})},Vx=aR;import{jsx as dR}from"react/jsx-runtime";var sR=({accumulatedChange:e,instantChange:o,originalElements:t,originalElementsMap:r,shouldChangeByStepSize:n,nextValue:i,property:a,scene:l,originalAppState:s,app:c})=>{let d=l.getNonDeletedElementsMap(),p=t[0],[m,u]=[p.x+p.width/2,p.y+p.height/2],[b,f]=ke(A(p.x,p.y),A(m,u),p.angle);if(s.croppingElementId===p.id){let w=d.get(p.id);if(!w||!et(w)||!w.crop)return;let T=w.crop,S=T,_=w.scale[0]===-1,M=w.scale[1]===-1,{width:N,height:L}=xn(w);if(i!==void 0){if(a==="x"){let V=i*(T.naturalWidth/N);_?S={...T,x:$e(T.naturalWidth-V-T.width,0,T.naturalWidth-T.width)}:S={...T,x:$e(i*(T.naturalWidth/N),0,T.naturalWidth-T.width)}}a==="y"&&(S={...T,y:$e(i*(T.naturalHeight/L),0,T.naturalHeight-T.height)}),l.mutateElement(w,{crop:S});return}let D=(a==="x"?o:0)*(_?-1:1),O=(a==="y"?o:0)*(M?-1:1);S={...T,x:$e(T.x+D,0,T.naturalWidth-T.width),y:$e(T.y+O,0,T.naturalHeight-T.height)},l.mutateElement(w,{crop:S});return}if(i!==void 0){Ha(a==="x"?i:b,a==="y"?i:f,p,l,c.state,r);return}let x=a==="x"?e:0,v=a==="y"?e:0,y=a==="x"?Math.round(n?bt(p.x+x,Od):b+x):b,E=a==="y"?Math.round(n?bt(p.y+v,Od):f+v):f;Ha(y,E,p,l,c.state,r)},cR=({property:e,element:o,scene:t,appState:r})=>{let[n,i]=ke(A(o.x,o.y),A(o.x+o.width/2,o.y+o.height/2),o.angle),a=Fr(e==="x"?n:i,2);if(r.croppingElementId===o.id&&et(o)&&o.crop){let l=My(o);l&&(a=Fr(e==="x"?l.x:l.y,2))}return dR(qt,{label:e==="x"?"X":"Y",elements:[o],dragInputCallback:sR,scene:t,value:a,property:e,appState:r})},Yx=cR;import{Fragment as Xx,jsx as ue,jsxs as Lo}from"react/jsx-runtime";var gR=50,Fd=e=>{let o=jr(),t=e.app.scene.getSceneNonce()||1,r=e.app.scene.getSelectedElements({selectedElementIds:o.selectedElementIds,includeBoundTextElement:!1}),n=Oi(e.app);return ue(fR,{...e,appState:o,sceneNonce:t,selectedElements:r,gridModeEnabled:n})},dt=({children:e,columns:o=1,heading:t,style:r,...n})=>ue("div",{className:mR("exc-stats__row",{"exc-stats__row--heading":t}),style:{gridTemplateColumns:`repeat(${o}, 1fr)`,...r},...n,children:e});dt.displayName="StatsRow";var og=({children:e,order:o,style:t,...r})=>ue("div",{className:"exc-stats__rows",style:{order:o,...t},...r,children:e});og.displayName="StatsRows";Fd.StatsRow=dt;Fd.StatsRows=og;var fR=hR(({app:e,onClose:o,renderCustomStats:t,selectedElements:r,appState:n,sceneNonce:i,gridModeEnabled:a})=>{let l=e.scene,s=l.getNonDeletedElements(),c=l.getNonDeletedElementsMap(),d=Ie(),p=r.length===1?r[0]:null,m=r.length>1?r:null,u=n.croppingElementId&&et(p),b=u?xn(p):null,[f,x]=uR({width:0,height:0}),v=Kx(()=>pR(w=>{let T=ye(w);x({width:Math.round(T[2])-Math.round(T[0]),height:Math.round(T[3])-Math.round(T[1])})},gR),[]);tk(()=>{v(s)},[i,s,v]),tk(()=>()=>v.cancel(),[v]);let y=Kx(()=>_s(r,n),[r,n]),E=Kx(()=>zm(r),[r]);return ue("div",{className:"exc-stats",children:Lo(Et,{padding:3,children:[Lo("div",{className:"title",children:[ue("h2",{children:h("stats.title")}),ue("div",{className:"close",onClick:o,children:No})]}),Lo(Jc,{label:ue("h3",{children:h("stats.generalStats")}),open:!!(n.stats.panels&$s.generalStats),openTrigger:()=>d(w=>({stats:{open:!0,panels:w.stats.panels^$s.generalStats}})),children:[Lo(og,{children:[ue(dt,{heading:!0,children:h("stats.scene")}),Lo(dt,{columns:2,children:[ue("div",{children:h("stats.shapes")}),ue("div",{children:s.length})]}),Lo(dt,{columns:2,children:[ue("div",{children:h("stats.width")}),ue("div",{children:f.width})]}),Lo(dt,{columns:2,children:[ue("div",{children:h("stats.height")}),ue("div",{children:f.height})]}),a&&Lo(Xx,{children:[ue(dt,{heading:!0,children:"Canvas"}),ue(dt,{children:ue(X5,{property:"gridStep",scene:l,appState:n,setAppState:d})})]})]}),t?.(s,n)]}),!E&&r.length>0&&ue("div",{id:"elementStats",style:{marginTop:12},children:ue(Jc,{label:ue("h3",{children:h("stats.elementProperties")}),open:!!(n.stats.panels&$s.elementProperties),openTrigger:()=>d(w=>({stats:{open:!0,panels:w.stats.panels^$s.elementProperties}})),children:Lo(og,{children:[p&&Lo(Xx,{children:[u&&ue(dt,{heading:!0,children:h("labels.unCroppedDimension")}),n.croppingElementId&&et(p)&&b&&Lo(dt,{columns:2,children:[ue("div",{children:h("stats.width")}),ue("div",{children:Fr(b.width,2)})]}),n.croppingElementId&&et(p)&&b&&Lo(dt,{columns:2,children:[ue("div",{children:h("stats.height")}),ue("div",{children:Fr(b.height,2)})]}),ue(dt,{heading:!0,"data-testid":"stats-element-type",style:{margin:"0.3125rem 0"},children:n.croppingElementId?h("labels.imageCropping"):h(`element.${p.type}`)}),ue(dt,{children:ue(Yx,{element:p,property:"x",elementsMap:c,scene:l,appState:n})}),ue(dt,{children:ue(Yx,{element:p,property:"y",elementsMap:c,scene:l,appState:n})}),ue(dt,{children:ue(Gx,{property:"width",element:p,scene:l,appState:n})}),ue(dt,{children:ue(Gx,{property:"height",element:p,scene:l,appState:n})}),ue(dt,{children:ue(Y5,{property:"angle",element:p,scene:l,appState:n})}),ue(dt,{children:ue(j5,{property:"fontSize",element:p,scene:l,appState:n})})]}),m&&Lo(Xx,{children:[Pm(m)&&ue(dt,{heading:!0,children:h("element.group")}),Lo(dt,{columns:2,style:{margin:"0.3125rem 0"},children:[ue("div",{children:h("stats.shapes")}),ue("div",{children:r.length})]}),ue(dt,{children:ue(Vx,{property:"x",elements:m,elementsMap:c,atomicUnits:y,scene:l,appState:n})}),ue(dt,{children:ue(Vx,{property:"y",elements:m,elementsMap:c,atomicUnits:y,scene:l,appState:n})}),ue(dt,{children:ue(Wx,{property:"width",elements:m,elementsMap:c,atomicUnits:y,scene:l,appState:n})}),ue(dt,{children:ue(Wx,{property:"height",elements:m,elementsMap:c,atomicUnits:y,scene:l,appState:n})}),ue(dt,{children:ue(q5,{property:"angle",elements:m,scene:l,appState:n})}),ue(dt,{children:ue(ek,{property:"fontSize",elements:m,scene:l,appState:n,elementsMap:c})})]})]})})})]})})},(e,o)=>e.sceneNonce===o.sceneNonce&&e.selectedElements===o.selectedElements&&e.appState.stats.panels===o.appState.stats.panels&&e.gridModeEnabled===o.gridModeEnabled&&e.appState.gridStep===o.appState.gridStep&&e.appState.croppingElementId===o.appState.croppingElementId);import{useCallback as bR,useEffect as ok,useState as rk}from"react";import{jsx as Ds,jsxs as rg}from"react/jsx-runtime";var xR=({sourceElementId:e,onClose:o,appState:t,scene:r,generateLinkForSelection:n=Ym})=>{let i=r.getNonDeletedElementsMap(),a=i.get(e)?.link??null,[l,s]=rk(a),[c,d]=rk(!1);ok(()=>{let m=ie(i,t),u=a;if(m.length>0&&n){let b=Km(m,t);b&&(u=vr(n(b.id,b.type)))}s(u)},[i,t,t.selectedElementIds,a,n]);let p=bR(()=>{if(l&&l!==i.get(e)?.link){let m=i.get(e);m&&r.mutateElement(m,{link:l})}if(!l&&c&&e){let m=i.get(e);m&&r.mutateElement(m,{link:null})}o?.()},[e,l,i,c,r,o]);return ok(()=>{let m=u=>{t.openDialog?.name==="elementLinkSelector"&&u.key===I.ENTER&&p(),t.openDialog?.name==="elementLinkSelector"&&u.key===I.ESCAPE&&o?.()};return window.addEventListener("keydown",m),()=>{window.removeEventListener("keydown",m)}},[t,o,p]),rg("div",{className:"ElementLinkDialog",children:[rg("div",{className:"ElementLinkDialog__header",children:[Ds("h2",{children:h("elementLink.title")}),Ds("p",{children:h("elementLink.desc")})]}),rg("div",{className:"ElementLinkDialog__input",children:[Ds(_i,{value:l??"",onChange:m=>{c||d(!0),s(m)},onKeyDown:m=>{m.key===I.ENTER&&p()},className:"ElementLinkDialog__input-field",selectOnRender:!0}),a&&l&&Ds(q,{type:"button",title:h("buttons.remove"),"aria-label":h("buttons.remove"),label:h("buttons.remove"),onClick:()=>{s(null),d(!0)},className:"ElementLinkDialog__remove",icon:Kt})]}),rg("div",{className:"ElementLinkDialog__actions",children:[Ds(Bn,{label:h("buttons.cancel"),onClick:()=>{o?.()},style:{marginRight:10}}),Ds(Bn,{label:h("buttons.confirm"),onClick:p,actionType:"primary"})]})]})},nk=xR;import ER,{useState as yR}from"react";import{Fragment as vR,jsx as Zx}from"react/jsx-runtime";var ik=({children:e,onClose:o})=>{let[t,r]=yR(!!e),{container:n}=at(),i=ER.useCallback(()=>{r(!1),o&&o(),n?.focus()},[o,n]);return Zx(vR,{children:t&&Zx(kt,{size:"small",onCloseRequest:i,title:h("errorDialog.title"),children:Zx("div",{style:{whiteSpace:"pre-wrap"},children:e})})})};import wR from"react";import{Fragment as lk,jsx as Y,jsxs as Bo}from"react/jsx-runtime";var TR=()=>Bo("div",{className:"HelpDialog__header",children:[Bo("a",{className:"HelpDialog__btn",href:"https://docs.excalidraw.com",target:"_blank",rel:"noopener",children:[Y("div",{className:"HelpDialog__link-icon",children:dp}),h("helpDialog.documentation")]}),Bo("a",{className:"HelpDialog__btn",href:"https://plus.excalidraw.com/blog",target:"_blank",rel:"noopener",children:[Y("div",{className:"HelpDialog__link-icon",children:dp}),h("helpDialog.blog")]}),Bo("a",{className:"HelpDialog__btn",href:"https://github.com/excalidraw/excalidraw/issues",target:"_blank",rel:"noopener noreferrer",children:[Y("div",{className:"HelpDialog__link-icon",children:Pc}),h("helpDialog.github")]}),Bo("a",{className:"HelpDialog__btn",href:"https://youtube.com/@excalidraw",target:"_blank",rel:"noopener noreferrer",children:[Y("div",{className:"HelpDialog__link-icon",children:u1}),"YouTube"]})]}),CR=e=>Bo(lk,{children:[Y("h3",{children:e.title}),Y("div",{className:"HelpDialog__islands-container",children:e.children})]}),$x=e=>Bo("div",{className:`HelpDialog__island ${e.className}`,children:[Y("h4",{className:"HelpDialog__island-title",children:e.caption}),Y("div",{className:"HelpDialog__island-content",children:e.children})]});function*IR(e,o){let t=!0;for(let r of e)t||(yield o),t=!1,yield r}var SR=e=>e.replace(/\b[a-z]\b/,o=>o.toUpperCase()),$=({label:e,shortcuts:o,isOr:t=!0})=>{let r=o.map(n=>(n.endsWith("++")?[...n.slice(0,-2).split("+"),"+"]:n.split("+")).map(a=>Y(kR,{children:SR(a)},a)));return Bo("div",{className:"HelpDialog__shortcut",children:[Y("div",{children:e}),Y("div",{className:"HelpDialog__key-container",children:[...IR(r,t?h("helpDialog.or"):"")]})]})},kR=e=>Y("kbd",{className:"HelpDialog__key",...e}),ak=({onClose:e})=>{let o=je(),t=wR.useCallback(()=>{e&&e()},[e]);return Y(lk,{children:Bo(kt,{onCloseRequest:t,title:h("helpDialog.title"),className:"HelpDialog",children:[Y(TR,{}),Bo(CR,{title:h("helpDialog.shortcuts"),children:[Bo($x,{className:"HelpDialog__island--tools",caption:h("helpDialog.tools"),children:[Y($,{label:h("toolBar.hand"),shortcuts:[I.H]}),Y($,{label:h("toolBar.selection"),shortcuts:[I.V,I[1]]}),Y($,{label:h("toolBar.rectangle"),shortcuts:[I.R,I[2]]}),Y($,{label:h("toolBar.diamond"),shortcuts:[I.D,I[3]]}),Y($,{label:h("toolBar.ellipse"),shortcuts:[I.O,I[4]]}),Y($,{label:h("toolBar.arrow"),shortcuts:[I.A,I[5]]}),Y($,{label:h("toolBar.line"),shortcuts:[I.L,I[6]]}),Y($,{label:h("toolBar.freedraw"),shortcuts:[I.P,I[7]]}),Y($,{label:h("toolBar.text"),shortcuts:[I.T,I[8]]}),Y($,{label:h("toolBar.image"),shortcuts:[I[9]]}),Y($,{label:h("toolBar.eraser"),shortcuts:[I.E,I[0]]}),Y($,{label:h("toolBar.frame"),shortcuts:[I.F]}),Y($,{label:h("toolBar.laser"),shortcuts:[I.K]}),Y($,{label:h("toolBar.bucketfill"),shortcuts:[I.B]}),Y($,{label:h("labels.eyeDropper"),shortcuts:[I.I,"Shift+S","Shift+G"]}),Y($,{label:h("helpDialog.editLineArrowPoints"),shortcuts:[H("CtrlOrCmd+Enter")]}),Y($,{label:h("helpDialog.editText"),shortcuts:[H("Enter")]}),Y($,{label:h("helpDialog.textNewLine"),shortcuts:[H("Enter"),H("Shift+Enter")]}),Y($,{label:h("helpDialog.textFinish"),shortcuts:[H("Esc"),H("CtrlOrCmd+Enter")]}),Y($,{label:h("helpDialog.curvedArrow"),shortcuts:["A",h("helpDialog.click"),h("helpDialog.click"),h("helpDialog.click")],isOr:!1}),Y($,{label:h("helpDialog.curvedLine"),shortcuts:["L",h("helpDialog.click"),h("helpDialog.click"),h("helpDialog.click")],isOr:!1}),Y($,{label:h("helpDialog.cropStart"),shortcuts:[h("helpDialog.doubleClick"),H("Enter")],isOr:!0}),Y($,{label:h("helpDialog.cropFinish"),shortcuts:[H("Enter"),H("Escape")],isOr:!0}),Y($,{label:h("toolBar.lock"),shortcuts:[I.Q]}),Y($,{label:h("helpDialog.preventBinding"),shortcuts:[H("CtrlOrCmd")]}),Y($,{label:h("toolBar.link"),shortcuts:[H("CtrlOrCmd+K")]}),Y($,{label:h("toolBar.convertElementType"),shortcuts:["Tab","Shift+Tab"],isOr:!0})]}),Bo($x,{className:"HelpDialog__island--view",caption:h("helpDialog.view"),children:[Y($,{label:h("buttons.zoomIn"),shortcuts:[H("CtrlOrCmd++")]}),Y($,{label:h("buttons.zoomOut"),shortcuts:[H("CtrlOrCmd+-")]}),Y($,{label:h("buttons.resetZoom"),shortcuts:[H("CtrlOrCmd+0")]}),Y($,{label:h("helpDialog.zoomToFit"),shortcuts:["Shift+1"]}),Y($,{label:h("helpDialog.zoomToSelection"),shortcuts:["Shift+2"]}),Y($,{label:h("helpDialog.movePageUpDown"),shortcuts:["PgUp/PgDn"]}),Y($,{label:h("helpDialog.movePageLeftRight"),shortcuts:["Shift+PgUp/PgDn"]}),Y($,{label:h("buttons.zenMode"),shortcuts:[H("Alt+Z")]}),Y($,{label:h("buttons.objectsSnapMode"),shortcuts:[H("Alt+S")]}),Y($,{label:h("labels.toggleGrid"),shortcuts:[H("CtrlOrCmd+'")]}),Y($,{label:h("labels.viewMode"),shortcuts:[H("Alt+R")]}),o.isActionEnabled(Nn)&&Y($,{label:h("labels.toggleTheme"),shortcuts:[H("Alt+Shift+D")]}),Y($,{label:h("stats.fullTitle"),shortcuts:[H("Alt+/")]}),Y($,{label:h("search.title"),shortcuts:[tt("searchMenu")]}),Y($,{label:h("commandPalette.title"),shortcuts:gn?[tt("commandPalette")]:[tt("commandPalette"),tt("commandPalette",1)]})]}),Bo($x,{className:"HelpDialog__island--editor",caption:h("helpDialog.editor"),children:[Y($,{label:h("helpDialog.createFlowchart"),shortcuts:[H("CtrlOrCmd+Arrow Key")],isOr:!0}),Y($,{label:h("helpDialog.navigateFlowchart"),shortcuts:[H("Alt+Arrow Key")],isOr:!0}),Y($,{label:h("labels.moveCanvas"),shortcuts:[H(`Space+${h("helpDialog.drag")}`),H(`Wheel+${h("helpDialog.drag")}`)],isOr:!0}),Y($,{label:h("buttons.clearReset"),shortcuts:[H("CtrlOrCmd+Delete")]}),Y($,{label:h("labels.delete"),shortcuts:[H("Delete")]}),Y($,{label:h("labels.cut"),shortcuts:[H("CtrlOrCmd+X")]}),Y($,{label:h("labels.copy"),shortcuts:[H("CtrlOrCmd+C")]}),Y($,{label:h("labels.paste"),shortcuts:[H("CtrlOrCmd+V")]}),Y($,{label:h("labels.pasteAsPlaintext"),shortcuts:[H("CtrlOrCmd+Shift+V")]}),Y($,{label:h("labels.selectAll"),shortcuts:[H("CtrlOrCmd+A")]}),Y($,{label:h("labels.multiSelect"),shortcuts:[H(`Shift+${h("helpDialog.click")}`)]}),Y($,{label:h("helpDialog.deepSelect"),shortcuts:[H(`CtrlOrCmd+${h("helpDialog.click")}`)]}),Y($,{label:h("helpDialog.deepBoxSelect"),shortcuts:[H(`CtrlOrCmd+${h("helpDialog.drag")}`)]}),(Bl||gn)&&Y($,{label:h("labels.copyAsPng"),shortcuts:[H("Shift+Alt+C")]}),Y($,{label:h("labels.copyStyles"),shortcuts:[H("CtrlOrCmd+Alt+C")]}),Y($,{label:h("labels.pasteStyles"),shortcuts:[H("CtrlOrCmd+Alt+V")]}),Y($,{label:h("labels.sendToBack"),shortcuts:[yo?H("CtrlOrCmd+Alt+["):H("CtrlOrCmd+Shift+[")]}),Y($,{label:h("labels.bringToFront"),shortcuts:[yo?H("CtrlOrCmd+Alt+]"):H("CtrlOrCmd+Shift+]")]}),Y($,{label:h("labels.sendBackward"),shortcuts:[H("CtrlOrCmd+[")]}),Y($,{label:h("labels.bringForward"),shortcuts:[H("CtrlOrCmd+]")]}),Y($,{label:h("labels.alignTop"),shortcuts:[H("CtrlOrCmd+Shift+Up")]}),Y($,{label:h("labels.alignBottom"),shortcuts:[H("CtrlOrCmd+Shift+Down")]}),Y($,{label:h("labels.alignLeft"),shortcuts:[H("CtrlOrCmd+Shift+Left")]}),Y($,{label:h("labels.alignRight"),shortcuts:[H("CtrlOrCmd+Shift+Right")]}),Y($,{label:h("labels.duplicateSelection"),shortcuts:[H("CtrlOrCmd+D"),H(`Alt+${h("helpDialog.drag")}`)]}),Y($,{label:h("helpDialog.toggleElementLock"),shortcuts:[H("CtrlOrCmd+Shift+L")]}),Y($,{label:h("buttons.undo"),shortcuts:[H("CtrlOrCmd+Z")]}),Y($,{label:h("buttons.redo"),shortcuts:ty?[H("CtrlOrCmd+Y"),H("CtrlOrCmd+Shift+Z")]:[H("CtrlOrCmd+Shift+Z")]}),Y($,{label:h("labels.group"),shortcuts:[H("CtrlOrCmd+G")]}),Y($,{label:h("labels.ungroup"),shortcuts:[H("CtrlOrCmd+Shift+G")]}),Y($,{label:h("labels.flipHorizontal"),shortcuts:[H("Shift+H")]}),Y($,{label:h("labels.flipVertical"),shortcuts:[H("Shift+V")]}),Y($,{label:h("labels.showStroke"),shortcuts:[H("S")]}),Y($,{label:h("labels.showBackground"),shortcuts:[H("G")]}),Y($,{label:h("labels.showFonts"),shortcuts:[H("Shift+F")]}),Y($,{label:h("labels.decreaseFontSize"),shortcuts:[H("CtrlOrCmd+Shift+<")]}),Y($,{label:h("labels.increaseFontSize"),shortcuts:[H("CtrlOrCmd+Shift+>")]})]})]})]})})};import{useEffect as dk,useRef as mk,useState as Ua}from"react";import{useCallback as MR,useRef as AR,useState as LR}from"react";var _R=2e3,sk=()=>{let[e,o]=LR(null),t=AR(0),r=()=>{clearTimeout(t.current),o("success"),t.current=window.setTimeout(()=>{o(null)},_R)},n=MR(()=>{o(null)},[]);return{copyStatus:e,resetCopyStatus:n,onCopy:r}};import PR from"clsx";import{jsx as ck}from"react/jsx-runtime";var Bd=({title:e,name:o,checked:t,onChange:r,disabled:n=!1})=>ck("div",{className:PR("Switch",{toggled:t,disabled:n}),children:ck("input",{name:o,id:o,title:e,type:"checkbox",checked:t,disabled:n,onChange:()=>r(!t),onKeyDown:i=>{i.key===" "&&r(!t)}})});import{jsx as mt,jsxs as Vi}from"react/jsx-runtime";var DR=()=>Vi("div",{children:[mt("h3",{children:h("canvasError.cannotShowPreview")}),mt("p",{children:mt("span",{children:h("canvasError.canvasTooBig")})}),Vi("em",{children:["(",h("canvasError.canvasTooBigTip"),")"]})]}),RR=({appStateSnapshot:e,elementsSnapshot:o,files:t,actionManager:r,onExportImage:n,name:i,exportWithDarkMode:a})=>{let l=Ge(o,e),[s,c]=Ua(i),[d,p]=Ua(l),[m,u]=Ua(e.exportBackground),[b,f]=Ua(e.exportEmbedScene),[x,v]=Ua(e.exportScale),y=mk(null),E=mk(0),[w,T]=Ua(null),{onCopy:S,copyStatus:_,resetCopyStatus:M}=sk();dk(()=>{M()},[s,m,a,x,b,M]);let{exportedElements:N,exportingFrame:L}=Ta(o,e,d);return dk(()=>{let D=y.current;if(!D)return;let O=D.offsetWidth,V=D.offsetHeight;if(!O)return;let K=++E.current,z=()=>K!==E.current;return es({data:{elements:N,appState:{...e,name:s,exportEmbedScene:b},files:t},config:{canvasBackgroundColor:m?e.viewBackgroundColor:!1,padding:jn,theme:a?"dark":"light",scale:x,maxWidthOrHeight:Math.max(O,V),exportingFrame:L}}).then(async J=>{if(!z()){try{await ua(J)}catch(X){throw X.name==="CANVAS_POSSIBLY_TOO_BIG"?new Error(h("canvasError.canvasTooBig")):X}z()||(T(null),D.replaceChildren(J))}}).catch(J=>{z()||(console.error(J),T(J))}),()=>{E.current+=1}},[e,t,N,L,s,m,a,x,b]),Vi("div",{className:"ImageExportModal",children:[mt("h3",{children:h("imageExportDialog.header")}),Vi("div",{className:"ImageExportModal__preview",children:[mt("div",{className:"ImageExportModal__preview__canvas",ref:y,children:w&&mt(DR,{})}),mt("div",{className:"ImageExportModal__preview__filename",children:!hl&&mt("input",{type:"text",className:"TextInput",value:s,style:{width:"30ch"},onChange:D=>{c(D.target.value),r.executeAction(vu,"ui",D.target.value)}})})]}),Vi("div",{className:"ImageExportModal__settings",children:[mt("h3",{children:h("imageExportDialog.header")}),l&&mt(zd,{label:h("imageExportDialog.label.onlySelected"),name:"exportOnlySelected",children:mt(Bd,{name:"exportOnlySelected",checked:d,onChange:D=>{p(D)}})}),mt(zd,{label:h("imageExportDialog.label.withBackground"),name:"exportBackgroundSwitch",children:mt(Bd,{name:"exportBackgroundSwitch",checked:m,onChange:D=>{u(D),r.executeAction(wu,"ui",D)}})}),mt(zd,{label:h("imageExportDialog.label.darkMode"),name:"exportDarkModeSwitch",children:mt(Bd,{name:"exportDarkModeSwitch",checked:a,onChange:D=>{r.executeAction(PT,"ui",D)}})}),mt(zd,{label:h("imageExportDialog.label.embedScene"),tooltip:h("imageExportDialog.tooltip.embedScene"),name:"exportEmbedSwitch",children:mt(Bd,{name:"exportEmbedSwitch",checked:b,onChange:D=>{f(D),r.executeAction(Tu,"ui",D)}})}),mt(zd,{label:h("imageExportDialog.label.scale"),name:"exportScale",children:mt(Fh,{name:"exportScale",value:x,onChange:D=>{v(D),r.executeAction(LT,"ui",D)},choices:am.map(D=>({value:D,label:`${D}\xD7`}))})}),Vi("div",{className:"ImageExportModal__settings__buttons",children:[mt(dr,{className:"ImageExportModal__settings__buttons__button",label:h("imageExportDialog.title.exportToPng"),onClick:()=>n(om.png,N,{exportingFrame:L}),icon:Ap,children:h("imageExportDialog.button.exportToPng")}),mt(dr,{className:"ImageExportModal__settings__buttons__button",label:h("imageExportDialog.title.exportToSvg"),onClick:()=>n(om.svg,N,{exportingFrame:L}),icon:Ap,children:h("imageExportDialog.button.exportToSvg")}),(Bl||gn)&&mt(dr,{className:"ImageExportModal__settings__buttons__button",label:h("imageExportDialog.title.copyPngToClipboard"),status:_,onClick:async()=>{await n(om.clipboard,N,{exportingFrame:L}),S()},icon:xa,children:h("imageExportDialog.button.copyPngToClipboard")})]})]})]})},zd=({label:e,children:o,tooltip:t,name:r})=>Vi("div",{className:"ImageExportModal__settings__setting",title:e,children:[Vi("label",{htmlFor:r,className:"ImageExportModal__settings__setting__label",children:[e,t&&mt(fo,{label:t,long:!0,children:Yb})]}),mt("div",{className:"ImageExportModal__settings__setting__content",children:o})]}),pk=({elements:e,appState:o,files:t,actionManager:r,onExportImage:n,onCloseRequest:i,name:a})=>{let[{appStateSnapshot:l,elementsSnapshot:s}]=Ua(()=>({appStateSnapshot:yr(o),elementsSnapshot:yr(e)}));return mt(kt,{onCloseRequest:i,size:"wide",title:!1,children:mt(RR,{elementsSnapshot:s,appStateSnapshot:l,files:t,actionManager:r,onExportImage:n,name:a,exportWithDarkMode:o.exportWithDarkMode})})};import OR from"react";import{jsx as NR}from"react/jsx-runtime";var jx={primary:{base:"var(--color-primary)",darker:"var(--color-primary-darker)",darkest:"var(--color-primary-darkest)"},lime:{base:"#74b816",darker:"#66a80f",darkest:"#5c940d"},pink:{base:"#d6336c",darker:"#c2255c",darkest:"#a61e4d"}},qx=({children:e,color:o})=>NR("div",{className:"Card",style:{"--card-color":jx[o].base,"--card-color-darker":jx[o].darker,"--card-color-darkest":jx[o].darkest},children:e});import{Fragment as BR,jsx as Or,jsxs as ng}from"react/jsx-runtime";var FR=({elements:e,appState:o,setAppState:t,files:r,actionManager:n,exportOpts:i,canvas:a,onCloseRequest:l})=>{let{onExportToBackend:s}=i;return Or("div",{className:"ExportDialog ExportDialog--json",children:ng("div",{className:"ExportDialog-cards",children:[i.saveFileToDisk&&ng(qx,{color:"lime",children:[Or("div",{className:"Card-icon",children:jf}),Or("h2",{children:h("exportDialog.disk_title")}),ng("div",{className:"Card-details",children:[h("exportDialog.disk_details"),!hl&&n.renderAction("changeProjectName")]}),Or(q,{className:"Card-button",type:"button",title:h("exportDialog.disk_button"),"aria-label":h("exportDialog.disk_button"),showAriaLabel:!0,onClick:()=>{n.executeAction(Ul,"ui")}})]}),s&&ng(qx,{color:"pink",children:[Or("div",{className:"Card-icon",children:Il}),Or("h2",{children:h("exportDialog.link_title")}),Or("div",{className:"Card-details",children:h("exportDialog.link_details")}),Or(q,{className:"Card-button",type:"button",title:h("exportDialog.link_button"),"aria-label":h("exportDialog.link_button"),showAriaLabel:!0,onClick:async()=>{try{xe("export","link",`ui (${yy()})`),await s(e,o,r),l()}catch(c){t({errorMessage:c.message})}}})]}),i.renderCustomUI&&i.renderCustomUI(e,o,r,a)]})})},uk=({elements:e,appState:o,files:t,actionManager:r,exportOpts:n,canvas:i,setAppState:a})=>{let l=OR.useCallback(()=>{a({openDialog:null})},[a]);return Or(BR,{children:o.openDialog?.name==="jsonExport"&&Or(kt,{onCloseRequest:l,title:h("buttons.export"),children:Or(FR,{elements:e,appState:o,setAppState:a,files:t,actionManager:r,onCloseRequest:l,exportOpts:n,canvas:i})})})};import zR from"clsx";import{jsx as HR}from"react/jsx-runtime";var hk=e=>HR(q,{className:zR("ToolIcon__LaserPointer",{"is-mobile":e.isMobile}),type:"toggle",size:"small",icon:Ir,checked:e.checked,title:`${e.title}`,"aria-label":`${e.title}`,"data-testid":"toolbar-LaserPointer",onSelect:()=>e.onChange?.()});import bk from"clsx";import{useState as VR}from"react";import{jsx as Jx}from"react/jsx-runtime";var We=e=>Array.isArray(e)?`<kbd>${e.map(H).join(" + ")}</kbd>`:`<kbd>${H(e)}</kbd>`,UR=({appState:e,isMobile:o,editorInterface:t,app:r})=>{let{activeTool:n,isResizing:i,isRotating:a,lastPointerDownWith:l}=e,s=e.multiElement!==null;if(e.openSidebar?.name===no.name&&e.openSidebar.tab===pn&&e.searchMatches?.matches.length)return h("hints.dismissSearch",{shortcut:We("Escape")});if(e.openSidebar&&!t.canFitSidebar)return null;if(Qo(e))return h("hints.eraserRevert",{shortcut:We("Alt")});let c=r.scene.getSelectedElements(e);if(e.selectedLinearElement?.isDragging&&c[0]?.type==="arrow")return h("hints.arrowBindModifiers",{shortcut_1:We("Ctrl"),shortcut_2:We("Alt")});if(n.type==="arrow"||n.type==="line")return s?h("hints.linearElementMulti",{shortcut_1:We("Escape"),shortcut_2:We("Enter")}):n.type==="arrow"?h("hints.arrowTool",{shortcut:We("A")}):h("hints.linearElement");if(n.type==="freedraw")return h("hints.freeDraw");if(n.type==="text")return h("hints.text");if(n.type==="embeddable")return h("hints.embeddable");if(n.type==="autoshape")return h("hints.autoshape");if(i&&l==="mouse"&&c.length===1){let d=c[0];return Se(d)&&d.points.length===2?h("hints.lockAngle",{shortcut:We("Shift")}):et(d)?h("hints.resizeImage",{shortcut_1:We("Shift"),shortcut_2:We("Alt")}):h("hints.resize",{shortcut_1:We("Shift"),shortcut_2:We("Alt")})}if(a&&l==="mouse")return h("hints.rotate",{shortcut:We("Shift")});if(c.length===1&&j(c[0]))return h("hints.text_selected",{shortcut:We("Enter")});if(e.editingTextElement)return h("hints.text_editing",{shortcut_1:We("Escape"),shortcut_2:We(["CtrlOrCmd","Enter"])});if(e.croppingElementId)return h("hints.leaveCropEditor",{shortcut_1:We("Enter"),shortcut_2:We("Escape")});if(c.length===1&&et(c[0]))return h("hints.enterCropEditor",{shortcut:We("Enter")});if(n.type==="selection"){if(e.selectionElement&&!c.length&&!e.editingTextElement&&!e.selectedLinearElement?.isEditing)return h("hints.deepBoxSelect",{shortcut:We("CtrlOrCmd")});if(Oi(r)&&e.selectedElementsAreBeingDragged)return h("hints.disableSnapping",{shortcut:We("CtrlOrCmd")});if(!c.length&&!o)return h("hints.canvasPanning",{shortcut_1:We(h("keys.mmb")),shortcut_2:We("Space")});if(c.length===1){if(Se(c[0]))return ve(c[0])&&e.selectedLinearElement?.elementId===c[0].id&&(e.selectedLinearElement.hoverPointIndex===0||e.selectedLinearElement.hoverPointIndex===c[0].points.length-1)?h("hints.toggleArrowhead"):e.selectedLinearElement?.isEditing?e.selectedLinearElement.selectedPointsIndices?h("hints.lineEditor_pointSelected",{shortcut_1:We("Delete"),shortcut_2:We(["CtrlOrCmd","D"])}):h("hints.lineEditor_nothingSelected",{shortcut_1:We("Shift"),shortcut_2:We("Alt")}):nt(c[0])?h("hints.lineEditor_line_info",{shortcut:We("Enter")}):h("hints.lineEditor_info",{shortcut_1:We("CtrlOrCmd"),shortcut_2:We(["CtrlOrCmd","Enter"])});if(!e.newElement&&!e.selectedElementsAreBeingDragged&&En(c[0])){let d=h("hints.bindTextToElement",{shortcut:We("Enter")}),p=h("hints.createFlowchart",{shortcut:We(["CtrlOrCmd","\u2191\u2193"])});return Tm(c[0])?rw(c[0],r.scene.getNonDeletedElementsMap())?[d,p]:[d,p]:d}}}return null},gk=({appState:e,isMobile:o,editorInterface:t,app:r})=>{let n=UR({appState:e,isMobile:o,editorInterface:t,app:r});if(!n)return null;let a=(Array.isArray(n)?n.map(l=>l.replace(/\. ?$/,"")).join(", "):n).split(/(<kbd>[^<]+<\/kbd>)/g).map((l,s)=>{if(s%2===1){let c=l[0]==="<"&&l.match(/^<kbd>([^<]+)<\/kbd>$/);return Jx("kbd",{children:c?c[1]:l},s)}return l});return Jx("div",{className:"HintViewer",children:Jx("span",{children:a})})};import GR from"clsx";import{jsx as WR}from"react/jsx-runtime";var fk=e=>WR(q,{className:GR("ToolIcon__lock",{"is-mobile":e.isMobile}),type:"toggle",icon:e.checked?ha:gi,checked:e.checked,disabled:e.disabled,title:`${e.title} \u2014 Q`,"aria-label":`${e.title}`,"data-testid":"toolbar-lock",onSelect:()=>e.onChange?.()});import{Fragment as KR,jsx as Ve,jsxs as Hd}from"react/jsx-runtime";var YR=({app:e,activeTool:o,setAppState:t})=>{let[r,n]=VR(!1),i=Ut()==="full",{TTDDialogTriggerTunnel:a}=ot(),l=o.type==="frame",s=o.type==="autoshape",c=o.type==="laser",d=o.type==="bucketfill",p=i&&o.type==="lasso"&&e.state.preferredSelectionTool.type!=="lasso",m=o.type==="embeddable";return Hd(pe,{open:r,children:[Ve(pe.Trigger,{className:bk("App-toolbar__extra-tools-trigger",{"App-toolbar__extra-tools-trigger--selected":l||m||i&&s||p||d||c&&!e.props.isCollaborating}),onToggle:()=>{n(!r),t({openMenu:null,openPopup:null})},title:h("toolBar.extraTools"),children:l?Cr:m?kn:i&&s?xi:c&&!e.props.isCollaborating?Ir:p?yl:d?ho:hi}),Hd(pe.Content,{onClickOutside:()=>n(!1),onSelect:()=>n(!1),className:"App-toolbar__extra-tools-dropdown",children:[Ve(pe.Item,{onSelect:()=>e.setActiveTool({type:"frame"}),icon:Cr,shortcut:I.F.toLocaleUpperCase(),"data-testid":"toolbar-frame",selected:l,disabled:_t(e,"frame"),children:h("toolBar.frame")}),Ve(pe.Item,{onSelect:()=>e.setActiveTool({type:"embeddable"}),icon:kn,"data-testid":"toolbar-embeddable",selected:m,disabled:_t(e,"embeddable"),children:h("toolBar.embeddable")}),Ve(pe.Item,{onSelect:()=>e.setActiveTool({type:"autoshape"}),icon:xi,shortcut:od("autoshape"),"data-testid":"toolbar-autoshape",selected:s,disabled:_t(e,"autoshape"),children:h("toolBar.autoshape")}),Ve(pe.Item,{onSelect:()=>e.setActiveTool({type:"laser"}),icon:Ir,"data-testid":"toolbar-laser",selected:c,shortcut:I.K.toLocaleUpperCase(),disabled:_t(e,"laser"),children:h("toolBar.laser")}),Ve(pe.Item,{onSelect:()=>e.setActiveTool({type:"bucketfill"}),icon:ho,"data-testid":"toolbar-bucketfill",selected:d,shortcut:I.B.toLocaleUpperCase(),disabled:_t(e,"bucketfill"),children:h("toolBar.bucketfill")}),i&&Ve(pe.Item,{onSelect:()=>e.setActiveTool({type:"lasso"}),icon:yl,"data-testid":"toolbar-lasso",selected:p,disabled:_t(e,"lasso"),children:h("toolBar.lasso")}),Ve("div",{style:{margin:"6px 0",fontSize:14,fontWeight:600},children:"Generate"}),e.props.aiEnabled!==!1&&Ve(a.Out,{}),Ve(pe.Item,{onSelect:()=>e.setOpenDialog({name:"ttd",tab:"mermaid"}),icon:Ea,"data-testid":"toolbar-embeddable",children:h("toolBar.mermaidToExcalidraw")}),e.props.aiEnabled!==!1&&e.plugins.diagramToCode&&Ve(pe.Item,{onSelect:()=>e.onMagicframeToolSelect(),icon:Ei,"data-testid":"toolbar-magicframe",badge:Ve(pe.Item.Badge,{children:"AI"}),disabled:_t(e,"magicframe"),children:h("toolBar.magicframe")})]})]})},xk=({app:e,appState:o,setAppState:t,UIOptions:r,onPenModeToggle:n,onLockToggle:i,heading:a})=>{let l=Me(),s=Ut()==="compact",c=o.activeTool,d={app:e,activeTool:c};return Hd(Et,{padding:1,className:bk("App-toolbar",{"zen-mode":o.zenModeEnabled,"App-toolbar--compact":s}),"data-viewport-ui":"top",children:[Ve(gk,{appState:o,isMobile:l.formFactor==="phone",editorInterface:l,app:e}),a,Hd(oo.Row,{gap:s?.5:1,children:[!s&&Ve(ws,{checked:o.penMode,onChange:()=>n(null),title:h("toolBar.penMode"),penDetected:o.penDetected}),e.props.activeTool==null&&Hd(KR,{children:[Ve(fk,{checked:o.activeTool.locked,onChange:i,title:h("toolBar.lock"),disabled:e.props.activeTool!=null}),Ve("div",{className:"App-toolbar__divider",style:{marginRight:"0.25rem"}})]}),Ve(cu,{...d,hideKeyBinding:!0}),s?Ve(uu,{...d,setAppState:t}):o.preferredSelectionTool.type==="lasso"?Ve(bT,{...d}):Ve(fT,{...d}),Ve(cT,{...d}),Ve(dT,{...d}),Ve(mT,{...d}),Ve(pT,{...d}),Ve(uT,{...d}),s?Ve(hu,{...d}):Ve(hT,{...d}),Ve(du,{...d}),r.tools?.image!==!1&&Ve(mu,{...d}),Ve(pu,{...d}),Ve("div",{className:"App-toolbar__divider",style:{marginLeft:"0.25rem"}}),Ve(YR,{app:e,activeTool:c,setAppState:t})]})]})};import{Fragment as Qx,jsx as me,jsxs as _o}from"react/jsx-runtime";var ZR=({UIOptions:e})=>_o(mo,{__fallback:!0,children:[me(mo.DefaultItems.LoadScene,{}),me(mo.DefaultItems.SaveToActiveFile,{}),e.canvasActions.export&&me(mo.DefaultItems.Export,{}),e.canvasActions.saveAsImage&&me(mo.DefaultItems.SaveAsImage,{}),me(mo.DefaultItems.SearchMenu,{}),me(mo.DefaultItems.Help,{}),me(mo.DefaultItems.ClearCanvas,{}),me(mo.Separator,{}),me(mo.Group,{title:"Excalidraw links",children:me(mo.DefaultItems.Socials,{})}),me(mo.Separator,{}),me(mo.DefaultItems.ToggleTheme,{allowSystemTheme:!1}),me(mo.DefaultItems.ChangeCanvasBackground,{})]}),$R=()=>_o(Uh,{__fallback:!0,children:[me(Uh.Actions.SaveToDisk,{}),me(Uh.Actions.ExportToImage,{})]}),jR=({actionManager:e,appState:o,files:t,setAppState:r,elements:n,canvas:i,onLockToggle:a,onPenModeToggle:l,showExitZenModeBtn:s,renderTopLeftUI:c,renderTopRightUI:d,renderCustomStats:p,UIOptions:m,onExportImage:u,renderWelcomeScreen:b,children:f,app:x,defaultUIEnabled:v,zoomUIEnabled:y,scrollBackToContentUIEnabled:E,isCollaborating:w,generateLinkForSelection:T})=>{let S=Me(),M=Ut()==="compact",N=Q3(),L=M?{menuTopGap:4,toolbarColGap:4,toolbarRowGap:1,toolbarInnerRowGap:.5,islandPadding:1,collabMarginLeft:8}:{menuTopGap:6,toolbarColGap:4,toolbarRowGap:1,toolbarInnerRowGap:1,islandPadding:1,collabMarginLeft:8},D=N.tunnelsJotai.Provider,[O,V]=re(Pn),K=()=>m.canvasActions.export?me(uk,{elements:n,appState:o,files:t,actionManager:e,exportOpts:m.canvasActions.export,canvas:i,setAppState:r}):null,z=()=>!m.canvasActions.saveAsImage||o.openDialog?.name!=="imageExport"?null:me(pk,{elements:n,appState:o,files:t,actionManager:e,onExportImage:u,onCloseRequest:()=>r({openDialog:null}),name:x.getName()}),J=()=>_o("div",{style:{position:"relative"},children:[_o("div",{className:"excalidraw-ui-top-left",children:[c?.(!1,o),me(N.MainMenuTunnel.Out,{})]}),b&&me(N.WelcomeScreenMenuHintTunnel.Out,{})]}),X=()=>me(Id,{heading:"selectedShapeActions",className:Rs("selected-shape-actions zen-mode-transition",{"transition-left":o.zenModeEnabled}),children:M?me(Et,{className:Rs("compact-shape-actions-island"),padding:0,"data-viewport-ui":"side","data-viewport-ui-name":"stylesPanel",style:{maxHeight:`${o.height-166}px`},children:me(kI,{appState:o,elementsMap:x.scene.getNonDeletedElementsMap(),renderAction:e.renderAction,app:x,setAppState:r})}):me(Et,{className:qe.SHAPE_ACTIONS_MENU,padding:2,style:{maxHeight:`${o.height-166}px`},"data-viewport-ui":"side","data-viewport-ui-name":"stylesPanel",children:me(wI,{appState:o,elementsMap:x.scene.getNonDeletedElementsMap(),renderAction:e.renderAction,app:x})})}),le=()=>{let ee=v&&ww(o,n),Te=v&&o.stats.open&&!o.zenModeEnabled&&!o.viewModeEnabled&&o.openDialog?.name!=="elementLinkSelector";return me(Lh,{side:"top",children:_o("div",{className:"App-menu App-menu_top",children:[_o(oo.Col,{gap:L.menuTopGap,className:Rs("App-menu_top__left"),children:[J(),v&&me("div",{className:Rs("selected-shape-actions-container",{"selected-shape-actions-container--compact":M}),children:ee&&X()}),v&&M&&!o.viewModeEnabled&&ee&&me(ws,{checked:o.penMode,onChange:()=>l(null),title:h("toolBar.penMode"),isMobile:!0,penDetected:o.penDetected})]}),v&&!o.viewModeEnabled&&o.openDialog?.name!=="elementLinkSelector"&&me(Id,{heading:"shapes",className:"shapes-section",children:Ne=>_o("div",{style:{position:"relative"},children:[b&&me(N.WelcomeScreenToolbarHintTunnel.Out,{}),me(oo.Col,{gap:L.toolbarColGap,align:"start",children:_o(oo.Row,{gap:L.toolbarRowGap,className:Rs("App-toolbar-container",{"zen-mode":o.zenModeEnabled}),children:[me(xk,{app:x,appState:o,setAppState:r,UIOptions:m,onPenModeToggle:l,onLockToggle:a,heading:Ne}),w&&me(Et,{style:{marginLeft:L.collabMarginLeft,alignSelf:"center",height:"fit-content"},children:me(hk,{title:h("toolBar.laser"),checked:o.activeTool.type===ut.laser,onChange:()=>x.setActiveTool({type:ut.laser}),isMobile:!0})})]})})]})}),_o("div",{className:Rs("layer-ui__wrapper__top-right zen-mode-transition",{"transition-right":o.zenModeEnabled,"layer-ui__wrapper__top-right--compact":M}),children:[v&&o.collaborators.size>0&&me(Nh,{collaborators:o.collaborators,userToFollow:o.userToFollow?.socketId||null}),d?.(S.formFactor==="phone",o),!o.viewModeEnabled&&o.openDialog?.name!=="elementLinkSelector"&&(!F||o.openSidebar?.name!==no.name)&&me(N.DefaultSidebarTriggerTunnel.Out,{}),Te&&me(Fd,{app:x,onClose:()=>{e.executeAction(Fn)},renderCustomStats:p})]})]})})},ce=()=>v?me(Gh,{__fallback:!0,onDock:ee=>{xe("sidebar",`toggleDock (${ee?"dock":"undock"})`,`(${S.formFactor==="phone"?"mobile":"desktop"})`)}}):null,F=bl(Sd),W=_o(Qx,{children:[f,v&&_o(Qx,{children:[me(ZR,{UIOptions:m}),me(Gh.Trigger,{__fallback:!0,icon:v1,title:Vt(h("toolBar.library")),onToggle:ee=>{ee&&xe("sidebar",`${no.name} (open)`,`button (${S.formFactor==="phone"?"mobile":"desktop"})`)},tab:no.defaultTab})]}),me($R,{}),o.openDialog?.name==="ttd"&&me(eg,{__fallback:!0}),v&&o.isLoading&&me(Mh,{delay:250}),v&&o.errorMessage&&me(ik,{onClose:()=>r({errorMessage:null}),children:o.errorMessage}),v&&O&&S.formFactor!=="phone"&&me(a2,{colorPickerType:O.colorPickerType,onCancel:()=>{V(null)},onChange:(ee,Te,Ne,{altKey:Ze})=>{if(!(ee!=="elementBackground"&&ee!=="elementStroke"))if(Ne.length){for(let pt of Ne)lo(pt,ne(n),{[Ze&&O.swapPreviewOnAlt?ee==="elementBackground"?"strokeColor":"backgroundColor":ee==="elementBackground"?"backgroundColor":"strokeColor"]:Te}),qo.delete(pt);x.scene.triggerUpdate()}else r(ee==="elementBackground"?{currentItemBackgroundColor:Te}:{currentItemStrokeColor:Te})},onSelect:(ee,Te)=>{V(Ne=>Ne?.keepOpenOnAlt&&Te.altKey?Ne:null),O?.onSelect?.(ee,Te)}}),o.openDialog?.name==="help"&&me(ak,{onClose:()=>{r({openDialog:null})}}),me(DI,{}),v&&o.openDialog?.name==="elementLinkSelector"&&me(nk,{sourceElementId:o.openDialog.sourceElementId,onClose:()=>{r({openDialog:null})},scene:x.scene,appState:o,generateLinkForSelection:T}),me(N.OverwriteConfirmDialogTunnel.Out,{}),z(),K(),v&&o.openDialog?.name==="charts"&&me(sS,{data:o.openDialog.data,rawText:o.openDialog.rawText,onClose:()=>r({openDialog:null})}),S.formFactor==="phone"&&me(rS,{app:x,appState:o,elements:n,actionManager:e,renderJSONExportDialog:K,renderImageExportDialog:z,setAppState:r,onPenModeToggle:l,renderTopLeftUI:c,renderTopRightUI:d,renderSidebars:ce,renderWelcomeScreen:b,defaultUIEnabled:v,scrollBackToContentUIEnabled:E}),S.formFactor!=="phone"&&_o(Qx,{children:[_o("div",{className:"layer-ui__wrapper",style:o.openSidebar&&F&&S.canFitSidebar?{width:"calc(100% - var(--right-sidebar-width))"}:{},children:[b&&me(N.WelcomeScreenCenterTunnel.Out,{}),le(),me(hS,{appState:o,actionManager:e,showExitZenModeBtn:s,renderWelcomeScreen:b,defaultUIEnabled:v,zoomUIEnabled:y}),(o.toast||E&&o.scrolledOutside)&&_o("div",{className:"floating-status-stack",children:[o.toast&&me(fu,{message:o.toast.message,onClose:()=>r({toast:null}),duration:o.toast.duration,closable:o.toast.closable}),!o.toast&&E&&o.scrolledOutside&&me("button",{type:"button",className:"scroll-back-to-content",onClick:()=>{r(ee=>({...pl(n,ee)}))},children:h("buttons.scrollBackToContent")})]})]}),ce()]})]});return me(k1.Provider,{value:o,children:me(D,{children:me(tx.Provider,{value:N,children:W})})})},Ek=e=>{let{cursorButton:o,scrollX:t,scrollY:r,zoom:n,shouldCacheIgnoreZoom:i,snapLines:a,originSnapOffset:l,suggestedBinding:s,frameToHighlight:c,elementsToHighlight:d,...p}=e;return p},qR=(e,o)=>{if(e.children!==o.children)return!1;let{canvas:t,appState:r,...n}=e,{canvas:i,appState:a,...l}=o;return At(Ek(r),Ek(a),{selectedElementIds:At,selectedGroupIds:At})&&At(n,l)},yk=XR.memo(jR,qR);import JR from"clsx";import{jsx as QR}from"react/jsx-runtime";var ig=e=>QR(q,{className:JR("ToolIcon__MagicButton",{"is-mobile":e.isMobile}),type:"toggle",size:"small",icon:e.icon,checked:e.checked,title:`${e.title}`,"aria-label":`${e.title}`,onSelect:()=>e.onChange?.()});import{useEffect as eN,useRef as tN}from"react";import{jsx as vk}from"react/jsx-runtime";var wk=({trails:e})=>{let o=tN(null);return eN(()=>{if(o.current)for(let t of e)t.start(o.current);return()=>{for(let t of e)t.stop()}},e),vk("div",{className:"SVGLayer",children:vk("svg",{ref:o})})};import yN,{useEffect as vN,useRef as Pk}from"react";var oN="#ff6b6b",rN="#ff0000",Tk=1,Ck=2,Ik=(e,o)=>{if(!o.snapLines.length)return;let t=o.theme===te.LIGHT||o.zenModeEnabled?oN:rN,r=(o.zenModeEnabled?Tk*1.5:Tk)/o.zoom.value;e.save(),e.translate(o.scrollX,o.scrollY);for(let n of o.snapLines)n.type==="pointer"?(e.lineWidth=r,e.strokeStyle=t,iN(n,e,o)):n.type==="gap"?(e.lineWidth=r,e.strokeStyle=t,aN(n.points[0],n.points[1],n.direction,o,e)):n.type==="points"&&(e.lineWidth=r,e.strokeStyle=t,nN(n,e,o));e.restore()},nN=(e,o,t)=>{if(!t.zenModeEnabled){let r=e.points[0],n=e.points[e.points.length-1];hr(r,n,o)}for(let r of e.points)Sk(r,t,o)},iN=(e,o,t)=>{Sk(e.points[0],t,o),t.zenModeEnabled||hr(e.points[0],e.points[1],o)},Sk=([e,o],t,r)=>{r.save();let n=(t.zenModeEnabled?Ck*1.5:Ck)/t.zoom.value;r.beginPath(),r.moveTo(e-n,o-n),r.lineTo(e+n,o+n),r.moveTo(e+n,o-n),r.lineTo(e-n,o+n),r.stroke(),r.restore()},hr=(e,o,t)=>{t.beginPath(),t.lineTo(e[0],e[1]),t.lineTo(o[0],o[1]),t.stroke()},aN=(e,o,t,r,n)=>{let i=8/r.zoom.value,a=i/2,l=i/4;if(t==="horizontal"){let s=[(e[0]+o[0])/2,e[1]];r.zenModeEnabled||hr(A(e[0],e[1]-i),A(e[0],e[1]+i),n),hr(A(s[0]-l,s[1]-a),A(s[0]-l,s[1]+a),n),hr(A(s[0]+l,s[1]-a),A(s[0]+l,s[1]+a),n),r.zenModeEnabled||(hr(A(o[0],o[1]-i),A(o[0],o[1]+i),n),hr(e,o,n))}else{let s=[e[0],(e[1]+o[1])/2];r.zenModeEnabled||hr(A(e[0]-i,e[1]),A(e[0]+i,e[1]),n),hr(A(s[0]-a,s[1]-l),A(s[0]+a,s[1]-l),n),hr(A(s[0]-a,s[1]+l),A(s[0]+a,s[1]+l),n),r.zenModeEnabled||(hr(A(o[0]-i,o[1]),A(o[0]+i,o[1]),n),hr(e,o,n))}};var lN=(e,o)=>{Qe(o.selectedLinearElement,"selectedLinearElement is null");let{segmentMidPointHoveredCoords:t}=o.selectedLinearElement;Qe(t,"midPointCoords is null"),ag(t,e,o)},sN=(e,o,t)=>{let{elementId:r,hoverPointIndex:n}=o.selectedLinearElement;if(o.selectedLinearElement?.isEditing&&o.selectedLinearElement?.selectedPointsIndices?.includes(n)||o.selectedLinearElement?.isDragging)return;let i=Z.getElement(r,t);if(!i)return;let a=Z.getPointAtIndexGlobalCoordinates(i,n,t);ag(a,e,o)},ag=(e,o,t)=>{o.save(),o.translate(t.scrollX,t.scrollY),o.fillStyle="rgba(105, 101, 219, 0.4)",Tc(o,e[0],e[1],Z.POINT_HANDLE_SIZE/t.zoom.value,!1),o.restore()},cN=(e,o,t)=>{let{elementId:r,anchor:n}=o.hoveredArrowTextAnchor,i=t.get(r);if(!i||!ve(i)||i.isDeleted)return;let a=n==="label"?Z.getBoundTextElementCenter(i,t):Z.getPointAtIndexGlobalCoordinates(i,n==="start"?0:-1,t);ag(a,e,o)},eE=(e,o,t,r,n,i,a)=>{e.strokeStyle="#5e5ad8",e.setLineDash([]),e.fillStyle="rgba(255, 255, 255, 0.9)",n?e.fillStyle="rgba(134, 131, 226, 0.9)":i&&(e.fillStyle="rgba(177, 151, 252, 0.7)"),Tc(e,t[0],t[1],(a?r*(o.selectedLinearElement?.isEditing?1.5:2):r)/o.zoom.value,!i,!a||n)},dN=(e,o,t,r,n,i=!1)=>{let a=o.element.frameId&&t.get(o.element.frameId);switch(a&&oe(a)&&(e.translate(a.x,a.y),e.beginPath(),Je.radius&&e.roundRect?e.roundRect(-1,-1,a.width+1,a.height+1,Je.radius/r.zoom.value):e.rect(-1,-1,a.width+1,a.height+1),e.clip(),e.translate(-a.x,-a.y)),o.element.type){case"magicframe":case"frame":e.save(),e.translate(o.element.x,o.element.y),e.lineWidth=Je.strokeWidth/r.zoom.value,e.strokeStyle=r.theme===te.DARK?"rgba(3, 93, 161, 1)":"rgba(106, 189, 252, 1)",Je.radius&&e.roundRect?(e.beginPath(),e.roundRect(0,0,o.element.width,o.element.height,Je.radius/r.zoom.value),e.stroke(),e.closePath()):e.strokeRect(0,0,o.element.width,o.element.height),e.restore();break;default:e.save();let l=sa(o.element,t);switch(e.translate(l[0],l[1]),e.rotate(o.element.angle),e.translate(-l[0],-l[1]),e.translate(o.element.x,o.element.y),e.lineWidth=$e(1.75,o.element.strokeWidth,4)/Math.max(.25,r.zoom.value),e.strokeStyle=r.theme===te.DARK?"rgba(3, 93, 161, 1)":"rgba(106, 189, 252, 1)",o.element.type){case"ellipse":e.beginPath(),e.ellipse(o.element.width/2,o.element.height/2,o.element.width/2,o.element.height/2,0,0,2*Math.PI),e.closePath(),e.stroke();break;case"diamond":{let[s,c]=Cm(o.element);s.forEach(d=>{e.beginPath(),e.moveTo(d[0][0]-o.element.x,d[0][1]-o.element.y),e.lineTo(d[1][0]-o.element.x,d[1][1]-o.element.y),e.stroke()}),c.forEach(d=>{let[p,m,u,b]=d;e.beginPath(),e.moveTo(p[0]-o.element.x,p[1]-o.element.y),e.bezierCurveTo(m[0]-o.element.x,m[1]-o.element.y,u[0]-o.element.x,u[1]-o.element.y,b[0]-o.element.x,b[1]-o.element.y),e.stroke()})}break;default:{let[s,c]=Xg(o.element);s.forEach(d=>{e.beginPath(),e.moveTo(d[0][0]-o.element.x,d[0][1]-o.element.y),e.lineTo(d[1][0]-o.element.x,d[1][1]-o.element.y),e.stroke()}),c.forEach(d=>{let[p,m,u,b]=d;e.beginPath(),e.moveTo(p[0]-o.element.x,p[1]-o.element.y),e.bezierCurveTo(m[0]-o.element.x,m[1]-o.element.y,u[0]-o.element.x,u[1]-o.element.y,b[0]-o.element.x,b[1]-o.element.y),e.stroke()})}break}e.restore();break}if(r.isMidpointSnappingEnabled&&!r.gridModeEnabled&&!i&&(oe(o.element)||oa(o.element))){let l=r.selectedLinearElement,s=l?.elementId&&Z.getElement(l?.elementId,t),c=n&&li({point:n,element:o.element,elementsMap:t,threshold:0,overrideShouldTestInside:!0}),d=s&&Re(s)||r.activeTool.type==="arrow"&&r.currentItemArrowType==="elbow";if(!c||d){e.save();let p=sa(o.element,t),m;if(o.element.type==="diamond"){let x=sa(o.element,t);m=Oy(o.element).map(v=>{let y=Cg(v,.5),E=ke(y,x,o.element.angle);return A(E[0],E[1])})}else m=[{x:o.element.width,y:o.element.height/2},{x:o.element.width/2,y:o.element.height},{x:0,y:o.element.height/2},{x:o.element.width/2,y:0}].map(v=>{let y=A(v.x+o.element.x,v.y+o.element.y),E=ke(y,p,o.element.angle);return A(E[0],E[1])});let u=n&&m.reduce((x,v,y)=>{let E=Uo(v,n);return y===-1||E<x.distance?{idx:y,distance:E}:x},{idx:-1,distance:1/0}),b=4/r.zoom.value,f=si(r.zoom)+o.element.strokeWidth/2;m.forEach((x,v)=>{let y=(!c||d)&&u?.idx===v&&u.distance<=f,E=!y&&(d||v===u?.idx&&u.distance<=f*2);y?(e.fillStyle=r.theme===te.DARK?"rgba(3, 93, 161, 1)":"rgba(106, 189, 252, 1)",e.beginPath(),e.arc(x[0],x[1],b,0,2*Math.PI),e.fill()):E&&(e.fillStyle=r.theme===te.DARK?"rgba(0, 0, 0, 0.8)":"rgba(65, 65, 65, 0.5)",e.beginPath(),e.arc(x[0],x[1],b,0,2*Math.PI),e.fill())}),e.restore()}}},mN=(e,o,t,r,n,i,a)=>{let l=e.state.bindMode==="orbit"&&e.bindModeHandler!==null,s=Jn-(a?.runtime??(l?0:Jn)),c=$e(1/Jn*s,1e-4,1),d=t.strokeWidth/2,p=t.frameId&&r.get(t.frameId);switch(p&&oe(p)&&(o.translate(p.x,p.y),o.beginPath(),Je.radius&&o.roundRect?o.roundRect(-1,-1,p.width+1,p.height+1,Je.radius/n.zoom.value):o.rect(-1,-1,p.width+1,p.height+1),o.clip(),o.translate(-p.x,-p.y)),t.type){case"magicframe":case"frame":o.save(),o.translate(t.x,t.y),o.lineWidth=Je.strokeWidth/n.zoom.value,o.strokeStyle=n.theme===te.DARK?`rgba(3, 93, 161, ${c})`:`rgba(106, 189, 252, ${c})`,Je.radius&&o.roundRect?(o.beginPath(),o.roundRect(0,0,t.width,t.height,Je.radius/n.zoom.value),o.stroke(),o.closePath()):o.strokeRect(0,0,t.width,t.height),o.restore();break;default:o.save();let u=sa(t,r),b=u[0]+n.scrollX,f=u[1]+n.scrollY;switch(o.translate(b,f),o.rotate(t.angle),o.translate(-b,-f),o.translate(t.x+n.scrollX-d,t.y+n.scrollY-d),o.lineWidth=$e(2.5,t.strokeWidth*1.75,4)/Math.max(.25,n.zoom.value),o.strokeStyle=n.theme===te.DARK?`rgba(3, 93, 161, ${c/2})`:`rgba(106, 189, 252, ${c/2})`,t.type){case"ellipse":o.beginPath(),o.ellipse((t.width+d*2)/2,(t.height+d*2)/2,(t.width+d*2)/2,(t.height+d*2)/2,0,0,2*Math.PI),o.closePath(),o.stroke();break;case"diamond":{let[x,v]=Cm(t,d);x.forEach(y=>{o.beginPath(),o.moveTo(y[0][0]-t.x+d,y[0][1]-t.y+d),o.lineTo(y[1][0]-t.x+d,y[1][1]-t.y+d),o.stroke()}),v.forEach(y=>{let[E,w,T,S]=y;o.beginPath(),o.moveTo(E[0]-t.x+d,E[1]-t.y+d),o.bezierCurveTo(w[0]-t.x+d,w[1]-t.y+d,T[0]-t.x+d,T[1]-t.y+d,S[0]-t.x+d,S[1]-t.y+d),o.stroke()})}break;default:{let[x,v]=Xg(t,d);x.forEach(y=>{o.beginPath(),o.moveTo(y[0][0]-t.x+d,y[0][1]-t.y+d),o.lineTo(y[1][0]-t.x+d,y[1][1]-t.y+d),o.stroke()}),v.forEach(y=>{let[E,w,T,S]=y;o.beginPath(),o.moveTo(E[0]-t.x+d,E[1]-t.y+d),o.bezierCurveTo(w[0]-t.x+d,w[1]-t.y+d,T[0]-t.x+d,T[1]-t.y+d,S[0]-t.x+d,S[1]-t.y+d),o.stroke()})}break}o.restore();break}if(!l||(a?.runtime??0)>Jn)return;let m=.5*(Math.min(t.width,t.height)/2);if(!oe(t)){o.save(),o.translate(t.x+n.scrollX,t.y+n.scrollY);let u=1/Jn*s;if(o.strokeStyle="rgba(0, 0, 0, 0.2)",o.lineWidth=1/n.zoom.value,o.setLineDash([4/n.zoom.value,4/n.zoom.value]),o.lineDashOffset=-u*10/n.zoom.value,o.beginPath(),o.ellipse(t.width/2,t.height/2,m,m,0,0,2*Math.PI),o.stroke(),o.fillStyle="rgba(0, 0, 0, 0.04)",o.beginPath(),o.ellipse(t.width/2,t.height/2,m*(1-c),m*(1-c),0,0,2*Math.PI),o.fill(),o.restore(),n.isMidpointSnappingEnabled&&!n.gridModeEnabled&&(!e.lastPointerMoveEvent||!ei(e.lastPointerMoveEvent))){o.save(),o.translate(t.x+n.scrollX,t.y+n.scrollY);let b=5/n.zoom.value,f=5/n.zoom.value,x=b+f,v;if(t.type==="diamond"){let[,y]=Cm(t),E=sa(t,r);v=y.map(w=>{let T=Cg(w,.5),S=ke(T,E,t.angle);return{x:S[0]-t.x,y:S[1]-t.y}})}else{let y=sa(t,r);v=[{x:t.width/2,y:0},{x:t.width,y:t.height/2},{x:t.width/2,y:t.height},{x:0,y:t.height/2}].map(w=>{let T=A(w.x+t.x,w.y+t.y),S=ke(T,y,t.angle);return{x:S[0]-t.x,y:S[1]-t.y}})}v.forEach(y=>{o.clearRect(y.x-x,y.y-x,x*2,x*2)}),o.fillStyle=n.theme===te.DARK?`rgba(3, 93, 161, ${c})`:`rgba(106, 189, 252, ${c})`,v.forEach(y=>{o.beginPath(),o.arc(y.x,y.y,b,0,2*Math.PI),o.fill()}),o.restore()}}return{runtime:(a?.runtime??0)+i}},pN=(e,o,t,r,n,i,a)=>{if(t===null)return;if(Ko("COMPLEX_BINDINGS"))return mN(e,o,t.element,r,n,i,a);o.save(),o.translate(n.scrollX,n.scrollY);let l=e.lastPointerMoveCoords?A(e.lastPointerMoveCoords.x,e.lastPointerMoveCoords.y):null,s=!!e.lastPointerMoveEvent&&ei(e.lastPointerMoveEvent);dN(o,t,r,n,l,s),o.restore()},Lk=(e,o,t)=>{let{angle:r,x1:n,y1:i,x2:a,y2:l,selectionColors:s,cx:c,cy:d,dashed:p,activeEmbeddable:m}=t,u=a-n,b=l-i,x=(t.padding??Zi*2)/o.zoom.value,v=8/o.zoom.value,y=4/o.zoom.value;e.save(),e.translate(o.scrollX,o.scrollY),e.lineWidth=(m?4:1)/o.zoom.value;let E=s.length;for(let w=0;w<E;++w)e.strokeStyle=s[w],p&&e.setLineDash([v,y+(v+y)*(E-1)]),e.lineDashOffset=(v+y)*w,Cc(e,n-x,i-x,u+x*2,b+x*2,c,d,r);e.restore()},uN=(e,o,t,r)=>{let[n,i,a,l]=Yt(t,r),s=a-n,c=l-i;e.strokeStyle="rgb(0,118,255)",e.lineWidth=Je.strokeWidth/o.zoom.value,e.save(),e.translate(o.scrollX,o.scrollY),Cc(e,n,i,s,c,n+s/2,i+c/2,t.angle,!1,Je.radius/o.zoom.value),e.restore()},kk=(e,o,t,r)=>{let{colors:n=["rgb(0,118,255)"],dashed:i=!1}=r||{},a=t.filter(d=>d.groupIds.length===0),l=t.filter(d=>d.groupIds.length>0),s=d=>{let[p,m,u,b]=ye(d);return{angle:0,x1:p,x2:u,y1:m,y2:b,selectionColors:n,dashed:i,cx:p+(u-p)/2,cy:m+(b-m)/2,activeEmbeddable:!1}},c=d=>{let p=He(t,d);return s(p)};Object.entries(ia(l,o)).filter(([d,p])=>p).map(([d,p])=>d).map(d=>c(d)).concat(a.map(d=>s([d]))).forEach(d=>Lk(e,o,d))},tE=(e,o,t,r)=>{if(!o.selectedLinearElement)return;e.save(),e.translate(o.scrollX,o.scrollY),e.lineWidth=1/o.zoom.value;let n=Z.getPointsGlobalCoordinates(t,r),{POINT_HANDLE_SIZE:i}=Z,a=o.selectedLinearElement?.isEditing?i:i/2,l=Re(t),s=nt(t);if(n.forEach((c,d)=>{if(l&&d!==0&&d!==n.length-1)return;let p=d>0&&(d!==n.length-1||!s||!t.polygon)&&CE(c,d===n.length-1?n[0]:n[d-1],2/o.zoom.value),m=!!o.selectedLinearElement?.isEditing&&!!o.selectedLinearElement?.selectedPointsIndices?.includes(d);s&&t.polygon&&!m&&d===t.points.length-1&&o.selectedLinearElement?.isEditing&&o.selectedLinearElement?.selectedPointsIndices?.includes(0)&&(m=!0),eE(e,o,c,a,m,!1,p)}),Re(t)){let c=t.fixedSegments?.map(d=>d.index)||[];n.slice(0,-1).forEach((d,p)=>{Z.isSegmentTooShort(t,n[p+1],n[p],p,o.zoom,r)||eE(e,o,A((d[0]+n[p+1][0])/2,(d[1]+n[p+1][1])/2),i/2,!1,!c.includes(p+1),!1)})}else Z.getEditorMidPoints(t,r,o).filter((d,p,m)=>d!==null&&!(Re(t)&&(p===0||p===m.length-1))).forEach(d=>{(o.selectedLinearElement?.isEditing||n.length===2)&&eE(e,o,d,i/2,!1,!0,!1)});e.restore()},hN=(e,o,t,r)=>{e.save(),e.translate(o.scrollX,o.scrollY),e.strokeStyle="rgba(134, 131, 226, 0.6)",e.lineWidth=1/o.zoom.value,e.setLineDash([4/o.zoom.value,4/o.zoom.value]),e.beginPath(),e.moveTo(t[0],t[1]),e.lineTo(r[0],r[1]),e.stroke(),e.restore()},gN=(e,o,t,r,n)=>{e.save(),e.translate(o.scrollX,o.scrollY),e.strokeStyle="rgba(134, 131, 226, 0.6)",e.lineWidth=1/o.zoom.value,e.setLineDash([]),e.fillStyle=n?"rgba(134, 131, 226, 0.9)":"rgba(255, 255, 255, 0.9)",Tc(e,t[0],t[1],r/o.zoom.value,!0,!0),e.restore()},Mk=({arrow:e,appState:o,type:t,context:r,elementsMap:n})=>{let i=t==="start"?e.startBinding:e.endBinding,a=i?.elementId&&n.get(i.elementId);if(!a||!oa(a)||a.isDeleted)return;let l=Qg(i.fixedPoint,a,n);if(!sw(l,e,a,n,o,t))return;let s=o.selectedLinearElement,c=!!s?.isDragging,d=t==="start"?0:e.points.length-1,p=!!s?.selectedPointsIndices?.includes(d);if(s?.hoveredFocusPointBinding===t&&!s.draggedFocusPointBinding&&ag(l,r,o),!(p&&c)){let m=Qg(i.fixedPoint,a,n),u=s?.hoveredFocusPointBinding===t,b=Z.getPointAtIndexGlobalCoordinates(e,d,n);hN(r,o,b,m),gN(r,o,m,nv/1.5,u)}},Ak=(e,o,t,r,n)=>{Object.keys(r).forEach(i=>{let a=r[i];if(a!==void 0){let[l,s,c,d]=a;e.save(),e.lineWidth=1/t.zoom.value,o.selectionColor&&(e.strokeStyle=o.selectionColor),i==="rotation"?Tc(e,l+c/2,s+d/2,c/2,!0):e.roundRect?(e.beginPath(),e.roundRect(l,s,c,d,2/t.zoom.value),e.fill(),e.stroke()):Cc(e,l,s,c,d,l+c/2,s+d/2,n,!0),e.restore()}})},fN=(e,o,t,r,n)=>{let[i,a,,,l,s]=Yt(r,n),c=3,d=20,p=c/t.zoom.value,m=p/2,u=l-i+p,b=s-a+p,f=Math.min(d/t.zoom.value,u),x=Math.min(d/t.zoom.value,b);e.save(),e.fillStyle=o.selectionColor,e.strokeStyle=o.selectionColor,e.lineWidth=p,[[[-u,-b],[0,m],[f,m],[m,0],[m,x]],[[u-m,-b],[m,m],[-f+m,m],[0,0],[0,x]],[[-u,b],[0,-m],[f,-m],[m,0],[m,-x]],[[u-m,b],[m,-m],[-f+m,-m],[0,0],[0,-x]]].forEach(y=>{let[[E,w],[T,S],[_,M],[N,L],[D,O]]=y;e.save(),e.translate(l,s),e.rotate(r.angle),e.beginPath(),e.moveTo(E+T,w+S),e.lineTo(E+_,w+M),e.stroke(),e.beginPath(),e.moveTo(E+N,w+L),e.lineTo(E+D,w+O),e.stroke(),e.restore()}),e.restore()},bN=(e,o,t,r)=>{o.save();let n=W0(t.zoom.value),i=e.width+n*2,a=e.height+n*2,l=e.x+e.width/2,s=e.y+e.height/2,c=-(e.width/2+n),d=-(e.height/2+n);o.translate(l+t.scrollX,s+t.scrollY),o.rotate(e.angle),o.lineWidth=1/t.zoom.value,o.strokeStyle=r,o.globalAlpha=.5,o.setLineDash([6/t.zoom.value,4/t.zoom.value]),o.strokeRect(c,d,i,a),o.restore()},xN=(e,o,t,r,n)=>{let i=V0(e,t.zoom.value,n);i&&(o.save(),o.globalAlpha=.5,o.lineWidth=1.5/t.zoom.value,o.lineCap="round",o.strokeStyle=r,o.beginPath(),o.moveTo(i.start[0]+t.scrollX,i.start[1]+t.scrollY),o.lineTo(i.end[0]+t.scrollX,i.end[1]+t.scrollY),o.stroke(),o.restore())},EN=({app:e,canvas:o,elementsMap:t,visibleElements:r,selectedElements:n,allElementsMap:i,scale:a,appState:l,renderConfig:s,editorInterface:c,animationState:d,deltaTime:p})=>{if(o===null)return{};let[m,u]=Qm(o,a),b=d,f=ep({canvas:o,scale:a,normalizedWidth:m,normalizedHeight:u});f.save(),f.scale(l.zoom.value,l.zoom.value);let x;if(r.forEach(S=>{l.selectedLinearElement?.isEditing&&l.selectedLinearElement.elementId===S.id&&S&&(x=S)}),x&&tE(f,l,x,t),l.selectionElement&&!l.isCropping)try{Mv(l.selectionElement,f,l,s.selectionColor)}catch(S){console.error(S)}let v=fc(n,l);if(v&&!v.autoResize&&xN(v,f,l,s.selectionColor,c.formFactor),l.editingTextElement){let S=i.get(l.editingTextElement.id);S&&!S.autoResize&&bN(S,f,l,s.selectionColor)}if(l.isBindingEnabled&&l.suggestedBinding?b={...d,bindingHighlight:pN(e,f,l.suggestedBinding,i,l,p,d?.bindingHighlight)}:b={...d,bindingHighlight:void 0},l.hoveredArrowTextAnchor&&cN(f,l,i),l.frameToHighlight&&uN(f,l,l.frameToHighlight,t),l.elementsToHighlight&&kk(f,l,l.elementsToHighlight),l.activeLockedId){let S=i.get(l.activeLockedId),_=S?[S]:He(i,l.activeLockedId);kk(f,l,_,{colors:["#ced4da"],dashed:!0})}let y=n.some(S=>oe(S));n.length===1&&l.selectedLinearElement?.isEditing&&l.selectedLinearElement.elementId===n[0].id&&tE(f,l,n[0],t);let E=l.selectedLinearElement,w=E&&Z.getElement(E.elementId,i);if(w&&(l.selectedLinearElement.isDragging||(E.segmentMidPointHoveredCoords?lN(f,l):(Re(w)?E.hoverPointIndex===0||E.hoverPointIndex===w.points.length-1:E.hoverPointIndex>=0)&&sN(f,l,t)),ve(w)&&(Mk({arrow:w,elementsMap:i,appState:l,context:f,type:"start"}),Mk({arrow:w,elementsMap:i,appState:l,context:f,type:"end"}))),!l.multiElement&&!l.newElement&&!l.selectedLinearElement?.isEditing){let S=$m(n,l,c),_=n.length===1&&Se(n[0]);_&&l.selectedLinearElement?.elementId===n[0].id&&!n[0].locked&&tE(f,l,n[0],t);let M=s.selectionColor||"#000";if(S){let N=ne(n),L=[];for(let O of t.values()){let V=[],K=s.remoteSelectedElementIds.get(O.id);if(_&&Re(O)&&(O.startBinding||O.endBinding)||(N.has(O.id)&&!_m(l,O)&&V.push(M),K&&V.push(...K.map(z=>Sa(z,l.collaborators.get(z))))),V.length){let[z,J,X,le,ce,F]=Yt(O,t,!0);L.push({angle:O.angle,x1:z,y1:J,x2:X,y2:le,selectionColors:O.locked?["#ced4da"]:V,dashed:!!K||O.locked,cx:ce,cy:F,activeEmbeddable:l.activeEmbeddable?.element===O&&l.activeEmbeddable.state==="active",padding:O.id===l.croppingElementId||et(O)?0:void 0})}}let D=O=>{let V=He(t,O),[K,z,J,X]=ye(V);L.push({angle:0,x1:K,x2:J,y1:z,y2:X,selectionColors:V.some(le=>le.locked)?["#ced4da"]:["#000"],dashed:!0,cx:K+(J-K)/2,cy:z+(X-z)/2,activeEmbeddable:!1})};for(let O of wr(l))D(O);l.editingGroupId&&D(l.editingGroupId),L.forEach(O=>Lk(f,l,O))}if(f.save(),f.translate(l.scrollX,l.scrollY),n.length===1){f.fillStyle="#fff";let N=vw(n[0],l.zoom,t,"mouse",Zm(c));if(!l.viewModeEnabled&&S&&!j(l.editingTextElement)&&!l.croppingElementId&&Ak(f,s,l,N,n[0].angle),l.croppingElementId&&!l.isCropping){let L=t.get(l.croppingElementId);L&&et(L)&&fN(f,s,l,L,t)}}else if(n.length>1&&!l.isRotating&&!n.some(N=>N.locked)){let N=Zi*2/l.zoom.value;f.fillStyle="#fff";let[L,D,O,V]=ye(n,t),K=f.getLineDash();f.setLineDash([2/l.zoom.value]);let z=f.lineWidth;f.lineWidth=1/l.zoom.value,f.strokeStyle=M,Cc(f,L-N,D-N,O-L+N*2,V-D+N*2,(L+O)/2,(D+V)/2,0),f.lineWidth=z,f.setLineDash(K);let J=yw([L,D,O,V,(L+O)/2,(D+V)/2],0,l.zoom,"mouse",y?{...Zm(c),rotation:!0}:Zm(c));n.some(X=>!X.locked)&&Ak(f,s,l,J,0)}f.restore()}l.searchMatches?.matches.forEach(({id:S,focus:_,matchedLines:M})=>{let N=t.get(S);if(N){let[L,D,,,O,V]=Yt(N,t,!0);f.save(),l.theme===te.LIGHT?_?f.fillStyle="rgba(255, 124, 0, 0.4)":f.fillStyle="rgba(255, 226, 0, 0.4)":_?f.fillStyle="rgba(229, 82, 0, 0.4)":f.fillStyle="rgba(99, 52, 0, 0.4)";let K=oe(N)?l.zoom.value:1;f.translate(l.scrollX,l.scrollY),f.translate(O,V),f.rotate(N.angle),M.forEach(z=>{(z.showOnCanvas||_)&&f.fillRect(L+z.offsetX/K-O,D+z.offsetY/K-V,z.width/K,z.height/K)}),f.restore()}}),Ik(f,l),f.restore(),BT({context:f,renderConfig:s,appState:l,normalizedWidth:m,normalizedHeight:u});let T;return s.renderScrollbars&&(T=m3(t,m,u,l),f.save(),f.fillStyle=d3,f.strokeStyle="rgba(255,255,255,0.8)",[T.horizontal,T.vertical].forEach(S=>{S&&Mu(f,S.x,S.y,S.width,S.height,lr/2)}),f.restore()),{scrollBars:T,animationState:b}},_k=e=>{let o=EN(e);return e.callback(o),o};import{jsx as CN}from"react/jsx-runtime";var Dk="animateInteractiveScene",wN=e=>{let o=Pk(!1),t=Pk(null);return vN(()=>{if(!o.current){o.current=!0;return}let r=new Map,n=new Map,i=new Map,a=new Map,l=new Map;e.appState.collaborators.forEach((c,d)=>{if(c.selectedElementIds)for(let p of Object.keys(c.selectedElementIds))i.has(p)||i.set(p,[]),i.get(p).push(d);!c.pointer||c.pointer.renderCursor===!1||(c.username&&a.set(d,c.username),c.userState&&l.set(d,c.userState),n.set(d,Ot({sceneX:c.pointer.x,sceneY:c.pointer.y},e.appState)),r.set(d,c.button))});let s=e.containerRef?.current&&getComputedStyle(e.containerRef.current).getPropertyValue("--color-selection")||"#6965db";t.current={app:e.app,canvas:e.canvas,elementsMap:e.elementsMap,visibleElements:e.visibleElements,selectedElements:e.selectedElements,allElementsMap:e.allElementsMap,scale:window.devicePixelRatio,appState:e.appState,renderConfig:{remotePointerViewportCoords:n,remotePointerButton:r,remoteSelectedElementIds:i,remotePointerUsernames:a,remotePointerUserStates:l,selectionColor:s,renderScrollbars:e.renderScrollbars,lastViewportPosition:e.app.viewport.lastPosition},editorInterface:e.editorInterface,callback:e.renderInteractiveSceneCallback,animationState:{bindingHighlight:void 0},deltaTime:0},Pt.running(Dk)||Pt.start(Dk,({deltaTime:c,state:d})=>{let p=_k({...t.current,deltaTime:c,animationState:d}).animationState;if(p){for(let m in p)if(p[m]!==void 0)return p}})}),CN("canvas",{className:"excalidraw__canvas interactive",style:{width:e.appState.width,height:e.appState.height},width:e.appState.width*e.scale,height:e.appState.height*e.scale,ref:e.handleCanvasRef,onContextMenu:e.onContextMenu,onClick:e.onClick,onPointerMove:e.onPointerMove,onPointerUp:e.onPointerUp,onPointerCancel:e.onPointerCancel,onTouchMove:e.onTouchMove,onPointerDown:e.onPointerDown,onDoubleClick:e.appState.viewModeEnabled?void 0:e.onDoubleClick,children:h("labels.drawingCanvas")})},Rk=e=>({zoom:e.zoom,scrollX:e.scrollX,scrollY:e.scrollY,width:e.width,height:e.height,viewModeEnabled:e.viewModeEnabled,activeTool:e.activeTool,openDialog:e.openDialog,editingGroupId:e.editingGroupId,selectedElementIds:e.selectedElementIds,frameToHighlight:e.frameToHighlight,offsetLeft:e.offsetLeft,offsetTop:e.offsetTop,theme:e.theme,selectionElement:e.selectionElement,selectedGroupIds:e.selectedGroupIds,selectedLinearElement:e.selectedLinearElement,multiElement:e.multiElement,newElement:e.newElement,isBindingEnabled:e.isBindingEnabled,isMidpointSnappingEnabled:e.isMidpointSnappingEnabled,gridModeEnabled:e.gridModeEnabled,suggestedBinding:e.suggestedBinding,hoveredArrowTextAnchor:e.hoveredArrowTextAnchor,isRotating:e.isRotating,elementsToHighlight:e.elementsToHighlight,collaborators:e.collaborators,activeEmbeddable:e.activeEmbeddable,snapLines:e.snapLines,zenModeEnabled:e.zenModeEnabled,editingTextElement:e.editingTextElement,isCropping:e.isCropping,croppingElementId:e.croppingElementId,searchMatches:e.searchMatches,activeLockedId:e.activeLockedId,hoveredElementIds:e.hoveredElementIds,frameRendering:e.frameRendering,shouldCacheIgnoreZoom:e.shouldCacheIgnoreZoom,exportScale:e.exportScale,currentItemArrowType:e.currentItemArrowType}),TN=(e,o)=>e.selectionNonce!==o.selectionNonce||e.canvasNonce!==o.canvasNonce||e.scale!==o.scale||e.elementsMap!==o.elementsMap||e.visibleElements!==o.visibleElements||e.selectedElements!==o.selectedElements||e.renderScrollbars!==o.renderScrollbars||e.interactionEnabled!==o.interactionEnabled||e.navigationEnabled!==o.navigationEnabled?!1:At(Rk(e.appState),Rk(o.appState)),oE=yN.memo(wN,TN);import IN,{useEffect as Nk,useRef as Ok}from"react";import{jsx as MN}from"react/jsx-runtime";var SN=e=>{let o=Ok(null),t=Ok(!1);return Nk(()=>{e.canvas.style.width=`${e.appState.width}px`,e.canvas.style.height=`${e.appState.height}px`,e.canvas.width=e.appState.width*e.scale,e.canvas.height=e.appState.height*e.scale},[e.appState.height,e.appState.width,e.canvas,e.scale]),Nk(()=>{let r=o.current;if(!r)return;let n=e.canvas;t.current||(t.current=!0,r.replaceChildren(n),n.classList.add("excalidraw__canvas","static")),Pw({canvas:n,rc:e.rc,scale:e.scale,elementsMap:e.elementsMap,allElementsMap:e.allElementsMap,visibleElements:e.visibleElements,appState:e.appState,renderConfig:e.renderConfig},ms())}),MN("div",{className:"excalidraw__canvas-wrapper",ref:o})},Fk=e=>({zoom:e.zoom,scrollX:e.scrollX,scrollY:e.scrollY,width:e.width,height:e.height,viewModeEnabled:e.viewModeEnabled,openDialog:e.openDialog,hoveredElementIds:e.hoveredElementIds,offsetLeft:e.offsetLeft,offsetTop:e.offsetTop,theme:e.theme,shouldCacheIgnoreZoom:e.shouldCacheIgnoreZoom,viewBackgroundColor:e.viewBackgroundColor,exportScale:e.exportScale,selectedElementsAreBeingDragged:e.selectedElementsAreBeingDragged,gridSize:e.gridSize,gridStep:e.gridStep,frameRendering:e.frameRendering,selectedElementIds:e.selectedElementIds,frameToHighlight:e.frameToHighlight,editingGroupId:e.editingGroupId,currentHoveredFontFamily:e.currentHoveredFontFamily,croppingElementId:e.croppingElementId,suggestedBinding:e.suggestedBinding}),kN=(e,o)=>e.canvasNonce!==o.canvasNonce||e.scale!==o.scale||e.elementsMap!==o.elementsMap||e.visibleElements!==o.visibleElements?!1:At(Fk(e.appState),Fk(o.appState))&&At(e.renderConfig,o.renderConfig),rE=IN.memo(SN,kN);import{useEffect as LN,useRef as _N}from"react";var Bk=({canvas:e,rc:o,newElement:t,elementsMap:r,allElementsMap:n,scale:i,appState:a,renderConfig:l})=>{if(e){let[s,c]=Qm(e,i),d=ep({canvas:e,scale:i,normalizedWidth:s,normalizedHeight:c});if(d.save(),d.scale(a.zoom.value,a.zoom.value),t&&t.type!=="selection"){if(Wr(t))return;if((t.frameId||a.frameToHighlight?.id)&&a.frameRendering.enabled&&a.frameRendering.clip){let u=Tv(t,r,a);u&&Cv(t,u,a,r)&&Lw(u,d,l,a)}Av(t,r,n,o,d,l,a)}else d.clearRect(0,0,s,c);d.restore()}},AN=Qs(e=>{Bk(e)}),zk=(e,o)=>{if(o){AN(e);return}Bk(e)};import{jsx as DN}from"react/jsx-runtime";var PN=e=>{let o=_N(null);return LN(()=>{o.current&&zk({canvas:o.current,scale:e.scale,newElement:e.newElement,elementsMap:e.elementsMap,allElementsMap:e.allElementsMap,rc:e.rc,renderConfig:e.renderConfig,appState:e.appState},ms())}),DN("canvas",{className:"excalidraw__canvas",style:{width:e.appState.width,height:e.appState.height},width:e.appState.width*e.scale,height:e.appState.height*e.scale,ref:o})},Hk=PN;import RN from"clsx";import{useLayoutEffect as NN,useEffect as Uk,useRef as ON,useState as FN}from"react";import{jsx as UN}from"react/jsx-runtime";var Gk=700,BN=100,zN=16,HN=5*60*1e3,Vk=Ce(null),Wk=e=>e===ht.elbow?Ln:e===ht.round?_n:An,lg=class{constructor(o){C(this,"app");C(this,"lastShownAt",0);C(this,"show",o=>{let{x:t,y:r}=this.app.viewport.lastPosition;t===0&&r===0||(this.lastShownAt=Date.now(),this.app.updateEditorAtom(Vk,{content:o,nonce:Math.random()}))});C(this,"isOnCooldown",()=>Date.now()-this.lastShownAt<HN);C(this,"onArrowTypeCycled",o=>{this.show(Wk(o))});C(this,"onToolShortcut",(o,t)=>{(t==="digit"||!this.isOnCooldown())&&this.show(o==="line"?ga:Wk(this.app.state.currentItemArrowType))});this.app=o}},Yk=()=>{let[e,o]=re(Vk),t=Ke(),{container:r}=at(),n=ON(null),[i,a]=FN(!1),l=e?.nonce;return NN(()=>{if(l==null||!r)return;let s=(d,p)=>{let m=n.current;if(!m)return;let{left:u,top:b}=Wp({cursor:{x:d,y:p},element:{width:m.offsetWidth,height:m.offsetHeight},container:r.getBoundingClientRect(),gap:zN});m.style.transform=`translate(${u}px, ${b}px)`};s(t.viewport.lastPosition.x,t.viewport.lastPosition.y);let c=d=>{s(d.clientX,d.clientY)};return window.addEventListener("pointermove",c),()=>{window.removeEventListener("pointermove",c)}},[l,r,t]),Uk(()=>()=>{o(null)},[o]),Uk(()=>{if(l==null)return;a(!1);let s=window.setTimeout(()=>{a(!0)},Gk),c=window.setTimeout(()=>{o(null)},Gk+BN),d=()=>{o(null)};return window.addEventListener("pointerdown",d,{capture:!0}),()=>{window.clearTimeout(s),window.clearTimeout(c),window.removeEventListener("pointerdown",d,{capture:!0})}},[l,o]),e?UN("div",{ref:n,className:RN("CursorHint",{"CursorHint--fade-out":i}),"data-testid":"cursor-hint",children:e.content}):null};var sg=class{constructor(o){this.getState=o;C(this,"listeners",[]);C(this,"onStateChange",(o,t,r)=>{let{predicate:n,getValue:i,callback:a,once:l,matchesImmediately:s}=this.normalize(o,t,r);return a?s&&(queueMicrotask(()=>{let c=this.getState();a(i(c),c)}),l)?()=>{}:this.subscribe({predicate:n,getValue:i,callback:a,once:l}):s?Promise.resolve(i(this.getState())):new Promise(c=>{this.subscribe({predicate:n,getValue:i,callback:d=>c(d),once:!0})})})}isStateChangePredicateOptions(o){return typeof o=="object"&&!Array.isArray(o)&&"predicate"in o}subscribe(o){return this.listeners.push(o),()=>{this.listeners=this.listeners.filter(t=>t!==o)}}normalize(o,t,r){let n,i,a=t,l=r?.once??!1,s=!1;if(this.isStateChangePredicateOptions(o)){let{predicate:c,callback:d,once:p}=o;n=c,i=m=>m,a=d?(m,u)=>d(u):void 0,l=p??!1,s=c(this.getState())}else if(typeof o=="function"){let c=o;n=(d,p)=>c(d)!==c(p),i=d=>c(d)}else if(Array.isArray(o)){let c=o;n=(d,p)=>c.some(m=>d[m]!==p[m]),i=d=>d}else{let c=o;n=(d,p)=>d[c]!==p[c],i=d=>d[c]}return{predicate:n,getValue:i,callback:a,once:l,matchesImmediately:s}}flush(o){if(!this.listeners.length)return;let t=this.getState(),r=[];for(let n of this.listeners)n.predicate(t,o)?(n.callback(n.getValue(t),t),n.once||r.push(n)):r.push(n);this.listeners=r}clear(){this.listeners=[]}};import{flushSync as GN}from"react-dom";import{jsx as VN}from"react/jsx-runtime";var WN=({app:e,activeLockedId:o})=>{let t=e.scene.getElement(o);t&&!Jo(t)&&console.error("[NONDELETED][INVARIANT] UnlockPopup: activeLockedId points to a deleted element");let r=t&&Jo(t)?t:null,n=r?[r]:He(e.scene.getNonDeletedElementsMap(),o);if(n.length===0)return null;let[i,a]=ye(n),{x:l,y:s}=Ot({sceneX:i,sceneY:a},e.state);return VN("div",{className:"UnlockPopup",style:{bottom:`${e.state.height+12-s+e.state.offsetTop}px`,left:`${l-e.state.offsetLeft}px`},onClick:()=>{GN(()=>{let c=ia(n,e.state);e.setState({selectedElementIds:n.reduce((d,p)=>({...d,[p.id]:!0}),{}),selectedGroupIds:c,activeLockedId:null})}),e.actionManager.executeAction(jl)},title:h("labels.elementLock.unlock"),children:Df})},Kk=WN;import{Fragment as JN,jsx as Fe,jsxs as pg}from"react/jsx-runtime";var jk=gr.createContext(null),qk=gr.createContext(null),iE={formFactor:"desktop",desktopUIMode:"full",userAgent:zg(typeof navigator<"u"?navigator.userAgent:""),isTouchScreen:!1,canFitSidebar:!1,isLandscape:!0},lE=gr.createContext(iE);lE.displayName="EditorInterfaceContext";var $N={"editor:mount":{cardinality:"once",replay:"last"},"editor:initialize":{cardinality:"once",replay:"last"},"editor:unmount":{cardinality:"once",replay:"last"}},sE=gr.createContext({container:null,id:null});sE.displayName="ExcalidrawContainerContext";var cE=gr.createContext([]);cE.displayName="ExcalidrawElementsContext";var dE=gr.createContext({...In(),width:0,height:0,offsetLeft:0,offsetTop:0});dE.displayName="ExcalidrawAppStateContext";var mE=gr.createContext(()=>{console.warn("Uninitialized ExcalidrawSetAppStateContext context!")});mE.displayName="ExcalidrawSetAppStateContext";var pE=gr.createContext(null);pE.displayName="ExcalidrawActionManagerContext";var Os=gr.createContext(null);Os.displayName="ExcalidrawAPIContext";var ug=gr.createContext(null);ug.displayName="ExcalidrawAPISetContext";var Ke=()=>Xn(jk),Sr=()=>Xn(qk),Me=()=>Xn(lE),Ut=()=>Qi(Me()),at=()=>Xn(sE),vi=()=>Xn(cE),jr=()=>Xn(dE),Ie=()=>Xn(mE),je=()=>Xn(pE),iu=()=>Xn(Os),Ud=!1,Gd=0,Wd=null,Yn=!1,Kn=!1,cg=!1,Vd={horizontal:null,vertical:null},Yi=0,Yd=!1,nE=new Map,jN=4,dg=!1,mg=0,Zk=!1,Ns=null,Le={pointers:new Map,lastCenter:null,initialDistance:null,initialScale:null},$k,aE=class e extends gr.Component{constructor(t){super(t);C(this,"canvas");C(this,"interactiveCanvas",null);C(this,"rc");C(this,"unmounted",!1);C(this,"actionManager");C(this,"editorInterface",iE);C(this,"stylesPanelMode",Qi(iE));C(this,"excalidrawContainerRef",gr.createRef());C(this,"scene");C(this,"fonts");C(this,"renderer");C(this,"visibleElements");C(this,"hasRenderableElements",!1);C(this,"resizeObserver");C(this,"library");C(this,"libraryItemsFromStorage");C(this,"id");C(this,"store");C(this,"history");C(this,"excalidrawContainerValue");C(this,"files",{});C(this,"imageCache",new Map);C(this,"iFrameRefs",new Map);C(this,"embedsValidationStatus",new Map);C(this,"initializedEmbeds",new Set);C(this,"elementsPendingErasure",new Set);C(this,"_initialized",!1);C(this,"editorLifecycleEvents",new Iy($N));C(this,"onEvent",this.editorLifecycleEvents.on.bind(this.editorLifecycleEvents));C(this,"appStateObserver",new sg(()=>this.state));C(this,"onStateChange",this.appStateObserver.onStateChange);C(this,"bucketFill",new vh(this));C(this,"flowchart",new Ih(this));C(this,"cursor",new wh(this));C(this,"arrowText",new yh(this));C(this,"viewport",new kh(this,{getContainer:()=>this.excalidrawContainerRef.current,getStylesPanelMode:()=>this.stylesPanelMode,isGestureActive:()=>Le.pointers.size>=2||Kn}));C(this,"bindModeHandler",null);C(this,"textWysiwygSubmitHandler",null);C(this,"hitLinkElement");C(this,"lastPointerDownEvent",null);C(this,"lastPointerUpEvent",null);C(this,"lastPointerUpIsDoubleClick",!1);C(this,"lastPointerMoveEvent",null);C(this,"lastPointerMoveCoords",null);C(this,"lastCompletedCanvasClicks",[]);C(this,"previousPointerMoveCoords",null);C(this,"drawShape",new Ch(this));C(this,"laserTrails",new mh(this));C(this,"eraserTrail",new uh(this));C(this,"lassoTrail",new ph(this));C(this,"cursorHints",new lg(this));C(this,"onChangeEmitter",new Xo);C(this,"onPointerDownEmitter",new Xo);C(this,"onPointerUpEmitter",new Xo);C(this,"onUserFollowEmitter",new Xo);C(this,"onScrollChangeEmitter",new Xo);C(this,"missingPointerEventCleanupEmitter",new Xo);C(this,"onRemoveEventListenersEmitter",new Xo);C(this,"api");C(this,"isToolSupported",(t,r=this.props)=>{if(r.UIOptions.tools?.[t]===!1)return!1;if(this.isInteractionEnabled(r))return!0;let n=typeof r.interaction=="object"&&r.interaction!==null?r.interaction.enabled?.tools:void 0;return t==="laser"?n?.laser===!0:t==="custom"?n?.custom===!0:!1});C(this,"updateEditorAtom",(t,...r)=>{let n=St.set(t,...r);return this.triggerRender(),n});C(this,"previousHoveredBindableElement",null);C(this,"getEffectiveGridSize",()=>Oi(this)?this.state.gridSize:null);C(this,"getTextCreationGridPoint",(t,r)=>{let n=this.getEffectiveGridSize();if(n===null)return null;let i=a=>Math.floor(a/n)*n;return{x:i(t),y:i(r)}});C(this,"handleIframeLikeElementHover",({hitElement:t,scenePointer:r,moveEvent:n})=>t&&Ja(t)&&(this.state.viewModeEnabled||this.state.activeTool.type==="laser"||this.isIframeLikeElementCenter(t,n,r.x,r.y))?(this.cursor.set(Oe.POINTER),this.setState({activeEmbeddable:{element:t,state:"hover"}}),!0):(this.state.activeEmbeddable?.state==="hover"&&this.setState({activeEmbeddable:null}),!1));C(this,"isDoubleClick",(t,r)=>t!=null&&r.timeStamp-t.timeStamp<=_g);C(this,"updateEmbedValidationStatus",(t,r)=>{this.embedsValidationStatus.set(t.id,r),qo.delete(t)});C(this,"updateEmbeddables",()=>{let t=new Set,r=!1;this.scene.getNonDeletedElements().filter(n=>{if(ao(n)){if(t.add(n.id),!this.embedsValidationStatus.has(n.id)){r=!0;let i=cl(n.link,this.props.validateEmbeddable);this.updateEmbedValidationStatus(n,i)}}else qa(n)&&t.add(n.id);return!1}),r&&this.scene.triggerUpdate(),this.iFrameRefs.forEach((n,i)=>{t.has(i)||this.iFrameRefs.delete(i)})});C(this,"getFrameNameDOMId",t=>`${this.id}-frame-name-${t.id}`);C(this,"frameNameBoundsCache",{get:t=>{let r=this.frameNameBoundsCache._cache.get(t.id);if(!r||r.zoom!==this.state.zoom.value||r.versionNonce!==t.versionNonce){let n=document.getElementById(this.getFrameNameDOMId(t));if(n){let i=n.getBoundingClientRect(),a=ze({clientX:i.x,clientY:i.y},this.state),l=ze({clientX:i.right,clientY:i.bottom},this.state);return r={x:a.x,y:a.y,width:l.x-a.x,height:l.y-a.y,zoom:this.state.zoom.value,versionNonce:t.versionNonce},this.frameNameBoundsCache._cache.set(t.id,r),r}return null}return r},_cache:new Map});C(this,"resetEditingFrame",t=>{t&&this.scene.mutateElement(t,{name:t.name?.trim()||null}),this.setState({editingFrame:null})});C(this,"renderFrameNames",()=>{if(!this.state.frameRendering.enabled||!this.state.frameRendering.name)return this.state.editingFrame&&this.resetEditingFrame(null),null;let t=this.state.theme===te.DARK,r=this.scene.getNonDeletedFramesLikes(),n=r.length>0&&this.state.searchMatches?.focusedId&&oe(this.scene.getElement(this.state.searchMatches.focusedId))?this.state.searchMatches.matches.find(i=>i.focus):null;return r.map(i=>{if(!xc(i,this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap()))return this.state.editingFrame===i.id&&this.resetEditingFrame(i),null;let{x:a,y:l}=Ot({sceneX:i.x,sceneY:i.y},this.state),s=6,c,d=Iv(i);if(i.id===this.state.editingFrame){let p=d;c=Fe("input",{autoFocus:!0,value:p,onChange:m=>{this.scene.mutateElement(i,{name:m.target.value})},onFocus:m=>m.target.select(),onBlur:()=>this.resetEditingFrame(i),onKeyDown:m=>{(m.key===I.ESCAPE||m.key===I.ENTER)&&this.resetEditingFrame(i)},style:{background:js(this.state.viewBackgroundColor,t),zIndex:2,border:"none",display:"block",padding:`${s}px`,borderRadius:4,boxShadow:"inset 0 0 0 1px var(--color-primary)",fontFamily:"Assistant",fontSize:`${Je.nameFontSize}px`,transform:`translate(-${s}px, ${s}px)`,color:t?Je.nameColorDarkTheme:Je.nameColorLightTheme,overflow:"hidden",maxWidth:`${document.body.clientWidth-a-s}px`},size:p.length+1||1,dir:"auto",autoComplete:"off",autoCapitalize:"off",autoCorrect:"off"})}else c=d;return Fe("div",{id:this.getFrameNameDOMId(i),className:qe.FRAME_NAME,style:{position:"absolute",bottom:`${this.state.height+Je.nameOffsetY-l+this.state.offsetTop}px`,left:`${a-this.state.offsetLeft}px`,zIndex:2,fontSize:Je.nameFontSize,color:t?Je.nameColorDarkTheme:Je.nameColorLightTheme,lineHeight:Je.nameLineHeight,width:"max-content",maxWidth:n?.id===i.id&&n?.focus?"none":`${i.width*this.state.zoom.value}px`,overflow:i.id===this.state.editingFrame?"visible":"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis",cursor:Oe.MOVE,pointerEvents:this.state.viewModeEnabled?Xi.disabled:Xi.enabled},onPointerDown:p=>this.handleCanvasPointerDown(p),onWheel:p=>this.handleWheel(p),onContextMenu:this.handleCanvasContextMenu,onDoubleClick:()=>{this.setState({editingFrame:i.id})},children:c},i.id)})});C(this,"focusContainer",()=>{this.excalidrawContainerRef.current?.focus()});C(this,"getSceneElementsIncludingDeleted",()=>this.scene.getElementsIncludingDeleted());C(this,"getSceneElementsMapIncludingDeleted",()=>this.scene.getElementsMapIncludingDeleted());C(this,"getSceneElements",()=>this.scene.getNonDeletedElements());C(this,"onInsertElements",t=>{this.addElementsFromPasteOrLibrary({elements:t,position:"center",files:null})});C(this,"onExportImage",async(t,r,n)=>{xe("export",t,"ui");let i=await Ca({type:t,data:{elements:r,appState:this.state,files:this.files},config:{exportBackground:this.state.exportBackground,name:this.getName(),viewBackgroundColor:this.state.viewBackgroundColor,exportingFrame:n.exportingFrame}}).catch(hm).catch(a=>{console.error(a),this.setState({errorMessage:a.message})});this.state.exportEmbedScene&&i&&tp(i)&&this.setState({fileHandle:i})});C(this,"magicGenerations",new Map);C(this,"updateMagicGeneration",({frameElement:t,data:r})=>{r.status==="pending"?this.scene.mutateElement(t,{customData:{generationData:void 0}},{informMutation:!1,isDragging:!1}):this.scene.mutateElement(t,{customData:{generationData:r}},{informMutation:!1,isDragging:!1}),this.magicGenerations.set(t.id,r),this.triggerRender()});C(this,"plugins",{});C(this,"onMagicframeToolSelect",()=>{let t=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds});if(t.length===0)this.setActiveTool({type:ut.magicframe}),xe("ai","tool-select (empty-selection)","d2c");else{let r=t.length===1&&vm(t[0])&&t[0];if(!r&&t.some(i=>oe(i)||i.frameId)){this.setActiveTool({type:ut.magicframe});return}xe("ai","tool-select (existing selection)","d2c");let n;if(r)n=r;else{let[i,a,l,s]=ye(t),c=50;n=sf({...Je,x:i-c,y:a-c,width:l-i+c*2,height:s-a+c*2,opacity:100,locked:!1}),this.insertNewElement(n);for(let d of t)this.scene.mutateElement(d,{frameId:n.id});this.setState({selectedElementIds:{[n.id]:!0}})}this.onMagicFrameGenerate(n,"upstream")}});C(this,"openEyeDropper",({type:t})=>{this.updateEditorAtom(Pn,{swapPreviewOnAlt:!0,colorPickerType:t==="stroke"?"elementStroke":"elementBackground",onSelect:(r,n)=>{let i=t==="background"&&n.altKey||t==="stroke"&&!n.altKey;!this.scene.getSelectedElements(this.state).length||this.state.activeTool.type!=="selection"?i?this.syncActionResult({appState:{...this.state,currentItemStrokeColor:r},captureUpdate:R.IMMEDIATELY}):this.syncActionResult({appState:{...this.state,currentItemBackgroundColor:r},captureUpdate:R.IMMEDIATELY}):this.updateScene({elements:this.scene.getElementsIncludingDeleted().map(l=>this.state.selectedElementIds[l.id]?se(l,{[i?"strokeColor":"backgroundColor"]:r}):l),captureUpdate:R.IMMEDIATELY})},keepOpenOnAlt:!1})});C(this,"dismissLinearEditor",()=>{setTimeout(()=>{this.state.selectedLinearElement?.isEditing&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,isEditing:!1}})})});C(this,"syncActionResult",wt(t=>{if(this.unmounted||t===!1)return;this.store.scheduleAction(t.captureUpdate);let r=!1,n=null;if(t.elements&&(this.scene.replaceAllElements(t.elements),r=!0),t.files&&(this.addMissingFiles(t.files,t.replaceFiles),this.addNewImagesToImageCache()),t.appState||n||this.state.contextMenu){let i=t?.appState?.viewModeEnabled||!1,a=t?.appState?.zenModeEnabled||!1,l=t?.appState?.theme||this.props.theme||te.LIGHT,s=t?.appState?.name??this.state.name,c=t?.appState?.errorMessage??this.state.errorMessage;if(typeof this.props.viewModeEnabled<"u"&&(i=this.props.viewModeEnabled),this.isInteractionEnabled()||(i=!0),typeof this.props.zenModeEnabled<"u"&&(a=this.props.zenModeEnabled),n=t.appState?.editingTextElement||null,t.elements&&n){let d=n.id,p=t.elements.find(m=>m.id===d);n=p&&Jo(p)&&j(p)?p:null}this.setState(d=>{let p=t.appState||{};return{...d,...p,contextMenu:null,editingTextElement:n,viewModeEnabled:i,zenModeEnabled:a,theme:l,name:s,errorMessage:c}}),r=!0}r||this.scene.triggerUpdate()}));C(this,"scheduleCapture",()=>this.store.scheduleCapture());C(this,"onBlur",wt(()=>{Yn=!1,this.setState({isBindingEnabled:this.state.bindingPreference==="enabled"})}));C(this,"onUnload",()=>{this.onBlur()});C(this,"disableEvent",t=>{t.preventDefault()});C(this,"preventBrowserZoomWheel",t=>{t[I.CTRL_OR_CMD]&&t.preventDefault()});C(this,"handleNavigationModeKeyDown",t=>{if(this.maybeHandlePageScrollKeyDown(t)){t.preventDefault();return}this.actionManager.handleKeyDown(t)});C(this,"maybeHandlePageScrollKeyDown",t=>{if(t.key!==I.PAGE_UP&&t.key!==I.PAGE_DOWN)return!1;let r=(t.shiftKey?this.state.width:this.state.height)/this.state.zoom.value;return t.key===I.PAGE_DOWN&&(r=-r),t.shiftKey?this.viewport.translate(n=>({scrollX:n.scrollX+r})):this.viewport.translate(n=>({scrollY:n.scrollY+r})),!0});C(this,"preventBrowserZoomKeyDown",t=>{t[I.CTRL_OR_CMD]&&(t.code===he.EQUAL||t.code===he.MINUS||t.code===he.ZERO||t.code===he.NUM_ADD||t.code===he.NUM_SUBTRACT||t.code===he.NUM_ZERO)&&t.preventDefault()});C(this,"terminateActiveInteraction",()=>{if(this.maybeCleanupAfterMissingPointerUp(null),Yn=!1,Kn=!1,cg=!1,Ns=null,Le.pointers.clear(),Le.lastCenter=null,Le.initialDistance=null,Le.initialScale=null,clearTimeout(Gd),Gd=0,e.resetTapTwice(),this.resetContextMenuTimer(),clearTimeout(mg),mg=0,dg=!1,this.bindModeHandler&&(clearTimeout(this.bindModeHandler),this.bindModeHandler=null),this.flowchart.clear(),St.set(Pn,null),St.set(rr,null),this.state.editingFrame){let t=this.scene.getNonDeletedElement(this.state.editingFrame);this.resetEditingFrame(t&&oe(t)?t:null)}queueMicrotask(()=>{(!this.isInteractionEnabled()||this.state.viewModeEnabled)&&this.textWysiwygSubmitHandler?.()}),this.setState({contextMenu:null,openMenu:null,openPopup:null,cursorButton:"up",bindMode:"orbit",activeEmbeddable:null,activeLockedId:null,selectedElementsAreBeingDragged:!1,selectionElement:null,resizingElement:null,isResizing:!1,isRotating:!1,isCropping:!1,croppingElementId:null,suggestedBinding:null,frameToHighlight:null,elementsToHighlight:null,snapLines:[],showHyperlinkPopup:!1}),this.deselectElements(),this.isInteractionEnabled()||(this.setState({originSnapOffset:null}),this.cursor.reset())});C(this,"handleInteractionStateChange",(t,r)=>{let n=this.isInteractionEnabled(t),i=n!==this.isInteractionEnabled(),a=t.viewModeEnabled!==this.props.viewModeEnabled,l=this.state.viewModeEnabled;this.isInteractionEnabled()?(a||i)&&(l=!!this.props.viewModeEnabled):l=!0,l!==this.state.viewModeEnabled&&this.setState({viewModeEnabled:l});let s=n&&!r.viewModeEnabled,c=this.isInteractionEnabled()&&!this.state.viewModeEnabled;(i&&!this.isInteractionEnabled()||s&&!c)&&this.terminateActiveInteraction(),i&&this.addEventListeners(),this.isLinksEnabled(t)!==this.isLinksEnabled()&&(this.isLinksEnabled()||(this.hitLinkElement=void 0,Ou(),this.cursor.reset())),this.isEmbedsEnabled(t)!==this.isEmbedsEnabled()&&(this.isEmbedsEnabled()||this.setState({activeEmbeddable:null})),this.isToolSupported(r.activeTool.type,t)!==this.isToolSupported(this.state.activeTool.type)&&(this.isToolSupported(this.state.activeTool.type)||this.laserTrails.endPath(),this.cursor.reset()),!this.isInteractionEnabled()&&!this.isToolSupported(this.state.activeTool.type)&&this.state.activeTool.type!=="selection"&&this.setState({activeTool:gt(this.state,{type:"selection"})}),(this.isBrowserZoomEnabled(t)!==this.isBrowserZoomEnabled()||this.isNavigationEnabled(t)!==this.isNavigationEnabled())&&(this.addEventListeners(),this.cursor.reset()),r.viewModeEnabled!==this.state.viewModeEnabled&&(this.isInteractionEnabled()&&this.addEventListeners(),this.state.viewModeEnabled||this.deselectElements(),this.cursor.reset())});C(this,"isSameForcedTool",(t,r)=>t?.type===r?.type&&(t?.type==="custom"?t.customType??null:null)===(r?.type==="custom"?r.customType??null:null));C(this,"handleForcedToolChange",(t,r)=>{let n=this.props.activeTool;if(!n)return;let i=!this.isSameForcedTool(t.activeTool,n);if(n.type==="image"){i&&console.warn('"image" tool cannot be forced via "props.activeTool"');return}this.isSameForcedTool(n,this.state.activeTool)||(i||r.activeTool!==this.state.activeTool||this.isToolSupported(n.type,t)!==this.isToolSupported(n.type,this.props))&&this.setActiveTool(n)});C(this,"resetHistory",()=>{this.history.clear()});C(this,"resetStore",()=>{this.store.clear()});C(this,"resetScene",wt(t=>{this.scene.replaceAllElements([]),this.setState(r=>({...In(),isLoading:t?.resetLoadingState?!1:r.isLoading,theme:this.state.theme})),this.resetStore(),this.resetHistory()}));C(this,"initializeScene",async()=>{"launchQueue"in window&&"LaunchParams"in window&&window.launchQueue.setConsumer(async s=>{if(!s.files.length)return;let c=s.files[0],d=await c.getFile();this.loadFileToCanvas(new File([d],d.name||"",{type:d.type}),c)}),this.props.theme&&this.setState({theme:this.props.theme}),this.state.isLoading||this.setState({isLoading:!0});let t=null;try{typeof this.props.initialData=="function"?t=await this.props.initialData()||null:t=await this.props.initialData||null,t?.libraryItems&&this.library.updateLibrary({libraryItems:t.libraryItems,merge:!0}).catch(s=>{console.error(s)})}catch(s){console.error(s),t={appState:{errorMessage:s.message||"Encountered an error during importing or restoring scene data"}}}let r=gl(t?.elements,null,{repairBindings:!0,deleteInvisibleElements:!0}),n=Ic(t?.appState,null),i=n.activeTool;n.preferredSelectionTool.initialized||(n.preferredSelectionTool={type:this.editorInterface.formFactor==="phone"?"lasso":"selection",initialized:!0}),n={...n,theme:this.props.theme||n.theme,openSidebar:n?.openSidebar||this.state.openSidebar,activeTool:i.type==="image"||i.type==="lasso"||i.type==="selection"?{...i,type:n.preferredSelectionTool.type}:n.activeTool,isLoading:!1,toast:this.state.toast};let a={...n,width:this.state.width,height:this.state.height,offsetTop:this.state.offsetTop,offsetLeft:this.state.offsetLeft},l=this.props.initialState?.viewport;if(l){let s=r.filter(p=>!p.isDeleted),c=ne(s),d=this.viewport.resolveInitialViewport(l,c,a);d&&(n={...n,...d})}else t?.scrollToContent&&(n={...n,...pl(r,a)});this.resetStore(),t?.scrollX!=null&&(n.scrollX=t.scrollX),t?.scrollY!=null&&(n.scrollY=t.scrollY),this.resetHistory(),this.syncActionResult({elements:r,appState:n,files:t?.files,captureUpdate:R.NEVER}),this.clearImageShapeCache(),this.fonts.loadSceneFonts().then(s=>{this.fonts.onLoaded(s)}),ca(window.location.href)&&this.viewport.setViewport({target:window.location.href,fit:"scale-down",animation:!1})});C(this,"getFormFactor",(t,r)=>this.props.UIOptions.getFormFactor?.(t,r)??Bg(t,r));C(this,"refreshEditorInterface",()=>{let t=this.excalidrawContainerRef.current;if(!t)return;let{width:r,height:n}=t.getBoundingClientRect(),i=iy(),a=zg(typeof navigator<"u"?navigator.userAgent:""),l=this.props.UIOptions.dockedSidebarBreakpoint!=null?this.props.UIOptions.dockedSidebarBreakpoint:1229,s=$a(this.editorInterface,{desktopUIMode:i??this.editorInterface.desktopUIMode,formFactor:this.getFormFactor(r,n),userAgent:a,canFitSidebar:r>l,isLandscape:r>n});this.editorInterface=s,this.reconcileStylesPanelMode(s)});C(this,"reconcileStylesPanelMode",t=>{let r=Qi(t);if(r===this.stylesPanelMode)return;let n=this.stylesPanelMode;this.stylesPanelMode=r,this.viewport.invalidateUIOffset("stylesPanel"),n!=="full"&&r==="full"&&this.setState(i=>({preferredSelectionTool:{type:"selection",initialized:!0}}))});C(this,"setDesktopUIMode",t=>{let r=ay(t);this.editorInterface=$a(this.editorInterface,{desktopUIMode:r}),this.reconcileStylesPanelMode(this.editorInterface)});C(this,"onResize",wt(()=>{this.scene.getElementsIncludingDeleted().forEach(t=>qo.delete(t)),this.refreshEditorInterface(),this.updateDOMRect(),this.setState({})}));C(this,"onFullscreenChange",()=>{!document.fullscreenElement&&this.state.activeEmbeddable?.state==="active"&&this.setState({activeEmbeddable:null})});C(this,"renderInteractiveSceneCallback",({scrollBars:t})=>{t&&(Vd=t),this.scheduleImageRefresh()});C(this,"onScroll",fn(()=>{let{offsetTop:t,offsetLeft:r}=this.getCanvasOffsets();this.setState(n=>n.offsetLeft===r&&n.offsetTop===t?null:{offsetTop:t,offsetLeft:r})},NE));C(this,"onCut",wt(t=>{!this.isInteractionEnabled()||!this.excalidrawContainerRef.current?.contains(document.activeElement)||io(t.target)||(this.actionManager.executeAction(id,"keyboard",t),t.preventDefault(),t.stopPropagation())}));C(this,"onCopy",wt(t=>{!this.isInteractionEnabled()||!this.excalidrawContainerRef.current?.contains(document.activeElement)||io(t.target)||(this.actionManager.executeAction(ka,"keyboard",t),t.preventDefault(),t.stopPropagation())}));C(this,"onTouchStart",t=>{if(this.isInteractionEnabled()){if(ry&&t.preventDefault(),!Ud){Ud=!0,t.touches.length===1&&(Wd={x:t.touches[0].clientX,y:t.touches[0].clientY}),clearTimeout(Gd),Gd=window.setTimeout(e.resetTapTwice,_g);return}if(Ud&&t.touches.length===1&&Wd){let r=t.touches[0];Uo(A(r.clientX,r.clientY),A(Wd.x,Wd.y))<=Og&&(this.lassoTrail.endPath(),this.deselectElements(),this.handleCanvasDoubleClick({clientX:r.clientX,clientY:r.clientY,type:"touch",altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1})),Ud=!1,clearTimeout(Gd)}t.touches.length===2&&this.setState({selectedElementIds:Be({},this.state),activeEmbeddable:null})}});C(this,"onTouchEnd",t=>{this.isInteractionEnabled()&&(this.resetContextMenuTimer(),t.touches.length>0?this.setState({previousSelectedElementIds:{},selectedElementIds:Be(this.state.previousSelectedElementIds,this.state)}):Le.pointers.clear())});C(this,"pasteFromClipboard",wt(async t=>{if(!this.isInteractionEnabled())return;let r=!!dg,n=document.activeElement,i=this.excalidrawContainerRef.current?.contains(n);if(t&&!i)return;let a=document.elementFromPoint(this.viewport.lastPosition.x,this.viewport.lastPosition.y);if(t&&(!(a instanceof HTMLCanvasElement)||io(n)))return;let l=await zl(t),s=l.getFiles(),c=await Eu(l,r);if(this.props.onPaste)try{if(await this.props.onPaste(c,t)===!1)return}catch(d){console.error(d)}await this.insertClipboardContent(c,s,r),this.setActiveTool({type:this.state.preferredSelectionTool.type},{keepSelection:!0}),t?.preventDefault()}));C(this,"addElementsFromPasteOrLibrary",t=>{let r=gl(t.elements,null,{deleteInvisibleElements:!0}),[n,i,a,l]=ye(r),s=ta(n,a)/2,c=ta(i,l)/2,d=typeof t.position=="object"?t.position.clientX:t.position==="cursor"?this.viewport.lastPosition.x:this.state.width/2+this.state.offsetLeft,p=typeof t.position=="object"?t.position.clientY:t.position==="cursor"?this.viewport.lastPosition.y:this.state.height/2+this.state.offsetTop,{x:m,y:u}=ze({clientX:d,clientY:p},this.state),b=m-s,f=u-c,[x,v]=Jt(b,f,this.getEffectiveGridSize()),{duplicatedElements:y}=Tn({type:"everything",elements:r.map(M=>se(M,{x:M.x+x-n,y:M.y+v-i})),randomizeSeed:!t.retainSeed,preserveFrameChildrenOrder:t.preserveFrameChildrenOrder}),E=this.scene.getElementsIncludingDeleted(),w=[...E,...y];w=this.props.onDuplicate?.(w,E)||w,Hr(w,ne(y));let S=this.getTopLayerFrameAtSceneCoords({x:m,y:u});if(S){let M=vv(y,S);w=ll(w,M,S)}this.scene.replaceAllElements(w),y.forEach(M=>{if(j(M)&&xt(M)){let N=Zo(M,this.scene.getElementsMapIncludingDeleted());It(M,N,this.scene)}}),oy&&Cn.loadElementsFonts(y).then(M=>{this.fonts.onLoaded(M)}),t.files&&this.addMissingFiles(t.files);let _=uv(y);this.store.scheduleCapture(),this.setState({...this.state,openSidebar:this.state.openSidebar&&this.editorInterface.canFitSidebar&&St.get(Sd)?this.state.openSidebar:null,...Tt({editingGroupId:null,selectedElementIds:_.reduce((M,N)=>(xt(N)||(M[N.id]=!0),M),{})},this.scene.getNonDeletedElements(),this.state,this)},()=>{t.files&&this.addNewImagesToImageCache()}),this.setActiveTool({type:this.state.preferredSelectionTool.type},{keepSelection:!0}),t.fit&&this.viewport.setViewport({target:y,fit:t.fit,animation:!1,offsets:{ui:!0}})});C(this,"setAppState",(t,r)=>{this.setState(t,r)});C(this,"removePointer",t=>{Yi&&this.resetContextMenuTimer(),t.type==="pointercancel"&&this.bucketFill.cancel();let r=Le.pointers.size>=2;Le.pointers.delete(t.pointerId),r&&Le.pointers.size<2&&this.state.scrollConstraints&&this.viewport.releaseOverscroll()});C(this,"toggleLock",(t="ui")=>{this.props.activeTool||(this.state.activeTool.locked||xe("toolbar","toggleLock",`${t} (${this.editorInterface.formFactor==="phone"?"mobile":"desktop"})`),this.setState(r=>({activeTool:{...r.activeTool,...gt(this.state,r.activeTool.locked?{type:this.state.preferredSelectionTool.type}:r.activeTool),locked:!r.activeTool.locked}})))});C(this,"updateFrameRendering",t=>{this.setState(r=>{let n=typeof t=="function"?t(r.frameRendering):t;return{frameRendering:{enabled:n?.enabled??r.frameRendering.enabled,clip:n?.clip??r.frameRendering.clip,name:n?.name??r.frameRendering.name,outline:n?.outline??r.frameRendering.outline}}})});C(this,"togglePenMode",t=>{this.setState(r=>({penMode:t??!r.penMode,penDetected:!0,currentItemStrokeVariability:r.penDetected?r.currentItemStrokeVariability:"variable"}))});C(this,"revealIfHidden",t=>{!t.length||Wm(t,this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.viewport.getOffsets())||this.viewport.setViewport({target:ye(t),fit:"scale-down",animation:{duration:300},offsets:{ui:!0}})});C(this,"maybeUnfollowRemoteUser",()=>{this.state.userToFollow&&this.setState({userToFollow:null})});C(this,"setToast",t=>{this.setState({toast:t})});C(this,"restoreFileFromShare",async()=>{try{let t=await caches.open("web-share-target"),r=await t.match("shared-file");if(r){let n=await r.blob(),i=new File([n],n.name||"",{type:n.type});this.loadFileToCanvas(i,null),await t.delete("shared-file"),window.history.replaceState(null,Vs,window.location.pathname)}}catch(t){this.setState({errorMessage:t.message})}});C(this,"addFiles",wt(t=>{let{addedFiles:r}=this.addMissingFiles(t);this.clearImageShapeCache(r),this.scene.triggerUpdate(),this.addNewImagesToImageCache()}));C(this,"addMissingFiles",(t,r=!1)=>{let n=r?{}:{...this.files},i={},a=Array.isArray(t)?t:Object.values(t);for(let l of a)if(!n[l.id]&&(i[l.id]=l,n[l.id]=l,l.mimeType===ge.svg))try{let s=Hw(pf(Uw(l.dataURL)),ge.svg);l.dataURL!==s&&(l.version=(l.version??1)+1,l.dataURL=s)}catch(s){console.error(s)}return this.files=n,{addedFiles:i}});C(this,"updateScene",wt(t=>{let{elements:r,appState:n,collaborators:i,captureUpdate:a}=t;if(a){let l=r||void 0,s=n?Zv({...this.store.snapshot.appState,...n}):void 0;this.store.scheduleMicroAction({action:a,elements:l,appState:s})}n&&this.setState(n),r&&this.scene.replaceAllElements(r),i&&(this.laserTrails.updateCollabTrails(i),this.setState({collaborators:i}))}));C(this,"applyDeltas",(t,r)=>{let n=Ec.squash(...t),i={...this.state},a=new Map(this.scene.getElementsMapIncludingDeleted());return Ec.applyTo(n,a,i,r)});C(this,"mutateElement",(t,r,n=!0)=>this.scene.mutateElement(t,r,{informMutation:n,isDragging:!1}));C(this,"triggerRender",t=>{t===!0?this.scene.triggerUpdate():this.setState({})});C(this,"toggleSidebar",({name:t,tab:r,force:n})=>{let i;n===void 0?i=this.state.openSidebar?.name===t&&this.state.openSidebar?.tab===r?null:t:i=n?t:null;let a=i?{name:i}:null;return a&&r&&(a.tab=r),this.setState({openSidebar:a}),!!i});C(this,"updateCurrentCursorPosition",wt(t=>{this.viewport.lastPosition.x=t.clientX,this.viewport.lastPosition.y=t.clientY}));C(this,"onKeyDown",wt(t=>{if(!this.isInteractionEnabled())return;if("Proxy"in window&&(!t.shiftKey&&/^[A-Z]$/.test(t.key)||t.shiftKey&&/^[a-z]$/.test(t.key))&&(t=new Proxy(t,{get(l,s){let c=l[s];return typeof c=="function"?c.bind(l):s==="key"?t.shiftKey?l.key.toUpperCase():l.key.toLowerCase():c}})),!Gg(t.target)){if((t.key===I.ESCAPE||t.key===I.ENTER)&&this.state.croppingElementId){this.finishImageCropping();return}let l=ie(this.scene.getNonDeletedElementsMap(),this.state);if(l.length===1&&et(l[0])&&t.key===I.ENTER){this.startImageCropping(l[0]);return}if(t.key===I.ESCAPE)this.updateEditorAtom(rr,null);else if(t.key===I.TAB&&(document.activeElement===this.excalidrawContainerRef?.current||document.activeElement?.classList.contains(qe.CONVERT_ELEMENT_TYPE_POPUP))){t.preventDefault();let s=Ql(l);St.get(rr)?.type==="panel"&&u0(this,{conversionType:s,direction:t.shiftKey?"left":"right"})&&this.store.scheduleCapture(),s&&this.updateEditorAtom(rr,{type:"panel"})}if(this.flowchart.handleKeyEvent(t))return}if(t[I.CTRL_OR_CMD]&&t.key===I.P&&!t.shiftKey&&!t.altKey){this.setToast({message:h("commandPalette.shortcutHint",{shortcut:tt("commandPalette")})}),t.preventDefault();return}if(t[I.CTRL_OR_CMD]&&t.key.toLowerCase()===I.V&&(dg=t.shiftKey,clearTimeout(mg),mg=window.setTimeout(()=>{dg=!1},100)),t[I.CTRL_OR_CMD]&&io(t.target)&&(t.code===he.MINUS||t.code===he.EQUAL)){t.preventDefault();return}if(io(t.target)&&t.key!==I.ESCAPE||Qn(t.key)&&Gg(t.target))return;if(t.key===I.QUESTION_MARK){this.setState({openDialog:{name:"help"}});return}else if(t.key.toLowerCase()===I.E&&t.shiftKey&&t[I.CTRL_OR_CMD]){t.preventDefault(),this.setState({openDialog:{name:"imageExport"}});return}if(this.maybeHandlePageScrollKeyDown(t)){t.preventDefault();return}if(this.state.openDialog?.name==="elementLinkSelector"||(t.key===I.ALT&&(Ko("COMPLEX_BINDINGS")?this.handleSkipBindMode():yc({app:this,event:t})),this.actionManager.handleKeyDown(t)))return;let r=this.props.viewModeEnabled===!0;if(!r&&this.state.viewModeEnabled&&t.key===I.ESCAPE){this.setActiveTool({type:"selection"});return}if(!r&&!t.ctrlKey&&!t.altKey&&!t.metaKey&&!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged){let l=sT(t.key,this,t.shiftKey);if(this.state.viewModeEnabled&&!Vg(l,["laser","hand"]))return;if(l){if(this.state.activeTool.type!==l&&xe("toolbar",l,`keyboard (${this.editorInterface.formFactor==="phone"?"mobile":"desktop"})`),l==="arrow"&&this.state.activeTool.type==="arrow"){let s=this.state.currentItemArrowType===ht.sharp?ht.round:this.state.currentItemArrowType===ht.round?ht.elbow:ht.sharp;this.setState({currentItemArrowType:s}),this.cursorHints.onArrowTypeCycled(s)}else(l==="arrow"||l==="line")&&this.cursorHints.onToolShortcut(l,/^\d$/.test(t.key)?"digit":"letter");l==="lasso"&&this.state.activeTool.type==="laser"?this.setActiveTool({type:this.state.preferredSelectionTool.type}):this.setActiveTool({type:l},{toggle:!0}),t.stopPropagation();return}else if(t.key===I.Q){this.toggleLock("keyboard"),t.stopPropagation();return}}if(this.state.viewModeEnabled)return;if(t[I.CTRL_OR_CMD]&&!t.repeat&&(Ko("COMPLEX_BINDINGS")&&this.resetDelayedBindMode(),Po(()=>{this.setState({isBindingEnabled:this.state.bindingPreference!=="enabled"})}),this.arrowText.refresh(),yc({app:this,event:t})),Qn(t.key)){let l=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0}),s=new Set;l.filter(m=>Bt(m)).filter(m=>{let u=m.startBinding&&!l.some(f=>f.id===m.startBinding?.elementId),b=m.endBinding&&!l.some(f=>f.id===m.endBinding?.elementId);return u||b}).forEach(m=>s.add(m.id)),l=l.filter(m=>!s.has(m.id));let c=this.getEffectiveGridSize()&&(t.shiftKey?Sg:this.getEffectiveGridSize())||(t.shiftKey?ME:Sg),d=0,p=0;t.key===I.ARROW_LEFT?d=-c:t.key===I.ARROW_RIGHT?d=c:t.key===I.ARROW_UP?p=-c:t.key===I.ARROW_DOWN&&(p=c),l.forEach(m=>{this.scene.mutateElement(m,{x:m.x+d,y:m.y+p},{informMutation:!1,isDragging:!1}),wo(m,this.scene,{simultaneouslyUpdated:l})}),this.scene.triggerUpdate(),t.preventDefault()}else if(t.key===I.ENTER){let l=this.scene.getSelectedElements(this.state);if(l.length===1){let s=l[0];if(t[I.CTRL_OR_CMD]||nt(s))Se(s)&&(!this.state.selectedLinearElement?.isEditing||this.state.selectedLinearElement.elementId!==s.id)&&(this.store.scheduleCapture(),Re(s)||this.actionManager.executeAction(_a));else if(j(s)||Zg(s)){let c;j(s)||(c=s);let d=Sm(s,this.scene.getNonDeletedElementsMap()),p=d.x,m=d.y;this.startTextEditing({sceneX:p,sceneY:m,container:c}),t.preventDefault();return}else oe(s)&&this.setState({editingFrame:s.id})}}if(t.key===I.SPACE&&Le.pointers.size===0&&(Yn=!0,this.cursor.set(Oe.GRAB),t.preventDefault()),(t.key===I.G||t.key===I.S)&&!t.altKey&&!t[I.CTRL_OR_CMD]){let l=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!l.length)return;t.key===I.G&&(ai(this.state.activeTool.type)||l.some(s=>ai(s.type)))&&(this.setState({openPopup:"elementBackground"}),t.stopPropagation()),t.key===I.S&&(this.setState({openPopup:"elementStroke"}),t.stopPropagation())}if(!t[I.CTRL_OR_CMD]&&t.shiftKey&&t.key.toLowerCase()===I.F){let l=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!l.length)return;(this.state.activeTool.type==="text"||l.find(s=>j(s)||we(s,this.scene.getNonDeletedElementsMap())))&&(t.preventDefault(),this.setState({openPopup:"fontFamily"}))}t[I.CTRL_OR_CMD]&&(t.key===I.BACKSPACE||t.key===I.DELETE)&&this.updateEditorAtom(La,"clearCanvas");let n=t.key.toLocaleLowerCase(),i=n===I.S&&t.shiftKey&&!t[I.CTRL_OR_CMD],a=t.key===I.I||n===I.G&&t.shiftKey;(i||a)&&this.openEyeDropper({type:i?"stroke":"background"})}));C(this,"onKeyUp",wt(t=>{if(this.isInteractionEnabled()){if(t.key===I.SPACE&&(this.state.viewModeEnabled&&this.state.activeTool.type!=="laser"||this.state.openDialog?.name==="elementLinkSelector"?this.cursor.set(Oe.GRAB):ec(this.state.activeTool.type)?this.cursor.reset():(this.cursor.applyForTool(),this.setState({selectedElementIds:Be({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})),Yn=!1),t.key===I.ALT&&yc({app:this,event:t}),(t.key===I.ALT&&this.state.bindMode==="skip"||!t[I.CTRL_OR_CMD]&&!na(this.state))&&(this.setState({bindMode:"orbit"}),this.lastPointerMoveEvent&&Ko("COMPLEX_BINDINGS"))){let r=ze({clientX:this.lastPointerMoveEvent.clientX,clientY:this.lastPointerMoveEvent.clientY},this.state),n=$o(A(r.x,r.y),this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap());if(this.state.selectedLinearElement){let i=Z.getElement(this.state.selectedLinearElement.elementId,this.scene.getNonDeletedElementsMap());Bt(i)&&this.handleDelayedBindModeChange(i,n)}}if(!t[I.CTRL_OR_CMD]){let r=this.state.bindingPreference==="enabled";this.state.isBindingEnabled!==r&&(Po(()=>{this.setState({isBindingEnabled:r})}),this.arrowText.refresh()),yc({app:this,event:t})}if(Qn(t.key)){hc(this.scene.getSelectedElements(this.state).filter(ve),this.scene,this.state);let r=this.scene.getNonDeletedElementsMap();this.scene.getSelectedElements(this.state).filter(wm).forEach(n=>{n.startBinding&&this.scene.mutateElement(n,{startBinding:{...n.startBinding,...Jg(n,r.get(n.startBinding.elementId),"start",r)}}),n.endBinding&&this.scene.mutateElement(n,{endBinding:{...n.endBinding,...Jg(n,r.get(n.endBinding.elementId),"end",r)}})}),this.setState({suggestedBinding:null})}this.flowchart.handleKeyEvent(t)}}));C(this,"setActiveTool",(t,r={})=>{let{keepSelection:n=!1}=r;if(!this.isToolSupported(t.type)){console.warn(this.isInteractionEnabled()?`"${t.type}" tool is disabled via "UIOptions.canvasActions.tools.${t.type}"`:`"${t.type}" tool cannot be activated while the editor is non-interactive (see "interaction.enabled.tools")`);return}if(this.props.activeTool&&!this.isSameForcedTool(this.props.activeTool,t)){console.warn(`"${t.type}" tool activation ignored \u2014 the active tool is controlled by the host via "props.activeTool"`);return}this.drawShape.hasPendingGesture()&&this.actionManager.executeAction(Gt);let i=Fl.includes(t.type),l=r.toggle===!0&&i&&this.state.activeTool.type===t.type?gt(this.state,{...this.state.activeTool.lastActiveTool||{type:this.state.preferredSelectionTool.type},lastActiveTool:null}):i&&this.state.activeTool.type!==t.type?gt(this.state,{...t,lastActiveTool:this.state.activeTool}):gt(this.state,t);l.type==="hand"?this.cursor.set(Oe.GRAB):Yn||this.cursor.applyForTool(l),sy(document.activeElement)&&this.focusContainer(),Ay(l.type)||this.setState({suggestedBinding:null}),l.type==="image"&&this.onImageToolbarButtonClick(),this.setState(s=>{let c={snapLines:s.snapLines.length?[]:s.snapLines,originSnapOffset:null,activeEmbeddable:null,selectedLinearElement:ec(l.type)?s.selectedLinearElement:null,frameToHighlight:null,hoveredArrowTextAnchor:null};return l.type==="freedraw"&&this.store.scheduleCapture(),l.type==="lasso"?{...s,...c,activeTool:l,...n?{}:{selectedElementIds:Be({},s),selectedGroupIds:Be({},s),editingGroupId:null,multiElement:null}}:l.type!=="selection"?{...s,...c,activeTool:l,selectedElementIds:Be({},s),selectedGroupIds:Be({},s),editingGroupId:null,multiElement:null}:{...s,...c,activeTool:l}})});C(this,"setOpenDialog",t=>{this.setState({openDialog:t})});C(this,"isTouchScreenMultiTouchGesture",()=>Le.pointers.size>=2);C(this,"getName",()=>this.state.name||this.props.name||`${h("labels.untitled")}-${Ug()}`);C(this,"onGestureStart",wt(t=>{this.isNavigationEnabled()&&(t.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({selectedElementIds:Be({},this.state),activeEmbeddable:null}),Le.initialScale=this.state.zoom.value)}));C(this,"onGestureChange",wt(t=>{if(!this.isNavigationEnabled()||(t.preventDefault(),this.isTouchScreenMultiTouchGesture()))return;let r=Le.initialScale;r&&this.viewport.translate(n=>({...pi({viewportX:this.viewport.lastPosition.x,viewportY:this.viewport.lastPosition.y,nextZoom:ui(r*t.scale)},n)}),{zoomPreConstrained:!0,preserveScrollConstraintsSnapBack:!0})}));C(this,"onGestureEnd",wt(t=>{this.isNavigationEnabled()&&(t.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({previousSelectedElementIds:{},selectedElementIds:Be(this.state.previousSelectedElementIds,this.state)}),Le.initialScale=null)}));C(this,"isHittingTextAutoResizeHandle",(t,r)=>{let n=fc(t,this.state);return!!(n&&!n.isDeleted&&!n.autoResize&&s3(r,n,this.state.zoom.value,this.editorInterface.formFactor))});C(this,"handleTextAutoResizeHandlePointerDown",(t,r)=>{let n=fc(t,this.state);return!n||!this.isHittingTextAutoResizeHandle(t,r)?!1:(this.actionManager.executeAction(N0,"ui",n),this.cursor.reset(),!0)});C(this,"startTextEditing",({sceneX:t,sceneY:r,insertAtParentCenter:n=!0,container:i,autoEdit:a=!0,initialCaretSceneCoords:l,arrowEndpoint:s})=>{let c=!1,d=s&&this.arrowText.getTextBinding(s,this.getCurrentItemStrokeWidth("text"));d&&(i=null,n=!1,t=d.anchor[0],r=d.anchor[1]);let p=n&&this.getTextWysiwygSnappedToCenterPosition(t,r,this.state,i);i&&p&&(we(i,this.scene.getNonDeletedElementsMap())||(c=!0));let m=d?null:this.getSelectedTextElement(i)||this.getTextElementAtPosition(t,r),u=m?.fontFamily||this.state.currentItemFontFamily,b=m?.lineHeight||po(u),f=this.state.currentItemFontSize;if(!m&&c&&i&&!ve(i)){let S=tl(ct({fontSize:f,fontFamily:u}),b),_=Wy(f,b),M=Math.max(i.height,_),N=Math.max(i.width,S);this.scene.mutateElement(i,{height:M,width:N}),t=i.x+N/2,r=i.y+M/2,p&&(p=this.getTextWysiwygSnappedToCenterPosition(t,r,this.state,i))}let x=this.getTextCreationGridPoint(t,r),v=d?{x:t,y:r}:p?{x:p.elementCenterX,y:p.elementCenterY}:m?{x:t,y:r}:{x:x?.x??t,y:x===null?r-ac(f,b)/2:x.y},y=this.getTopLayerFrameAtSceneCoords({x:v.x,y:v.y}),E=y&&(!c||!i||i.frameId===y.id)?y.id:null,w=m||Qt({x:v.x,y:v.y,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("text"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,text:"",fontSize:f,fontFamily:u,textAlign:d?.textAlign??(p?"center":this.state.currentItemTextAlign),verticalAlign:d?.verticalAlign??(p?Vo.MIDDLE:Mg),containerId:c?i?.id:void 0,groupIds:i?.groupIds??[],lineHeight:b,angle:i?ve(i)?0:i.angle:0,frameId:E});if(!m&&c&&i&&this.scene.mutateElement(i,{boundElements:(i.boundElements||[]).concat({type:"text",id:w.id})}),this.setState({editingTextElement:w}),!m)if(i&&c){let T=this.scene.getElementIndex(i.id);this.scene.insertElementsAtIndex([w],T+1)}else this.insertNewElement(w);s&&d&&this.arrowText.bindText(s,w,d.fixedPoint),a||m||i?this.handleTextWysiwyg(w,{isExistingElement:!!m,initialCaretSceneCoords:m?l:null}):this.setState({newElement:w,multiElement:null})});C(this,"startImageCropping",t=>{this.store.scheduleCapture(),this.setState({croppingElementId:t.id})});C(this,"finishImageCropping",()=>{this.state.croppingElementId&&(this.store.scheduleCapture(),this.setState({croppingElementId:null}))});C(this,"shouldHandleBrowserCanvasDoubleClick",t=>{if(t==="touch"||this.lastCompletedCanvasClicks.length===0)return!0;if(this.lastCompletedCanvasClicks.length<2)return!1;let[r,n]=this.lastCompletedCanvasClicks;return Uo(A(r.x,r.y),A(n.x,n.y))<=Og});C(this,"handleCanvasDoubleClick",t=>{if(!this.isInteractionEnabled()||this.state.editingTextElement||!this.shouldHandleBrowserCanvasDoubleClick(t.type)||this.state.multiElement||this.state.activeTool.type!==this.state.preferredSelectionTool.type&&this.state.activeTool.type!=="autoshape")return;let r=this.scene.getSelectedElements(this.state),{x:n,y:i}=ze(t,this.state);if(r.length===1&&Se(r[0])){let l=r[0];if((t[I.CTRL_OR_CMD]&&wm(l)||nt(l))&&(!this.state.selectedLinearElement?.isEditing||this.state.selectedLinearElement.elementId!==l.id)){this.actionManager.executeAction(_a);return}else if(this.state.selectedLinearElement&&Re(r[0])){let s=Z.getSegmentMidpointHitCoords(this.state.selectedLinearElement,{x:n,y:i},this.state,this.scene.getNonDeletedElementsMap()),c=s?Z.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,s,this.scene.getNonDeletedElementsMap()):-1;if(c&&c>-1){this.store.scheduleCapture(),Z.deleteFixedSegment(r[0],this.scene,c);let d=Z.getSegmentMidpointHitCoords({...this.state.selectedLinearElement,segmentMidPointHoveredCoords:null},{x:n,y:i},this.state,this.scene.getNonDeletedElementsMap()),p=d?Z.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,d,this.scene.getNonDeletedElementsMap()):null;this.setState({selectedLinearElement:{...this.state.selectedLinearElement,initialState:{...this.state.selectedLinearElement.initialState,segmentMidpoint:{index:p,value:s,added:!1}},segmentMidPointHoveredCoords:d}});return}}else if(this.state.selectedLinearElement?.isEditing&&this.state.selectedLinearElement.elementId===l.id&&nt(l))return}if(r.length===1&&et(r[0])){this.startImageCropping(r[0]);return}if(this.cursor.reset(),wr(this.state).length>0){let l=this.getElementAtPosition(n,i),s=l&&dv(l,this.state.selectedGroupIds);if(s){this.store.scheduleCapture(),this.setState(c=>({...c,...Tt({editingGroupId:s,selectedElementIds:{[l.id]:!0}},this.scene.getNonDeletedElements(),c,this)}));return}}if(this.cursor.reset(),!this.state.viewModeEnabled){let l=this.getElementAtPosition(n,i);if(Ja(l)){this.setState({activeEmbeddable:{element:l,state:"active"}});return}if(!this.state.selectedLinearElement?.isEditing){let s=!t[I.CTRL_OR_CMD]&&this.getTextBindableContainerAtPosition(n,i);if(s&&(this.state.activeTool.type==="autoshape"||zt(s)||!hn(s.backgroundColor)||li({point:A(n,i),element:s,elementsMap:this.scene.getNonDeletedElementsMap(),threshold:this.getElementHitThreshold(s)}))){let c=Sm(s,this.scene.getNonDeletedElementsMap());n=c.x,i=c.y}this.startTextEditing({sceneX:n,sceneY:i,insertAtParentCenter:!t.altKey,container:s||null})}}});C(this,"handleCanvasClick",t=>{if(this.isInteractionEnabled()){if(t.button!==Go.MAIN){this.lastCompletedCanvasClicks=[];return}this.lastCompletedCanvasClicks=[...this.lastCompletedCanvasClicks.slice(-1),{x:t.clientX,y:t.clientY}]}});C(this,"getElementLinkAtPosition",(t,r)=>{if(r&&r.locked)return;let n=this.scene.getNonDeletedElements(),i=-1;for(let a=n.length-1;a>=0;a--){let l=n[a];if(r&&l.id===r.id&&(i=a),l.link&&a>=i&&Jm(l,this.scene.getNonDeletedElementsMap(),this.state,A(t.x,t.y),this.editorInterface.formFactor==="phone"))return l}});C(this,"handleElementLinkClick",t=>{let r=Uo(A(this.lastPointerDownEvent.clientX,this.lastPointerDownEvent.clientY),A(this.lastPointerUpEvent.clientX,this.lastPointerUpEvent.clientY));if(!this.hitLinkElement||r>Ya)return;let n=ze(this.lastPointerDownEvent,this.state),i=this.scene.getNonDeletedElementsMap(),a=Jm(this.hitLinkElement,i,this.state,A(n.x,n.y),this.editorInterface.formFactor==="phone"),l=ze(this.lastPointerUpEvent,this.state),s=Jm(this.hitLinkElement,i,this.state,A(l.x,l.y),this.editorInterface.formFactor==="phone");if(a&&s){Ou();let c=this.hitLinkElement.link;if(c){c=vr(c);let d;if(this.props.onLinkOpen&&(d=fm("excalidraw-link",t.nativeEvent),this.props.onLinkOpen({...this.hitLinkElement,link:c},d)),!d?.defaultPrevented){let p=Em(c)?"_self":"_blank",m=window.open(void 0,p);m&&(m.opener=null,m.location=c)}}}});C(this,"applyElementLinkHoverAffordance",()=>this.hitLinkElement&&!this.state.selectedElementIds[this.hitLinkElement.id]?(this.cursor.set(Oe.POINTER),aC(this.hitLinkElement,this.state,this.scene.getNonDeletedElementsMap()),!0):(Ou(),!1));C(this,"maybeHandleElementLinkClick",(t,r)=>{if(this.editorInterface.isTouchScreen){let n=this.getElementAtPosition(r.x,r.y,{includeLockedElements:!0});this.hitLinkElement=this.getElementLinkAtPosition(r,n)}return this.hitLinkElement&&this.lastPointerDownEvent&&!this.state.selectedElementIds[this.hitLinkElement.id]?(this.handleElementLinkClick(t),!0):!1});C(this,"handleInteractiveContentPointerMove",t=>{let r=ze(t,this.state),n=this.getElementAtPosition(r.x,r.y,{includeLockedElements:!0});if(this.isEmbedsEnabled()){let i=n?.locked?null:n;if(this.handleIframeLikeElementHover({hitElement:i,scenePointer:r,moveEvent:t}))return}this.hitLinkElement=this.isLinksEnabled()?this.getElementLinkAtPosition(r,n):void 0,this.applyElementLinkHoverAffordance()||this.cursor.reset()});C(this,"handleInteractiveContentPointerUp",t=>{if(this.lastPointerUpEvent=t,this.isEmbedsEnabled()&&this.handleIframeLikeCenterClick())return;let r=ze(t,this.state);this.isLinksEnabled()&&this.maybeHandleElementLinkClick(t,r)||this.state.activeEmbeddable?.state==="active"&&this.setState({activeEmbeddable:null})});C(this,"getTopLayerFrameAtSceneCoords",(t,r)=>{let n=this.scene.getNonDeletedElementsMap(),i=this.scene.getNonDeletedFramesLikes().filter(s=>!s.locked&&of(t,s,n));if(!i.length)return null;let a=i.at(-1),l=this.getElementsAtPosition(t.x,t.y,{includeLockedElements:!0}).findLast(s=>!r?.excludeElementIds?.[s.id]);if(l){if(oe(l)&&!l.locked)return a;let s=this.scene.getElementIndex(l.id),c=this.scene.getElementIndex(a.id);if(s!==-1&&c!==-1&&s<=c)return a;let d=r?.currentFrameId?i.find(p=>p.id===r.currentFrameId)??null:null;return d||(l.frameId?i.find(p=>p.id===l.frameId)??null:null)}return a});C(this,"updateFrameToHighlight",t=>{this.state.frameToHighlight!==t&&this.setState({frameToHighlight:t})});C(this,"maybeUpdateFrameToHighlightOnPointerMove",(t,r)=>{this.state.newElement||this.state.multiElement||this.state.selectionElement||this.state.selectedElementsAreBeingDragged||this.updateFrameToHighlight(!r&&Ny(this.state.activeTool.type)?this.getTopLayerFrameAtSceneCoords(t):null)});C(this,"insertNewElements",t=>{if(!t.length)return;let r=[];for(let n of t){let i=r[r.length-1];i?.[0].frameId===n.frameId?i.push(n):r.push([n])}for(let n of r){let i=n[0].frameId,a=i?Om(this.scene.getElementsIncludingDeleted(),i):null;this.scene.insertElementsAtIndex(n,a)}});C(this,"insertNewElement",t=>{this.insertNewElements([t]);let r=t.frameId?this.scene.getNonDeletedElement(t.frameId):null;this.updateFrameToHighlight(r&&oe(r)?r:null)});C(this,"handleCanvasPointerMove",t=>{if(!this.isInteractionEnabled()){this.isToolSupported(this.state.activeTool.type)&&this.savePointer(t.clientX,t.clientY,this.state.cursorButton),this.isNavigationEnabled()&&this.updateMultiTouchGesture(t),(this.isLinksEnabled()||this.isEmbedsEnabled())&&!Kn&&this.handleInteractiveContentPointerMove(t);return}this.savePointer(t.clientX,t.clientY,this.state.cursorButton),this.lastPointerMoveEvent=t.nativeEvent;let r=ze(t,this.state),{x:n,y:i}=r;if(this.lastPointerMoveCoords={x:n,y:i},this.updateMultiTouchGesture(t),Yn||Kn||cg||vc(this.state))return;let l=Y0(Vd,t.clientX-this.state.offsetLeft,t.clientY-this.state.offsetTop).isOverEither;if(!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.multiElement&&(l?this.cursor.set(Oe.AUTO):this.cursor.applyForTool()),this.maybeUpdateFrameToHighlightOnPointerMove({x:n,y:i},l),!this.state.newElement&&a3(this.state.activeTool.type)){let{originOffset:f,snapLines:x}=i3(this.scene.getNonDeletedElements(),this,{x:n,y:i},t,this.scene.getNonDeletedElementsMap());this.setState(v=>{let y=ja(v.snapLines,x),E=v.originSnapOffset?ja(v.originSnapOffset,f):f;return v.snapLines===y&&v.originSnapOffset===E?null:{snapLines:y,originSnapOffset:E}})}else!this.state.newElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.selectionElement&&this.setState(f=>f.snapLines.length?{snapLines:[]}:null);if(this.state.selectedLinearElement?.isEditing&&!this.state.selectedLinearElement.isDragging){let f=this.state.newElement?null:Z.handlePointerMoveInEditMode(t,n,i,this);f&&f!==this.state.selectedLinearElement&&Po(()=>{this.setState({selectedLinearElement:f})})}if(Ly(this.state.activeTool.type)){let{newElement:f}=this.state;if(!f&&na(this.state)){let x=A(n,i),v=this.scene.getNonDeletedElementsMap(),y=$o(x,this.scene.getNonDeletedElements(),v,si(this.state.zoom));y?this.setState({suggestedBinding:{element:y,midPoint:Im(x,y,v,this.state.zoom)}}):this.state.suggestedBinding&&this.setState({suggestedBinding:null})}}if(this.state.multiElement&&this.state.selectedLinearElement){let{multiElement:f,selectedLinearElement:x}=this.state,{x:v,y,points:E}=f,w=E[E.length-1],{lastCommittedPoint:T}=x;if(this.cursor.applyForTool(),w===T)Uo(A(n-v,i-y),w)>=em?(this.store.scheduleCapture(),Po(()=>{Qe(this.state.selectedLinearElement?.initialState,"initialState must be set"),this.setState({selectedLinearElement:{...this.state.selectedLinearElement,lastCommittedPoint:E[E.length-1],selectedPointsIndices:[f.points.length],initialState:{...this.state.selectedLinearElement.initialState,lastClickedPoint:f.points.length}}})}),this.scene.mutateElement(f,{points:[...E,A(n-v,i-y)]},{informMutation:!1,isDragging:!1})):this.cursor.set(Oe.POINTER);else if(E.length>2&&T&&Uo(A(n-v,i-y),T)<em){this.cursor.set(Oe.POINTER),this.scene.mutateElement(f,{points:E.slice(0,-1)},{informMutation:!1,isDragging:!1});let S=f.points.length-1;this.setState({selectedLinearElement:{...x,selectedPointsIndices:x.selectedPointsIndices?[...new Set(x.selectedPointsIndices.map(_=>Math.min(_,S)))]:x.selectedPointsIndices,lastCommittedPoint:f.points[S],initialState:{...x.initialState,lastClickedPoint:S}}})}else{rc(E,this.state.zoom.value)&&this.cursor.set(Oe.POINTER);let S=this.scene.getNonDeletedElementsMap();if(wm(f)){let M=$o(A(n,i),this.scene.getNonDeletedElements(),S);Ko("COMPLEX_BINDINGS")&&this.handleDelayedBindModeChange(f,M)}Qe(this.state.selectedLinearElement,"Expected selectedLinearElement to be set to operate on a linear element");let _=Z.handlePointerMove(t.nativeEvent,this,n,i,this.state.selectedLinearElement);_&&this.setState(_)}return}if(this.state.activeTool.type==="arrow"&&!this.state.newElement){let f=A(n,i),x=$o(f,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),si(this.state.zoom)),v=this.scene.getNonDeletedElementsMap();x&&!pc(f,x,v)&&this.setState({suggestedBinding:{element:x,midPoint:Im(f,x,v,this.state.zoom)}})}let s=!!t.buttons,c=this.state.activeTool.type==="laser";if(s||!c&&this.state.activeTool.type!=="selection"&&this.state.activeTool.type!=="lasso"&&this.state.activeTool.type!=="text"&&this.state.activeTool.type!=="eraser")return;let d=this.scene.getNonDeletedElements(),p=this.scene.getSelectedElements(this.state);if(this.isHittingTextAutoResizeHandle(p,r)){this.cursor.set(Oe.POINTER);return}if(p.length===1&&!l&&!this.state.selectedLinearElement?.isEditing){if(this.state.selectedLinearElement&&this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,n,i),(!this.state.selectedLinearElement||this.state.selectedLinearElement.hoverPointIndex===-1)&&this.state.openDialog?.name!=="elementLinkSelector"&&!(p.length===1&&Re(p[0]))&&!(Se(p[0])&&(this.editorInterface.userAgent.isMobileDevice||p[0].points.length===2))){let f=hf(d,this.state,n,i,this.state.zoom,t.pointerType,this.scene.getNonDeletedElementsMap(),this.editorInterface);if(f&&f.transformHandleType){this.cursor.set(ff(f));return}}}else if(p.length>1&&!l&&this.state.openDialog?.name!=="elementLinkSelector"){let f=gf(ye(p),n,i,this.state.zoom,t.pointerType,this.editorInterface);if(f){this.cursor.set(ff({transformHandleType:f}));return}}if(Qo(this.state))return;let m=this.getElementAtPosition(n,i,{preferSelected:!0,includeLockedElements:!0}),u=null;m&&m.locked?u=null:u=m;let b=this.arrowText.updateHoveredAnchor(r);if(this.handleIframeLikeElementHover({hitElement:u,scenePointer:r,moveEvent:t})||(this.hitLinkElement=this.getElementLinkAtPosition(r,m)),!this.applyElementLinkHoverAffordance()){if(c)return;u&&(u.link||ao(u))&&this.state.selectedElementIds[u.id]&&!this.state.contextMenu&&!this.state.showHyperlinkPopup?this.setState({showHyperlinkPopup:"info"}):this.state.activeTool.type==="text"?this.cursor.set(b?Oe.POINTER:j(u)?Oe.TEXT:Oe.CROSSHAIR):!t[I.CTRL_OR_CMD]&&this.isHittingCommonBoundingBoxOfSelectedElements(r,p)?this.cursor.set(Oe.MOVE):this.state.viewModeEnabled?this.cursor.set(Oe.GRAB):this.state.openDialog?.name==="elementLinkSelector"?this.cursor.set(Oe.AUTO):l?this.cursor.set(Oe.AUTO):!t[I.CTRL_OR_CMD]&&u?.id!==this.state.editingTextElement?.id?(u||this.isHittingCommonBoundingBoxOfSelectedElements(r,p))&&!u?.locked&&(!u||!Re(u)||!(u.startBinding||u.endBinding))&&(this.state.activeTool.type!=="lasso"||p.length>0)&&this.cursor.set(Oe.MOVE):this.cursor.set(Oe.AUTO),this.state.selectedLinearElement&&this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,n,i)}this.state.openDialog?.name==="elementLinkSelector"&&u?this.setState(f=>({hoveredElementIds:ja(f.hoveredElementIds,Tt({editingGroupId:f.editingGroupId,selectedElementIds:{[u.id]:!0}},this.scene.getNonDeletedElements(),f,this).selectedElementIds)})):this.state.openDialog?.name==="elementLinkSelector"&&!u&&this.setState(f=>({hoveredElementIds:ja(f.hoveredElementIds,{})}))});C(this,"handleEraser",(t,r)=>{let n=this.eraserTrail.addPointToPath(r.x,r.y,t.altKey);this.elementsPendingErasure=new Set(n),this.triggerRender()});C(this,"handleTouchMove",t=>{this.isInteractionEnabled()&&(Yd=!0)});C(this,"handleCanvasPointerDown",t=>{if(!this.isInteractionEnabled()&&!this.isToolSupported(this.state.activeTool.type)){(this.isLinksEnabled()||this.isEmbedsEnabled())&&(this.lastPointerDownEvent=t),this.isNavigationEnabled()&&(this.updateGestureOnPointerDown(t),Kn||this.handleCanvasPanUsingWheelOrSpaceDrag(t));return}let r=this.scene.getSelectedElements(this.state);if(!t.ctrlKey){let f=this.state.bindingPreference==="enabled";this.state.isBindingEnabled!==f&&this.setState({isBindingEnabled:f})}let n=ze(t,this.state),{x:i,y:a}=n;this.lastPointerMoveCoords={x:i,y:a};let l=t.target;if(l.setPointerCapture&&l.setPointerCapture(t.pointerId),this.maybeCleanupAfterMissingPointerUp(t.nativeEvent),this.maybeUnfollowRemoteUser(),this.state.searchMatches&&(this.setState(f=>({searchMatches:f.searchMatches&&{focusedId:null,matches:f.searchMatches.matches.map(x=>({...x,focus:!1}))}})),this.updateEditorAtom(Cx,null)),St.get(rr)&&this.updateEditorAtom(rr,null),this.state.contextMenu&&this.setState({contextMenu:null}),this.state.snapLines&&this.setAppState({snapLines:[]}),this.state.openPopup&&this.setState({openPopup:null}),this.updateGestureOnPointerDown(t),t.pointerType==="touch"&&this.state.newElement&&this.state.newElement.type==="freedraw"){let f=this.state.newElement;this.updateScene({...f.points.length<10?{elements:this.scene.getElementsIncludingDeleted().filter(x=>x.id!==f.id)}:{},appState:{newElement:null,editingTextElement:null,suggestedBinding:null,selectedElementIds:Be(Object.keys(this.state.selectedElementIds).filter(x=>x!==f.id).reduce((x,v)=>(x[v]=this.state.selectedElementIds[v],x),{}),this.state)},captureUpdate:this.state.openDialog?.name==="elementLinkSelector"?R.EVENTUALLY:R.NEVER});return}let s=document.getSelection();if(s?.anchorNode&&s.removeAllRanges(),this.maybeOpenContextMenuAfterPointerDownOnTouchDevices(t),!this.state.penDetected&&t.pointerType==="pen"&&this.setState(f=>({penMode:!0,penDetected:!0,currentItemStrokeVariability:"variable"})),!this.editorInterface.isTouchScreen&&["pen","touch"].includes(t.pointerType)&&(this.editorInterface=$a(this.editorInterface,{isTouchScreen:!0})),Kn||(this.lastPointerDownEvent=t,this.handleCanvasPanUsingWheelOrSpaceDrag(t)))return;if(this.setState({lastPointerDownWith:t.pointerType,cursorButton:"down"}),this.savePointer(t.clientX,t.clientY,"down"),t.button===Go.ERASER&&this.isInteractionEnabled()&&!this.props.activeTool&&this.state.activeTool.type!==ut.eraser){this.setState({activeTool:gt(this.state,{type:ut.eraser,lastActiveTool:this.state.activeTool})},()=>{this.handleCanvasPointerDown(t);let f=()=>{x(),v?.(),Qo(this.state)&&this.setState({activeTool:gt(this.state,{...this.state.activeTool.lastActiveTool||{type:ut.selection},lastActiveTool:null})})},x=_e(window,"pointerup",f,{once:!0}),v;requestAnimationFrame(()=>{v=this.missingPointerEventCleanupEmitter.once(f)})});return}if(t.button!==Go.MAIN&&t.button!==Go.TOUCH&&t.button!==Go.ERASER||Le.pointers.size>1)return;let c=this.initialPointerDownState(t);if(this.setState({selectedElementsAreBeingDragged:!1}),this.handleTextAutoResizeHandlePointerDown(r,c.origin)||this.handleDraggingScrollBar(t,c)||(this.clearSelectionIfNotUsingSelection(),this.handleSelectionOnPointerDown(t,c))||!(!this.state.penMode||t.pointerType!=="touch"||this.state.activeTool.type==="selection"||this.state.activeTool.type==="lasso"||this.state.activeTool.type==="text"||this.state.activeTool.type==="image"))return;if(this.state.activeTool.type==="lasso"){let f=c.hit.element&&this.isASelectedElement(c.hit.element);(t.altKey&&t[I.CTRL_OR_CMD]&&!c.resize.handleType||!c.hit.hasHitCommonBoundingBoxOfSelectedElements&&!c.resize.handleType&&!f)&&(this.lassoTrail.hasCurrentTrail||this.lassoTrail.startPath(c.origin.x,c.origin.y,t.shiftKey),c.drag.blockDragging=this.editorInterface.formFactor==="desktop"),this.editorInterface.formFactor!=="desktop"&&c.hit.element&&!f&&(this.setState(y=>{let E={...y.selectedElementIds,[c.hit.element.id]:!0},w=[];Object.keys(y.selectedElementIds).forEach(S=>{let _=this.scene.getElement(S);_&&w.push(_)});let T=c.hit.element;if(oe(T))jo(w,T.id).forEach(S=>{delete E[S.id]});else if(T.frameId)E[T.frameId]&&delete E[T.id];else{let S=T.groupIds,_=new Set(S.flatMap(M=>He(this.scene.getNonDeletedElements(),M)).filter(M=>oe(M)).map(M=>M.id));_.size>0&&w.forEach(M=>{M.frameId&&_.has(M.frameId)&&(delete E[M.id],M.groupIds.flatMap(N=>He(this.scene.getNonDeletedElements(),N)).forEach(N=>{delete E[N.id]}))})}return{...Tt({editingGroupId:y.editingGroupId,selectedElementIds:E},this.scene.getNonDeletedElements(),y,this),showHyperlinkPopup:T.link||ao(T)?"info":!1}}),c.hit.wasAddedToSelection=!0)}else this.state.activeTool.type==="text"?this.handleTextOnPointerDown(t,c):this.state.activeTool.type==="arrow"||this.state.activeTool.type==="line"?this.handleLinearElementOnPointerDown(t,this.state.activeTool.type,c):this.state.activeTool.type==="freedraw"?this.handleFreeDrawElementOnPointerDown(t,this.state.activeTool.type,c):this.state.activeTool.type==="custom"?this.cursor.applyForTool():this.state.activeTool.type===ut.frame||this.state.activeTool.type===ut.magicframe?this.createFrameElementOnPointerDown(c,this.state.activeTool.type):this.state.activeTool.type==="laser"?this.laserTrails.startPath(c.lastCoords.x,c.lastCoords.y):this.state.activeTool.type==="autoshape"?this.drawShape.handlePointerDown(c):this.state.activeTool.type===ut.bucketfill?this.bucketFill.handlePointerDown(n):this.state.activeTool.type!=="eraser"&&this.state.activeTool.type!=="hand"&&this.state.activeTool.type!=="image"&&this.createGenericElementOnPointerDown(this.state.activeTool.type,c);this.props?.onPointerDown?.(this.state.activeTool,c),this.onPointerDownEmitter.trigger(this.state.activeTool,c,t),this.state.activeTool.type==="eraser"&&this.eraserTrail.startPath(c.lastCoords.x,c.lastCoords.y);let p=this.onPointerMoveFromPointerDownHandler(c),m=this.onPointerUpFromPointerDownHandler(c),u=this.onKeyDownFromPointerDownHandler(c),b=this.onKeyUpFromPointerDownHandler(c);this.missingPointerEventCleanupEmitter.once(f=>m(f||t.nativeEvent)),(!this.state.viewModeEnabled||this.isActiveToolPointerCapturing())&&(window.addEventListener("pointermove",p),window.addEventListener("pointerup",m),window.addEventListener("keydown",u),window.addEventListener("keyup",b),c.eventListeners.onMove=p,c.eventListeners.onUp=m,c.eventListeners.onKeyUp=b,c.eventListeners.onKeyDown=u)});C(this,"handleCanvasPointerUp",t=>{if(!this.isInteractionEnabled()){(this.isLinksEnabled()||this.isEmbedsEnabled())&&this.handleInteractiveContentPointerUp(t);return}if(Ko("COMPLEX_BINDINGS")&&this.resetDelayedBindMode(),this.removePointer(t),this.lastPointerUpIsDoubleClick=this.isDoubleClick(this.lastPointerUpEvent,t),this.lastPointerUpEvent=t,!t.ctrlKey){let a=this.state.bindingPreference==="enabled";this.state.isBindingEnabled!==a&&this.setState({isBindingEnabled:a})}let r=ze({clientX:t.clientX,clientY:t.clientY},this.state),{x:n,y:i}=r;this.lastPointerMoveCoords={x:n,y:i},!this.handleIframeLikeCenterClick()&&!this.maybeHandleElementLinkClick(t,r)&&this.state.viewModeEnabled&&this.setState({activeEmbeddable:null,selectedElementIds:{}})});C(this,"maybeOpenContextMenuAfterPointerDownOnTouchDevices",t=>{t.pointerType==="touch"&&(Yd=!1,Yi?Yd=!0:Yi=window.setTimeout(()=>{Yi=0,Yd||this.handleCanvasContextMenu(t)},RE))});C(this,"resetContextMenuTimer",()=>{clearTimeout(Yi),Yi=0,Yd=!1});C(this,"maybeCleanupAfterMissingPointerUp",t=>{Ns?.(),this.missingPointerEventCleanupEmitter.trigger(t).clear()});C(this,"handleCanvasPanUsingWheelOrSpaceDrag",t=>{if(!(Le.pointers.size<=1&&((t.button===Go.WHEEL||t.button===Go.MAIN&&Yn||vc(this.state))&&(this.isInteractionEnabled()||this.isNavigationEnabled())||this.state.viewModeEnabled&&!this.isActiveToolPointerCapturing())))return!1;Kn=!0,this.focusContainer(),this.state.editingTextElement||t.preventDefault();let r=!1,n=typeof window===void 0?!1:/Linux/.test(window.navigator.platform);this.cursor.set(Oe.GRABBING);let{clientX:i,clientY:a}=t,l=ch(c=>{let d=i-c.clientX,p=a-c.clientY;if(i=c.clientX,a=c.clientY,n&&!r&&(Math.abs(d)>1||Math.abs(p)>1)){r=!0;let m=b=>{document.body.removeEventListener("paste",m),b.stopPropagation()},u=()=>{setTimeout(()=>{document.body.removeEventListener("paste",m),window.removeEventListener("pointerup",u)},100)};document.body.addEventListener("paste",m),window.addEventListener("pointerup",u)}this.viewport.translate({scrollX:this.state.scrollX-d/this.state.zoom.value,scrollY:this.state.scrollY-p/this.state.zoom.value})}),s=wt(Ns=()=>{Ns=null,Kn=!1,Yn||this.cursor.reset(),this.setState({cursorButton:"up"},this.viewport.releaseOverscroll),this.savePointer(t.clientX,t.clientY,"up"),window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",s),window.removeEventListener("blur",s),l.flush()});return window.addEventListener("blur",s),window.addEventListener("pointermove",l,{passive:!0}),window.addEventListener("pointerup",s),!0});C(this,"updateMultiTouchGesture",t=>{Le.pointers.has(t.pointerId)&&Le.pointers.set(t.pointerId,{x:t.clientX,y:t.clientY});let r=Le.initialScale;if(Le.pointers.size===2&&Le.lastCenter&&r&&Le.initialDistance){let n=F0(Le.pointers),i=n.x-Le.lastCenter.x,a=n.y-Le.lastCenter.y;Le.lastCenter=n;let l=B0(Array.from(Le.pointers.values())),s=this.state.activeTool.type==="freedraw"&&this.state.penMode?1:l/Le.initialDistance,c=s?ui(r*s):this.state.zoom.value;this.setState(d=>{let p=pi({viewportX:n.x,viewportY:n.y,nextZoom:c},d),m=p.zoom.value;return this.viewport.translate({zoom:p.zoom,scrollX:p.scrollX+2*i/m,scrollY:p.scrollY+2*a/m,shouldCacheIgnoreZoom:!0},{zoomPreConstrained:!0}),null}),this.viewport.isLockedTransitionPending||this.resetShouldCacheIgnoreZoomDebounced()}else Le.lastCenter=Le.initialDistance=Le.initialScale=null});C(this,"clearSelectionIfNotUsingSelection",()=>{ec(this.state.activeTool.type)||this.setState({selectedElementIds:Be({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})});C(this,"handleSelectionOnPointerDown",(t,r)=>{if(ec(this.state.activeTool.type)){let n=this.scene.getNonDeletedElements(),i=this.scene.getNonDeletedElementsMap(),a=this.scene.getSelectedElements(this.state);if(a.length===1&&!this.state.selectedLinearElement?.isEditing&&!Re(a[0])&&!(Se(a[0])&&(this.editorInterface.userAgent.isMobileDevice||a[0].points.length===2))&&!(this.state.selectedLinearElement&&this.state.selectedLinearElement.hoverPointIndex!==-1)){let l=hf(n,this.state,r.origin.x,r.origin.y,this.state.zoom,t.pointerType,this.scene.getNonDeletedElementsMap(),this.editorInterface);l!=null&&(l.transformHandleType==="rotation"?(this.setState({resizingElement:l.element}),r.resize.handleType=l.transformHandleType):(this.state.croppingElementId||this.setState({resizingElement:l.element}),r.resize.handleType=l.transformHandleType))}else a.length>1&&(r.resize.handleType=gf(ye(a),r.origin.x,r.origin.y,this.state.zoom,t.pointerType,this.editorInterface));if(r.resize.handleType)r.resize.isResizing=!0,r.resize.offset=um(bw(r.resize.handleType,a,i,r.origin.x,r.origin.y)),a.length===1&&Se(a[0])&&a[0].points.length===2&&(r.resize.arrowDirection=xw(r.resize.handleType,a[0]));else{if(this.state.selectedLinearElement){let m=this.state.selectedLinearElement,u=Z.handlePointerDown(t,this,this.store,r.origin,m,this.scene);if(u.hitElement&&(r.hit.element=u.hitElement),u.linearElementEditor&&this.setState({selectedLinearElement:u.linearElementEditor}),u.didAddPoint)return!0;let b=this.scene.getNonDeletedElementsMap(),f=Z.getElement(m.elementId,b);if(f&&Bt(f)){let{hitFocusPoint:x,pointerOffset:v,arrowOtherEndpointInitialBinding:y}=dw(f,r,b,this.state);if(x)return this.setState({selectedLinearElement:{...m,hoveredFocusPointBinding:x,draggedFocusPointBinding:x,pointerOffset:v,initialState:{...m.initialState,arrowOtherEndpointInitialBinding:y}}}),!1}}let l=this.getElementsAtPosition(r.origin.x,r.origin.y,{includeLockedElements:!0}),s=l.filter(m=>!m.locked),c=this.getElementAtPosition(r.origin.x,r.origin.y,{allHitElements:l});if((!c||c.id!==this.state.activeLockedId)&&this.setState({activeLockedId:null}),c&&c.locked&&!s.some(m=>this.state.selectedElementIds[m.id])?r.hit.element=null:r.hit.element=r.hit.element??this.getElementAtPosition(r.origin.x,r.origin.y),this.hitLinkElement=this.getElementLinkAtPosition(r.origin,c),this.hitLinkElement)return!0;if(this.state.croppingElementId&&r.hit.element?.id!==this.state.croppingElementId&&this.finishImageCropping(),r.hit.element&&this.getElementLinkAtPosition({x:r.origin.x,y:r.origin.y},r.hit.element))return!1;r.hit.allHitElements=s;let d=r.hit.element,p=r.hit.allHitElements.some(m=>this.isASelectedElement(m));if((d===null||!p)&&!t.shiftKey&&!r.hit.hasHitCommonBoundingBoxOfSelectedElements&&(!this.state.selectedLinearElement?.isEditing||d&&d?.id!==this.state.selectedLinearElement?.elementId)&&this.clearSelection(d),this.state.selectedLinearElement?.isEditing)this.setState(m=>({selectedLinearElement:m.selectedLinearElement?{...m.selectedLinearElement,isEditing:!!d&&d.id===this.state.selectedLinearElement?.elementId}:null,selectedElementIds:m.selectedLinearElement?Be({[m.selectedLinearElement.elementId]:!0},this.state):Be({},m)}));else if(d!=null){if(t[I.CTRL_OR_CMD])return t.altKey?(this.state.openDialog?.name==="elementLinkSelector"&&this.setOpenDialog(null),this.lassoTrail.startPath(r.origin.x,r.origin.y,t.shiftKey),this.setActiveTool({type:"lasso",fromSelection:!0}),!1):(this.state.selectedElementIds[d.id]||(r.hit.wasAddedToSelection=!0),this.setState(m=>({...cv(m,d),previousSelectedElementIds:this.state.selectedElementIds})),!1);this.state.selectedElementIds[d.id]||(this.state.editingGroupId&&!nl(d,this.state.editingGroupId)&&this.setState({selectedElementIds:Be({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null}),!p&&!r.hit.hasHitCommonBoundingBoxOfSelectedElements&&(this.setState(m=>{let u={...m.selectedElementIds,[d.id]:!0},b=[];if(Object.keys(m.selectedElementIds).forEach(f=>{let x=this.scene.getElement(f);x&&b.push(x)}),oe(d))jo(b,d.id).forEach(f=>{delete u[f.id]});else if(d.frameId)u[d.frameId]&&delete u[d.id];else{let f=d.groupIds,x=new Set(f.flatMap(v=>He(this.scene.getNonDeletedElements(),v)).filter(v=>oe(v)).map(v=>v.id));x.size>0&&b.forEach(v=>{v.frameId&&x.has(v.frameId)&&(delete u[v.id],v.groupIds.flatMap(y=>He(this.scene.getNonDeletedElements(),y)).forEach(y=>{delete u[y.id]}))})}return m.openDialog?.name==="elementLinkSelector"&&(d.groupIds.some(f=>m.selectedGroupIds[f])||(u={[d.id]:!0})),{...Tt({editingGroupId:m.editingGroupId,selectedElementIds:u},this.scene.getNonDeletedElements(),m,this),showHyperlinkPopup:d.link||ao(d)?"info":!1}}),r.hit.wasAddedToSelection=!0))}this.setState({previousSelectedElementIds:this.state.selectedElementIds})}}return!1});C(this,"handleTextOnPointerDown",(t,r)=>{if(this.state.editingTextElement)return;let n=r.origin.x,i=r.origin.y;this.setState({hoveredArrowTextAnchor:null});let a=this.arrowText.getBindableEndpointAtPosition(n,i);if(a)this.startTextEditing({sceneX:n,sceneY:i,autoEdit:!1,arrowEndpoint:a});else{let l=this.getElementAtPosition(n,i,{includeBoundTextElement:!0}),s=this.getTextBindableContainerAtPosition(n,i);zt(l)&&(s=l,n=l.x+l.width/2,i=l.y+l.height/2),this.startTextEditing({sceneX:n,sceneY:i,insertAtParentCenter:!t.altKey,container:s,autoEdit:!1,initialCaretSceneCoords:{x:n,y:i}})}this.isToolLocked()?this.cursor.reset():this.setState({activeTool:gt(this.state,{type:this.state.preferredSelectionTool.type})},()=>this.cursor.reset())});C(this,"handleFreeDrawElementOnPointerDown",(t,r,n)=>{let[i,a]=Jt(n.origin.x,n.origin.y,null),l=this.getTopLayerFrameAtSceneCoords({x:i,y:a}),s=t.pressure===.5,c=this.state.currentItemStrokeVariability,d=Fv({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("freedraw"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:null,simulatePressure:s,strokeOptions:{variability:c,streamline:t.pointerType!=="mouse"?VE:WE},locked:!1,frameId:l?l.id:null,points:[A(0,0)],pressures:s?[]:[t.pressure]});this.insertNewElement(d),this.setState(p=>{let m={...p.selectedElementIds};return delete m[d.id],{selectedElementIds:Be(m,p)}}),this.setState({newElement:d,suggestedBinding:null})});C(this,"insertIframeElement",({sceneX:t,sceneY:r,width:n,height:i})=>{let[a,l]=Jt(t,r,this.lastPointerDownEvent?.[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),s=Rv({type:"iframe",x:a,y:l,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("iframe"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("iframe"),opacity:this.state.currentItemOpacity,locked:!1,width:n,height:i});return this.insertNewElement(s),s});C(this,"insertEmbeddableElement",({sceneX:t,sceneY:r,link:n})=>{let[i,a]=Jt(t,r,this.lastPointerDownEvent?.[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=da(n);if(!l)return;l.error instanceof URIError&&this.setToast({message:h("toast.unrecognizedLinkFormat"),closable:!0});let s=lf({type:"embeddable",x:i,y:a,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("embeddable"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("embeddable"),opacity:this.state.currentItemOpacity,locked:!1,width:l.intrinsicSize.w,height:l.intrinsicSize.h,link:n});return this.insertNewElement(s),s});C(this,"newImagePlaceholder",({sceneX:t,sceneY:r,addToFrameUnderCursor:n=!0})=>{let[i,a]=Jt(t,r,this.lastPointerDownEvent?.[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=n?this.getTopLayerFrameAtSceneCoords({x:i,y:a}):null,s=100/this.state.zoom.value;return Bv({type:"image",strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("image"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:null,opacity:this.state.currentItemOpacity,locked:!1,frameId:l?l.id:null,x:i-s/2,y:a-s/2,width:s,height:s})});C(this,"handleLinearElementOnPointerDown",(t,r,n)=>{if(t.ctrlKey&&Po(()=>{this.setState({isBindingEnabled:this.state.bindingPreference!=="enabled"})}),this.state.multiElement){let{multiElement:i,selectedLinearElement:a}=this.state;if(Qe(a,"selectedLinearElement is expected to be set"),i.type==="line"&&rc(i.points,this.state.zoom.value)){Po(()=>{this.setState({selectedLinearElement:{...a,lastCommittedPoint:i.points[i.points.length-1],initialState:{...a.initialState,lastClickedPoint:-1}}})}),this.actionManager.executeAction(Gt);return}if(Re(i)&&i.points.length>1){this.actionManager.executeAction(Gt,"ui",{event:t.nativeEvent,sceneCoords:{x:n.origin.x,y:n.origin.y}});return}let{x:l,y:s}=i,{lastCommittedPoint:c}=a,d=ze(t,this.state),{start:p,end:m}=Bt(i)&&na(this.state)?iv(i,new Map([[i.points.length-1,{point:i.points[i.points.length-1],isDragging:!1}]]),d.x,d.y,this.scene.getNonDeletedElementsMap(),this.scene.getNonDeletedElements(),this.state,{newArrow:!!this.state.newElement,zoom:this.state.zoom}):{end:{mode:void 0}},u=this.scene.getNonDeletedElementsMap(),b=p?.mode!=null&&m.mode!=null&&p.element.id===m.element.id&&!pc(m.focusPoint,m.element,u),f=m.mode==="orbit"&&i.startBinding?.elementId!==m.element?.id,x=c&&Uo(A(n.origin.x-l,n.origin.y-s),c)<em;if(f||b||i.points.length>1&&x){this.actionManager.executeAction(Gt,"ui",{event:t.nativeEvent,sceneCoords:{x:n.origin.x,y:n.origin.y}});return}this.setState(v=>({selectedElementIds:Be({...v.selectedElementIds,[i.id]:!0},v)})),this.cursor.set(Oe.POINTER)}else{let[i,a]=Jt(n.origin.x,n.origin.y,t[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=this.getTopLayerFrameAtSceneCoords({x:i,y:a}),{currentItemStartArrowhead:s,currentItemEndArrowhead:c}=this.state,[d,p]=r==="arrow"?[s,c]:[null,null],m=r==="arrow"?mi({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth(r),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemArrowType===ht.round?{type:Mt.PROPORTIONAL_RADIUS}:null,startArrowhead:d,endArrowhead:p,locked:!1,frameId:l?l.id:null,elbowed:this.state.currentItemArrowType===ht.elbow,fixedSegments:this.state.currentItemArrowType===ht.elbow?[]:null}):eo({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth(r),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemRoundness==="round"?{type:Mt.PROPORTIONAL_RADIUS}:null,locked:!1,frameId:l?l.id:null}),u=A(n.origin.x,n.origin.y),b=this.scene.getNonDeletedElementsMap(),f=na(this.state)?$o(u,this.scene.getNonDeletedElements(),b):null;this.scene.mutateElement(m,{points:[A(0,0),A(0,0)]}),this.insertNewElement(m),Bt(m)&&uc(m,new Map([[0,{point:A(0,0),isDragging:!1}]]),u[0],u[1],this.scene,this.state,{newArrow:!0,altKey:t.altKey,initialBinding:!0,angleLocked:ei(t.nativeEvent)}),Po(()=>{this.setState(x=>{let v=null,y=x.selectedElementIds;if(Se(m)){v=new Z(m,this.scene.getNonDeletedElementsMap());let E=m.points.length-1;v={...v,selectedPointsIndices:[E],initialState:{...v.initialState,arrowStartIsInside:t.altKey,lastClickedPoint:E,origin:A(n.origin.x,n.origin.y)}}}return y=this.isToolLocked()?x.selectedElementIds:Be({[m.id]:!0},x),{...x,bindMode:"orbit",newElement:m,suggestedBinding:f&&Bt(m)?{element:f,midPoint:Im(u,f,b,this.state.zoom)}:null,selectedElementIds:y,selectedLinearElement:v}})}),Bt(m)&&Ko("COMPLEX_BINDINGS")&&this.handleDelayedBindModeChange(m,f)}});C(this,"createGenericElementOnPointerDown",(t,r)=>{let[n,i]=Jt(r.origin.x,r.origin.y,this.lastPointerDownEvent?.[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),a=this.getTopLayerFrameAtSceneCoords({x:n,y:i}),l={x:n,y:i,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth(t),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.getCurrentItemRoundness(t),locked:!1,frameId:a?a.id:null},s;t==="embeddable"?s=lf({type:"embeddable",...l}):s=Co({type:t,...l}),s.type==="selection"?this.setState({selectionElement:s}):(this.insertNewElement(s),this.setState({multiElement:null,newElement:s}))});C(this,"createFrameElementOnPointerDown",(t,r)=>{let[n,i]=Jt(t.origin.x,t.origin.y,this.lastPointerDownEvent?.[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),a={x:n,y:i,opacity:this.state.currentItemOpacity,locked:!1,...Je},l=r===ut.magicframe?sf(a):Vm(a);this.insertNewElement(l),this.setState({multiElement:null,newElement:l})});C(this,"restoreReadyToEraseElements",()=>{this.elementsPendingErasure=new Set,this.triggerRender()});C(this,"eraseElements",()=>{let t=!1;this.elementsPendingErasure.forEach(n=>{let i=this.scene.getElement(n);if(Bt(i)){if(i.startBinding){let a=this.scene.getElement(i.startBinding.elementId);lo(a,this.scene.getElementsMapIncludingDeleted(),{boundElements:a.boundElements.filter(l=>l.id!==i.id)})}if(i.endBinding){let a=this.scene.getElement(i.endBinding.elementId);lo(a,this.scene.getElementsMapIncludingDeleted(),{boundElements:a.boundElements.filter(l=>l.id!==i.id)})}}else oa(i)&&i.boundElements?.forEach(a=>{if(a.type==="arrow"){let l=this.scene.getElement(a.id);l?.startBinding?.elementId===i.id&&lo(l,this.scene.getElementsMapIncludingDeleted(),{startBinding:null}),l?.endBinding?.elementId===i.id&&lo(l,this.scene.getElementsMapIncludingDeleted(),{endBinding:null})}})});let r=this.scene.getElementsIncludingDeleted().map(n=>this.elementsPendingErasure.has(n.id)||n.frameId&&this.elementsPendingErasure.has(n.frameId)||xt(n)&&this.elementsPendingErasure.has(n.containerId)?(t=!0,se(n,{isDeleted:!0})):n);this.elementsPendingErasure=new Set,t&&(this.store.scheduleCapture(),this.scene.replaceAllElements(r))});C(this,"initializeImage",async(t,r)=>{if(!If(r))throw new Error(h("errors.unsupportedFileType"));let n=r.type;if(this.cursor.set("wait"),n===ge.svg)try{r=Af(pf(await r.text()),r.name)}catch(s){throw console.warn(s),new Error(h("errors.svgImageInsertError"))}let i=await(this.props.generateIdForFile?.(r)||zw(r));if(!i)throw console.warn("Couldn't generate file id or the supplied `generateIdForFile` didn't resolve to one."),new Error(h("errors.imageInsertError"));if(!this.files[i]?.dataURL){let{maxWidthOrHeight:s,maxFileSizeBytes:c}=this.props.imageOptions;try{r=await rp(r,{maxWidthOrHeight:s})}catch(d){console.error("Error trying to resizing image file on insertion",d)}if(r.size>c)throw new Error(h("errors.fileTooBig",{maxSize:`${Math.trunc(c/1024/1024)}MB`}))}let l=this.files[i]?.dataURL||await Mf(r);return new Promise(async(s,c)=>{try{let d=this.getLatestInitializedImageElement(t,i);if(this.addMissingFiles([{mimeType:n,id:i,dataURL:l,created:Date.now(),lastRetrieved:Date.now()}]),!this.imageCache.get(i)){this.addNewImagesToImageCache();let{erroredFiles:m}=await this.updateImageCache([d]);if(m.size)throw new Error("Image cache update resulted with an error.")}let p=await this.imageCache.get(i)?.image;if(p&&this.state.newElement?.id!==d.id){d=this.getLatestInitializedImageElement(t,i);let m=this.getImageNaturalDimensions(d,p);Object.assign(d,m)}s(d)}catch(d){console.error(d),c(new Error(h("errors.imageInsertError")))}})});C(this,"getLatestInitializedImageElement",(t,r)=>{let n=this.scene.getElement(t.id)??t;return se(n,{fileId:r})});C(this,"onImageToolbarButtonClick",async()=>{try{let t=this.state.width/2+this.state.offsetLeft,r=this.state.height/2+this.state.offsetTop,{x:n,y:i}=ze({clientX:t,clientY:r},this.state),a=await jm({description:"Image",extensions:Object.keys(Ks),multiple:!0});this.insertImages(a,n,i)}catch(t){t.name!=="AbortError"?console.error(t):console.warn(t),this.setState({newElement:null,activeTool:gt(this.state,{type:this.state.preferredSelectionTool.type})},()=>{this.actionManager.executeAction(Gt)})}});C(this,"getImageNaturalDimensions",(t,r)=>{let n=Math.max(this.state.height-120,160),i=Math.min(n,Math.floor(this.state.height*.5)/this.state.zoom.value),a=Math.min(r.naturalHeight,i),l=a*(r.naturalWidth/r.naturalHeight),s=t.x+t.width/2-l/2,c=t.y+t.height/2-a/2;return{x:s,y:c,width:l,height:a,crop:null}});C(this,"updateImageCache",async(t,r=this.files)=>{let{updatedFiles:n,erroredFiles:i}=await uw({imageCache:this.imageCache,fileIds:t.map(a=>a.fileId),files:r});return i.size&&(this.store.scheduleAction(R.NEVER),this.scene.replaceAllElements(this.scene.getElementsIncludingDeleted().map(a=>ri(a)&&i.has(a.fileId)?se(a,{status:"error"}):a))),{updatedFiles:n,erroredFiles:i}});C(this,"addNewImagesToImageCache",async(t=hw(this.scene.getNonDeletedElements()),r=this.files)=>{let n=t.filter(i=>!i.isDeleted&&!this.imageCache.has(i.fileId));if(n.length){let{updatedFiles:i}=await this.updateImageCache(n,r);if(i.size)for(let a of n)i.has(a.fileId)&&qo.delete(a);i.size&&this.scene.triggerUpdate()}});C(this,"scheduleImageRefresh",KN(()=>{this.addNewImagesToImageCache()},DE));C(this,"handleInteractiveCanvasRef",t=>{t!==null?(this.interactiveCanvas=t,this.cursor.reset(),this.interactiveCanvas.addEventListener("touchstart",this.onTouchStart,{passive:!1}),this.interactiveCanvas.addEventListener("touchend",this.onTouchEnd)):(this.interactiveCanvas?.removeEventListener("touchstart",this.onTouchStart),this.interactiveCanvas?.removeEventListener("touchend",this.onTouchEnd))});C(this,"insertImages",async(t,r,n)=>{let i=50/this.state.zoom.value,a=uf(t.map(()=>this.newImagePlaceholder({sceneX:r,sceneY:n})),r,n,i);this.insertNewElements(a);let l=await Promise.all(a.map(async(m,u)=>{try{return await this.initializeImage(m,await kc(t[u]))}catch(b){return this.setState({errorMessage:b.message||h("errors.imageInsertError")}),se(m,{isDeleted:!0})}})),s=ne(l),c=uf(l.filter(m=>!m.isDeleted),r,n,i),d=ne(c),p=this.scene.getElementsIncludingDeleted().map(m=>d.get(m.id)??s.get(m.id)??m);this.updateScene({appState:{selectedElementIds:Be(Object.fromEntries(c.map(m=>[m.id,!0])),this.state)},elements:p,captureUpdate:R.IMMEDIATELY}),this.setState({},()=>{this.actionManager.executeAction(Gt)})});C(this,"handleAppOnDrop",async t=>{if(!this.isInteractionEnabled())return;let{x:r,y:n}=ze(t,this.state),i=await zl(t),a=i.getFiles();if(a.length===1){let{file:p,fileHandle:m}=a[0];if(p&&(p.type===ge.png||p.type===ge.svg))try{let u=await op(p,this.state,this.scene.getElementsIncludingDeleted(),m);this.syncActionResult({...u,appState:{...u.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:R.IMMEDIATELY});return}catch(u){if(u.name!=="EncodingError")throw new Error(h("alerts.couldNotLoadInvalidFile"))}}let l=a.map(p=>p.file).filter(p=>If(p));if(l.length>0&&this.isToolSupported("image"))return this.insertImages(l,r,n);let s=i.getData(ge.excalidrawlibIds),c=i.getData(ge.excalidrawlib);if(s||c){try{let p=null;if(s){let{itemIds:m}=JSON.parse(s);p=(await this.library.getLatestLibrary()).filter(b=>m.includes(b.id))}else c&&(p=Bw(c));p?.length&&(p=p.map(m=>({...m,elements:Tn({type:"everything",elements:m.elements,randomizeSeed:!0,preserveFrameChildrenOrder:!0}).duplicatedElements})),this.addElementsFromPasteOrLibrary({elements:ns(p),position:t,files:null}))}catch(p){this.setState({errorMessage:p.message})}return}if(a.length>0){let{file:p,fileHandle:m}=a[0];p&&await this.loadFileToCanvas(p,m)}let d=i.findByType(ge.text);if(d){let p=d.value;if(p&&cl(p,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(p)||da(p)?.type==="video")){let m=this.insertEmbeddableElement({sceneX:r,sceneY:n,link:vr(p)});m&&(this.store.scheduleCapture(),this.setState({selectedElementIds:{[m.id]:!0}}))}}});C(this,"loadFileToCanvas",async(t,r)=>{t=await kc(t);try{let n=this.scene.getElementsIncludingDeleted(),i;try{i=await Sf(t,this.state,n,r)}catch(a){let l=a instanceof kw;if(l&&a.code==="IMAGE_NOT_CONTAINS_SCENE_DATA"&&!this.isToolSupported("image")){this.setState({isLoading:!1,errorMessage:h("errors.imageToolNotSupported")});return}let s=l?h("alerts.cannotRestoreFromImage"):h("alerts.couldNotLoadInvalidFile");this.setState({isLoading:!1,errorMessage:s})}if(!i)return;i.type===ge.excalidraw?(al(n.concat(i.data.elements)),this.store.scheduleMicroAction({action:R.NEVER,elements:n,appState:void 0}),this.setState({isLoading:!0}),this.syncActionResult({...i.data,appState:{...i.data.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:R.IMMEDIATELY})):i.type===ge.excalidrawlib&&await this.library.updateLibrary({libraryItems:t,merge:!0,openLibraryMenu:!0}).catch(a=>{console.error(a),this.setState({errorMessage:h("errors.importLibraryError")})})}catch(n){this.setState({isLoading:!1,errorMessage:n.message})}});C(this,"handleCanvasContextMenu",t=>{if(t.preventDefault(),!this.isInteractionEnabled()||(this.bucketFill.cancel(),("pointerType"in t.nativeEvent&&t.nativeEvent.pointerType==="touch"||"pointerType"in t.nativeEvent&&t.nativeEvent.pointerType==="pen"&&t.button!==Go.SECONDARY)&&this.state.activeTool.type!==this.state.preferredSelectionTool.type))return;let{x:r,y:n}=ze(t,this.state),i=this.getElementAtPosition(r,n,{preferSelected:!0,includeLockedElements:!0}),a=this.scene.getSelectedElements(this.state),l=this.isHittingCommonBoundingBoxOfSelectedElements({x:r,y:n},a),s=i||l?"element":"canvas",c=this.excalidrawContainerRef.current,{top:d,left:p}=c.getBoundingClientRect(),m=t.clientX-p,u=t.clientY-d;xe("contextMenu","openContextMenu",s),this.setState({...i&&!this.state.selectedElementIds[i.id]?{...this.state,...Tt({editingGroupId:this.state.editingGroupId,selectedElementIds:{[i.id]:!0}},this.scene.getNonDeletedElements(),this.state,this),selectedLinearElement:Se(i)?new Z(i,this.scene.getNonDeletedElementsMap()):null}:this.state,showHyperlinkPopup:!1},()=>{this.setState({contextMenu:{top:u,left:m,items:this.getContextMenuItems(s)}})})});C(this,"maybeDragNewGenericElement",(t,r,n=!0)=>{let i=this.state.selectionElement,a=t.lastCoords;if(i&&t.boxSelection.hasOccurred&&this.state.activeTool.type!=="eraser"){df({newElement:i,elementType:this.state.activeTool.type,originX:t.origin.x,originY:t.origin.y,x:a.x,y:a.y,width:ta(t.origin.x,a.x),height:ta(t.origin.y,a.y),shouldMaintainAspectRatio:Za(r),shouldResizeFromCenter:!1,scene:this.scene,zoom:this.state.zoom.value,informMutation:!1});return}let l=this.state.newElement;if(!l||this.arrowText.maybeDragNewText(l,a))return;let[s,c]=Jt(a.x,a.y,r[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),d=ri(l)&&this.imageCache.get(l.fileId)?.image,p=d&&!(d instanceof Promise)?d.width/d.height:null;this.maybeCacheReferenceSnapPoints(r,[l]);let{snapOffset:m,snapLines:u}=n3(l,this,r,{x:t.originInGrid.x+(this.state.originSnapOffset?.x??0),y:t.originInGrid.y+(this.state.originSnapOffset?.y??0)},{x:s-t.originInGrid.x,y:c-t.originInGrid.y},this.scene.getNonDeletedElementsMap());s+=m.x,c+=m.y,this.setState({snapLines:u}),Bt(l)||df({newElement:l,elementType:this.state.activeTool.type,originX:t.originInGrid.x,originY:t.originInGrid.y,x:s,y:c,width:ta(t.originInGrid.x,s),height:ta(t.originInGrid.y,c),shouldMaintainAspectRatio:et(l)?!Za(r):Za(r),shouldResizeFromCenter:Hg(r),zoom:this.state.zoom.value,scene:this.scene,widthAspectRatio:p,originOffset:this.state.originSnapOffset,informMutation:n}),this.setState({newElement:l}),(this.state.activeTool.type===ut.frame||this.state.activeTool.type===ut.magicframe)&&this.setState({elementsToHighlight:To(this.scene.getNonDeletedElements(),l,this.state,this.scene.getNonDeletedElementsMap())})});C(this,"maybeHandleCrop",(t,r)=>{if(!this.state.croppingElementId)return!1;let n=t.resize.handleType,i=t.lastCoords,[a,l]=Jt(i.x-t.resize.offset.x,i.y-t.resize.offset.y,r[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),s=this.scene.getNonDeletedElementsMap().get(this.state.croppingElementId);if(n&&s&&et(s)){let c=t.originalElements.get(s.id),d=ri(s)&&this.imageCache.get(s.fileId)?.image;if(c&&et(c)&&d&&!(d instanceof Promise)){let[p,m]=Jt(i.x,i.y,r[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),u={x:p-t.originInGrid.x,y:m-t.originInGrid.y};this.maybeCacheReferenceSnapPoints(r,[s]);let{snapOffset:b,snapLines:f}=H0([s],[c],this,r,u,n);this.scene.mutateElement(s,ky(s,this.scene.getNonDeletedElementsMap(),n,d.naturalWidth,d.naturalHeight,a+b.x,l+b.y,r.shiftKey?c.width/c.height:void 0)),wo(s,this.scene),this.setState({isCropping:n&&n!=="rotation",snapLines:f})}return!0}return!1});C(this,"maybeHandleResize",(t,r)=>{let n=this.scene.getSelectedElements(this.state),i=n.filter(oe),a=t.resize.handleType;if(i.length>0&&a==="rotation"||n.length===1&&Re(n[0])||this.state.croppingElementId)return!1;this.setState({isResizing:a&&a!=="rotation",isRotating:a==="rotation",activeEmbeddable:null});let l=t.lastCoords,[s,c]=Jt(l.x-t.resize.offset.x,l.y-t.resize.offset.y,r[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),d=new Map;if(i.forEach(p=>{jo(this.scene.getNonDeletedElements(),p.id).forEach(u=>{d.set(p.id+u.id,{x:u.x-p.x,y:u.y-p.y})})}),!this.state.selectedElementsAreBeingDragged){let[p,m]=Jt(l.x,l.y,r[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),u={x:p-t.originInGrid.x,y:m-t.originInGrid.y},b=[...t.originalElements.values()];this.maybeCacheReferenceSnapPoints(r,n);let{snapOffset:f,snapLines:x}=H0(n,ie(b,this.state),this,r,u,a);s+=f.x,c+=f.y,this.setState({snapLines:x})}if(gw(t.originalElements,a,n,this.scene,ei(r),Hg(r),n.some(p=>et(p))?!Za(r):Za(r),s,c,t.resize.center.x,t.resize.center.y)){let p=new Set;return i.forEach(m=>{To(this.scene.getNonDeletedElements(),m,this.state,this.scene.getNonDeletedElementsMap()).forEach(u=>{Jo(u)?p.add(u):console.error("[NONDELETED][INVARIANT] Skipped highlighting deleted element in resizing frame")})}),this.setState({elementsToHighlight:[...p]}),!0}return!1});C(this,"getContextMenuItems",t=>{let r=[];if(r.push(ld,ad),t==="canvas")return this.state.viewModeEnabled?[...r,Ma,On,Di,Fn]:[o0,Dt,ld,ad,sd,Dt,zp,lC,Dt,Ma,Yl,Kl,Xl,On,Di,Fn];if(r.push(sd),this.state.viewModeEnabled)return[ka,...r];let n=this.editorInterface.formFactor==="desktop"?[Dt,Rp,Np,Op,Fp]:[];return[Dt,id,ka,o0,Dt,WI,VI,YI,Dt,ah,Dt,...r,Dt,Cu,Iu,Dt,Su,N0,Du,Ru,QT,ku,Dt,Lu,...n,Dt,_u,Pu,Dt,_a,Dt,$l,zu,Dt,Hp,jl,Dt,Ml]});C(this,"handleWheel",wt(t=>{if(!this.isNavigationEnabled())return;if(!(t.target instanceof HTMLCanvasElement||t.target instanceof HTMLTextAreaElement||t.target instanceof HTMLIFrameElement||t.target instanceof HTMLElement&&t.target.classList.contains(qe.FRAME_NAME))){t[I.CTRL_OR_CMD]&&t.preventDefault();return}if(t.preventDefault(),Kn)return;let{deltaX:r,deltaY:n}=t;if(t.metaKey||t.ctrlKey){let i=Math.sign(n),a=Xs*100,l=Math.abs(n),s=n;l>a&&(s=a*i);let c=this.state.zoom.value-s/100;c+=Math.log10(Math.max(1,this.state.zoom.value))*-i*Math.min(1,l/20);let d=this.state.scrollConstraints?.lockZoom?this.state.scrollConstraints.zoom:rm;c=Math.max(c,d),this.viewport.translate(m=>({...pi({viewportX:this.viewport.lastPosition.x,viewportY:this.viewport.lastPosition.y,nextZoom:ui(c)},m),shouldCacheIgnoreZoom:!0}),{zoomPreConstrained:!0,preserveScrollConstraintsSnapBack:!0})&&this.resetShouldCacheIgnoreZoomDebounced();return}if(t.shiftKey){this.viewport.translate(({zoom:i,scrollX:a})=>({scrollX:a-(n||r)/i.value}));return}this.viewport.translate(({zoom:i,scrollX:a,scrollY:l})=>({scrollX:a-r/i.value,scrollY:l-n/i.value}))}));C(this,"savePointer",(t,r,n)=>{if(!this.isInteractionEnabled()&&!this.isToolSupported(this.state.activeTool.type)||!t||!r)return;let{x:i,y:a}=ze({clientX:t,clientY:r},this.state);isNaN(i)||isNaN(a);let l={x:i,y:a,tool:this.state.activeTool.type==="laser"?"laser":"pointer"};this.props.onPointerUpdate?.({pointer:l,button:n,pointersMap:Le.pointers})});C(this,"resetShouldCacheIgnoreZoomDebounced",fn(()=>{this.unmounted||this.setState({shouldCacheIgnoreZoom:!1})},300));C(this,"updateDOMRect",t=>{if(this.excalidrawContainerRef?.current){let r=this.excalidrawContainerRef.current,{width:n,height:i,left:a,top:l}=r.getBoundingClientRect(),{width:s,height:c,offsetTop:d,offsetLeft:p}=this.state;if(n===s&&i===c&&a===p&&l===d){t&&t();return}this.setState({width:n,height:i,offsetLeft:a,offsetTop:l},()=>{t&&t()}),this.viewport.constrain()}});C(this,"refresh",()=>{this.setState({...this.getCanvasOffsets()})});C(this,"watchState",()=>{});let r=In(),{viewModeEnabled:n=!1,zenModeEnabled:i=!1,gridModeEnabled:a=!1,objectsSnapModeEnabled:l=!1,theme:s=r.theme,name:c=`${h("labels.untitled")}-${Ug()}`}=t,d=null;t.activeTool&&(t.activeTool.type==="image"?console.warn('"image" tool cannot be forced via "props.activeTool"'):this.isToolSupported(t.activeTool.type,t)?d=gt(r,t.activeTool):console.warn(`"${t.activeTool.type}" tool ("props.activeTool") cannot be activated \u2014 disabled via "UIOptions.tools", or not enabled while non-interactive (see "interaction.enabled.tools")`)),this.state={...r,theme:s,exportWithDarkMode:s===te.DARK,isLoading:!0,...this.getCanvasOffsets(),viewModeEnabled:this.isInteractionEnabled(t)?n:!0,activeTool:d??r.activeTool,zenModeEnabled:i,objectsSnapModeEnabled:l,gridModeEnabled:a??r.gridModeEnabled,name:c,width:window.innerWidth,height:window.innerHeight},this.refreshEditorInterface(),this.stylesPanelMode=Qi(this.editorInterface),this.id=ZN(),this.library=new SC(this),this.actionManager=new lh(this.syncActionResult,()=>this.state,()=>this.scene.getElementsIncludingDeleted(),this),this.scene=new cf,this.canvas=document.createElement("canvas"),this.rc=XN.canvas(this.canvas),this.renderer=new vd(this.scene),this.visibleElements=[],this.store=new Kv(this),this.history=new Ed(this.store),this.excalidrawContainerValue={container:this.excalidrawContainerRef.current,id:this.id},this.fonts=new Cn(this.scene),this.history=new Ed(this.store),this.actionManager.registerAll(Dp),this.actionManager.registerAction(XI(this.history)),this.actionManager.registerAction(ZI(this.history)),this.api=this.createExcalidrawAPI()}createExcalidrawAPI(){return{app:this,isDestroyed:!1,updateScene:this.updateScene,applyDeltas:this.applyDeltas,mutateElement:this.mutateElement,updateLibrary:this.library.updateLibrary,addFiles:this.addFiles,resetScene:this.resetScene,getSceneElementsIncludingDeleted:this.getSceneElementsIncludingDeleted,getSceneElementsMapIncludingDeleted:this.getSceneElementsMapIncludingDeleted,history:{clear:this.resetHistory},setViewport:this.viewport.setViewport,getViewportOffsets:this.viewport.getOffsets,getSceneElements:this.getSceneElements,getAppState:()=>this.state,getFiles:()=>this.files,getName:this.getName,registerAction:r=>{this.actionManager.registerAction(r)},refresh:this.refresh,setToast:this.setToast,id:this.id,setActiveTool:this.setActiveTool,setCursor:this.cursor.set,resetCursor:this.cursor.reset,getEditorInterface:()=>this.editorInterface,updateFrameRendering:this.updateFrameRendering,toggleSidebar:this.toggleSidebar,onChange:r=>this.onChangeEmitter.on(r),onIncrement:r=>this.store.onStoreIncrementEmitter.on(r),onPointerDown:r=>this.onPointerDownEmitter.on(r),onPointerUp:r=>this.onPointerUpEmitter.on(r),onScrollChange:r=>this.onScrollChangeEmitter.on(r),onUserFollow:r=>this.onUserFollowEmitter.on(r),onStateChange:this.onStateChange,onEvent:this.onEvent}}isInteractionEnabled(t=this.props){return t.interaction!==!1&&typeof t.interaction!="object"}isLinksEnabled(t=this.props){return typeof t.interaction=="object"&&t.interaction!==null?t.interaction.enabled?.links===!0||t.interaction.enabled?.interactiveContent===!0:t.interaction!==!1}isNavigationEnabled(t=this.props){return typeof t.interaction=="object"&&t.interaction!==null?t.interaction.enabled?.navigation===!0:t.interaction!==!1}isEmbedsEnabled(t=this.props){return typeof t.interaction=="object"&&t.interaction!==null?t.interaction.enabled?.embeds===!0||t.interaction.enabled?.interactiveContent===!0:t.interaction!==!1}isBrowserZoomEnabled(t=this.props){return typeof t.interaction=="object"&&t.interaction!==null?t.interaction.enabled?.browserZoom===!0:!1}isToolLocked(){return this.state.activeTool.locked||this.props.activeTool!=null}isActiveToolPointerCapturing(){return this.isInteractionEnabled()?this.state.activeTool.type==="laser":this.isToolSupported(this.state.activeTool.type)}isDefaultUIEnabled(t=this.props){return t.ui!==!1&&(typeof t.ui!="object"||t.ui===null)}isUIControlEnabled(t,r=this.props){return typeof r.ui=="object"&&r.ui!==null?r.ui.enabled?.[t]===!0:r.ui!==!1}setSessionExportThemeOverride(t){$k=t}onWindowMessage(t){if(t.origin!=="https://player.vimeo.com"&&t.origin!=="https://www.youtube.com")return;let r=null;try{r=JSON.parse(t.data)}catch{}if(r)switch(t.origin){case"https://player.vimeo.com":if(r.method==="paused"){let n=null,i=document.body.querySelectorAll("iframe.excalidraw__embeddable");if(!i)break;for(let a of i)a.contentWindow===t.source&&(n=a.contentWindow);n?.postMessage(JSON.stringify({method:r.value?"play":"pause",value:!0}),"*")}break;case"https://www.youtube.com":if(r.event==="infoDelivery"&&r.info&&r.id&&typeof r.info.playerState=="number"){let n=r.id,i=r.info.playerState;Object.values(Ys).includes(i)&&nE.set(n,i)}break}}handleSkipBindMode(){if(this.state.selectedLinearElement?.initialState&&!this.state.selectedLinearElement.initialState.arrowStartIsInside){Qe(this.lastPointerMoveCoords,"Missing last pointer move coords when changing bind skip mode for arrow start");let t=this.scene.getNonDeletedElementsMap(),r=$o(A(this.lastPointerMoveCoords.x,this.lastPointerMoveCoords.y),this.scene.getNonDeletedElements(),t),n=Z.getElement(this.state.selectedLinearElement.elementId,t);n?.startBinding&&r?.id===n.startBinding.elementId&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,initialState:{...this.state.selectedLinearElement.initialState,arrowStartIsInside:!0}}})}if(this.state.bindMode==="orbit"&&(this.bindModeHandler&&(clearTimeout(this.bindModeHandler),this.bindModeHandler=null),Po(()=>{this.setState({bindMode:"skip"})}),this.lastPointerMoveCoords&&this.state.selectedLinearElement?.selectedPointsIndices&&this.state.selectedLinearElement?.selectedPointsIndices.length)){let{x:t,y:r}=this.lastPointerMoveCoords,n=this.lastPointerMoveEvent??this.lastPointerDownEvent?.nativeEvent;Qe(n,"Last event must exist");let i=t-this.state.selectedLinearElement.pointerOffset.x,a=r-this.state.selectedLinearElement.pointerOffset.y,l=this.state.multiElement?Z.handlePointerMove(n,this,i,a,this.state.selectedLinearElement):Z.handlePointDragging(n,this,i,a,this.state.selectedLinearElement);l&&this.setState(l)}}resetDelayedBindMode(){this.bindModeHandler&&(clearTimeout(this.bindModeHandler),this.bindModeHandler=null),this.state.bindMode!=="orbit"&&setTimeout(()=>this.setState({bindMode:"orbit"}))}handleDelayedBindModeChange(t,r){if(t.isDeleted||Re(t))return;let n=()=>{if(this.bindModeHandler=null,Qe(this.lastPointerMoveCoords,"Expected lastPointerMoveCoords to be set"),!this.state.multiElement){if(!this.state.selectedLinearElement||!this.state.selectedLinearElement.selectedPointsIndices||!this.state.selectedLinearElement.selectedPointsIndices.length)return;let b=this.state.selectedLinearElement.selectedPointsIndices.includes(0),f=this.state.selectedLinearElement.selectedPointsIndices.includes(t.points.length-1);if(!b&&!f||b&&f)return}let{x:p,y:m}=this.lastPointerMoveCoords,u=$o(A(p,m),this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap());if(u&&this.state.bindMode!=="skip"){Qe(this.state.selectedLinearElement?.elementId===t.id,"The selectedLinearElement is expected to not change while a bind mode timeout is ticking");let b=this.state.selectedLinearElement.initialState.arrowStartIsInside||t.startBinding?.elementId===u.id;Po(()=>{Qe(this.state.selectedLinearElement,"this.state.selectedLinearElement must exist"),this.setState({bindMode:"inside",selectedLinearElement:{...this.state.selectedLinearElement,initialState:{...this.state.selectedLinearElement.initialState,arrowStartIsInside:b}}})});let f=this.lastPointerMoveEvent??this.lastPointerDownEvent?.nativeEvent;Qe(f,"Last event must exist");let x=p-this.state.selectedLinearElement.pointerOffset.x,v=m-this.state.selectedLinearElement.pointerOffset.y,y=this.state.multiElement?Z.handlePointerMove(f,this,x,v,this.state.selectedLinearElement):Z.handlePointDragging(f,this,x,v,this.state.selectedLinearElement);y&&this.setState(y)}},i=!1;if(this.state.selectedLinearElement?.selectedPointsIndices){let p=this.scene.getNonDeletedElementsMap(),m=this.state.selectedLinearElement.selectedPointsIndices.includes(0),u=this.state.selectedLinearElement.selectedPointsIndices.includes(t.points.length-1),b=m?r:t.startBinding&&p.get(t.startBinding.elementId),f=u?r:t.endBinding&&p.get(t.endBinding.elementId),x=b&&la(b,p),v=f&&la(f,p);i=!!(x&&v&&b.id!==f.id&&sl(x,v))}let a=this.state.selectedLinearElement?.selectedPointsIndices?.includes(0),l=this.state.selectedLinearElement?.selectedPointsIndices?.includes(t.points.length-1),s=a?"startBinding":l?"endBinding":null,c=a?"endBinding":l?"startBinding":null,d=c&&t[c]?.mode==="inside"&&t[c]?.elementId===r?.id||s&&t[s]?.mode==="inside"&&r?.id===t[s]?.elementId;s&&c&&t[s]?.mode==="inside"&&r?.id!==t[s]?.elementId&&t[c]?.elementId!==t[s]?.elementId&&this.scene.mutateElement(t,{[s]:{...t[s],mode:"orbit"}},{informMutation:!1,isDragging:!0}),!r||this.previousHoveredBindableElement&&r.id!==this.previousHoveredBindableElement.id?(this.bindModeHandler&&(clearTimeout(this.bindModeHandler),this.bindModeHandler=null),this.state.bindMode==="inside"&&Po(()=>{this.setState({bindMode:"orbit"})}),this.previousHoveredBindableElement=null):!this.bindModeHandler&&(!this.state.newElement||!t.startBinding||i)&&!d&&(this.bindModeHandler=setTimeout(n,Jn)),this.previousHoveredBindableElement=r}cacheEmbeddableRef(t,r){r&&this.iFrameRefs.set(t.id,r)}getHTMLIFrameElement(t){return this.iFrameRefs.get(t.id)}handleIframeLikeCenterClick(){if(!this.lastPointerDownEvent||!this.lastPointerUpEvent||this.lastPointerDownEvent.button!==Go.MAIN||Yn||!Vg(this.state.activeTool.type,["laser","selection","lasso"]))return!1;let t=A(ze({clientX:this.lastPointerDownEvent.clientX,clientY:this.lastPointerDownEvent.clientY},this.state)),r=A(ze({clientX:this.lastPointerUpEvent.clientX,clientY:this.lastPointerUpEvent.clientY},this.state));if(Uo(t,r)>Ya)return!1;let i=this.getElementAtPosition(t[0],t[1]);if(!(i&&this.lastPointerUpEvent.timeStamp-this.lastPointerDownEvent.timeStamp<=300&&Le.pointers.size<2&&Ja(i)&&(this.state.viewModeEnabled||this.state.activeTool.type==="laser"||this.isIframeLikeElementCenter(i,this.lastPointerUpEvent,r[0],r[1]))))return!1;let l=i;if(this.state.activeEmbeddable?.element===l&&this.state.activeEmbeddable?.state==="active"||(setTimeout(()=>{this.setState({activeEmbeddable:{element:l,state:"active"},selectedElementIds:{[l.id]:!0},newElement:null,selectionElement:null})},100),qa(l)))return!0;let s=this.getHTMLIFrameElement(l);if(!s?.contentWindow)return!0;if(s.src.includes("youtube")){let c=nE.get(l.id);switch(c||(nE.set(l.id,Ys.UNSTARTED),s.contentWindow.postMessage(JSON.stringify({event:"listening",id:l.id}),"*")),c){case Ys.PLAYING:case Ys.BUFFERING:s.contentWindow?.postMessage(JSON.stringify({event:"command",func:"pauseVideo",args:""}),"*");break;default:s.contentWindow?.postMessage(JSON.stringify({event:"command",func:"playVideo",args:""}),"*")}}return s.src.includes("player.vimeo.com")&&s.contentWindow.postMessage(JSON.stringify({method:"paused"}),"*"),!0}isIframeLikeElementCenter(t,r,n,i){return t&&!r.altKey&&!r.shiftKey&&!r.metaKey&&!r.ctrlKey&&(this.state.activeEmbeddable?.element!==t||this.state.activeEmbeddable?.state==="hover"||!this.state.activeEmbeddable)&&n>=t.x+t.width/3&&n<=t.x+2*t.width/3&&i>=t.y+t.height/3&&i<=t.y+2*t.height/3}renderEmbeddables(){let t=this.state.zoom.value,r=this.state.width,n=this.state.height,i=this.scene.getNonDeletedElements().filter(a=>ao(a)&&this.embedsValidationStatus.get(a.id)===!0||qa(a));return Fe(JN,{children:i.map(a=>{let{x:l,y:s}=Ot({sceneX:a.x,sceneY:a.y},this.state),c=xc(a,r,n,this.state,this.scene.getNonDeletedElementsMap()),d=this.initializedEmbeds.has(a.id);if(c&&!d&&this.initializedEmbeds.add(a.id),!(c||d))return null;let m;if(qa(a)){m=null;let v=(a.customData?.generationData??this.magicGenerations.get(a.id))||{status:"error",message:"No generation data",code:"ERR_NO_GENERATION_DATA"};if(v.status==="done"){let y=v.html;m={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>y}}else if(v.status==="pending")m={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>mf(`
|
|
46
|
+
Please fix the Mermaid syntax and regenerate a valid diagram.`;await v({prompt:re,isRepairFlow:!0})},H=async V=>{let $=d.messages.findIndex(oe=>oe.id===V.id);if($>0){let oe=d.messages[$-1];oe.type==="user"&&typeof oe.content=="string"&&(f(),await v({prompt:oe.content,isRepairFlow:!0}))}},K=()=>{nm({app:i,data:x})},F=V=>{let $=d.messages.findIndex(re=>re.id===V&&re.type==="assistant"),oe=d.messages.slice(0,$-1);p({...d,messages:oe})},U=V=>{p($=>({...$,currentPrompt:V}))};return qR("div",{className:`ttd-dialog-layout ${m?"ttd-dialog-layout--split":"ttd-dialog-layout--chat-only"}`,children:[AE(Q5,{chatId:d.id,messages:d.messages,currentPrompt:d.currentPrompt,onPromptChange:U,onGenerate:v,isGenerating:b?.isGenerating??!1,generatedResponse:b?.content,isMenuOpen:E,onMenuToggle:A,onMenuClose:M,onNewChat:I,onRestoreChat:w,onDeleteChat:C,savedChats:u,activeSessionId:d.id,onAbort:y,onMermaidTabClick:P,onAiRepairClick:R,onDeleteMessage:F,onInsertMessage:L,onRetry:H,onViewAsMermaid:N,renderWarning:r,renderWelcomeScreen:o}),m&&AE(tM,{canvasRef:s,hideErrorDetails:b?.errorType==="parse",error:l,loaded:e.loaded,onInsert:K})]})},jR=({mermaidToExcalidrawLib:e,onTextSubmit:t,renderWelcomeScreen:o,renderWarning:r,persistenceAdapter:n})=>AE(ZR,{mermaidToExcalidrawLib:e,onTextSubmit:t,renderWelcomeScreen:o,renderWarning:r,persistenceAdapter:n}),oM=jR;import{Tabs as JR}from"radix-ui";import{useRef as rM}from"react";import{jsx as QR}from"react/jsx-runtime";var nM=e=>{let t=Ce(),o=rM(null),r=rM(0);return QR(JR.Root,{ref:o,className:"ttd-dialog-tabs-root",value:e.tab,onValueChange:n=>{if(!n)return;let i=o.current?.closest(".Modal__content");if(i){let a=i.offsetHeight||0;a>r.current&&(r.current=a,i.style.minHeight=`min(${r.current}px, 100%)`)}e.dialog==="ttd"&&Ym(["text-to-diagram","mermaid"],n)&&t({openDialog:{name:e.dialog,tab:n}})},children:e.children})};nM.displayName="TTDDialogTabs";var iM=nM;import{Tabs as eN}from"radix-ui";import{jsx as tN}from"react/jsx-runtime";var LE=({children:e,...t})=>tN(eN.List,{className:"ttd-dialog-triggers",...t,children:e});LE.displayName="TTDDialogTabTriggers";import{Tabs as oN}from"radix-ui";import{jsx as aM}from"react/jsx-runtime";var zg=({children:e,tab:t,onSelect:o,...r})=>aM(oN.Trigger,{value:t,asChild:!0,onSelect:o,children:aM("button",{type:"button",className:"ttd-dialog-tab-trigger",...r,children:e})});zg.displayName="TTDDialogTabTrigger";import{Tabs as rN}from"radix-ui";import{jsx as nN}from"react/jsx-runtime";var Hg=({tab:e,children:t,...o})=>nN(rN.Content,{...o,value:e,children:t});Hg.displayName="TTDDialogTab";import{jsx as vn,jsxs as _E}from"react/jsx-runtime";var Ug=e=>{let t=fe();return t.openDialog?.name!=="ttd"?null:vn(sN,{...e,tab:t.openDialog.tab})};Ug.WelcomeMessage=Rg;var sN=si("TTDDialogBase",({tab:e,...t})=>{let o=Ke(),[r,n]=aN({loaded:!1,api:import("@excalidraw/mermaid-to-excalidraw")});return iN(()=>{(async()=>{await r.api,n(a=>({...a,loaded:!0}))})()},[r.api]),vn(_t,{className:"ttd-dialog",onCloseRequest:()=>{o.setOpenDialog(null)},size:1520,title:!1,...t,autofocus:!1,children:_E(iM,{dialog:"ttd",tab:e,children:["__fallback"in t&&t.__fallback?vn("p",{className:"dialog-mermaid-title",children:h("mermaid.title")}):_E(LE,{children:[vn(zg,{tab:"text-to-diagram",children:_E("div",{className:"ttd-dialog-tab-trigger__content",children:[h("labels.textToDiagram"),vn("div",{className:"ttd-dialog-tab-trigger__badge",children:h("chat.aiBeta")})]})}),vn(zg,{tab:"mermaid",children:h("mermaid.label")})]}),!("__fallback"in t)&&vn(Hg,{className:"ttd-dialog-content",tab:"text-to-diagram",children:vn(oM,{mermaidToExcalidrawLib:r,onTextSubmit:t.onTextSubmit,renderWelcomeScreen:t.renderWelcomeScreen,renderWarning:t.renderWarning,persistenceAdapter:t.persistenceAdapter})}),vn(Hg,{className:"ttd-dialog-content",tab:"mermaid",children:vn(z5,{mermaidToExcalidrawLib:r,isActive:e==="mermaid"})})]})})});import JN from"clsx";import QN from"lodash.throttle";import{useEffect as EM,useMemo as BE,useState as e9,memo as t9}from"react";import lN from"clsx";import{useEffect as lM,useRef as Gg,useState as cN}from"react";var sM=.01,lm=10,Vo=(e,t)=>!(t==="angle"&&ae(e)),Tt=(e,t)=>{let o=e+t/2;return o-o%t},ec=(e,t,o)=>Object.keys(e).map(r=>({original:(o??t).get(r),latest:t.get(r)})).filter(r=>r.original!==void 0&&r.latest!==void 0);var us=(e,t,o,r,n,i,a=!0)=>{if(Vt(o)&&(o.startBinding||o.endBinding)){if(Math.abs(e-o.x)<tr&&Math.abs(t-o.y)<tr)return;Ff(o,"start",r),Ff(o,"end",r)}let s=r.getNonDeletedElementsMap(),l=s.get(o.id);if(!l)return;let[c,d]=[o.x+o.width/2,o.y+o.height/2],[p,m]=Ae(_(o.x,o.y),_(c,d),o.angle),u=e-p,b=t-m,[f,x]=Ae(_(e,t),_(c+u,d+b),-o.angle);r.mutateElement(l,{x:f,y:x},{informMutation:a,isDragging:!1}),Mi(l,r,n);let v=we(o,i);if(v){let y=s.get(v.id);y&&r.mutateElement(y,{x:v.x+u,y:v.y+b},{informMutation:a,isDragging:!1})}if(ae(o)){let y=cr(i,o.id);y.forEach(E=>{let w=s.get(E.id);if(!w)return;let[C,I]=[E.x+E.width/2,E.y+E.height/2],[A,M]=Ae(_(E.x,E.y),_(C,I),E.angle),N=Math.round(A+u),P=Math.round(M+b),[L,R]=Ae(_(N,P),_(C+u,I+b),-E.angle);r.mutateElement(w,{x:L,y:R},{informMutation:a,isDragging:!1}),Mi(w,r,n,{simultaneouslyUpdated:me(y)})})}},tc=(e,t)=>{let r=Or(t).map(n=>Ye(e,n).reduce((i,a)=>(i[a.id]=!0,i),{}));return e.filter(n=>!Ai(n)).forEach(n=>{r.push({[n.id]:!0})}),r};import{jsx as PE,jsxs as mN}from"react/jsx-runtime";var dN=({label:e,icon:t,dragInputCallback:o,value:r,elements:n,editable:i=!0,shouldKeepAspectRatio:a,property:s,scene:l,appState:c,sensitivity:d=1,dragFinishedCallback:p})=>{let m=Ke(),u=m.ownerDocument,b=m.ownerWindow,f=Ce(),x=Gg(null),v=Gg(null),[y,E]=cN(r.toString()),w=Gg(null);w.current||(w.current={originalAppState:Dr(c),originalElements:n,lastUpdatedValue:y,updatePending:!1}),lM(()=>{let A=r.toString();E(A),w.current.lastUpdatedValue=A},[r]);let C=(A,M,N)=>{if(!w.current.updatePending)return!1;w.current.updatePending=!1;let P=Number(A);if(!Number.isFinite(P)){E(r.toString());return}let L=Number(P.toFixed(2)),R=Number(r);if(isNaN(R)||Math.abs(L-R)>=sM){w.current.lastUpdatedValue=A;let H=new Map;for(let K of m.scene.getNonDeletedElements())H.set(K.id,mr(K));o({accumulatedChange:0,instantChange:0,originalElements:M,originalElementsMap:H,shouldKeepAspectRatio:a,shouldChangeByStepSize:!1,scene:l,nextValue:L,property:s,originalAppState:N,setInputValue:K=>E(String(K)),app:m,setAppState:f}),m.syncActionResult({captureUpdate:O.IMMEDIATELY})}},I=Gg({});return I.current.handleInputValue=C,lM(()=>{let A=x.current,M=I.current;return()=>{let N=A?.value;N&&M.handleInputValue?.(N,w.current.originalElements,w.current.originalAppState),b.removeEventListener("pointermove",M.onPointerMove,!1),b.removeEventListener("pointerup",M.onPointerUp,!1)}},[i,b]),i?mN("div",{className:lN("drag-input-container",!i&&"disabled"),"data-testid":e,children:[PE("div",{className:"drag-input-label",ref:v,onPointerDown:A=>{if(x.current&&i){u.body.classList.add("excalidraw-cursor-resize");let M=Number(x.current.value);isNaN(M)&&(M=0);let N=null,P=m.scene.getNonDeletedElements().reduce((V,$)=>(V.set($.id,mr($)),V),new Map),L=n.map(V=>P.get(V.id)),R=Dr(c),H=0,K=0,F=V=>{if(N&&P!==null&&L!==null){let $=V.clientX-N.x;$!==0&&(K+=$,Math.abs(K)>=d&&(K=Math.sign(K)*Math.floor(Math.abs(K)/d),H+=K,o({accumulatedChange:H,instantChange:K,originalElements:L,originalElementsMap:P,shouldKeepAspectRatio:a,shouldChangeByStepSize:V.shiftKey,property:s,scene:l,originalAppState:R,setInputValue:oe=>E(String(oe)),app:m,setAppState:f}),K=0))}N={x:V.clientX,y:V.clientY}},U=()=>{b.removeEventListener("pointermove",F,!1),m.syncActionResult({captureUpdate:O.IMMEDIATELY}),p?.({app:m,setAppState:f,originalElements:L,originalAppState:R}),N=null,H=0,K=0,L=null,P=null,u.body.classList.remove("excalidraw-cursor-resize"),b.removeEventListener("pointerup",U,!1)};I.current.onPointerMove=F,I.current.onPointerUp=U,b.addEventListener("pointermove",F,!1),b.addEventListener("pointerup",U,!1)}},onPointerEnter:()=>{v.current&&(v.current.style.cursor="ew-resize")},children:t?PE(dn,{icon:t}):e}),PE("input",{className:"drag-input",autoComplete:"off",spellCheck:"false",onKeyDown:A=>{if(i){let M=A.currentTarget;M instanceof b.HTMLInputElement&&A.key===S.ENTER&&(C(M.value,n,c),m.focusContainer())}},ref:x,value:y,onChange:A=>{w.current.updatePending=!0,E(A.target.value)},onFocus:A=>{A.target.select(),w.current.originalElements=n,w.current.originalAppState=Dr(c)},onBlur:A=>{y?i&&C(A.target.value,w.current.originalElements,w.current.originalAppState):E(r.toString())},disabled:!i})]}):null},ro=dN;import{jsx as gN}from"react/jsx-runtime";var pN=15,uN=({accumulatedChange:e,originalElements:t,shouldChangeByStepSize:o,nextValue:r,scene:n,app:i})=>{let a=n.getNonDeletedElementsMap(),s=t[0];if(s&&!He(s)){let l=a.get(s.id);if(!l)return;if(r!==void 0){let b=gs(r);n.mutateElement(l,{angle:b}),Mi(l,n,i.state);let f=we(l,a);f&&!Ee(l)&&n.mutateElement(f,{angle:b});return}let c=Math.round(fs(s.angle)*100)/100,d=Math.round(e),p=(c+d)%360;o&&(p=Tt(p,pN)),p=p<0?p+360:p;let m=gs(p);n.mutateElement(l,{angle:m}),Mi(l,n,i.state);let u=we(l,a);u&&!Ee(l)&&n.mutateElement(u,{angle:m})}},hN=({element:e,scene:t,appState:o,property:r})=>gN(ro,{label:"A",icon:id,value:Math.round(fs(e.angle)%360*100)/100,elements:[e],dragInputCallback:uN,editable:Vo(e,"angle"),scene:t,appState:o,property:r}),cM=hN;import{jsx as bN}from"react/jsx-runtime";var dM=5,fN=({property:e,scene:t,appState:o,setAppState:r})=>bN(ro,{label:"Grid step",sensitivity:8,elements:[],dragInputCallback:({nextValue:n,instantChange:i,shouldChangeByStepSize:a,setInputValue:s})=>{r(l=>{let c;return n?c=n:i&&(c=a?Tt(l.gridStep+dM*Math.sign(i),dM):l.gridStep+i),c?(c=L2(c),s(c),{gridStep:c}):(s(l.gridStep),null)})},scene:t,value:o.gridStep,property:e,appState:o}),mM=fN;import{jsx as wN}from"react/jsx-runtime";var pM=10,xN=e=>e.type==="image",EN=({accumulatedChange:e,originalElements:t,originalElementsMap:o,shouldKeepAspectRatio:r,shouldChangeByStepSize:n,nextValue:i,property:a,originalAppState:s,instantChange:l,scene:c,app:d,setAppState:p})=>{let m=c.getNonDeletedElementsMap(),u=t[0],b=m.get(u.id);if(u&&b){let f=r||xN(u),x=u.width/u.height;if(s.croppingElementId===u.id){let v=m.get(u.id);if(!v||!nt(v)||!v.crop)return;let y=v.crop,E={...y},w=v.scale[0]===-1,C=v.scale[1]===-1,{width:I,height:A}=An(v),M=y.naturalWidth/I,N=y.naturalHeight/A,P=w?y.width+y.x:y.naturalWidth-y.x,L=C?y.height+y.y:y.naturalHeight-y.y,R=Rf*M,H=Rf*N;if(i!==void 0){if(a==="width"){let $=i*M,oe=Je($,R,P);E={...E,width:oe,x:w?y.x+y.width-oe:y.x}}else if(a==="height"){let $=i*N,oe=Je($,H,L);E={...E,height:oe,y:C?y.y+y.height-oe:y.y}}c.mutateElement(v,{crop:E,width:E.width/(y.naturalWidth/I),height:E.height/(y.naturalHeight/A)});return}let K=a==="width"?l:0,F=a==="height"?l:0,U=Je(y.width+K,R,P),V=Je(y.height+F,R,L);E={...y,x:w?y.x+y.width-U:y.x,y:C?y.y+y.height-V:y.y,width:U,height:V},c.mutateElement(v,{crop:E,width:E.width/(y.naturalWidth/I),height:E.height/(y.naturalHeight/A)});return}if(i!==void 0){let v=Math.max(a==="width"?i:f?i*x:u.width,Do),y=Math.max(a==="height"?i:f?i/x:u.height,Do);if(Rs(v,y,b,u,o,c,a==="width"?"e":"s",{shouldMaintainAspectRatio:f}),ae(b)){let E=Oo(c.getElementsIncludingDeleted(),b,s,c.getNonDeletedElementsMap()),w=Qr(c.getElementsIncludingDeleted(),E,b);c.replaceAllElements(w)}return}{let v=a==="width"?e:0,y=a==="height"?e:0,E=Math.max(0,u.width+v);a==="width"&&(n?E=Tt(E,pM):E=Math.round(E));let w=Math.max(0,u.height+y);if(a==="height"&&(n?w=Tt(w,pM):w=Math.round(w)),f&&(a==="width"?w=Math.round(E/x*100)/100:E=Math.round(w*x*100)/100),w=Math.max(Do,w),E=Math.max(Do,E),Rs(E,w,b,u,o,c,a==="width"?"e":"s",{shouldMaintainAspectRatio:f}),ae(b)){let C=me(Oo(c.getElementsIncludingDeleted(),b,s,c.getNonDeletedElementsMap()));p({elementsToHighlight:C})}}}},yN=({setAppState:e,app:t,originalElements:o,originalAppState:r})=>{let n=t.scene.getNonDeletedElementsMap(),i=o?.[0],a=i&&n.get(i.id);if(a&&ae(a)){let s=Oo(t.scene.getElementsIncludingDeleted(),a,r,t.scene.getNonDeletedElementsMap()),l=Qr(t.scene.getElementsIncludingDeleted(),s,a);t.scene.replaceAllElements(l),e({elementsToHighlight:null})}},vN=({property:e,element:t,scene:o,appState:r})=>{let n=$r(e==="width"?t.width:t.height,2);if(r.croppingElementId&&r.croppingElementId===t.id&&nt(t)&&t.crop){let{width:i,height:a}=An(t);if(e==="width"){let s=i/t.crop.naturalWidth;n=$r(t.crop.width*s,2)}if(e==="height"){let s=a/t.crop.naturalHeight;n=$r(t.crop.height*s,2)}}return wN(ro,{label:e==="width"?"W":"H",elements:[t],dragInputCallback:EN,value:n,editable:Vo(t,e),scene:o,appState:r,property:e,dragFinishedCallback:yN})},DE=vN;import{jsx as IN}from"react/jsx-runtime";var uM=4,TN=4,CN=({accumulatedChange:e,originalElements:t,shouldChangeByStepSize:o,nextValue:r,scene:n})=>{let i=n.getNonDeletedElementsMap(),a=t[0];if(a){let s=i.get(a.id);if(!s||!J(s))return;let l;if(r!==void 0)l=Math.max(Math.round(r),uM);else if(a.type==="text"){let c=Math.round(jo(a,i)),d=Math.round(e);l=Math.max(c+d,uM),o&&(l=Tt(l,TN))}l&&(n.mutateElement(s,Rn(s,l,i)),At(s,n.getContainerElement(s),n))}},SN=({element:e,scene:t,appState:o,property:r})=>{let n=J(e)?e:Yt(e)?we(e,t.getNonDeletedElementsMap()):null;return n?IN(ro,{label:"F",value:Math.round(jo(n,t.getNonDeletedElementsMap())*10)/10,elements:[n],dragInputCallback:CN,icon:Oi,appState:o,scene:t,property:r}):null},hM=SN;import{jsx as LN}from"react/jsx-runtime";var kN=15,MN=({accumulatedChange:e,originalElements:t,shouldChangeByStepSize:o,nextValue:r,property:n,scene:i})=>{let a=i.getNonDeletedElementsMap(),s=t.map(c=>a.get(c.id)).filter(c=>c&&!Ai(c)&&Vo(c,n)),l=t.filter(c=>!Ai(c)&&Vo(c,n));if(r!==void 0){let c=gs(r);for(let d of s){if(!d)continue;i.mutateElement(d,{angle:c});let p=we(d,a);p&&!Ee(d)&&i.mutateElement(p,{angle:c})}i.triggerUpdate();return}for(let c=0;c<s.length;c++){let d=s[c];if(!d)continue;let p=l[c],m=Math.round(fs(p.angle)*100)/100,u=Math.round(e),b=(m+u)%360;o&&(b=Tt(b,kN)),b=b<0?b+360:b;let f=gs(b);i.mutateElement(d,{angle:f});let x=we(d,a);x&&!Ee(d)&&i.mutateElement(x,{angle:f})}i.triggerUpdate()},AN=({elements:e,scene:t,appState:o,property:r})=>{let n=e.filter(l=>!Ai(l)&&Vo(l,"angle")),i=n.map(l=>Math.round(fs(l.angle)%360*100)/100),a=new Set(i).size===1?i[0]:"Mixed",s=n.some(l=>Vo(l,"angle"));return LN(ro,{label:"A",icon:id,value:a,elements:e,dragInputCallback:MN,editable:s,appState:o,scene:t,property:r})},gM=AN;import{useMemo as _N}from"react";import{jsx as BN}from"react/jsx-runtime";var oc=10,PN=(e,t,o,r)=>{let n=r.x-e,i=r.y-t,a=r.width*o,s=r.height*o,l=e+n*o,c=t+i*o;return{width:a,height:s,x:l,y:c,...y2(r,a,s,!1),...J(r)?{fontSize:r.fontSize*o}:{}}},DN=(e,t,o,r,n,i,a,s)=>{let l=s.getNonDeletedElementsMap();if(J(n)&&ks(n,l))return;let c=PN(e,t,r,i);if(s.mutateElement(n,c),et(n)){rp(n,s,{...jv(n,a,o==="width"?"e":"s",{proportional:!0,fromCenter:!1}),anchor:"top"});return}let d=we(i,a);if(d){let p=d.fontSize*r;io(n,s);let m=l.get(d.id);m&&J(m)&&(s.mutateElement(m,{fontSize:p}),Uv(n,s,o==="width"?"e":"s",!0))}},fM=(e,t,o,r,n,i,a,s,l,c)=>{i==="width"?t=Math.round(e/r*100)/100:e=Math.round(t*r*100)/100;let d=t/o;for(let p=0;p<s.length;p++){let m=s[p],u=a[p];DN(n[0],n[1],i,d,u,m,l,c)}},RN=({accumulatedChange:e,originalElements:t,originalElementsMap:o,originalAppState:r,shouldChangeByStepSize:n,nextValue:i,scene:a,property:s,setAppState:l,app:c})=>{let d=a.getNonDeletedElementsMap(),p=tc(t,r);if(i!==void 0){for(let f of p){let x=ec(f,d,o);if(x.length>1){let v=x.map(R=>R.latest),y=x.map(R=>R.original),[E,w,C,I]=Te(y),A=C-E,M=I-w,N=A/M,P=Math.max(Do,s==="width"?Math.max(0,i):A),L=Math.max(Do,s==="height"?Math.max(0,i):M);fM(P,L,M,N,_(E,w),s,v,y,o,a)}else{let[v]=x,y=v?.latest,E=v?.original;if(y&&E&&Vo(y,s)){let w=s==="width"?Math.max(0,i):y.width;s==="width"&&(n?w=Tt(w,oc):w=Math.round(w));let C=s==="height"?Math.max(0,i):y.height;if(s==="height"&&(n?C=Tt(C,oc):C=Math.round(C)),w=Math.max(Do,w),C=Math.max(Do,C),Rs(w,C,y,E,o,a,s==="width"?"e":"s",{shouldInformMutation:!1}),ae(y)){let I=Oo(a.getElementsIncludingDeleted(),y,r,a.getNonDeletedElementsMap()),A=Qr(a.getElementsIncludingDeleted(),I,y);a.replaceAllElements(A)}}}}a.triggerUpdate();return}let m=s==="width"?e:0,u=s==="height"?e:0,b=[];for(let f of p){let x=ec(f,d,o);if(x.length>1){let v=x.map(R=>R.latest),y=x.map(R=>R.original),[E,w,C,I]=Te(y),A=C-E,M=I-w,N=A/M,P=Math.max(0,A+m);s==="width"&&(n?P=Tt(P,oc):P=Math.round(P));let L=Math.max(0,M+u);s==="height"&&(n?L=Tt(L,oc):L=Math.round(L)),P=Math.max(Do,P),L=Math.max(Do,L),fM(P,L,M,N,_(E,w),s,v,y,o,a)}else{let[v]=x,y=v?.latest,E=v?.original;if(y&&E&&Vo(y,s)){let w=Math.max(0,E.width+m);s==="width"&&(n?w=Tt(w,oc):w=Math.round(w));let C=Math.max(0,E.height+u);if(s==="height"&&(n?C=Tt(C,oc):C=Math.round(C)),w=Math.max(Do,w),C=Math.max(Do,C),Rs(w,C,y,E,o,a,s==="width"?"e":"s",{shouldInformMutation:!1}),ae(y)){let I=me(Oo(a.getElementsIncludingDeleted(),y,r,a.getNonDeletedElementsMap()));b.push(...I)}}}}l({elementsToHighlight:b}),a.triggerUpdate()},NN=({setAppState:e,app:t,originalElements:o,originalAppState:r})=>{let n=t.scene.getNonDeletedElementsMap(),i=o?.[0],a=i&&n.get(i.id);if(a&&ae(a)){let s=Oo(t.scene.getElementsIncludingDeleted(),a,r,t.scene.getNonDeletedElementsMap()),l=Qr(t.scene.getElementsIncludingDeleted(),s,a);t.scene.replaceAllElements(l),e({elementsToHighlight:null})}},ON=({property:e,elements:t,elementsMap:o,atomicUnits:r,scene:n,appState:i})=>{let a=_N(()=>r.map(c=>{let d=ec(c,o);if(d.length>1){let[m,u,b,f]=Te(d.map(x=>x.latest));return Math.round((e==="width"?b-m:f-u)*100)/100}let[p]=d;return Math.round((e==="width"?p.latest.width:p.latest.height)*100)/100}),[o,r,e]),s=new Set(a).size===1?Math.round(a[0]*100)/100:"Mixed",l=a.length>0;return BN(ro,{label:e==="width"?"W":"H",elements:t,dragInputCallback:RN,value:s,editable:l,appState:i,property:e,scene:n,dragFinishedCallback:NN})},RE=ON;import{jsx as GN}from"react/jsx-runtime";var bM=4,FN=4,zN=(e,t)=>e.reduce((o,r)=>{if(!r||Ai(r))return o;if(J(r))return o.push(r),o;if(Yt(r)){let n=we(r,t);if(n)return o.push(n),o}return o},[]),HN=({accumulatedChange:e,originalElements:t,shouldChangeByStepSize:o,nextValue:r,scene:n})=>{let i=n.getNonDeletedElementsMap(),a=t.map(l=>i.get(l.id)),s;if(r){s=Math.max(Math.round(r),bM);for(let l of a)n.mutateElement(l,Rn(l,s,i)),At(l,n.getContainerElement(l),n);n.triggerUpdate()}else{let l=t;for(let c=0;c<a.length;c++){let d=a[c],p=l[c],m=Math.round(jo(p,i)),u=Math.round(e),b=Math.max(m+u,bM);o&&(b=Tt(b,FN)),n.mutateElement(d,Rn(d,b,i)),At(d,n.getContainerElement(d),n)}n.triggerUpdate()}},UN=({elements:e,scene:t,appState:o,property:r,elementsMap:n})=>{let i=zN(e,n);if(!i.length)return null;let a=i.map(c=>Math.round(jo(c,n)*10)/10),s=new Set(a).size===1?a[0]:"Mixed",l=a.length>0;return GN(ro,{label:"F",icon:Oi,elements:i,dragInputCallback:HN,value:s,editable:l,scene:t,property:r,appState:o})},xM=UN;import{useMemo as WN}from"react";import{jsx as $N}from"react/jsx-runtime";var VN=(e,t,o,r,n,i,a)=>{for(let s=0;s<r.length;s++){let l=r[s],[c,d]=[l.x+l.width/2,l.y+l.height/2],[p,m]=Ae(_(l.x,l.y),_(c,d),l.angle),u=e==="x"?Math.round(p+t):p,b=e==="y"?Math.round(m+o):m;us(u,b,l,i,a,n,!1)}},YN=(e,t,o,r,n,i)=>{let a=n.getNonDeletedElementsMap(),[s,l,,]=Te(o),c=e-s,d=t-l;for(let p=0;p<o.length;p++){let m=o[p],u=a.get(m.id);if(u&&(!J(u)||!u.containerId)){let[b,f]=[u.x+u.width/2,u.y+u.height/2],[x,v]=Ae(_(u.x,u.y),_(b,f),u.angle);us(x+c,v+d,m,n,i,r,!1)}}},KN=({accumulatedChange:e,originalElements:t,originalElementsMap:o,shouldChangeByStepSize:r,nextValue:n,property:i,scene:a,originalAppState:s,app:l})=>{let c=a.getNonDeletedElementsMap();if(n!==void 0){for(let u of tc(t,s)){let b=ec(u,c,o);if(b.length>1){let[f,x,,]=Te(b.map(E=>E.latest));YN(i==="x"?n:f,i==="y"?n:x,b.map(E=>E.original),o,a,l.state)}else{let f=b[0]?.original,x=b[0]?.latest;if(f&&x&&Vo(x,i)){let[v,y]=[f.x+f.width/2,f.y+f.height/2],[E,w]=Ae(_(f.x,f.y),_(v,y),f.angle);us(i==="x"?n:E,i==="y"?n:w,f,a,l.state,o,!1)}}}a.triggerUpdate();return}let d=r?Tt(e,lm):e;VN(i,i==="x"?d:0,i==="y"?d:0,t,o,a,l.state),a.triggerUpdate()},XN=({property:e,elements:t,elementsMap:o,atomicUnits:r,scene:n,appState:i})=>{let a=WN(()=>r.map(l=>{let c=Object.keys(l).map(f=>o.get(f)).filter(f=>f!==void 0);if(c.length>1){let[f,x]=Te(c);return Math.round((e==="x"?f:x)*100)/100}let[d]=c,[p,m]=[d.x+d.width/2,d.y+d.height/2],[u,b]=Ae(_(d.x,d.y),_(p,m),d.angle);return Math.round((e==="x"?u:b)*100)/100}),[r,o,e]),s=new Set(a).size===1?a[0]:"Mixed";return $N(ro,{label:e==="x"?"X":"Y",elements:t,dragInputCallback:KN,value:s,property:e,scene:n,appState:i})},NE=XN;import{jsx as qN}from"react/jsx-runtime";var ZN=({accumulatedChange:e,instantChange:t,originalElements:o,originalElementsMap:r,shouldChangeByStepSize:n,nextValue:i,property:a,scene:s,originalAppState:l,app:c})=>{let d=s.getNonDeletedElementsMap(),p=o[0],[m,u]=[p.x+p.width/2,p.y+p.height/2],[b,f]=Ae(_(p.x,p.y),_(m,u),p.angle);if(l.croppingElementId===p.id){let w=d.get(p.id);if(!w||!nt(w)||!w.crop)return;let C=w.crop,I=C,A=w.scale[0]===-1,M=w.scale[1]===-1,{width:N,height:P}=An(w);if(i!==void 0){if(a==="x"){let H=i*(C.naturalWidth/N);A?I={...C,x:Je(C.naturalWidth-H-C.width,0,C.naturalWidth-C.width)}:I={...C,x:Je(i*(C.naturalWidth/N),0,C.naturalWidth-C.width)}}a==="y"&&(I={...C,y:Je(i*(C.naturalHeight/P),0,C.naturalHeight-C.height)}),s.mutateElement(w,{crop:I});return}let L=(a==="x"?t:0)*(A?-1:1),R=(a==="y"?t:0)*(M?-1:1);I={...C,x:Je(C.x+L,0,C.naturalWidth-C.width),y:Je(C.y+R,0,C.naturalHeight-C.height)},s.mutateElement(w,{crop:I});return}if(i!==void 0){us(a==="x"?i:b,a==="y"?i:f,p,s,c.state,r);return}let x=a==="x"?e:0,v=a==="y"?e:0,y=a==="x"?Math.round(n?Tt(p.x+x,lm):b+x):b,E=a==="y"?Math.round(n?Tt(p.y+v,lm):f+v):f;us(y,E,p,s,c.state,r)},jN=({property:e,element:t,scene:o,appState:r})=>{let[n,i]=Ae(_(t.x,t.y),_(t.x+t.width/2,t.y+t.height/2),t.angle),a=$r(e==="x"?n:i,2);if(r.croppingElementId===t.id&&nt(t)&&t.crop){let s=Cv(t);s&&(a=$r(e==="x"?s.x:s.y,2))}return qN(ro,{label:e==="x"?"X":"Y",elements:[t],dragInputCallback:ZN,scene:o,value:a,property:e,appState:r})},OE=jN;import{Fragment as FE,jsx as he,jsxs as Yo}from"react/jsx-runtime";var o9=50,cm=e=>{let t=cn(),o=e.app.scene.getSceneNonce()||1,r=e.app.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!1}),n=ta(e.app);return he(r9,{...e,appState:t,sceneNonce:o,selectedElements:r,gridModeEnabled:n})},ft=({children:e,columns:t=1,heading:o,style:r,...n})=>he("div",{className:JN("exc-stats__row",{"exc-stats__row--heading":o}),style:{gridTemplateColumns:`repeat(${t}, 1fr)`,...r},...n,children:e});ft.displayName="StatsRow";var Wg=({children:e,order:t,style:o,...r})=>he("div",{className:"exc-stats__rows",style:{order:t,...o},...r,children:e});Wg.displayName="StatsRows";cm.StatsRow=ft;cm.StatsRows=Wg;var r9=t9(({app:e,onClose:t,renderCustomStats:o,selectedElements:r,appState:n,sceneNonce:i,gridModeEnabled:a})=>{let s=e.scene,l=s.getNonDeletedElements(),c=s.getNonDeletedElementsMap(),d=Ce(),p=r.length===1?r[0]:null,m=r.length>1?r:null,u=n.croppingElementId&&nt(p),b=u?An(p):null,[f,x]=e9({width:0,height:0}),v=BE(()=>QN(w=>{let C=Te(w);x({width:Math.round(C[2])-Math.round(C[0]),height:Math.round(C[3])-Math.round(C[1])})},o9),[]);EM(()=>{v(l)},[i,l,v]),EM(()=>()=>v.cancel(),[v]);let y=BE(()=>tc(r,n),[r,n]),E=BE(()=>bp(r),[r]);return he("div",{className:"exc-stats",children:Yo(Ct,{padding:3,children:[Yo("div",{className:"title",children:[he("h2",{children:h("stats.title")}),he("div",{className:"close",onClick:t,children:qo})]}),Yo(yd,{label:he("h3",{children:h("stats.generalStats")}),open:!!(n.stats.panels&fc.generalStats),openTrigger:()=>d(w=>({stats:{open:!0,panels:w.stats.panels^fc.generalStats}})),children:[Yo(Wg,{children:[he(ft,{heading:!0,children:h("stats.scene")}),Yo(ft,{columns:2,children:[he("div",{children:h("stats.shapes")}),he("div",{children:l.length})]}),Yo(ft,{columns:2,children:[he("div",{children:h("stats.width")}),he("div",{children:f.width})]}),Yo(ft,{columns:2,children:[he("div",{children:h("stats.height")}),he("div",{children:f.height})]}),a&&Yo(FE,{children:[he(ft,{heading:!0,children:"Canvas"}),he(ft,{children:he(mM,{property:"gridStep",scene:s,appState:n,setAppState:d})})]})]}),o?.(l,n)]}),!E&&r.length>0&&he("div",{id:"elementStats",style:{marginTop:12},children:he(yd,{label:he("h3",{children:h("stats.elementProperties")}),open:!!(n.stats.panels&fc.elementProperties),openTrigger:()=>d(w=>({stats:{open:!0,panels:w.stats.panels^fc.elementProperties}})),children:Yo(Wg,{children:[p&&Yo(FE,{children:[u&&he(ft,{heading:!0,children:h("labels.unCroppedDimension")}),n.croppingElementId&&nt(p)&&b&&Yo(ft,{columns:2,children:[he("div",{children:h("stats.width")}),he("div",{children:$r(b.width,2)})]}),n.croppingElementId&&nt(p)&&b&&Yo(ft,{columns:2,children:[he("div",{children:h("stats.height")}),he("div",{children:$r(b.height,2)})]}),he(ft,{heading:!0,"data-testid":"stats-element-type",style:{margin:"0.3125rem 0"},children:n.croppingElementId?h("labels.imageCropping"):h(`element.${p.type}`)}),he(ft,{children:he(OE,{element:p,property:"x",elementsMap:c,scene:s,appState:n})}),he(ft,{children:he(OE,{element:p,property:"y",elementsMap:c,scene:s,appState:n})}),he(ft,{children:he(DE,{property:"width",element:p,scene:s,appState:n})}),he(ft,{children:he(DE,{property:"height",element:p,scene:s,appState:n})}),he(ft,{children:he(cM,{property:"angle",element:p,scene:s,appState:n})}),he(ft,{children:he(hM,{property:"fontSize",element:p,scene:s,appState:n})})]}),m&&Yo(FE,{children:[dp(m)&&he(ft,{heading:!0,children:h("element.group")}),Yo(ft,{columns:2,style:{margin:"0.3125rem 0"},children:[he("div",{children:h("stats.shapes")}),he("div",{children:r.length})]}),he(ft,{children:he(NE,{property:"x",elements:m,elementsMap:c,atomicUnits:y,scene:s,appState:n})}),he(ft,{children:he(NE,{property:"y",elements:m,elementsMap:c,atomicUnits:y,scene:s,appState:n})}),he(ft,{children:he(RE,{property:"width",elements:m,elementsMap:c,atomicUnits:y,scene:s,appState:n})}),he(ft,{children:he(RE,{property:"height",elements:m,elementsMap:c,atomicUnits:y,scene:s,appState:n})}),he(ft,{children:he(gM,{property:"angle",elements:m,scene:s,appState:n})}),he(ft,{children:he(xM,{property:"fontSize",elements:m,scene:s,appState:n,elementsMap:c})})]})]})})})]})})},(e,t)=>e.sceneNonce===t.sceneNonce&&e.selectedElements===t.selectedElements&&e.appState.stats.panels===t.appState.stats.panels&&e.gridModeEnabled===t.gridModeEnabled&&e.appState.gridStep===t.appState.gridStep&&e.appState.croppingElementId===t.appState.croppingElementId);import{useCallback as n9,useEffect as yM,useState as vM}from"react";import{jsx as rc,jsxs as Vg}from"react/jsx-runtime";var i9=({sourceElementId:e,onClose:t,appState:o,scene:r,generateLinkForSelection:n=Sp})=>{let i=r.getNonDeletedElementsMap(),a=i.get(e)?.link??null,[s,l]=vM(a),[c,d]=vM(!1);yM(()=>{let m=ie(i,o),u=a;if(m.length>0&&n){let b=Ip(m,o);b&&(u=Rr(n(b.id,b.type)))}l(u)},[i,o,o.selectedElementIds,a,n]);let p=n9(()=>{if(s&&s!==i.get(e)?.link){let m=i.get(e);m&&r.mutateElement(m,{link:s})}if(!s&&c&&e){let m=i.get(e);m&&r.mutateElement(m,{link:null})}t?.()},[e,s,i,c,r,t]);return yM(()=>{let m=u=>{o.openDialog?.name==="elementLinkSelector"&&u.key===S.ENTER&&p(),o.openDialog?.name==="elementLinkSelector"&&u.key===S.ESCAPE&&t?.()};return window.addEventListener("keydown",m),()=>{window.removeEventListener("keydown",m)}},[o,t,p]),Vg("div",{className:"ElementLinkDialog",children:[Vg("div",{className:"ElementLinkDialog__header",children:[rc("h2",{children:h("elementLink.title")}),rc("p",{children:h("elementLink.desc")})]}),Vg("div",{className:"ElementLinkDialog__input",children:[rc(ji,{value:s??"",onChange:m=>{c||d(!0),l(m)},onKeyDown:m=>{m.key===S.ENTER&&p()},className:"ElementLinkDialog__input-field",selectOnRender:!0}),a&&s&&rc(ee,{type:"button",title:h("buttons.remove"),"aria-label":h("buttons.remove"),label:h("buttons.remove"),onClick:()=>{l(null),d(!0)},className:"ElementLinkDialog__remove",icon:Jt})]}),Vg("div",{className:"ElementLinkDialog__actions",children:[rc(oi,{label:h("buttons.cancel"),onClick:()=>{t?.()},style:{marginRight:10}}),rc(oi,{label:h("buttons.confirm"),onClick:p,actionType:"primary"})]})]})},wM=i9;import a9,{useState as s9}from"react";import{Fragment as l9,jsx as zE}from"react/jsx-runtime";var TM=({children:e,onClose:t})=>{let[o,r]=s9(!!e),{container:n}=tt(),i=a9.useCallback(()=>{r(!1),t&&t(),n?.focus()},[t,n]);return zE(l9,{children:o&&zE(_t,{size:"small",onCloseRequest:i,title:h("errorDialog.title"),children:zE("div",{style:{whiteSpace:"pre-wrap"},children:e})})})};import c9 from"react";import{Fragment as SM,jsx as X,jsxs as Qo}from"react/jsx-runtime";var d9=()=>Qo("div",{className:"HelpDialog__header",children:[Qo("a",{className:"HelpDialog__btn",href:"https://docs.excalidraw.com",target:"_blank",rel:"noopener",children:[X("div",{className:"HelpDialog__link-icon",children:Kp}),h("helpDialog.documentation")]}),Qo("a",{className:"HelpDialog__btn",href:"https://plus.excalidraw.com/blog",target:"_blank",rel:"noopener",children:[X("div",{className:"HelpDialog__link-icon",children:Kp}),h("helpDialog.blog")]}),Qo("a",{className:"HelpDialog__btn",href:"https://github.com/excalidraw/excalidraw/issues",target:"_blank",rel:"noopener noreferrer",children:[X("div",{className:"HelpDialog__link-icon",children:ed}),h("helpDialog.github")]}),Qo("a",{className:"HelpDialog__btn",href:"https://youtube.com/@excalidraw",target:"_blank",rel:"noopener noreferrer",children:[X("div",{className:"HelpDialog__link-icon",children:tx}),"YouTube"]})]}),m9=e=>Qo(SM,{children:[X("h3",{children:e.title}),X("div",{className:"HelpDialog__islands-container",children:e.children})]}),HE=e=>Qo("div",{className:`HelpDialog__island ${e.className}`,children:[X("h4",{className:"HelpDialog__island-title",children:e.caption}),X("div",{className:"HelpDialog__island-content",children:e.children})]});function*p9(e,t){let o=!0;for(let r of e)o||(yield t),o=!1,yield r}var u9=e=>e.replace(/\b[a-z]\b/,t=>t.toUpperCase()),q=({label:e,shortcuts:t,isOr:o=!0})=>{let r=t.map(n=>(n.endsWith("++")?[...n.slice(0,-2).split("+"),"+"]:n.split("+")).map(a=>X(h9,{children:u9(a)},a)));return Qo("div",{className:"HelpDialog__shortcut",children:[X("div",{children:e}),X("div",{className:"HelpDialog__key-container",children:[...p9(r,o?h("helpDialog.or"):"")]})]})},h9=e=>X("kbd",{className:"HelpDialog__key",...e}),CM=({onClose:e})=>{let t=ot(),o=c9.useCallback(()=>{e&&e()},[e]);return X(SM,{children:Qo(_t,{onCloseRequest:o,title:h("helpDialog.title"),className:"HelpDialog",children:[X(d9,{}),Qo(m9,{title:h("helpDialog.shortcuts"),children:[Qo(HE,{className:"HelpDialog__island--tools",caption:h("helpDialog.tools"),children:[X(q,{label:h("toolBar.hand"),shortcuts:[S.H]}),X(q,{label:h("toolBar.selection"),shortcuts:[S.V,S[1]]}),X(q,{label:h("toolBar.rectangle"),shortcuts:[S.R,S[2]]}),X(q,{label:h("toolBar.diamond"),shortcuts:[S.D,S[3]]}),X(q,{label:h("toolBar.ellipse"),shortcuts:[S.O,S[4]]}),X(q,{label:h("toolBar.arrow"),shortcuts:[S.A,S[5]]}),X(q,{label:h("toolBar.line"),shortcuts:[S.L,S[6]]}),X(q,{label:h("toolBar.freedraw"),shortcuts:[S.P,S[7]]}),X(q,{label:h("toolBar.text"),shortcuts:[S.T,S[8]]}),X(q,{label:h("toolBar.stickynote"),shortcuts:[S.N]}),X(q,{label:h("toolBar.image"),shortcuts:[S[9]]}),X(q,{label:h("toolBar.eraser"),shortcuts:[S.E,S[0]]}),X(q,{label:h("toolBar.frame"),shortcuts:[S.F]}),X(q,{label:h("toolBar.laser"),shortcuts:[S.K]}),X(q,{label:h("toolBar.bucketfill"),shortcuts:[S.B]}),X(q,{label:h("labels.eyeDropper"),shortcuts:[S.I,"Shift+S","Shift+G"]}),X(q,{label:h("helpDialog.editLineArrowPoints"),shortcuts:[z("CtrlOrCmd+Enter")]}),X(q,{label:h("helpDialog.editText"),shortcuts:[z("Enter")]}),X(q,{label:h("helpDialog.textNewLine"),shortcuts:[z("Enter"),z("Shift+Enter")]}),X(q,{label:h("helpDialog.textFinish"),shortcuts:[z("Esc"),z("CtrlOrCmd+Enter")]}),X(q,{label:h("helpDialog.curvedArrow"),shortcuts:["A",h("helpDialog.click"),h("helpDialog.click"),h("helpDialog.click")],isOr:!1}),X(q,{label:h("helpDialog.curvedLine"),shortcuts:["L",h("helpDialog.click"),h("helpDialog.click"),h("helpDialog.click")],isOr:!1}),X(q,{label:h("helpDialog.cropStart"),shortcuts:[h("helpDialog.doubleClick"),z("Enter")],isOr:!0}),X(q,{label:h("helpDialog.cropFinish"),shortcuts:[z("Enter"),z("Escape")],isOr:!0}),X(q,{label:h("toolBar.lock"),shortcuts:[S.Q]}),X(q,{label:h("helpDialog.preventBinding"),shortcuts:[z("CtrlOrCmd")]}),X(q,{label:h("toolBar.link"),shortcuts:[z("CtrlOrCmd+K")]}),X(q,{label:h("toolBar.convertElementType"),shortcuts:["Tab","Shift+Tab"],isOr:!0})]}),Qo(HE,{className:"HelpDialog__island--view",caption:h("helpDialog.view"),children:[X(q,{label:h("buttons.zoomIn"),shortcuts:[z("CtrlOrCmd++")]}),X(q,{label:h("buttons.zoomOut"),shortcuts:[z("CtrlOrCmd+-")]}),X(q,{label:h("buttons.resetZoom"),shortcuts:[z("CtrlOrCmd+0")]}),X(q,{label:h("helpDialog.zoomToFit"),shortcuts:["Shift+1"]}),X(q,{label:h("helpDialog.zoomToSelection"),shortcuts:["Shift+2"]}),X(q,{label:h("helpDialog.movePageUpDown"),shortcuts:["PgUp/PgDn"]}),X(q,{label:h("helpDialog.movePageLeftRight"),shortcuts:["Shift+PgUp/PgDn"]}),X(q,{label:h("buttons.zenMode"),shortcuts:[z("Alt+Z")]}),X(q,{label:h("buttons.objectsSnapMode"),shortcuts:[z("Alt+S")]}),X(q,{label:h("labels.toggleGrid"),shortcuts:[z("CtrlOrCmd+'")]}),X(q,{label:h("labels.viewMode"),shortcuts:[z("Alt+R")]}),t.isActionEnabled(Qn)&&X(q,{label:h("labels.toggleTheme"),shortcuts:[z("Alt+Shift+D")]}),X(q,{label:h("stats.fullTitle"),shortcuts:[z("Alt+/")]}),X(q,{label:h("search.title"),shortcuts:[it("searchMenu")]}),X(q,{label:h("commandPalette.title"),shortcuts:In?[it("commandPalette")]:[it("commandPalette"),it("commandPalette",1)]})]}),Qo(HE,{className:"HelpDialog__island--editor",caption:h("helpDialog.editor"),children:[X(q,{label:h("helpDialog.createFlowchart"),shortcuts:[z("CtrlOrCmd+Arrow Key")],isOr:!0}),X(q,{label:h("helpDialog.navigateFlowchart"),shortcuts:[z("Alt+Arrow Key")],isOr:!0}),X(q,{label:h("labels.moveCanvas"),shortcuts:[z(`Space+${h("helpDialog.drag")}`),z(`Wheel+${h("helpDialog.drag")}`)],isOr:!0}),X(q,{label:h("buttons.clearReset"),shortcuts:[z("CtrlOrCmd+Delete")]}),X(q,{label:h("labels.delete"),shortcuts:[z("Delete")]}),X(q,{label:h("labels.cut"),shortcuts:[z("CtrlOrCmd+X")]}),X(q,{label:h("labels.copy"),shortcuts:[z("CtrlOrCmd+C")]}),X(q,{label:h("labels.paste"),shortcuts:[z("CtrlOrCmd+V")]}),X(q,{label:h("labels.pasteAsPlaintext"),shortcuts:[z("CtrlOrCmd+Shift+V")]}),X(q,{label:h("labels.selectAll"),shortcuts:[z("CtrlOrCmd+A")]}),X(q,{label:h("labels.multiSelect"),shortcuts:[z(`Shift+${h("helpDialog.click")}`)]}),X(q,{label:h("helpDialog.deepSelect"),shortcuts:[z(`CtrlOrCmd+${h("helpDialog.click")}`)]}),X(q,{label:h("helpDialog.deepBoxSelect"),shortcuts:[z(`CtrlOrCmd+${h("helpDialog.drag")}`)]}),(sl||In)&&X(q,{label:h("labels.copyAsPng"),shortcuts:[z("Shift+Alt+C")]}),X(q,{label:h("labels.copyStyles"),shortcuts:[z("CtrlOrCmd+Alt+C")]}),X(q,{label:h("labels.pasteStyles"),shortcuts:[z("CtrlOrCmd+Alt+V")]}),X(q,{label:h("labels.sendToBack"),shortcuts:[Ro?z("CtrlOrCmd+Alt+["):z("CtrlOrCmd+Shift+[")]}),X(q,{label:h("labels.bringToFront"),shortcuts:[Ro?z("CtrlOrCmd+Alt+]"):z("CtrlOrCmd+Shift+]")]}),X(q,{label:h("labels.sendBackward"),shortcuts:[z("CtrlOrCmd+[")]}),X(q,{label:h("labels.bringForward"),shortcuts:[z("CtrlOrCmd+]")]}),X(q,{label:h("labels.alignTop"),shortcuts:[z("CtrlOrCmd+Shift+Up")]}),X(q,{label:h("labels.alignBottom"),shortcuts:[z("CtrlOrCmd+Shift+Down")]}),X(q,{label:h("labels.alignLeft"),shortcuts:[z("CtrlOrCmd+Shift+Left")]}),X(q,{label:h("labels.alignRight"),shortcuts:[z("CtrlOrCmd+Shift+Right")]}),X(q,{label:h("labels.duplicateSelection"),shortcuts:[z("CtrlOrCmd+D"),z(`Alt+${h("helpDialog.drag")}`)]}),X(q,{label:h("helpDialog.toggleElementLock"),shortcuts:[z("CtrlOrCmd+Shift+L")]}),X(q,{label:h("buttons.undo"),shortcuts:[z("CtrlOrCmd+Z")]}),X(q,{label:h("buttons.redo"),shortcuts:qy?[z("CtrlOrCmd+Y"),z("CtrlOrCmd+Shift+Z")]:[z("CtrlOrCmd+Shift+Z")]}),X(q,{label:h("labels.group"),shortcuts:[z("CtrlOrCmd+G")]}),X(q,{label:h("labels.ungroup"),shortcuts:[z("CtrlOrCmd+Shift+G")]}),X(q,{label:h("labels.flipHorizontal"),shortcuts:[z("Shift+H")]}),X(q,{label:h("labels.flipVertical"),shortcuts:[z("Shift+V")]}),X(q,{label:h("labels.showStroke"),shortcuts:[z("S")]}),X(q,{label:h("labels.showBackground"),shortcuts:[z("G")]}),X(q,{label:h("labels.showFonts"),shortcuts:[z("Shift+F")]}),X(q,{label:h("labels.decreaseFontSize"),shortcuts:[z("CtrlOrCmd+Shift+<")]}),X(q,{label:h("labels.increaseFontSize"),shortcuts:[z("CtrlOrCmd+Shift+>")]})]})]})]})})};import{useEffect as MM,useRef as AM,useState as hs}from"react";import{useCallback as g9,useRef as f9,useState as b9}from"react";var x9=2e3,IM=()=>{let[e,t]=b9(null),o=f9(0),r=()=>{clearTimeout(o.current),t("success"),o.current=window.setTimeout(()=>{t(null)},x9)},n=g9(()=>{t(null)},[]);return{copyStatus:e,resetCopyStatus:n,onCopy:r}};import E9 from"clsx";import{jsx as kM}from"react/jsx-runtime";var dm=({title:e,name:t,checked:o,onChange:r,disabled:n=!1})=>kM("div",{className:E9("Switch",{toggled:o,disabled:n}),children:kM("input",{name:t,id:t,title:e,type:"checkbox",checked:o,disabled:n,onChange:()=>r(!o),onKeyDown:i=>{i.key===" "&&r(!o)}})});import{jsx as bt,jsxs as ca}from"react/jsx-runtime";var y9=()=>ca("div",{children:[bt("h3",{children:h("canvasError.cannotShowPreview")}),bt("p",{children:bt("span",{children:h("canvasError.canvasTooBig")})}),ca("em",{children:["(",h("canvasError.canvasTooBigTip"),")"]})]}),v9=({appStateSnapshot:e,elementsSnapshot:t,files:o,actionManager:r,onExportImage:n,name:i,exportWithDarkMode:a})=>{let s=$e(t,e),[l,c]=hs(i),[d,p]=hs(s),[m,u]=hs(e.exportBackground),[b,f]=hs(e.exportEmbedScene),[x,v]=hs(e.exportScale),y=AM(null),E=AM(0),[w,C]=hs(null),{onCopy:I,copyStatus:A,resetCopyStatus:M}=IM();MM(()=>{M()},[l,m,a,x,b,M]);let{exportedElements:N,exportingFrame:P}=ja(t,e,d);return MM(()=>{let L=y.current;if(!L)return;let R=L.offsetWidth,H=L.offsetHeight;if(!R)return;let K=++E.current,F=()=>K!==E.current;return rs({data:{elements:N,appState:{...e,name:l,exportEmbedScene:b},files:o},config:{canvasBackgroundColor:m?e.viewBackgroundColor:!1,padding:fi,theme:a?"dark":"light",scale:x,maxWidthOrHeight:Math.max(R,H),exportingFrame:P}}).then(async U=>{if(!F()){try{await Fa(U)}catch(V){throw V.name==="CANVAS_POSSIBLY_TOO_BIG"?new Error(h("canvasError.canvasTooBig")):V}F()||(C(null),L.replaceChildren(U))}}).catch(U=>{F()||(console.error(U),C(U))}),()=>{E.current+=1}},[e,o,N,P,l,m,a,x,b]),ca("div",{className:"ImageExportModal",children:[bt("h3",{children:h("imageExportDialog.header")}),ca("div",{className:"ImageExportModal__preview",children:[bt("div",{className:"ImageExportModal__preview__canvas",ref:y,children:w&&bt(y9,{})}),bt("div",{className:"ImageExportModal__preview__filename",children:!Fs&&bt("input",{type:"text",className:"TextInput",value:l,style:{width:"30ch"},onChange:L=>{c(L.target.value),r.executeAction(nh,"ui",L.target.value)}})})]}),ca("div",{className:"ImageExportModal__settings",children:[bt("h3",{children:h("imageExportDialog.header")}),s&&bt(mm,{label:h("imageExportDialog.label.onlySelected"),name:"exportOnlySelected",children:bt(dm,{name:"exportOnlySelected",checked:d,onChange:L=>{p(L)}})}),bt(mm,{label:h("imageExportDialog.label.withBackground"),name:"exportBackgroundSwitch",children:bt(dm,{name:"exportBackgroundSwitch",checked:m,onChange:L=>{u(L),r.executeAction(ih,"ui",L)}})}),bt(mm,{label:h("imageExportDialog.label.darkMode"),name:"exportDarkModeSwitch",children:bt(dm,{name:"exportDarkModeSwitch",checked:a,onChange:L=>{r.executeAction(XC,"ui",L)}})}),bt(mm,{label:h("imageExportDialog.label.embedScene"),tooltip:h("imageExportDialog.tooltip.embedScene"),name:"exportEmbedSwitch",children:bt(dm,{name:"exportEmbedSwitch",checked:b,onChange:L=>{f(L),r.executeAction(ah,"ui",L)}})}),bt(mm,{label:h("imageExportDialog.label.scale"),name:"exportScale",children:bt(Tg,{name:"exportScale",value:x,onChange:L=>{v(L),r.executeAction(YC,"ui",L)},choices:Dm.map(L=>({value:L,label:`${L}\xD7`}))})}),ca("div",{className:"ImageExportModal__settings__buttons",children:[bt(Sr,{className:"ImageExportModal__settings__buttons__button",label:h("imageExportDialog.title.exportToPng"),onClick:()=>n(Am.png,N,{exportingFrame:P}),icon:pu,children:h("imageExportDialog.button.exportToPng")}),bt(Sr,{className:"ImageExportModal__settings__buttons__button",label:h("imageExportDialog.title.exportToSvg"),onClick:()=>n(Am.svg,N,{exportingFrame:P}),icon:pu,children:h("imageExportDialog.button.exportToSvg")}),(sl||In)&&bt(Sr,{className:"ImageExportModal__settings__buttons__button",label:h("imageExportDialog.title.copyPngToClipboard"),status:A,onClick:async()=>{await n(Am.clipboard,N,{exportingFrame:P}),I()},icon:Wa,children:h("imageExportDialog.button.copyPngToClipboard")})]})]})]})},mm=({label:e,children:t,tooltip:o,name:r})=>ca("div",{className:"ImageExportModal__settings__setting",title:e,children:[ca("label",{htmlFor:r,className:"ImageExportModal__settings__setting__label",children:[e,o&&bt(Mo,{label:o,long:!0,children:D1})]}),bt("div",{className:"ImageExportModal__settings__setting__content",children:t})]}),LM=({elements:e,appState:t,files:o,actionManager:r,onExportImage:n,onCloseRequest:i,name:a})=>{let[{appStateSnapshot:s,elementsSnapshot:l}]=hs(()=>({appStateSnapshot:Dr(t),elementsSnapshot:Dr(e)}));return bt(_t,{onCloseRequest:i,size:"wide",title:!1,children:bt(v9,{elementsSnapshot:l,appStateSnapshot:s,files:o,actionManager:r,onExportImage:n,name:a,exportWithDarkMode:t.exportWithDarkMode})})};import T9 from"react";import{jsx as w9}from"react/jsx-runtime";var UE={primary:{base:"var(--color-primary)",darker:"var(--color-primary-darker)",darkest:"var(--color-primary-darkest)"},lime:{base:"#74b816",darker:"#66a80f",darkest:"#5c940d"},pink:{base:"#d6336c",darker:"#c2255c",darkest:"#a61e4d"}},GE=({children:e,color:t})=>w9("div",{className:"Card",style:{"--card-color":UE[t].base,"--card-color-darker":UE[t].darker,"--card-color-darkest":UE[t].darkest},children:e});import{Fragment as S9,jsx as Kr,jsxs as Yg}from"react/jsx-runtime";var C9=({elements:e,appState:t,setAppState:o,files:r,actionManager:n,exportOpts:i,canvas:a,onCloseRequest:s})=>{let{onExportToBackend:l}=i;return Kr("div",{className:"ExportDialog ExportDialog--json",children:Yg("div",{className:"ExportDialog-cards",children:[i.saveFileToDisk&&Yg(GE,{color:"lime",children:[Kr("div",{className:"Card-icon",children:Fb}),Kr("h2",{children:h("exportDialog.disk_title")}),Yg("div",{className:"Card-details",children:[h("exportDialog.disk_details"),!Fs&&n.renderAction("changeProjectName")]}),Kr(ee,{className:"Card-button",type:"button",title:h("exportDialog.disk_button"),"aria-label":h("exportDialog.disk_button"),showAriaLabel:!0,onClick:()=>{n.executeAction(dl,"ui")}})]}),l&&Yg(GE,{color:"pink",children:[Kr("div",{className:"Card-icon",children:Ks}),Kr("h2",{children:h("exportDialog.link_title")}),Kr("div",{className:"Card-details",children:h("exportDialog.link_details")}),Kr(ee,{className:"Card-button",type:"button",title:h("exportDialog.link_button"),"aria-label":h("exportDialog.link_button"),showAriaLabel:!0,onClick:async()=>{try{be("export","link",`ui (${fv()})`),await l(e,t,r),s()}catch(c){o({errorMessage:c.message})}}})]}),i.renderCustomUI&&i.renderCustomUI(e,t,r,a)]})})},_M=({elements:e,appState:t,files:o,actionManager:r,exportOpts:n,canvas:i,setAppState:a})=>{let s=T9.useCallback(()=>{a({openDialog:null})},[a]);return Kr(S9,{children:t.openDialog?.name==="jsonExport"&&Kr(_t,{onCloseRequest:s,title:h("buttons.export"),children:Kr(C9,{elements:e,appState:t,setAppState:a,files:o,actionManager:r,onCloseRequest:s,exportOpts:n,canvas:i})})})};import I9 from"clsx";import{jsx as k9}from"react/jsx-runtime";var PM=e=>k9(ee,{className:I9("ToolIcon__LaserPointer",{"is-mobile":e.isMobile}),type:"toggle",size:"small",icon:Fr,checked:e.checked,title:`${e.title}`,"aria-label":`${e.title}`,"data-testid":"toolbar-LaserPointer",onSelect:()=>e.onChange?.()});import NM from"clsx";import{useState as _9}from"react";import{jsx as WE}from"react/jsx-runtime";var We=e=>Array.isArray(e)?`<kbd>${e.map(z).join(" + ")}</kbd>`:`<kbd>${z(e)}</kbd>`,M9=({appState:e,isMobile:t,editorInterface:o,app:r})=>{let{activeTool:n,isResizing:i,isRotating:a,lastPointerDownWith:s}=e,l=e.multiElement!==null;if(e.openSidebar?.name===uo.name&&e.openSidebar.tab===Cn&&e.searchMatches?.matches.length)return h("hints.dismissSearch",{shortcut:We("Escape")});if(e.openSidebar&&!o.canFitSidebar)return null;if(pr(e))return h("hints.eraserRevert",{shortcut:We("Alt")});let c=r.scene.getSelectedElements(e);if(e.selectedLinearElement?.isDragging&&c[0]?.type==="arrow")return h("hints.arrowBindModifiers",{shortcut_1:We("Ctrl"),shortcut_2:We("Alt")});if(n.type==="arrow"||n.type==="line")return l?h("hints.linearElementMulti",{shortcut_1:We("Escape"),shortcut_2:We("Enter")}):n.type==="arrow"?h("hints.arrowTool",{shortcut:We("A")}):h("hints.linearElement");if(n.type==="freedraw")return h("hints.freeDraw");if(n.type==="text")return h("hints.text");if(n.type==="embeddable")return h("hints.embeddable");if(n.type==="stickynote")return h("hints.stickynote");if(n.type==="autoshape")return h("hints.autoshape");if(i&&s==="mouse"&&c.length===1){let d=c[0];return Me(d)&&d.points.length===2?h("hints.lockAngle",{shortcut:We("Shift")}):et(d)&&r.activeResizeHandle?.length===2?h("hints.resizeStickyNote",{shortcut_1:We("Shift"),shortcut_2:We("Alt")}):nt(d)?h("hints.resizeImage",{shortcut_1:We("Shift"),shortcut_2:We("Alt")}):h("hints.resize",{shortcut_1:We("Shift"),shortcut_2:We("Alt")})}if(a&&s==="mouse")return h("hints.rotate",{shortcut:We("Shift")});if(c.length===1&&J(c[0]))return h("hints.text_selected",{shortcut:We("Enter")});if(e.editingTextElement)return h("hints.text_editing",{shortcut_1:We("Escape"),shortcut_2:We(["CtrlOrCmd","Enter"])});if(e.croppingElementId)return h("hints.leaveCropEditor",{shortcut_1:We("Enter"),shortcut_2:We("Escape")});if(c.length===1&&nt(c[0]))return h("hints.enterCropEditor",{shortcut:We("Enter")});if(n.type==="selection"){if(e.selectionElement&&!c.length&&!e.editingTextElement&&!e.selectedLinearElement?.isEditing)return h("hints.deepBoxSelect",{shortcut:We("CtrlOrCmd")});if(ta(r)&&e.selectedElementsAreBeingDragged)return h("hints.disableSnapping",{shortcut:We("CtrlOrCmd")});if(!c.length&&!t)return h("hints.canvasPanning",{shortcut_1:We(h("keys.mmb")),shortcut_2:We("Space")});if(c.length===1){if(Me(c[0]))return Ee(c[0])&&e.selectedLinearElement?.elementId===c[0].id&&(e.selectedLinearElement.hoverPointIndex===0||e.selectedLinearElement.hoverPointIndex===c[0].points.length-1)?h("hints.toggleArrowhead"):e.selectedLinearElement?.isEditing?e.selectedLinearElement.selectedPointsIndices?h("hints.lineEditor_pointSelected",{shortcut_1:We("Delete"),shortcut_2:We(["CtrlOrCmd","D"])}):h("hints.lineEditor_nothingSelected",{shortcut_1:We("Shift"),shortcut_2:We("Alt")}):ct(c[0])?h("hints.lineEditor_line_info",{shortcut:We("Enter")}):h("hints.lineEditor_info",{shortcut_1:We("CtrlOrCmd"),shortcut_2:We(["CtrlOrCmd","Enter"])});if(!e.newElement&&!e.selectedElementsAreBeingDragged&&Ln(c[0])){let d=h("hints.bindTextToElement",{shortcut:We("Enter")}),p=h("hints.createFlowchart",{shortcut:We(["CtrlOrCmd","\u2191\u2193"])});return qm(c[0])?s2(c[0],r.scene.getNonDeletedElementsMap())?[d,p]:[d,p]:d}}}return null},DM=({appState:e,isMobile:t,editorInterface:o,app:r})=>{let n=M9({appState:e,isMobile:t,editorInterface:o,app:r});if(!n)return null;let a=(Array.isArray(n)?n.map(s=>s.replace(/\. ?$/,"")).join(", "):n).split(/(<kbd>[^<]+<\/kbd>)/g).map((s,l)=>{if(l%2===1){let c=s[0]==="<"&&s.match(/^<kbd>([^<]+)<\/kbd>$/);return WE("kbd",{children:c?c[1]:s},l)}return s});return WE("div",{className:"HintViewer",children:WE("span",{children:a})})};import A9 from"clsx";import{jsx as L9}from"react/jsx-runtime";var RM=e=>L9(ee,{className:A9("ToolIcon__lock",{"is-mobile":e.isMobile}),type:"toggle",icon:e.checked?za:Ri,checked:e.checked,disabled:e.disabled,title:`${e.title} \u2014 Q`,"aria-label":`${e.title}`,"data-testid":"toolbar-lock",onSelect:()=>e.onChange?.()});import{Fragment as D9,jsx as Xe,jsxs as pm}from"react/jsx-runtime";var P9=({app:e,activeTool:t,setAppState:o,UIOptions:r})=>{let[n,i]=_9(!1),a=Kt()==="full",{TTDDialogTriggerTunnel:s}=at(),l=t.type==="image",c=t.type==="frame",d=t.type==="autoshape",p=t.type==="laser",m=t.type==="bucketfill",u=a&&t.type==="lasso"&&e.state.preferredSelectionTool.type!=="lasso",b=t.type==="embeddable";return pm(pe,{open:n,children:[Xe(pe.Trigger,{className:NM("App-toolbar__extra-tools-trigger",{"App-toolbar__extra-tools-trigger--selected":l||c||b||a&&d||u||m||p&&!e.props.isCollaborating}),onToggle:()=>{i(!n),o({openMenu:null,openPopup:null})},title:h("toolBar.extraTools"),children:l?Wn:c?Br:b?Vn:a&&d?Bi:p&&!e.props.isCollaborating?Fr:u?Gs:m?Co:Di}),pm(pe.Content,{onClickOutside:()=>i(!1),onSelect:()=>i(!1),className:"App-toolbar__extra-tools-dropdown",children:[r.tools?.image!==!1&&Xe(pe.Item,{onSelect:()=>e.setActiveTool({type:"image"}),icon:Wn,shortcut:S[9],"data-testid":"toolbar-image",selected:l,disabled:Mt(e,"image"),children:h("toolBar.image")}),Xe(pe.Item,{onSelect:()=>e.setActiveTool({type:"frame"}),icon:Br,shortcut:S.F.toLocaleUpperCase(),"data-testid":"toolbar-frame",selected:c,disabled:Mt(e,"frame"),children:h("toolBar.frame")}),Xe(pe.Item,{onSelect:()=>e.setActiveTool({type:"embeddable"}),icon:Vn,"data-testid":"toolbar-embeddable",selected:b,disabled:Mt(e,"embeddable"),children:h("toolBar.embeddable")}),Xe(pe.Item,{onSelect:()=>e.setActiveTool({type:"autoshape"}),icon:Bi,shortcut:Sd("autoshape"),"data-testid":"toolbar-autoshape",selected:d,disabled:Mt(e,"autoshape"),children:h("toolBar.autoshape")}),Xe(pe.Item,{onSelect:()=>e.setActiveTool({type:"laser"}),icon:Fr,"data-testid":"toolbar-laser",selected:p,shortcut:S.K.toLocaleUpperCase(),disabled:Mt(e,"laser"),children:h("toolBar.laser")}),Xe(pe.Item,{onSelect:()=>e.setActiveTool({type:"bucketfill"}),icon:Co,"data-testid":"toolbar-bucketfill",selected:m,shortcut:S.B.toLocaleUpperCase(),disabled:Mt(e,"bucketfill"),children:h("toolBar.bucketfill")}),a&&Xe(pe.Item,{onSelect:()=>e.setActiveTool({type:"lasso"}),icon:Gs,"data-testid":"toolbar-lasso",selected:u,disabled:Mt(e,"lasso"),children:h("toolBar.lasso")}),Xe("div",{style:{margin:"6px 0",fontSize:14,fontWeight:600},children:"Generate"}),e.props.aiEnabled!==!1&&Xe(s.Out,{}),Xe(pe.Item,{onSelect:()=>e.setOpenDialog({name:"ttd",tab:"mermaid"}),icon:Va,"data-testid":"toolbar-embeddable",children:h("toolBar.mermaidToExcalidraw")}),e.props.aiEnabled!==!1&&e.plugins.diagramToCode&&Xe(pe.Item,{onSelect:()=>e.onMagicframeToolSelect(),icon:Fi,"data-testid":"toolbar-magicframe",badge:Xe(pe.Item.Badge,{children:"AI"}),disabled:Mt(e,"magicframe"),children:h("toolBar.magicframe")})]})]})},OM=({app:e,appState:t,setAppState:o,UIOptions:r,onPenModeToggle:n,onLockToggle:i,heading:a})=>{let s=Le(),l=Kt()==="compact",c=t.activeTool,d={app:e,activeTool:c};return pm(Ct,{padding:1,className:NM("App-toolbar",{"zen-mode":t.zenModeEnabled,"App-toolbar--compact":l}),"data-viewport-ui":"top",children:[Xe(DM,{appState:t,isMobile:s.formFactor==="phone",editorInterface:s,app:e}),a,pm(co.Row,{gap:l?.5:1,children:[!l&&Xe(Vl,{checked:t.penMode,onChange:()=>n(null),title:h("toolBar.penMode"),penDetected:t.penDetected}),e.props.activeTool==null&&pm(D9,{children:[Xe(RM,{checked:t.activeTool.locked,onChange:i,title:h("toolBar.lock"),disabled:e.props.activeTool!=null}),Xe("div",{className:"App-toolbar__divider",style:{marginRight:"0.25rem"}})]}),Xe(Xu,{...d,hideKeyBinding:!0}),l?Xe(ju,{...d,setAppState:o}):t.preferredSelectionTool.type==="lasso"?Xe(PC,{...d}):Xe(_C,{...d}),Xe(wC,{...d}),Xe(TC,{...d}),Xe(CC,{...d}),Xe(SC,{...d}),Xe(IC,{...d}),l?Xe(qu,{...d}):Xe(kC,{...d}),Xe($u,{...d}),Xe(MC,{...d}),Xe(Zu,{...d}),Xe("div",{className:"App-toolbar__divider",style:{marginLeft:"0.25rem"}}),Xe(P9,{app:e,activeTool:c,setAppState:o,UIOptions:r})]})]})};import{Fragment as VE,jsx as de,jsxs as Ko}from"react/jsx-runtime";var N9=({UIOptions:e})=>Ko(yo,{__fallback:!0,children:[de(yo.DefaultItems.LoadScene,{}),de(yo.DefaultItems.SaveToActiveFile,{}),e.canvasActions.export&&de(yo.DefaultItems.Export,{}),e.canvasActions.saveAsImage&&de(yo.DefaultItems.SaveAsImage,{}),de(yo.DefaultItems.SearchMenu,{}),de(yo.DefaultItems.Help,{}),de(yo.DefaultItems.ClearCanvas,{}),de(yo.Separator,{}),de(yo.Group,{title:"Excalidraw links",children:de(yo.DefaultItems.Socials,{})}),de(yo.Separator,{}),de(yo.DefaultItems.ToggleTheme,{allowSystemTheme:!1}),de(yo.DefaultItems.ChangeCanvasBackground,{})]}),O9=()=>Ko(Mg,{__fallback:!0,children:[de(Mg.Actions.SaveToDisk,{}),de(Mg.Actions.ExportToImage,{})]}),B9=({actionManager:e,appState:t,files:o,setAppState:r,elements:n,canvas:i,onLockToggle:a,onPenModeToggle:s,showExitZenModeBtn:l,renderTopLeftUI:c,renderTopRightUI:d,renderCustomStats:p,UIOptions:m,onExportImage:u,renderWelcomeScreen:b,children:f,app:x,defaultUIEnabled:v,zoomUIEnabled:y,scrollBackToContentUIEnabled:E,isCollaborating:w,generateLinkForSelection:C,currentUserControls:I})=>{let A=Le(),M=ko(),P=Kt()==="compact",L=g3(),R=P?{menuTopGap:4,toolbarColGap:4,toolbarRowGap:1,toolbarInnerRowGap:.5,islandPadding:1,collabMarginLeft:8}:{menuTopGap:6,toolbarColGap:4,toolbarRowGap:1,toolbarInnerRowGap:1,islandPadding:1,collabMarginLeft:8},H=L.tunnelsJotai.Provider,[K,F]=le(Ho),U=()=>m.canvasActions.export?de(_M,{elements:n,appState:t,files:o,actionManager:e,exportOpts:m.canvasActions.export,canvas:i,setAppState:r}):null,V=()=>!m.canvasActions.saveAsImage||t.openDialog?.name!=="imageExport"?null:de(LM,{elements:n,appState:t,files:o,actionManager:e,onExportImage:u,onCloseRequest:()=>r({openDialog:null}),name:x.getName()}),$=()=>Ko("div",{style:{position:"relative"},children:[Ko("div",{className:"excalidraw-ui-top-left",children:[c?.(!1,t),de(L.MainMenuTunnel.Out,{})]}),b&&de(L.WelcomeScreenMenuHintTunnel.Out,{})]}),oe=()=>de(jd,{heading:"selectedShapeActions",className:nc("selected-shape-actions zen-mode-transition",{"transition-left":t.zenModeEnabled}),children:P?de(Ct,{className:nc("compact-shape-actions-island"),padding:0,"data-viewport-ui":"side","data-viewport-ui-name":"stylesPanel",style:{maxHeight:`${t.height-166}px`},children:de(UI,{appState:t,elementsMap:x.scene.getNonDeletedElementsMap(),renderAction:e.renderAction,app:x,setAppState:r})}):de(Ct,{className:Qe.SHAPE_ACTIONS_MENU,padding:2,style:{maxHeight:`${t.height-166}px`},"data-viewport-ui":"side","data-viewport-ui-name":"stylesPanel",children:de(OI,{appState:t,elementsMap:x.scene.getNonDeletedElementsMap(),renderAction:e.renderAction,app:x})})}),re=()=>{let ve=v&&I2(t,n),Ve=v&&t.stats.open&&!t.zenModeEnabled&&!t.viewModeEnabled&&t.openDialog?.name!=="elementLinkSelector";return de(xg,{side:"top",children:Ko("div",{className:"App-menu App-menu_top",children:[Ko(co.Col,{gap:R.menuTopGap,className:nc("App-menu_top__left"),children:[$(),v&&de("div",{className:nc("selected-shape-actions-container",{"selected-shape-actions-container--compact":P}),children:ve&&oe()}),v&&P&&!t.viewModeEnabled&&ve&&de(Vl,{checked:t.penMode,onChange:()=>s(null),title:h("toolBar.penMode"),isMobile:!0,penDetected:t.penDetected})]}),v&&!t.viewModeEnabled&&t.openDialog?.name!=="elementLinkSelector"&&de(jd,{heading:"shapes",className:"shapes-section",children:Se=>Ko("div",{style:{position:"relative"},children:[b&&de(L.WelcomeScreenToolbarHintTunnel.Out,{}),de(co.Col,{gap:R.toolbarColGap,align:"start",children:Ko(co.Row,{gap:R.toolbarRowGap,className:nc("App-toolbar-container",{"zen-mode":t.zenModeEnabled}),children:[de(OM,{app:x,appState:t,setAppState:r,UIOptions:m,onPenModeToggle:s,onLockToggle:a,heading:Se}),w&&de(Ct,{style:{marginLeft:R.collabMarginLeft,alignSelf:"center",height:"fit-content"},children:de(PM,{title:h("toolBar.laser"),checked:t.activeTool.type===xt.laser,onChange:()=>x.setActiveTool({type:xt.laser}),isMobile:!0})})]})})]})}),Ko("div",{className:nc("layer-ui__wrapper__top-right zen-mode-transition",{"transition-right":t.zenModeEnabled,"layer-ui__wrapper__top-right--compact":P}),children:[v&&t.collaborators.size>0&&de(vg,{collaborators:t.collaborators,userToFollow:M.userToFollow?.socketId||null,currentUserControls:I}),d?.(A.formFactor==="phone",t),!t.viewModeEnabled&&t.openDialog?.name!=="elementLinkSelector"&&(!G||t.openSidebar?.name!==uo.name)&&de(L.DefaultSidebarTriggerTunnel.Out,{}),Ve&&de(cm,{app:x,onClose:()=>{e.executeAction(ti)},renderCustomStats:p})]})]})})},ke=()=>v?de(Ag,{__fallback:!0,onDock:ve=>{be("sidebar",`toggleDock (${ve?"dock":"undock"})`,`(${A.formFactor==="phone"?"mobile":"desktop"})`)}}):null,G=zs(Jd),Z=!!(t.openSidebar&&G&&A.canFitSidebar),Re=Ko(VE,{children:[f,v&&Ko(VE,{children:[de(N9,{UIOptions:m}),de(Ag.Trigger,{__fallback:!0,icon:cx,title:jt(h("toolBar.library")),onToggle:ve=>{ve&&be("sidebar",`${uo.name} (open)`,`button (${A.formFactor==="phone"?"mobile":"desktop"})`)},tab:uo.defaultTab})]}),de(O9,{}),t.openDialog?.name==="ttd"&&de(Ug,{__fallback:!0}),v&&t.isLoading&&de(fg,{delay:250}),v&&t.errorMessage&&de(TM,{onClose:()=>r({errorMessage:null}),children:t.errorMessage}),v&&K&&A.formFactor!=="phone"&&de(mT,{colorPickerType:K.colorPickerType,onCancel:()=>{F(null)},onChange:(ve,Ve,Se,{altKey:Ze})=>{if(ve!=="elementBackground"&&ve!=="elementStroke")return;let xe=Ze&&K.swapPreviewOnAlt?ve==="elementBackground"?"strokeColor":"backgroundColor":ve==="elementBackground"?"backgroundColor":"strokeColor";if(Se.length){let st=te(n),no=ie(n,t,{includeBoundTextElement:xe==="strokeColor"});for(let Zt of no)bo(Zt,st,qr(Zt,xe,Ve,st)),dr.delete(Zt);x.scene.triggerUpdate()}else r($a(Jn(t,n,xe),Ve))},onSelect:(ve,Ve)=>{F(Se=>Se?.keepOpenOnAlt&&Ve.altKey?Se:null),K?.onSelect?.(ve,Ve)}}),t.openDialog?.name==="help"&&de(CM,{onClose:()=>{r({openDialog:null})}}),de(XI,{}),v&&t.openDialog?.name==="elementLinkSelector"&&de(wM,{sourceElementId:t.openDialog.sourceElementId,onClose:()=>{r({openDialog:null})},scene:x.scene,appState:t,generateLinkForSelection:C}),de(L.OverwriteConfirmDialogTunnel.Out,{}),V(),U(),v&&t.openDialog?.name==="charts"&&de(C3,{data:t.openDialog.data,rawText:t.openDialog.rawText,onClose:()=>r({openDialog:null})}),A.formFactor==="phone"&&de(E3,{app:x,appState:t,elements:n,actionManager:e,renderJSONExportDialog:U,renderImageExportDialog:V,setAppState:r,onPenModeToggle:s,renderTopLeftUI:c,renderTopRightUI:d,renderSidebars:ke,renderWelcomeScreen:b,defaultUIEnabled:v,scrollBackToContentUIEnabled:E}),A.formFactor!=="phone"&&Ko(VE,{children:[M.viewportStatusFrame?.border&&de(hg,{border:M.viewportStatusFrame.border,style:Z?{right:"calc(var(--right-sidebar-width) - var(--space-factor) * 2)"}:void 0}),Ko("div",{className:"layer-ui__wrapper",style:Z?{width:"calc(100% - var(--right-sidebar-width))"}:{},children:[b&&de(L.WelcomeScreenCenterTunnel.Out,{}),re(),de(_3,{appState:t,actionManager:e,showExitZenModeBtn:l,renderWelcomeScreen:b,defaultUIEnabled:v,zoomUIEnabled:y}),(t.toast||E&&t.scrolledOutside||M.viewportStatusFrame?.label)&&Ko("div",{className:"floating-status-stack",children:[t.toast&&de(Qu,{message:t.toast.message,onClose:()=>r({toast:null}),duration:t.toast.duration,closable:t.toast.closable}),!t.toast&&E&&t.scrolledOutside&&de("button",{type:"button",className:"scroll-back-to-content",onClick:()=>{r(ve=>({...Os(n,ve)}))},children:h("buttons.scrollBackToContent")}),M.viewportStatusFrame?.label&&de(gg,{label:M.viewportStatusFrame.label,border:M.viewportStatusFrame.border})]})]}),ke()]})]});return de(fx.Provider,{value:t,children:de(H,{children:de(Y0.Provider,{value:L,children:Re})})})},BM=e=>{let{cursorButton:t,scrollX:o,scrollY:r,zoom:n,shouldCacheIgnoreZoom:i,snapLines:a,originSnapOffset:s,suggestedBinding:l,frameToHighlight:c,elementsToHighlight:d,...p}=e;return p},F9=(e,t)=>{if(e.children!==t.children)return!1;let{canvas:o,appState:r,...n}=e,{canvas:i,appState:a,...s}=t;return Dt(BM(r),BM(a),{selectedElementIds:Dt,selectedGroupIds:Dt})&&Dt(n,s)},FM=R9.memo(B9,F9);import z9 from"clsx";import{jsx as H9}from"react/jsx-runtime";var Kg=e=>H9(ee,{className:z9("ToolIcon__MagicButton",{"is-mobile":e.isMobile}),type:"toggle",size:"small",icon:e.icon,checked:e.checked,title:`${e.title}`,"aria-label":`${e.title}`,onSelect:()=>e.onChange?.()});import{useEffect as U9,useRef as G9}from"react";import{jsx as zM}from"react/jsx-runtime";var HM=({trails:e})=>{let t=G9(null);return U9(()=>{if(t.current)for(let o of e)o.start(t.current);return()=>{for(let o of e)o.stop()}},e),zM("div",{className:"SVGLayer",children:zM("svg",{ref:t})})};import dO,{useEffect as mO,useRef as jM}from"react";var W9="#ff6b6b",V9="#ff9090",Y9="#da5b5b",UM=1,GM=2,WM=(e,t)=>{if(!t.snapLines.length)return;let o=t.theme===Q.LIGHT?W9:t.zenModeEnabled?Y9:V9,r=(t.zenModeEnabled?UM*1.5:UM)/t.zoom.value;e.save(),e.translate(t.scrollX,t.scrollY);for(let n of t.snapLines)n.type==="pointer"?(e.lineWidth=r,e.strokeStyle=o,X9(n,e,t)):n.type==="gap"?(e.lineWidth=r,e.strokeStyle=o,$9(n.points[0],n.points[1],n.direction,t,e)):n.type==="points"&&(e.lineWidth=r,e.strokeStyle=o,K9(n,e,t));e.restore()},K9=(e,t,o)=>{if(!o.zenModeEnabled){let r=e.points[0],n=e.points[e.points.length-1];Ar(r,n,t)}for(let r of e.points)VM(r,o,t)},X9=(e,t,o)=>{VM(e.points[0],o,t),o.zenModeEnabled||Ar(e.points[0],e.points[1],t)},VM=([e,t],o,r)=>{r.save();let n=(o.zenModeEnabled?GM*1.5:GM)/o.zoom.value;r.beginPath(),r.moveTo(e-n,t-n),r.lineTo(e+n,t+n),r.moveTo(e+n,t-n),r.lineTo(e-n,t+n),r.stroke(),r.restore()},Ar=(e,t,o)=>{o.beginPath(),o.lineTo(e[0],e[1]),o.lineTo(t[0],t[1]),o.stroke()},$9=(e,t,o,r,n)=>{let i=8/r.zoom.value,a=i/2,s=i/4;if(o==="horizontal"){let l=[(e[0]+t[0])/2,e[1]];r.zenModeEnabled||Ar(_(e[0],e[1]-i),_(e[0],e[1]+i),n),Ar(_(l[0]-s,l[1]-a),_(l[0]-s,l[1]+a),n),Ar(_(l[0]+s,l[1]-a),_(l[0]+s,l[1]+a),n),r.zenModeEnabled||(Ar(_(t[0],t[1]-i),_(t[0],t[1]+i),n),Ar(e,t,n))}else{let l=[e[0],(e[1]+t[1])/2];r.zenModeEnabled||Ar(_(e[0]-i,e[1]),_(e[0]+i,e[1]),n),Ar(_(l[0]-a,l[1]-s),_(l[0]+a,l[1]-s),n),Ar(_(l[0]-a,l[1]+s),_(l[0]+a,l[1]+s),n),r.zenModeEnabled||(Ar(_(t[0]-i,t[1]),_(t[0]+i,t[1]),n),Ar(e,t,n))}};var ic={[Q.LIGHT]:"106, 189, 252",[Q.DARK]:"104, 182, 240"},Z9={[Q.LIGHT]:"rgba(65, 65, 65, 0.5)",[Q.DARK]:"rgba(237, 237, 237, 0.8)"},j9={[Q.LIGHT]:{focus:"rgba(255, 124, 0, 0.4)",match:"rgba(255, 226, 0, 0.4)"},[Q.DARK]:{focus:"rgba(250, 123, 53, 0.4)",match:"rgba(221, 181, 136, 0.4)"}},zt=(e,t)=>Ut(e,t===Q.DARK),q9=(e,t)=>{lt(t.selectedLinearElement,"selectedLinearElement is null");let{segmentMidPointHoveredCoords:o}=t.selectedLinearElement;lt(o,"midPointCoords is null"),Xg(o,e,t)},J9=(e,t,o)=>{let{elementId:r,hoverPointIndex:n}=t.selectedLinearElement;if(t.selectedLinearElement?.isEditing&&t.selectedLinearElement?.selectedPointsIndices?.includes(n)||t.selectedLinearElement?.isDragging)return;let i=j.getElement(r,o);if(!i)return;let a=j.getPointAtIndexGlobalCoordinates(i,n,o);Xg(a,e,t)},Xg=(e,t,o)=>{t.save(),t.translate(o.scrollX,o.scrollY),t.fillStyle=zt("rgba(105, 101, 219, 0.4)",o.theme),Vc(t,e[0],e[1],j.POINT_HANDLE_SIZE/o.zoom.value,!1),t.restore()},Q9=(e,t,o)=>{let{elementId:r,anchor:n}=t.hoveredArrowTextAnchor,i=o.get(r);if(!i||!Ee(i)||i.isDeleted)return;let a=n==="label"?j.getBoundTextElementCenter(i,o):j.getPointAtIndexGlobalCoordinates(i,n==="start"?0:-1,o);Xg(a,e,t)},YE=(e,t,o,r,n,i,a)=>{e.strokeStyle=zt("#5e5ad8",t.theme),e.setLineDash([]),e.fillStyle=zt("rgba(255, 255, 255, 0.9)",t.theme),n?e.fillStyle=zt("rgba(134, 131, 226, 0.9)",t.theme):i&&(e.fillStyle=zt("rgba(177, 151, 252, 0.7)",t.theme)),Vc(e,o[0],o[1],(a?r*(t.selectedLinearElement?.isEditing?1.5:2):r)/t.zoom.value,!i,!a||n)},eO=(e,t,o,r,n,i=!1)=>{let a=t.element.frameId&&o.get(t.element.frameId);switch(a&&ae(a)&&(e.translate(a.x,a.y),e.beginPath(),rt.radius&&e.roundRect?e.roundRect(-1,-1,a.width+1,a.height+1,rt.radius/r.zoom.value):e.rect(-1,-1,a.width+1,a.height+1),e.clip(),e.translate(-a.x,-a.y)),t.element.type){case"magicframe":case"frame":e.save(),e.translate(t.element.x,t.element.y),e.lineWidth=rt.strokeWidth/r.zoom.value,e.strokeStyle=`rgba(${ic[r.theme]}, 1)`,rt.radius&&e.roundRect?(e.beginPath(),e.roundRect(0,0,t.element.width,t.element.height,rt.radius/r.zoom.value),e.stroke(),e.closePath()):e.strokeRect(0,0,t.element.width,t.element.height),e.restore();break;default:e.save();let s=Da(t.element,o);switch(e.translate(s[0],s[1]),e.rotate(t.element.angle),e.translate(-s[0],-s[1]),e.translate(t.element.x,t.element.y),e.lineWidth=Je(1.75,t.element.strokeWidth,4)/Math.max(.25,r.zoom.value),e.strokeStyle=`rgba(${ic[r.theme]}, 1)`,t.element.type){case"ellipse":e.beginPath(),e.ellipse(t.element.width/2,t.element.height/2,t.element.width/2,t.element.height/2,0,0,2*Math.PI),e.closePath(),e.stroke();break;case"diamond":{let[l,c]=np(t.element);l.forEach(d=>{e.beginPath(),e.moveTo(d[0][0]-t.element.x,d[0][1]-t.element.y),e.lineTo(d[1][0]-t.element.x,d[1][1]-t.element.y),e.stroke()}),c.forEach(d=>{let[p,m,u,b]=d;e.beginPath(),e.moveTo(p[0]-t.element.x,p[1]-t.element.y),e.bezierCurveTo(m[0]-t.element.x,m[1]-t.element.y,u[0]-t.element.x,u[1]-t.element.y,b[0]-t.element.x,b[1]-t.element.y),e.stroke()})}break;default:{let[l,c]=Bf(t.element);l.forEach(d=>{e.beginPath(),e.moveTo(d[0][0]-t.element.x,d[0][1]-t.element.y),e.lineTo(d[1][0]-t.element.x,d[1][1]-t.element.y),e.stroke()}),c.forEach(d=>{let[p,m,u,b]=d;e.beginPath(),e.moveTo(p[0]-t.element.x,p[1]-t.element.y),e.bezierCurveTo(m[0]-t.element.x,m[1]-t.element.y,u[0]-t.element.x,u[1]-t.element.y,b[0]-t.element.x,b[1]-t.element.y),e.stroke()})}break}e.restore();break}if(r.isMidpointSnappingEnabled&&!r.gridModeEnabled&&!i&&(ae(t.element)||Sa(t.element))){let s=r.selectedLinearElement,l=s?.elementId&&j.getElement(s?.elementId,o),c=n&&La({point:n,element:t.element,elementsMap:o,threshold:0,overrideShouldTestInside:!0}),d=l&&He(l)||r.activeTool.type==="arrow"&&r.currentItemArrowType==="elbow";if(!c||d){e.save();let p=Da(t.element,o),m;if(t.element.type==="diamond"){let x=Da(t.element,o);m=Jv(t.element).map(v=>{let y=uf(v,.5),E=Ae(y,x,t.element.angle);return _(E[0],E[1])})}else m=[{x:t.element.width,y:t.element.height/2},{x:t.element.width/2,y:t.element.height},{x:0,y:t.element.height/2},{x:t.element.width/2,y:0}].map(v=>{let y=_(v.x+t.element.x,v.y+t.element.y),E=Ae(y,p,t.element.angle);return _(E[0],E[1])});let u=n&&m.reduce((x,v,y)=>{let E=Po(v,n);return y===-1||E<x.distance?{idx:y,distance:E}:x},{idx:-1,distance:1/0}),b=4/r.zoom.value,f=ki(r.zoom)+t.element.strokeWidth/2;m.forEach((x,v)=>{let y=(!c||d)&&u?.idx===v&&u.distance<=f,E=!y&&(d||v===u?.idx&&u.distance<=f*2);y?(e.fillStyle=`rgba(${ic[r.theme]}, 1)`,e.beginPath(),e.arc(x[0],x[1],b,0,2*Math.PI),e.fill()):E&&(e.fillStyle=Z9[r.theme],e.beginPath(),e.arc(x[0],x[1],b,0,2*Math.PI),e.fill())}),e.restore()}}},tO=(e,t,o,r,n,i,a)=>{let s=e.state.bindMode==="orbit"&&e.bindModeHandler!==null,l=xi-(a?.runtime??(s?0:xi)),c=Je(1/xi*l,1e-4,1),d=o.strokeWidth/2,p=o.frameId&&r.get(o.frameId);switch(p&&ae(p)&&(t.translate(p.x,p.y),t.beginPath(),rt.radius&&t.roundRect?t.roundRect(-1,-1,p.width+1,p.height+1,rt.radius/n.zoom.value):t.rect(-1,-1,p.width+1,p.height+1),t.clip(),t.translate(-p.x,-p.y)),o.type){case"magicframe":case"frame":t.save(),t.translate(o.x,o.y),t.lineWidth=rt.strokeWidth/n.zoom.value,t.strokeStyle=`rgba(${ic[n.theme]}, ${c})`,rt.radius&&t.roundRect?(t.beginPath(),t.roundRect(0,0,o.width,o.height,rt.radius/n.zoom.value),t.stroke(),t.closePath()):t.strokeRect(0,0,o.width,o.height),t.restore();break;default:t.save();let u=Da(o,r),b=u[0]+n.scrollX,f=u[1]+n.scrollY;switch(t.translate(b,f),t.rotate(o.angle),t.translate(-b,-f),t.translate(o.x+n.scrollX-d,o.y+n.scrollY-d),t.lineWidth=Je(2.5,o.strokeWidth*1.75,4)/Math.max(.25,n.zoom.value),t.strokeStyle=`rgba(${ic[n.theme]}, ${c/2})`,o.type){case"ellipse":t.beginPath(),t.ellipse((o.width+d*2)/2,(o.height+d*2)/2,(o.width+d*2)/2,(o.height+d*2)/2,0,0,2*Math.PI),t.closePath(),t.stroke();break;case"diamond":{let[x,v]=np(o,d);x.forEach(y=>{t.beginPath(),t.moveTo(y[0][0]-o.x+d,y[0][1]-o.y+d),t.lineTo(y[1][0]-o.x+d,y[1][1]-o.y+d),t.stroke()}),v.forEach(y=>{let[E,w,C,I]=y;t.beginPath(),t.moveTo(E[0]-o.x+d,E[1]-o.y+d),t.bezierCurveTo(w[0]-o.x+d,w[1]-o.y+d,C[0]-o.x+d,C[1]-o.y+d,I[0]-o.x+d,I[1]-o.y+d),t.stroke()})}break;default:{let[x,v]=Bf(o,d);x.forEach(y=>{t.beginPath(),t.moveTo(y[0][0]-o.x+d,y[0][1]-o.y+d),t.lineTo(y[1][0]-o.x+d,y[1][1]-o.y+d),t.stroke()}),v.forEach(y=>{let[E,w,C,I]=y;t.beginPath(),t.moveTo(E[0]-o.x+d,E[1]-o.y+d),t.bezierCurveTo(w[0]-o.x+d,w[1]-o.y+d,C[0]-o.x+d,C[1]-o.y+d,I[0]-o.x+d,I[1]-o.y+d),t.stroke()})}break}t.restore();break}if(!s||(a?.runtime??0)>xi)return;let m=.5*(Math.min(o.width,o.height)/2);if(!ae(o)){t.save(),t.translate(o.x+n.scrollX,o.y+n.scrollY);let u=1/xi*l;if(t.strokeStyle=zt("rgba(0, 0, 0, 0.2)",n.theme),t.lineWidth=1/n.zoom.value,t.setLineDash([4/n.zoom.value,4/n.zoom.value]),t.lineDashOffset=-u*10/n.zoom.value,t.beginPath(),t.ellipse(o.width/2,o.height/2,m,m,0,0,2*Math.PI),t.stroke(),t.fillStyle=zt("rgba(0, 0, 0, 0.04)",n.theme),t.beginPath(),t.ellipse(o.width/2,o.height/2,m*(1-c),m*(1-c),0,0,2*Math.PI),t.fill(),t.restore(),n.isMidpointSnappingEnabled&&!n.gridModeEnabled&&(!e.lastPointerMoveEvent||!yi(e.lastPointerMoveEvent))){t.save(),t.translate(o.x+n.scrollX,o.y+n.scrollY);let b=5/n.zoom.value,f=5/n.zoom.value,x=b+f,v;if(o.type==="diamond"){let[,y]=np(o),E=Da(o,r);v=y.map(w=>{let C=uf(w,.5),I=Ae(C,E,o.angle);return{x:I[0]-o.x,y:I[1]-o.y}})}else{let y=Da(o,r);v=[{x:o.width/2,y:0},{x:o.width,y:o.height/2},{x:o.width/2,y:o.height},{x:0,y:o.height/2}].map(w=>{let C=_(w.x+o.x,w.y+o.y),I=Ae(C,y,o.angle);return{x:I[0]-o.x,y:I[1]-o.y}})}v.forEach(y=>{t.clearRect(y.x-x,y.y-x,x*2,x*2)}),t.fillStyle=`rgba(${ic[n.theme]}, ${c})`,v.forEach(y=>{t.beginPath(),t.arc(y.x,y.y,b,0,2*Math.PI),t.fill()}),t.restore()}}return{runtime:(a?.runtime??0)+i}},oO=(e,t,o,r,n,i,a)=>{if(o===null)return;if(ar("COMPLEX_BINDINGS"))return tO(e,t,o.element,r,n,i,a);t.save(),t.translate(n.scrollX,n.scrollY);let s=e.lastPointerMoveCoords?_(e.lastPointerMoveCoords.x,e.lastPointerMoveCoords.y):null,l=!!e.lastPointerMoveEvent&&yi(e.lastPointerMoveEvent);eO(t,o,r,n,s,l),t.restore()},$M=(e,t,o)=>{let{angle:r,x1:n,y1:i,x2:a,y2:s,selectionColors:l,cx:c,cy:d,dashed:p,activeEmbeddable:m}=o,u=a-n,b=s-i,x=(o.padding??fa*2)/t.zoom.value,v=8/t.zoom.value,y=4/t.zoom.value;e.save(),e.translate(t.scrollX,t.scrollY),e.lineWidth=(m?4:1)/t.zoom.value;let E=l.length;for(let w=0;w<E;++w)e.strokeStyle=l[w],p&&e.setLineDash([v,y+(v+y)*(E-1)]),e.lineDashOffset=(v+y)*w,Yc(e,n-x,i-x,u+x*2,b+x*2,c,d,r);e.restore()},rO=(e,t,o,r)=>{let[n,i,a,s]=qt(o,r),l=a-n,c=s-i;e.strokeStyle=zt("rgb(0,118,255)",t.theme),e.lineWidth=rt.strokeWidth/t.zoom.value,e.save(),e.translate(t.scrollX,t.scrollY),Yc(e,n,i,l,c,n+l/2,i+c/2,o.angle,!1,rt.radius/t.zoom.value),e.restore()},YM=(e,t,o,r)=>{let{colors:n=[zt("rgb(0,118,255)",t.theme)],dashed:i=!1}=r||{},a=o.filter(d=>d.groupIds.length===0),s=o.filter(d=>d.groupIds.length>0),l=d=>{let[p,m,u,b]=Te(d);return{angle:0,x1:p,x2:u,y1:m,y2:b,selectionColors:n,dashed:i,cx:p+(u-p)/2,cy:m+(b-m)/2,activeEmbeddable:!1}},c=d=>{let p=Ye(o,d);return l(p)};Object.entries(Pa(s,t)).filter(([d,p])=>p).map(([d,p])=>d).map(d=>c(d)).concat(a.map(d=>l([d]))).forEach(d=>$M(e,t,d))},KE=(e,t,o,r)=>{if(!t.selectedLinearElement)return;e.save(),e.translate(t.scrollX,t.scrollY),e.lineWidth=1/t.zoom.value;let n=j.getPointsGlobalCoordinates(o,r),{POINT_HANDLE_SIZE:i}=j,a=t.selectedLinearElement?.isEditing?i:i/2,s=He(o),l=ct(o);if(n.forEach((c,d)=>{if(s&&d!==0&&d!==n.length-1)return;let p=d>0&&(d!==n.length-1||!l||!o.polygon)&&by(c,d===n.length-1?n[0]:n[d-1],2/t.zoom.value),m=!!t.selectedLinearElement?.isEditing&&!!t.selectedLinearElement?.selectedPointsIndices?.includes(d);l&&o.polygon&&!m&&d===o.points.length-1&&t.selectedLinearElement?.isEditing&&t.selectedLinearElement?.selectedPointsIndices?.includes(0)&&(m=!0),YE(e,t,c,a,m,!1,p)}),He(o)){let c=o.fixedSegments?.map(d=>d.index)||[];n.slice(0,-1).forEach((d,p)=>{j.isSegmentTooShort(o,n[p+1],n[p],p,t.zoom,r)||YE(e,t,_((d[0]+n[p+1][0])/2,(d[1]+n[p+1][1])/2),i/2,!1,!c.includes(p+1),!1)})}else j.getEditorMidPoints(o,r,t).filter((d,p,m)=>d!==null&&!(He(o)&&(p===0||p===m.length-1))).forEach(d=>{(t.selectedLinearElement?.isEditing||n.length===2)&&YE(e,t,d,i/2,!1,!0,!1)});e.restore()},nO=(e,t,o,r)=>{e.save(),e.translate(t.scrollX,t.scrollY),e.strokeStyle=zt("rgba(134, 131, 226, 0.6)",t.theme),e.lineWidth=1/t.zoom.value,e.setLineDash([4/t.zoom.value,4/t.zoom.value]),e.beginPath(),e.moveTo(o[0],o[1]),e.lineTo(r[0],r[1]),e.stroke(),e.restore()},iO=(e,t,o,r,n)=>{e.save(),e.translate(t.scrollX,t.scrollY),e.strokeStyle=zt("rgba(134, 131, 226, 0.6)",t.theme),e.lineWidth=1/t.zoom.value,e.setLineDash([]),e.fillStyle=zt(n?"rgba(134, 131, 226, 0.9)":"rgba(255, 255, 255, 0.9)",t.theme),Vc(e,o[0],o[1],r/t.zoom.value,!0,!0),e.restore()},KM=({arrow:e,appState:t,type:o,context:r,elementsMap:n})=>{let i=o==="start"?e.startBinding:e.endBinding,a=i?.elementId&&n.get(i.elementId);if(!a||!Sa(a)||a.isDeleted)return;let s=Uf(i.fixedPoint,a,n);if(!p2(s,e,a,n,t,o))return;let l=t.selectedLinearElement,c=!!l?.isDragging,d=o==="start"?0:e.points.length-1,p=!!l?.selectedPointsIndices?.includes(d);if(l?.hoveredFocusPointBinding===o&&!l.draggedFocusPointBinding&&Xg(s,r,t),!(p&&c)){let m=Uf(i.fixedPoint,a,n),u=l?.hoveredFocusPointBinding===o,b=j.getPointAtIndexGlobalCoordinates(e,d,n);nO(r,t,b,m),iO(r,t,m,lw/1.5,u)}},XM=(e,t,o,r,n)=>{Object.keys(r).forEach(i=>{let a=r[i];if(a!==void 0){let[s,l,c,d]=a;e.save(),e.lineWidth=1/o.zoom.value,t.selectionColor&&(e.strokeStyle=t.selectionColor),i==="rotation"?Vc(e,s+c/2,l+d/2,c/2,!0):e.roundRect?(e.beginPath(),e.roundRect(s,l,c,d,2/o.zoom.value),e.fill(),e.stroke()):Yc(e,s,l,c,d,s+c/2,l+d/2,n,!0),e.restore()}})},aO=(e,t,o,r,n)=>{let[i,a,,,s,l]=qt(r,n),c=3,d=20,p=c/o.zoom.value,m=p/2,u=s-i+p,b=l-a+p,f=Math.min(d/o.zoom.value,u),x=Math.min(d/o.zoom.value,b);e.save(),e.fillStyle=t.selectionColor,e.strokeStyle=t.selectionColor,e.lineWidth=p,[[[-u,-b],[0,m],[f,m],[m,0],[m,x]],[[u-m,-b],[m,m],[-f+m,m],[0,0],[0,x]],[[-u,b],[0,-m],[f,-m],[m,0],[m,-x]],[[u-m,b],[m,-m],[-f+m,-m],[0,0],[0,-x]]].forEach(y=>{let[[E,w],[C,I],[A,M],[N,P],[L,R]]=y;e.save(),e.translate(s,l),e.rotate(r.angle),e.beginPath(),e.moveTo(E+C,w+I),e.lineTo(E+A,w+M),e.stroke(),e.beginPath(),e.moveTo(E+N,w+P),e.lineTo(E+L,w+R),e.stroke(),e.restore()}),e.restore()},sO=(e,t,o,r)=>{t.save();let n=D0(o.zoom.value),i=e.width+n*2,a=e.height+n*2,s=e.x+e.width/2,l=e.y+e.height/2,c=-(e.width/2+n),d=-(e.height/2+n);t.translate(s+o.scrollX,l+o.scrollY),t.rotate(e.angle),t.lineWidth=1/o.zoom.value,t.strokeStyle=r,t.globalAlpha=.5,t.setLineDash([6/o.zoom.value,4/o.zoom.value]),t.strokeRect(c,d,i,a),t.restore()},lO=(e,t,o,r,n)=>{let i=R0(e,o.zoom.value,n);i&&(t.save(),t.globalAlpha=.5,t.lineWidth=1.5/o.zoom.value,t.lineCap="round",t.strokeStyle=r,t.beginPath(),t.moveTo(i.start[0]+o.scrollX,i.start[1]+o.scrollY),t.lineTo(i.end[0]+o.scrollX,i.end[1]+o.scrollY),t.stroke(),t.restore())},cO=({app:e,canvas:t,elementsMap:o,visibleElements:r,selectedElements:n,allElementsMap:i,scale:a,appState:s,renderConfig:l,editorInterface:c,animationState:d,deltaTime:p})=>{if(t===null)return{};let m=Rp(s,a),[u,b]=Np(t,a),f=d,x=Op({canvas:t,scale:a,normalizedWidth:u,normalizedHeight:b});x.save(),x.scale(m.zoom.value,m.zoom.value);let v;if(r.forEach(A=>{m.selectedLinearElement?.isEditing&&m.selectedLinearElement.elementId===A.id&&A&&(v=A)}),v&&KE(x,m,v,o),m.selectionElement&&!m.isCropping)try{_w(m.selectionElement,x,m,l.selectionColor)}catch(A){console.error(A)}let y=Oc(n,m);if(y&&!y.autoResize&&lO(y,x,m,l.selectionColor,c.formFactor),m.editingTextElement){let A=i.get(m.editingTextElement.id);A&&!A.autoResize&&sO(A,x,m,l.selectionColor)}if(m.isBindingEnabled&&m.suggestedBinding?f={...d,bindingHighlight:oO(e,x,m.suggestedBinding,i,m,p,d?.bindingHighlight)}:f={...d,bindingHighlight:void 0},m.hoveredArrowTextAnchor&&Q9(x,m,i),m.frameToHighlight&&rO(x,m,m.frameToHighlight,o),m.elementsToHighlight&&YM(x,m,m.elementsToHighlight),m.activeLockedId){let A=i.get(m.activeLockedId),M=A?[A]:Ye(i,m.activeLockedId);YM(x,m,M,{colors:[zt("#ced4da",m.theme)],dashed:!0})}let E=n.some(A=>ae(A));n.length===1&&m.selectedLinearElement?.isEditing&&m.selectedLinearElement.elementId===n[0].id&&KE(x,m,n[0],o);let w=m.selectedLinearElement,C=w&&j.getElement(w.elementId,i);if(C&&(m.selectedLinearElement.isDragging||(w.segmentMidPointHoveredCoords?q9(x,m):(He(C)?w.hoverPointIndex===0||w.hoverPointIndex===C.points.length-1:w.hoverPointIndex>=0)&&J9(x,m,o)),Ee(C)&&(KM({arrow:C,elementsMap:i,appState:m,context:x,type:"start"}),KM({arrow:C,elementsMap:i,appState:m,context:x,type:"end"}))),!m.multiElement&&!m.newElement&&!m.selectedLinearElement?.isEditing){let A=Ap(n,m,c),M=n.length===1&&Me(n[0]);M&&m.selectedLinearElement?.elementId===n[0].id&&!n[0].locked&&KE(x,m,n[0],o);let N=l.selectionColor||zt("#000",m.theme),P=zt("#ced4da",m.theme),L=zt("#000",m.theme);if(A){let R=te(n),H=[];for(let F of o.values()){let U=[],V=l.remoteSelectedElementIds.get(F.id);if(M&&He(F)&&(F.startBinding||F.endBinding)||(R.has(F.id)&&!cp(m,F)&&U.push(N),V&&U.push(...V.map($=>Qa($,m.collaborators.get($))))),U.length){let[$,oe,re,ke,G,Z]=qt(F,o,!0);H.push({angle:F.angle,x1:$,y1:oe,x2:re,y2:ke,selectionColors:F.locked?[P]:U,dashed:!!V||F.locked,cx:G,cy:Z,activeEmbeddable:m.activeEmbeddable?.element===F&&m.activeEmbeddable.state==="active",padding:F.id===m.croppingElementId||nt(F)?0:void 0})}}let K=F=>{let U=Ye(o,F),[V,$,oe,re]=Te(U);H.push({angle:0,x1:V,x2:oe,y1:$,y2:re,selectionColors:U.some(ke=>ke.locked)?[P]:[L],dashed:!0,cx:V+(oe-V)/2,cy:$+(re-$)/2,activeEmbeddable:!1})};for(let F of Or(m))K(F);m.editingGroupId&&K(m.editingGroupId),H.forEach(F=>$M(x,m,F))}if(x.save(),x.translate(m.scrollX,m.scrollY),n.length===1){x.fillStyle=zt("#fff",m.theme);let R=S2(n[0],m.zoom,o,"mouse",Mp(c));if(!m.viewModeEnabled&&A&&!J(m.editingTextElement)&&!m.croppingElementId&&XM(x,l,m,R,n[0].angle),m.croppingElementId&&!m.isCropping){let H=o.get(m.croppingElementId);H&&nt(H)&&aO(x,l,m,H,o)}}else if(n.length>1&&!m.isRotating&&!n.some(R=>R.locked)){let R=fa*2/m.zoom.value;x.fillStyle=zt("#fff",m.theme);let[H,K,F,U]=Te(n,o),V=x.getLineDash();x.setLineDash([2/m.zoom.value]);let $=x.lineWidth;x.lineWidth=1/m.zoom.value,x.strokeStyle=N,Yc(x,H-R,K-R,F-H+R*2,U-K+R*2,(H+F)/2,(K+U)/2,0),x.lineWidth=$,x.setLineDash(V);let oe=C2([H,K,F,U,(H+F)/2,(K+U)/2],0,m.zoom,"mouse",E?{...Mp(c),rotation:!0}:Mp(c));n.some(re=>!re.locked)&&XM(x,l,m,oe,0)}x.restore()}m.searchMatches?.matches.forEach(({id:A,focus:M,matchedLines:N})=>{let P=o.get(A);if(P){let[L,R,,,H,K]=qt(P,o,!0);x.save(),x.fillStyle=j9[m.theme][M?"focus":"match"];let F=ae(P)?m.zoom.value:1;x.translate(m.scrollX,m.scrollY),x.translate(H,K),x.rotate(P.angle),N.forEach(U=>{(U.showOnCanvas||M)&&x.fillRect(L+U.offsetX/F-H,R+U.offsetY/F-K,U.width/F,U.height/F)}),x.restore()}}),WM(x,m),x.restore(),JC({context:x,renderConfig:l,appState:m,normalizedWidth:u,normalizedHeight:b});let I;return l.renderScrollbars&&(I=Sk(o,u,b,m),x.save(),x.fillStyle=zt(Ck,m.theme),x.strokeStyle=zt("rgba(255,255,255,0.8)",m.theme),[I.horizontal,I.vertical].forEach(A=>{A&&mh(x,A.x,A.y,A.width,A.height,vr/2)}),x.restore()),{scrollBars:I,animationState:f}},ZM=e=>{let t=cO(e);return e.callback(t),t};import{jsx as hO}from"react/jsx-runtime";var qM="animateInteractiveScene",pO=e=>{let t=jM(!1),o=jM(null);return mO(()=>{if(!t.current){t.current=!0;return}let r=new Map,n=new Map,i=new Map,a=new Map,s=new Map;e.appState.collaborators.forEach((c,d)=>{if(c.selectedElementIds)for(let p of Object.keys(c.selectedElementIds))i.has(p)||i.set(p,[]),i.get(p).push(d);!c.pointer||c.pointer.renderCursor===!1||(c.username&&a.set(d,c.username),c.userState&&s.set(d,c.userState),n.set(d,Gt({sceneX:c.pointer.x,sceneY:c.pointer.y},e.appState)),r.set(d,c.button))});let l=Wc(e.containerRef?.current);o.current={app:e.app,canvas:e.canvas,elementsMap:e.elementsMap,visibleElements:e.visibleElements,selectedElements:e.selectedElements,allElementsMap:e.allElementsMap,scale:window.devicePixelRatio,appState:e.appState,renderConfig:{remotePointerViewportCoords:n,remotePointerButton:r,remoteSelectedElementIds:i,remotePointerUsernames:a,remotePointerUserStates:s,selectionColor:l,renderScrollbars:e.renderScrollbars,lastViewportPosition:e.app.viewport.lastPosition},editorInterface:e.editorInterface,callback:e.renderInteractiveSceneCallback,animationState:{bindingHighlight:void 0},deltaTime:0},Bt.running(qM)||Bt.start(qM,({deltaTime:c,state:d})=>{let p=ZM({...o.current,deltaTime:c,animationState:d}).animationState;if(p){for(let m in p)if(p[m]!==void 0)return p}})}),hO("canvas",{className:"excalidraw__canvas interactive",style:{width:e.appState.width,height:e.appState.height},width:e.appState.width*e.scale,height:e.appState.height*e.scale,ref:e.handleCanvasRef,onContextMenu:e.onContextMenu,onClick:e.onClick,onPointerMove:e.onPointerMove,onPointerUp:e.onPointerUp,onPointerCancel:e.onPointerCancel,onTouchMove:e.onTouchMove,onPointerDown:e.onPointerDown,onDoubleClick:e.appState.viewModeEnabled?void 0:e.onDoubleClick,children:h("labels.drawingCanvas")})},JM=e=>({zoom:e.zoom,scrollX:e.scrollX,scrollY:e.scrollY,width:e.width,height:e.height,viewModeEnabled:e.viewModeEnabled,activeTool:e.activeTool,openDialog:e.openDialog,editingGroupId:e.editingGroupId,selectedElementIds:e.selectedElementIds,frameToHighlight:e.frameToHighlight,offsetLeft:e.offsetLeft,offsetTop:e.offsetTop,theme:e.theme,selectionElement:e.selectionElement,selectedGroupIds:e.selectedGroupIds,selectedLinearElement:e.selectedLinearElement,multiElement:e.multiElement,newElement:e.newElement,isBindingEnabled:e.isBindingEnabled,isMidpointSnappingEnabled:e.isMidpointSnappingEnabled,gridModeEnabled:e.gridModeEnabled,suggestedBinding:e.suggestedBinding,hoveredArrowTextAnchor:e.hoveredArrowTextAnchor,isRotating:e.isRotating,elementsToHighlight:e.elementsToHighlight,collaborators:e.collaborators,activeEmbeddable:e.activeEmbeddable,snapLines:e.snapLines,zenModeEnabled:e.zenModeEnabled,editingTextElement:e.editingTextElement,isCropping:e.isCropping,croppingElementId:e.croppingElementId,searchMatches:e.searchMatches,activeLockedId:e.activeLockedId,hoveredElementIds:e.hoveredElementIds,frameRendering:e.frameRendering,shouldCacheIgnoreZoom:e.shouldCacheIgnoreZoom,exportScale:e.exportScale,currentItemArrowType:e.currentItemArrowType}),uO=(e,t)=>e.selectionNonce!==t.selectionNonce||e.canvasNonce!==t.canvasNonce||e.scale!==t.scale||e.elementsMap!==t.elementsMap||e.visibleElements!==t.visibleElements||e.selectedElements!==t.selectedElements||e.renderScrollbars!==t.renderScrollbars||e.interactionEnabled!==t.interactionEnabled||e.navigationEnabled!==t.navigationEnabled?!1:Dt(JM(e.appState),JM(t.appState)),XE=dO.memo(pO,uO);import gO,{useEffect as QM,useRef as e6}from"react";import{jsx as xO}from"react/jsx-runtime";var fO=e=>{let t=e6(null),o=e6(!1);return QM(()=>{e.canvas.style.width=`${e.appState.width}px`,e.canvas.style.height=`${e.appState.height}px`,e.canvas.width=e.appState.width*e.scale,e.canvas.height=e.appState.height*e.scale},[e.appState.height,e.appState.width,e.canvas,e.scale]),QM(()=>{let r=t.current;if(!r)return;let n=e.canvas;o.current||(o.current=!0,r.replaceChildren(n),n.classList.add("excalidraw__canvas","static")),O2({canvas:n,rc:e.rc,scale:e.scale,elementsMap:e.elementsMap,allElementsMap:e.allElementsMap,visibleElements:e.visibleElements,appState:e.appState,renderConfig:e.renderConfig},Dl())}),xO("div",{className:"excalidraw__canvas-wrapper",ref:t})},t6=e=>({zoom:e.zoom,scrollX:e.scrollX,scrollY:e.scrollY,width:e.width,height:e.height,viewModeEnabled:e.viewModeEnabled,openDialog:e.openDialog,hoveredElementIds:e.hoveredElementIds,offsetLeft:e.offsetLeft,offsetTop:e.offsetTop,theme:e.theme,shouldCacheIgnoreZoom:e.shouldCacheIgnoreZoom,viewBackgroundColor:e.viewBackgroundColor,exportScale:e.exportScale,selectedElementsAreBeingDragged:e.selectedElementsAreBeingDragged,gridSize:e.gridSize,gridStep:e.gridStep,frameRendering:e.frameRendering,selectedElementIds:e.selectedElementIds,frameToHighlight:e.frameToHighlight,editingGroupId:e.editingGroupId,currentHoveredFontFamily:e.currentHoveredFontFamily,croppingElementId:e.croppingElementId,suggestedBinding:e.suggestedBinding}),bO=(e,t)=>e.canvasNonce!==t.canvasNonce||e.scale!==t.scale||e.elementsMap!==t.elementsMap||e.visibleElements!==t.visibleElements?!1:Dt(t6(e.appState),t6(t.appState))&&Dt(e.renderConfig,t.renderConfig),$E=gO.memo(fO,bO);import{useEffect as yO,useRef as vO}from"react";var o6=({canvas:e,rc:t,newElement:o,elementsMap:r,allElementsMap:n,scale:i,appState:a,renderConfig:s})=>{if(e){let l=Rp(a,i),[c,d]=Np(e,i),p=Op({canvas:e,scale:i,normalizedWidth:c,normalizedHeight:d});if(p.save(),p.scale(l.zoom.value,l.zoom.value),o&&o.type!=="selection"){if(tn(o))return;if((o.frameId||l.frameToHighlight?.id)&&l.frameRendering.enabled&&l.frameRendering.clip){let b=Iw(o,r,l);b&&kw(o,b,l,r)&&R2(b,p,s,l)}Pw(o,r,n,t,p,s,l)}else p.clearRect(0,0,c,d);p.restore()}},EO=xc(e=>{o6(e)}),r6=(e,t)=>{if(t){EO(e);return}o6(e)};import{jsx as TO}from"react/jsx-runtime";var wO=e=>{let t=vO(null);return yO(()=>{t.current&&r6({canvas:t.current,scale:e.scale,newElement:e.newElement,elementsMap:e.elementsMap,allElementsMap:e.allElementsMap,rc:e.rc,renderConfig:e.renderConfig,appState:e.appState},Dl())}),TO("canvas",{className:"excalidraw__canvas",style:{width:e.appState.width,height:e.appState.height,opacity:e.opacity},width:e.appState.width*e.scale,height:e.appState.height*e.scale,ref:t})},n6=wO;import CO from"clsx";import{useLayoutEffect as SO,useEffect as i6,useRef as IO,useState as kO}from"react";import{jsx as _O}from"react/jsx-runtime";var a6=700,MO=100,AO=16,LO=5*60*1e3,l6=Ie(null),s6=e=>e===Et.elbow?Xn:e===Et.round?$n:Kn,$g=class{constructor(t){T(this,"app");T(this,"lastShownAt",0);T(this,"show",t=>{let{x:o,y:r}=this.app.viewport.lastPosition;o===0&&r===0||(this.lastShownAt=Date.now(),this.app.updateEditorAtom(l6,{content:t,nonce:Math.random()}))});T(this,"isOnCooldown",()=>Date.now()-this.lastShownAt<LO);T(this,"onArrowTypeCycled",t=>{this.show(s6(t))});T(this,"onToolShortcut",(t,o)=>{(o==="digit"||!this.isOnCooldown())&&this.show(t==="line"?Ha:s6(this.app.state.currentItemArrowType))});this.app=t}},c6=()=>{let[e,t]=le(l6),o=Ke(),{container:r}=tt(),n=IO(null),[i,a]=kO(!1),s=e?.nonce;return SO(()=>{if(s==null||!r)return;let l=(d,p)=>{let m=n.current;if(!m)return;let{left:u,top:b}=ku({cursor:{x:d,y:p},element:{width:m.offsetWidth,height:m.offsetHeight},container:r.getBoundingClientRect(),gap:AO});m.style.transform=`translate(${u}px, ${b}px)`};l(o.viewport.lastPosition.x,o.viewport.lastPosition.y);let c=d=>{l(d.clientX,d.clientY)};return window.addEventListener("pointermove",c),()=>{window.removeEventListener("pointermove",c)}},[s,r,o]),i6(()=>()=>{t(null)},[t]),i6(()=>{if(s==null)return;a(!1);let l=window.setTimeout(()=>{a(!0)},a6),c=window.setTimeout(()=>{t(null)},a6+MO),d=()=>{t(null)};return window.addEventListener("pointerdown",d,{capture:!0}),()=>{window.clearTimeout(l),window.clearTimeout(c),window.removeEventListener("pointerdown",d,{capture:!0})}},[s,t]),e?_O("div",{ref:n,className:CO("CursorHint",{"CursorHint--fade-out":i}),"data-testid":"cursor-hint",children:e.content}):null};var Zg=class{constructor(t){this.getState=t;T(this,"listeners",[]);T(this,"onStateChange",(t,o,r)=>{let{predicate:n,getValue:i,callback:a,once:s,matchesImmediately:l}=this.normalize(t,o,r);return a?l&&(queueMicrotask(()=>{let c=this.getState();a(i(c),c)}),s)?()=>{}:this.subscribe({predicate:n,getValue:i,callback:a,once:s}):l?Promise.resolve(i(this.getState())):new Promise(c=>{this.subscribe({predicate:n,getValue:i,callback:d=>c(d),once:!0})})})}isStateChangePredicateOptions(t){return typeof t=="object"&&!Array.isArray(t)&&"predicate"in t}subscribe(t){return this.listeners.push(t),()=>{this.listeners=this.listeners.filter(o=>o!==t)}}normalize(t,o,r){let n,i,a=o,s=r?.once??!1,l=!1;if(this.isStateChangePredicateOptions(t)){let{predicate:c,callback:d,once:p}=t;n=c,i=m=>m,a=d?(m,u)=>d(u):void 0,s=p??!1,l=c(this.getState())}else if(typeof t=="function"){let c=t;n=(d,p)=>c(d)!==c(p),i=d=>c(d)}else if(Array.isArray(t)){let c=t;n=(d,p)=>c.some(m=>d[m]!==p[m]),i=d=>d}else{let c=t;n=(d,p)=>d[c]!==p[c],i=d=>d[c]}return{predicate:n,getValue:i,callback:a,once:s,matchesImmediately:l}}flush(t){if(!this.listeners.length)return;let o=this.getState(),r=[];for(let n of this.listeners)n.predicate(o,t)?(n.callback(n.getValue(o),o),n.once||r.push(n)):r.push(n);this.listeners=r}clear(){this.listeners=[]}};import{flushSync as PO}from"react-dom";import{jsx as RO}from"react/jsx-runtime";var DO=({app:e,activeLockedId:t})=>{let o=e.scene.getElement(t);o&&!Fo(o)&&console.error("[NONDELETED][INVARIANT] UnlockPopup: activeLockedId points to a deleted element");let r=o&&Fo(o)?o:null,n=r?[r]:Ye(e.scene.getNonDeletedElementsMap(),t);if(n.length===0)return null;let[i,a]=Te(n),{x:s,y:l}=Gt({sceneX:i,sceneY:a},e.state);return RO("div",{className:"UnlockPopup",style:{bottom:`${e.state.height+12-l+e.state.offsetTop}px`,left:`${s-e.state.offsetLeft}px`},onClick:()=>{PO(()=>{let c=Pa(n,e.state);e.setState({selectedElementIds:n.reduce((d,p)=>({...d,[p.id]:!0}),{}),selectedGroupIds:c,activeLockedId:null})}),e.actionManager.executeAction(El)},title:h("labels.elementLock.unlock"),children:vb})},d6=DO;import{Fragment as GO,jsx as Fe,jsxs as xm}from"react/jsx-runtime";var h6=Lr.createContext(null),g6=Lr.createContext(null),qE={formFactor:"desktop",desktopUIMode:"full",userAgent:Mf(typeof navigator<"u"?navigator.userAgent:""),isTouchScreen:!1,canFitSidebar:!1,isLandscape:!0},QE=Lr.createContext(qE);QE.displayName="EditorInterfaceContext";var zO={"editor:mount":{cardinality:"once",replay:"last"},"editor:initialize":{cardinality:"once",replay:"last"},"editor:unmount":{cardinality:"once",replay:"last"}},ey=Lr.createContext({container:null,id:null});ey.displayName="ExcalidrawContainerContext";var ty=Lr.createContext([]);ty.displayName="ExcalidrawElementsContext";var oy=Lr.createContext({...Un(),width:0,height:0,offsetLeft:0,offsetTop:0});oy.displayName="ExcalidrawAppStateContext";var ry=Lr.createContext(()=>{console.warn("Uninitialized ExcalidrawSetAppStateContext context!")});ry.displayName="ExcalidrawSetAppStateContext";var ny=Lr.createContext(null);ny.displayName="ExcalidrawActionManagerContext";var sc=Lr.createContext(null);sc.displayName="ExcalidrawAPIContext";var Qg=Lr.createContext(null);Qg.displayName="ExcalidrawAPISetContext";var Ke=()=>mi(h6),ko=()=>mi(g6),Le=()=>mi(QE),Kt=()=>ya(Le()),tt=()=>mi(ey),Hi=()=>mi(ty),cn=()=>mi(oy),Ce=()=>mi(ry),ot=()=>mi(ny),Wu=()=>mi(sc),um=!1,hm=0,gm=null,ci=!1,di=!1,jg=!1,fm={horizontal:null,vertical:null},da=0,bm=!1,ZE=new Map,HO=4,qg=!1,Jg=0,p6=!1,ac=null,jE=null,De={pointers:new Map,lastCenter:null,initialDistance:null,initialScale:null},u6,JE=class e extends Lr.Component{constructor(o){super(o);T(this,"canvas");T(this,"interactiveCanvas",null);T(this,"rc");T(this,"unmounted",!1);T(this,"actionManager");T(this,"editorInterface",qE);T(this,"stylesPanelMode",ya(qE));T(this,"excalidrawContainerRef",Lr.createRef());T(this,"scene");T(this,"fonts");T(this,"renderer");T(this,"visibleElements");T(this,"hasRenderableElements",!1);T(this,"resizeObserver");T(this,"library");T(this,"libraryItemsFromStorage");T(this,"id");T(this,"store");T(this,"history");T(this,"excalidrawContainerValue");T(this,"files",{});T(this,"imageCache",new Map);T(this,"iFrameRefs",new Map);T(this,"embedsValidationStatus",new Map);T(this,"initializedEmbeds",new Set);T(this,"elementsPendingErasure",new Set);T(this,"_initialized",!1);T(this,"editorLifecycleEvents",new vv(zO));T(this,"onEvent",this.editorLifecycleEvents.on.bind(this.editorLifecycleEvents));T(this,"appStateObserver",new Zg(()=>this.state));T(this,"onStateChange",this.appStateObserver.onStateChange);T(this,"bucketFill",new ag(this));T(this,"toolDrag",new $d(this));T(this,"flowchart",new dg(this));T(this,"cursor",new sg(this));T(this,"arrowText",new ig(this));T(this,"viewport",new pg(this,{getContainer:()=>this.excalidrawContainerRef.current,getStylesPanelMode:()=>this.stylesPanelMode,isGestureActive:()=>De.pointers.size>=2||di}));T(this,"wheel",new ug(this,{isPanning:()=>di,flushPanMove:()=>jE?.()}));T(this,"bindModeHandler",null);T(this,"textWysiwygSubmitHandler",null);T(this,"hitLinkElement");T(this,"lastPointerDownEvent",null);T(this,"activeResizeHandle",null);T(this,"lastPointerUpEvent",null);T(this,"lastPointerUpIsDoubleClick",!1);T(this,"lastPointerMoveEvent",null);T(this,"lastPointerMoveCoords",null);T(this,"lastCompletedCanvasClicks",[]);T(this,"previousPointerMoveCoords",null);T(this,"drawShape",new cg(this));T(this,"laserTrails",new Zh(this));T(this,"eraserTrail",new Jh(this));T(this,"lassoTrail",new qh(this));T(this,"cursorHints",new $g(this));T(this,"onChangeEmitter",new sr);T(this,"onPointerDownEmitter",new sr);T(this,"onPointerUpEmitter",new sr);T(this,"onUserFollowEmitter",new sr);T(this,"onScrollChangeEmitter",new sr);T(this,"missingPointerEventCleanupEmitter",new sr);T(this,"onRemoveEventListenersEmitter",new sr);T(this,"api");T(this,"isToolSupported",(o,r=this.props)=>{if(r.UIOptions.tools?.[o]===!1)return!1;if(this.isInteractionEnabled(r))return!0;let n=typeof r.interaction=="object"&&r.interaction!==null?r.interaction.enabled?.tools:void 0;return o==="laser"?n?.laser===!0:o==="custom"?n?.custom===!0:!1});T(this,"updateEditorAtom",(o,...r)=>{let n=yt.set(o,...r);return this.triggerRender(),n});T(this,"previousHoveredBindableElement",null);T(this,"getEffectiveGridSize",()=>ta(this)?this.state.gridSize:null);T(this,"getTextCreationGridPoint",(o,r)=>{let n=this.getEffectiveGridSize();if(n===null)return null;let i=a=>Math.floor(a/n)*n;return{x:i(o),y:i(r)}});T(this,"handleIframeLikeElementHover",({hitElement:o,scenePointer:r,moveEvent:n})=>o&&Ts(o)&&this.isIframeLikeInteractive(o)&&(this.state.viewModeEnabled||this.state.activeTool.type==="laser"||this.isIframeLikeElementCenter(o,n,r.x,r.y))?(this.cursor.set(Be.POINTER),this.setState({activeEmbeddable:{element:o,state:"hover"}}),!0):(this.state.activeEmbeddable?.state==="hover"&&this.setState({activeEmbeddable:null}),!1));T(this,"isDoubleClick",(o,r)=>o!=null&&r.timeStamp-o.timeStamp<=yf);T(this,"updateEmbedValidationStatus",(o,r)=>{this.embedsValidationStatus.set(o.id,r),dr.delete(o)});T(this,"updateEmbeddables",()=>{let o=new Set,r=!1;this.scene.getNonDeletedElements().filter(n=>{if(fo(n)){if(o.add(n.id),!this.embedsValidationStatus.has(n.id)){r=!0;let i=Ds(n.link,this.props.validateEmbeddable);this.updateEmbedValidationStatus(n,i)}}else Ca(n)&&o.add(n.id);return!1}),r&&this.scene.triggerUpdate(),this.iFrameRefs.forEach((n,i)=>{o.has(i)||this.iFrameRefs.delete(i)})});T(this,"getFrameNameDOMId",o=>`${this.id}-frame-name-${o.id}`);T(this,"frameNameBoundsCache",{get:o=>{let r=this.frameNameBoundsCache._cache.get(o.id);if(!r||r.zoom!==this.state.zoom.value||r.versionNonce!==o.versionNonce){let n=this.ownerDocument.getElementById(this.getFrameNameDOMId(o));if(n){let i=n.getBoundingClientRect(),a=ze({clientX:i.x,clientY:i.y},this.state),s=ze({clientX:i.right,clientY:i.bottom},this.state);return r={x:a.x,y:a.y,width:s.x-a.x,height:s.y-a.y,zoom:this.state.zoom.value,versionNonce:o.versionNonce},this.frameNameBoundsCache._cache.set(o.id,r),r}return null}return r},_cache:new Map});T(this,"resetEditingFrame",o=>{o&&this.scene.mutateElement(o,{name:o.name?.trim()||null}),this.setState({editingFrame:null})});T(this,"renderFrameNames",()=>{if(!this.state.frameRendering.enabled||!this.state.frameRendering.name)return this.state.editingFrame&&this.resetEditingFrame(null),null;let o=this.state.theme===Q.DARK,r=this.scene.getNonDeletedFramesLikes(),n=r.length>0&&this.state.searchMatches?.focusedId&&ae(this.scene.getElement(this.state.searchMatches.focusedId))?this.state.searchMatches.matches.find(i=>i.focus):null;return r.map(i=>{if(!Fc(i,this.canvas.width/this.ownerWindow.devicePixelRatio,this.canvas.height/this.ownerWindow.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap()))return this.state.editingFrame===i.id&&this.resetEditingFrame(i),null;let{x:a,y:s}=Gt({sceneX:i.x,sceneY:i.y},this.state),l=6,c,d=Mw(i);if(i.id===this.state.editingFrame){let p=d;c=Fe("input",{autoFocus:!0,value:p,onChange:m=>{this.scene.mutateElement(i,{name:m.target.value})},onFocus:m=>m.target.select(),onBlur:()=>this.resetEditingFrame(i),onKeyDown:m=>{(m.key===S.ESCAPE||m.key===S.ENTER)&&this.resetEditingFrame(i)},style:{background:Ut(this.state.viewBackgroundColor,o),zIndex:2,border:"none",display:"block",padding:`${l}px`,borderRadius:4,boxShadow:"inset 0 0 0 1px var(--color-primary)",fontFamily:"Assistant",fontSize:`${rt.nameFontSize}px`,transform:`translate(-${l}px, ${l}px)`,color:o?rt.nameColorDarkTheme:rt.nameColorLightTheme,overflow:"hidden",maxWidth:`${this.ownerDocument.body.clientWidth-a-l}px`},size:p.length+1||1,dir:"auto",autoComplete:"off",autoCapitalize:"off",autoCorrect:"off"})}else c=d;return Fe("div",{id:this.getFrameNameDOMId(i),className:Qe.FRAME_NAME,style:{position:"absolute",bottom:`${this.state.height+rt.nameOffsetY-s+this.state.offsetTop}px`,left:`${a-this.state.offsetLeft}px`,zIndex:2,fontSize:rt.nameFontSize,color:o?rt.nameColorDarkTheme:rt.nameColorLightTheme,lineHeight:rt.nameLineHeight,width:"max-content",maxWidth:n?.id===i.id&&n?.focus?"none":`${i.width*this.state.zoom.value}px`,overflow:i.id===this.state.editingFrame?"visible":"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis",cursor:Be.MOVE,pointerEvents:this.state.viewModeEnabled?ga.disabled:ga.enabled},onPointerDown:p=>this.handleCanvasPointerDown(p),onContextMenu:this.handleCanvasContextMenu,onDoubleClick:()=>{this.setState({editingFrame:i.id})},children:c},i.id)})});T(this,"toggleOverscrollBehavior",o=>{this.ownerDocument.documentElement.style.overscrollBehaviorX=o.type==="pointerenter"?"none":"auto"});T(this,"focusContainer",()=>{this.excalidrawContainerRef.current?.focus()});T(this,"getSceneElementsIncludingDeleted",()=>this.scene.getElementsIncludingDeleted());T(this,"getSceneElementsMapIncludingDeleted",()=>this.scene.getElementsMapIncludingDeleted());T(this,"getSceneElements",()=>this.scene.getNonDeletedElements());T(this,"onInsertElements",o=>{this.addElementsFromPasteOrLibrary({elements:o,position:"center",files:null})});T(this,"onExportImage",async(o,r,n)=>{be("export",o,"ui");let i=await qa({type:o,data:{elements:r,appState:this.state,files:this.files},config:{exportBackground:this.state.exportBackground,name:this.getName(),viewBackgroundColor:this.state.viewBackgroundColor,exportingFrame:n.exportingFrame}}).catch(Gm).catch(a=>{console.error(a),this.setState({errorMessage:a.message})});this.state.exportEmbedScene&&i&&Bp(i)&&this.setState({fileHandle:i})});T(this,"magicGenerations",new Map);T(this,"updateMagicGeneration",({frameElement:o,data:r})=>{r.status==="pending"?this.scene.mutateElement(o,{customData:{generationData:void 0}},{informMutation:!1,isDragging:!1}):this.scene.mutateElement(o,{customData:{generationData:r}},{informMutation:!1,isDragging:!1}),this.magicGenerations.set(o.id,r),this.triggerRender()});T(this,"plugins",{});T(this,"onMagicframeToolSelect",()=>{let o=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds});if(o.length===0)this.setActiveTool({type:xt.magicframe}),be("ai","tool-select (empty-selection)","d2c");else{let r=o.length===1&&Zm(o[0])&&o[0];if(!r&&o.some(i=>ae(i)||i.frameId)){this.setActiveTool({type:xt.magicframe});return}be("ai","tool-select (existing selection)","d2c");let n;if(r)n=r;else{let[i,a,s,l]=Te(o),c=50;n=jf({...rt,x:i-c,y:a-c,width:s-i+c*2,height:l-a+c*2,opacity:100,locked:!1}),this.insertNewElement(n);for(let d of o)this.scene.mutateElement(d,{frameId:n.id});this.setState({selectedElementIds:{[n.id]:!0}})}this.onMagicFrameGenerate(n,"upstream")}});T(this,"openEyeDropper",({type:o})=>{this.updateEditorAtom(Ho,{swapPreviewOnAlt:!0,colorPickerType:o==="stroke"?"elementStroke":"elementBackground",onSelect:(r,n)=>{let i=o==="background"&&n.altKey||o==="stroke"&&!n.altKey?"strokeColor":"backgroundColor";if(!this.scene.getSelectedElements(this.state).length||this.state.activeTool.type!=="selection")this.syncActionResult({appState:{...this.state,...$a(Jn(this.state,this.scene.getNonDeletedElements(),i),r)},captureUpdate:O.IMMEDIATELY});else{let s=this.scene.getNonDeletedElementsMap(),l=new Set(this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds,includeBoundTextElement:i==="strokeColor"}).map(c=>c.id));this.updateScene({elements:this.scene.getElementsIncludingDeleted().map(c=>l.has(c.id)?se(c,qr(c,i,r,s)):c),captureUpdate:O.IMMEDIATELY})}},keepOpenOnAlt:!1})});T(this,"dismissLinearEditor",()=>{setTimeout(()=>{this.state.selectedLinearElement?.isEditing&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,isEditing:!1}})})});T(this,"syncActionResult",wt(o=>{if(this.unmounted||o===!1)return;this.store.scheduleAction(o.captureUpdate);let r=!1,n=null;if(o.elements&&(this.scene.replaceAllElements(o.elements),r=!0),o.files&&(this.addMissingFiles(o.files,o.replaceFiles),this.addNewImagesToImageCache()),o.appState||n||this.state.contextMenu){let i=o?.appState?.viewModeEnabled||!1,a=o?.appState?.zenModeEnabled||!1,s=o?.appState?.theme||this.props.theme||Q.LIGHT,l=o?.appState?.name??this.state.name,c=o?.appState?.errorMessage??this.state.errorMessage;if(typeof this.props.viewModeEnabled<"u"&&(i=this.props.viewModeEnabled),this.isInteractionEnabled()||(i=!0),typeof this.props.zenModeEnabled<"u"&&(a=this.props.zenModeEnabled),n=o.appState?.editingTextElement||null,o.elements&&n){let d=n.id,p=o.elements.find(m=>m.id===d);n=p&&Fo(p)&&J(p)?p:null}this.setState(d=>{let p=o.appState||{};return{...d,...p,contextMenu:null,editingTextElement:n,viewModeEnabled:i,zenModeEnabled:a,theme:s,name:l,errorMessage:c}}),r=!0}r||this.scene.triggerUpdate()}));T(this,"scheduleCapture",()=>this.store.scheduleCapture());T(this,"onBlur",wt(()=>{ci=!1,this.setState({isBindingEnabled:this.state.bindingPreference==="enabled"})}));T(this,"onUnload",()=>{this.onBlur()});T(this,"disableEvent",o=>{o.preventDefault()});T(this,"handleNavigationModeKeyDown",o=>{if(this.maybeHandlePageScrollKeyDown(o)){o.preventDefault();return}this.actionManager.handleKeyDown(o)});T(this,"maybeHandlePageScrollKeyDown",o=>{if(o.key!==S.PAGE_UP&&o.key!==S.PAGE_DOWN)return!1;let r=(o.shiftKey?this.state.width:this.state.height)/this.state.zoom.value;return o.key===S.PAGE_DOWN&&(r=-r),o.shiftKey?this.viewport.translate(n=>({scrollX:n.scrollX+r})):this.viewport.translate(n=>({scrollY:n.scrollY+r})),!0});T(this,"preventBrowserZoomKeyDown",o=>{o[S.CTRL_OR_CMD]&&(o.code===ge.EQUAL||o.code===ge.MINUS||o.code===ge.ZERO||o.code===ge.NUM_ADD||o.code===ge.NUM_SUBTRACT||o.code===ge.NUM_ZERO)&&o.preventDefault()});T(this,"terminateActiveInteraction",()=>{if(this.maybeCleanupAfterMissingPointerUp(null),ci=!1,di=!1,jg=!1,ac=null,De.pointers.clear(),De.lastCenter=null,De.initialDistance=null,De.initialScale=null,clearTimeout(hm),hm=0,e.resetTapTwice(),this.resetContextMenuTimer(),clearTimeout(Jg),Jg=0,qg=!1,this.bindModeHandler&&(clearTimeout(this.bindModeHandler),this.bindModeHandler=null),this.flowchart.clear(),yt.set(Ho,null),yt.set(br,null),this.state.editingFrame){let o=this.scene.getNonDeletedElement(this.state.editingFrame);this.resetEditingFrame(o&&ae(o)?o:null)}queueMicrotask(()=>{(!this.isInteractionEnabled()||this.state.viewModeEnabled)&&this.textWysiwygSubmitHandler?.()}),this.setState({contextMenu:null,openMenu:null,openPopup:null,cursorButton:"up",bindMode:"orbit",activeEmbeddable:null,activeLockedId:null,selectedElementsAreBeingDragged:!1,selectionElement:null,resizingElement:null,isResizing:!1,isRotating:!1,isCropping:!1,croppingElementId:null,suggestedBinding:null,frameToHighlight:null,elementsToHighlight:null,snapLines:[],showHyperlinkPopup:!1}),this.deselectElements(),this.isInteractionEnabled()||(this.setState({originSnapOffset:null}),this.cursor.reset())});T(this,"handleInteractionStateChange",(o,r)=>{let n=this.isInteractionEnabled(o),i=n!==this.isInteractionEnabled(),a=o.viewModeEnabled!==this.props.viewModeEnabled,s=this.state.viewModeEnabled;this.isInteractionEnabled()?(a||i)&&(s=!!this.props.viewModeEnabled):s=!0,s!==this.state.viewModeEnabled&&this.setState({viewModeEnabled:s});let l=n&&!r.viewModeEnabled,c=this.isInteractionEnabled()&&!this.state.viewModeEnabled;(i&&!this.isInteractionEnabled()||l&&!c)&&this.terminateActiveInteraction(),i&&this.addEventListeners(),this.isLinksEnabled(o)!==this.isLinksEnabled()&&(this.isLinksEnabled()||(this.hitLinkElement=void 0,Eh(),this.cursor.reset())),this.isEmbedsEnabled(o)!==this.isEmbedsEnabled()&&(this.isEmbedsEnabled()||this.setState({activeEmbeddable:null})),this.isToolSupported(r.activeTool.type,o)!==this.isToolSupported(this.state.activeTool.type)&&(this.isToolSupported(this.state.activeTool.type)||this.laserTrails.endPath(),this.cursor.reset()),!this.isInteractionEnabled()&&!this.isToolSupported(this.state.activeTool.type)&&this.state.activeTool.type!=="selection"&&this.setState({activeTool:ht(this.state,{type:"selection"})}),(this.isBrowserZoomEnabled(o)!==this.isBrowserZoomEnabled()||this.isNavigationEnabled(o)!==this.isNavigationEnabled())&&(this.addEventListeners(),this.cursor.reset()),r.viewModeEnabled!==this.state.viewModeEnabled&&(this.isInteractionEnabled()&&this.addEventListeners(),this.state.viewModeEnabled||this.deselectElements(),this.cursor.reset())});T(this,"isSameForcedTool",(o,r)=>o?.type===r?.type&&(o?.type==="custom"?o.customType??null:null)===(r?.type==="custom"?r.customType??null:null));T(this,"handleForcedToolChange",(o,r)=>{let n=this.props.activeTool;if(!n)return;let i=!this.isSameForcedTool(o.activeTool,n);if(n.type==="image"){i&&console.warn('"image" tool cannot be forced via "props.activeTool"');return}this.isSameForcedTool(n,this.state.activeTool)||(i||r.activeTool!==this.state.activeTool||this.isToolSupported(n.type,o)!==this.isToolSupported(n.type,this.props))&&this.setActiveTool(n)});T(this,"resetHistory",()=>{this.history.clear()});T(this,"resetStore",()=>{this.store.clear()});T(this,"resetScene",wt(o=>{this.scene.replaceAllElements([]),this.setState(r=>({...Un(),isLoading:o?.resetLoadingState?!1:r.isLoading,theme:this.state.theme})),this.resetStore(),this.resetHistory()}));T(this,"initializeScene",async()=>{"launchQueue"in this.ownerWindow&&"LaunchParams"in this.ownerWindow&&this.ownerWindow.launchQueue.setConsumer(async l=>{if(!l.files.length)return;let c=l.files[0],d=await c.getFile();this.loadFileToCanvas(new File([d],d.name||"",{type:d.type}),c)}),this.props.theme&&this.setState({theme:this.props.theme}),this.state.isLoading||this.setState({isLoading:!0});let o=null;try{typeof this.props.initialData=="function"?o=await this.props.initialData()||null:o=await this.props.initialData||null,o?.libraryItems&&this.library.updateLibrary({libraryItems:o.libraryItems,merge:!0}).catch(l=>{console.error(l)})}catch(l){console.error(l),o={appState:{errorMessage:l.message||"Encountered an error during importing or restoring scene data"}}}let r=Pi(o?.elements,null,{repairBindings:!0,deleteInvisibleElements:!0}),n=Kc(o?.appState,null),i=n.activeTool;n.preferredSelectionTool.initialized||(n.preferredSelectionTool={type:this.editorInterface.formFactor==="phone"?"lasso":"selection",initialized:!0}),n={...n,theme:this.props.theme||n.theme,openSidebar:n?.openSidebar||this.state.openSidebar,activeTool:i.type==="image"||i.type==="lasso"||i.type==="selection"?{...i,type:n.preferredSelectionTool.type}:n.activeTool,isLoading:!1,toast:this.state.toast};let a={...n,width:this.state.width,height:this.state.height,offsetTop:this.state.offsetTop,offsetLeft:this.state.offsetLeft},s=this.props.initialState?.viewport;if(s){let l=r.filter(p=>!p.isDeleted),c=te(l),d=this.viewport.resolveInitialViewport(s,c,a);d&&(n={...n,...d})}else o?.scrollToContent&&(n={...n,...Os(r,a)});this.resetStore(),o?.scrollX!=null&&(n.scrollX=o.scrollX),o?.scrollY!=null&&(n.scrollY=o.scrollY),this.resetHistory(),this.syncActionResult({elements:r,appState:n,files:o?.files,captureUpdate:O.NEVER}),this.clearImageShapeCache(),this.fonts.loadSceneFonts().then(l=>{this.fonts.onLoaded(l)}),Ra(this.ownerWindow.location.href)&&this.viewport.setViewport({target:this.ownerWindow.location.href,fit:"scale-down",animation:!1})});T(this,"getFormFactor",(o,r)=>this.props.UIOptions.getFormFactor?.(o,r)??kf(o,r));T(this,"refreshEditorInterface",()=>{let o=this.excalidrawContainerRef.current;if(!o)return;let{width:r,height:n}=o.getBoundingClientRect(),i=tv(),a=Mf(typeof navigator<"u"?navigator.userAgent:""),s=this.props.UIOptions.dockedSidebarBreakpoint!=null?this.props.UIOptions.dockedSidebarBreakpoint:1229,l=vs(this.editorInterface,{desktopUIMode:i??this.editorInterface.desktopUIMode,formFactor:this.getFormFactor(r,n),userAgent:a,canFitSidebar:r>s,isLandscape:r>n});this.editorInterface=l,this.reconcileStylesPanelMode(l)});T(this,"reconcileStylesPanelMode",o=>{let r=ya(o);if(r===this.stylesPanelMode)return;let n=this.stylesPanelMode;this.stylesPanelMode=r,this.viewport.invalidateUIOffset("stylesPanel"),n!=="full"&&r==="full"&&this.setState(i=>({preferredSelectionTool:{type:"selection",initialized:!0}}))});T(this,"setDesktopUIMode",o=>{let r=ov(o);this.editorInterface=vs(this.editorInterface,{desktopUIMode:r}),this.reconcileStylesPanelMode(this.editorInterface)});T(this,"onResize",wt(()=>{this.scene.getElementsIncludingDeleted().forEach(o=>dr.delete(o)),this.refreshEditorInterface(),this.updateDOMRect(),this.setState({})}));T(this,"onFullscreenChange",()=>{!this.ownerDocument.fullscreenElement&&this.state.activeEmbeddable?.state==="active"&&this.setState({activeEmbeddable:null})});T(this,"renderInteractiveSceneCallback",({scrollBars:o})=>{o&&(fm=o),this.scheduleImageRefresh()});T(this,"onScroll",kn(()=>{let{offsetTop:o,offsetLeft:r}=this.getCanvasOffsets();this.setState(n=>n.offsetLeft===r&&n.offsetTop===o?null:{offsetTop:o,offsetLeft:r})},Ay));T(this,"onCut",wt(o=>{!this.isInteractionEnabled()||!this.excalidrawContainerRef.current?.contains(this.ownerDocument.activeElement)||go(o.target)||(this.actionManager.executeAction(Md,"keyboard",o),o.preventDefault(),o.stopPropagation())}));T(this,"onCopy",wt(o=>{!this.isInteractionEnabled()||!this.excalidrawContainerRef.current?.contains(this.ownerDocument.activeElement)||go(o.target)||(this.actionManager.executeAction(es,"keyboard",o),o.preventDefault(),o.stopPropagation())}));T(this,"onTouchStart",o=>{if(this.isInteractionEnabled()){if(Qy&&o.preventDefault(),!um){um=!0,o.touches.length===1&&(gm={x:o.touches[0].clientX,y:o.touches[0].clientY}),clearTimeout(hm),hm=this.ownerWindow.setTimeout(e.resetTapTwice,yf);return}if(um&&o.touches.length===1&&gm){let r=o.touches[0];Po(_(r.clientX,r.clientY),_(gm.x,gm.y))<=Sf&&(this.lassoTrail.endPath(),this.deselectElements(),this.handleCanvasDoubleClick({clientX:r.clientX,clientY:r.clientY,type:"touch",altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1})),um=!1,clearTimeout(hm)}o.touches.length===2&&this.setState({selectedElementIds:Ue({},this.state),activeEmbeddable:null})}});T(this,"onTouchEnd",o=>{this.isInteractionEnabled()&&(this.resetContextMenuTimer(),o.touches.length>0?this.setState({previousSelectedElementIds:{},selectedElementIds:Ue(this.state.previousSelectedElementIds,this.state)}):De.pointers.clear())});T(this,"pasteFromClipboard",wt(async o=>{if(!this.isInteractionEnabled())return;let r=!!qg,n=this.ownerDocument.activeElement,i=this.excalidrawContainerRef.current?.contains(n);if(o&&!i)return;let a=this.ownerDocument.elementFromPoint(this.viewport.lastPosition.x,this.viewport.lastPosition.y);if(o&&(!(a instanceof this.ownerWindow.HTMLCanvasElement)||go(n)))return;let s=await ll(o),l=s.getFiles(),c=await oh(s,r);if(this.props.onPaste)try{if(await this.props.onPaste(c,o)===!1)return}catch(d){console.error(d)}await this.insertClipboardContent(c,l,r),this.setActiveTool({type:this.state.preferredSelectionTool.type},{keepSelection:!0}),o?.preventDefault()}));T(this,"addElementsFromPasteOrLibrary",o=>{let r=Pi(o.elements,null,{deleteInvisibleElements:!0}),[n,i,a,s]=Te(r),l=Ta(n,a)/2,c=Ta(i,s)/2,d=typeof o.position=="object"?o.position.clientX:o.position==="cursor"?this.viewport.lastPosition.x:this.state.width/2+this.state.offsetLeft,p=typeof o.position=="object"?o.position.clientY:o.position==="cursor"?this.viewport.lastPosition.y:this.state.height/2+this.state.offsetTop,{x:m,y:u}=ze({clientX:d,clientY:p},this.state),b=m-l,f=u-c,[x,v]=Ot(b,f,this.getEffectiveGridSize()),{duplicatedElements:y}=Bn({type:"everything",elements:r.map(M=>se(M,{x:M.x+x-n,y:M.y+v-i})),randomizeSeed:!o.retainSeed,preserveFrameChildrenOrder:o.preserveFrameChildrenOrder}),E=this.scene.getElementsIncludingDeleted(),w=[...E,...y];w=this.props.onDuplicate?.(w,E)||w,Jr(w,te(y));let I=this.getTopLayerFrameAtSceneCoords({x:m,y:u});if(I){let M=Cw(y,I);w=_s(w,M,I)}this.scene.replaceAllElements(w),y.forEach(M=>{if(J(M)&>(M)){let N=Nr(M,this.scene.getElementsMapIncludingDeleted());At(M,N,this.scene)}}),Jy&&Hn.loadElementsFonts(y,this.ownerDocument).then(M=>{this.fonts.onLoaded(M)}),o.files&&this.addMissingFiles(o.files);let A=bw(y);this.store.scheduleCapture(),this.setState({...this.state,openSidebar:this.state.openSidebar&&this.editorInterface.canFitSidebar&&yt.get(Jd)?this.state.openSidebar:null,...Nc(A,this.scene.getNonDeletedElements(),this.state)},()=>{o.files&&this.addNewImagesToImageCache()}),this.setActiveTool({type:this.state.preferredSelectionTool.type},{keepSelection:!0}),o.fit&&this.viewport.setViewport({target:y,fit:o.fit,animation:!1,offsets:{ui:!0}})});T(this,"setAppState",(o,r)=>{this.setState(o,r)});T(this,"removePointer",o=>{da&&this.resetContextMenuTimer(),o.type==="pointercancel"&&this.bucketFill.cancel();let r=De.pointers.size>=2;De.pointers.delete(o.pointerId),r&&De.pointers.size<2&&this.state.scrollConstraints&&this.viewport.releaseOverscroll()});T(this,"toggleLock",(o="ui")=>{this.props.activeTool||(this.state.activeTool.locked||be("toolbar","toggleLock",`${o} (${this.editorInterface.formFactor==="phone"?"mobile":"desktop"})`),this.setState(r=>({activeTool:{...r.activeTool,...ht(this.state,r.activeTool.locked?{type:this.state.preferredSelectionTool.type}:r.activeTool),locked:!r.activeTool.locked}})))});T(this,"updateFrameRendering",o=>{this.setState(r=>{let n=typeof o=="function"?o(r.frameRendering):o;return{frameRendering:{enabled:n?.enabled??r.frameRendering.enabled,clip:n?.clip??r.frameRendering.clip,name:n?.name??r.frameRendering.name,outline:n?.outline??r.frameRendering.outline}}})});T(this,"togglePenMode",o=>{this.setState(r=>({penMode:o??!r.penMode,penDetected:!0,currentItemStrokeVariability:r.penDetected?r.currentItemStrokeVariability:"variable"}))});T(this,"revealIfHidden",o=>{!o.length||vp(o,this.canvas.width/this.ownerWindow.devicePixelRatio,this.canvas.height/this.ownerWindow.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.viewport.getOffsets())||this.viewport.setViewport({target:Te(o),fit:"scale-down",animation:{duration:300},offsets:{ui:!0}})});T(this,"emitUserFollowIntent",o=>{this.onUserFollowEmitter.trigger(o),this.props.onUserFollow?.(o)});T(this,"requestUnfollow",()=>{this.props.userToFollow&&this.emitUserFollowIntent({userToFollow:this.props.userToFollow,action:"UNFOLLOW"})});T(this,"setToast",o=>{this.setState({toast:o})});T(this,"restoreFileFromShare",async()=>{try{let o=await caches.open("web-share-target"),r=await o.match("shared-file");if(r){let n=await r.blob(),i=new File([n],n.name||"",{type:n.type});this.loadFileToCanvas(i,null),await o.delete("shared-file"),this.ownerWindow.history.replaceState(null,mc,this.ownerWindow.location.pathname)}}catch(o){this.setState({errorMessage:o.message})}});T(this,"addFiles",wt(o=>{let{addedFiles:r}=this.addMissingFiles(o);this.clearImageShapeCache(r),this.scene.triggerUpdate(),this.addNewImagesToImageCache()}));T(this,"addMissingFiles",(o,r=!1)=>{let n=r?{}:{...this.files},i={},a=Array.isArray(o)?o:Object.values(o);for(let s of a)if(!n[s.id]&&(i[s.id]=s,n[s.id]=s,s.mimeType===ue.svg))try{let l=V2(eb(Y2(s.dataURL)),ue.svg);s.dataURL!==l&&(s.version=(s.version??1)+1,s.dataURL=l)}catch(l){console.error(l)}return this.files=n,{addedFiles:i}});T(this,"updateScene",wt(o=>{let{elements:r,appState:n,collaborators:i,captureUpdate:a}=o;if(a){let s=r||void 0,l=n?Jw({...this.store.snapshot.appState,...n}):void 0;this.store.scheduleMicroAction({action:a,elements:s,appState:l})}n&&this.setState(n),r&&this.scene.replaceAllElements(r),i&&(this.laserTrails.updateCollabTrails(i),this.setState({collaborators:i}))}));T(this,"applyDeltas",(o,r)=>{let n=zc.squash(...o),i={...this.state},a=new Map(this.scene.getElementsMapIncludingDeleted());return zc.applyTo(n,a,i,r)});T(this,"mutateElement",(o,r,n=!0)=>this.scene.mutateElement(o,r,{informMutation:n,isDragging:!1}));T(this,"triggerRender",o=>{o===!0?this.scene.triggerUpdate():this.setState({})});T(this,"toggleSidebar",({name:o,tab:r,force:n})=>{let i;n===void 0?i=this.state.openSidebar?.name===o&&this.state.openSidebar?.tab===r?null:o:i=n?o:null;let a=i?{name:i}:null;return a&&r&&(a.tab=r),this.setState({openSidebar:a}),!!i});T(this,"updateCurrentCursorPosition",wt(o=>{this.viewport.lastPosition.x=o.clientX,this.viewport.lastPosition.y=o.clientY}));T(this,"onKeyDown",wt(o=>{if(!this.isInteractionEnabled())return;if("Proxy"in this.ownerWindow&&(!o.shiftKey&&/^[A-Z]$/.test(o.key)||o.shiftKey&&/^[a-z]$/.test(o.key))&&(o=new Proxy(o,{get(s,l){let c=s[l];return typeof c=="function"?c.bind(s):l==="key"?o.shiftKey?s.key.toUpperCase():s.key.toLowerCase():c}})),!_f(o.target)){if((o.key===S.ESCAPE||o.key===S.ENTER)&&this.state.croppingElementId){this.finishImageCropping();return}let s=ie(this.scene.getNonDeletedElementsMap(),this.state);if(s.length===1&&nt(s[0])&&o.key===S.ENTER){this.startImageCropping(s[0]);return}if(o.key===S.ESCAPE)this.updateEditorAtom(br,null);else if(o.key===S.TAB&&(this.ownerDocument.activeElement===this.excalidrawContainerRef?.current||this.ownerDocument.activeElement?.classList.contains(Qe.CONVERT_ELEMENT_TYPE_POPUP))){o.preventDefault();let l=wl(s);yt.get(br)?.type==="panel"&&r0(this,{conversionType:l,direction:o.shiftKey?"left":"right"})&&this.store.scheduleCapture(),l&&this.updateEditorAtom(br,{type:"panel"})}if(this.flowchart.handleKeyEvent(o))return}if(o[S.CTRL_OR_CMD]&&o.key===S.P&&!o.shiftKey&&!o.altKey){this.setToast({message:h("commandPalette.shortcutHint",{shortcut:it("commandPalette")})}),o.preventDefault();return}if(o[S.CTRL_OR_CMD]&&o.key.toLowerCase()===S.V&&(qg=o.shiftKey,clearTimeout(Jg),Jg=this.ownerWindow.setTimeout(()=>{qg=!1},100)),o[S.CTRL_OR_CMD]&&go(o.target)&&(o.code===ge.MINUS||o.code===ge.EQUAL)){o.preventDefault();return}if(go(o.target)&&o.key!==S.ESCAPE||Ei(o.key)&&_f(o.target))return;if(o.key===S.QUESTION_MARK){this.setState({openDialog:{name:"help"}});return}else if(o.key.toLowerCase()===S.E&&o.shiftKey&&o[S.CTRL_OR_CMD]){o.preventDefault(),this.setState({openDialog:{name:"imageExport"}});return}if(this.maybeHandlePageScrollKeyDown(o)){o.preventDefault();return}if(this.state.openDialog?.name==="elementLinkSelector")return;if(o.key===S.ALT)if(this.state.activeTool.type==="bucketfill"){this.bucketFill.openTemporaryEyeDropper(),o.preventDefault();return}else ar("COMPLEX_BINDINGS")?this.handleSkipBindMode():Hc({app:this,event:o});if(this.actionManager.handleKeyDown(o))return;let r=this.props.viewModeEnabled===!0;if(!r&&this.state.viewModeEnabled&&o.key===S.ESCAPE){this.setActiveTool({type:"selection"});return}if(!r&&!o.ctrlKey&&!o.altKey&&!o.metaKey&&!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged){let s=vC(o.key,this,o.shiftKey);if(this.state.viewModeEnabled&&!Df(s,["laser","hand"]))return;if(s){if(this.state.activeTool.type!==s&&be("toolbar",s,`keyboard (${this.editorInterface.formFactor==="phone"?"mobile":"desktop"})`),s==="arrow"&&this.state.activeTool.type==="arrow"){let l=this.state.currentItemArrowType===Et.sharp?Et.round:this.state.currentItemArrowType===Et.round?Et.elbow:Et.sharp;this.setState({currentItemArrowType:l}),this.cursorHints.onArrowTypeCycled(l)}else(s==="arrow"||s==="line")&&this.cursorHints.onToolShortcut(s,/^\d$/.test(o.key)?"digit":"letter");s==="bucketfill"&&this.state.activeTool.type==="bucketfill"?this.bucketFill.cycleBackgroundColor():s==="lasso"&&this.state.activeTool.type==="laser"?this.setActiveTool({type:this.state.preferredSelectionTool.type}):this.setActiveTool({type:s},{toggle:!0}),o.stopPropagation();return}else if(o.key===S.Q){this.toggleLock("keyboard"),o.stopPropagation();return}}if(this.state.viewModeEnabled)return;if(o[S.CTRL_OR_CMD]&&!o.repeat&&(ar("COMPLEX_BINDINGS")&&this.resetDelayedBindMode(),Xo(()=>{this.setState({isBindingEnabled:this.state.bindingPreference!=="enabled"})}),this.arrowText.refresh(),Hc({app:this,event:o})),Ei(o.key)){let s=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0}),l=new Set;s.filter(m=>Vt(m)).filter(m=>{let u=m.startBinding&&!s.some(f=>f.id===m.startBinding?.elementId),b=m.endBinding&&!s.some(f=>f.id===m.endBinding?.elementId);return u||b}).forEach(m=>l.add(m.id)),s=s.filter(m=>!l.has(m.id));let c=this.getEffectiveGridSize()&&(o.shiftKey?gf:this.getEffectiveGridSize())||(o.shiftKey?wy:gf),d=0,p=0;o.key===S.ARROW_LEFT?d=-c:o.key===S.ARROW_RIGHT?d=c:o.key===S.ARROW_UP?p=-c:o.key===S.ARROW_DOWN&&(p=c),s.forEach(m=>{this.scene.mutateElement(m,{x:m.x+d,y:m.y+p},{informMutation:!1,isDragging:!1}),io(m,this.scene,{simultaneouslyUpdated:s})}),this.scene.triggerUpdate(),o.preventDefault()}else if(o.key===S.ENTER){let s=this.scene.getSelectedElements(this.state);if(s.length===1){let l=s[0];if(o[S.CTRL_OR_CMD]||ct(l))Me(l)&&(!this.state.selectedLinearElement?.isEditing||this.state.selectedLinearElement.elementId!==l.id)&&(this.store.scheduleCapture(),He(l)||this.actionManager.executeAction(is));else if(J(l)||Of(l)){let c;J(l)||(c=l);let d=Qm(l,this.scene.getNonDeletedElementsMap()),p=d.x,m=d.y;this.startTextEditing({sceneX:p,sceneY:m,container:c}),o.preventDefault();return}else ae(l)&&this.setState({editingFrame:l.id})}}if(o.key===S.SPACE&&De.pointers.size===0&&(ci=!0,this.cursor.set(Be.GRAB),o.preventDefault()),(o.key===S.G||o.key===S.S)&&!o.altKey&&!o[S.CTRL_OR_CMD]){let s=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!s.length)return;o.key===S.G&&(Ii(this.state.activeTool.type)||s.some(l=>Ii(l.type)))&&(this.setState({openPopup:"elementBackground"}),o.stopPropagation()),o.key===S.S&&(this.setState({openPopup:"elementStroke"}),o.stopPropagation())}if(!o[S.CTRL_OR_CMD]&&o.shiftKey&&o.key.toLowerCase()===S.F){let s=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!s.length)return;(this.state.activeTool.type==="text"||s.find(l=>J(l)||we(l,this.scene.getNonDeletedElementsMap())))&&(o.preventDefault(),this.setState({openPopup:"fontFamily"}))}o[S.CTRL_OR_CMD]&&(o.key===S.BACKSPACE||o.key===S.DELETE)&&this.updateEditorAtom(ns,"clearCanvas");let n=o.key.toLocaleLowerCase(),i=n===S.S&&o.shiftKey&&!o[S.CTRL_OR_CMD],a=o.key===S.I||n===S.G&&o.shiftKey;(i||a)&&this.openEyeDropper({type:i?"stroke":"background"})}));T(this,"onKeyUp",wt(o=>{if(this.isInteractionEnabled()){if(o.key===S.SPACE&&(this.state.viewModeEnabled&&this.state.activeTool.type!=="laser"||this.state.openDialog?.name==="elementLinkSelector"?this.cursor.set(Be.GRAB):Ec(this.state.activeTool.type)?this.cursor.reset():(this.cursor.applyForTool(),this.setState({selectedElementIds:Ue({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})),ci=!1),o.key===S.ALT&&(this.bucketFill.closeTemporaryEyeDropper(),Hc({app:this,event:o})),(o.key===S.ALT&&this.state.bindMode==="skip"||!o[S.CTRL_OR_CMD]&&!_a(this.state))&&(this.setState({bindMode:"orbit"}),this.lastPointerMoveEvent&&ar("COMPLEX_BINDINGS"))){let r=ze({clientX:this.lastPointerMoveEvent.clientX,clientY:this.lastPointerMoveEvent.clientY},this.state),n=lr(_(r.x,r.y),this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap());if(this.state.selectedLinearElement){let i=j.getElement(this.state.selectedLinearElement.elementId,this.scene.getNonDeletedElementsMap());Vt(i)&&this.handleDelayedBindModeChange(i,n)}}if(!o[S.CTRL_OR_CMD]){let r=this.state.bindingPreference==="enabled";this.state.isBindingEnabled!==r&&(Xo(()=>{this.setState({isBindingEnabled:r})}),this.arrowText.refresh()),Hc({app:this,event:o})}if(Ei(o.key)){Dc(this.scene.getSelectedElements(this.state).filter(Ee),this.scene,this.state);let r=this.scene.getNonDeletedElementsMap();this.scene.getSelectedElements(this.state).filter(jm).forEach(n=>{n.startBinding&&this.scene.mutateElement(n,{startBinding:{...n.startBinding,...Hf(n,r.get(n.startBinding.elementId),"start",r)}}),n.endBinding&&this.scene.mutateElement(n,{endBinding:{...n.endBinding,...Hf(n,r.get(n.endBinding.elementId),"end",r)}})}),this.setState({suggestedBinding:null})}this.flowchart.handleKeyEvent(o)}}));T(this,"setActiveTool",(o,r={})=>{let{keepSelection:n=!1}=r;if(!this.isToolSupported(o.type)){console.warn(this.isInteractionEnabled()?`"${o.type}" tool is disabled via "UIOptions.canvasActions.tools.${o.type}"`:`"${o.type}" tool cannot be activated while the editor is non-interactive (see "interaction.enabled.tools")`);return}if(this.props.activeTool&&!this.isSameForcedTool(this.props.activeTool,o)){console.warn(`"${o.type}" tool activation ignored \u2014 the active tool is controlled by the host via "props.activeTool"`);return}this.drawShape.hasPendingGesture()&&this.actionManager.executeAction(Xt);let i=al.includes(o.type),s=r.toggle===!0&&i&&this.state.activeTool.type===o.type?ht(this.state,{...this.state.activeTool.lastActiveTool||{type:this.state.preferredSelectionTool.type},lastActiveTool:null}):i&&this.state.activeTool.type!==o.type?ht(this.state,{...o,lastActiveTool:this.state.activeTool}):ht(this.state,o);s.type==="hand"?this.cursor.set(Be.GRAB):ci||this.cursor.applyForTool(s),nv(this.ownerDocument.activeElement)&&this.focusContainer(),Sv(s.type)||this.setState({suggestedBinding:null}),s.type==="image"&&this.onImageToolbarButtonClick(),this.setState(l=>{let c={snapLines:l.snapLines.length?[]:l.snapLines,originSnapOffset:null,activeEmbeddable:null,selectedLinearElement:Ec(s.type)?l.selectedLinearElement:null,frameToHighlight:null,hoveredArrowTextAnchor:null};return s.type==="freedraw"&&this.store.scheduleCapture(),s.type==="lasso"?{...l,...c,activeTool:s,...n?{}:{selectedElementIds:Ue({},l),selectedGroupIds:Ue({},l),editingGroupId:null,multiElement:null}}:s.type!=="selection"?{...l,...c,activeTool:s,selectedElementIds:Ue({},l),selectedGroupIds:Ue({},l),editingGroupId:null,multiElement:null}:{...l,...c,activeTool:s}})});T(this,"setOpenDialog",o=>{this.setState({openDialog:o})});T(this,"isTouchScreenMultiTouchGesture",()=>De.pointers.size>=2);T(this,"getName",()=>this.state.name||this.props.name||`${h("labels.untitled")}-${Lf()}`);T(this,"onGestureStart",wt(o=>{this.isNavigationEnabled()&&(o.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({selectedElementIds:Ue({},this.state),activeEmbeddable:null}),De.initialScale=this.state.zoom.value)}));T(this,"onGestureChange",wt(o=>{if(!this.isNavigationEnabled()||(o.preventDefault(),this.isTouchScreenMultiTouchGesture()))return;let r=De.initialScale;r&&this.viewport.translate(n=>({...Fn({viewportX:this.viewport.lastPosition.x,viewportY:this.viewport.lastPosition.y,nextZoom:zn(r*o.scale)},n)}),{zoomPreConstrained:!0,preserveScrollConstraintsSnapBack:!0})}));T(this,"onGestureEnd",wt(o=>{this.isNavigationEnabled()&&(o.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({previousSelectedElementIds:{},selectedElementIds:Ue(this.state.previousSelectedElementIds,this.state)}),De.initialScale=null)}));T(this,"isHittingTextAutoResizeHandle",(o,r)=>{let n=Oc(o,this.state);return!!(n&&!n.isDeleted&&!n.autoResize&&wk(r,n,this.state.zoom.value,this.editorInterface.formFactor))});T(this,"handleTextAutoResizeHandlePointerDown",(o,r)=>{let n=Oc(o,this.state);return!n||!this.isHittingTextAutoResizeHandle(o,r)?!1:(this.actionManager.executeAction(S0,"ui",n),this.cursor.reset(),!0)});T(this,"startTextEditing",({sceneX:o,sceneY:r,insertAtParentCenter:n=!0,container:i,autoEdit:a=!0,initialCaretSceneCoords:s,arrowEndpoint:l})=>{let c=!1,d=l&&this.arrowText.getTextBinding(l,this.getCurrentItemStrokeWidth("text"));d&&(i=null,n=!1,o=d.anchor[0],r=d.anchor[1]);let p=n&&this.getTextWysiwygSnappedToCenterPosition(o,r,this.state,i);i&&p&&(we(i,this.scene.getNonDeletedElementsMap())||(c=!0));let m=d?null:this.getSelectedTextElement(i)||(i&&Ee(i)?we(i,this.scene.getNonDeletedElementsMap()):null)||this.getTextElementAtPosition(o,r),u=m?.fontFamily||this.state.currentItemFontFamily,b=m?.lineHeight||wo(u),f=this.state.currentItemFontSize;if(!m&&c&&i&&!Ee(i)&&!et(i)){let I=Ss(ut({fontSize:f,fontFamily:u}),b),A=Bv(f,b),M=Math.max(i.height,A),N=Math.max(i.width,I);this.scene.mutateElement(i,{height:M,width:N}),o=i.x+N/2,r=i.y+M/2,p&&(p=this.getTextWysiwygSnappedToCenterPosition(o,r,this.state,i))}let x=this.getTextCreationGridPoint(o,r),v=d?{x:o,y:r}:p?{x:p.elementCenterX,y:p.elementCenterY}:m?{x:o,y:r}:{x:x?.x??o,y:x===null?r-Cc(f,b)/2:x.y},y=this.getTopLayerFrameAtSceneCoords({x:v.x,y:v.y}),E=y&&(!c||!i||i.frameId===y.id)?y.id:null,w=m||ao({x:v.x,y:v.y,strokeColor:c&&et(i)?i.strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("text"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,text:"",fontSize:f,baseFontSize:c&&et(i)?f:null,fontFamily:u,textAlign:d?.textAlign??(p?"center":this.state.currentItemTextAlign),verticalAlign:d?.verticalAlign??(p?nr.MIDDLE:bf),containerId:c?i?.id:void 0,labelPosition:c&&i&&Ee(i)?tp:null,groupIds:i?.groupIds??[],lineHeight:b,angle:i?Ee(i)?0:i.angle:0,frameId:E});if(!m&&c&&i&&this.scene.mutateElement(i,{boundElements:(i.boundElements||[]).concat({type:"text",id:w.id})}),this.setState({editingTextElement:w}),!m)if(i&&c){let C=this.scene.getElementIndex(i.id);this.scene.insertElementsAtIndex([w],C+1)}else this.insertNewElement(w);l&&d&&this.arrowText.bindText(l,w,d.fixedPoint),a||m||i?this.handleTextWysiwyg(w,{isExistingElement:!!m,initialCaretSceneCoords:m?s:null}):this.setState({newElement:w,multiElement:null})});T(this,"startImageCropping",o=>{this.store.scheduleCapture(),this.setState({croppingElementId:o.id})});T(this,"finishImageCropping",()=>{this.state.croppingElementId&&(this.store.scheduleCapture(),this.setState({croppingElementId:null}))});T(this,"shouldHandleBrowserCanvasDoubleClick",o=>{if(o==="touch"||this.lastCompletedCanvasClicks.length===0)return!0;if(this.lastCompletedCanvasClicks.length<2)return!1;let[r,n]=this.lastCompletedCanvasClicks;return Po(_(r.x,r.y),_(n.x,n.y))<=Sf});T(this,"handleCanvasDoubleClick",o=>{if(!this.isInteractionEnabled()||this.state.editingTextElement||!this.shouldHandleBrowserCanvasDoubleClick(o.type)||this.state.multiElement||this.state.activeTool.type!==this.state.preferredSelectionTool.type&&this.state.activeTool.type!=="autoshape")return;let r=this.scene.getSelectedElements(this.state),{x:n,y:i}=ze(o,this.state);if(r.length===1&&Me(r[0])){let s=r[0];if((o[S.CTRL_OR_CMD]&&jm(s)||ct(s))&&(!this.state.selectedLinearElement?.isEditing||this.state.selectedLinearElement.elementId!==s.id)){this.actionManager.executeAction(is);return}else if(this.state.selectedLinearElement&&He(r[0])){let l=j.getSegmentMidpointHitCoords(this.state.selectedLinearElement,{x:n,y:i},this.state,this.scene.getNonDeletedElementsMap()),c=l?j.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,l,this.scene.getNonDeletedElementsMap()):-1;if(c&&c>-1){this.store.scheduleCapture(),j.deleteFixedSegment(r[0],this.scene,c);let d=j.getSegmentMidpointHitCoords({...this.state.selectedLinearElement,segmentMidPointHoveredCoords:null},{x:n,y:i},this.state,this.scene.getNonDeletedElementsMap()),p=d?j.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,d,this.scene.getNonDeletedElementsMap()):null;this.setState({selectedLinearElement:{...this.state.selectedLinearElement,initialState:{...this.state.selectedLinearElement.initialState,segmentMidpoint:{index:p,value:l,added:!1}},segmentMidPointHoveredCoords:d}});return}}else if(this.state.selectedLinearElement?.isEditing&&this.state.selectedLinearElement.elementId===s.id&&ct(s))return}if(r.length===1&&nt(r[0])){this.startImageCropping(r[0]);return}if(this.cursor.reset(),Or(this.state).length>0){let s=this.getElementAtPosition(n,i),l=s&&hw(s,this.state.selectedGroupIds);if(l){this.store.scheduleCapture(),this.setState(c=>({...c,...Lt({editingGroupId:l,selectedElementIds:{[s.id]:!0}},this.scene.getNonDeletedElements(),c,this)}));return}}if(this.cursor.reset(),!this.state.viewModeEnabled){let s=this.getElementAtPosition(n,i);if(Ts(s)){this.isIframeLikeInteractive(s)&&this.setState({activeEmbeddable:{element:s,state:"active"}});return}if(!this.state.selectedLinearElement?.isEditing){let l=!o[S.CTRL_OR_CMD]&&this.getTextBindableContainerAtPosition(n,i);if(l&&(this.state.activeTool.type==="autoshape"||Yt(l)||!vo(l.backgroundColor)||La({point:_(n,i),element:l,elementsMap:this.scene.getNonDeletedElementsMap(),threshold:this.getElementHitThreshold(l)}))){let c=Qm(l,this.scene.getNonDeletedElementsMap());n=c.x,i=c.y}this.startTextEditing({sceneX:n,sceneY:i,insertAtParentCenter:!o.altKey,container:l||null})}}});T(this,"handleCanvasClick",o=>{if(this.isInteractionEnabled()){if(o.button!==or.MAIN){this.lastCompletedCanvasClicks=[];return}this.lastCompletedCanvasClicks=[...this.lastCompletedCanvasClicks.slice(-1),{x:o.clientX,y:o.clientY}]}});T(this,"getElementLinkAtPosition",(o,r)=>{if(r&&r.locked)return;let n=this.scene.getNonDeletedElements(),i=-1;for(let a=n.length-1;a>=0;a--){let s=n[a];if(r&&s.id===r.id&&(i=a),s.link&&a>=i&&Dp(s,this.scene.getNonDeletedElementsMap(),this.state,_(o.x,o.y),this.editorInterface.formFactor==="phone"))return s}});T(this,"handleElementLinkClick",o=>{let r=Po(_(this.lastPointerDownEvent.clientX,this.lastPointerDownEvent.clientY),_(this.lastPointerUpEvent.clientX,this.lastPointerUpEvent.clientY));if(!this.hitLinkElement||r>tr)return;let n=ze(this.lastPointerDownEvent,this.state),i=this.scene.getNonDeletedElementsMap(),a=Dp(this.hitLinkElement,i,this.state,_(n.x,n.y),this.editorInterface.formFactor==="phone"),s=ze(this.lastPointerUpEvent,this.state),l=Dp(this.hitLinkElement,i,this.state,_(s.x,s.y),this.editorInterface.formFactor==="phone");if(a&&l){Eh();let c=this.hitLinkElement.link;if(c){c=Rr(c);let d;if(this.props.onLinkOpen&&(d=Vm("excalidraw-link",o.nativeEvent),this.props.onLinkOpen({...this.hitLinkElement,link:c},d)),!d?.defaultPrevented){let p=Xm(c)?"_self":"_blank",m=this.ownerWindow.open(void 0,p);m&&(m.opener=null,m.location=c)}}}});T(this,"applyElementLinkHoverAffordance",()=>this.hitLinkElement&&!this.state.selectedElementIds[this.hitLinkElement.id]?(this.cursor.set(Be.POINTER),yS(this.hitLinkElement,this.state,this.scene.getNonDeletedElementsMap()),!0):(Eh(),!1));T(this,"maybeHandleElementLinkClick",(o,r)=>{if(this.editorInterface.isTouchScreen){let n=this.getElementAtPosition(r.x,r.y,{includeLockedElements:!0});this.hitLinkElement=this.getElementLinkAtPosition(r,n)}return this.hitLinkElement&&this.lastPointerDownEvent&&!this.state.selectedElementIds[this.hitLinkElement.id]?(this.handleElementLinkClick(o),!0):!1});T(this,"handleInteractiveContentPointerMove",o=>{let r=ze(o,this.state),n=this.getElementAtPosition(r.x,r.y,{includeLockedElements:!0});if(this.isEmbedsEnabled()){let i=n?.locked?null:n;if(this.handleIframeLikeElementHover({hitElement:i,scenePointer:r,moveEvent:o}))return}this.hitLinkElement=this.isLinksEnabled()?this.getElementLinkAtPosition(r,n):void 0,this.applyElementLinkHoverAffordance()||this.cursor.reset()});T(this,"handleInteractiveContentPointerUp",o=>{if(this.lastPointerUpEvent=o,this.isEmbedsEnabled()&&this.handleIframeLikeCenterClick())return;let r=ze(o,this.state);this.isLinksEnabled()&&this.maybeHandleElementLinkClick(o,r)||this.state.activeEmbeddable?.state==="active"&&this.setState({activeEmbeddable:null})});T(this,"getTopLayerFrameAtSceneCoords",(o,r)=>{let n=this.scene.getNonDeletedElementsMap(),i=this.scene.getNonDeletedFramesLikes().filter(l=>!l.locked&&Vf(o,l,n));if(!i.length)return null;let a=i.at(-1),s=this.getElementsAtPosition(o.x,o.y,{includeLockedElements:!0}).findLast(l=>!r?.excludeElementIds?.[l.id]);if(s){if(ae(s)&&!s.locked)return a;let l=this.scene.getElementIndex(s.id),c=this.scene.getElementIndex(a.id);if(l!==-1&&c!==-1&&l<=c)return a;let d=r?.currentFrameId?i.find(p=>p.id===r.currentFrameId)??null:null;return d||(s.frameId?i.find(p=>p.id===s.frameId)??null:null)}return a});T(this,"updateFrameToHighlight",o=>{this.state.frameToHighlight!==o&&this.setState({frameToHighlight:o})});T(this,"maybeUpdateFrameToHighlightOnPointerMove",(o,r)=>{this.state.newElement||this.state.multiElement||this.state.selectionElement||this.state.selectedElementsAreBeingDragged||this.updateFrameToHighlight(!r&&_v(this.state.activeTool.type)?this.getTopLayerFrameAtSceneCoords(o):null)});T(this,"insertNewElements",o=>{if(!o.length)return;let r=[];for(let n of o){let i=r[r.length-1];i?.[0].frameId===n.frameId?i.push(n):r.push([n])}for(let n of r){let i=n[0].frameId,a=i?hp(this.scene.getElementsIncludingDeleted(),i):null;this.scene.insertElementsAtIndex(n,a)}});T(this,"insertNewElement",o=>{this.insertNewElements([o]);let r=o.frameId?this.scene.getNonDeletedElement(o.frameId):null;this.updateFrameToHighlight(r&&ae(r)?r:null)});T(this,"handleCanvasPointerMove",o=>{if(!this.isInteractionEnabled()){this.isToolSupported(this.state.activeTool.type)&&this.savePointer(o.clientX,o.clientY,this.state.cursorButton),this.isNavigationEnabled()&&this.updateMultiTouchGesture(o),(this.isLinksEnabled()||this.isEmbedsEnabled())&&!di&&this.handleInteractiveContentPointerMove(o);return}this.savePointer(o.clientX,o.clientY,this.state.cursorButton),this.lastPointerMoveEvent=o.nativeEvent;let r=ze(o,this.state),{x:n,y:i}=r;if(this.lastPointerMoveCoords={x:n,y:i},this.updateMultiTouchGesture(o),ci||di||jg||Uc(this.state))return;let s=N0(fm,o.clientX-this.state.offsetLeft,o.clientY-this.state.offsetTop).isOverEither;if(!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.multiElement&&(s?this.cursor.set(Be.AUTO):this.cursor.applyForTool()),this.maybeUpdateFrameToHighlightOnPointerMove({x:n,y:i},s),!this.state.newElement&&yk(this.state.activeTool.type)){let{originOffset:f,snapLines:x}=Ek(this.scene.getNonDeletedElements(),this,{x:n,y:i},o,this.scene.getNonDeletedElementsMap());this.setState(v=>{let y=ws(v.snapLines,x),E=v.originSnapOffset?ws(v.originSnapOffset,f):f;return v.snapLines===y&&v.originSnapOffset===E?null:{snapLines:y,originSnapOffset:E}})}else!this.state.newElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.selectionElement&&this.setState(f=>f.snapLines.length?{snapLines:[]}:null);if(this.state.selectedLinearElement?.isEditing&&!this.state.selectedLinearElement.isDragging){let f=this.state.newElement?null:j.handlePointerMoveInEditMode(o,n,i,this);f&&f!==this.state.selectedLinearElement&&Xo(()=>{this.setState({selectedLinearElement:f})})}if(Iv(this.state.activeTool.type)){let{newElement:f}=this.state;if(!f&&_a(this.state)){let x=_(n,i),v=this.scene.getNonDeletedElementsMap(),y=lr(x,this.scene.getNonDeletedElements(),v,ki(this.state.zoom));y?this.setState({suggestedBinding:{element:y,midPoint:ip(x,y,v,this.state.zoom)}}):this.state.suggestedBinding&&this.setState({suggestedBinding:null})}}if(this.state.multiElement&&this.state.selectedLinearElement){let{multiElement:f,selectedLinearElement:x}=this.state,{x:v,y,points:E}=f,w=E[E.length-1],{lastCommittedPoint:C}=x;if(this.cursor.applyForTool(),w===C)Po(_(n-v,i-y),w)>=Im?(this.store.scheduleCapture(),Xo(()=>{lt(this.state.selectedLinearElement?.initialState,"initialState must be set"),this.setState({selectedLinearElement:{...this.state.selectedLinearElement,lastCommittedPoint:E[E.length-1],selectedPointsIndices:[f.points.length],initialState:{...this.state.selectedLinearElement.initialState,lastClickedPoint:f.points.length}}})}),this.scene.mutateElement(f,{points:[...E,_(n-v,i-y)]},{informMutation:!1,isDragging:!1})):this.cursor.set(Be.POINTER);else if(E.length>2&&C&&Po(_(n-v,i-y),C)<Im){this.cursor.set(Be.POINTER),this.scene.mutateElement(f,{points:E.slice(0,-1)},{informMutation:!1,isDragging:!1});let I=f.points.length-1;this.setState({selectedLinearElement:{...x,selectedPointsIndices:x.selectedPointsIndices?[...new Set(x.selectedPointsIndices.map(A=>Math.min(A,I)))]:x.selectedPointsIndices,lastCommittedPoint:f.points[I],initialState:{...x.initialState,lastClickedPoint:I}}})}else{Mc(E,this.state.zoom.value)&&this.cursor.set(Be.POINTER);let I=this.scene.getNonDeletedElementsMap();if(jm(f)){let M=lr(_(n,i),this.scene.getNonDeletedElements(),I);ar("COMPLEX_BINDINGS")&&this.handleDelayedBindModeChange(f,M)}lt(this.state.selectedLinearElement,"Expected selectedLinearElement to be set to operate on a linear element");let A=j.handlePointerMove(o.nativeEvent,this,n,i,this.state.selectedLinearElement);A&&this.setState(A)}return}if(this.state.activeTool.type==="arrow"&&!this.state.newElement){let f=_(n,i),x=lr(f,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),ki(this.state.zoom)),v=this.scene.getNonDeletedElementsMap();x&&!_c(f,x,v)&&this.setState({suggestedBinding:{element:x,midPoint:ip(f,x,v,this.state.zoom)}})}let l=!!o.buttons,c=this.state.activeTool.type==="laser";if(l||!c&&this.state.activeTool.type!=="selection"&&this.state.activeTool.type!=="lasso"&&this.state.activeTool.type!=="text"&&this.state.activeTool.type!=="eraser")return;let d=this.scene.getNonDeletedElements(),p=this.scene.getSelectedElements(this.state);if(this.isHittingTextAutoResizeHandle(p,r)){this.cursor.set(Be.POINTER);return}if(p.length===1&&!s&&!this.state.selectedLinearElement?.isEditing){if(this.state.selectedLinearElement&&this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,n,i),(!this.state.selectedLinearElement||this.state.selectedLinearElement.hoverPointIndex===-1)&&this.state.openDialog?.name!=="elementLinkSelector"&&!(p.length===1&&He(p[0]))&&!(Me(p[0])&&(this.editorInterface.userAgent.isMobileDevice||p[0].points.length===2))){let f=ob(d,this.state,n,i,this.state.zoom,o.pointerType,this.scene.getNonDeletedElementsMap(),this.editorInterface);if(f&&f.transformHandleType){this.cursor.set(nb(f));return}}}else if(p.length>1&&!s&&this.state.openDialog?.name!=="elementLinkSelector"){let f=rb(Te(p),n,i,this.state.zoom,o.pointerType,this.editorInterface);if(f){this.cursor.set(nb({transformHandleType:f}));return}}if(pr(this.state))return;let m=this.getElementAtPosition(n,i,{preferSelected:!0,includeLockedElements:!0}),u=null;m&&m.locked?u=null:u=m;let b=this.arrowText.updateHoveredAnchor(r);if(this.handleIframeLikeElementHover({hitElement:u,scenePointer:r,moveEvent:o})||(this.hitLinkElement=this.getElementLinkAtPosition(r,m)),!this.applyElementLinkHoverAffordance()){if(c)return;u&&(u.link||fo(u))&&this.state.selectedElementIds[u.id]&&!this.state.contextMenu&&!this.state.showHyperlinkPopup?this.setState({showHyperlinkPopup:"info"}):this.state.activeTool.type==="text"?this.cursor.set(b?Be.POINTER:J(u)?Be.TEXT:Be.CROSSHAIR):!o[S.CTRL_OR_CMD]&&this.isHittingCommonBoundingBoxOfSelectedElements(r,p)?this.cursor.set(Be.MOVE):this.state.viewModeEnabled?this.cursor.set(Be.GRAB):this.state.openDialog?.name==="elementLinkSelector"?this.cursor.set(Be.AUTO):s?this.cursor.set(Be.AUTO):!o[S.CTRL_OR_CMD]&&u?.id!==this.state.editingTextElement?.id?(u||this.isHittingCommonBoundingBoxOfSelectedElements(r,p))&&!u?.locked&&(!u||!He(u)||!(u.startBinding||u.endBinding))&&(this.state.activeTool.type!=="lasso"||p.length>0)&&this.cursor.set(Be.MOVE):this.cursor.set(Be.AUTO),this.state.selectedLinearElement&&this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,n,i)}this.state.openDialog?.name==="elementLinkSelector"&&u?this.setState(f=>({hoveredElementIds:ws(f.hoveredElementIds,Lt({editingGroupId:f.editingGroupId,selectedElementIds:{[u.id]:!0}},this.scene.getNonDeletedElements(),f,this).selectedElementIds)})):this.state.openDialog?.name==="elementLinkSelector"&&!u&&this.setState(f=>({hoveredElementIds:ws(f.hoveredElementIds,{})}))});T(this,"handleEraser",(o,r)=>{let n=this.eraserTrail.addPointToPath(r.x,r.y,o.altKey);this.elementsPendingErasure=new Set(n),this.triggerRender()});T(this,"handleTouchMove",o=>{this.isInteractionEnabled()&&(bm=!0)});T(this,"handleCanvasPointerDown",o=>{if(!this.isInteractionEnabled()&&!this.isToolSupported(this.state.activeTool.type)){(this.isLinksEnabled()||this.isEmbedsEnabled())&&(this.lastPointerDownEvent=o),this.isNavigationEnabled()&&(this.updateGestureOnPointerDown(o),di||this.handleCanvasPanUsingWheelOrSpaceDrag(o));return}let r=this.scene.getSelectedElements(this.state);if(!o.ctrlKey){let f=this.state.bindingPreference==="enabled";this.state.isBindingEnabled!==f&&this.setState({isBindingEnabled:f})}let n=ze(o,this.state),{x:i,y:a}=n;this.lastPointerMoveCoords={x:i,y:a};let s=o.target;if(s.setPointerCapture&&s.setPointerCapture(o.pointerId),this.maybeCleanupAfterMissingPointerUp(o.nativeEvent),this.state.activeTool.type!=="laser"&&this.requestUnfollow(),this.state.searchMatches&&(this.setState(f=>({searchMatches:f.searchMatches&&{focusedId:null,matches:f.searchMatches.matches.map(x=>({...x,focus:!1}))}})),this.updateEditorAtom(gE,null)),yt.get(br)&&this.updateEditorAtom(br,null),this.state.contextMenu&&this.setState({contextMenu:null}),this.state.snapLines&&this.setAppState({snapLines:[]}),this.state.openPopup&&this.setState({openPopup:null}),this.updateGestureOnPointerDown(o),o.pointerType==="touch"&&this.state.newElement&&this.state.newElement.type==="freedraw"){let f=this.state.newElement;this.updateScene({...f.points.length<10?{elements:this.scene.getElementsIncludingDeleted().filter(x=>x.id!==f.id)}:{},appState:{newElement:null,editingTextElement:null,suggestedBinding:null,selectedElementIds:Ue(Object.keys(this.state.selectedElementIds).filter(x=>x!==f.id).reduce((x,v)=>(x[v]=this.state.selectedElementIds[v],x),{}),this.state)},captureUpdate:this.state.openDialog?.name==="elementLinkSelector"?O.EVENTUALLY:O.NEVER});return}let l=this.ownerDocument.getSelection();if(l?.anchorNode&&l.removeAllRanges(),this.maybeOpenContextMenuAfterPointerDownOnTouchDevices(o),!this.state.penDetected&&o.pointerType==="pen"&&this.setState(f=>({penMode:!0,penDetected:!0,currentItemStrokeVariability:"variable"})),!this.editorInterface.isTouchScreen&&["pen","touch"].includes(o.pointerType)&&(this.editorInterface=vs(this.editorInterface,{isTouchScreen:!0})),di||(this.lastPointerDownEvent=o,this.handleCanvasPanUsingWheelOrSpaceDrag(o)))return;if(this.setState({lastPointerDownWith:o.pointerType,cursorButton:"down"}),this.savePointer(o.clientX,o.clientY,"down"),o.button===or.ERASER&&this.isInteractionEnabled()&&!this.props.activeTool&&this.state.activeTool.type!==xt.eraser){this.setState({activeTool:ht(this.state,{type:xt.eraser,lastActiveTool:this.state.activeTool})},()=>{this.handleCanvasPointerDown(o);let f=()=>{x(),v?.(),pr(this.state)&&this.setState({activeTool:ht(this.state,{...this.state.activeTool.lastActiveTool||{type:xt.selection},lastActiveTool:null})})},x=Ne(this.ownerWindow,"pointerup",f,{once:!0}),v;this.ownerWindow.requestAnimationFrame(()=>{v=this.missingPointerEventCleanupEmitter.once(f)})});return}if(o.button!==or.MAIN&&o.button!==or.TOUCH&&o.button!==or.ERASER||De.pointers.size>1)return;let c=this.initialPointerDownState(o);if(this.setState({selectedElementsAreBeingDragged:!1}),this.handleTextAutoResizeHandlePointerDown(r,c.origin)||this.handleDraggingScrollBar(o,c)||(this.clearSelectionIfNotUsingSelection(),this.handleSelectionOnPointerDown(o,c))||!(!this.state.penMode||o.pointerType!=="touch"||this.state.activeTool.type==="selection"||this.state.activeTool.type==="lasso"||this.state.activeTool.type==="text"||this.state.activeTool.type==="image"))return;if(this.state.activeTool.type==="lasso"){let f=c.hit.element&&this.isASelectedElement(c.hit.element);(o.altKey&&o[S.CTRL_OR_CMD]&&!c.resize.handleType||!c.hit.hasHitCommonBoundingBoxOfSelectedElements&&!c.resize.handleType&&!f)&&(this.lassoTrail.hasCurrentTrail||this.lassoTrail.startPath(c.origin.x,c.origin.y,o.shiftKey),c.drag.blockDragging=this.editorInterface.formFactor==="desktop"),this.editorInterface.formFactor!=="desktop"&&c.hit.element&&!f&&(this.setState(y=>{let E={...y.selectedElementIds,[c.hit.element.id]:!0},w=[];Object.keys(y.selectedElementIds).forEach(I=>{let A=this.scene.getElement(I);A&&w.push(A)});let C=c.hit.element;if(ae(C))cr(w,C.id).forEach(I=>{delete E[I.id]});else if(C.frameId)E[C.frameId]&&delete E[C.id];else{let I=C.groupIds,A=new Set(I.flatMap(M=>Ye(this.scene.getNonDeletedElements(),M)).filter(M=>ae(M)).map(M=>M.id));A.size>0&&w.forEach(M=>{M.frameId&&A.has(M.frameId)&&(delete E[M.id],M.groupIds.flatMap(N=>Ye(this.scene.getNonDeletedElements(),N)).forEach(N=>{delete E[N.id]}))})}return{...Lt({editingGroupId:y.editingGroupId,selectedElementIds:E},this.scene.getNonDeletedElements(),y,this),showHyperlinkPopup:C.link||fo(C)?"info":!1}}),c.hit.wasAddedToSelection=!0)}else this.state.activeTool.type==="text"?this.handleTextOnPointerDown(o,c):this.state.activeTool.type==="arrow"||this.state.activeTool.type==="line"?this.handleLinearElementOnPointerDown(o,this.state.activeTool.type,c):this.state.activeTool.type==="freedraw"?this.handleFreeDrawElementOnPointerDown(o,this.state.activeTool.type,c):this.state.activeTool.type==="custom"?this.cursor.applyForTool():this.state.activeTool.type===xt.frame||this.state.activeTool.type===xt.magicframe?this.createFrameElementOnPointerDown(c,this.state.activeTool.type):this.state.activeTool.type==="laser"?this.laserTrails.startPath(c.lastCoords.x,c.lastCoords.y):this.state.activeTool.type==="autoshape"?this.drawShape.handlePointerDown(c):this.state.activeTool.type===xt.bucketfill?this.bucketFill.handlePointerDown(n):this.state.activeTool.type!=="eraser"&&this.state.activeTool.type!=="hand"&&this.state.activeTool.type!=="image"&&this.createGenericElementOnPointerDown(this.state.activeTool.type,c);this.props?.onPointerDown?.(this.state.activeTool,c),this.onPointerDownEmitter.trigger(this.state.activeTool,c,o),this.state.activeTool.type==="eraser"&&this.eraserTrail.startPath(c.lastCoords.x,c.lastCoords.y);let p=this.onPointerMoveFromPointerDownHandler(c),m=this.onPointerUpFromPointerDownHandler(c),u=this.onKeyDownFromPointerDownHandler(c),b=this.onKeyUpFromPointerDownHandler(c);this.missingPointerEventCleanupEmitter.once(f=>m(f||o.nativeEvent)),(!this.state.viewModeEnabled||this.isActiveToolPointerCapturing())&&(this.ownerWindow.addEventListener("pointermove",p),this.ownerWindow.addEventListener("pointerup",m),this.ownerWindow.addEventListener("keydown",u),this.ownerWindow.addEventListener("keyup",b),c.eventListeners.onMove=p,c.eventListeners.onUp=m,c.eventListeners.onKeyUp=b,c.eventListeners.onKeyDown=u)});T(this,"handleCanvasPointerUp",o=>{if(!this.isInteractionEnabled()){(this.isLinksEnabled()||this.isEmbedsEnabled())&&this.handleInteractiveContentPointerUp(o);return}if(ar("COMPLEX_BINDINGS")&&this.resetDelayedBindMode(),this.removePointer(o),this.lastPointerUpIsDoubleClick=this.isDoubleClick(this.lastPointerUpEvent,o),this.lastPointerUpEvent=o,!o.ctrlKey){let a=this.state.bindingPreference==="enabled";this.state.isBindingEnabled!==a&&this.setState({isBindingEnabled:a})}let r=ze({clientX:o.clientX,clientY:o.clientY},this.state),{x:n,y:i}=r;this.lastPointerMoveCoords={x:n,y:i},!this.handleIframeLikeCenterClick()&&!this.maybeHandleElementLinkClick(o,r)&&this.state.viewModeEnabled&&this.setState({activeEmbeddable:null,selectedElementIds:{}})});T(this,"maybeOpenContextMenuAfterPointerDownOnTouchDevices",o=>{o.pointerType==="touch"&&(bm=!1,da?bm=!0:da=this.ownerWindow.setTimeout(()=>{da=0,bm||this.handleCanvasContextMenu(o)},My))});T(this,"resetContextMenuTimer",()=>{clearTimeout(da),da=0,bm=!1});T(this,"maybeCleanupAfterMissingPointerUp",o=>{ac?.(),this.missingPointerEventCleanupEmitter.trigger(o).clear()});T(this,"handleCanvasPanUsingWheelOrSpaceDrag",o=>{if(!(De.pointers.size<=1&&((o.button===or.WHEEL||o.button===or.MAIN&&ci||Uc(this.state))&&(this.isInteractionEnabled()||this.isNavigationEnabled())||this.state.viewModeEnabled&&!this.isActiveToolPointerCapturing())))return!1;di=!0,this.focusContainer(),this.state.editingTextElement||o.preventDefault();let r=!1,n=/Linux/.test(this.ownerWindow.navigator.platform);this.cursor.set(Be.GRABBING);let{clientX:i,clientY:a}=o,s=Xh(c=>{let d=i-c.clientX,p=a-c.clientY;if(i=c.clientX,a=c.clientY,n&&!r&&(Math.abs(d)>1||Math.abs(p)>1)){r=!0;let m=b=>{this.ownerDocument.body.removeEventListener("paste",m),b.stopPropagation()},u=()=>{setTimeout(()=>{this.ownerDocument.body.removeEventListener("paste",m),this.ownerWindow.removeEventListener("pointerup",u)},100)};this.ownerDocument.body.addEventListener("paste",m),this.ownerWindow.addEventListener("pointerup",u)}this.viewport.translate(m=>({scrollX:m.scrollX-d/m.zoom.value,scrollY:m.scrollY-p/m.zoom.value}))});jE=s.flush;let l=wt(ac=()=>{ac=null,jE=null,di=!1,ci||this.cursor.reset(),this.setState({cursorButton:"up"},this.viewport.releaseOverscroll),this.savePointer(o.clientX,o.clientY,"up"),this.ownerWindow.removeEventListener("pointermove",s),this.ownerWindow.removeEventListener("pointerup",l),this.ownerWindow.removeEventListener("blur",l),s.flush()});return this.ownerWindow.addEventListener("blur",l),this.ownerWindow.addEventListener("pointermove",s,{passive:!0}),this.ownerWindow.addEventListener("pointerup",l),!0});T(this,"updateMultiTouchGesture",o=>{De.pointers.has(o.pointerId)&&De.pointers.set(o.pointerId,{x:o.clientX,y:o.clientY});let r=De.initialScale;if(De.pointers.size===2&&De.lastCenter&&r&&De.initialDistance){let n=k0(De.pointers),i=n.x-De.lastCenter.x,a=n.y-De.lastCenter.y;De.lastCenter=n;let s=M0(Array.from(De.pointers.values())),l=this.state.activeTool.type==="freedraw"&&this.state.penMode?1:s/De.initialDistance,c=l?zn(r*l):this.state.zoom.value;this.setState(d=>{let p=Fn({viewportX:n.x,viewportY:n.y,nextZoom:c},d),m=p.zoom.value;return this.viewport.translate({zoom:p.zoom,scrollX:p.scrollX+2*i/m,scrollY:p.scrollY+2*a/m,shouldCacheIgnoreZoom:!0},{zoomPreConstrained:!0}),null}),this.viewport.isLockedTransitionPending||this.resetShouldCacheIgnoreZoomDebounced()}else De.lastCenter=De.initialDistance=De.initialScale=null});T(this,"clearSelectionIfNotUsingSelection",()=>{Ec(this.state.activeTool.type)||this.setState({selectedElementIds:Ue({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})});T(this,"handleSelectionOnPointerDown",(o,r)=>{if(Ec(this.state.activeTool.type)){let n=this.scene.getNonDeletedElements(),i=this.scene.getNonDeletedElementsMap(),a=this.scene.getSelectedElements(this.state);if(a.length===1&&!this.state.selectedLinearElement?.isEditing&&!He(a[0])&&!(Me(a[0])&&(this.editorInterface.userAgent.isMobileDevice||a[0].points.length===2))&&!(this.state.selectedLinearElement&&this.state.selectedLinearElement.hoverPointIndex!==-1)){let s=ob(n,this.state,r.origin.x,r.origin.y,this.state.zoom,o.pointerType,this.scene.getNonDeletedElementsMap(),this.editorInterface);s!=null&&(s.transformHandleType==="rotation"?(this.setState({resizingElement:s.element}),r.resize.handleType=s.transformHandleType):(this.state.croppingElementId||this.setState({resizingElement:s.element}),r.resize.handleType=s.transformHandleType))}else a.length>1&&(r.resize.handleType=rb(Te(a),r.origin.x,r.origin.y,this.state.zoom,o.pointerType,this.editorInterface));if(r.resize.handleType)r.resize.isResizing=!0,r.resize.offset=Um(v2(r.resize.handleType,a,i,r.origin.x,r.origin.y)),a.length===1&&Me(a[0])&&a[0].points.length===2&&(r.resize.arrowDirection=w2(r.resize.handleType,a[0]));else{if(this.state.selectedLinearElement){let m=this.state.selectedLinearElement,u=j.handlePointerDown(o,this,this.store,r.origin,m,this.scene);if(u.hitElement&&(r.hit.element=u.hitElement),r.hit.arrowLabel=u.hitBoundText,u.linearElementEditor&&this.setState({selectedLinearElement:u.linearElementEditor}),u.didAddPoint)return!0;let b=this.scene.getNonDeletedElementsMap(),f=j.getElement(m.elementId,b);if(f&&Vt(f)){let{hitFocusPoint:x,pointerOffset:v,arrowOtherEndpointInitialBinding:y}=h2(f,r,b,this.state);if(x)return this.setState({selectedLinearElement:{...m,hoveredFocusPointBinding:x,draggedFocusPointBinding:x,pointerOffset:v,initialState:{...m.initialState,arrowOtherEndpointInitialBinding:y}}}),!1}}let s=this.getElementsAtPosition(r.origin.x,r.origin.y,{includeLockedElements:!0}),l=s.filter(m=>!m.locked),c=this.getElementAtPosition(r.origin.x,r.origin.y,{allHitElements:s});if((!c||c.id!==this.state.activeLockedId)&&this.setState({activeLockedId:null}),c&&c.locked&&!l.some(m=>this.state.selectedElementIds[m.id])?r.hit.element=null:r.hit.element=r.hit.element??this.getElementAtPosition(r.origin.x,r.origin.y),this.hitLinkElement=this.getElementLinkAtPosition(r.origin,c),this.hitLinkElement)return!0;if(this.state.croppingElementId&&r.hit.element?.id!==this.state.croppingElementId&&this.finishImageCropping(),r.hit.element&&this.getElementLinkAtPosition({x:r.origin.x,y:r.origin.y},r.hit.element))return!1;r.hit.allHitElements=l;let d=r.hit.element,p=r.hit.allHitElements.some(m=>this.isASelectedElement(m))||d!==null&&this.isASelectedElement(d);if((d===null||!p)&&!o.shiftKey&&!r.hit.hasHitCommonBoundingBoxOfSelectedElements&&(!this.state.selectedLinearElement?.isEditing||d&&d?.id!==this.state.selectedLinearElement?.elementId)&&this.clearSelection(d),this.state.selectedLinearElement?.isEditing)this.setState(m=>({selectedLinearElement:m.selectedLinearElement?{...m.selectedLinearElement,isEditing:!!d&&d.id===this.state.selectedLinearElement?.elementId}:null,selectedElementIds:m.selectedLinearElement?Ue({[m.selectedLinearElement.elementId]:!0},this.state):Ue({},m)}));else if(d!=null){if(o[S.CTRL_OR_CMD])return o.altKey?(this.state.openDialog?.name==="elementLinkSelector"&&this.setOpenDialog(null),this.lassoTrail.startPath(r.origin.x,r.origin.y,o.shiftKey),this.setActiveTool({type:"lasso",fromSelection:!0}),!1):(this.state.selectedElementIds[d.id]||(r.hit.wasAddedToSelection=!0),this.setState(m=>({...uw(m,d),previousSelectedElementIds:this.state.selectedElementIds})),!1);this.state.selectedElementIds[d.id]||(this.state.editingGroupId&&!Ms(d,this.state.editingGroupId)&&this.setState({selectedElementIds:Ue({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null}),!p&&!r.hit.hasHitCommonBoundingBoxOfSelectedElements&&(this.setState(m=>{let u={...m.selectedElementIds,[d.id]:!0},b=[];if(Object.keys(m.selectedElementIds).forEach(f=>{let x=this.scene.getElement(f);x&&b.push(x)}),ae(d))cr(b,d.id).forEach(f=>{delete u[f.id]});else if(d.frameId)u[d.frameId]&&delete u[d.id];else{let f=d.groupIds,x=new Set(f.flatMap(v=>Ye(this.scene.getNonDeletedElements(),v)).filter(v=>ae(v)).map(v=>v.id));x.size>0&&b.forEach(v=>{v.frameId&&x.has(v.frameId)&&(delete u[v.id],v.groupIds.flatMap(y=>Ye(this.scene.getNonDeletedElements(),y)).forEach(y=>{delete u[y.id]}))})}return m.openDialog?.name==="elementLinkSelector"&&(d.groupIds.some(f=>m.selectedGroupIds[f])||(u={[d.id]:!0})),{...Lt({editingGroupId:m.editingGroupId,selectedElementIds:u},this.scene.getNonDeletedElements(),m,this),showHyperlinkPopup:d.link||fo(d)?"info":!1}}),r.hit.wasAddedToSelection=!0))}this.setState({previousSelectedElementIds:this.state.selectedElementIds})}}return!1});T(this,"handleTextOnPointerDown",(o,r)=>{if(this.state.editingTextElement)return;let n=r.origin.x,i=r.origin.y;this.setState({hoveredArrowTextAnchor:null});let a=this.arrowText.getBindableEndpointAtPosition(n,i);if(a)this.startTextEditing({sceneX:n,sceneY:i,autoEdit:!1,arrowEndpoint:a});else{let s=this.getElementAtPosition(n,i,{includeBoundTextElement:!0}),l=this.getTextBindableContainerAtPosition(n,i);if(Yt(s)){l=s;let c=this.arrowText.getLabelCenter(s);c?(n=c.x,i=c.y):(n=s.x+s.width/2,i=s.y+s.height/2)}this.startTextEditing({sceneX:n,sceneY:i,insertAtParentCenter:!o.altKey,container:l,autoEdit:!1,initialCaretSceneCoords:{x:n,y:i}})}this.isToolLocked()?this.cursor.reset():this.setState({activeTool:ht(this.state,{type:this.state.preferredSelectionTool.type})},()=>this.cursor.reset())});T(this,"handleFreeDrawElementOnPointerDown",(o,r,n)=>{let[i,a]=Ot(n.origin.x,n.origin.y,null),s=this.getTopLayerFrameAtSceneCoords({x:i,y:a}),l=o.pressure===.5,c=this.state.currentItemStrokeVariability,d=Uw({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("freedraw"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:null,simulatePressure:l,strokeOptions:{variability:c,streamline:o.pointerType!=="mouse"?Fy:By},locked:!1,frameId:s?s.id:null,points:[_(0,0)],pressures:l?[]:[o.pressure]});this.insertNewElement(d),this.setState(p=>{let m={...p.selectedElementIds};return delete m[d.id],{selectedElementIds:Ue(m,p)}}),this.setState({newElement:d,suggestedBinding:null})});T(this,"insertIframeElement",({sceneX:o,sceneY:r,width:n,height:i})=>{let[a,s]=Ot(o,r,this.lastPointerDownEvent?.[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=Fw({type:"iframe",x:a,y:s,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("iframe"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("iframe"),opacity:this.state.currentItemOpacity,locked:!1,width:n,height:i});return this.insertNewElement(l),l});T(this,"insertEmbeddableElement",({sceneX:o,sceneY:r,link:n})=>{let[i,a]=Ot(o,r,this.lastPointerDownEvent?.[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),s=Na(n);if(!s)return;s.error instanceof URIError&&this.setToast({message:h("toast.unrecognizedLinkFormat"),closable:!0});let l=Zf({type:"embeddable",x:i,y:a,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("embeddable"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("embeddable"),opacity:this.state.currentItemOpacity,locked:!1,width:s.intrinsicSize.w,height:s.intrinsicSize.h,link:n});return this.insertNewElement(l),l});T(this,"newImagePlaceholder",({sceneX:o,sceneY:r,addToFrameUnderCursor:n=!0})=>{let[i,a]=Ot(o,r,this.lastPointerDownEvent?.[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),s=n?this.getTopLayerFrameAtSceneCoords({x:i,y:a}):null,l=100/this.state.zoom.value;return Gw({type:"image",strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("image"),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:null,opacity:this.state.currentItemOpacity,locked:!1,frameId:s?s.id:null,x:i-l/2,y:a-l/2,width:l,height:l})});T(this,"handleLinearElementOnPointerDown",(o,r,n)=>{if(o.ctrlKey&&Xo(()=>{this.setState({isBindingEnabled:this.state.bindingPreference!=="enabled"})}),this.state.multiElement){let{multiElement:i,selectedLinearElement:a}=this.state;if(lt(a,"selectedLinearElement is expected to be set"),i.type==="line"&&Mc(i.points,this.state.zoom.value)){Xo(()=>{this.setState({selectedLinearElement:{...a,lastCommittedPoint:i.points[i.points.length-1],initialState:{...a.initialState,lastClickedPoint:-1}}})}),this.actionManager.executeAction(Xt);return}if(He(i)&&i.points.length>1){this.actionManager.executeAction(Xt,"ui",{event:o.nativeEvent,sceneCoords:{x:n.origin.x,y:n.origin.y}});return}let{x:s,y:l}=i,{lastCommittedPoint:c}=a,d=ze(o,this.state),{start:p,end:m}=Vt(i)&&_a(this.state)?cw(i,new Map([[i.points.length-1,{point:i.points[i.points.length-1],isDragging:!1}]]),d.x,d.y,this.scene.getNonDeletedElementsMap(),this.scene.getNonDeletedElements(),this.state,{newArrow:!!this.state.newElement,zoom:this.state.zoom}):{end:{mode:void 0}},u=this.scene.getNonDeletedElementsMap(),b=p?.mode!=null&&m.mode!=null&&p.element.id===m.element.id&&!_c(m.focusPoint,m.element,u),f=m.mode==="orbit"&&i.startBinding?.elementId!==m.element?.id,x=c&&Po(_(n.origin.x-s,n.origin.y-l),c)<Im;if(f||b||i.points.length>1&&x){this.actionManager.executeAction(Xt,"ui",{event:o.nativeEvent,sceneCoords:{x:n.origin.x,y:n.origin.y}});return}this.setState(v=>({selectedElementIds:Ue({...v.selectedElementIds,[i.id]:!0},v)})),this.cursor.set(Be.POINTER)}else{let[i,a]=Ot(n.origin.x,n.origin.y,o[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),s=this.getTopLayerFrameAtSceneCoords({x:i,y:a}),{currentItemStartArrowhead:l,currentItemEndArrowhead:c}=this.state,[d,p]=r==="arrow"?[l,c]:[null,null],m=r==="arrow"?_i({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth(r),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemArrowType===Et.round?{type:Pt.PROPORTIONAL_RADIUS}:null,startArrowhead:d,endArrowhead:p,locked:!1,frameId:s?s.id:null,elbowed:this.state.currentItemArrowType===Et.elbow,fixedSegments:this.state.currentItemArrowType===Et.elbow?[]:null}):so({type:r,x:i,y:a,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth(r),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemRoundness==="round"?{type:Pt.PROPORTIONAL_RADIUS}:null,locked:!1,frameId:s?s.id:null}),u=_(n.origin.x,n.origin.y),b=this.scene.getNonDeletedElementsMap(),f=_a(this.state)?lr(u,this.scene.getNonDeletedElements(),b):null;this.scene.mutateElement(m,{points:[_(0,0),_(0,0)]}),this.insertNewElement(m),Vt(m)&&Pc(m,new Map([[0,{point:_(0,0),isDragging:!1}]]),u[0],u[1],this.scene,this.state,{newArrow:!0,altKey:o.altKey,initialBinding:!0,angleLocked:yi(o.nativeEvent)}),Xo(()=>{this.setState(x=>{let v=null,y=x.selectedElementIds;if(Me(m)){v=new j(m,this.scene.getNonDeletedElementsMap());let E=m.points.length-1;v={...v,selectedPointsIndices:[E],initialState:{...v.initialState,arrowStartIsInside:o.altKey,lastClickedPoint:E,origin:_(n.origin.x,n.origin.y)}}}return y=this.isToolLocked()?x.selectedElementIds:Ue({[m.id]:!0},x),{...x,bindMode:"orbit",newElement:m,suggestedBinding:f&&Vt(m)?{element:f,midPoint:ip(u,f,b,this.state.zoom)}:null,selectedElementIds:y,selectedLinearElement:v}})}),Vt(m)&&ar("COMPLEX_BINDINGS")&&this.handleDelayedBindModeChange(m,f)}});T(this,"createGenericElementOnPointerDown",(o,r)=>{let[n,i]=Ot(r.origin.x,r.origin.y,this.lastPointerDownEvent?.[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),a=this.getTopLayerFrameAtSceneCoords({x:n,y:i}),s={x:n,y:i,strokeColor:o==="stickynote"?this.state.currentItemStickynoteStrokeColor:this.state.currentItemStrokeColor,backgroundColor:o==="stickynote"?this.state.currentItemStickynoteBackgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth(o),strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.getCurrentItemRoundness(o),locked:!1,frameId:a?a.id:null},l;o==="embeddable"?l=Zf({type:"embeddable",...s}):o==="stickynote"?l=Tp({type:"stickynote",...s}):l=Bo({type:o,...s}),l.type==="selection"?this.setState({selectionElement:l}):(this.insertNewElement(l),this.setState({multiElement:null,newElement:l}))});T(this,"createFrameElementOnPointerDown",(o,r)=>{let[n,i]=Ot(o.origin.x,o.origin.y,this.lastPointerDownEvent?.[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),a={x:n,y:i,opacity:this.state.currentItemOpacity,locked:!1,...rt},s=r===xt.magicframe?jf(a):Cp(a);this.insertNewElement(s),this.setState({multiElement:null,newElement:s})});T(this,"restoreReadyToEraseElements",()=>{this.elementsPendingErasure=new Set,this.triggerRender()});T(this,"eraseElements",()=>{let o=!1;this.elementsPendingErasure.forEach(n=>{let i=this.scene.getElement(n);if(Vt(i)){if(i.startBinding){let a=this.scene.getElement(i.startBinding.elementId);bo(a,this.scene.getElementsMapIncludingDeleted(),{boundElements:a.boundElements.filter(s=>s.id!==i.id)})}if(i.endBinding){let a=this.scene.getElement(i.endBinding.elementId);bo(a,this.scene.getElementsMapIncludingDeleted(),{boundElements:a.boundElements.filter(s=>s.id!==i.id)})}}else Sa(i)&&i.boundElements?.forEach(a=>{if(a.type==="arrow"){let s=this.scene.getElement(a.id);s?.startBinding?.elementId===i.id&&bo(s,this.scene.getElementsMapIncludingDeleted(),{startBinding:null}),s?.endBinding?.elementId===i.id&&bo(s,this.scene.getElementsMapIncludingDeleted(),{endBinding:null})}})});let r=this.scene.getElementsIncludingDeleted().map(n=>this.elementsPendingErasure.has(n.id)||n.frameId&&this.elementsPendingErasure.has(n.frameId)||gt(n)&&this.elementsPendingErasure.has(n.containerId)?(o=!0,se(n,{isDeleted:!0})):n);this.elementsPendingErasure=new Set,o&&(this.store.scheduleCapture(),this.scene.replaceAllElements(r))});T(this,"initializeImage",async(o,r)=>{if(!ub(r))throw new Error(h("errors.unsupportedFileType"));let n=r.type;if(this.cursor.set("wait"),n===ue.svg)try{r=bb(eb(await r.text()),r.name)}catch(l){throw console.warn(l),new Error(h("errors.svgImageInsertError"))}let i=await(this.props.generateIdForFile?.(r)||W2(r));if(!i)throw console.warn("Couldn't generate file id or the supplied `generateIdForFile` didn't resolve to one."),new Error(h("errors.imageInsertError"));if(!this.files[i]?.dataURL){let{maxWidthOrHeight:l,maxFileSizeBytes:c}=this.props.imageOptions;try{r=await zp(r,{maxWidthOrHeight:l})}catch(d){console.error("Error trying to resizing image file on insertion",d)}if(r.size>c)throw new Error(h("errors.fileTooBig",{maxSize:`${Math.trunc(c/1024/1024)}MB`}))}let s=this.files[i]?.dataURL||await fb(r);return new Promise(async(l,c)=>{try{let d=this.getLatestInitializedImageElement(o,i);if(this.addMissingFiles([{mimeType:n,id:i,dataURL:s,created:Date.now(),lastRetrieved:Date.now()}]),!this.imageCache.get(i)){this.addNewImagesToImageCache();let{erroredFiles:m}=await this.updateImageCache([d]);if(m.size)throw new Error("Image cache update resulted with an error.")}let p=await this.imageCache.get(i)?.image;if(p&&this.state.newElement?.id!==d.id){d=this.getLatestInitializedImageElement(o,i);let m=this.getImageNaturalDimensions(d,p);Object.assign(d,m)}l(d)}catch(d){console.error(d),c(new Error(h("errors.imageInsertError")))}})});T(this,"getLatestInitializedImageElement",(o,r)=>{let n=this.scene.getElement(o.id)??o;return se(n,{fileId:r})});T(this,"onImageToolbarButtonClick",async()=>{try{let o=this.state.width/2+this.state.offsetLeft,r=this.state.height/2+this.state.offsetTop,{x:n,y:i}=ze({clientX:o,clientY:r},this.state),a=await _p({description:"Image",extensions:Object.keys(uc),multiple:!0});this.insertImages(a,n,i)}catch(o){o.name!=="AbortError"?console.error(o):console.warn(o),this.setState({newElement:null,activeTool:ht(this.state,{type:this.state.preferredSelectionTool.type})},()=>{this.actionManager.executeAction(Xt)})}});T(this,"getImageNaturalDimensions",(o,r)=>{let n=Math.max(this.state.height-120,160),i=Math.min(n,Math.floor(this.state.height*.5)/this.state.zoom.value),a=Math.min(r.naturalHeight,i),s=a*(r.naturalWidth/r.naturalHeight),l=o.x+o.width/2-s/2,c=o.y+o.height/2-a/2;return{x:l,y:c,width:s,height:a,crop:null}});T(this,"updateImageCache",async(o,r=this.files)=>{let{updatedFiles:n,erroredFiles:i}=await b2({imageCache:this.imageCache,fileIds:o.map(a=>a.fileId),files:r});return i.size&&(this.store.scheduleAction(O.NEVER),this.scene.replaceAllElements(this.scene.getElementsIncludingDeleted().map(a=>Ti(a)&&i.has(a.fileId)?se(a,{status:"error"}):a))),{updatedFiles:n,erroredFiles:i}});T(this,"addNewImagesToImageCache",async(o=x2(this.scene.getNonDeletedElements()),r=this.files)=>{let n=o.filter(i=>!i.isDeleted&&!this.imageCache.has(i.fileId));if(n.length){let{updatedFiles:i}=await this.updateImageCache(n,r);if(i.size)for(let a of n)i.has(a.fileId)&&dr.delete(a);i.size&&this.scene.triggerUpdate()}});T(this,"scheduleImageRefresh",OO(()=>{this.addNewImagesToImageCache()},ky));T(this,"handleInteractiveCanvasRef",o=>{o!==null?(this.interactiveCanvas=o,this.cursor.reset(),this.interactiveCanvas.addEventListener("touchstart",this.onTouchStart,{passive:!1}),this.interactiveCanvas.addEventListener("touchend",this.onTouchEnd)):(this.interactiveCanvas?.removeEventListener("touchstart",this.onTouchStart),this.interactiveCanvas?.removeEventListener("touchend",this.onTouchEnd))});T(this,"insertImages",async(o,r,n)=>{let i=50/this.state.zoom.value,a=tb(o.map(()=>this.newImagePlaceholder({sceneX:r,sceneY:n})),r,n,i);this.insertNewElements(a);let s=await Promise.all(a.map(async(m,u)=>{try{return await this.initializeImage(m,await Zc(o[u]))}catch(b){return this.setState({errorMessage:b.message||h("errors.imageInsertError")}),se(m,{isDeleted:!0})}})),l=te(s),c=tb(s.filter(m=>!m.isDeleted),r,n,i),d=te(c),p=this.scene.getElementsIncludingDeleted().map(m=>d.get(m.id)??l.get(m.id)??m);this.updateScene({appState:{selectedElementIds:Ue(Object.fromEntries(c.map(m=>[m.id,!0])),this.state)},elements:p,captureUpdate:O.IMMEDIATELY}),this.setState({},()=>{this.actionManager.executeAction(Xt)})});T(this,"handleAppOnDrop",async o=>{if(!this.isInteractionEnabled())return;let{x:r,y:n}=ze(o,this.state),i=await ll(o),a=i.getFiles();if(a.length===1){let{file:p,fileHandle:m}=a[0];if(p&&(p.type===ue.png||p.type===ue.svg))try{let u=await Fp(p,this.state,this.scene.getElementsIncludingDeleted(),m);this.syncActionResult({...u,appState:{...u.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:O.IMMEDIATELY});return}catch(u){if(u.name!=="EncodingError")throw new Error(h("alerts.couldNotLoadInvalidFile"))}}let s=a.map(p=>p.file).filter(p=>ub(p));if(s.length>0&&this.isToolSupported("image"))return this.insertImages(s,r,n);let l=i.getData(ue.excalidrawlibIds),c=i.getData(ue.excalidrawlib);if(l||c){try{let p=null;if(l){let{itemIds:m}=JSON.parse(l);p=(await this.library.getLatestLibrary()).filter(b=>m.includes(b.id))}else c&&(p=G2(c));p?.length&&(p=p.map(m=>({...m,elements:Bn({type:"everything",elements:m.elements,randomizeSeed:!0,preserveFrameChildrenOrder:!0}).duplicatedElements})),this.addElementsFromPasteOrLibrary({elements:Il(p),position:o,files:null}))}catch(p){this.setState({errorMessage:p.message})}return}if(a.length>0){let{file:p,fileHandle:m}=a[0];p&&await this.loadFileToCanvas(p,m)}let d=i.findByType(ue.text);if(d){let p=d.value;if(p&&Ds(p,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(p)||Na(p)?.type==="video")){let m=this.insertEmbeddableElement({sceneX:r,sceneY:n,link:Rr(p)});m&&(this.store.scheduleCapture(),this.setState({selectedElementIds:{[m.id]:!0}}))}}});T(this,"loadFileToCanvas",async(o,r)=>{o=await Zc(o);try{let n=this.scene.getElementsIncludingDeleted(),i;try{i=await hb(o,this.state,n,r)}catch(a){let s=a instanceof _2;if(s&&a.code==="IMAGE_NOT_CONTAINS_SCENE_DATA"&&!this.isToolSupported("image")){this.setState({isLoading:!1,errorMessage:h("errors.imageToolNotSupported")});return}let l=s?h("alerts.cannotRestoreFromImage"):h("alerts.couldNotLoadInvalidFile");this.setState({isLoading:!1,errorMessage:l})}if(!i)return;i.type===ue.excalidraw?(Ls(n.concat(i.data.elements)),this.store.scheduleMicroAction({action:O.NEVER,elements:n,appState:void 0}),this.setState({isLoading:!0}),this.syncActionResult({...i.data,appState:{...i.data.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:O.IMMEDIATELY})):i.type===ue.excalidrawlib&&await this.library.updateLibrary({libraryItems:o,merge:!0,openLibraryMenu:!0}).catch(a=>{console.error(a),this.setState({errorMessage:h("errors.importLibraryError")})})}catch(n){this.setState({isLoading:!1,errorMessage:n.message})}});T(this,"handleCanvasContextMenu",o=>{if(o.preventDefault(),!this.isInteractionEnabled()||(this.bucketFill.cancel(),("pointerType"in o.nativeEvent&&o.nativeEvent.pointerType==="touch"||"pointerType"in o.nativeEvent&&o.nativeEvent.pointerType==="pen"&&o.button!==or.SECONDARY)&&this.state.activeTool.type!==this.state.preferredSelectionTool.type))return;let{x:r,y:n}=ze(o,this.state),i=this.getElementAtPosition(r,n,{preferSelected:!0,includeLockedElements:!0}),a=this.scene.getSelectedElements(this.state),s=this.isHittingCommonBoundingBoxOfSelectedElements({x:r,y:n},a),l=i||s?"element":"canvas",c=this.excalidrawContainerRef.current,{top:d,left:p}=c.getBoundingClientRect(),m=o.clientX-p,u=o.clientY-d;be("contextMenu","openContextMenu",l),this.setState({...i&&!this.state.selectedElementIds[i.id]?{...this.state,...Lt({editingGroupId:this.state.editingGroupId,selectedElementIds:{[i.id]:!0}},this.scene.getNonDeletedElements(),this.state,this),selectedLinearElement:Me(i)?new j(i,this.scene.getNonDeletedElementsMap()):null}:this.state,showHyperlinkPopup:!1},()=>{this.setState({contextMenu:{top:u,left:m,items:this.getContextMenuItems(l)}})})});T(this,"maybeDragNewGenericElement",(o,r,n=!0)=>{let i=this.state.selectionElement,a=o.lastCoords;if(i&&o.boxSelection.hasOccurred&&this.state.activeTool.type!=="eraser"){Jf({newElement:i,elementType:this.state.activeTool.type,originX:o.origin.x,originY:o.origin.y,x:a.x,y:a.y,width:Ta(o.origin.x,a.x),height:Ta(o.origin.y,a.y),shouldMaintainAspectRatio:va(r),shouldResizeFromCenter:!1,scene:this.scene,zoom:this.state.zoom.value,informMutation:!1});return}let s=this.state.newElement;if(!s||this.arrowText.maybeDragNewText(s,a))return;let[l,c]=Ot(a.x,a.y,r[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),d=Ti(s)&&this.imageCache.get(s.fileId)?.image,p=d&&!(d instanceof Promise)?d.width/d.height:null;this.maybeCacheReferenceSnapPoints(r,[s]);let{snapOffset:m,snapLines:u}=xk(s,this,r,{x:o.originInGrid.x+(this.state.originSnapOffset?.x??0),y:o.originInGrid.y+(this.state.originSnapOffset?.y??0)},{x:l-o.originInGrid.x,y:c-o.originInGrid.y},this.scene.getNonDeletedElementsMap());l+=m.x,c+=m.y,this.setState({snapLines:u}),Vt(s)||Jf({newElement:s,elementType:this.state.activeTool.type,originX:o.originInGrid.x,originY:o.originInGrid.y,x:l,y:c,width:Ta(o.originInGrid.x,l),height:Ta(o.originInGrid.y,c),shouldMaintainAspectRatio:nt(s)||et(s)?!va(r):va(r),shouldResizeFromCenter:Af(r),zoom:this.state.zoom.value,scene:this.scene,widthAspectRatio:p,originOffset:this.state.originSnapOffset,informMutation:n}),this.setState({newElement:s}),(this.state.activeTool.type===xt.frame||this.state.activeTool.type===xt.magicframe)&&this.setState({elementsToHighlight:Oo(this.scene.getNonDeletedElements(),s,this.state,this.scene.getNonDeletedElementsMap())})});T(this,"maybeHandleCrop",(o,r)=>{if(!this.state.croppingElementId)return!1;let n=o.resize.handleType,i=o.lastCoords,[a,s]=Ot(i.x-o.resize.offset.x,i.y-o.resize.offset.y,r[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),l=this.scene.getNonDeletedElementsMap().get(this.state.croppingElementId);if(n&&l&&nt(l)){let c=o.originalElements.get(l.id),d=Ti(l)&&this.imageCache.get(l.fileId)?.image;if(c&&nt(c)&&d&&!(d instanceof Promise)){let[p,m]=Ot(i.x,i.y,r[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),u={x:p-o.originInGrid.x,y:m-o.originInGrid.y};this.maybeCacheReferenceSnapPoints(r,[l]);let{snapOffset:b,snapLines:f}=L0([l],[c],this,r,u,n);this.scene.mutateElement(l,Tv(l,this.scene.getNonDeletedElementsMap(),n,d.naturalWidth,d.naturalHeight,a+b.x,s+b.y,r.shiftKey?c.width/c.height:void 0)),io(l,this.scene),this.setState({isCropping:n&&n!=="rotation",snapLines:f})}return!0}return!1});T(this,"maybeHandleResize",(o,r)=>{let n=this.scene.getSelectedElements(this.state),i=n.filter(ae),a=o.resize.handleType;if(i.length>0&&a==="rotation"||n.length===1&&He(n[0])||this.state.croppingElementId)return!1;this.activeResizeHandle=a&&a!=="rotation"?a:null,this.setState({isResizing:a&&a!=="rotation",isRotating:a==="rotation",activeEmbeddable:null});let s=o.lastCoords,[l,c]=Ot(s.x-o.resize.offset.x,s.y-o.resize.offset.y,r[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),d=new Map;if(i.forEach(m=>{cr(this.scene.getNonDeletedElements(),m.id).forEach(b=>{d.set(m.id+b.id,{x:b.x-m.x,y:b.y-m.y})})}),!this.state.selectedElementsAreBeingDragged){let[m,u]=Ot(s.x,s.y,r[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),b={x:m-o.originInGrid.x,y:u-o.originInGrid.y},f=[...o.originalElements.values()];this.maybeCacheReferenceSnapPoints(r,n);let{snapOffset:x,snapLines:v}=L0(n,ie(f,this.state),this,r,b,a);l+=x.x,c+=x.y,this.setState({snapLines:v})}let p=n.some(m=>nt(m))||n.length===1&&et(n[0])&&typeof a=="string"&&a.length===2;if(E2(o.originalElements,a,n,this.scene,yi(r),Af(r),p?!va(r):va(r),l,c,o.resize.center.x,o.resize.center.y)){let m=new Set;return i.forEach(u=>{Oo(this.scene.getNonDeletedElements(),u,this.state,this.scene.getNonDeletedElementsMap()).forEach(b=>{Fo(b)?m.add(b):console.error("[NONDELETED][INVARIANT] Skipped highlighting deleted element in resizing frame")})}),this.setState({elementsToHighlight:[...m]}),!0}return!1});T(this,"getContextMenuItems",o=>{let r=[];if(r.push(Ld,Ad),o==="canvas")return this.state.viewModeEnabled?[...r,ts,ei,Ji,ti]:[Kx,Ft,Ld,Ad,_d,Ft,Tu,vS,Ft,ts,hl,gl,fl,ei,Ji,ti];if(r.push(_d),this.state.viewModeEnabled)return[es,...r];let n=this.editorInterface.formFactor==="desktop"?[Ft,xu,Eu,yu,vu]:[];return[Ft,Md,es,Kx,Ft,rk,nk,ik,Ft,Vh,Ft,...r,Ft,sh,lh,Ft,ch,S0,fh,bh,uS,dh,Ft,uh,...n,Ft,hh,gh,Ft,is,Ft,xl,wh,Ft,Cu,El,Ft,qs]});T(this,"savePointer",(o,r,n)=>{if(!this.isInteractionEnabled()&&!this.isToolSupported(this.state.activeTool.type)||!o||!r)return;let{x:i,y:a}=ze({clientX:o,clientY:r},this.state);isNaN(i)||isNaN(a);let s={x:i,y:a,tool:this.state.activeTool.type==="laser"?"laser":"pointer"};this.props.onPointerUpdate?.({pointer:s,button:n,pointersMap:De.pointers})});T(this,"resetShouldCacheIgnoreZoomDebounced",kn(()=>{this.unmounted||this.setState({shouldCacheIgnoreZoom:!1})},300));T(this,"updateDOMRect",o=>{if(this.excalidrawContainerRef?.current){let r=this.excalidrawContainerRef.current,{width:n,height:i,left:a,top:s}=r.getBoundingClientRect(),{width:l,height:c,offsetTop:d,offsetLeft:p}=this.state;if(n===l&&i===c&&a===p&&s===d){o&&o();return}this.setState({width:n,height:i,offsetLeft:a,offsetTop:s},()=>{o&&o()}),this.viewport.constrain()}});T(this,"refresh",()=>{this.setState({...this.getCanvasOffsets()})});T(this,"watchState",()=>{});let r=Un(),{viewModeEnabled:n=!1,zenModeEnabled:i=!1,gridModeEnabled:a=!1,objectsSnapModeEnabled:s=!1,theme:l=r.theme,name:c=`${h("labels.untitled")}-${Lf()}`}=o,d=null;o.activeTool&&(o.activeTool.type==="image"?console.warn('"image" tool cannot be forced via "props.activeTool"'):this.isToolSupported(o.activeTool.type,o)?d=ht(r,o.activeTool):console.warn(`"${o.activeTool.type}" tool ("props.activeTool") cannot be activated \u2014 disabled via "UIOptions.tools", or not enabled while non-interactive (see "interaction.enabled.tools")`)),this.state={...r,theme:l,exportWithDarkMode:l===Q.DARK,isLoading:!0,...this.getCanvasOffsets(),viewModeEnabled:this.isInteractionEnabled(o)?n:!0,activeTool:d??r.activeTool,zenModeEnabled:i,objectsSnapModeEnabled:s,gridModeEnabled:a??r.gridModeEnabled,name:c,width:this.ownerWindow.innerWidth,height:this.ownerWindow.innerHeight},this.refreshEditorInterface(),this.stylesPanelMode=ya(this.editorInterface),this.id=FO(),this.library=new HS(this),this.actionManager=new Yh(this.syncActionResult,()=>this.state,()=>this.scene.getElementsIncludingDeleted(),this),this.scene=new qf,this.canvas=this.ownerDocument.createElement("canvas"),this.rc=BO.canvas(this.canvas),this.renderer=new Vd(this.scene),this.visibleElements=[],this.store=new jw(this),this.history=new Gd(this.store),this.excalidrawContainerValue={container:this.excalidrawContainerRef.current,id:this.id},this.fonts=new Hn(this.scene,this.ownerDocument),this.history=new Gd(this.store),this.actionManager.registerAll(bu),this.actionManager.registerAction(sk(this.history)),this.actionManager.registerAction(lk(this.history)),this.api=this.createExcalidrawAPI()}get ownerDocument(){return this.props.ownerDocument??this.excalidrawContainerRef.current?.ownerDocument??document}get ownerWindow(){return this.ownerDocument.defaultView??window}createExcalidrawAPI(){return{app:this,isDestroyed:!1,updateScene:this.updateScene,applyDeltas:this.applyDeltas,mutateElement:this.mutateElement,updateLibrary:this.library.updateLibrary,addFiles:this.addFiles,resetScene:this.resetScene,getSceneElementsIncludingDeleted:this.getSceneElementsIncludingDeleted,getSceneElementsMapIncludingDeleted:this.getSceneElementsMapIncludingDeleted,history:{clear:this.resetHistory},setViewport:this.viewport.setViewport,getViewportOffsets:this.viewport.getOffsets,getSceneElements:this.getSceneElements,getAppState:()=>this.state,getFiles:()=>this.files,getName:this.getName,registerAction:r=>{this.actionManager.registerAction(r)},refresh:this.refresh,setToast:this.setToast,id:this.id,setActiveTool:this.setActiveTool,setCursor:this.cursor.set,resetCursor:this.cursor.reset,getEditorInterface:()=>this.editorInterface,updateFrameRendering:this.updateFrameRendering,toggleSidebar:this.toggleSidebar,onChange:r=>this.onChangeEmitter.on(r),onIncrement:r=>this.store.onStoreIncrementEmitter.on(r),onPointerDown:r=>this.onPointerDownEmitter.on(r),onPointerUp:r=>this.onPointerUpEmitter.on(r),onScrollChange:r=>this.onScrollChangeEmitter.on(r),onUserFollow:r=>this.onUserFollowEmitter.on(r),onStateChange:this.onStateChange,onEvent:this.onEvent}}isInteractionEnabled(o=this.props){return o.interaction!==!1&&typeof o.interaction!="object"}isLinksEnabled(o=this.props){return typeof o.interaction=="object"&&o.interaction!==null?o.interaction.enabled?.links===!0||o.interaction.enabled?.interactiveContent===!0:o.interaction!==!1}isNavigationEnabled(o=this.props){return typeof o.interaction=="object"&&o.interaction!==null?o.interaction.enabled?.navigation===!0:o.interaction!==!1}isEmbedsEnabled(o=this.props){return typeof o.interaction=="object"&&o.interaction!==null?o.interaction.enabled?.embeds===!0||o.interaction.enabled?.interactiveContent===!0:o.interaction!==!1}isBrowserZoomEnabled(o=this.props){return typeof o.interaction=="object"&&o.interaction!==null?o.interaction.enabled?.browserZoom===!0:!1}isToolLocked(){return this.state.activeTool.locked||this.props.activeTool!=null}isActiveToolPointerCapturing(){return this.isInteractionEnabled()?this.state.activeTool.type==="laser"||this.state.activeTool.type==="custom":this.isToolSupported(this.state.activeTool.type)}isDefaultUIEnabled(o=this.props){return o.ui!==!1&&(typeof o.ui!="object"||o.ui===null)}isUIControlEnabled(o,r=this.props){return typeof r.ui=="object"&&r.ui!==null?r.ui.enabled?.[o]===!0:r.ui!==!1}setSessionExportThemeOverride(o){u6=o}onWindowMessage(o){if(o.origin!=="https://player.vimeo.com"&&o.origin!=="https://www.youtube.com")return;let r=null;try{r=JSON.parse(o.data)}catch{}if(r)switch(o.origin){case"https://player.vimeo.com":if(r.method==="paused"){let n=null,i=this.ownerDocument.body.querySelectorAll("iframe.excalidraw__embeddable");if(!i)break;for(let a of i)a.contentWindow===o.source&&(n=a.contentWindow);n?.postMessage(JSON.stringify({method:r.value?"play":"pause",value:!0}),"*")}break;case"https://www.youtube.com":if(r.event==="infoDelivery"&&r.info&&r.id&&typeof r.info.playerState=="number"){let n=r.id,i=r.info.playerState;Object.values(pc).includes(i)&&ZE.set(n,i)}break}}handleSkipBindMode(){if(this.state.selectedLinearElement?.initialState&&!this.state.selectedLinearElement.initialState.arrowStartIsInside){lt(this.lastPointerMoveCoords,"Missing last pointer move coords when changing bind skip mode for arrow start");let o=this.scene.getNonDeletedElementsMap(),r=lr(_(this.lastPointerMoveCoords.x,this.lastPointerMoveCoords.y),this.scene.getNonDeletedElements(),o),n=j.getElement(this.state.selectedLinearElement.elementId,o);n?.startBinding&&r?.id===n.startBinding.elementId&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,initialState:{...this.state.selectedLinearElement.initialState,arrowStartIsInside:!0}}})}if(this.state.bindMode==="orbit"&&(this.bindModeHandler&&(clearTimeout(this.bindModeHandler),this.bindModeHandler=null),Xo(()=>{this.setState({bindMode:"skip"})}),this.lastPointerMoveCoords&&this.state.selectedLinearElement?.selectedPointsIndices&&this.state.selectedLinearElement?.selectedPointsIndices.length)){let{x:o,y:r}=this.lastPointerMoveCoords,n=this.lastPointerMoveEvent??this.lastPointerDownEvent?.nativeEvent;lt(n,"Last event must exist");let i=o-this.state.selectedLinearElement.pointerOffset.x,a=r-this.state.selectedLinearElement.pointerOffset.y,s=this.state.multiElement?j.handlePointerMove(n,this,i,a,this.state.selectedLinearElement):j.handlePointDragging(n,this,i,a,this.state.selectedLinearElement);s&&this.setState(s)}}resetDelayedBindMode(){this.bindModeHandler&&(clearTimeout(this.bindModeHandler),this.bindModeHandler=null),this.state.bindMode!=="orbit"&&setTimeout(()=>this.setState({bindMode:"orbit"}))}handleDelayedBindModeChange(o,r){if(o.isDeleted||He(o))return;let n=()=>{if(this.bindModeHandler=null,lt(this.lastPointerMoveCoords,"Expected lastPointerMoveCoords to be set"),!this.state.multiElement){if(!this.state.selectedLinearElement||!this.state.selectedLinearElement.selectedPointsIndices||!this.state.selectedLinearElement.selectedPointsIndices.length)return;let b=this.state.selectedLinearElement.selectedPointsIndices.includes(0),f=this.state.selectedLinearElement.selectedPointsIndices.includes(o.points.length-1);if(!b&&!f||b&&f)return}let{x:p,y:m}=this.lastPointerMoveCoords,u=lr(_(p,m),this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap());if(u&&this.state.bindMode!=="skip"){lt(this.state.selectedLinearElement?.elementId===o.id,"The selectedLinearElement is expected to not change while a bind mode timeout is ticking");let b=this.state.selectedLinearElement.initialState.arrowStartIsInside||o.startBinding?.elementId===u.id;Xo(()=>{lt(this.state.selectedLinearElement,"this.state.selectedLinearElement must exist"),this.setState({bindMode:"inside",selectedLinearElement:{...this.state.selectedLinearElement,initialState:{...this.state.selectedLinearElement.initialState,arrowStartIsInside:b}}})});let f=this.lastPointerMoveEvent??this.lastPointerDownEvent?.nativeEvent;lt(f,"Last event must exist");let x=p-this.state.selectedLinearElement.pointerOffset.x,v=m-this.state.selectedLinearElement.pointerOffset.y,y=this.state.multiElement?j.handlePointerMove(f,this,x,v,this.state.selectedLinearElement):j.handlePointDragging(f,this,x,v,this.state.selectedLinearElement);y&&this.setState(y)}},i=!1;if(this.state.selectedLinearElement?.selectedPointsIndices){let p=this.scene.getNonDeletedElementsMap(),m=this.state.selectedLinearElement.selectedPointsIndices.includes(0),u=this.state.selectedLinearElement.selectedPointsIndices.includes(o.points.length-1),b=m?r:o.startBinding&&p.get(o.startBinding.elementId),f=u?r:o.endBinding&&p.get(o.endBinding.elementId),x=b&&Li(b,p),v=f&&Li(f,p);i=!!(x&&v&&b.id!==f.id&&Ps(x,v))}let a=this.state.selectedLinearElement?.selectedPointsIndices?.includes(0),s=this.state.selectedLinearElement?.selectedPointsIndices?.includes(o.points.length-1),l=a?"startBinding":s?"endBinding":null,c=a?"endBinding":s?"startBinding":null,d=c&&o[c]?.mode==="inside"&&o[c]?.elementId===r?.id||l&&o[l]?.mode==="inside"&&r?.id===o[l]?.elementId;l&&c&&o[l]?.mode==="inside"&&r?.id!==o[l]?.elementId&&o[c]?.elementId!==o[l]?.elementId&&this.scene.mutateElement(o,{[l]:{...o[l],mode:"orbit"}},{informMutation:!1,isDragging:!0}),!r||this.previousHoveredBindableElement&&r.id!==this.previousHoveredBindableElement.id?(this.bindModeHandler&&(clearTimeout(this.bindModeHandler),this.bindModeHandler=null),this.state.bindMode==="inside"&&Xo(()=>{this.setState({bindMode:"orbit"})}),this.previousHoveredBindableElement=null):!this.bindModeHandler&&(!this.state.newElement||!o.startBinding||i)&&!d&&(this.bindModeHandler=setTimeout(n,xi)),this.previousHoveredBindableElement=r}cacheEmbeddableRef(o,r){r&&this.iFrameRefs.set(o.id,r)}getHTMLIFrameElement(o){return this.iFrameRefs.get(o.id)}isIframeLikeInteractive(o){return Ca(o)?(o.customData?.generationData??this.magicGenerations.get(o.id))?.status!=="pending":!0}handleIframeLikeCenterClick(){if(!this.lastPointerDownEvent||!this.lastPointerUpEvent||this.lastPointerDownEvent.button!==or.MAIN||ci||!Df(this.state.activeTool.type,["laser","selection","lasso"]))return!1;let o=_(ze({clientX:this.lastPointerDownEvent.clientX,clientY:this.lastPointerDownEvent.clientY},this.state)),r=_(ze({clientX:this.lastPointerUpEvent.clientX,clientY:this.lastPointerUpEvent.clientY},this.state));if(Po(o,r)>tr)return!1;let i=this.getElementAtPosition(o[0],o[1]);if(!(i&&this.lastPointerUpEvent.timeStamp-this.lastPointerDownEvent.timeStamp<=300&&De.pointers.size<2&&Ts(i)&&this.isIframeLikeInteractive(i)&&(this.state.viewModeEnabled||this.state.activeTool.type==="laser"||this.isIframeLikeElementCenter(i,this.lastPointerUpEvent,r[0],r[1]))))return!1;let s=i;if(this.state.activeEmbeddable?.element===s&&this.state.activeEmbeddable?.state==="active"||(setTimeout(()=>{this.setState({activeEmbeddable:{element:s,state:"active"},selectedElementIds:{[s.id]:!0},newElement:null,selectionElement:null})},100),Ca(s)))return!0;let l=this.getHTMLIFrameElement(s);if(!l?.contentWindow)return!0;if(l.src.includes("youtube")){let c=ZE.get(s.id);switch(c||(ZE.set(s.id,pc.UNSTARTED),l.contentWindow.postMessage(JSON.stringify({event:"listening",id:s.id}),"*")),c){case pc.PLAYING:case pc.BUFFERING:l.contentWindow?.postMessage(JSON.stringify({event:"command",func:"pauseVideo",args:""}),"*");break;default:l.contentWindow?.postMessage(JSON.stringify({event:"command",func:"playVideo",args:""}),"*")}}return l.src.includes("player.vimeo.com")&&l.contentWindow.postMessage(JSON.stringify({method:"paused"}),"*"),!0}isIframeLikeElementCenter(o,r,n,i){return o&&!r.altKey&&!r.shiftKey&&!r.metaKey&&!r.ctrlKey&&(this.state.activeEmbeddable?.element!==o||this.state.activeEmbeddable?.state==="hover"||!this.state.activeEmbeddable)&&n>=o.x+o.width/3&&n<=o.x+2*o.width/3&&i>=o.y+o.height/3&&i<=o.y+2*o.height/3}renderEmbeddables(){let o=this.state.zoom.value,r=this.state.width,n=this.state.height,i=this.scene.getNonDeletedElements().filter(a=>fo(a)&&this.embedsValidationStatus.get(a.id)===!0||Ca(a));return Fe(GO,{children:i.map(a=>{let{x:s,y:l}=Gt({sceneX:a.x,sceneY:a.y},this.state),c=Fc(a,r,n,this.state,this.scene.getNonDeletedElementsMap()),d=this.initializedEmbeds.has(a.id);if(c&&!d&&this.initializedEmbeds.add(a.id),!(c||d))return null;let m,u=!1;if(Ca(a)){m=null;let y=(a.customData?.generationData??this.magicGenerations.get(a.id))||{status:"error",message:"No generation data",code:"ERR_NO_GENERATION_DATA"};if(y.status==="done"){let E=y.html;m={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>E}}else if(y.status==="pending")m={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>Qf(`
|
|
47
47
|
<style>
|
|
48
48
|
html, body {
|
|
49
49
|
width: 100%;
|
|
50
50
|
height: 100%;
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
body {
|
|
54
|
-
display: flex;
|
|
55
|
-
align-items: center;
|
|
56
|
-
justify-content: center;
|
|
57
|
-
flex-direction: column;
|
|
58
|
-
gap: 1rem;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.Spinner {
|
|
62
|
-
display: flex;
|
|
63
|
-
align-items: center;
|
|
64
|
-
justify-content: center;
|
|
65
|
-
margin-left: auto;
|
|
66
|
-
margin-right: auto;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.Spinner svg {
|
|
70
|
-
animation: rotate 1.6s linear infinite;
|
|
71
|
-
transform-origin: center center;
|
|
72
|
-
width: 40px;
|
|
73
|
-
height: 40px;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.Spinner circle {
|
|
77
|
-
stroke: currentColor;
|
|
78
|
-
animation: dash 1.6s linear 0s infinite;
|
|
79
|
-
stroke-linecap: round;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
@keyframes rotate {
|
|
83
|
-
100% {
|
|
84
|
-
transform: rotate(360deg);
|
|
85
|
-
}
|
|
51
|
+
margin: 0;
|
|
86
52
|
}
|
|
53
|
+
</style>
|
|
54
|
+
<script>
|
|
55
|
+
// progressively renders the partial HTML snapshots the
|
|
56
|
+
// editor streams in during generation by document.write-
|
|
57
|
+
// ing them into this very document \u2014 feeding the
|
|
58
|
+
// browser's incremental HTML parser, so incomplete
|
|
59
|
+
// markup renders progressively
|
|
60
|
+
// (see App.onMagicFrameGenerate)
|
|
61
|
+
let writtenLength = 0;
|
|
62
|
+
let opened = false;
|
|
87
63
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
64
|
+
const onPartialMessage = (event) => {
|
|
65
|
+
const data = event.data;
|
|
66
|
+
if (
|
|
67
|
+
!data ||
|
|
68
|
+
data.type !== "excalidraw:diagramToCode:partial" ||
|
|
69
|
+
typeof data.html !== "string" ||
|
|
70
|
+
data.html.length <= writtenLength
|
|
71
|
+
) {
|
|
72
|
+
return;
|
|
96
73
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
74
|
+
if (!opened) {
|
|
75
|
+
opened = true;
|
|
76
|
+
document.open();
|
|
77
|
+
// document.open() wipes all listeners from both the
|
|
78
|
+
// document and the window, so re-register
|
|
79
|
+
window.addEventListener("message", onPartialMessage);
|
|
100
80
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
cx="50"
|
|
109
|
-
cy="50"
|
|
110
|
-
r="46"
|
|
111
|
-
stroke-width="8"
|
|
112
|
-
fill="none"
|
|
113
|
-
stroke-miter-limit="10"
|
|
114
|
-
/>
|
|
115
|
-
</svg>
|
|
116
|
-
</div>
|
|
117
|
-
<div>Generating...</div>
|
|
118
|
-
`)};else{let y;v.code==="ERR_GENERATION_INTERRUPTED"?y="Generation was interrupted...":y=v.message||"Generation failed",m={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>mf(`
|
|
81
|
+
document.write(data.html.slice(writtenLength));
|
|
82
|
+
writtenLength = data.html.length;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
window.addEventListener("message", onPartialMessage);
|
|
86
|
+
<\/script>
|
|
87
|
+
`)},u=!0;else{let E;y.code==="ERR_GENERATION_INTERRUPTED"?E="Generation was interrupted...":E=y.message||"Generation failed",m={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>Qf(`
|
|
119
88
|
<style>
|
|
120
89
|
html, body {
|
|
121
90
|
height: 100%;
|
|
@@ -125,7 +94,7 @@ Please fix the Mermaid syntax and regenerate a valid diagram.`;await v({prompt:F
|
|
|
125
94
|
flex-direction: column;
|
|
126
95
|
align-items: center;
|
|
127
96
|
justify-content: center;
|
|
128
|
-
color: ${
|
|
97
|
+
color: ${ho.red[3]};
|
|
129
98
|
}
|
|
130
99
|
h1, h3 {
|
|
131
100
|
margin-top: 0;
|
|
@@ -133,9 +102,9 @@ Please fix the Mermaid syntax and regenerate a valid diagram.`;await v({prompt:F
|
|
|
133
102
|
}
|
|
134
103
|
</style>
|
|
135
104
|
<h1>Error!</h1>
|
|
136
|
-
<h3>${
|
|
137
|
-
`)}}}else m=da(ym(a.link||""));let u=this.state.activeEmbeddable?.element===a&&this.state.activeEmbeddable?.state==="active",b=this.state.activeEmbeddable?.element===a&&this.state.activeEmbeddable?.state==="hover",f=m?.type==="video",x=$e(f?t:1,.75,jN);return Fe("div",{className:Xk("excalidraw__embeddable-container",{"is-hovered":b}),style:{transform:c?`translate(${l-this.state.offsetLeft}px, ${s-this.state.offsetTop}px) scale(${t})`:"none",display:c?"block":"none",opacity:Sv(a,aa(a,this.scene.getNonDeletedElementsMap()),this.elementsPendingErasure,null,this.state.openDialog?.name==="elementLinkSelector"?UE:1),"--embeddable-radius":`${Fy(Math.min(a.width,a.height),a)}px`},children:pg("div",{className:"excalidraw__embeddable-container__inner",style:{width:c?`${a.width}px`:0,height:c?`${a.height}px`:0,transform:c?`rotate(${a.angle}rad)`:"none",pointerEvents:u?Xi.enabled:Xi.disabled},children:[b&&Fe("div",{className:"excalidraw__embeddable-hint",children:h("buttons.embeddableInteractionButton")}),Fe("div",{className:"excalidraw__embeddable__outer",style:{padding:`${a.strokeWidth}px`},children:Fe("div",{className:"excalidraw__embeddable__content",style:{width:`${x*100}%`,height:`${x*100}%`,transform:`scale(${1/x})`},children:(ao(a)?this.props.renderEmbeddable?.(a,this.state):null)??Fe("iframe",{ref:v=>this.cacheEmbeddableRef(a,v),className:"excalidraw__embeddable",srcDoc:m?.type==="document"?m.srcdoc(this.state.theme):void 0,src:m?.type!=="document"?m?.link??"":void 0,scrolling:"no",referrerPolicy:"no-referrer-when-downgrade",title:"Excalidraw Embedded Content",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,sandbox:`${m?.sandbox?.allowSameOrigin?"allow-same-origin":""} allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation allow-downloads`})})})]})},a.id)})})}toggleOverscrollBehavior(t){document.documentElement.style.overscrollBehaviorX=t.type==="pointerenter"?"none":"auto"}render(){let t=this.scene.getSelectedElements(this.state),{renderTopRightUI:r,renderTopLeftUI:n,renderCustomStats:i}=this.props,{elementsMap:a,visibleElements:l,canvasNonce:s,newElementCanvasElement:c}=this.renderer.getRenderableElements({zoom:this.state.zoom,offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,height:this.state.height,width:this.state.width,editingTextElement:this.state.editingTextElement,newElement:this.state.newElement,selectedElements:t,selectedElementsAreBeingDragged:this.state.selectedElementsAreBeingDragged,frameToHighlight:this.state.frameToHighlight});this.visibleElements=l,this.hasRenderableElements=a.size>0;let d=this.scene.getNonDeletedElementsMap(),p="setPointerCapture"in HTMLElement.prototype?!1:this.state.selectionElement||this.state.newElement||this.state.selectedElementsAreBeingDragged||this.state.resizingElement||this.state.activeTool.type==="laser"&&this.state.cursorButton==="down",m=t[0],u=St.get(rr)?.type==="panel";return Fe("div",{translate:"no",className:Xk("excalidraw excalidraw-container notranslate",this.props.className,{"excalidraw--view-mode":this.state.viewModeEnabled||this.state.openDialog?.name==="elementLinkSelector","excalidraw--mobile":this.editorInterface.formFactor==="phone","excalidraw--non-interactive":!this.isInteractionEnabled(),"excalidraw--navigation":!this.isInteractionEnabled()&&this.isNavigationEnabled(),"excalidraw--tools":!this.isInteractionEnabled()&&this.isToolSupported(this.state.activeTool.type),"excalidraw--embeds":!this.isInteractionEnabled()&&this.isEmbedsEnabled(),"excalidraw--allow-browser-zoom":!this.isInteractionEnabled()&&this.isBrowserZoomEnabled(),"excalidraw--ui-hidden":!this.isDefaultUIEnabled(),"excalidraw--zen-mode":this.state.zenModeEnabled}),style:{"--ui-pointerEvents":p?Xi.disabled:Xi.enabled,"--right-sidebar-width":`${J0}px`},ref:this.excalidrawContainerRef,onDrop:this.isInteractionEnabled()?this.handleAppOnDrop:void 0,tabIndex:0,onKeyDown:this.props.handleKeyboardGlobally||!this.isInteractionEnabled()?void 0:this.onKeyDown,onPointerEnter:this.isInteractionEnabled()?this.toggleOverscrollBehavior:void 0,onPointerLeave:this.isInteractionEnabled()?this.toggleOverscrollBehavior:void 0,children:Fe(Os.Provider,{value:this.api,children:Fe(jk.Provider,{value:this,children:Fe(qk.Provider,{value:this.props,children:Fe(sE.Provider,{value:this.excalidrawContainerValue,children:Fe(lE.Provider,{value:this.editorInterface,children:Fe(mE.Provider,{value:this.setAppState,children:Fe(dE.Provider,{value:this.state,children:pg(cE.Provider,{value:this.scene.getNonDeletedElements(),children:[pg(pE.Provider,{value:this.actionManager,children:[Fe(yk,{canvas:this.canvas,appState:this.state,defaultUIEnabled:this.isDefaultUIEnabled(),zoomUIEnabled:this.isUIControlEnabled("zoom"),scrollBackToContentUIEnabled:this.isUIControlEnabled("scrollBackToContent"),files:this.files,setAppState:this.setAppState,actionManager:this.actionManager,elements:this.scene.getNonDeletedElements(),onLockToggle:this.toggleLock,onPenModeToggle:this.togglePenMode,langCode:Zr().code,renderTopLeftUI:n,renderTopRightUI:r,renderCustomStats:i,showExitZenModeBtn:typeof this.props?.zenModeEnabled>"u"&&this.state.zenModeEnabled,UIOptions:this.props.UIOptions,onExportImage:this.onExportImage,renderWelcomeScreen:!this.state.isLoading&&this.state.showWelcomeScreen&&this.state.activeTool.type===this.state.preferredSelectionTool.type&&!this.state.zenModeEnabled&&!this.scene.getElementsIncludingDeleted().length,app:this,isCollaborating:this.props.isCollaborating,generateLinkForSelection:this.props.generateLinkForSelection,children:this.props.children}),Fe("div",{className:"excalidraw-textEditorContainer"}),Fe("div",{className:"excalidraw-contextMenuContainer"}),Fe("div",{className:"excalidraw-eye-dropper-container"}),Fe(wk,{trails:[this.laserTrails,this.lassoTrail,this.eraserTrail,this.drawShape.trail]}),this.isDefaultUIEnabled()&&Fe(Yk,{}),this.isDefaultUIEnabled()&&t.length===1&&this.state.openDialog?.name!=="elementLinkSelector"&&this.state.showHyperlinkPopup&&Fe(nC,{element:m,scene:this.scene,setAppState:this.setAppState,onLinkOpen:this.props.onLinkOpen,setToast:this.setToast,updateEmbedValidationStatus:this.updateEmbedValidationStatus},m.id),this.isDefaultUIEnabled()&&this.props.aiEnabled!==!1&&t.length===1&&vm(m)&&Fe(U0,{element:m,elementsMap:a,children:Fe(ig,{title:h("labels.convertToCode"),icon:Ei,checked:!1,onChange:()=>this.onMagicFrameGenerate(m,"button")})}),this.isDefaultUIEnabled()&&t.length===1&&qa(m)&&m.customData?.generationData?.status==="done"&&pg(U0,{element:m,elementsMap:a,children:[Fe(ig,{title:h("labels.copySource"),icon:xa,checked:!1,onChange:()=>this.onIframeSrcCopy(m)}),Fe(ig,{title:"Enter fullscreen",icon:jb,checked:!1,onChange:()=>{let b=this.getHTMLIFrameElement(m);if(b)try{b.requestFullscreen(),this.setState({activeEmbeddable:{element:m,state:"active"},selectedElementIds:{[m.id]:!0},newElement:null,selectionElement:null})}catch(f){console.warn(f),this.setState({errorMessage:"Couldn't enter fullscreen"})}}})]}),this.isDefaultUIEnabled()&&this.state.contextMenu&&Fe(j3,{items:this.state.contextMenu.items,top:this.state.contextMenu.top,left:this.state.contextMenu.left,actionManager:this.actionManager,onClose:b=>{this.setState({contextMenu:null},()=>{this.focusContainer(),b?.()})}}),Fe(rE,{canvas:this.canvas,rc:this.rc,elementsMap:a,allElementsMap:d,visibleElements:l,canvasNonce:s,selectionNonce:this.state.selectionElement?.versionNonce,scale:window.devicePixelRatio,appState:this.state,renderConfig:{imageCache:this.imageCache,isExporting:!1,renderGrid:Oi(this),renderLinks:this.isLinksEnabled(),canvasBackgroundColor:this.state.viewBackgroundColor,embedsValidationStatus:this.embedsValidationStatus,elementsPendingErasure:this.elementsPendingErasure,pendingFlowchartNodes:this.flowchart.pendingNodes,theme:this.state.theme}}),c&&Fe(Hk,{appState:this.state,newElement:c,scale:window.devicePixelRatio,rc:this.rc,elementsMap:a,allElementsMap:d,renderConfig:{imageCache:this.imageCache,isExporting:!1,renderGrid:!1,canvasBackgroundColor:this.state.viewBackgroundColor,embedsValidationStatus:this.embedsValidationStatus,elementsPendingErasure:this.elementsPendingErasure,pendingFlowchartNodes:null,theme:this.state.theme}}),Fe(oE,{app:this,containerRef:this.excalidrawContainerRef,canvas:this.interactiveCanvas,elementsMap:a,visibleElements:l,allElementsMap:d,selectedElements:t,canvasNonce:s,selectionNonce:this.state.selectionElement?.versionNonce,scale:window.devicePixelRatio,appState:this.state,renderScrollbars:this.props.renderScrollbars===!0,editorInterface:this.editorInterface,interactionEnabled:this.isInteractionEnabled(),navigationEnabled:this.isNavigationEnabled(),renderInteractiveSceneCallback:this.renderInteractiveSceneCallback,handleCanvasRef:this.handleInteractiveCanvasRef,onContextMenu:this.handleCanvasContextMenu,onClick:this.handleCanvasClick,onPointerMove:this.handleCanvasPointerMove,onPointerUp:this.handleCanvasPointerUp,onPointerCancel:this.removePointer,onTouchMove:this.handleTouchMove,onPointerDown:this.handleCanvasPointerDown,onDoubleClick:this.handleCanvasDoubleClick}),this.isDefaultUIEnabled()&&this.state.userToFollow&&Fe(J3,{width:this.state.width,height:this.state.height,userToFollow:this.state.userToFollow,onDisconnect:this.maybeUnfollowRemoteUser}),this.renderFrameNames(),this.isDefaultUIEnabled()&&this.state.activeLockedId&&Fe(Kk,{app:this,activeLockedId:this.state.activeLockedId}),this.isDefaultUIEnabled()&&u&&Fe(uC,{app:this})]}),this.renderEmbeddables()]})})})})})})})})})}setPlugins(t){Object.assign(this.plugins,t)}async onMagicFrameGenerate(t,r){let n=this.plugins.diagramToCode?.generate;if(!n){this.setState({errorMessage:"No diagram to code plugin found"});return}let i=Bm(this.scene.getNonDeletedElements(),t,this.scene.getNonDeletedElementsMap()).filter(l=>!vm(l));if(!i.length){r==="button"?(this.setState({errorMessage:"Cannot generate from an empty frame"}),xe("ai","generate (no-children)","d2c")):this.setActiveTool({type:"magicframe"});return}let a=this.insertIframeElement({sceneX:t.x+t.width+30,sceneY:t.y,width:t.width,height:t.height});if(a){this.updateMagicGeneration({frameElement:a,data:{status:"pending"}}),this.setState({selectedElementIds:{[a.id]:!0}}),xe("ai","generate (start)","d2c");try{let{html:l}=await n({frame:t,children:i});if(xe("ai","generate (success)","d2c"),!l.trim()){this.updateMagicGeneration({frameElement:a,data:{status:"error",code:"ERR_OAI",message:"Nothing genereated :("}});return}let s=l.includes("<!DOCTYPE html>")&&l.includes("</html>")?l.slice(l.indexOf("<!DOCTYPE html>"),l.indexOf("</html>")+7):l;this.updateMagicGeneration({frameElement:a,data:{status:"done",html:s}})}catch(l){xe("ai","generate (failed)","d2c"),this.updateMagicGeneration({frameElement:a,data:{status:"error",code:"ERR_OAI",message:l.message||"Unknown error during generation"}})}}}onIframeSrcCopy(t){t.customData?.generationData?.status==="done"&&(kr(t.customData.generationData.html),this.setToast({message:"copied to clipboard",closable:!1,duration:1500}))}clearImageShapeCache(t){let r=t??this.files;this.scene.getNonDeletedElements().forEach(n=>{ri(n)&&r[n.fileId]&&(this.imageCache.delete(n.fileId),qo.delete(n))})}async componentDidMount(){if(this.unmounted=!1,this.api=this.createExcalidrawAPI(),this.excalidrawContainerValue.container=this.excalidrawContainerRef.current,zr()||Ft()){let n=this.setState.bind(this);Object.defineProperties(window.h,{state:{configurable:!0,get:()=>this.state},setState:{configurable:!0,value:(...i)=>this.setState(...i)},app:{configurable:!0,value:this},history:{configurable:!0,value:this.history},store:{configurable:!0,value:this.store},fonts:{configurable:!0,value:this.fonts}})}this.store.onDurableIncrementEmitter.on(n=>{this.history.record(n.delta)}),this.props.onIncrement&&this.store.onStoreIncrementEmitter.on(n=>{this.props.onIncrement?.(n)}),this.scene.onUpdate(this.triggerRender),this.addEventListeners(),this.props.autoFocus&&this.excalidrawContainerRef.current&&this.focusContainer(),Qd&&this.excalidrawContainerRef.current&&(this.resizeObserver=new ResizeObserver(()=>{this.refreshEditorInterface(),this.updateDOMRect()}),this.resizeObserver?.observe(this.excalidrawContainerRef.current)),new URLSearchParams(window.location.search.slice(1)).has("web-share-target")?this.restoreFileFromShare():this.updateDOMRect(this.initializeScene),ny()&&!Gy()&&this.setState({errorMessage:Fe(K3,{})});let r={excalidrawAPI:this.api,container:this.excalidrawContainerRef.current};this.editorLifecycleEvents.emit("editor:mount",r),this.props.onMount?.(r),this.props.onExcalidrawAPI?.(this.api)}componentWillUnmount(){this.api={...this.api,isDestroyed:!0};for(let t of Object.keys(this.api))if((t.startsWith("get")||t==="onStateChange"||t==="onEvent")&&typeof this.api[t]=="function"){let r=this.api[t];this.api[t]=(...n)=>{let i=`ExcalidrawAPI.${t}() called after the editor has been unmounted and may return invalid/empty data. Check \`ExcalidrawAPI.isDestroyed\` before calling get* methods or subscribing to state/event changes.`;if(zr()||Ft())throw new Error(i);return console.warn(i),r.apply(this.api,n)}}this.editorLifecycleEvents.emit("editor:unmount"),this.props.onUnmount?.(),this.props.onExcalidrawAPI?.(null),window.launchQueue?.setConsumer(()=>{}),this.renderer.destroy(),this.scene.destroy(),this.scene=new cf,this.fonts=new Cn(this.scene),this.renderer=new vd(this.scene),this.files={},this.imageCache.clear(),this.resizeObserver?.disconnect(),this.unmounted=!0,this.viewport.destroy(),this.removeEventListeners(),this.library.destroy(),this.laserTrails.stop(),this.drawShape.stop(),this.eraserTrail.stop(),this.onChangeEmitter.clear(),this.store.onStoreIncrementEmitter.clear(),this.store.onDurableIncrementEmitter.clear(),this.appStateObserver.clear(),this.editorLifecycleEvents.clear(),qo.destroy(),ar.destroy(),kv(),clearTimeout(Yi),Ge.clearCache(),Tt.clearCache(),Yi=0,document.documentElement.style.overscrollBehaviorX=""}removeEventListeners(){this.onRemoveEventListenersEmitter.trigger()}addEventListeners(){if(this.removeEventListeners(),this.onRemoveEventListenersEmitter.once(_e(window,"message",this.onWindowMessage,!1),_e(document,"pointerup",this.removePointer,{passive:!1}),_e(document.fonts,"loadingdone",t=>{let r=t.fontfaces;this.fonts.onLoaded(r)},{passive:!1}),_e(window,"focus",()=>{this.maybeCleanupAfterMissingPointerUp(null),this.triggerRender(!0)},{passive:!1})),!this.isInteractionEnabled()){this.isNavigationEnabled()&&this.onRemoveEventListenersEmitter.once(_e(this.excalidrawContainerRef.current,"wheel",this.handleWheel,{passive:!1}),_e(this.props.handleKeyboardGlobally?document:this.excalidrawContainerRef.current,"keydown",this.handleNavigationModeKeyDown,!1),_e(document,"pointermove",this.updateCurrentCursorPosition,{passive:!1}),_e(document,"gesturestart",this.onGestureStart,!1),_e(document,"gesturechange",this.onGestureChange,!1),_e(document,"gestureend",this.onGestureEnd,!1)),this.isBrowserZoomEnabled()||(this.isNavigationEnabled()||this.onRemoveEventListenersEmitter.once(_e(this.excalidrawContainerRef.current,"wheel",this.preventBrowserZoomWheel,{passive:!1}),_e(this.excalidrawContainerRef.current,"gesturestart",this.disableEvent,!1),_e(this.excalidrawContainerRef.current,"gesturechange",this.disableEvent,!1),_e(this.excalidrawContainerRef.current,"gestureend",this.disableEvent,!1)),this.onRemoveEventListenersEmitter.once(_e(this.props.handleKeyboardGlobally?document:this.excalidrawContainerRef.current,"keydown",this.preventBrowserZoomKeyDown,!1)));return}this.props.handleKeyboardGlobally&&this.onRemoveEventListenersEmitter.once(_e(document,"keydown",this.onKeyDown,!1)),this.onRemoveEventListenersEmitter.once(_e(this.excalidrawContainerRef.current,"wheel",this.handleWheel,{passive:!1}),_e(document,"copy",this.onCopy,{passive:!1}),_e(document,"keyup",this.onKeyUp,{passive:!0}),_e(document,"pointermove",this.updateCurrentCursorPosition,{passive:!1}),_e(document,"gesturestart",this.onGestureStart,!1),_e(document,"gesturechange",this.onGestureChange,!1),_e(document,"gestureend",this.onGestureEnd,!1)),!this.state.viewModeEnabled&&(this.onRemoveEventListenersEmitter.once(_e(document,"fullscreenchange",this.onFullscreenChange,{passive:!1}),_e(document,"paste",this.pasteFromClipboard,{passive:!1}),_e(document,"cut",this.onCut,{passive:!1}),_e(window,"resize",this.onResize,!1),_e(window,"unload",this.onUnload,!1),_e(window,"blur",this.onBlur,!1),_e(this.excalidrawContainerRef.current,"wheel",this.handleWheel,{passive:!1}),_e(this.excalidrawContainerRef.current,"dragover",this.disableEvent,!1),_e(this.excalidrawContainerRef.current,"drop",this.disableEvent,!1)),this.props.detectScroll&&this.onRemoveEventListenersEmitter.once(_e(gy(this.excalidrawContainerRef.current),"scroll",this.onScroll,{passive:!1})))}componentDidUpdate(t,r){!this._initialized&&!this.state.isLoading&&(this._initialized=!0,this.editorLifecycleEvents.emit("editor:initialize",this.api),this.props.onInitialize?.(this.api)),this.handleInteractionStateChange(t,r),this.handleForcedToolChange(t,r),this.appStateObserver.flush(r),this.updateEmbeddables();let n=this.scene.getElementsIncludingDeleted(),i=this.scene.getElementsMapIncludingDeleted(),a=($k??this.state.theme)===te.DARK;this.state.exportWithDarkMode!==a&&this.setState({exportWithDarkMode:a}),!this.state.showWelcomeScreen&&!n.length&&this.setState({showWelcomeScreen:!0}),r.userToFollow&&!this.state.collaborators.has(r.userToFollow.socketId)&&this.maybeUnfollowRemoteUser(),(r.zoom.value!==this.state.zoom.value||r.scrollX!==this.state.scrollX||r.scrollY!==this.state.scrollY)&&(this.props?.onScrollChange?.(this.state.scrollX,this.state.scrollY,this.state.zoom),this.onScrollChangeEmitter.trigger(this.state.scrollX,this.state.scrollY,this.state.zoom)),r.userToFollow!==this.state.userToFollow&&(r.userToFollow&&this.onUserFollowEmitter.trigger({userToFollow:r.userToFollow,action:"UNFOLLOW"}),this.state.userToFollow&&this.onUserFollowEmitter.trigger({userToFollow:this.state.userToFollow,action:"FOLLOW"})),Object.keys(this.state.selectedElementIds).length&&Qo(this.state)&&this.setState({activeTool:gt(this.state,{type:"selection"})}),this.state.activeTool.type==="eraser"&&r.theme!==this.state.theme&&this.cursor.applyForTool(),r.activeTool.type==="selection"&&this.state.activeTool.type!=="selection"&&this.state.showHyperlinkPopup&&this.setState({showHyperlinkPopup:!1}),t.langCode!==this.props.langCode&&this.updateLanguage(),Qo(r)&&!Qo(this.state)&&this.eraserTrail.endPath(),(r.openDialog?.name==="elementLinkSelector"||this.state.openDialog?.name==="elementLinkSelector")&&r.openDialog?.name!==this.state.openDialog?.name&&(this.deselectElements(),this.setState({hoveredElementIds:{}})),t.zenModeEnabled!==this.props.zenModeEnabled&&this.setState({zenModeEnabled:!!this.props.zenModeEnabled}),t.theme!==this.props.theme&&this.props.theme&&this.setState({theme:this.props.theme}),!this.props.UIOptions.canvasActions&&this.state.openMenu==="canvas"&&this.setState({openMenu:null}),this.excalidrawContainerRef.current?.classList.toggle("theme--dark",this.state.theme===te.DARK),this.state.selectedLinearElement?.isEditing&&!this.state.selectedElementIds[this.state.selectedLinearElement.elementId]&&setTimeout(()=>{this.state.selectedLinearElement?.isEditing&&this.actionManager.executeAction(Gt)});let s=Object.keys(this.state.selectedElementIds);if(s.length){let d=s.filter(p=>{let m=this.scene.getElement(p);return!m||m.isDeleted});d.length&&this.setState(p=>{let m={...p.selectedElementIds};for(let u of d)delete m[u];return{selectedElementIds:Be(m,p)}})}if(this.state.editingTextElement){let d=this.scene.getElement(this.state.editingTextElement.id);(!d||d.isDeleted)&&this.setState({editingTextElement:null})}let c=this.state.editingTextElement||this.viewport.isAnimating?!1:!this.visibleElements.length&&this.hasRenderableElements;this.state.scrolledOutside!==c&&this.setState({scrolledOutside:c}),this.store.commit(i,this.state),this.state.isLoading||(this.props.onChange?.(n,this.state,this.files,this.props.id),this.onChangeEmitter.trigger(n,this.state,this.files))}static resetTapTwice(){Ud=!1,Wd=null}async insertClipboardContent(t,r,n){let{x:i,y:a}=ze({clientX:this.viewport.lastPosition.x,clientY:this.viewport.lastPosition.y},this.state);if(t.errorMessage){this.setState({errorMessage:t.errorMessage});return}if(r.length===0&&!n&&t.mixedContent){await this.addElementsFromMixedContentPaste(t.mixedContent,{isPlainPaste:n,sceneX:i,sceneY:a});return}if(!n&&t.text){let d=Eh(t.text);if(d.ok){this.setState({openDialog:{name:"charts",data:d.data,rawText:t.text}});return}}let l=r.map(d=>d.file);if(l.length===0&&t.text&&!n){let d=t.text.trim();d.startsWith("<svg")&&d.endsWith("</svg>")&&l.push(Af(d))}if(l.length>0){this.isToolSupported("image")?await this.insertImages(l,i,a):this.setState({errorMessage:h("errors.imageToolNotSupported")});return}if(t.elements){let d=t.programmaticAPI?ml(t.elements):t.elements;this.addElementsFromPasteOrLibrary({elements:d,files:t.files||null,position:this.editorInterface.formFactor==="desktop"?"cursor":"center",retainSeed:n,preserveFrameChildrenOrder:!0});return}if(!t.text)return;if(!n&&p3(t.text)){let d=await import("@excalidraw/mermaid-to-excalidraw");try{let{elements:p,files:m={}}=await d.parseMermaidToExcalidraw(t.text),u=ml(p,{regenerateIds:!0});this.addElementsFromPasteOrLibrary({elements:u,files:m,position:this.editorInterface.formFactor==="desktop"?"cursor":"center"});return}catch(p){console.warn(`parsing pasted text as mermaid definition failed: ${p.message}`)}}let s=Cy(t.text).split(/\n+/).map(d=>d.trim()).filter(Boolean),c=s.map(d=>ew(d)).filter(d=>cl(d,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(d)||da(d)?.type==="video"));if(!n&&c.length>0&&c.length===s.length){let d=[];for(let p of c){let m=d[d.length-1],u=this.insertEmbeddableElement({sceneX:m?m.x+m.width+20:i,sceneY:a,link:vr(p)});u&&d.push(u)}d.length&&(this.store.scheduleCapture(),this.setState({selectedElementIds:Object.fromEntries(d.map(p=>[p.id,!0]))}));return}this.addTextFromPaste(t.text,n)}async addElementsFromMixedContentPaste(t,{isPlainPaste:r,sceneX:n,sceneY:i}){if(!r&&t.some(a=>a.type==="imageUrl")&&this.isToolSupported("image")){let a=t.filter(d=>d.type==="imageUrl").map(d=>d.value),l=await Promise.all(a.map(async d=>{try{return{file:await Gw(d)}}catch(p){let m=p.message;return p.cause==="FETCH_ERROR"?m=h("errors.failedToFetchImage"):p.cause==="UNSUPPORTED"&&(m=h("errors.unsupportedFileType")),{errorMessage:m}}})),s=l.filter(d=>!!d.file).map(d=>d.file);await this.insertImages(s,n,i);let c=l.find(d=>!!d.errorMessage);c&&c.errorMessage&&this.setState({errorMessage:c.errorMessage})}else{let a=t.filter(l=>l.type==="text");a.length&&this.addTextFromPaste(a.map(l=>l.value).join(`
|
|
105
|
+
<h3>${E}</h3>
|
|
106
|
+
`)}}}else m=Na($m(a.link||""));let b=this.state.activeEmbeddable?.element===a&&this.state.activeEmbeddable?.state==="active",f=this.state.activeEmbeddable?.element===a&&this.state.activeEmbeddable?.state==="hover",x=m?.type==="video",v=Je(x?o:1,.75,HO);return Fe("div",{className:m6("excalidraw__embeddable-container",{"is-hovered":f}),style:{transform:c?`translate(${s-this.state.offsetLeft}px, ${l-this.state.offsetTop}px) scale(${o})`:"none",display:c?"block":"none",opacity:Aw(a,Nn(a,this.scene.getNonDeletedElementsMap()),this.elementsPendingErasure,null,this.state.openDialog?.name==="elementLinkSelector"?Ny:1),"--embeddable-radius":`${Qv(Math.min(a.width,a.height),a)}px`},children:xm("div",{className:"excalidraw__embeddable-container__inner",style:{width:c?`${a.width}px`:0,height:c?`${a.height}px`:0,transform:c?`rotate(${a.angle}rad)`:"none",pointerEvents:b?ga.enabled:ga.disabled},children:[f&&Fe("div",{className:"excalidraw__embeddable-hint",children:h("buttons.embeddableInteractionButton")}),Fe("div",{className:"excalidraw__embeddable__outer",style:{padding:`${a.strokeWidth}px`},children:Fe("div",{className:"excalidraw__embeddable__content",style:{width:`${v*100}%`,height:`${v*100}%`,transform:`scale(${1/v})`},children:(fo(a)?this.props.renderEmbeddable?.(a,this.state):null)??Fe("iframe",{ref:y=>this.cacheEmbeddableRef(a,y),className:"excalidraw__embeddable",srcDoc:m?.type==="document"?m.srcdoc(this.state.theme):void 0,src:m?.type!=="document"?m?.link??"":void 0,scrolling:"no",referrerPolicy:"no-referrer-when-downgrade",title:"Excalidraw Embedded Content",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,sandbox:`${m?.sandbox?.allowSameOrigin?"allow-same-origin":""} allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation allow-downloads`})})}),u&&xm("div",{className:"excalidraw__embeddable__generating",children:[Fe(Nt,{size:"1em"}),"Generating\u2026"]})]})},a.id)})})}render(){let o=this.scene.getSelectedElements(this.state),{renderTopRightUI:r,renderTopLeftUI:n,renderCustomStats:i}=this.props,{elementsMap:a,visibleElements:s,canvasNonce:l,newElementCanvasElement:c}=this.renderer.getRenderableElements({zoom:this.state.zoom,offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,height:this.state.height,width:this.state.width,editingTextElement:this.state.editingTextElement,newElement:this.state.newElement,selectedElements:o,selectedElementsAreBeingDragged:this.state.selectedElementsAreBeingDragged,frameToHighlight:this.state.frameToHighlight});this.visibleElements=s,this.hasRenderableElements=a.size>0;let d=this.scene.getNonDeletedElementsMap(),p=c??this.toolDrag.preview,m="setPointerCapture"in this.ownerWindow.HTMLElement.prototype?!1:this.state.selectionElement||this.state.newElement||this.state.selectedElementsAreBeingDragged||this.state.resizingElement||this.state.activeTool.type==="laser"&&this.state.cursorButton==="down",u=o[0],b=yt.get(br)?.type==="panel";return Fe("div",{translate:"no",className:m6("excalidraw excalidraw-container notranslate",this.props.className,{"excalidraw--view-mode":this.state.viewModeEnabled||this.state.openDialog?.name==="elementLinkSelector","excalidraw--mobile":this.editorInterface.formFactor==="phone","excalidraw--non-interactive":!this.isInteractionEnabled(),"excalidraw--navigation":!this.isInteractionEnabled()&&this.isNavigationEnabled(),"excalidraw--tools":!this.isInteractionEnabled()&&this.isToolSupported(this.state.activeTool.type),"excalidraw--embeds":!this.isInteractionEnabled()&&this.isEmbedsEnabled(),"excalidraw--allow-browser-zoom":!this.isInteractionEnabled()&&this.isBrowserZoomEnabled(),"excalidraw--ui-hidden":!this.isDefaultUIEnabled(),"excalidraw--mobile-toolbar":this.editorInterface.formFactor==="phone"&&this.isDefaultUIEnabled()&&!this.state.viewModeEnabled,"excalidraw--viewport-status-border":!!this.props.viewportStatusFrame?.border,"excalidraw--viewport-status-label":!!this.props.viewportStatusFrame?.label,"excalidraw--zen-mode":this.state.zenModeEnabled}),style:{"--ui-pointerEvents":m?ga.disabled:ga.enabled,"--right-sidebar-width":`${W0}px`},ref:this.excalidrawContainerRef,onDrop:this.isInteractionEnabled()?this.handleAppOnDrop:void 0,tabIndex:0,onKeyDown:this.props.handleKeyboardGlobally||!this.isInteractionEnabled()?void 0:this.onKeyDown,onPointerEnter:this.isInteractionEnabled()?this.toggleOverscrollBehavior:void 0,onPointerLeave:this.isInteractionEnabled()?this.toggleOverscrollBehavior:void 0,children:Fe(sc.Provider,{value:this.api,children:Fe(h6.Provider,{value:this,children:Fe(g6.Provider,{value:this.props,children:Fe(ey.Provider,{value:this.excalidrawContainerValue,children:Fe(QE.Provider,{value:this.editorInterface,children:Fe(ry.Provider,{value:this.setAppState,children:Fe(oy.Provider,{value:this.state,children:xm(ty.Provider,{value:this.scene.getNonDeletedElements(),children:[xm(ny.Provider,{value:this.actionManager,children:[Fe(FM,{canvas:this.canvas,appState:this.state,defaultUIEnabled:this.isDefaultUIEnabled(),zoomUIEnabled:this.isUIControlEnabled("zoom"),scrollBackToContentUIEnabled:this.isUIControlEnabled("scrollBackToContent"),files:this.files,setAppState:this.setAppState,actionManager:this.actionManager,elements:this.scene.getNonDeletedElements(),onLockToggle:this.toggleLock,onPenModeToggle:this.togglePenMode,langCode:sn().code,renderTopLeftUI:n,renderTopRightUI:r,renderCustomStats:i,showExitZenModeBtn:typeof this.props?.zenModeEnabled>"u"&&this.state.zenModeEnabled,UIOptions:this.props.UIOptions,onExportImage:this.onExportImage,renderWelcomeScreen:!this.state.isLoading&&this.state.showWelcomeScreen&&this.state.activeTool.type===this.state.preferredSelectionTool.type&&!this.state.zenModeEnabled&&!this.scene.getElementsIncludingDeleted().length,app:this,isCollaborating:this.props.isCollaborating,generateLinkForSelection:this.props.generateLinkForSelection,currentUserControls:this.props.currentUserControls,children:this.props.children}),Fe("div",{className:"excalidraw-textEditorContainer"}),Fe("div",{className:"excalidraw-contextMenuContainer"}),Fe("div",{className:"excalidraw-eye-dropper-container"}),Fe(HM,{trails:[this.laserTrails,this.lassoTrail,this.eraserTrail,this.drawShape.trail]}),this.isDefaultUIEnabled()&&Fe(c6,{}),this.isDefaultUIEnabled()&&o.length===1&&this.state.openDialog?.name!=="elementLinkSelector"&&this.state.showHyperlinkPopup&&Fe(xS,{element:u,scene:this.scene,setAppState:this.setAppState,onLinkOpen:this.props.onLinkOpen,setToast:this.setToast,updateEmbedValidationStatus:this.updateEmbedValidationStatus},u.id),this.isDefaultUIEnabled()&&this.props.aiEnabled!==!1&&o.length===1&&Zm(u)&&Fe(_0,{element:u,elementsMap:a,children:Fe(Kg,{title:h("labels.convertToCode"),icon:Fi,checked:!1,onChange:()=>this.onMagicFrameGenerate(u,"button")})}),this.isDefaultUIEnabled()&&o.length===1&&Ca(u)&&u.customData?.generationData?.status==="done"&&xm(_0,{element:u,elementsMap:a,children:[Fe(Kg,{title:h("labels.copySource"),icon:Wa,checked:!1,onChange:()=>this.onIframeSrcCopy(u)}),Fe(Kg,{title:"Enter fullscreen",icon:F1,checked:!1,onChange:()=>{let f=this.getHTMLIFrameElement(u);if(f)try{f.requestFullscreen(),this.setState({activeEmbeddable:{element:u,state:"active"},selectedElementIds:{[u.id]:!0},newElement:null,selectionElement:null})}catch(x){console.warn(x),this.setState({errorMessage:"Couldn't enter fullscreen"})}}})]}),this.isDefaultUIEnabled()&&this.state.contextMenu&&Fe(u3,{items:this.state.contextMenu.items,top:this.state.contextMenu.top,left:this.state.contextMenu.left,actionManager:this.actionManager,onClose:f=>{this.setState({contextMenu:null},()=>{this.focusContainer(),f?.()})}}),Fe($E,{canvas:this.canvas,rc:this.rc,elementsMap:a,allElementsMap:d,visibleElements:s,canvasNonce:l,selectionNonce:this.state.selectionElement?.versionNonce,scale:this.ownerWindow.devicePixelRatio,appState:this.state,renderConfig:{imageCache:this.imageCache,isExporting:!1,renderGrid:ta(this),renderLinks:this.isLinksEnabled(),canvasBackgroundColor:this.state.viewBackgroundColor,embedsValidationStatus:this.embedsValidationStatus,elementsPendingErasure:this.elementsPendingErasure,pendingFlowchartNodes:this.flowchart.pendingNodes,theme:this.state.theme}}),p&&Fe(n6,{appState:this.state,newElement:p,scale:this.ownerWindow.devicePixelRatio,rc:this.rc,elementsMap:a,allElementsMap:d,renderConfig:{imageCache:this.imageCache,isExporting:!1,renderGrid:!1,canvasBackgroundColor:this.state.viewBackgroundColor,embedsValidationStatus:this.embedsValidationStatus,elementsPendingErasure:this.elementsPendingErasure,pendingFlowchartNodes:null,theme:this.state.theme},opacity:this.toolDrag.preview?t3:void 0}),Fe(XE,{app:this,containerRef:this.excalidrawContainerRef,canvas:this.interactiveCanvas,elementsMap:a,visibleElements:s,allElementsMap:d,selectedElements:o,canvasNonce:l,selectionNonce:this.state.selectionElement?.versionNonce,scale:this.ownerWindow.devicePixelRatio,appState:this.state,renderScrollbars:this.props.renderScrollbars===!0,editorInterface:this.editorInterface,interactionEnabled:this.isInteractionEnabled(),navigationEnabled:this.isNavigationEnabled(),renderInteractiveSceneCallback:this.renderInteractiveSceneCallback,handleCanvasRef:this.handleInteractiveCanvasRef,onContextMenu:this.handleCanvasContextMenu,onClick:this.handleCanvasClick,onPointerMove:this.handleCanvasPointerMove,onPointerUp:this.handleCanvasPointerUp,onPointerCancel:this.removePointer,onTouchMove:this.handleTouchMove,onPointerDown:this.handleCanvasPointerDown,onDoubleClick:this.handleCanvasDoubleClick}),this.props.viewportStatusFrame?.border&&this.editorInterface.formFactor==="phone"&&Fe(hg,{border:this.props.viewportStatusFrame.border}),this.renderFrameNames(),this.isDefaultUIEnabled()&&this.state.activeLockedId&&Fe(d6,{app:this,activeLockedId:this.state.activeLockedId}),this.isDefaultUIEnabled()&&b&&Fe(kS,{app:this})]}),this.renderEmbeddables()]})})})})})})})})})}setPlugins(o){Object.assign(this.plugins,o)}async onMagicFrameGenerate(o,r){let n=this.plugins.diagramToCode?.generate;if(!n){this.setState({errorMessage:"No diagram to code plugin found"});return}let i=fp(this.scene.getNonDeletedElements(),o,this.scene.getNonDeletedElementsMap()).filter(s=>!Zm(s));if(!i.length){r==="button"?(this.setState({errorMessage:"Cannot generate from an empty frame"}),be("ai","generate (no-children)","d2c")):this.setActiveTool({type:"magicframe"});return}let a=this.insertIframeElement({sceneX:o.x+o.width+30,sceneY:o.y,width:o.width,height:o.height});if(a){this.updateMagicGeneration({frameElement:a,data:{status:"pending"}}),this.setState({selectedElementIds:{[a.id]:!0}}),be("ai","generate (start)","d2c");try{let{html:s}=await n({frame:o,children:i,onPartial:c=>{if(this.magicGenerations.get(a.id)?.status!=="pending")return;let d=c.search(/<!doctype html|<html[\s>]/i);d!==-1&&this.getHTMLIFrameElement(a)?.contentWindow?.postMessage({type:"excalidraw:diagramToCode:partial",html:c.slice(d)},"*")}});if(be("ai","generate (success)","d2c"),!s.trim()){this.updateMagicGeneration({frameElement:a,data:{status:"error",code:"ERR_OAI",message:"Nothing genereated :("}});return}let l=s.includes("<!DOCTYPE html>")&&s.includes("</html>")?s.slice(s.indexOf("<!DOCTYPE html>"),s.indexOf("</html>")+7):s;this.updateMagicGeneration({frameElement:a,data:{status:"done",html:l}})}catch(s){be("ai","generate (failed)","d2c"),this.updateMagicGeneration({frameElement:a,data:{status:"error",code:"ERR_OAI",message:s.message||"Unknown error during generation"}})}}}onIframeSrcCopy(o){o.customData?.generationData?.status==="done"&&(zr(o.customData.generationData.html),this.setToast({message:"copied to clipboard",closable:!1,duration:1500}))}clearImageShapeCache(o){let r=o??this.files;this.scene.getNonDeletedElements().forEach(n=>{Ti(n)&&r[n.fileId]&&(this.imageCache.delete(n.fileId),dr.delete(n))})}async componentDidMount(){if(this.unmounted=!1,this.api=this.createExcalidrawAPI(),this.excalidrawContainerValue.container=this.excalidrawContainerRef.current,jr()||Wt()){let n=this.setState.bind(this);Object.defineProperties(window.h,{state:{configurable:!0,get:()=>this.state},setState:{configurable:!0,value:(...i)=>this.setState(...i)},app:{configurable:!0,value:this},history:{configurable:!0,value:this.history},store:{configurable:!0,value:this.store},fonts:{configurable:!0,value:this.fonts}})}this.store.onDurableIncrementEmitter.on(n=>{this.history.record(n.delta)}),this.props.onIncrement&&this.store.onStoreIncrementEmitter.on(n=>{this.props.onIncrement?.(n)}),this.scene.onUpdate(this.triggerRender),this.addEventListeners(),this.props.autoFocus&&this.excalidrawContainerRef.current&&this.focusContainer(),typeof this.ownerWindow.ResizeObserver=="function"&&this.excalidrawContainerRef.current&&(this.resizeObserver=new this.ownerWindow.ResizeObserver(()=>{this.refreshEditorInterface(),this.updateDOMRect()}),this.resizeObserver?.observe(this.excalidrawContainerRef.current)),new URLSearchParams(this.ownerWindow.location.search.slice(1)).has("web-share-target")?this.restoreFileFromShare():this.updateDOMRect(this.initializeScene),ev()&&!Ov()&&this.setState({errorMessage:Fe(c3,{})});let r={excalidrawAPI:this.api,container:this.excalidrawContainerRef.current};this.editorLifecycleEvents.emit("editor:mount",r),this.props.onMount?.(r),this.props.onExcalidrawAPI?.(this.api)}componentWillUnmount(){this.api={...this.api,isDestroyed:!0};for(let o of Object.keys(this.api))if((o.startsWith("get")||o==="onStateChange"||o==="onEvent")&&typeof this.api[o]=="function"){let r=this.api[o];this.api[o]=(...n)=>{let i=`ExcalidrawAPI.${o}() called after the editor has been unmounted and may return invalid/empty data. Check \`ExcalidrawAPI.isDestroyed\` before calling get* methods or subscribing to state/event changes.`;if(jr()||Wt())throw new Error(i);return console.warn(i),r.apply(this.api,n)}}this.editorLifecycleEvents.emit("editor:unmount"),this.props.onUnmount?.(),this.props.onExcalidrawAPI?.(null),this.ownerWindow.launchQueue?.setConsumer(()=>{}),this.renderer.destroy(),this.scene.destroy(),this.scene=new qf,this.fonts=new Hn(this.scene,this.ownerDocument),this.renderer=new Vd(this.scene),this.files={},this.imageCache.clear(),this.resizeObserver?.disconnect(),this.unmounted=!0,this.viewport.destroy(),this.removeEventListeners(),this.library.destroy(),this.laserTrails.stop(),this.drawShape.stop(),this.toolDrag.cancel(),this.eraserTrail.stop(),this.onChangeEmitter.clear(),this.store.onStoreIncrementEmitter.clear(),this.store.onDurableIncrementEmitter.clear(),this.appStateObserver.clear(),this.editorLifecycleEvents.clear(),dr.destroy(),yr.destroy(),Lw(),clearTimeout(da),$e.clearCache(),Lt.clearCache(),da=0,this.ownerDocument.documentElement.style.overscrollBehaviorX=""}removeEventListeners(){this.onRemoveEventListenersEmitter.trigger()}addEventListeners(){if(this.removeEventListeners(),this.onRemoveEventListenersEmitter.once(Ne(this.ownerWindow,"message",this.onWindowMessage,!1),Ne(this.ownerDocument,"pointerup",this.removePointer,{passive:!1}),Ne(this.ownerDocument.fonts,"loadingdone",o=>{let r=o.fontfaces;this.fonts.onLoaded(r)},{passive:!1}),Ne(this.ownerWindow,"focus",()=>{this.maybeCleanupAfterMissingPointerUp(null),this.triggerRender(!0)},{passive:!1})),!this.isInteractionEnabled()){this.isNavigationEnabled()&&this.onRemoveEventListenersEmitter.once(Ne(this.excalidrawContainerRef.current,"wheel",this.wheel.handle,{passive:!1}),Ne(this.props.handleKeyboardGlobally?this.ownerDocument:this.excalidrawContainerRef.current,"keydown",this.handleNavigationModeKeyDown,!1),Ne(this.ownerDocument,"pointermove",this.updateCurrentCursorPosition,{passive:!1}),Ne(this.ownerDocument,"gesturestart",this.onGestureStart,!1),Ne(this.ownerDocument,"gesturechange",this.onGestureChange,!1),Ne(this.ownerDocument,"gestureend",this.onGestureEnd,!1)),this.isBrowserZoomEnabled()||(this.isNavigationEnabled()||this.onRemoveEventListenersEmitter.once(Ne(this.excalidrawContainerRef.current,"wheel",this.wheel.preventBrowserZoom,{passive:!1}),Ne(this.excalidrawContainerRef.current,"gesturestart",this.disableEvent,!1),Ne(this.excalidrawContainerRef.current,"gesturechange",this.disableEvent,!1),Ne(this.excalidrawContainerRef.current,"gestureend",this.disableEvent,!1)),this.onRemoveEventListenersEmitter.once(Ne(this.props.handleKeyboardGlobally?this.ownerDocument:this.excalidrawContainerRef.current,"keydown",this.preventBrowserZoomKeyDown,!1)));return}this.props.handleKeyboardGlobally&&this.onRemoveEventListenersEmitter.once(Ne(this.ownerDocument,"keydown",this.onKeyDown,!1)),this.onRemoveEventListenersEmitter.once(Ne(this.excalidrawContainerRef.current,"wheel",this.wheel.handle,{passive:!1}),Ne(this.ownerDocument,"copy",this.onCopy,{passive:!1}),Ne(this.ownerDocument,"keyup",this.onKeyUp,{passive:!0}),Ne(this.ownerDocument,"pointermove",this.updateCurrentCursorPosition,{passive:!1}),Ne(this.ownerDocument,"gesturestart",this.onGestureStart,!1),Ne(this.ownerDocument,"gesturechange",this.onGestureChange,!1),Ne(this.ownerDocument,"gestureend",this.onGestureEnd,!1)),!this.state.viewModeEnabled&&(this.onRemoveEventListenersEmitter.once(Ne(this.ownerDocument,"fullscreenchange",this.onFullscreenChange,{passive:!1}),Ne(this.ownerDocument,"paste",this.pasteFromClipboard,{passive:!1}),Ne(this.ownerDocument,"cut",this.onCut,{passive:!1}),Ne(this.ownerWindow,"resize",this.onResize,!1),Ne(this.ownerWindow,"unload",this.onUnload,!1),Ne(this.ownerWindow,"blur",this.onBlur,!1),Ne(this.excalidrawContainerRef.current,"wheel",this.wheel.handle,{passive:!1}),Ne(this.excalidrawContainerRef.current,"dragover",this.disableEvent,!1),Ne(this.excalidrawContainerRef.current,"drop",this.disableEvent,!1)),this.props.detectScroll&&this.onRemoveEventListenersEmitter.once(Ne(mv(this.excalidrawContainerRef.current),"scroll",this.onScroll,{passive:!1})))}componentDidUpdate(o,r){!this._initialized&&!this.state.isLoading&&(this._initialized=!0,this.editorLifecycleEvents.emit("editor:initialize",this.api),this.props.onInitialize?.(this.api)),this.handleInteractionStateChange(o,r),this.handleForcedToolChange(o,r),this.appStateObserver.flush(r),this.updateEmbeddables();let n=this.scene.getElementsIncludingDeleted(),i=this.scene.getElementsMapIncludingDeleted(),a=(u6??this.state.theme)===Q.DARK;this.state.exportWithDarkMode!==a&&this.setState({exportWithDarkMode:a}),!this.state.showWelcomeScreen&&!n.length&&this.setState({showWelcomeScreen:!0}),(r.zoom.value!==this.state.zoom.value||r.scrollX!==this.state.scrollX||r.scrollY!==this.state.scrollY)&&(this.props?.onScrollChange?.(this.state.scrollX,this.state.scrollY,this.state.zoom),this.onScrollChangeEmitter.trigger(this.state.scrollX,this.state.scrollY,this.state.zoom)),Object.keys(this.state.selectedElementIds).length&&pr(this.state)&&this.setState({activeTool:ht(this.state,{type:"selection"})}),this.state.activeTool.type==="eraser"&&r.theme!==this.state.theme&&this.cursor.applyForTool(),this.state.activeTool.type==="bucketfill"&&r.currentItemBackgroundColor!==this.state.currentItemBackgroundColor&&this.cursor.applyForTool(),r.activeTool.type==="selection"&&this.state.activeTool.type!=="selection"&&this.state.showHyperlinkPopup&&this.setState({showHyperlinkPopup:!1}),o.langCode!==this.props.langCode&&this.updateLanguage(),pr(r)&&!pr(this.state)&&this.eraserTrail.endPath(),(r.openDialog?.name==="elementLinkSelector"||this.state.openDialog?.name==="elementLinkSelector")&&r.openDialog?.name!==this.state.openDialog?.name&&(this.deselectElements(),this.setState({hoveredElementIds:{}})),o.zenModeEnabled!==this.props.zenModeEnabled&&this.setState({zenModeEnabled:!!this.props.zenModeEnabled}),o.theme!==this.props.theme&&this.props.theme&&this.setState({theme:this.props.theme}),!this.props.UIOptions.canvasActions&&this.state.openMenu==="canvas"&&this.setState({openMenu:null}),this.excalidrawContainerRef.current?.classList.toggle("theme--dark",this.state.theme===Q.DARK),this.state.selectedLinearElement?.isEditing&&!this.state.selectedElementIds[this.state.selectedLinearElement.elementId]&&setTimeout(()=>{this.state.selectedLinearElement?.isEditing&&this.actionManager.executeAction(Xt)});let s=Object.keys(this.state.selectedElementIds);if(s.length){let c=s.filter(d=>{let p=this.scene.getElement(d);return!p||p.isDeleted});c.length&&this.setState(d=>{let p={...d.selectedElementIds};for(let m of c)delete p[m];return{selectedElementIds:Ue(p,d)}})}if(this.state.editingTextElement){let c=this.scene.getElement(this.state.editingTextElement.id);(!c||c.isDeleted)&&this.setState({editingTextElement:null})}let l=this.state.editingTextElement||this.viewport.isAnimating?!1:!this.visibleElements.length&&this.hasRenderableElements;this.state.scrolledOutside!==l&&this.setState({scrolledOutside:l}),this.store.commit(i,this.state),this.state.isLoading||(this.props.onChange?.(n,this.state,this.files,this.props.id),this.onChangeEmitter.trigger(n,this.state,this.files))}static resetTapTwice(){um=!1,gm=null}async insertClipboardContent(o,r,n){let{x:i,y:a}=ze({clientX:this.viewport.lastPosition.x,clientY:this.viewport.lastPosition.y},this.state);if(o.errorMessage){this.setState({errorMessage:o.errorMessage});return}if(r.length===0&&!n&&o.mixedContent){await this.addElementsFromMixedContentPaste(o.mixedContent,{isPlainPaste:n,sceneX:i,sceneY:a});return}if(!n&&o.text){let d=ng(o.text);if(d.ok){this.setState({openDialog:{name:"charts",data:d.data,rawText:o.text}});return}}let s=r.map(d=>d.file);if(s.length===0&&o.text&&!n){let d=o.text.trim();d.startsWith("<svg")&&d.endsWith("</svg>")&&s.push(bb(d))}if(s.length>0){this.isToolSupported("image")?await this.insertImages(s,i,a):this.setState({errorMessage:h("errors.imageToolNotSupported")});return}if(o.elements){let d=o.programmaticAPI?Ns(o.elements):o.elements;this.addElementsFromPasteOrLibrary({elements:d,files:o.files||null,position:this.editorInterface.formFactor==="desktop"?"cursor":"center",retainSeed:n,preserveFrameChildrenOrder:!0});return}if(!o.text)return;if(!n&&Ik(o.text)){let d=await import("@excalidraw/mermaid-to-excalidraw");try{let{elements:p,files:m={}}=await d.parseMermaidToExcalidraw(o.text),u=Ns(p,{regenerateIds:!0});this.addElementsFromPasteOrLibrary({elements:u,files:m,position:this.editorInterface.formFactor==="desktop"?"cursor":"center"});return}catch(p){console.warn(`parsing pasted text as mermaid definition failed: ${p.message}`)}}let l=yv(o.text).split(/\n+/).map(d=>d.trim()).filter(Boolean),c=l.map(d=>n2(d)).filter(d=>Ds(d,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(d)||Na(d)?.type==="video"));if(!n&&c.length>0&&c.length===l.length){let d=[];for(let p of c){let m=d[d.length-1],u=this.insertEmbeddableElement({sceneX:m?m.x+m.width+20:i,sceneY:a,link:Rr(p)});u&&d.push(u)}d.length&&(this.store.scheduleCapture(),this.setState({selectedElementIds:Object.fromEntries(d.map(p=>[p.id,!0]))}));return}this.addTextFromPaste(o.text,n)}async addElementsFromMixedContentPaste(o,{isPlainPaste:r,sceneX:n,sceneY:i}){if(!r&&o.some(a=>a.type==="imageUrl")&&this.isToolSupported("image")){let a=o.filter(d=>d.type==="imageUrl").map(d=>d.value),s=await Promise.all(a.map(async d=>{try{return{file:await K2(d)}}catch(p){let m=p.message;return p.cause==="FETCH_ERROR"?m=h("errors.failedToFetchImage"):p.cause==="UNSUPPORTED"&&(m=h("errors.unsupportedFileType")),{errorMessage:m}}})),l=s.filter(d=>!!d.file).map(d=>d.file);await this.insertImages(l,n,i);let c=s.find(d=>!!d.errorMessage);c&&c.errorMessage&&this.setState({errorMessage:c.errorMessage})}else{let a=o.filter(s=>s.type==="text");a.length&&this.addTextFromPaste(a.map(s=>s.value).join(`
|
|
138
107
|
|
|
139
|
-
`),r)}}addTextFromPaste(
|
|
140
|
-
`),f=b.reduce((x,v,y)=>{let E=ic(v).trim();if(E.length){let w=this.getTopLayerFrameAtSceneCoords({x:n,y:u}),T=it(E,l,s),S=T.width>p,_=S?yn(E,l,p):E;T=S?it(_,l,s):T;let M=n-T.width/2,N=u-T.height/2,L=Qt({...a,x:M,y:N,text:_,originalText:E,lineHeight:s,autoResize:!S,frameId:w?w.id:null});x.push(L),u+=L.height+m}else b[y-1]?.trim()&&(u+=ac(a.fontSize,s)+m);return x},[]);f.length!==0&&(this.insertNewElements(f),this.store.scheduleCapture(),this.setState({selectedElementIds:Be(Object.fromEntries(f.map(x=>[x.id,!0])),this.state)}),!r&&f.length>1&&Zk===!1&&this.editorInterface.formFactor!=="phone"&&(this.setToast({message:h("toast.pasteAsSingleElement",{shortcut:H("CtrlOrCmd+Shift+V")}),duration:5e3}),Zk=!0))}handleTextWysiwyg(t,{isExistingElement:r=!1,initialCaretSceneCoords:n=null}){let i=this.scene.getElementsMapIncludingDeleted(),a=(l,s)=>{this.scene.replaceAllElements([...this.scene.getElementsIncludingDeleted().map(c=>c.id===t.id&&j(c)?se(c,{originalText:l,isDeleted:s??c.isDeleted,...Ov(c,Zo(c,i),i,l)}):c)])};this.textWysiwygSubmitHandler=c3({canvas:this.canvas,getViewportCoords:(l,s)=>{let{x:c,y:d}=Ot({sceneX:l,sceneY:s},this.state);return[c-this.state.offsetLeft,d-this.state.offsetTop]},onChange:wt(l=>{a(l,!1),Jo(t)&&wo(t,this.scene)}),onSubmit:wt(({viaKeyboard:l,nextOriginalText:s})=>{this.textWysiwygSubmitHandler=null;let c=!s.trim();a(s,c);let d=l&&!this.isToolLocked()&&this.state.activeTool.type!=="autoshape"?t.containerId||(c?null:t.id):null;d&&Po(()=>{this.setState(p=>({selectedElementIds:Be({...p.selectedElementIds,[d]:!0},p)}))}),c&&Lm(this.scene.getNonDeletedElements(),[t]),(!c||r)&&this.store.scheduleCapture(),Po(()=>{this.setState({newElement:null,editingTextElement:null})}),(this.isToolLocked()||this.state.activeTool.type==="autoshape")&&this.cursor.applyForTool(),this.focusContainer()}),element:t,excalidrawContainer:this.excalidrawContainerRef.current,app:this,initialCaretSceneCoords:n,autoSelect:!this.editorInterface.isTouchScreen}),this.deselectElements(),a(t.originalText,!1)}deselectElements(){this.setState({selectedElementIds:Be({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})}getSelectedTextElement(t){let r=this.scene.getSelectedElements(this.state);if(r.length!==1)return null;let n=r[0];return j(n)?n:t?we(n,this.scene.getNonDeletedElementsMap()):null}getSelectedTextEditingContainerAtPosition(t,r){let n=this.scene.getSelectedElements(this.state);if(n.length!==1||!t||t.id!==n[0].id)return null;let i=n[0];if(j(i))return null;if(!Zg(i))return;let a=this.getSelectedTextElement(i),l=this.getTextElementAtPosition(r.x,r.y);if(!(!a||l?.id!==a.id))return i}getTextElementAtPosition(t,r){let n=this.getElementAtPosition(t,r,{includeBoundTextElement:!0});return n&&j(n)&&!n.isDeleted?n:null}getElementAtPosition(t,r,n){let i=[];if(n&&"allHitElements"in n?i=n?.allHitElements||[]:i=this.getElementsAtPosition(t,r,{includeBoundTextElement:n?.includeBoundTextElement,includeLockedElements:n?.includeLockedElements}),i.length>1){if(n?.preferSelected){for(let l=i.length-1;l>-1;l--)if(this.state.selectedElementIds[i[l].id])return i[l]}let a=i[i.length-1];return li({point:A(t,r),element:a,threshold:this.getElementHitThreshold(a)/2,elementsMap:this.scene.getNonDeletedElementsMap(),frameNameBound:oe(a)?this.frameNameBoundsCache.get(a):null})?a:i[i.length-2]}return i.length===1?i[0]:null}getElementsAtPosition(t,r,n){let i=[],a=this.scene.getNonDeletedElementsMap();return(n?.includeBoundTextElement&&n?.includeLockedElements?this.scene.getNonDeletedElements():this.scene.getNonDeletedElements().filter(s=>(n?.includeLockedElements||!s.locked)&&(n?.includeBoundTextElement||!(j(s)&&s.containerId)))).filter(s=>this.hitElement(t,r,s)).filter(s=>{let c=aa(s,a);return c&&!Jo(c)&&console.error("[NONDELETED][INVARIANT] Containing frame is deleted"),c&&this.state.frameRendering.enabled&&this.state.frameRendering.clip&&!Ja(s)?of({x:t,y:r},c,a):!0}).filter(s=>Ja(s)?(i.push(s),!1):!0).concat(i)}getElementHitThreshold(t){return Math.max(t.strokeWidth/2+.1,.85*(Ag/this.state.zoom.value))}hitElement(t,r,n,i=!0){return i&&this.state.selectedElementIds[n.id]&&$m([n],this.state,this.editorInterface)&&Mm(A(t,r),n,this.scene.getNonDeletedElementsMap(),this.getElementHitThreshold(n))||rv(A(t,r),n,this.scene.getNonDeletedElementsMap())?!0:li({point:A(t,r),element:n,threshold:this.getElementHitThreshold(n),elementsMap:this.scene.getNonDeletedElementsMap(),frameNameBound:oe(n)?this.frameNameBoundsCache.get(n):null})}getTextBindableContainerAtPosition(t,r){let n=this.scene.getNonDeletedElements(),i=this.scene.getSelectedElements(this.state);if(i.length===1)return En(i[0],!1)?i[0]:null;let a=null;for(let l=n.length-1;l>=0;--l){if(n[l].isDeleted)continue;let[s,c,d,p]=Yt(n[l],this.scene.getNonDeletedElementsMap());if(ve(n[l])&&li({point:A(t,r),element:n[l],elementsMap:this.scene.getNonDeletedElementsMap(),threshold:this.getElementHitThreshold(n[l])})){a=n[l];break}else if(s<t&&t<d&&c<r&&r<p){if(oe(n[l]))continue;a=n[l];break}}return En(a,!1)?a:null}isEditingTextContent(){return!!this.state.editingTextElement||j(this.state.newElement)}handleHoverSelectedLinearElement(t,r,n){let i=this.scene.getNonDeletedElementsMap(),a=Z.getElement(t.elementId,i);if(a)if(this.state.selectedLinearElement){let l=-1,s=null;li({point:A(r,n),element:a,elementsMap:i,threshold:this.getElementHitThreshold(a)})?(l=Z.getPointIndexUnderCursor(a,i,this.state.zoom,r,n),s=Z.getSegmentMidpointHitCoords(t,{x:r,y:n},this.state,this.scene.getNonDeletedElementsMap()),(Re(a)?l===0||l===a.points.length-1:l>=0)||s?this.cursor.set(Oe.POINTER):this.hitElement(r,n,a)&&(!Re(a)||!(a.startBinding||a.endBinding))&&(this.state.activeTool.type!=="lasso"||Object.keys(this.state.selectedElementIds).length>0)&&this.cursor.set(Oe.MOVE)):this.hitElement(r,n,a)&&(!Re(a)||!(a.startBinding||a.endBinding))&&(this.state.activeTool.type!=="lasso"||Object.keys(this.state.selectedElementIds).length>0)&&this.cursor.set(Oe.MOVE),this.state.selectedLinearElement.hoverPointIndex!==l&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,hoverPointIndex:l}}),Z.arePointsEqual(this.state.selectedLinearElement.segmentMidPointHoveredCoords,s)||this.setState({selectedLinearElement:{...this.state.selectedLinearElement,segmentMidPointHoveredCoords:s}});let c=null,d=a;(d.startBinding||d.endBinding)&&(c=pw(a,r,n,this.scene,this.state)),this.state.selectedLinearElement.hoveredFocusPointBinding!==c&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,isDragging:!1,hoveredFocusPointBinding:c}}),c&&this.cursor.set(Oe.POINTER)}else this.cursor.set(Oe.AUTO)}updateGestureOnPointerDown(t){Le.pointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),Le.pointers.size===2&&(Le.lastCenter=F0(Le.pointers),Le.initialScale=this.state.zoom.value,Le.initialDistance=B0(Array.from(Le.pointers.values())))}initialPointerDownState(t){let r=ze(t,this.state),n=this.scene.getSelectedElements(this.state),[i,a,l,s]=ye(n),c=n.findIndex(Re)===0;return{origin:r,withCmdOrCtrl:t[I.CTRL_OR_CMD],originInGrid:um(Jt(r.x,r.y,t[I.CTRL_OR_CMD]||c?null:this.getEffectiveGridSize())),scrollbars:Y0(Vd,t.clientX-this.state.offsetLeft,t.clientY-this.state.offsetTop),lastCoords:{...r},originalElements:this.scene.getNonDeletedElements().reduce((d,p)=>(d.set(p.id,Tr(p)),d),new Map),resize:{handleType:!1,isResizing:!1,offset:{x:0,y:0},arrowDirection:"origin",center:{x:(l+i)/2,y:(s+a)/2}},hit:{element:null,allHitElements:[],wasAddedToSelection:!1,hasBeenDuplicated:!1,hasHitCommonBoundingBoxOfSelectedElements:this.isHittingCommonBoundingBoxOfSelectedElements(r,n)},drag:{hasOccurred:!1,offset:null,origin:{...r},blockDragging:!1},eventListeners:{onMove:null,onUp:null,onKeyUp:null,onKeyDown:null},boxSelection:{hasOccurred:!1}}}handleDraggingScrollBar(t,r){if(!(r.scrollbars.isOverEither&&!this.state.multiElement))return!1;cg=!0,r.lastCoords.x=t.clientX,r.lastCoords.y=t.clientY;let n=ch(a=>{a.target instanceof HTMLElement&&this.handlePointerMoveOverScrollbars(a,r)}),i=wt(()=>{Ns=null,cg=!1,this.cursor.applyForTool(),this.setState({cursorButton:"up"}),this.savePointer(t.clientX,t.clientY,"up"),window.removeEventListener("pointermove",n),window.removeEventListener("pointerup",i),n.flush()});return Ns=i,window.addEventListener("pointermove",n),window.addEventListener("pointerup",i),!0}isASelectedElement(t){return t!=null&&this.state.selectedElementIds[t.id]}isHittingCommonBoundingBoxOfSelectedElements(t,r){if(r.length<2)return!1;let n=Math.max(Ag/this.state.zoom.value,1),i=Zi*2/this.state.zoom.value,[a,l,s,c]=ye(r);return t.x>a-i-n&&t.x<s+i+n&&t.y>l-i-n&&t.y<c+i+n}getCurrentItemRoundness(t){return this.state.currentItemRoundness==="round"?{type:ni(t)?Mt.ADAPTIVE_RADIUS:Mt.PROPORTIONAL_RADIUS}:null}getCurrentItemStrokeWidth(t){return Br(t,this.state.currentItemStrokeWidthKey)}maybeCacheReferenceSnapPoints(t,r,n=!1){zn({event:t,app:this,selectedElements:r})&&(n||!ar.getReferenceSnapPoints())&&ar.setReferenceSnapPoints(o3(this.scene.getNonDeletedElements(),r,this.state,this.scene.getNonDeletedElementsMap()))}maybeCacheVisibleGaps(t,r,n=!1){zn({event:t,app:this,selectedElements:r})&&(n||!ar.getVisibleGaps())&&ar.setVisibleGaps(t3(this.scene.getNonDeletedElements(),r,this.state,this.scene.getNonDeletedElementsMap()))}onKeyDownFromPointerDownHandler(t){return wt(r=>{this.maybeHandleResize(t,r)||this.maybeDragNewGenericElement(t,r)})}onKeyUpFromPointerDownHandler(t){return wt(r=>{r.key===I.ALT&&r.preventDefault(),!this.maybeHandleResize(t,r)&&this.maybeDragNewGenericElement(t,r)})}onPointerMoveFromPointerDownHandler(t){return ch(r=>{if(this.state.openDialog?.name==="elementLinkSelector")return;let n=ze(r,this.state);if(this.state.activeLockedId&&this.setState({activeLockedId:null}),this.state.selectedLinearElement&&this.state.selectedLinearElement.elbowed&&this.state.selectedLinearElement.initialState.segmentMidpoint.index){let[m,u]=Jt(n.x,n.y,r[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),b=this.state.selectedLinearElement.initialState.segmentMidpoint.index;if(b<0){let x=Z.getSegmentMidpointHitCoords({...this.state.selectedLinearElement,segmentMidPointHoveredCoords:null},{x:m,y:u},this.state,this.scene.getNonDeletedElementsMap());b=x?Z.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,x,this.scene.getNonDeletedElementsMap()):-1}let f=Z.moveFixedSegment(this.state.selectedLinearElement,b,m,u,this.scene);this.setState({selectedLinearElement:{...this.state.selectedLinearElement,isDragging:!0,segmentMidPointHoveredCoords:f.segmentMidPointHoveredCoords,initialState:f.initialState}});return}let i=this.previousPointerMoveCoords??t.origin;if(this.previousPointerMoveCoords=n,t.drag.offset===null&&(t.drag.offset=um(qv(this.scene.getSelectedElements(this.state),t.origin.x,t.origin.y))),!(r.target instanceof HTMLElement)||this.handlePointerMoveOverScrollbars(r,t))return;if(Qo(this.state)){this.handleEraser(r,n);return}if(this.state.activeTool.type==="laser"&&this.laserTrails.addPointToPath(n.x,n.y),this.drawShape.handlePointerMove(n))return;let[l,s]=Jt(n.x,n.y,r[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize());if(t.resize.isResizing&&(t.lastCoords.x=n.x,t.lastCoords.y=n.y,this.maybeHandleCrop(t,r)||this.maybeHandleResize(t,r)))return!0;let c=this.scene.getNonDeletedElementsMap();if(this.state.selectedLinearElement){let m=this.state.selectedLinearElement;if(m.draggedFocusPointBinding){cw(m,c,n,this.scene,this.state,this.getEffectiveGridSize(),r.altKey),this.setState({selectedLinearElement:{...m,isDragging:!1,selectedPointsIndices:[],initialState:{...m.initialState,lastClickedPoint:-1}}});return}if(Z.shouldAddMidpoint(this.state.selectedLinearElement,n,this.state,c)){let u=Z.addMidpoint(this.state.selectedLinearElement,n,this,!r[I.CTRL_OR_CMD],this.scene);if(!u)return;Po(()=>{this.state.selectedLinearElement&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,initialState:u.pointerDownState,selectedPointsIndices:u.selectedPointsIndices,segmentMidPointHoveredCoords:null}})});return}else{if(m.initialState.segmentMidpoint.value!==null&&!m.initialState.segmentMidpoint.added)return;if(m.initialState.lastClickedPoint>-1){let u=Z.getElement(m.elementId,c);if(u?.isDeleted)return;if(Bt(u)){let f=$o(A(n.x,n.y),this.scene.getNonDeletedElements(),c);Ko("COMPLEX_BINDINGS")&&this.handleDelayedBindModeChange(u,f)}if(r.altKey&&!this.state.selectedLinearElement?.initialState?.arrowStartIsInside&&Ko("COMPLEX_BINDINGS")&&this.handleSkipBindMode(),m.initialState.lastClickedPoint===-1)return;let b=Z.handlePointDragging(r,this,n.x,n.y,m);if(b){t.lastCoords.x=n.x,t.lastCoords.y=n.y,t.drag.hasOccurred=!0,(b.suggestedBinding!==this.state.suggestedBinding||!At(b.selectedLinearElement?.selectedPointsIndices??[],this.state.selectedLinearElement?.selectedPointsIndices??[])||b.selectedLinearElement?.hoverPointIndex!==this.state.selectedLinearElement?.hoverPointIndex||b.selectedLinearElement?.customLineAngle!==this.state.selectedLinearElement?.customLineAngle||this.state.selectedLinearElement.isDragging!==b.selectedLinearElement?.isDragging||this.state.selectedLinearElement?.initialState?.altFocusPoint!==b.selectedLinearElement?.initialState?.altFocusPoint)&&this.setState(b);return}}}}let d=t.hit.allHitElements.some(m=>this.isASelectedElement(m)),p=this.state.selectedLinearElement?.isEditing&&r.shiftKey&&this.state.selectedLinearElement.elementId===t.hit.element?.id;if((d||t.hit.hasHitCommonBoundingBoxOfSelectedElements)&&!p&&!t.drag.blockDragging){let m=this.scene.getSelectedElements(this.state);if(m.length>0&&m.every(f=>f.locked))return;let b=m.some(f=>oe(f))?null:this.getTopLayerFrameAtSceneCoords(n,{currentFrameId:bc(m),excludeElementIds:this.state.selectedElementIds});if(this.updateFrameToHighlight(b),t.drag.hasOccurred=!0,this.state.activeTool.type==="lasso"&&this.lassoTrail.hasCurrentTrail&&!(this.editorInterface.formFactor!=="desktop"&&t.hit.element)&&!this.state.activeTool.fromSelection)return;if(this.state.activeTool.type==="lasso"&&m.length>0&&t.drag.hasOccurred&&!this.state.activeTool.fromSelection&&this.lassoTrail.endPath(),m.length>0&&!t.withCmdOrCtrl&&!this.state.editingTextElement&&this.state.activeEmbeddable?.state!=="active"){let f={x:n.x-t.drag.origin.x,y:n.y-t.drag.origin.y},x=[...t.originalElements.values()],v=r.shiftKey;if(v){let w=Math.abs(f.x),T=Math.abs(f.y),S=v&&w<T,_=v&&w>T;S&&(f.x=0),_&&(f.y=0)}if(this.state.croppingElementId){let w=this.scene.getNonDeletedElementsMap().get(this.state.croppingElementId);if(w&&et(w)&&w.crop!==null&&t.hit.element===w){let T=w.crop,S=ri(w)&&this.imageCache.get(w.fileId)?.image;if(S&&!(S instanceof Promise)){let _=xn(w),M=yg(n.x-i.x,n.y-i.y);M[0]*=S.naturalWidth/_.width,M[1]*=S.naturalHeight/_.height;let[N,L,D,O,V,K]=Yt(w,c),z=qd(ke(A(N,L),A(V,K),w.angle)),J=qd(ke(A(D,L),A(V,K),w.angle)),X=qd(ke(A(N,O),A(V,K),w.angle)),le=Tg(wg(J,z)),ce=Tg(wg(X,z)),F=yg(vg(M,le),vg(M,ce)),W={...T,x:$e(T.x-F[0]*Math.sign(w.scale[0]),0,S.naturalWidth-T.width),y:$e(T.y-F[1]*Math.sign(w.scale[1]),0,S.naturalHeight-T.height)};this.scene.mutateElement(w,{crop:W});return}}}this.maybeCacheVisibleGaps(r,m),this.maybeCacheReferenceSnapPoints(r,m);let{snapOffset:y,snapLines:E}=r3(x,f,this,r,this.scene.getNonDeletedElementsMap());if(this.setState({snapLines:E}),this.state.editingFrame||jv(t,m,f,this.scene,y,r[I.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),this.setState({selectedElementsAreBeingDragged:!0,selectionElement:null}),r.altKey&&!t.hit.hasBeenDuplicated){t.hit.hasBeenDuplicated=!0;let w=this.scene.getElementsIncludingDeleted(),T=t.hit.element,S=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});T&&t.hit.wasAddedToSelection&&!S.find(z=>z.id===T.id)&&S.push(T);let _=new Map(S.map(z=>[z.id,z])),{duplicatedElements:M,duplicateElementsMap:N,elementsWithDuplicates:L,origIdToDuplicateId:D}=Tn({type:"in-place",elements:w,appState:this.state,randomizeSeed:!0,idsOfElementsToDuplicate:_,overrides:({duplicateElement:z,origElement:J})=>({frameId:z.frameId??J.frameId,seed:bn()})});M.forEach(z=>{t.originalElements.set(z.id,Tr(z))});let O=L.map(z=>{if(_.has(z.id)){let J=t.originalElements.get(z.id);if(J)return se(z,{x:J.x,y:J.y})}return z}),V=this.props.onDuplicate?.(O,w),K=Hr(V||O,ne(M));Po(()=>{if(t.hit.element){let z=D.get(t.hit.element.id),J=z&&N.get(z);t.hit.element=J||null}t.hit.allHitElements=t.hit.allHitElements.reduce((z,J)=>{let X=D.get(J.id),le=X&&N.get(X);return le&&z.push(le),z},[]),t.drag.origin=ze(r,this.state),this.setState(z=>({...Rm(M,this.scene.getNonDeletedElements(),z)})),this.scene.replaceAllElements(K),S.forEach(z=>{oa(z)&&z.boundElements?.some(J=>J.type==="arrow")&&wo(z,this.scene)}),this.maybeCacheVisibleGaps(r,S,!0),this.maybeCacheReferenceSnapPoints(r,S,!0)})}return}}if(this.state.selectionElement){if(t.lastCoords.x=n.x,t.lastCoords.y=n.y,r.altKey){this.setActiveTool({type:"lasso",fromSelection:!0},{keepSelection:r.shiftKey}),this.lassoTrail.startPath(t.origin.x,t.origin.y,r.shiftKey),this.setAppState({selectionElement:null});return}this.maybeDragNewGenericElement(t,r)}else if(this.state.activeTool.type==="lasso")!r.altKey&&this.state.activeTool.fromSelection?(this.setActiveTool({type:"selection"}),this.createGenericElementOnPointerDown("selection",t),t.lastCoords.x=n.x,t.lastCoords.y=n.y,this.maybeDragNewGenericElement(t,r),this.lassoTrail.endPath()):this.lassoTrail.addPointToPath(n.x,n.y,r.shiftKey);else{let m=this.state.newElement;if(!m)return;if(m.type==="freedraw"){let u=m.points,b=n.x-m.x,f=n.y-m.y,x=u.length>0&&u[u.length-1];if(!(x&&x[0]===b&&x[1]===f)){let y=m.simulatePressure?m.pressures:[...m.pressures,r.pressure];this.scene.mutateElement(m,{points:[...u,A(b,f)],pressures:y},{informMutation:!1,isDragging:!1}),this.setState({newElement:m})}}else if(Se(m)&&!m.isDeleted){t.drag.hasOccurred=!0;let u=m.points;Qe(u.length>1,"Do not create linear elements with less than 2 points");let b=this.state.selectedLinearElement;(!b||b.elementId!==m.id)&&(b=new Z(m,this.scene.getNonDeletedElementsMap())),b&&(b.initialState.lastClickedPoint<0||b.initialState.lastClickedPoint>=u.length)&&(console.warn("Last clicked point is out of bounds. Attempting to fix it."),b={...b,selectedPointsIndices:[u.length-1],initialState:{...b.initialState,prevSelectedPointsIndices:null,lastClickedPoint:u.length-1},hoverPointIndex:u.length-1}),this.setState({newElement:m,...Z.handlePointDragging(r,this,l,s,b)})}else t.lastCoords.x=n.x,t.lastCoords.y=n.y,this.maybeDragNewGenericElement(t,r,!1)}if(this.state.activeTool.type==="selection"){t.boxSelection.hasOccurred=!0;let m=this.scene.getNonDeletedElements();if(this.state.selectedLinearElement?.isEditing)Z.handleBoxSelection(r,this.state,this.setState.bind(this),this.scene.getNonDeletedElementsMap());else{let u=!0;!r.shiftKey&&Ge(m,this.state)&&(t.withCmdOrCtrl&&t.hit.element?this.setState(f=>Tt({...f,selectedElementIds:{[t.hit.element.id]:!0}},this.scene.getNonDeletedElements(),f,this)):u=!1);let b=this.state.selectionElement?hv(m,this.state.selectionElement,this.scene.getNonDeletedElementsMap(),!1,this.state.boxSelectionMode):[];this.setState(f=>{let x={...u&&f.selectedElementIds,...b.reduce((v,y)=>(v[y.id]=!0,v),{})};return t.hit.element&&(b.length?delete x[t.hit.element.id]:x[t.hit.element.id]=!0),f=u?f:{...f,selectedGroupIds:{},editingGroupId:null},{...Tt({editingGroupId:f.editingGroupId,selectedElementIds:x},this.scene.getNonDeletedElements(),f,this),selectedLinearElement:b.length===1&&Se(b[0])?new Z(b[0],this.scene.getNonDeletedElementsMap()):null,showHyperlinkPopup:b.length===1&&(b[0].link||ao(b[0]))?"info":!1}})}}})}handlePointerMoveOverScrollbars(t,r){if(r.scrollbars.isOverHorizontal){let n=t.clientX,i=n-r.lastCoords.x;return this.viewport.translate({scrollX:this.state.scrollX-i*(Vd.horizontal?.deltaMultiplier||1)/this.state.zoom.value}),r.lastCoords.x=n,!0}if(r.scrollbars.isOverVertical){let n=t.clientY,i=n-r.lastCoords.y;return this.viewport.translate({scrollY:this.state.scrollY-i*(Vd.vertical?.deltaMultiplier||1)/this.state.zoom.value}),r.lastCoords.y=n,!0}return!1}onPointerUpFromPointerDownHandler(t){return wt(r=>{let n=this.scene.getNonDeletedElementsMap();this.removePointer(r),t.drag.blockDragging=!1,t.eventListeners.onMove&&t.eventListeners.onMove.flush(),r.type==="pointerup"&&this.state.activeTool.type===ut.bucketfill?this.bucketFill.handlePointerUp():this.bucketFill.cancel();let{newElement:i,resizingElement:a,croppingElementId:l,multiElement:s,activeTool:c,isResizing:d,isRotating:p,isCropping:m}=this.state;this.setState(E=>({isResizing:!1,isRotating:!1,isCropping:!1,resizingElement:null,selectionElement:null,frameToHighlight:null,elementsToHighlight:null,cursorButton:"up",snapLines:ja(E.snapLines,[]),originSnapOffset:null})),this.lassoTrail.endPath(),this.previousPointerMoveCoords=null,ar.setReferenceSnapPoints(null),ar.setVisibleGaps(null),this.savePointer(r.clientX,r.clientY,"up");let u=t.hit.allHitElements,b=ze({clientX:r.clientX,clientY:r.clientY},this.state);if(this.state.activeTool.type==="selection"&&!t.boxSelection.hasOccurred&&!t.resize.isResizing&&!u.some(E=>this.state.selectedElementIds[E.id])){let E=this.getElementAtPosition(b.x,b.y,{includeLockedElements:!0});this.isEditingTextContent()||this.store.scheduleCapture(),E?.locked?this.setState({activeLockedId:E.groupIds.length>0?E.groupIds.at(-1)||"":E.id}):this.setState({activeLockedId:null})}else this.setState({activeLockedId:null});if(Ko("COMPLEX_BINDINGS")&&this.resetDelayedBindMode(),this.setState({selectedElementsAreBeingDragged:!1,bindMode:"orbit"}),t.drag.hasOccurred&&t.hit?.element?.id){let E=n.get(t.hit.element.id);oa(E)&&E.boundElements?.filter(w=>w.type==="arrow").map(w=>n.get(w.id)).filter(w=>Re(w)).forEach(w=>{w&&this.scene.mutateElement(w,{})})}if(this.state.selectedLinearElement?.isEditing&&!this.state.newElement&&this.state.selectedLinearElement.draggedFocusPointBinding===null)if(!t.boxSelection.hasOccurred&&t.hit?.element?.id!==this.state.selectedLinearElement.elementId&&this.state.selectedLinearElement.draggedFocusPointBinding===null)this.actionManager.executeAction(Gt);else{let E=Z.handlePointerUp(r,this.state.selectedLinearElement,this.state,this.scene);this.actionManager.executeAction(Gt,"ui",{event:r,sceneCoords:b}),E!==this.state.selectedLinearElement&&this.setState({selectedLinearElement:E,suggestedBinding:null})}else if(this.state.selectedLinearElement){if(this.state.selectedLinearElement.elbowed){let E=Z.getElement(this.state.selectedLinearElement.elementId,this.scene.getNonDeletedElementsMap());E&&this.scene.mutateElement(E,{})}if(this.state.selectedLinearElement.draggedFocusPointBinding?(mw(this.state.selectedLinearElement,this.scene),this.setState({selectedLinearElement:{...this.state.selectedLinearElement,draggedFocusPointBinding:null,initialState:{...this.state.selectedLinearElement.initialState,arrowOtherEndpointInitialBinding:null}}})):t.hit?.element?.id!==this.state.selectedLinearElement.elementId?this.scene.getSelectedElements(this.state).length>1&&this.setState({selectedLinearElement:null}):this.state.selectedLinearElement.isDragging&&(this.setState({selectedLinearElement:{...this.state.selectedLinearElement,isDragging:!1}}),this.actionManager.executeAction(Gt,"ui",{event:r,sceneCoords:b})),this.state.newElement&&this.state.multiElement&&Se(this.state.newElement)&&this.state.selectedLinearElement){let{multiElement:E}=this.state;this.setState({selectedLinearElement:{...this.state.selectedLinearElement,lastCommittedPoint:E.points[E.points.length-1]}})}}if(this.missingPointerEventCleanupEmitter.clear(),window.removeEventListener("pointermove",t.eventListeners.onMove),window.removeEventListener("pointerup",t.eventListeners.onUp),window.removeEventListener("keydown",t.eventListeners.onKeyDown),window.removeEventListener("keyup",t.eventListeners.onKeyUp),this.props?.onPointerUp?.(c,t),this.onPointerUpEmitter.trigger(this.state.activeTool,t,r),i?.type==="freedraw"){let E=ze(r,this.state),w=i.points,T=E.x-i.x,S=E.y-i.y;T===w[0][0]&&S===w[0][1]&&(S+=1e-4,T+=1e-4);let _=i.simulatePressure?[]:[...i.pressures,r.pressure];this.scene.mutateElement(i,{points:[...w,A(T,S)],pressures:_}),this.actionManager.executeAction(Gt);return}if(Se(i)&&this.state.activeTool.type!=="autoshape"){let E=ze(r,this.state),w=Uo(A(E.x,E.y),A(t.origin.x,t.origin.y))*this.state.zoom.value;if((!t.drag.hasOccurred||w<kE)&&i&&!s)if(this.editorInterface.isTouchScreen){let T=Math.min(this.state.width*.7/this.state.zoom.value,100);this.scene.mutateElement(i,{x:i.x-T/2,points:[A(0,0),A(T,0)]},{informMutation:!1,isDragging:!1}),this.actionManager.executeAction(Gt)}else this.setState({multiElement:i,newElement:i});else t.drag.hasOccurred&&!s&&(this.store.scheduleCapture(),Se(i)&&this.actionManager.executeAction(Gt,"ui",{event:r,sceneCoords:b}),this.setState({suggestedBinding:null}),this.isToolLocked()?this.setState({newElement:null}):this.setState(T=>({newElement:null,activeTool:gt(this.state,{type:this.state.preferredSelectionTool.type}),selectedElementIds:Be({...T.selectedElementIds,[i.id]:!0},T),selectedLinearElement:new Z(i,this.scene.getNonDeletedElementsMap())}),()=>this.cursor.reset()),this.scene.triggerUpdate());return}if(j(i)){let E=Uy(ct({fontSize:i.fontSize,fontFamily:i.fontFamily}),i.lineHeight);i.width<E&&this.scene.mutateElement(i,{autoResize:!0}),this.cursor.reset(),this.handleTextWysiwyg(i,{isExistingElement:!0})}if(c.type!=="selection"&&i&&Wr(i)){this.updateScene({elements:this.scene.getElementsIncludingDeleted().filter(E=>E.id!==i.id),appState:{newElement:null},captureUpdate:R.NEVER});return}if(oe(i)){let E=yv(this.scene.getElementsIncludingDeleted(),i,this.scene.getNonDeletedElementsMap());this.scene.replaceAllElements(ll(this.scene.getElementsMapIncludingDeleted(),E,i))}if(i&&(this.scene.mutateElement(i,Pv(i),{informMutation:!1,isDragging:!1}),this.scene.triggerUpdate()),t.drag.hasOccurred){let E=ze(r,this.state);if(this.state.selectedLinearElement&&this.state.selectedLinearElement.isDragging){let w=this.scene.getElement(this.state.selectedLinearElement.elementId);if(w?.frameId){let T=aa(w,n);T&&w&&(fv(w,T,this.scene.getNonDeletedElementsMap())||(this.scene.mutateElement(w,{groupIds:[]}),Fm([w],this.scene.getNonDeletedElementsMap()),this.scene.triggerUpdate()))}}else{let w=this.scene.getSelectedElements(this.state),T=this.getTopLayerFrameAtSceneCoords(E,{currentFrameId:bc(w),excludeElementIds:this.state.selectedElementIds}),S=this.scene.getElementsMapIncludingDeleted(),_=M=>{if(M.length>0){for(let N of M){let L=N.groupIds.indexOf(this.state.editingGroupId);this.scene.mutateElement(N,{groupIds:N.groupIds.slice(0,L)},{informMutation:!1,isDragging:!1})}S.forEach(N=>{N.groupIds.length&&He(S,N.groupIds[N.groupIds.length-1]).length<2&&this.scene.mutateElement(N,{groupIds:[]},{informMutation:!1,isDragging:!1})}),this.setState({editingGroupId:null})}};if(T&&!this.state.selectedElementIds[T.id]){let M=w.filter(N=>rf(N,S,this.state));this.state.editingGroupId&&_(M),S=ll(S,M,T)}else if(!T&&this.state.editingGroupId){let M=w.filter(N=>N.frameId&&!rf(N,S,this.state));_(M)}S=Gr(S,this.state,this),this.scene.replaceAllElements(S)}}if(a&&this.store.scheduleCapture(),a&&Wr(a)&&this.updateScene({elements:this.scene.getElementsIncludingDeleted().filter(E=>E.id!==a.id),captureUpdate:R.NEVER}),t.resize.isResizing){let E=Gr(this.scene.getElementsIncludingDeleted(),this.state,this),w=this.scene.getSelectedElements(this.state).filter(oe);for(let T of w)E=Ur(E,To(this.scene.getElementsIncludingDeleted(),T,this.state,n),T);this.scene.replaceAllElements(E)}let f=t.hit.element;this.state.selectedLinearElement?.elementId!==f?.id&&Se(f)&&this.scene.getSelectedElements(this.state).length===1&&this.setState({selectedLinearElement:new Z(f,this.scene.getNonDeletedElementsMap())}),(!l||l&&(!f&&!m||f&&f.id!==l))&&this.finishImageCropping();let x=this.lastPointerDownEvent,v=this.lastPointerUpEvent||this.lastPointerMoveEvent;if(Qo(this.state)&&x&&v){if(this.eraserTrail.endPath(),Uo(A(x.clientX,x.clientY),A(v.clientX,v.clientY))===0){let w=ze({clientX:v.clientX,clientY:v.clientY},this.state);this.getElementsAtPosition(w.x,w.y).forEach(S=>this.elementsPendingErasure.add(S.id))}this.eraseElements();return}else this.elementsPendingErasure.size&&this.restoreReadyToEraseElements();if(f&&!t.drag.hasOccurred&&!t.hit.wasAddedToSelection&&(!this.state.selectedLinearElement?.isEditing||!t.boxSelection.hasOccurred)&&this.state.activeTool.type!=="lasso"&&(r.shiftKey&&!this.state.selectedLinearElement?.isEditing?this.state.selectedElementIds[f.id]?_m(this.state,f)?this.setState(E=>{let w={...E.selectedElementIds};for(let T of f.groupIds.flatMap(S=>He(this.scene.getNonDeletedElements(),S)))delete w[T.id];return{selectedGroupIds:{...E.selectedElementIds,...f.groupIds.map(T=>({[T]:!1})).reduce((T,S)=>({...T,...S}),{})},selectedElementIds:Be(w,E)}}):this.state.selectedLinearElement?.isDragging||this.setState(E=>{let w={...E.selectedElementIds};delete w[f.id];let T=ie(this.scene.getNonDeletedElements(),{selectedElementIds:w});return{...Tt({editingGroupId:E.editingGroupId,selectedElementIds:w},this.scene.getNonDeletedElements(),E,this),selectedLinearElement:T.length===1&&Se(T[0])?new Z(T[0],this.scene.getNonDeletedElementsMap()):E.selectedLinearElement}}):f.frameId&&this.state.selectedElementIds[f.frameId]?this.setState(E=>{let w={...E.selectedElementIds,[f.id]:!0};return delete w[f.frameId],(this.scene.getElement(f.frameId)?.groupIds??[]).flatMap(T=>He(this.scene.getNonDeletedElements(),T)).forEach(T=>{delete w[T.id]}),{...Tt({editingGroupId:E.editingGroupId,selectedElementIds:w},this.scene.getNonDeletedElements(),E,this),showHyperlinkPopup:f.link||ao(f)?"info":!1}}):this.setState(E=>({selectedElementIds:Be({...E.selectedElementIds,[f.id]:!0},E)})):this.setState(E=>({...Tt({editingGroupId:E.editingGroupId,selectedElementIds:{[f.id]:!0}},this.scene.getNonDeletedElements(),E,this),selectedLinearElement:Se(f)&&E.selectedLinearElement?.elementId!==f.id?new Z(f,this.scene.getNonDeletedElementsMap()):E.selectedLinearElement}))),this.state.activeTool.type!=="lasso"&&!(f&&Re(f))&&!t.drag.hasOccurred&&!this.state.isResizing&&(f&&ov({point:A(t.origin.x,t.origin.y),element:f,elementsMap:n,threshold:this.getElementHitThreshold(f),frameNameBound:oe(f)?this.frameNameBoundsCache.get(f):null},n)||!f&&t.hit.hasHitCommonBoundingBoxOfSelectedElements)){this.state.selectedLinearElement?.isEditing?this.actionManager.executeAction(_a):this.setState({selectedElementIds:Be({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null}),this.cursor.set(Oe.AUTO);return}let y=this.getSelectedTextEditingContainerAtPosition(f,b);if(c.type===this.state.preferredSelectionTool.type&&!this.state.editingTextElement&&!t.drag.hasOccurred&&!t.hit.wasAddedToSelection&&!r.shiftKey&&!r[I.CTRL_OR_CMD]&&!r.altKey&&r.pointerType!=="touch"&&f&&(j(f)&&this.state.selectedElementIds[f.id]&&this.scene.getSelectedElements(this.state).length===1||y)){this.startTextEditing({sceneX:b.x,sceneY:b.y,container:y,initialCaretSceneCoords:this.lastPointerUpIsDoubleClick?void 0:b});return}if(!this.isToolLocked()&&c.type!=="freedraw"&&i&&this.setState(E=>({selectedElementIds:Be({...E.selectedElementIds,[i.id]:!0},E),showHyperlinkPopup:ao(i)&&!i.link?"editor":E.showHyperlinkPopup})),!this.isEditingTextContent()&&(c.type!=="selection"||Ge(this.scene.getNonDeletedElements(),this.state)||!At(this.state.previousSelectedElementIds,this.state.selectedElementIds))&&this.store.scheduleCapture(),t.drag.hasOccurred&&!this.state.selectedLinearElement||d||p||m){let E=this.scene.getSelectedElements(this.state).filter(ve);hc(E,this.scene,this.state)}if(c.type==="laser"){this.laserTrails.endPath();return}if(c.type==="autoshape"){this.actionManager.executeAction(Gt);return}!this.isToolLocked()&&c.type!=="freedraw"&&c.type!==ut.bucketfill&&(c.type!=="lasso"||c.type==="lasso"&&c.fromSelection)?this.setState({newElement:null,suggestedBinding:null,activeTool:gt(this.state,{type:this.state.preferredSelectionTool.type})},()=>this.cursor.reset()):this.setState({newElement:null,suggestedBinding:null})})}clearSelection(t){this.setState(r=>({selectedElementIds:Be({},r),activeEmbeddable:null,selectedGroupIds:{},editingGroupId:r.editingGroupId&&t!=null&&nl(t,r.editingGroupId)?r.editingGroupId:null})),this.setState({selectedElementIds:Be({},this.state),activeEmbeddable:null,previousSelectedElementIds:this.state.selectedElementIds,selectedLinearElement:null})}getTextWysiwygSnappedToCenterPosition(t,r,n,i){if(i){let a=i.x+i.width/2,l=i.y+i.height/2,s=Sm(i,this.scene.getNonDeletedElementsMap());if(s&&(a=s.x,l=s.y),Math.hypot(t-a,r-l)<AE){let{x:p,y:m}=Ot({sceneX:a,sceneY:l},n);return{viewportX:p,viewportY:m,elementCenterX:a,elementCenterY:l}}}}getCanvasOffsets(){if(this.excalidrawContainerRef?.current){let t=this.excalidrawContainerRef.current,{left:r,top:n}=t.getBoundingClientRect();return{offsetLeft:r,offsetTop:n}}return{offsetLeft:0,offsetTop:0}}async updateLanguage(){let t=El.find(r=>r.code===this.props.langCode)||Xr;await ap(t),this.setAppState({})}},qN=()=>{(zr()||Ft())&&(window.h=window.h||{},Object.defineProperties(window.h,{elements:{configurable:!0,get(){return this.app?.scene.getElementsIncludingDeleted()},set(e){return this.app?.scene.replaceAllElements(al(e))}},scene:{configurable:!0,get(){return this.app?.scene}}}))};qN();var Jk=aE;import{useEffect as QN,useState as e9}from"react";import{jsx as t9}from"react/jsx-runtime";var Qk=e=>{let[o,t]=e9(!0);return QN(()=>{let r=async()=>{await ap(n),t(!1)},n=El.find(i=>i.code===e.langCode)||Xr;r()},[e.langCode]),o?t9(Mh,{theme:e.theme}):e.children};import o9 from"clsx";import{jsx as eM}from"react/jsx-runtime";var tM=({children:e})=>{let{FooterCenterTunnel:o}=ot(),t=fe();return eM(o.In,{children:eM("div",{className:o9("footer-center zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-bottom":t.zenModeEnabled}),children:e})})},r9=tM;tM.displayName="FooterCenter";import i9 from"clsx";import{jsx as l9,jsxs as s9}from"react/jsx-runtime";var oM=({isCollaborating:e,onSelect:o,editorInterface:t,...r})=>{let n=fe(),i=t?.formFactor!=="desktop"||n.width<1440;return s9(ro,{...r,className:i9("collab-button",{active:e}),type:"button",onSelect:o,style:{position:"relative",width:i?void 0:"auto"},title:h("labels.liveCollaboration"),children:[i?Qf:h("labels.share"),n.collaborators.size>0&&l9("div",{className:"CollabButton-collaborators",children:n.collaborators.size})]})},a9=oM;oM.displayName="LiveCollaborationTrigger";import{jsx as Ki,jsxs as nM}from"react/jsx-runtime";var c9=()=>Ki("svg",{viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ExcalidrawLogo-icon",children:Ki("path",{d:"M39.9 32.889a.326.326 0 0 0-.279-.056c-2.094-3.083-4.774-6-7.343-8.833l-.419-.472a.212.212 0 0 0-.056-.139.586.586 0 0 0-.167-.111l-.084-.083-.056-.056c-.084-.167-.28-.278-.475-.167-.782.39-1.507.973-2.206 1.528-.92.722-1.842 1.445-2.708 2.25a8.405 8.405 0 0 0-.977 1.028c-.14.194-.028.361.14.444-.615.611-1.23 1.223-1.843 1.861a.315.315 0 0 0-.084.223c0 .083.056.166.111.194l1.09.833v.028c1.535 1.528 4.244 3.611 7.12 5.861.418.334.865.667 1.284 1 .195.223.39.473.558.695.084.11.28.139.391.055.056.056.14.111.196.167a.398.398 0 0 0 .167.056.255.255 0 0 0 .224-.111.394.394 0 0 0 .055-.167c.029 0 .028.028.056.028a.318.318 0 0 0 .224-.084l5.082-5.528a.309.309 0 0 0 0-.444Zm-14.63-1.917a.485.485 0 0 0 .111.14c.586.5 1.2 1 1.843 1.555l-2.569-1.945-.251-.166c-.056-.028-.112-.084-.168-.111l-.195-.167.056-.056.055-.055.112-.111c.866-.861 2.346-2.306 3.1-3.028-.81.805-2.43 3.167-2.095 3.944Zm8.767 6.89-2.122-1.612a44.713 44.713 0 0 0-2.625-2.5c1.145.861 2.122 1.611 2.262 1.75 1.117.972 1.06.806 1.815 1.445l.921.666a1.06 1.06 0 0 1-.251.25Zm.558.416-.056-.028c.084-.055.168-.111.252-.194l-.196.222ZM1.089 5.75c.055.361.14.722.195 1.056.335 1.833.67 3.5 1.284 4.75l.252.944c.084.361.223.806.363.917 1.424 1.25 3.602 3.11 5.947 4.889a.295.295 0 0 0 .363 0s0 .027.028.027a.254.254 0 0 0 .196.084.318.318 0 0 0 .223-.084c2.988-3.305 5.221-6.027 6.813-8.305.112-.111.14-.278.14-.417.111-.111.195-.25.307-.333.111-.111.111-.306 0-.39l-.028-.027c0-.055-.028-.139-.084-.167-.698-.666-1.2-1.138-1.731-1.638-.922-.862-1.871-1.75-3.881-3.75l-.028-.028c-.028-.028-.056-.056-.112-.056-.558-.194-1.703-.389-3.127-.639C6.087 2.223 3.21 1.723.614.944c0 0-.168 0-.196.028l-.083.084c-.028.027-.056.055-.224.11h.056-.056c.028.167.028.278.084.473 0 .055.112.5.112.555l.782 3.556Zm15.496 3.278-.335-.334c.084.112.196.195.335.334Zm-3.546 4.666-.056.056c0-.028.028-.056.056-.056Zm-2.038-10c.168.167.866.834 1.033.973-.726-.334-2.54-1.167-3.379-1.445.838.167 1.983.334 2.346.472ZM1.424 2.306c.419.722.754 3.222 1.089 5.666-.196-.778-.335-1.555-.503-2.278-.251-1.277-.503-2.416-.838-3.416.056 0 .14 0 .252.028Zm-.168-.584c-.112 0-.223-.028-.307-.028 0-.027 0-.055-.028-.055.14 0 .223.028.335.083Zm-1.089.222c0-.027 0-.027 0 0ZM39.453 1.333c.028-.11-.558-.61-.363-.639.42-.027.42-.666 0-.666-.558.028-1.144.166-1.675.25-.977.194-1.982.389-2.96.61-2.205.473-4.383.973-6.561 1.557-.67.194-1.424.333-2.066.666-.224.111-.196.333-.084.472-.056.028-.084.028-.14.056-.195.028-.363.056-.558.083-.168.028-.252.167-.224.334 0 .027.028.083.028.11-1.173 1.556-2.485 3.195-3.909 4.945-1.396 1.611-2.876 3.306-4.356 5.056-4.719 5.5-10.052 11.75-15.943 17.25a.268.268 0 0 0 0 .389c.028.027.056.055.084.055-.084.084-.168.14-.252.222-.056.056-.084.111-.084.167a.605.605 0 0 0-.111.139c-.112.111-.112.305.028.389.111.11.307.11.39-.028.029-.028.029-.056.056-.056a.44.44 0 0 1 .615 0c.335.362.67.723.977 1.028l-.698-.583c-.112-.111-.307-.083-.39.028-.113.11-.085.305.027.389l7.427 6.194c.056.056.112.056.196.056s.14-.028.195-.084l.168-.166c.028.027.083.027.111.027.084 0 .14-.027.196-.083 10.052-10.055 18.15-17.639 27.42-24.417.083-.055.111-.166.111-.25.112 0 .196-.083.251-.194 1.704-5.194 2.039-9.806 2.15-12.083v-.028c0-.028.028-.056.028-.083.028-.056.028-.084.028-.084a1.626 1.626 0 0 0-.111-1.028ZM21.472 9.5c.446-.5.893-1.028 1.34-1.5-2.876 3.778-7.65 9.583-14.408 16.5 4.607-5.083 9.242-10.333 13.068-15ZM5.193 35.778h.084-.084Zm3.462 3.194c-.027-.028-.027-.028 0-.028v.028Zm4.16-3.583c.224-.25.448-.472.699-.722 0 0 0 .027.028.027-.252.223-.475.445-.726.695Zm1.146-1.111c.14-.14.279-.334.446-.5l.028-.028c1.648-1.694 3.351-3.389 5.082-5.111l.028-.028c.419-.333.921-.694 1.368-1.028a379.003 379.003 0 0 0-6.952 6.695ZM24.794 6.472c-.921 1.195-1.954 2.778-2.82 4.028-2.736 3.944-11.532 13.583-11.727 13.75a1976.983 1976.983 0 0 1-8.042 7.639l-.167.167c-.14-.167-.14-.417.028-.556C14.49 19.861 22.03 10.167 25.074 5.917c-.084.194-.14.36-.28.555Zm4.83 5.695c-1.116-.64-1.646-1.64-1.34-2.611l.084-.334c.028-.083.084-.194.14-.277.307-.5.754-.917 1.257-1.167.027 0 .055 0 .083-.028-.028-.056-.028-.139-.028-.222.028-.167.14-.278.335-.278.335 0 1.369.306 1.76.639.111.083.223.194.335.305.14.167.363.445.474.667.056.028.112.306.196.445.056.222.111.472.084.694-.028.028 0 .194-.028.194a2.668 2.668 0 0 1-.363 1.028c-.028.028-.028.056-.056.084l-.028.027c-.14.223-.335.417-.53.556-.643.444-1.369.583-2.095.389 0 0-.195-.084-.28-.111Zm8.154-.834a39.098 39.098 0 0 1-.893 3.167c0 .028-.028.083 0 .111-.056 0-.084.028-.14.056-2.206 1.61-4.356 3.305-6.506 5.028 1.843-1.64 3.686-3.306 5.613-4.945.558-.5.949-1.139 1.06-1.861l.28-1.667v-.055c.14-.334.67-.195.586.166Z",fill:"currentColor"})}),d9=()=>nM("svg",{viewBox:"0 0 450 55",xmlns:"http://www.w3.org/2000/svg",fill:"none",className:"ExcalidrawLogo-text",children:[Ki("path",{d:"M429.27 96.74c2.47-1.39 4.78-3.02 6.83-4.95 1.43-1.35 2.73-2.86 3.81-4.51-.66.9-1.4 1.77-2.23 2.59-2.91 2.84-5.72 5.09-8.42 6.87h.01ZM343.6 69.36c.33 3.13.58 6.27.79 9.4.09 1.37.18 2.75.25 4.12-.12-4.46-.27-8.93-.5-13.39-.11-2.08-.24-4.16-.4-6.24-.06 1.79-.11 3.85-.13 6.11h-.01ZM378.47 98.34c.01-.37.07-1.13.01-6.51-.11 1.9-.22 3.81-.31 5.71-.07 1.42-.22 2.91-.16 4.35.39.03.78.07 1.17.1-.92-.85-.76-2.01-.72-3.66l.01.01ZM344.09 86.12c-.09-2.41-.22-4.83-.39-7.24v12.21c.15-.05.32-.09.47-.14.05-1.61-.03-3.23-.09-4.83h.01ZM440.69 66.79c-.22-.34-.45-.67-.69-.99-3.71-4.87-9.91-7.14-15.65-8.55-1.05-.26-2.12-.49-3.18-.71 2.29.59 4.48 1.26 6.64 2.02 7.19 2.54 10.57 5.41 12.88 8.23ZM305.09 72.46l1.2 3.6c.84 2.53 1.67 5.06 2.46 7.61.24.78.5 1.57.73 2.36.22-.04.44-.08.67-.12a776.9 776.9 0 0 1-5.01-13.57c-.02.04-.03.09-.05.13v-.01ZM345.49 90.25v.31c1.48-.42 3.05-.83 4.66-1.2-1.56.25-3.12.52-4.66.89ZM371.02 90.22c0-.57-.04-1.14-.11-1.71-.06-.02-.12-.04-.19-.05-.21-.05-.43-.08-.65-.11.42.16.74.88.95 1.87ZM398.93 54.23c-.13 0-.27-.01-.4-.02l.03.4c.11-.15.23-.27.37-.38ZM401.57 62.28v-.15c-1.22-.24-2.86-.61-3.23-1.25-.09-.15-.18-.51-.27-.98-.09.37-.2.73-.33 1.09 1.24.56 2.52.98 3.83 1.29ZM421.73 88.68c-2.97 1.65-6.28 3.12-9.69 3.68v.18c4.72-.14 11.63-3.85 16.33-8.38-2.04 1.75-4.33 3.24-6.63 4.53l-.01-.01ZM411.28 80.92c-.05-1.2-.09-2.4-.15-3.6-.21 5.66-.46 11.38-.47 14.51.24-.02.48-.04.71-.07.15-3.61.05-7.23-.09-10.83v-.01Z",transform:"translate(-144.023 -51.76)"}),Ki("path",{d:"M425.38 67.41c-3.5-1.45-7.19-2.57-14.06-3.62.09 1.97.06 4.88-.03 8.12.03.04.06.09.06.15.19 1.36.28 2.73.37 4.1.25 3.77.39 7.55.41 11.33 0 1.38-.01 2.76-.07 4.13 1.4-.25 2.78-.65 4.12-1.15 4.07-1.5 7.94-3.78 11.28-6.54 2.33-1.92 5.13-4.49 5.88-7.58.63-3.53-2.45-6.68-7.97-8.96l.01.02ZM411.35 92.53v-.06l-.34.03c.11.01.22.03.34.03ZM314.26 64.06c-.23-.59-.47-1.17-.7-1.75.57 1.62 1.11 3.25 1.6 4.9l.15.54 2.35 6.05c.32.82.66 1.64.98 2.46-1.38-4.1-2.83-8.17-4.39-12.2h.01ZM156.82 103.07c-.18.13-.38.23-.58.33 1.32-.03 2.66-.2 3.93-.34.86-.09 1.72-.22 2.58-.33-2.12.1-4.12.17-5.94.34h.01ZM210.14 68.88s.03.04.05.07c.18-.31.39-.64.58-.96-.21.3-.42.6-.64.89h.01ZM201.65 82.8c-.5.77-1.02 1.56-1.49 2.37 1.11-1.55 2.21-3.1 3.2-4.59-.23.23-.49.51-.75.79-.32.47-.65.95-.96 1.43ZM194.03 98.66c-.33-.4-.65-.84-1.05-1.17-.24-.2-.07-.49.17-.56-.23-.26-.42-.5-.63-.75 1.51-2.55 3.93-5.87 6.4-9.28-.17-.08-.29-.28-.2-.49.04-.09.09-.17.13-.26-1.21 1.78-2.42 3.55-3.61 5.33-.87 1.31-1.74 2.64-2.54 4-.29.5-.63 1.04-.87 1.61.81.65 1.63 1.27 2.47 1.88-.09-.11-.18-.21-.27-.32v.01ZM307.79 82.93c-1-3.17-2.05-6.32-3.1-9.48-1.62 4.08-3.69 9.17-6.16 15.19 3.32-1.04 6.77-1.87 10.27-2.5-.32-1.08-.67-2.15-1.01-3.21ZM149.5 80.7c.05-1.71.04-3.43 0-5.14-.1 2.26-.16 4.51-.22 6.77-.02.73-.03 1.46-.04 2.19.14-1.27.2-2.55.24-3.82h.02ZM228.98 98.3c.39 1.25.91 3.03.94 3.91.06-.03.12-.07.17-.1.08-1.29-.55-2.65-1.11-3.81ZM307.72 53.36c.81.5 1.53 1.04 2.07 1.49-.38-.8-.78-1.58-1.21-2.35-.17.03-.34.06-.51.11-.43.12-.86.26-1.29.41.35-.01.53.1.94.34ZM283.69 96.14c3.91-7.25 6.89-13.35 8.88-18.15l1.1-2.66c-1.27 2.64-2.56 5.27-3.83 7.9-1.53 3.15-3.06 6.31-4.58 9.47-.87 1.81-1.76 3.62-2.54 5.47.04.02.07.04.11.07.05.05.1.09.15.14.05-.73.27-1.48.71-2.24ZM289.92 103.23s-.04.01-.05.03c0-.02.04-.03.05-.04.05-.05.11-.1.16-.15l.21-.21c-.55 0-1.5-.27-2.55-.72.4.26.8.51 1.22.74.24.13.48.26.73.37.05.02.1.03.14.05a.27.27 0 0 1 .08-.07h.01ZM269.23 68.49c-.39-.19-.82-.48-1.33-.87-3.06-1.56-6.31-2.78-9.36-2.35-3.5.49-5.7 1.11-7.74 2.44 5.71-2.6 12.82-2.07 18.44.79l-.01-.01ZM177.87 53.69l1.06.03c-.96-.22-2-.25-2.89-.3-4.95-.26-9.99.33-14.86 1.19-2.44.43-4.88.95-7.28 1.59 9.09-1.76 15.69-2.77 23.97-2.51ZM219.85 55.51c-.18.12-.36.27-.56.45-.45.53-.86 1.11-1.26 1.66-1.91 2.61-3.71 5.31-5.57 7.95l-.12.18 8.05-10.11c-.18-.05-.36-.1-.55-.13h.01ZM510.71 54.1c.12-.15.29-.3.53-.45.69-.4 3.72-.63 5.87-.74-.36-.02-.73-.04-1.09-.05-1.84-.03-3.67.09-5.49.35.05.3.12.59.18.88v.01ZM510.76 86.02c1.37-3.07 2.49-6.27 3.57-9.46.55-1.64 1.12-3.3 1.6-4.97-1.59 4.01-3.67 9.14-6.2 15.3.24-.08.5-.14.74-.22.1-.22.19-.44.29-.65ZM566.95 75.76c.11-.02.23.03.31.11-.05-.13-.09-.26-.14-.39-.05.09-.11.18-.17.28ZM511.33 86.41c3.08-.89 6.24-1.62 9.46-2.14-1.51-3.98-2.98-7.96-4.39-11.87-.05.15-.09.31-.14.46-1.02 3.32-2.15 6.61-3.39 9.85-.48 1.25-.98 2.49-1.53 3.7h-.01ZM578.24 74.45c.11-.44.23-.87.35-1.31-.31.7-.64 1.39-.97 2.08.09.21.19.4.28.61.12-.46.23-.92.35-1.38h-.01ZM520.62 53.11c-.09 0-.18-.01-.28-.02.38.34.29 1.08.93 2.53l6.65 17.15c2.2 5.68 4.69 11.36 7.41 16.87l1.06 2.17c-2.95-7.05-5.92-14.08-8.87-21.13-1.58-3.79-3.16-7.59-4.7-11.4-.78-1.92-1.73-3.89-2.25-5.91-.03-.1 0-.19.04-.26h.01ZM578.78 77.87c1.45-5.77 3.07-10.43 3.58-13.36.05-.34.16-.88.31-1.55-.67 1.79-1.37 3.56-2.08 5.33-.12.43-.23.86-.35 1.29-.65 2.43-1.29 4.86-1.9 7.3.14.33.29.65.43 1l.01-.01ZM545.3 94.66c.02-.44.03-.83.05-1.12.02-1.01.05-2.02.11-3.02.03-6.66-.46-14.33-1.46-22.8-.13-.42-.27-1.24-.56-2.89 0-.02 0-.04-.01-.06.62 6.61.95 13.25 1.32 19.87.17 3.08.33 6.16.52 9.23.02.25.03.52.04.78l-.01.01ZM580.77 102.81c.13.2.27.38.37.49.27-.11.53-.22.8-.32-.43.09-.82.05-1.17-.16v-.01ZM530.48 104.07h.33c-.36-.13-.71-.32-1.04-.56.14.24.3.47.45.7.06-.08.14-.13.26-.13v-.01ZM542.63 58.82c.06.23.11.47.15.71.14-.33.36-.62.7-.86-.28.05-.57.11-.85.15ZM583.81 57.87c.15-.7.29-1.41.42-2.11-.14.45-.28.9-.42 1.34-.46 1.44-.89 2.89-1.31 4.34.44-1.19.88-2.37 1.31-3.57ZM523.62 91.48c-4.66 1.17-9.05 2.89-14.02 5.27 4.65-1.84 9.48-3.29 14.28-4.63-.09-.22-.17-.41-.26-.64ZM460.64 78.3c-.04-2.9-.11-5.81-.28-8.71-.1-1.68-.17-3.43-.5-5.09-.07.02-.14.03-.2.05.3 6.54.45 12.17.51 17.12.17-.07.34-.14.51-.2 0-1.06-.01-2.11-.03-3.17h-.01ZM470.63 63.24c-3.38-.26-6.81.32-10.1 1.1.41 2.01.47 4.14.57 6.18.18 3.55.25 7.11.27 10.67 3.31-1.38 6.5-3.12 9.3-5.35 1.96-1.56 3.86-3.41 5.02-5.66.73-1.41 1.19-3.22.26-4.65-1.09-1.7-3.46-2.14-5.32-2.29ZM460.29 63.68c1-.24 2.01-.46 3.04-.65-1.15.16-2.37.38-3.71.69v.13c.07-.02.15-.04.22-.05.11-.13.3-.18.45-.11v-.01ZM457.24 100.96c.43-.03.86-.07 1.29-.11.14-.49.27-.99.38-1.49-.44.7-1 1.23-1.67 1.6ZM482.88 104.98c-.18.23-.36.38-.55.47.14.09.27.19.4.28a70.76 70.76 0 0 0 4.37-4.63c.76-.89 1.52-1.81 2.19-2.77-.3-.27-.61-.53-.92-.79-.07 1.94-4.62 6.32-5.49 7.45v-.01Z",transform:"translate(-144.023 -51.76)"}),Ki("path",{d:"M474.36 63.31c-.4-.16-.84-.27-1.29-.37 1.56.42 3.08 1.22 3.76 2.74.62 1.4.32 2.95-.28 4.32.7-1.22.94-2.34.74-3.47-.24-1.33-1.19-2.54-2.93-3.21v-.01ZM477.34 89.18c-1.2-.81-2.4-1.62-3.6-2.42-.14.1-.26.19-.4.29 1.4.67 2.73 1.39 4 2.13ZM465.88 93.85c.37.25.74.5 1.1.75.46.32.92.65 1.38.97-1.57-1.2-2.01-1.61-2.49-1.72h.01ZM574.92 90.06c-2.28-5.21-4.93-11.13-5.67-12.26-.1-.15-1.57-3.01-1.63-3.08 0 0-.01.02-.02.02.4 1.37 1.09 2.69 1.65 3.99 2.14 4.95 4.36 9.86 6.67 14.73.6 1.26 1.21 2.52 1.83 3.78-.75-2.01-1.64-4.45-2.83-7.18ZM448.73 65.29c.1.2.22.38.34.57.22-.02.43-.06.65-.08v-.08c-.14-.05-.25 0-.99-.41ZM460.16 94.81c-.02.31-.06.59-.1.89-.03 1.71-.33 3.43-.79 5.07.15-.02.3-.03.45-.05.01-.04.02-.08.03-.11.09-.34.15-.69.2-1.03.17-1.07.25-2.16.33-3.24.05-.69.08-1.39.12-2.08-.27.1-.27.26-.24.57v-.02Z",transform:"translate(-144.023 -51.76)"}),Ki("path",{d:"m328.67 98.12-3.22-6.58c-1.29-2.63-2.53-5.29-3.72-7.97-.25-.85-.52-1.69-.79-2.53-.81-2.57-1.67-5.12-2.55-7.67-1.92-5.53-3.9-11.08-6.32-16.41-.72-1.58-1.46-3.44-2.63-4.79-.03-.17-.16-.29-.34-.36a.282.282 0 0 0-.23-.04c-.06-.01-.12 0-.18.01-.74.06-1.5.38-2.19.61-2.22.77-4.4 1.64-6.63 2.38-.03-.08-.06-.16-.09-.25-.15-.42-.82-.24-.67.19.03.09.07.19.1.28l-.18.06c-.36.11-.28.6 0 .68.18 1.18.63 2.36.98 3.49.03.09.06.17.08.26-.08.23-.17.46-.24.64-.37.98-.79 1.94-1.21 2.9-1.27 2.89-2.62 5.75-3.98 8.6-3.18 6.67-6.44 13.31-9.64 19.97-1.08 2.25-2.2 4.5-3.15 6.81-.13.32.24.5.5.37 1.34 1.33 2.84 2.5 4.4 3.57.65.44 1.31.87 2.01 1.24.4.22.86.48 1.33.5.24.01.35-.19.33-.37.11-.1.21-.21.28-.28.41-.41.81-.84 1.2-1.26.85-.92 1.69-1.87 2.5-2.84 6.31-2.34 12.6-4.31 18.71-5.84 2.14 5.3 3.43 8.43 3.97 9.58.55 1.05 1.15 1.88 1.82 2.52 1.32.56 6.96-.03 9.23-1.96.87-1.28 1.19-2.67.93-4.15-.09-.5-.22-.95-.4-1.33l-.01-.03Zm-20.09-45.61c.43.77.83 1.56 1.21 2.35-.54-.45-1.27-.99-2.07-1.49-.42-.24-.6-.35-.94-.34.43-.15.85-.29 1.29-.41.17-.05.34-.08.51-.11Zm-25.86 45.66c.78-1.85 1.67-3.66 2.54-5.47 1.51-3.16 3.05-6.31 4.58-9.47 1.28-2.63 2.56-5.26 3.83-7.9l-1.1 2.66c-1.99 4.79-4.97 10.9-8.88 18.15-.43.76-.66 1.51-.71 2.24-.05-.05-.1-.09-.15-.14a.259.259 0 0 0-.11-.07Zm6.24 4.71c-.42-.23-.82-.48-1.22-.74 1.05.45 2 .72 2.55.72l-.21.21c-.05.05-.11.1-.16.15-.01.01-.04.03-.05.04 0-.02.03-.02.05-.03a.27.27 0 0 0-.08.07c-.05-.02-.1-.03-.14-.05-.25-.1-.49-.24-.73-.37h-.01Zm15.73-29.43c1.05 3.15 2.1 6.31 3.1 9.48.34 1.06.69 2.13 1.01 3.21-3.5.63-6.95 1.46-10.27 2.5 2.48-6.03 4.54-11.11 6.16-15.19Zm4.79 12.57c-.23-.79-.49-1.58-.73-2.36-.79-2.54-1.63-5.08-2.46-7.61l-1.2-3.6c.02-.04.04-.09.05-.13 1.6 4.45 3.28 9 5.01 13.57l-.67.12v.01Zm5.83-18.27-.15-.54c-.49-1.64-1.03-3.28-1.6-4.9.23.58.47 1.17.7 1.75 1.56 4.03 3.01 8.1 4.39 12.2-.33-.82-.67-1.64-.98-2.46l-2.35-6.05h-.01ZM390.43 79.37c-.13-10.43-.22-17.5-.24-19.97-.24-1.6.21-2.88-.65-3.65-.14-.13-.32-.23-.52-.32h.03c.45 0 .45-.69 0-.7-1.75-.03-3.5-.04-5.25-.14-1.38-.08-2.76-.21-4.15-.31-.07 0-.12.01-.17.04-.21-.07-.47.03-.45.31l.03.45c-.11.14-.19.3-.22.5-.21 1.26-.32 13.67-.36 23.59-.32 5.79-.67 11.57-.97 17.36-.09 1.73-.29 3.54-.21 5.3-.39.02-.38.64.04.69v.12c.05.44.74.45.7 0v-.06c1.1.09 2.2.21 3.3.3 1.14.19 2.44.2 3.29.17 1.73-.05 2.92-.05 3.8-.37.45-.05.9-.11 1.35-.17.44-.06.25-.73-.19-.67h-.01c.24-.32.45-.72.62-1.25.66-1.84.41-6.36.34-11.33l-.13-9.9.02.01Zm-12.26 18.17c.09-1.91.2-3.81.31-5.71.06 5.38 0 6.14-.01 6.51-.05 1.65-.21 2.81.72 3.66-.39-.04-.78-.07-1.17-.1-.06-1.44.09-2.93.16-4.35l-.01-.01ZM588.97 53.85c-2.06-.25-3.17-.51-3.76-.6a.3.3 0 0 1 .04-.08c.22-.39-.39-.75-.6-.35-.56 1.02-.9 2.19-1.26 3.29-.61 1.88-1.17 3.78-1.72 5.68-.63 2.19-1.24 4.39-1.83 6.59-.81 2.03-1.67 4.05-2.61 6.03-1.7-3.64-3.11-6.04-4.03-7.57-2.26-3.74-2.85-5.48-3.57-6.08l.31-.09c.43-.12.25-.8-.19-.67-1.06.3-2.12.6-3.17.95-.93.32-1.85.69-2.76 1.07-.13.05-.19.16-.22.27-.04.02-.08.05-.11.07-.04-.06-.07-.12-.11-.18a.354.354 0 0 0-.48-.12c-.16.09-.22.32-.13.48l.33.54c0 .09.02.18.06.28.51 1.16.78 1.38.72 1.47-2.42 3.44-5.41 7.86-6.2 9.1-1.27 1.97-2.01 3.14-2.45 3.84l-.91-6.56-.43-4.1c-.19-1.85-.37-3.23-.53-4.13-.19-1.1-.3-2.15-.45-3.16-.2-1.36-.29-2.06-.47-2.42h.04c.45.02.45-.68 0-.7-3.43-.16-6.81.94-10.17 1.48-.24-.22-.73-.04-.58.32.24.59.33 1.25.43 1.87.17 1.06.29 2.13.4 3.2.32 3.09.53 6.2.74 9.3.44 6.75.77 13.51 1.17 20.26.11 1.95.13 3.96.46 5.89.05.3.37.31.55.14.74 1.71 2.87 1.27 6.13 1.27 1.34 0 2.39.04 2.99-.11.02.32.48.53.63.18 3.61-8.26 7.41-16.46 12.05-24.2.03-.05.04-.1.05-.15.3.73.64 1.45.94 2.16.97 2.26 1.97 4.52 2.98 6.76 2.26 5.03 4.54 10.07 7.09 14.96.47.9.94 1.79 1.47 2.65.2.32.4.67.66.96-.18.25 0 .68.34.54.91-.38 1.82-.75 2.76-1.07 1.04-.35 2.11-.65 3.17-.95.39-.11.28-.66-.07-.68.62-.4.95-.96.87-1.91-.3-3.34.72-7.47.86-8.52l2.14-11.43c1.75-10.74 3.13-17.51 3.23-20.86.02-.49.08-2.84.13-3.24.17-1.25.48-1-4.96-1.65l.03-.02Zm-46.19 5.67c-.04-.24-.09-.48-.15-.71l.85-.15c-.34.24-.56.53-.7.86Zm1.95 25.12c-.36-6.63-.7-13.26-1.32-19.87 0 .02 0 .04.01.06.29 1.65.44 2.47.56 2.89 1 8.46 1.5 16.14 1.46 22.8-.06.99-.1 2-.11 3.02-.01.29-.03.68-.05 1.12-.01-.26-.03-.53-.04-.78-.19-3.08-.35-6.16-.52-9.23l.01-.01Zm36.4 18.66c-.11-.11-.24-.29-.37-.49.35.21.74.26 1.17.16-.27.11-.53.22-.8.32v.01Zm-.89-33.72c.12-.43.23-.86.35-1.29.71-1.77 1.41-3.55 2.08-5.33-.15.68-.26 1.22-.31 1.55-.5 2.94-2.13 7.59-3.58 13.36-.15-.35-.29-.66-.43-1 .61-2.44 1.25-4.87 1.9-7.3l-.01.01Zm3.56-12.48c.14-.44.28-.89.42-1.34-.13.7-.27 1.41-.42 2.11-.43 1.19-.86 2.38-1.31 3.57.42-1.45.85-2.9 1.31-4.34Zm-5.22 16.05c-.11.44-.23.87-.35 1.31-.12.46-.23.92-.35 1.38-.1-.22-.19-.4-.28-.61.34-.69.66-1.38.97-2.08h.01Zm-11.64 2.62c.06-.1.12-.19.17-.28.05.13.09.26.14.39a.398.398 0 0 0-.31-.11Zm2.3 2.98c-.56-1.3-1.25-2.63-1.65-3.99 0 0 .01-.02.02-.02.06.08 1.52 2.93 1.63 3.08.73 1.13 3.38 7.04 5.67 12.26 1.2 2.73 2.08 5.17 2.83 7.18-.62-1.25-1.23-2.51-1.83-3.78-2.31-4.87-4.53-9.78-6.67-14.73ZM275.92 87.03c-1.06-2.18-1.13-3.45-2.44-2.93-1.52.57-2.94 1.3-4.5 2.1-1.4.72-2.68 1.44-3.92 2.12.01-.25-.24-.5-.51-.34-4.8 2.93-12.41 4.7-17.28 1.31-1.98-1.77-3.32-4.15-3.97-5.78-.29-.95-.49-1.94-.63-2.93-.14-3.34 1.58-6.53 3.9-9.12.8-.79 1.68-1.51 2.66-2.12 3.7-2.3 8.22-3.07 12.51-2.51 2.71.35 5.32 1.24 7.71 2.55.39.22.75-.39.35-.6-.18-.1-.37-.18-.55-.27.56.27 1.03.33 1.51.19l-.48.39c-.15.11-.23.3-.13.48.09.15.33.24.48.13 1.3-.97 2.46-2.09 3.45-3.37.37-.29.64-.6.65-.97v-.02c.08-.33-.03-.7-.21-1.08-.31-.87-.98-2.01-2.19-3.26-2.43-2.52-3.79-3.45-5.68-4.26-1.14-.49-3.12-1.06-4.42-1.23-3.28-.42-10.64-1.21-18.18 4.11-7.74 5.46-11.94 12.3-12.23 20.61-.08 2.06.04 3.98.34 5.71.74 4.18 2.57 8 5.44 11.34 4.26 4.99 9.76 7.52 16.34 7.52 4.85 0 9.69-1.77 14.89-4.62.23-.12.45-.23.68-.35 2.19-1.1 4.37-2.23 6.46-3.5.49-.3 1.03-.61 1.5-.98 1.47-.87 1.11-1.12.49-2.95-.39-1.14-.76-2.7-2.06-5.36l.02-.01Zm-17.38-21.76c3.05-.42 6.31.79 9.36 2.35.51.39.94.68 1.33.87-5.61-2.86-12.72-3.39-18.44-.79 2.05-1.33 4.24-1.95 7.74-2.44l.01.01ZM443.67 72.67c-.4-2.2-1.15-4.33-2.37-6.22-1.49-2.32-3.58-4.19-5.91-5.64-6.17-3.81-13.75-5.11-20.83-6.01-3.23-.41-6.47-.69-9.72-.92l-1.39-.12c-.85-.07-1.52-.1-2.05-.1-1.08-.06-2.17-.12-3.25-.17-.08 0-.14.02-.19.05-.1.05-.18.14-.16.3.27 2.55-.01 5.12-.92 7.52-.15.38.4.56.62.28 1.32.59 2.68 1.05 4.08 1.37 0 2.78-.14 7.58-.33 12.91 0 0 0 .02-.01.03-.61 3.66-.79 7.42-1 11.12-.23 4.01-.43 8.03-.44 12.05 0 .64 0 1.28.03 1.93.02.31 0 .68.15.96.06.11.14.16.24.17-.2.17-.21.54.11.59 3.83.67 7.78.71 11.68.25 2.3-.19 4.87-.65 7.65-1.56 1.85-.54 3.67-1.18 5.43-1.91 7.2-3.02 14.31-8.07 17.35-15.53.76-1.86 1.17-3.8 1.31-5.75.3-1.93.28-3.82-.09-5.58l.01-.02Zm-19.32-15.42c5.74 1.41 11.94 3.68 15.65 8.55.25.32.47.65.69.99-2.3-2.82-5.68-5.69-12.88-8.23-2.16-.76-4.35-1.43-6.64-2.02 1.06.21 2.13.45 3.18.71Zm-25.82-3.04c.13 0 .27.01.4.02-.14.1-.26.23-.37.38 0-.13-.02-.26-.03-.4Zm34.82 22.17c-.75 3.09-3.55 5.66-5.88 7.58-3.35 2.76-7.21 5.03-11.28 6.54-1.33.49-2.71.9-4.12 1.15.06-1.38.08-2.76.07-4.13-.02-3.78-.16-7.56-.41-11.33-.09-1.37-.18-2.74-.37-4.1 0-.06-.03-.11-.06-.15.09-3.25.12-6.16.03-8.12 6.86 1.05 10.56 2.17 14.06 3.62 5.52 2.28 8.59 5.44 7.97 8.96l-.01-.02Zm-22 16.15c-.12 0-.23-.02-.34-.03l.34-.03v.06Zm-.69-.7c0-3.13.26-8.84.47-14.51.06 1.2.11 2.41.15 3.6.15 3.6.25 7.23.09 10.83-.24.03-.48.05-.71.07v.01Zm-12.33-30.94c.37.63 2.01 1.01 3.23 1.25v.15c-1.31-.31-2.59-.73-3.83-1.29.12-.36.23-.72.33-1.09.08.48.18.84.27.98Zm13.7 31.65v-.18c3.41-.56 6.71-2.02 9.69-3.68 2.31-1.28 4.59-2.78 6.63-4.53-4.69 4.53-11.61 8.24-16.33 8.38l.01.01Zm24.07-.75c-2.05 1.93-4.37 3.56-6.83 4.95 2.7-1.78 5.52-4.03 8.42-6.87.82-.82 1.56-1.69 2.23-2.59-1.08 1.65-2.38 3.16-3.81 4.51h-.01ZM187.16 92.14c-.79-2.47-2.1-7.12-3.1-6.87-.19-.01-2.09.77-4.08 1.54-3.06 1.18-5.91 2.13-10.09 2.82-2.74.42-5.87 1.01-10.61 1.06.04-3.34.05-6.01.05-7.99 7.97-.65 12.33-2.11 16.37-3.55 1.11-.39 2.69-1.01 2.63-1.8-.08-.35-.55-1.39-1.17-2.61-.47-1.16-.98-2.31-1.61-3.38-.42-.71-1.04-1.69-1.86-2.06-.11-.08-.22-.13-.29-.12-.02 0-.04 0-.07.01-.19-.04-.39-.05-.6-.01-.17.03-.24.15-.25.28-.04.02-.09.04-.14.05-4.33 1.48-8.85 2.33-13.24 3.61a499.1 499.1 0 0 0-.31-8.19c4.51-.99 8.88-1.38 13.11-1.82 3.68-.38 6.28.12 7.47.34.59.11.9.16 1.16.18h.1c-.1.37.44.66.62.28.02-.04.03-.08.05-.13.15.2.53.22.62-.1.17-.58.19-1.21.21-1.81v-.36c.03-.15.05-.3.07-.45.52-2.47.33-5.09-.64-7.44-.11-.27-.44-.28-.6-.14-.08-.21-.15-.42-.24-.62-.19-.41-.79-.05-.6.35.03.07.05.15.09.22-.98-.42-2.15-.54-3.17-.63-2.17-.19-4.37-.14-6.54 0-5.7.35-11.4 1.3-16.91 2.79-2.08.56-4.13 1.22-6.14 2-4.54 1.05-3.79 1.51-2.17 6.07.18.51.46 1.68.54 1.94.82 2.47 1.08 2.13 3.1 2.13s0 .05 0 .08h.52c-.48 2.66-.51 5.45-.62 8.13-.15 3.48-.22 6.96-.28 10.45 0 .41-.01.82-.02 1.23-.16.29-.33.57-.51.85-.05.38-.09.77-.14 1.18-.42 3.52-.59 6.48-.52 8.8v.34c.02.47.05.76.06.87.16 1.57-.26 3.47 1.35 3.79 1.61.32 3.5.55 4.85.55.11 0 .22-.02.33-.02 1.79.24 3.67.05 5.45-.12 2.85-.28 5.69-.7 8.51-1.19 3.03-.53 6.05-1.14 9.04-1.86 2.4-.58 4.82-1.19 7.13-2.06.51-.19 1.73-.57 2.46-1.14 1.81-.68 2.18-1 1.57-2.67-.23-.62-.48-1.49-.91-2.78l-.03-.02Zm-11.12-38.71c.89.05 1.93.08 2.89.3-.33 0-.68-.02-1.06-.03-8.28-.26-14.88.75-23.97 2.51 2.41-.64 4.85-1.16 7.28-1.59 4.87-.86 9.91-1.45 14.86-1.19Zm-26.53 22.13c.03 1.71.04 3.43 0 5.14-.04 1.27-.11 2.55-.24 3.82 0-.73.02-1.46.04-2.19.05-2.26.12-4.51.22-6.77h-.02Zm6.73 27.85c.2-.1.4-.21.58-.33 1.82-.17 3.82-.24 5.94-.34-.86.11-1.72.24-2.58.33-1.27.14-2.61.31-3.93.34h-.01ZM534.48 85.44c-3.52-8.38-7.07-16.75-10.5-25.17-.63-1.54-1.25-3.09-1.86-4.65-.31-.8-.65-1.6-.87-2.43-.04-.17-.17-.24-.31-.25.1-.2 0-.51-.29-.53-1.59-.08-3.18-.22-4.78-.25-1.96-.03-3.91.13-5.84.42-.31.05-.31.38-.13.56-.03.06-.05.14-.04.22.23 1.54.63 3.06 1.16 4.53.13.35.27.7.41 1.06l-2.68 6.18c-.11.03-.2.09-.25.22-.67 1.9-1.52 3.73-2.34 5.56a536.85 536.85 0 0 1-3.9 8.45c-2.64 5.64-5.34 11.25-7.91 16.93-.44.97-.88 1.94-1.29 2.93-.2.48-.47 1-.55 1.52v.05c-.02.12.02.26.16.34 1.19.73 2.41 1.41 3.66 2.05 1.2.62 2.45 1.25 3.76 1.61.43.12.62-.55.19-.67-1.13-.31-2.2-.83-3.24-1.36 1.09.36 2.1.69 2.75.93 2.82 1.01 2.38 1.1 4.3-3.75 2.1-1.09 4.34-1.96 6.53-2.79 4.35-1.64 8.8-3.03 13.27-4.29.82 2.01 1.77 3.97 2.72 5.92.35.83.62 1.45.79 1.82.22.42.45.8.69 1.15.17.33.33.67.5 1 .42.8.84 1.63 1.4 2.35.23.29.6 0 .55-.31 1.53-.02 3.06-.07 4.58-.27.92-.12 1.82-.32 2.71-.54 1.39-.27 3.85-1.11 3.74-1.42-.67-1.96-1.55-3.87-2.34-5.78-1.57-3.78-3.16-7.56-4.75-11.33v-.01Zm-11.65-26.16c1.54 3.81 3.12 7.6 4.7 11.4 2.94 7.05 5.91 14.09 8.87 21.13l-1.06-2.17c-2.71-5.51-5.2-11.19-7.41-16.87l-6.65-17.15c-.65-1.45-.55-2.19-.93-2.53.09 0 .18.01.28.02a.29.29 0 0 0-.04.26c.52 2.02 1.47 3.98 2.25 5.91h-.01Zm-6.58 13.58c.05-.15.09-.31.14-.46 1.41 3.92 2.88 7.9 4.39 11.87-3.22.52-6.38 1.25-9.46 2.14.55-1.22 1.05-2.46 1.53-3.7 1.24-3.24 2.37-6.53 3.39-9.85h.01Zm-.23-20c.36 0 .73.03 1.09.05-2.15.1-5.18.33-5.87.74-.24.15-.41.3-.53.45-.06-.29-.13-.58-.18-.88 1.82-.26 3.65-.39 5.49-.35v-.01Zm-.09 18.72c-.49 1.67-1.05 3.33-1.6 4.97-1.07 3.19-2.19 6.38-3.57 9.46-.09.21-.19.43-.29.65-.25.07-.5.14-.74.22 2.53-6.16 4.61-11.29 6.2-15.3Zm-6.34 25.16c4.97-2.38 9.37-4.1 14.02-5.27l.26.64c-4.8 1.35-9.63 2.8-14.28 4.63Zm20.17 6.76c.33.23.68.42 1.04.56h-.33c-.12 0-.21.06-.26.13-.15-.23-.31-.45-.45-.7v.01ZM226.57 91.75c-3.55-4.74-6.68-9.11-9.31-12.99 9.2-15.25 10.05-17.81 10.35-18.38.17-.34 1.09-2.27.64-2.53-1.13-.65-1.03-.65-2.97-1.71-1.19-.65-3.04-1.61-4.53-2.12-1.71-.59-1.24-.36-3 2.77-.06.1-.11.2-.17.3-.75 1.02-1.48 2.05-2.2 3.09-1.88 2.71-3.73 5.45-5.69 8.1-3.68-4.91-6.88-8.76-9.51-11.43-.15-.15-.3-.29-.46-.42-1.27-1.28-7.24 3.53-7.93 5.58-.09.09-.19.16-.28.25-.27.26.03.64.33.58.19.65.5 1.29.94 1.91 3.85 5.06 7.19 9.76 9.94 14-1.23 2.61-3.06 5-4.67 7.38l-2.28 3.33c-.5.66-.93 1.23-1.29 1.69-.67.93-2.09 2.61-2.3 3.87-.51.85-1.16 1.84-1.29 2.83-.06.44.61.63.67.19.01-.08.04-.15.06-.22 1.36 1.08 2.76 2.11 4.19 3.11 1.3.91 2.62 1.85 4.04 2.56.21.1.4 0 .48-.17.24.07.48.14.72.2.44.1.62-.57.19-.67-2.02-.48-3.77-1.57-5.23-3.02-.47-.46-.9-.96-1.32-1.46 1.74 1.35 4.2 2.89 5.89 4.14 1.39 1.03 2.85-2.27 4.22-4.2 1.86-2.64 3.96-5.86 5.52-8.29l10.39 14.51c.67.81 1.14 1.21 1.57 1.36-.05.24.12.51.41.4 1.53-.58 3.05-1.19 4.54-1.87 1.52-.69 3.06-1.45 4.36-2.5a.28.28 0 0 0 .12-.23c1.66-1.1.81-1.74-1.41-4.91-1.13-1.58-1.71-2.36-3.7-5.01l-.03-.02Zm2.41 6.54c.56 1.15 1.19 2.52 1.11 3.81-.06.04-.12.07-.17.1-.03-.88-.55-2.66-.94-3.91Zm-16.51-32.73c1.86-2.65 3.65-5.35 5.57-7.95.4-.55.81-1.13 1.26-1.66.19-.18.38-.33.56-.45.18.03.36.08.55.13l-8.05 10.11.12-.18h-.01ZM192.7 95.48c.79-1.37 1.66-2.69 2.54-4 1.19-1.79 2.4-3.56 3.61-5.33-.04.09-.09.17-.13.26-.1.22.03.41.2.49-2.47 3.42-4.89 6.73-6.4 9.28.21.24.4.48.63.75-.24.07-.4.36-.17.56.4.33.72.77 1.05 1.17.09.11.18.21.27.32-.84-.61-1.66-1.24-2.47-1.88.24-.57.58-1.11.87-1.61v-.01Zm7.46-10.32c.47-.81.98-1.59 1.49-2.37.31-.48.64-.95.96-1.43.26-.29.52-.56.75-.79-.99 1.48-2.09 3.03-3.2 4.59Zm10.03-16.22s-.03-.05-.05-.07c.22-.29.43-.59.64-.89-.2.32-.4.65-.58.96h-.01ZM371.54 87.96c-.01-.08-.01-.16-.03-.23-.06-.38-.58-.29-.66.03-.3-.05-.6-.08-.81-.11-1.14-.15-2.29-.19-3.44-.2 1.04-.09 2.09-.18 3.14-.23.45-.02.45-.72 0-.7-6.57.35-13.14 1.23-19.65 2.11-1.53.21-3.05.42-4.57.68-.01 0-.02.01-.04.01-.04-3.33-.13-6.66-.24-9.99-.19-5.7-.4-11.41-.88-17.1-.13-1.51-.23-3.07-.49-4.58 0-.25 0-.48-.02-.68-.06-1.19-.04-2.61-.68-2.78-.16-.07-.72-.16-1.5-.24.22-.17.16-.62-.2-.63-1.19-.04-2.39.09-3.57.23-1.2.14-2.41.32-3.59.6-.16-.1-.41-.06-.5.12-.06.02-.13.03-.19.05-.35.1-.29.55-.03.66-.26.6-.19 2.27-.21 3-.02.66-.66 33.73-.9 40.3-.03.65.06 1.12.04 1.45-.16 3.05.87 4.96 6.34 3.93 1.09-.08 2.75-.77 5.36-1.43 4.13-1.04 5.78-1.52 6.2-1.65 6.43-1.69 6.78-1.97 11.72-2.43.55-.05 4.8-.38 6.03-.3.64.04 1.19.07 1.65.1.09 0 .16-.03.24-.05.1.27.56.33.66-.02.39-1.32.61-2.71.78-4.08.2-1.61.29-3.24.15-4.86.24.03.52-.23.38-.53-.09-.2-.27-.33-.49-.43v-.02Zm-.63.56c.07.57.11 1.14.11 1.71-.21-.99-.53-1.71-.95-1.87.22.03.44.06.65.11.06.01.12.04.19.05Zm-25.41 1.73c1.54-.36 3.1-.64 4.66-.89-1.61.37-3.18.77-4.66 1.2v-.31Zm-.86-7.37c-.07-1.37-.16-2.75-.25-4.12-.21-3.13-.45-6.27-.79-9.4.02-2.25.08-4.31.13-6.11.16 2.08.29 4.16.4 6.24.23 4.46.38 8.93.5 13.39h.01Zm-.94-4c.16 2.41.29 4.83.39 7.24.06 1.6.14 3.22.09 4.83-.15.05-.32.09-.47.14V78.88h-.01ZM483.72 92.83c-3.05-2.28-6.22-4.4-9.38-6.51 8.86-6.49 13.49-12.95 13.73-19.23.04-.76 0-1.5-.13-2.2-.67-3.82-3.5-6.68-8.39-8.48.13.04.27.08.4.13 3.92 1.39 7.74 4.23 8.5 8.56.34 1.95-.05 3.96-.98 5.69-.21.4.39.75.6.35 1.86-3.46 1.46-7.55-.97-10.63-3.53-4.47-9.76-5.88-15.16-6.16-2.32-.12-4.64-.04-6.95.19-6 .32-12.71 1.68-17.63 3.21-.37.11-.67.23-.92.35-.2-.17-.62.02-.57.37v.03c-.64.68-.18 1.64.48 3.21.38.91.67 1.89 1.15 2.58.32.76.68 1.51 1.13 2.19.14.21.38.19.53.07.19-.02.38-.05.57-.08v1.57c-.06.06-.1.13-.11.23-.27 4.18-.34 8.38-.48 12.57l-.3 9.03c-.24 3.91-.44 6.77-.46 7.26-.05.88-.11 1.95.07 2.81-.01.22-.02.43-.04.65 0 .11-.02.23-.03.35 0 .05-.03.27-.01.16-.05.4.5.59.64.28.05.04.12.08.2.08 1.75.13 3.5.28 5.25.3 1.69.02 3.38-.12 5.06-.32.08.23.36.39.55.15.06-.08.11-.17.16-.26.18-.09.24-.32.18-.48.05-.2.1-.4.13-.6.16-.86.25-1.74.33-2.62.11-1.17.17-2.34.23-3.51.15-.01.32-.03.52-.04.36-.03 1.73-.15 2.06-.15.39 0 .7-.02.95-.04 1.76 1.11 3.45 2.35 5.14 3.55 2.83 2.01 5.64 4.04 8.47 6.04 1.42 1 2.85 2 4.29 2.97.1.06.19.07.27.04.08 0 .17-.02.25-.1 1.61-1.56 3.15-3.18 4.6-4.88.75-.88 1.49-1.78 2.15-2.73.01.01.03.02.04.03.34.3.83-.2.49-.49-2.16-1.9-4.34-3.76-6.64-5.48l.03-.01Zm-6.38-3.65a55.72 55.72 0 0 0-4-2.13c.14-.1.26-.19.4-.29 1.2.81 2.4 1.61 3.6 2.42Zm-20.1 11.78c.67-.37 1.23-.91 1.67-1.6-.11.5-.24 1-.38 1.49-.43.04-.86.08-1.29.11Zm2.38-37.24c1.34-.31 2.56-.52 3.71-.69-1.03.19-2.04.41-3.04.65-.14-.07-.34-.02-.45.11-.07.02-.15.04-.22.05v-.13.01Zm.04.84c.07-.02.14-.03.2-.05.34 1.66.41 3.41.5 5.09.17 2.9.24 5.81.28 8.71l.03 3.17c-.17.07-.34.14-.51.2-.06-4.96-.21-10.58-.51-17.12h.01Zm16.04 5.62c-1.16 2.25-3.06 4.1-5.02 5.66-2.8 2.23-5.99 3.97-9.3 5.35-.01-3.56-.09-7.12-.27-10.67-.1-2.04-.16-4.16-.57-6.18 3.3-.78 6.72-1.36 10.1-1.1 1.85.14 4.23.59 5.32 2.29.92 1.43.46 3.24-.26 4.65Zm.85-.18c.6-1.37.9-2.92.28-4.32-.67-1.52-2.2-2.32-3.76-2.74.46.1.89.21 1.29.37 1.74.67 2.69 1.88 2.93 3.21.2 1.13-.05 2.25-.74 3.47V70Zm-27.47-4.14c-.12-.19-.23-.38-.34-.57.74.42.85.36.99.41v.08c-.22.03-.43.06-.65.08Zm11.21 30.46c-.08 1.08-.16 2.17-.33 3.24-.05.35-.11.69-.2 1.03 0 .04-.02.07-.03.11-.15.02-.3.04-.45.05.45-1.64.76-3.36.79-5.07.03-.29.08-.57.1-.89-.03-.31-.03-.47.24-.57-.04.69-.07 1.39-.12 2.08v.02Zm5.6-2.47c.48.11.92.52 2.49 1.72-.46-.32-.92-.65-1.38-.97-.37-.25-.73-.5-1.1-.75h-.01Zm21.23 7.24a70.76 70.76 0 0 1-4.37 4.63c-.14-.09-.27-.19-.4-.28.19-.09.37-.24.55-.47.87-1.14 5.43-5.51 5.49-7.45.31.26.62.53.92.79-.67.97-1.42 1.88-2.19 2.77v.01Z",fill:"currentColor",transform:"translate(-144.023 -51.76)"})]}),rM=({style:e,size:o="small",withText:t})=>nM("div",{className:`ExcalidrawLogo is-${o}`,style:e,children:[Ki(c9,{}),t&&Ki(d9,{})]});import{Fragment as lM,jsx as Rt,jsxs as uE}from"react/jsx-runtime";var hE=({icon:e,shortcut:o,children:t})=>{let r=Me();return uE(lM,{children:[Rt("div",{className:"welcome-screen-menu-item__icon",children:e}),Rt("div",{className:"welcome-screen-menu-item__text",children:t}),o&&r.formFactor!=="phone"&&Rt("div",{className:"welcome-screen-menu-item__shortcut",children:o})]})};hE.displayName="WelcomeScreenMenuItemContent";var Kd=({onSelect:e,children:o,icon:t,shortcut:r,className:n="",...i})=>Rt("button",{...i,type:"button",className:`welcome-screen-menu-item ${n}`,onClick:e,children:Rt(hE,{icon:t,shortcut:r,children:o})});Kd.displayName="WelcomeScreenMenuItem";var iM=({children:e,href:o,icon:t,shortcut:r,className:n="",...i})=>Rt("a",{...i,className:`welcome-screen-menu-item ${n}`,href:o,target:"_blank",rel:"noopener",children:Rt(hE,{icon:t,shortcut:r,children:e})});iM.displayName="WelcomeScreenMenuItemLink";var fr=({children:e})=>{let{WelcomeScreenCenterTunnel:o}=ot();return Rt(o.In,{children:Rt("div",{className:"welcome-screen-center",children:e||uE(lM,{children:[Rt(gE,{}),Rt(fE,{children:h("welcomeScreen.defaults.center_heading")}),uE(bE,{children:[Rt(EE,{}),Rt(xE,{})]})]})})})};fr.displayName="Center";var gE=({children:e})=>Rt("div",{className:"welcome-screen-center__logo excalifont welcome-screen-decor",children:e||Rt(rM,{withText:!0})});gE.displayName="Logo";var fE=({children:e})=>Rt("div",{className:"welcome-screen-center__heading welcome-screen-decor excalifont",children:e});fE.displayName="Heading";var bE=({children:e})=>Rt("div",{className:"welcome-screen-menu",children:e});bE.displayName="Menu";var xE=()=>{let e=je();return Rt(Kd,{onSelect:()=>e.executeAction(Mi),shortcut:"?",icon:fa,children:h("helpDialog.title")})};xE.displayName="MenuItemHelp";var EE=()=>{let e=fe(),o=je();return e.viewModeEnabled?null:Rt(Kd,{onSelect:()=>o.executeAction(Ia),shortcut:tt("loadScene"),icon:ba,children:h("buttons.load")})};EE.displayName="MenuItemLoadScene";var aM=({onSelect:e})=>{let{t:o}=Ue();return Rt(Kd,{shortcut:null,onSelect:e,icon:Nc,children:o("labels.liveCollaboration")})};aM.displayName="MenuItemLiveCollaborationTrigger";fr.Logo=gE;fr.Heading=fE;fr.Menu=bE;fr.MenuItem=Kd;fr.MenuItemLink=iM;fr.MenuItemHelp=xE;fr.MenuItemLoadScene=EE;fr.MenuItemLiveCollaborationTrigger=aM;import{jsx as Fs,jsxs as yE}from"react/jsx-runtime";var hg=({children:e})=>{let{WelcomeScreenMenuHintTunnel:o}=ot();return Fs(o.In,{children:yE("div",{className:"excalifont welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--menu",children:[Rf,Fs("div",{className:"welcome-screen-decor-hint__label",children:e||h("welcomeScreen.defaults.menuHint")})]})})};hg.displayName="MenuHint";var gg=({children:e})=>{let{WelcomeScreenToolbarHintTunnel:o}=ot();return Fs(o.In,{children:yE("div",{className:"excalifont welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--toolbar",children:[Fs("div",{className:"welcome-screen-decor-hint__label",children:e||h("welcomeScreen.defaults.toolbarHint")}),Of]})})};gg.displayName="ToolbarHint";var fg=({children:e})=>{let{WelcomeScreenHelpHintTunnel:o}=ot();return Fs(o.In,{children:yE("div",{className:"excalifont welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--help",children:[Fs("div",{children:e||h("welcomeScreen.defaults.helpHint")}),Nf]})})};fg.displayName="HelpHint";import{Fragment as sM,jsx as Xd,jsxs as p9}from"react/jsx-runtime";var bg=e=>Xd(sM,{children:e.children||p9(sM,{children:[Xd(fr,{}),Xd(hg,{}),Xd(gg,{}),Xd(fg,{})]})});bg.displayName="WelcomeScreen";bg.Center=fr;bg.Hints={MenuHint:hg,ToolbarHint:gg,HelpHint:fg};var m9=bg;var u9=()=>{Array.prototype.at||Object.defineProperty(Array.prototype,"at",{value:function(e){if(e=Math.trunc(e)||0,e<0&&(e+=this.length),!(e<0||e>=this.length))return this[e]},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.findLast||Object.defineProperty(Array.prototype,"findLast",{value:function(e,o){return this.slice().reverse().find((t,r)=>e.call(o,t,this.length-r-1,this))},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e,o){for(let t=0;t<this.length;t++)if(e.call(o,this[t],t,this))return t;return-1},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.findLastIndex||Object.defineProperty(Array.prototype,"findLastIndex",{value:function(e,o){let t=this.slice().reverse().findIndex((r,n)=>e.call(o,r,this.length-n-1,this));return t===-1?-1:this.length-t-1},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.toReversed||Object.defineProperty(Array.prototype,"toReversed",{value:function(){return this.slice().reverse()},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.toSorted||Object.defineProperty(Array.prototype,"toSorted",{value:function(e){return this.slice().sort(e)},writable:!0,enumerable:!1,configurable:!0}),Element.prototype.replaceChildren||(Element.prototype.replaceChildren=function(...e){this.innerHTML="",this.append(...e)})},cM=u9;import h9 from"lodash.throttle";var g9=(e,o,t)=>!!(o&&(o.id===e.editingTextElement?.id||o.id===e.resizingElement?.id||o.id===e.newElement?.id||o.version>t.version||o.version===t.version&&o.versionNonce<=t.versionNonce)),f9=h9((e,o,t)=>{if(Ft()||zr()||window?.DEBUG_FRACTIONAL_INDICES){let r=al(e.map(n=>({...n})));gv(r,{shouldThrow:zr()||Ft(),includeBoundTextValidation:!0,reconciliationContext:{localElements:o,remoteElements:t}})}},1e3*60,{leading:!0,trailing:!1}),b9=(e,o,t)=>{let r=ne(e),n=[],i=new Set;for(let l of o)if(!i.has(l.id)){let s=r.get(l.id),c=g9(t,s,l);s&&c?(n.push(s),i.add(s.id)):(n.push(l),i.add(l.id))}for(let l of e)i.has(l.id)||(n.push(l),i.add(l.id));let a=Nm(n);return f9(a,e,o),al(a),a};import{jsx as vE}from"react/jsx-runtime";var dM=({children:e,icon:o})=>{let{t}=Ue(),{TTDDialogTriggerTunnel:r}=ot(),n=Ie();return vE(r.In,{children:vE(pe.Item,{onSelect:()=>{xe("ai","dialog open","ttd"),n({openDialog:{name:"ttd",tab:"text-to-diagram"}})},icon:o??Jb,badge:vE(pe.Item.Badge,{children:"AI"}),children:e??t("labels.textToDiagram")})})};dM.displayName="TTDDialogTrigger";function x9(e){let o=e.get("X-Ratelimit-Limit"),t=e.get("X-Ratelimit-Remaining");return{rateLimit:o?parseInt(o,10):void 0,rateLimitRemaining:t?parseInt(t,10):void 0}}async function*E9(e){let o=new TextDecoder,t="";try{for(;;){let{done:r,value:n}=await e.read();if(r)break;t+=o.decode(n,{stream:!0});let i=t.split(`
|
|
141
|
-
`);
|
|
108
|
+
`),r)}}addTextFromPaste(o,r=!1){let{x:n,y:i}=ze({clientX:this.viewport.lastPosition.x,clientY:this.viewport.lastPosition.y},this.state),a={x:n,y:i,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.getCurrentItemStrokeWidth("text"),strokeStyle:this.state.currentItemStrokeStyle,roundness:null,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,text:o,fontSize:this.state.currentItemFontSize,fontFamily:this.state.currentItemFontFamily,textAlign:Mm,verticalAlign:bf,locked:!1},s=ut({fontSize:a.fontSize,fontFamily:a.fontFamily}),l=wo(a.fontFamily),[c,,d]=Xf(this.state),p=Math.max(Math.min((d-c)*.5,800),200),m=10,u=i,b=r?[o]:o.split(`
|
|
109
|
+
`),f=b.reduce((x,v,y)=>{let E=Tc(v).trim();if(E.length){let w=this.getTopLayerFrameAtSceneCoords({x:n,y:u}),C=dt(E,s,l),I=C.width>p,A=I?Pn(E,s,p):E;C=I?dt(A,s,l):C;let M=n-C.width/2,N=u-C.height/2,P=ao({...a,x:M,y:N,text:A,originalText:E,lineHeight:l,autoResize:!I,frameId:w?w.id:null});x.push(P),u+=P.height+m}else b[y-1]?.trim()&&(u+=Cc(a.fontSize,l)+m);return x},[]);f.length!==0&&(this.insertNewElements(f),this.store.scheduleCapture(),this.setState({selectedElementIds:Ue(Object.fromEntries(f.map(x=>[x.id,!0])),this.state)}),!r&&f.length>1&&p6===!1&&this.editorInterface.formFactor!=="phone"&&(this.setToast({message:h("toast.pasteAsSingleElement",{shortcut:z("CtrlOrCmd+Shift+V")}),duration:5e3}),p6=!0))}handleTextWysiwyg(o,{isExistingElement:r=!1,initialCaretSceneCoords:n=null}){let i=this.scene.getElementsMapIncludingDeleted(),a=(s,l)=>{let c=this.scene.getElement(o.id);if(!c||!J(c))return;let d=Nr(c,i),p=d&&et(d)?d:null,m=p?Zv(p,c,{originalText:s}):null;if(this.scene.replaceAllElements([...this.scene.getElementsIncludingDeleted().map(u=>m&&u.id===p?.id&&et(u)?se(u,m.container):u.id===c.id&&J(u)?se(u,{originalText:s,isDeleted:l??u.isDeleted,...m?.text??Hw(u,Nr(u,i),i,s)}):u)]),p){let u=this.scene.getNonDeletedElement(p.id);u&&io(u,this.scene)}};this.textWysiwygSubmitHandler=Tk({canvas:this.canvas,getViewportCoords:(s,l)=>{let{x:c,y:d}=Gt({sceneX:s,sceneY:l},this.state);return[c-this.state.offsetLeft,d-this.state.offsetTop]},onChange:wt(s=>{a(s,!1),Fo(o)&&io(o,this.scene)}),onSubmit:wt(({viaKeyboard:s,nextOriginalText:l})=>{this.textWysiwygSubmitHandler=null;let c=!l.trim();a(l,c);let d=s&&!this.isToolLocked()&&this.state.activeTool.type!=="autoshape"?o.containerId||(c?null:o.id):null;d&&Xo(()=>{this.setState(p=>({selectedElementIds:Ue({...p.selectedElementIds,[d]:!0},p)}))}),c&&lp(this.scene.getNonDeletedElements(),[o]),(!c||r)&&this.store.scheduleCapture(),Xo(()=>{this.setState({newElement:null,editingTextElement:null})}),(this.isToolLocked()||this.state.activeTool.type==="autoshape")&&this.cursor.applyForTool(),this.focusContainer()}),element:o,excalidrawContainer:this.excalidrawContainerRef.current,app:this,initialCaretSceneCoords:n,autoSelect:!this.editorInterface.isTouchScreen}),this.deselectElements(),a(o.originalText,!1)}deselectElements(){this.setState({selectedElementIds:Ue({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})}getSelectedTextElement(o){let r=this.scene.getSelectedElements(this.state);if(r.length!==1)return null;let n=r[0];return J(n)?n:o?we(n,this.scene.getNonDeletedElementsMap()):null}getSelectedTextEditingContainerAtPosition(o,r){let n=this.scene.getSelectedElements(this.state);if(n.length!==1||!o||o.id!==n[0].id)return null;let i=n[0];if(J(i))return null;if(!Of(i))return;let a=this.getSelectedTextElement(i),s=this.getTextElementAtPosition(r.x,r.y);if(!(!a||s?.id!==a.id))return i}getTextElementAtPosition(o,r){let n=this.getElementAtPosition(o,r,{includeBoundTextElement:!0});return n&&J(n)&&!n.isDeleted?n:null}getElementAtPosition(o,r,n){let i=[];if(n&&"allHitElements"in n?i=n?.allHitElements||[]:i=this.getElementsAtPosition(o,r,{includeBoundTextElement:n?.includeBoundTextElement,includeLockedElements:n?.includeLockedElements}),i.length>1){if(n?.preferSelected){for(let s=i.length-1;s>-1;s--)if(this.state.selectedElementIds[i[s].id])return i[s]}let a=i[i.length-1];return La({point:_(o,r),element:a,threshold:this.getElementHitThreshold(a)/2,elementsMap:this.scene.getNonDeletedElementsMap(),frameNameBound:ae(a)?this.frameNameBoundsCache.get(a):null})?a:i[i.length-2]}return i.length===1?i[0]:null}getElementsAtPosition(o,r,n){let i=[],a=this.scene.getNonDeletedElementsMap();return(n?.includeBoundTextElement&&n?.includeLockedElements?this.scene.getNonDeletedElements():this.scene.getNonDeletedElements().filter(l=>(n?.includeLockedElements||!l.locked)&&(n?.includeBoundTextElement||!(J(l)&&l.containerId)))).filter(l=>this.hitElement(o,r,l)).filter(l=>{let c=Nn(l,a);return c&&!Fo(c)&&console.error("[NONDELETED][INVARIANT] Containing frame is deleted"),c&&this.state.frameRendering.enabled&&this.state.frameRendering.clip&&!Ts(l)?Vf({x:o,y:r},c,a):!0}).filter(l=>Ts(l)?(i.push(l),!1):!0).concat(i)}getElementHitThreshold(o){return Math.max(o.strokeWidth/2+.1,.85*(xf/this.state.zoom.value))}hitElement(o,r,n,i=!0){return i&&this.state.selectedElementIds[n.id]&&Ap([n],this.state,this.editorInterface)&&ap(_(o,r),n,this.scene.getNonDeletedElementsMap(),this.getElementHitThreshold(n))||sp(_(o,r),n,this.scene.getNonDeletedElementsMap())?!0:La({point:_(o,r),element:n,threshold:this.getElementHitThreshold(n),elementsMap:this.scene.getNonDeletedElementsMap(),frameNameBound:ae(n)?this.frameNameBoundsCache.get(n):null})}getTextBindableContainerAtPosition(o,r){let n=this.scene.getNonDeletedElements(),i=this.scene.getSelectedElements(this.state);if(i.length===1)return Ln(i[0],!1)?i[0]:null;let a=null;for(let s=n.length-1;s>=0;--s){if(n[s].isDeleted)continue;let[l,c,d,p]=qt(n[s],this.scene.getNonDeletedElementsMap());if(Ee(n[s])&&La({point:_(o,r),element:n[s],elementsMap:this.scene.getNonDeletedElementsMap(),threshold:this.getElementHitThreshold(n[s])})){a=n[s];break}else if(l<o&&o<d&&c<r&&r<p){if(ae(n[s]))continue;a=n[s];break}}return Ln(a,!1)?a:null}isEditingTextContent(){return!!this.state.editingTextElement||J(this.state.newElement)}handleHoverSelectedLinearElement(o,r,n){let i=this.scene.getNonDeletedElementsMap(),a=j.getElement(o.elementId,i);if(a)if(this.state.selectedLinearElement){let s=j.getPointIndexUnderCursor(a,i,this.state.zoom,r,n),l=j.isPointHandle(a,s),c=l?null:j.getSegmentMidpointHitCoords(o,{x:r,y:n},this.state,i);l||c?this.cursor.set(Be.POINTER):this.arrowText.isBoundTextGrabbable(a,r,n)?this.cursor.set(Be.GRAB):this.hitElement(r,n,a)&&(!He(a)||!(a.startBinding||a.endBinding))&&(this.state.activeTool.type!=="lasso"||Object.keys(this.state.selectedElementIds).length>0)&&this.cursor.set(Be.MOVE),this.state.selectedLinearElement.hoverPointIndex!==s&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,hoverPointIndex:s}}),j.arePointsEqual(this.state.selectedLinearElement.segmentMidPointHoveredCoords,c)||this.setState({selectedLinearElement:{...this.state.selectedLinearElement,segmentMidPointHoveredCoords:c}});let d=null,p=a;(p.startBinding||p.endBinding)&&(d=f2(a,r,n,this.scene,this.state)),this.state.selectedLinearElement.hoveredFocusPointBinding!==d&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,isDragging:!1,hoveredFocusPointBinding:d}}),d&&this.cursor.set(Be.POINTER)}else this.cursor.set(Be.AUTO)}updateGestureOnPointerDown(o){De.pointers.set(o.pointerId,{x:o.clientX,y:o.clientY}),De.pointers.size===2&&(De.lastCenter=k0(De.pointers),De.initialScale=this.state.zoom.value,De.initialDistance=M0(Array.from(De.pointers.values())))}initialPointerDownState(o){let r=ze(o,this.state),n=this.scene.getSelectedElements(this.state),[i,a,s,l]=Te(n),c=n.findIndex(He)===0;return{origin:r,withCmdOrCtrl:o[S.CTRL_OR_CMD],originInGrid:Um(Ot(r.x,r.y,o[S.CTRL_OR_CMD]||c?null:this.getEffectiveGridSize())),scrollbars:N0(fm,o.clientX-this.state.offsetLeft,o.clientY-this.state.offsetTop),lastCoords:{...r},originalElements:this.scene.getNonDeletedElements().reduce((d,p)=>(d.set(p.id,mr(p)),d),new Map),resize:{handleType:!1,isResizing:!1,offset:{x:0,y:0},arrowDirection:"origin",center:{x:(s+i)/2,y:(l+a)/2}},hit:{element:null,allHitElements:[],wasAddedToSelection:!1,hasBeenDuplicated:!1,arrowLabel:!1,hasHitCommonBoundingBoxOfSelectedElements:this.isHittingCommonBoundingBoxOfSelectedElements(r,n)},drag:{hasOccurred:!1,offset:null,origin:{...r},blockDragging:!1},eventListeners:{onMove:null,onUp:null,onKeyUp:null,onKeyDown:null},boxSelection:{hasOccurred:!1}}}handleDraggingScrollBar(o,r){if(!(r.scrollbars.isOverEither&&!this.state.multiElement))return!1;jg=!0,r.lastCoords.x=o.clientX,r.lastCoords.y=o.clientY;let n=Xh(a=>{a.target instanceof this.ownerWindow.HTMLElement&&this.handlePointerMoveOverScrollbars(a,r)}),i=wt(()=>{ac=null,jg=!1,this.cursor.applyForTool(),this.setState({cursorButton:"up"}),this.savePointer(o.clientX,o.clientY,"up"),this.ownerWindow.removeEventListener("pointermove",n),this.ownerWindow.removeEventListener("pointerup",i),n.flush()});return ac=i,this.ownerWindow.addEventListener("pointermove",n),this.ownerWindow.addEventListener("pointerup",i),!0}isASelectedElement(o){return o!=null&&this.state.selectedElementIds[o.id]}isHittingCommonBoundingBoxOfSelectedElements(o,r){if(r.length<2)return!1;let n=Math.max(xf/this.state.zoom.value,1),i=fa*2/this.state.zoom.value,[a,s,l,c]=Te(r);return o.x>a-i-n&&o.x<l+i+n&&o.y>s-i-n&&o.y<c+i+n}getCurrentItemRoundness(o){return this.state.currentItemRoundness==="round"?{type:Ci(o)?Pt.ADAPTIVE_RADIUS:Pt.PROPORTIONAL_RADIUS}:null}getCurrentItemStrokeWidth(o){return Zr(o,this.state.currentItemStrokeWidthKey)}maybeCacheReferenceSnapPoints(o,r,n=!1){ri({event:o,app:this,selectedElements:r})&&(n||!yr.getReferenceSnapPoints())&&yr.setReferenceSnapPoints(fk(this.scene.getNonDeletedElements(),r,this.state,this.scene.getNonDeletedElementsMap()))}maybeCacheVisibleGaps(o,r,n=!1){ri({event:o,app:this,selectedElements:r})&&(n||!yr.getVisibleGaps())&&yr.setVisibleGaps(gk(this.scene.getNonDeletedElements(),r,this.state,this.scene.getNonDeletedElementsMap()))}onKeyDownFromPointerDownHandler(o){return wt(r=>{this.maybeHandleResize(o,r)||this.maybeDragNewGenericElement(o,r)})}onKeyUpFromPointerDownHandler(o){return wt(r=>{r.key===S.ALT&&r.preventDefault(),!this.maybeHandleResize(o,r)&&this.maybeDragNewGenericElement(o,r)})}onPointerMoveFromPointerDownHandler(o){return Xh(r=>{if(this.state.openDialog?.name==="elementLinkSelector")return;let n=ze(r,this.state);if(this.state.activeLockedId&&this.setState({activeLockedId:null}),this.state.selectedLinearElement&&this.state.selectedLinearElement.elbowed&&this.state.selectedLinearElement.initialState.segmentMidpoint.index){let[m,u]=Ot(n.x,n.y,r[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),b=this.state.selectedLinearElement.initialState.segmentMidpoint.index;if(b<0){let x=j.getSegmentMidpointHitCoords({...this.state.selectedLinearElement,segmentMidPointHoveredCoords:null},{x:m,y:u},this.state,this.scene.getNonDeletedElementsMap());b=x?j.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,x,this.scene.getNonDeletedElementsMap()):-1}let f=j.moveFixedSegment(this.state.selectedLinearElement,b,m,u,this.scene);this.setState({selectedLinearElement:{...this.state.selectedLinearElement,isDragging:!0,segmentMidPointHoveredCoords:f.segmentMidPointHoveredCoords,initialState:f.initialState}});return}let i=this.previousPointerMoveCoords??o.origin;if(this.previousPointerMoveCoords=n,o.drag.offset===null&&(o.drag.offset=Um(t2(this.scene.getSelectedElements(this.state),o.origin.x,o.origin.y))),!(r.target instanceof this.ownerWindow.HTMLElement)||this.handlePointerMoveOverScrollbars(r,o))return;if(pr(this.state)){this.handleEraser(r,n);return}if(this.state.activeTool.type==="laser"&&this.laserTrails.addPointToPath(n.x,n.y),this.drawShape.handlePointerMove(n))return;let[s,l]=Ot(n.x,n.y,r[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize());if(o.resize.isResizing&&(o.lastCoords.x=n.x,o.lastCoords.y=n.y,this.maybeHandleCrop(o,r)||this.maybeHandleResize(o,r)))return!0;let c=this.scene.getNonDeletedElementsMap();if(this.state.selectedLinearElement){let m=this.state.selectedLinearElement;if(m.draggedFocusPointBinding){u2(m,c,n,this.scene,this.state,this.getEffectiveGridSize(),r.altKey),this.setState({selectedLinearElement:{...m,isDragging:!1,selectedPointsIndices:[],initialState:{...m.initialState,lastClickedPoint:-1}}});return}if(this.arrowText.maybeDragLabel(m,o,n))return;if(j.shouldAddMidpoint(this.state.selectedLinearElement,n,this.state,c)){let u=j.addMidpoint(this.state.selectedLinearElement,n,this,!r[S.CTRL_OR_CMD],this.scene);if(!u)return;Xo(()=>{this.state.selectedLinearElement&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,initialState:u.pointerDownState,selectedPointsIndices:u.selectedPointsIndices,segmentMidPointHoveredCoords:null,isDragging:!0}})});return}else{if(m.initialState.segmentMidpoint.value!==null&&!m.initialState.segmentMidpoint.added)return;if(m.initialState.lastClickedPoint>-1){let u=j.getElement(m.elementId,c);if(u?.isDeleted)return;if(Vt(u)){let f=lr(_(n.x,n.y),this.scene.getNonDeletedElements(),c);ar("COMPLEX_BINDINGS")&&this.handleDelayedBindModeChange(u,f)}if(r.altKey&&!this.state.selectedLinearElement?.initialState?.arrowStartIsInside&&ar("COMPLEX_BINDINGS")&&this.handleSkipBindMode(),m.initialState.lastClickedPoint===-1)return;let b=j.handlePointDragging(r,this,n.x,n.y,m);if(b){o.lastCoords.x=n.x,o.lastCoords.y=n.y,o.drag.hasOccurred=!0,(b.suggestedBinding!==this.state.suggestedBinding||!Dt(b.selectedLinearElement?.selectedPointsIndices??[],this.state.selectedLinearElement?.selectedPointsIndices??[])||b.selectedLinearElement?.hoverPointIndex!==this.state.selectedLinearElement?.hoverPointIndex||b.selectedLinearElement?.customLineAngle!==this.state.selectedLinearElement?.customLineAngle||this.state.selectedLinearElement.isDragging!==b.selectedLinearElement?.isDragging||this.state.selectedLinearElement?.initialState?.altFocusPoint!==b.selectedLinearElement?.initialState?.altFocusPoint)&&this.setState(b);return}}}}let d=o.hit.allHitElements.some(m=>this.isASelectedElement(m)),p=this.state.selectedLinearElement?.isEditing&&r.shiftKey&&this.state.selectedLinearElement.elementId===o.hit.element?.id;if((d||o.hit.hasHitCommonBoundingBoxOfSelectedElements)&&!p&&!o.drag.blockDragging){let m=this.scene.getSelectedElements(this.state);if(m.length>0&&m.every(f=>f.locked))return;let b=m.some(f=>ae(f))?null:this.getTopLayerFrameAtSceneCoords(n,{currentFrameId:Bc(m),excludeElementIds:this.state.selectedElementIds});if(this.updateFrameToHighlight(b),o.drag.hasOccurred=!0,this.state.activeTool.type==="lasso"&&this.lassoTrail.hasCurrentTrail&&!(this.editorInterface.formFactor!=="desktop"&&o.hit.element)&&!this.state.activeTool.fromSelection)return;if(this.state.activeTool.type==="lasso"&&m.length>0&&o.drag.hasOccurred&&!this.state.activeTool.fromSelection&&this.lassoTrail.endPath(),m.length>0&&!o.withCmdOrCtrl&&!this.state.editingTextElement&&this.state.activeEmbeddable?.state!=="active"){let f={x:n.x-o.drag.origin.x,y:n.y-o.drag.origin.y},x=[...o.originalElements.values()],v=r.shiftKey;if(v){let w=Math.abs(f.x),C=Math.abs(f.y),I=v&&w<C,A=v&&w>C;I&&(f.x=0),A&&(f.y=0)}if(this.state.croppingElementId){let w=this.scene.getNonDeletedElementsMap().get(this.state.croppingElementId);if(w&&nt(w)&&w.crop!==null&&o.hit.element===w){let C=w.crop,I=Ti(w)&&this.imageCache.get(w.fileId)?.image;if(I&&!(I instanceof Promise)){let A=An(w),M=cf(n.x-i.x,n.y-i.y);M[0]*=I.naturalWidth/A.width,M[1]*=I.naturalHeight/A.height;let[N,P,L,R,H,K]=qt(w,c),F=Cm(Ae(_(N,P),_(H,K),w.angle)),U=Cm(Ae(_(L,P),_(H,K),w.angle)),V=Cm(Ae(_(N,R),_(H,K),w.angle)),$=pf(mf(U,F)),oe=pf(mf(V,F)),re=cf(df(M,$),df(M,oe)),ke={...C,x:Je(C.x-re[0]*Math.sign(w.scale[0]),0,I.naturalWidth-C.width),y:Je(C.y-re[1]*Math.sign(w.scale[1]),0,I.naturalHeight-C.height)};this.scene.mutateElement(w,{crop:ke});return}}}this.maybeCacheVisibleGaps(r,m),this.maybeCacheReferenceSnapPoints(r,m);let{snapOffset:y,snapLines:E}=bk(x,f,this,r,this.scene.getNonDeletedElementsMap());if(this.setState({snapLines:E}),this.state.editingFrame||e2(o,m,f,this.scene,y,r[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),this.setState({selectedElementsAreBeingDragged:!0,selectionElement:null}),r.altKey&&!o.hit.hasBeenDuplicated){o.hit.hasBeenDuplicated=!0;let w=this.scene.getElementsIncludingDeleted(),C=o.hit.element,I=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});C&&o.hit.wasAddedToSelection&&!I.find(F=>F.id===C.id)&&I.push(C);let A=new Map(I.map(F=>[F.id,F])),{duplicatedElements:M,duplicateElementsMap:N,elementsWithDuplicates:P,origIdToDuplicateId:L}=Bn({type:"in-place",elements:w,appState:this.state,randomizeSeed:!0,idsOfElementsToDuplicate:A,overrides:({duplicateElement:F,origElement:U})=>({frameId:F.frameId??U.frameId,seed:Mn()})});M.forEach(F=>{o.originalElements.set(F.id,mr(F))});let R=P.map(F=>{if(A.has(F.id)){let U=o.originalElements.get(F.id);if(U)return se(F,{x:U.x,y:U.y})}return F}),H=this.props.onDuplicate?.(R,w),K=Jr(H||R,te(M));Xo(()=>{if(o.hit.element){let F=L.get(o.hit.element.id),U=F&&N.get(F);o.hit.element=U||null}o.hit.allHitElements=o.hit.allHitElements.reduce((F,U)=>{let V=L.get(U.id),$=V&&N.get(V);return $&&F.push($),F},[]),o.drag.origin=ze(r,this.state),this.setState(F=>({...Nc(M,this.scene.getNonDeletedElements(),F)})),this.scene.replaceAllElements(K),I.forEach(F=>{Sa(F)&&F.boundElements?.some(U=>U.type==="arrow")&&io(F,this.scene)}),this.maybeCacheVisibleGaps(r,I,!0),this.maybeCacheReferenceSnapPoints(r,I,!0)})}return}}if(this.state.selectionElement){if(o.lastCoords.x=n.x,o.lastCoords.y=n.y,r.altKey){this.setActiveTool({type:"lasso",fromSelection:!0},{keepSelection:r.shiftKey}),this.lassoTrail.startPath(o.origin.x,o.origin.y,r.shiftKey),this.setAppState({selectionElement:null});return}this.maybeDragNewGenericElement(o,r)}else if(this.state.activeTool.type==="lasso")!r.altKey&&this.state.activeTool.fromSelection?(this.setActiveTool({type:"selection"}),this.createGenericElementOnPointerDown("selection",o),o.lastCoords.x=n.x,o.lastCoords.y=n.y,this.maybeDragNewGenericElement(o,r),this.lassoTrail.endPath()):this.lassoTrail.addPointToPath(n.x,n.y,r.shiftKey);else{let m=this.state.newElement;if(!m)return;if(m.type==="freedraw"){let u=m.points,b=n.x-m.x,f=n.y-m.y,x=u.length>0&&u[u.length-1];if(!(x&&x[0]===b&&x[1]===f)){let y=m.simulatePressure?m.pressures:[...m.pressures,r.pressure];this.scene.mutateElement(m,{points:[...u,_(b,f)],pressures:y},{informMutation:!1,isDragging:!1}),this.setState({newElement:m})}}else if(Me(m)&&!m.isDeleted){o.drag.hasOccurred=!0;let u=m.points;lt(u.length>1,"Do not create linear elements with less than 2 points");let b=this.state.selectedLinearElement;(!b||b.elementId!==m.id)&&(b=new j(m,this.scene.getNonDeletedElementsMap())),b&&(b.initialState.lastClickedPoint<0||b.initialState.lastClickedPoint>=u.length)&&(console.warn("Last clicked point is out of bounds. Attempting to fix it."),b={...b,selectedPointsIndices:[u.length-1],initialState:{...b.initialState,prevSelectedPointsIndices:null,lastClickedPoint:u.length-1},hoverPointIndex:u.length-1}),this.setState({newElement:m,...j.handlePointDragging(r,this,s,l,b)})}else o.lastCoords.x=n.x,o.lastCoords.y=n.y,this.maybeDragNewGenericElement(o,r,!1)}if(this.state.activeTool.type==="selection"){o.boxSelection.hasOccurred=!0;let m=this.scene.getNonDeletedElements();if(this.state.selectedLinearElement?.isEditing)j.handleBoxSelection(r,this.state,this.setState.bind(this),this.scene.getNonDeletedElementsMap());else{let u=!0;!r.shiftKey&&$e(m,this.state)&&(o.withCmdOrCtrl&&o.hit.element?this.setState(f=>Lt({...f,selectedElementIds:{[o.hit.element.id]:!0}},this.scene.getNonDeletedElements(),f,this)):u=!1);let b=this.state.selectionElement?xw(m,this.state.selectionElement,this.scene.getNonDeletedElementsMap(),!1,this.state.boxSelectionMode):[];this.setState(f=>{let x={...u&&f.selectedElementIds,...b.reduce((v,y)=>(v[y.id]=!0,v),{})};return o.hit.element&&(b.length?delete x[o.hit.element.id]:x[o.hit.element.id]=!0),f=u?f:{...f,selectedGroupIds:{},editingGroupId:null},{...Lt({editingGroupId:f.editingGroupId,selectedElementIds:x},this.scene.getNonDeletedElements(),f,this),selectedLinearElement:b.length===1&&Me(b[0])?new j(b[0],this.scene.getNonDeletedElementsMap()):null,showHyperlinkPopup:b.length===1&&(b[0].link||fo(b[0]))?"info":!1}})}}})}handlePointerMoveOverScrollbars(o,r){if(r.scrollbars.isOverHorizontal){let n=o.clientX,i=n-r.lastCoords.x;return this.viewport.translate({scrollX:this.state.scrollX-i*(fm.horizontal?.deltaMultiplier||1)/this.state.zoom.value}),r.lastCoords.x=n,!0}if(r.scrollbars.isOverVertical){let n=o.clientY,i=n-r.lastCoords.y;return this.viewport.translate({scrollY:this.state.scrollY-i*(fm.vertical?.deltaMultiplier||1)/this.state.zoom.value}),r.lastCoords.y=n,!0}return!1}onPointerUpFromPointerDownHandler(o){return wt(r=>{let n=this.scene.getNonDeletedElementsMap();this.removePointer(r),o.drag.blockDragging=!1,o.eventListeners.onMove&&o.eventListeners.onMove.flush(),r.type==="pointerup"&&this.state.activeTool.type===xt.bucketfill?this.bucketFill.handlePointerUp():this.bucketFill.cancel();let{newElement:i,resizingElement:a,croppingElementId:s,multiElement:l,activeTool:c,isResizing:d,isRotating:p,isCropping:m}=this.state;this.activeResizeHandle=null,this.setState(E=>({isResizing:!1,isRotating:!1,isCropping:!1,resizingElement:null,selectionElement:null,frameToHighlight:null,elementsToHighlight:null,cursorButton:"up",snapLines:ws(E.snapLines,[]),originSnapOffset:null})),this.lassoTrail.endPath(),this.previousPointerMoveCoords=null,yr.setReferenceSnapPoints(null),yr.setVisibleGaps(null),this.savePointer(r.clientX,r.clientY,"up");let u=o.hit.allHitElements,b=ze({clientX:r.clientX,clientY:r.clientY},this.state);if(this.state.activeTool.type==="selection"&&!o.boxSelection.hasOccurred&&!o.resize.isResizing&&!u.some(E=>this.state.selectedElementIds[E.id])){let E=this.getElementAtPosition(b.x,b.y,{includeLockedElements:!0});this.isEditingTextContent()||this.store.scheduleCapture(),E?.locked?this.setState({activeLockedId:E.groupIds.length>0?E.groupIds.at(-1)||"":E.id}):this.setState({activeLockedId:null})}else this.setState({activeLockedId:null});if(ar("COMPLEX_BINDINGS")&&this.resetDelayedBindMode(),this.setState({selectedElementsAreBeingDragged:!1,bindMode:"orbit"}),o.drag.hasOccurred&&o.hit?.element?.id){let E=n.get(o.hit.element.id);Sa(E)&&E.boundElements?.filter(w=>w.type==="arrow").map(w=>n.get(w.id)).filter(w=>He(w)).forEach(w=>{w&&this.scene.mutateElement(w,{})})}if(this.state.selectedLinearElement?.isEditing&&!this.state.newElement&&this.state.selectedLinearElement.draggedFocusPointBinding===null)if(!o.boxSelection.hasOccurred&&o.hit?.element?.id!==this.state.selectedLinearElement.elementId&&this.state.selectedLinearElement.draggedFocusPointBinding===null)this.actionManager.executeAction(Xt);else{let E=j.handlePointerUp(r,this.state.selectedLinearElement,this.state,this.scene);this.actionManager.executeAction(Xt,"ui",{event:r,sceneCoords:b,hitBoundText:o.hit.arrowLabel}),E!==this.state.selectedLinearElement&&this.setState({selectedLinearElement:E,suggestedBinding:null})}else if(this.state.selectedLinearElement){if(this.state.selectedLinearElement.elbowed){let E=j.getElement(this.state.selectedLinearElement.elementId,this.scene.getNonDeletedElementsMap());E&&this.scene.mutateElement(E,{})}if(this.state.selectedLinearElement.draggedFocusPointBinding?(g2(this.state.selectedLinearElement,this.scene),this.setState({selectedLinearElement:{...this.state.selectedLinearElement,draggedFocusPointBinding:null,initialState:{...this.state.selectedLinearElement.initialState,arrowOtherEndpointInitialBinding:null}}})):o.hit?.element?.id!==this.state.selectedLinearElement.elementId?this.scene.getSelectedElements(this.state).length>1&&this.setState({selectedLinearElement:null}):this.state.selectedLinearElement.isDragging&&(this.setState({selectedLinearElement:{...this.state.selectedLinearElement,isDragging:!1}}),this.actionManager.executeAction(Xt,"ui",{event:r,sceneCoords:b,hitBoundText:o.hit.arrowLabel})),this.state.newElement&&this.state.multiElement&&Me(this.state.newElement)&&this.state.selectedLinearElement){let{multiElement:E}=this.state;this.setState({selectedLinearElement:{...this.state.selectedLinearElement,lastCommittedPoint:E.points[E.points.length-1]}})}}if(this.missingPointerEventCleanupEmitter.clear(),this.ownerWindow.removeEventListener("pointermove",o.eventListeners.onMove),this.ownerWindow.removeEventListener("pointerup",o.eventListeners.onUp),this.ownerWindow.removeEventListener("keydown",o.eventListeners.onKeyDown),this.ownerWindow.removeEventListener("keyup",o.eventListeners.onKeyUp),this.props?.onPointerUp?.(c,o),this.onPointerUpEmitter.trigger(this.state.activeTool,o,r),i?.type==="freedraw"){let E=ze(r,this.state),w=i.points,C=E.x-i.x,I=E.y-i.y;C===w[0][0]&&I===w[0][1]&&(I+=1e-4,C+=1e-4);let A=i.simulatePressure?[]:[...i.pressures,r.pressure];this.scene.mutateElement(i,{points:[...w,_(C,I)],pressures:A}),this.actionManager.executeAction(Xt);return}if(Me(i)&&this.state.activeTool.type!=="autoshape"){let E=ze(r,this.state),w=Po(_(E.x,E.y),_(o.origin.x,o.origin.y))*this.state.zoom.value;if((!o.drag.hasOccurred||w<vy)&&i&&!l)if(this.editorInterface.isTouchScreen){let C=Math.min(this.state.width*.7/this.state.zoom.value,100);this.scene.mutateElement(i,{x:i.x-C/2,points:[_(0,0),_(C,0)]},{informMutation:!1,isDragging:!1}),this.actionManager.executeAction(Xt)}else this.setState({multiElement:i,newElement:i});else o.drag.hasOccurred&&!l&&(this.store.scheduleCapture(),Me(i)&&this.actionManager.executeAction(Xt,"ui",{event:r,sceneCoords:b}),this.setState({suggestedBinding:null}),this.isToolLocked()?this.setState({newElement:null}):this.setState(C=>({newElement:null,activeTool:ht(this.state,{type:this.state.preferredSelectionTool.type}),selectedElementIds:Ue({...C.selectedElementIds,[i.id]:!0},C),selectedLinearElement:new j(i,this.scene.getNonDeletedElementsMap())}),()=>this.cursor.reset()),this.scene.triggerUpdate());return}if(J(i)){let E=Nv(ut({fontSize:i.fontSize,fontFamily:i.fontFamily}),i.lineHeight);i.width<E&&this.scene.mutateElement(i,{autoResize:!0}),this.cursor.reset(),this.handleTextWysiwyg(i,{isExistingElement:!0})}if(i&&et(i)){let E=this.state.zoom.value,w=i.width*E<tr&&i.height*E<tr,C;if(w){let I=km,[A,M]=Ot(o.origin.x-I/2,o.origin.y-I/2,r[S.CTRL_OR_CMD]?null:this.getEffectiveGridSize());C={x:A,y:M,width:I,height:I}}else{let I=$v({fontSize:this.state.currentItemFontSize,fontFamily:this.state.currentItemFontFamily}),A=Math.max(i.width,I.width),M=Math.max(i.height,I.height);va(r)||(A=M=Math.max(A,M));let{originInGrid:N}=o;C={x:i.x<N.x?N.x-A:i.x,y:i.y<N.y?N.y-M:i.y,width:A,height:M}}if(this.scene.mutateElement(i,{...C,baseHeight:C.height},{informMutation:!1,isDragging:!1}),this.store.scheduleCapture(),this.scene.triggerUpdate(),c.locked){this.setState(I=>({newElement:null,selectedElementIds:Ue({},I)})),this.cursor.applyForTool();return}this.cursor.reset(),this.setState({newElement:null,activeTool:ht(this.state,{type:this.state.preferredSelectionTool.type})}),this.startTextEditing({sceneX:i.x+i.width/2,sceneY:i.y+i.height/2,container:i});return}if(c.type!=="selection"&&i&&tn(i)){this.updateScene({elements:this.scene.getElementsIncludingDeleted().filter(E=>E.id!==i.id),appState:{newElement:null},captureUpdate:O.NEVER});return}if(ae(i)){let E=Tw(this.scene.getElementsIncludingDeleted(),i,this.scene.getNonDeletedElementsMap());this.scene.replaceAllElements(_s(this.scene.getElementsMapIncludingDeleted(),E,i))}if(i&&(this.scene.mutateElement(i,Ow(i),{informMutation:!1,isDragging:!1}),this.scene.triggerUpdate()),o.drag.hasOccurred){let E=ze(r,this.state);if(this.state.selectedLinearElement&&this.state.selectedLinearElement.isDragging){let w=this.scene.getElement(this.state.selectedLinearElement.elementId);if(w?.frameId){let C=Nn(w,n);C&&w&&(up(w,C,this.scene.getNonDeletedElementsMap())||(this.scene.mutateElement(w,{groupIds:[]}),gp([w],this.scene.getNonDeletedElementsMap()),this.scene.triggerUpdate()))}}else{let w=this.scene.getSelectedElements(this.state),C=this.getTopLayerFrameAtSceneCoords(E,{currentFrameId:Bc(w),excludeElementIds:this.state.selectedElementIds}),I=this.scene.getElementsMapIncludingDeleted(),A=M=>{if(M.length>0){for(let N of M){let P=N.groupIds.indexOf(this.state.editingGroupId);this.scene.mutateElement(N,{groupIds:N.groupIds.slice(0,P)},{informMutation:!1,isDragging:!1})}I.forEach(N=>{N.groupIds.length&&Ye(I,N.groupIds[N.groupIds.length-1]).length<2&&this.scene.mutateElement(N,{groupIds:[]},{informMutation:!1,isDragging:!1})}),this.setState({editingGroupId:null})}};if(C&&!this.state.selectedElementIds[C.id]){let M=w.filter(N=>Yf(N,I,this.state));this.state.editingGroupId&&A(M),I=_s(I,M,C)}else if(!C&&this.state.editingGroupId){let M=w.filter(N=>N.frameId&&!Yf(N,I,this.state));A(M)}I=en(I,this.state,this),this.scene.replaceAllElements(I)}}if(a&&this.store.scheduleCapture(),a&&tn(a)&&this.updateScene({elements:this.scene.getElementsIncludingDeleted().filter(E=>E.id!==a.id),captureUpdate:O.NEVER}),o.resize.isResizing){let E=en(this.scene.getElementsIncludingDeleted(),this.state,this),w=this.scene.getSelectedElements(this.state).filter(ae);for(let C of w)E=Qr(E,Oo(this.scene.getElementsIncludingDeleted(),C,this.state,n),C);this.scene.replaceAllElements(E)}let f=o.hit.element;this.state.selectedLinearElement?.elementId!==f?.id&&Me(f)&&this.scene.getSelectedElements(this.state).length===1&&this.setState({selectedLinearElement:new j(f,this.scene.getNonDeletedElementsMap())}),(!s||s&&(!f&&!m||f&&f.id!==s))&&this.finishImageCropping();let x=this.lastPointerDownEvent,v=this.lastPointerUpEvent||this.lastPointerMoveEvent;if(pr(this.state)&&x&&v){if(this.eraserTrail.endPath(),Po(_(x.clientX,x.clientY),_(v.clientX,v.clientY))===0){let w=ze({clientX:v.clientX,clientY:v.clientY},this.state);this.getElementsAtPosition(w.x,w.y).forEach(I=>this.elementsPendingErasure.add(I.id))}this.eraseElements();return}else this.elementsPendingErasure.size&&this.restoreReadyToEraseElements();if(f&&!o.drag.hasOccurred&&!o.hit.wasAddedToSelection&&(!this.state.selectedLinearElement?.isEditing||!o.boxSelection.hasOccurred)&&this.state.activeTool.type!=="lasso"&&(r.shiftKey&&!this.state.selectedLinearElement?.isEditing?this.state.selectedElementIds[f.id]?cp(this.state,f)?this.setState(E=>{let w={...E.selectedElementIds};for(let C of f.groupIds.flatMap(I=>Ye(this.scene.getNonDeletedElements(),I)))delete w[C.id];return{selectedGroupIds:{...E.selectedElementIds,...f.groupIds.map(C=>({[C]:!1})).reduce((C,I)=>({...C,...I}),{})},selectedElementIds:Ue(w,E)}}):this.state.selectedLinearElement?.isDragging||this.setState(E=>{let w={...E.selectedElementIds};delete w[f.id];let C=ie(this.scene.getNonDeletedElements(),{selectedElementIds:w});return{...Lt({editingGroupId:E.editingGroupId,selectedElementIds:w},this.scene.getNonDeletedElements(),E,this),selectedLinearElement:C.length===1&&Me(C[0])?new j(C[0],this.scene.getNonDeletedElementsMap()):E.selectedLinearElement}}):f.frameId&&this.state.selectedElementIds[f.frameId]?this.setState(E=>{let w={...E.selectedElementIds,[f.id]:!0};return delete w[f.frameId],(this.scene.getElement(f.frameId)?.groupIds??[]).flatMap(C=>Ye(this.scene.getNonDeletedElements(),C)).forEach(C=>{delete w[C.id]}),{...Lt({editingGroupId:E.editingGroupId,selectedElementIds:w},this.scene.getNonDeletedElements(),E,this),showHyperlinkPopup:f.link||fo(f)?"info":!1}}):this.setState(E=>({selectedElementIds:Ue({...E.selectedElementIds,[f.id]:!0},E)})):this.setState(E=>({...Lt({editingGroupId:E.editingGroupId,selectedElementIds:{[f.id]:!0}},this.scene.getNonDeletedElements(),E,this),selectedLinearElement:Me(f)&&E.selectedLinearElement?.elementId!==f.id?new j(f,this.scene.getNonDeletedElementsMap()):E.selectedLinearElement}))),this.state.activeTool.type!=="lasso"&&!(f&&He(f))&&!o.drag.hasOccurred&&!this.state.isResizing&&(f&&sw({point:_(o.origin.x,o.origin.y),element:f,elementsMap:n,threshold:this.getElementHitThreshold(f),frameNameBound:ae(f)?this.frameNameBoundsCache.get(f):null},n)||!f&&o.hit.hasHitCommonBoundingBoxOfSelectedElements)){this.state.selectedLinearElement?.isEditing?this.actionManager.executeAction(is):this.setState({selectedElementIds:Ue({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null}),this.cursor.set(Be.AUTO);return}let y=this.getSelectedTextEditingContainerAtPosition(f,b);if(c.type===this.state.preferredSelectionTool.type&&!this.state.editingTextElement&&!o.drag.hasOccurred&&!o.hit.wasAddedToSelection&&!r.shiftKey&&!r[S.CTRL_OR_CMD]&&!r.altKey&&r.pointerType!=="touch"&&f&&(J(f)&&this.state.selectedElementIds[f.id]&&this.scene.getSelectedElements(this.state).length===1||y)){this.startTextEditing({sceneX:b.x,sceneY:b.y,container:y,initialCaretSceneCoords:this.lastPointerUpIsDoubleClick?void 0:b});return}if(!this.isToolLocked()&&c.type!=="freedraw"&&i&&this.setState(E=>({selectedElementIds:Ue({...E.selectedElementIds,[i.id]:!0},E),showHyperlinkPopup:fo(i)&&!i.link?"editor":E.showHyperlinkPopup})),!this.isEditingTextContent()&&(c.type!=="selection"||$e(this.scene.getNonDeletedElements(),this.state)||!Dt(this.state.previousSelectedElementIds,this.state.selectedElementIds))&&this.store.scheduleCapture(),o.drag.hasOccurred&&!this.state.selectedLinearElement||d||p||m){let E=this.scene.getSelectedElements(this.state).filter(Ee);Dc(E,this.scene,this.state)}if(c.type==="laser"){this.laserTrails.endPath();return}if(c.type==="autoshape"){this.actionManager.executeAction(Xt);return}!this.isToolLocked()&&c.type!=="freedraw"&&c.type!==xt.bucketfill&&(c.type!=="lasso"||c.type==="lasso"&&c.fromSelection)?this.setState({newElement:null,suggestedBinding:null,activeTool:ht(this.state,{type:this.state.preferredSelectionTool.type})},()=>{this.cursor.reset(),this.cursor.refreshHover()}):this.setState({newElement:null,suggestedBinding:null},()=>this.cursor.refreshHover())})}clearSelection(o){this.setState(r=>({selectedElementIds:Ue({},r),activeEmbeddable:null,selectedGroupIds:{},editingGroupId:r.editingGroupId&&o!=null&&Ms(o,r.editingGroupId)?r.editingGroupId:null})),this.setState({selectedElementIds:Ue({},this.state),activeEmbeddable:null,previousSelectedElementIds:this.state.selectedElementIds,selectedLinearElement:null})}getTextWysiwygSnappedToCenterPosition(o,r,n,i){if(i){let a=i.x+i.width/2,s=i.y+i.height/2,l=Qm(i,this.scene.getNonDeletedElementsMap());if(l&&(a=l.x,s=l.y),Math.hypot(o-a,r-s)<Ty){let{x:p,y:m}=Gt({sceneX:a,sceneY:s},n);return{viewportX:p,viewportY:m,elementCenterX:a,elementCenterY:s}}}}getCanvasOffsets(){if(this.excalidrawContainerRef?.current){let o=this.excalidrawContainerRef.current,{left:r,top:n}=o.getBoundingClientRect();return{offsetLeft:r,offsetTop:n}}return{offsetLeft:0,offsetTop:0}}async updateLanguage(){let o=Us.find(r=>r.code===this.props.langCode)||an;await Gp(o),this.setAppState({})}},UO=()=>{(jr()||Wt())&&(window.h=window.h||{},Object.defineProperties(window.h,{elements:{configurable:!0,get(){return this.app?.scene.getElementsIncludingDeleted()},set(e){return this.app?.scene.replaceAllElements(Ls(e))}},scene:{configurable:!0,get(){return this.app?.scene}}}))};UO();var f6=JE;import{useEffect as WO,useState as VO}from"react";import{jsx as YO}from"react/jsx-runtime";var b6=e=>{let[t,o]=VO(!0);return WO(()=>{let r=async()=>{await Gp(n),o(!1)},n=Us.find(i=>i.code===e.langCode)||an;r()},[e.langCode]),t?YO(fg,{theme:e.theme}):e.children};import KO from"clsx";import{jsx as x6}from"react/jsx-runtime";var E6=({children:e})=>{let{FooterCenterTunnel:t}=at(),o=fe();return x6(t.In,{children:x6("div",{className:KO("footer-center zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-bottom":o.zenModeEnabled}),children:e})})},XO=E6;E6.displayName="FooterCenter";import ZO from"clsx";import{jsx as qO,jsxs as JO}from"react/jsx-runtime";var y6=({isCollaborating:e,onSelect:t,editorInterface:o,...r})=>{let n=fe(),i=o?.formFactor!=="desktop"||n.width<1440;return JO(mo,{...r,className:ZO("collab-button",{active:e}),type:"button",onSelect:t,style:{position:"relative",width:i?void 0:"auto"},title:h("labels.liveCollaboration"),children:[i?Ub:h("labels.share"),n.collaborators.size>0&&qO("div",{className:"CollabButton-collaborators",children:n.collaborators.size})]})},jO=y6;y6.displayName="LiveCollaborationTrigger";import{jsx as ma,jsxs as w6}from"react/jsx-runtime";var QO=()=>ma("svg",{viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ExcalidrawLogo-icon",children:ma("path",{d:"M39.9 32.889a.326.326 0 0 0-.279-.056c-2.094-3.083-4.774-6-7.343-8.833l-.419-.472a.212.212 0 0 0-.056-.139.586.586 0 0 0-.167-.111l-.084-.083-.056-.056c-.084-.167-.28-.278-.475-.167-.782.39-1.507.973-2.206 1.528-.92.722-1.842 1.445-2.708 2.25a8.405 8.405 0 0 0-.977 1.028c-.14.194-.028.361.14.444-.615.611-1.23 1.223-1.843 1.861a.315.315 0 0 0-.084.223c0 .083.056.166.111.194l1.09.833v.028c1.535 1.528 4.244 3.611 7.12 5.861.418.334.865.667 1.284 1 .195.223.39.473.558.695.084.11.28.139.391.055.056.056.14.111.196.167a.398.398 0 0 0 .167.056.255.255 0 0 0 .224-.111.394.394 0 0 0 .055-.167c.029 0 .028.028.056.028a.318.318 0 0 0 .224-.084l5.082-5.528a.309.309 0 0 0 0-.444Zm-14.63-1.917a.485.485 0 0 0 .111.14c.586.5 1.2 1 1.843 1.555l-2.569-1.945-.251-.166c-.056-.028-.112-.084-.168-.111l-.195-.167.056-.056.055-.055.112-.111c.866-.861 2.346-2.306 3.1-3.028-.81.805-2.43 3.167-2.095 3.944Zm8.767 6.89-2.122-1.612a44.713 44.713 0 0 0-2.625-2.5c1.145.861 2.122 1.611 2.262 1.75 1.117.972 1.06.806 1.815 1.445l.921.666a1.06 1.06 0 0 1-.251.25Zm.558.416-.056-.028c.084-.055.168-.111.252-.194l-.196.222ZM1.089 5.75c.055.361.14.722.195 1.056.335 1.833.67 3.5 1.284 4.75l.252.944c.084.361.223.806.363.917 1.424 1.25 3.602 3.11 5.947 4.889a.295.295 0 0 0 .363 0s0 .027.028.027a.254.254 0 0 0 .196.084.318.318 0 0 0 .223-.084c2.988-3.305 5.221-6.027 6.813-8.305.112-.111.14-.278.14-.417.111-.111.195-.25.307-.333.111-.111.111-.306 0-.39l-.028-.027c0-.055-.028-.139-.084-.167-.698-.666-1.2-1.138-1.731-1.638-.922-.862-1.871-1.75-3.881-3.75l-.028-.028c-.028-.028-.056-.056-.112-.056-.558-.194-1.703-.389-3.127-.639C6.087 2.223 3.21 1.723.614.944c0 0-.168 0-.196.028l-.083.084c-.028.027-.056.055-.224.11h.056-.056c.028.167.028.278.084.473 0 .055.112.5.112.555l.782 3.556Zm15.496 3.278-.335-.334c.084.112.196.195.335.334Zm-3.546 4.666-.056.056c0-.028.028-.056.056-.056Zm-2.038-10c.168.167.866.834 1.033.973-.726-.334-2.54-1.167-3.379-1.445.838.167 1.983.334 2.346.472ZM1.424 2.306c.419.722.754 3.222 1.089 5.666-.196-.778-.335-1.555-.503-2.278-.251-1.277-.503-2.416-.838-3.416.056 0 .14 0 .252.028Zm-.168-.584c-.112 0-.223-.028-.307-.028 0-.027 0-.055-.028-.055.14 0 .223.028.335.083Zm-1.089.222c0-.027 0-.027 0 0ZM39.453 1.333c.028-.11-.558-.61-.363-.639.42-.027.42-.666 0-.666-.558.028-1.144.166-1.675.25-.977.194-1.982.389-2.96.61-2.205.473-4.383.973-6.561 1.557-.67.194-1.424.333-2.066.666-.224.111-.196.333-.084.472-.056.028-.084.028-.14.056-.195.028-.363.056-.558.083-.168.028-.252.167-.224.334 0 .027.028.083.028.11-1.173 1.556-2.485 3.195-3.909 4.945-1.396 1.611-2.876 3.306-4.356 5.056-4.719 5.5-10.052 11.75-15.943 17.25a.268.268 0 0 0 0 .389c.028.027.056.055.084.055-.084.084-.168.14-.252.222-.056.056-.084.111-.084.167a.605.605 0 0 0-.111.139c-.112.111-.112.305.028.389.111.11.307.11.39-.028.029-.028.029-.056.056-.056a.44.44 0 0 1 .615 0c.335.362.67.723.977 1.028l-.698-.583c-.112-.111-.307-.083-.39.028-.113.11-.085.305.027.389l7.427 6.194c.056.056.112.056.196.056s.14-.028.195-.084l.168-.166c.028.027.083.027.111.027.084 0 .14-.027.196-.083 10.052-10.055 18.15-17.639 27.42-24.417.083-.055.111-.166.111-.25.112 0 .196-.083.251-.194 1.704-5.194 2.039-9.806 2.15-12.083v-.028c0-.028.028-.056.028-.083.028-.056.028-.084.028-.084a1.626 1.626 0 0 0-.111-1.028ZM21.472 9.5c.446-.5.893-1.028 1.34-1.5-2.876 3.778-7.65 9.583-14.408 16.5 4.607-5.083 9.242-10.333 13.068-15ZM5.193 35.778h.084-.084Zm3.462 3.194c-.027-.028-.027-.028 0-.028v.028Zm4.16-3.583c.224-.25.448-.472.699-.722 0 0 0 .027.028.027-.252.223-.475.445-.726.695Zm1.146-1.111c.14-.14.279-.334.446-.5l.028-.028c1.648-1.694 3.351-3.389 5.082-5.111l.028-.028c.419-.333.921-.694 1.368-1.028a379.003 379.003 0 0 0-6.952 6.695ZM24.794 6.472c-.921 1.195-1.954 2.778-2.82 4.028-2.736 3.944-11.532 13.583-11.727 13.75a1976.983 1976.983 0 0 1-8.042 7.639l-.167.167c-.14-.167-.14-.417.028-.556C14.49 19.861 22.03 10.167 25.074 5.917c-.084.194-.14.36-.28.555Zm4.83 5.695c-1.116-.64-1.646-1.64-1.34-2.611l.084-.334c.028-.083.084-.194.14-.277.307-.5.754-.917 1.257-1.167.027 0 .055 0 .083-.028-.028-.056-.028-.139-.028-.222.028-.167.14-.278.335-.278.335 0 1.369.306 1.76.639.111.083.223.194.335.305.14.167.363.445.474.667.056.028.112.306.196.445.056.222.111.472.084.694-.028.028 0 .194-.028.194a2.668 2.668 0 0 1-.363 1.028c-.028.028-.028.056-.056.084l-.028.027c-.14.223-.335.417-.53.556-.643.444-1.369.583-2.095.389 0 0-.195-.084-.28-.111Zm8.154-.834a39.098 39.098 0 0 1-.893 3.167c0 .028-.028.083 0 .111-.056 0-.084.028-.14.056-2.206 1.61-4.356 3.305-6.506 5.028 1.843-1.64 3.686-3.306 5.613-4.945.558-.5.949-1.139 1.06-1.861l.28-1.667v-.055c.14-.334.67-.195.586.166Z",fill:"currentColor"})}),eB=()=>w6("svg",{viewBox:"0 0 450 55",xmlns:"http://www.w3.org/2000/svg",fill:"none",className:"ExcalidrawLogo-text",children:[ma("path",{d:"M429.27 96.74c2.47-1.39 4.78-3.02 6.83-4.95 1.43-1.35 2.73-2.86 3.81-4.51-.66.9-1.4 1.77-2.23 2.59-2.91 2.84-5.72 5.09-8.42 6.87h.01ZM343.6 69.36c.33 3.13.58 6.27.79 9.4.09 1.37.18 2.75.25 4.12-.12-4.46-.27-8.93-.5-13.39-.11-2.08-.24-4.16-.4-6.24-.06 1.79-.11 3.85-.13 6.11h-.01ZM378.47 98.34c.01-.37.07-1.13.01-6.51-.11 1.9-.22 3.81-.31 5.71-.07 1.42-.22 2.91-.16 4.35.39.03.78.07 1.17.1-.92-.85-.76-2.01-.72-3.66l.01.01ZM344.09 86.12c-.09-2.41-.22-4.83-.39-7.24v12.21c.15-.05.32-.09.47-.14.05-1.61-.03-3.23-.09-4.83h.01ZM440.69 66.79c-.22-.34-.45-.67-.69-.99-3.71-4.87-9.91-7.14-15.65-8.55-1.05-.26-2.12-.49-3.18-.71 2.29.59 4.48 1.26 6.64 2.02 7.19 2.54 10.57 5.41 12.88 8.23ZM305.09 72.46l1.2 3.6c.84 2.53 1.67 5.06 2.46 7.61.24.78.5 1.57.73 2.36.22-.04.44-.08.67-.12a776.9 776.9 0 0 1-5.01-13.57c-.02.04-.03.09-.05.13v-.01ZM345.49 90.25v.31c1.48-.42 3.05-.83 4.66-1.2-1.56.25-3.12.52-4.66.89ZM371.02 90.22c0-.57-.04-1.14-.11-1.71-.06-.02-.12-.04-.19-.05-.21-.05-.43-.08-.65-.11.42.16.74.88.95 1.87ZM398.93 54.23c-.13 0-.27-.01-.4-.02l.03.4c.11-.15.23-.27.37-.38ZM401.57 62.28v-.15c-1.22-.24-2.86-.61-3.23-1.25-.09-.15-.18-.51-.27-.98-.09.37-.2.73-.33 1.09 1.24.56 2.52.98 3.83 1.29ZM421.73 88.68c-2.97 1.65-6.28 3.12-9.69 3.68v.18c4.72-.14 11.63-3.85 16.33-8.38-2.04 1.75-4.33 3.24-6.63 4.53l-.01-.01ZM411.28 80.92c-.05-1.2-.09-2.4-.15-3.6-.21 5.66-.46 11.38-.47 14.51.24-.02.48-.04.71-.07.15-3.61.05-7.23-.09-10.83v-.01Z",transform:"translate(-144.023 -51.76)"}),ma("path",{d:"M425.38 67.41c-3.5-1.45-7.19-2.57-14.06-3.62.09 1.97.06 4.88-.03 8.12.03.04.06.09.06.15.19 1.36.28 2.73.37 4.1.25 3.77.39 7.55.41 11.33 0 1.38-.01 2.76-.07 4.13 1.4-.25 2.78-.65 4.12-1.15 4.07-1.5 7.94-3.78 11.28-6.54 2.33-1.92 5.13-4.49 5.88-7.58.63-3.53-2.45-6.68-7.97-8.96l.01.02ZM411.35 92.53v-.06l-.34.03c.11.01.22.03.34.03ZM314.26 64.06c-.23-.59-.47-1.17-.7-1.75.57 1.62 1.11 3.25 1.6 4.9l.15.54 2.35 6.05c.32.82.66 1.64.98 2.46-1.38-4.1-2.83-8.17-4.39-12.2h.01ZM156.82 103.07c-.18.13-.38.23-.58.33 1.32-.03 2.66-.2 3.93-.34.86-.09 1.72-.22 2.58-.33-2.12.1-4.12.17-5.94.34h.01ZM210.14 68.88s.03.04.05.07c.18-.31.39-.64.58-.96-.21.3-.42.6-.64.89h.01ZM201.65 82.8c-.5.77-1.02 1.56-1.49 2.37 1.11-1.55 2.21-3.1 3.2-4.59-.23.23-.49.51-.75.79-.32.47-.65.95-.96 1.43ZM194.03 98.66c-.33-.4-.65-.84-1.05-1.17-.24-.2-.07-.49.17-.56-.23-.26-.42-.5-.63-.75 1.51-2.55 3.93-5.87 6.4-9.28-.17-.08-.29-.28-.2-.49.04-.09.09-.17.13-.26-1.21 1.78-2.42 3.55-3.61 5.33-.87 1.31-1.74 2.64-2.54 4-.29.5-.63 1.04-.87 1.61.81.65 1.63 1.27 2.47 1.88-.09-.11-.18-.21-.27-.32v.01ZM307.79 82.93c-1-3.17-2.05-6.32-3.1-9.48-1.62 4.08-3.69 9.17-6.16 15.19 3.32-1.04 6.77-1.87 10.27-2.5-.32-1.08-.67-2.15-1.01-3.21ZM149.5 80.7c.05-1.71.04-3.43 0-5.14-.1 2.26-.16 4.51-.22 6.77-.02.73-.03 1.46-.04 2.19.14-1.27.2-2.55.24-3.82h.02ZM228.98 98.3c.39 1.25.91 3.03.94 3.91.06-.03.12-.07.17-.1.08-1.29-.55-2.65-1.11-3.81ZM307.72 53.36c.81.5 1.53 1.04 2.07 1.49-.38-.8-.78-1.58-1.21-2.35-.17.03-.34.06-.51.11-.43.12-.86.26-1.29.41.35-.01.53.1.94.34ZM283.69 96.14c3.91-7.25 6.89-13.35 8.88-18.15l1.1-2.66c-1.27 2.64-2.56 5.27-3.83 7.9-1.53 3.15-3.06 6.31-4.58 9.47-.87 1.81-1.76 3.62-2.54 5.47.04.02.07.04.11.07.05.05.1.09.15.14.05-.73.27-1.48.71-2.24ZM289.92 103.23s-.04.01-.05.03c0-.02.04-.03.05-.04.05-.05.11-.1.16-.15l.21-.21c-.55 0-1.5-.27-2.55-.72.4.26.8.51 1.22.74.24.13.48.26.73.37.05.02.1.03.14.05a.27.27 0 0 1 .08-.07h.01ZM269.23 68.49c-.39-.19-.82-.48-1.33-.87-3.06-1.56-6.31-2.78-9.36-2.35-3.5.49-5.7 1.11-7.74 2.44 5.71-2.6 12.82-2.07 18.44.79l-.01-.01ZM177.87 53.69l1.06.03c-.96-.22-2-.25-2.89-.3-4.95-.26-9.99.33-14.86 1.19-2.44.43-4.88.95-7.28 1.59 9.09-1.76 15.69-2.77 23.97-2.51ZM219.85 55.51c-.18.12-.36.27-.56.45-.45.53-.86 1.11-1.26 1.66-1.91 2.61-3.71 5.31-5.57 7.95l-.12.18 8.05-10.11c-.18-.05-.36-.1-.55-.13h.01ZM510.71 54.1c.12-.15.29-.3.53-.45.69-.4 3.72-.63 5.87-.74-.36-.02-.73-.04-1.09-.05-1.84-.03-3.67.09-5.49.35.05.3.12.59.18.88v.01ZM510.76 86.02c1.37-3.07 2.49-6.27 3.57-9.46.55-1.64 1.12-3.3 1.6-4.97-1.59 4.01-3.67 9.14-6.2 15.3.24-.08.5-.14.74-.22.1-.22.19-.44.29-.65ZM566.95 75.76c.11-.02.23.03.31.11-.05-.13-.09-.26-.14-.39-.05.09-.11.18-.17.28ZM511.33 86.41c3.08-.89 6.24-1.62 9.46-2.14-1.51-3.98-2.98-7.96-4.39-11.87-.05.15-.09.31-.14.46-1.02 3.32-2.15 6.61-3.39 9.85-.48 1.25-.98 2.49-1.53 3.7h-.01ZM578.24 74.45c.11-.44.23-.87.35-1.31-.31.7-.64 1.39-.97 2.08.09.21.19.4.28.61.12-.46.23-.92.35-1.38h-.01ZM520.62 53.11c-.09 0-.18-.01-.28-.02.38.34.29 1.08.93 2.53l6.65 17.15c2.2 5.68 4.69 11.36 7.41 16.87l1.06 2.17c-2.95-7.05-5.92-14.08-8.87-21.13-1.58-3.79-3.16-7.59-4.7-11.4-.78-1.92-1.73-3.89-2.25-5.91-.03-.1 0-.19.04-.26h.01ZM578.78 77.87c1.45-5.77 3.07-10.43 3.58-13.36.05-.34.16-.88.31-1.55-.67 1.79-1.37 3.56-2.08 5.33-.12.43-.23.86-.35 1.29-.65 2.43-1.29 4.86-1.9 7.3.14.33.29.65.43 1l.01-.01ZM545.3 94.66c.02-.44.03-.83.05-1.12.02-1.01.05-2.02.11-3.02.03-6.66-.46-14.33-1.46-22.8-.13-.42-.27-1.24-.56-2.89 0-.02 0-.04-.01-.06.62 6.61.95 13.25 1.32 19.87.17 3.08.33 6.16.52 9.23.02.25.03.52.04.78l-.01.01ZM580.77 102.81c.13.2.27.38.37.49.27-.11.53-.22.8-.32-.43.09-.82.05-1.17-.16v-.01ZM530.48 104.07h.33c-.36-.13-.71-.32-1.04-.56.14.24.3.47.45.7.06-.08.14-.13.26-.13v-.01ZM542.63 58.82c.06.23.11.47.15.71.14-.33.36-.62.7-.86-.28.05-.57.11-.85.15ZM583.81 57.87c.15-.7.29-1.41.42-2.11-.14.45-.28.9-.42 1.34-.46 1.44-.89 2.89-1.31 4.34.44-1.19.88-2.37 1.31-3.57ZM523.62 91.48c-4.66 1.17-9.05 2.89-14.02 5.27 4.65-1.84 9.48-3.29 14.28-4.63-.09-.22-.17-.41-.26-.64ZM460.64 78.3c-.04-2.9-.11-5.81-.28-8.71-.1-1.68-.17-3.43-.5-5.09-.07.02-.14.03-.2.05.3 6.54.45 12.17.51 17.12.17-.07.34-.14.51-.2 0-1.06-.01-2.11-.03-3.17h-.01ZM470.63 63.24c-3.38-.26-6.81.32-10.1 1.1.41 2.01.47 4.14.57 6.18.18 3.55.25 7.11.27 10.67 3.31-1.38 6.5-3.12 9.3-5.35 1.96-1.56 3.86-3.41 5.02-5.66.73-1.41 1.19-3.22.26-4.65-1.09-1.7-3.46-2.14-5.32-2.29ZM460.29 63.68c1-.24 2.01-.46 3.04-.65-1.15.16-2.37.38-3.71.69v.13c.07-.02.15-.04.22-.05.11-.13.3-.18.45-.11v-.01ZM457.24 100.96c.43-.03.86-.07 1.29-.11.14-.49.27-.99.38-1.49-.44.7-1 1.23-1.67 1.6ZM482.88 104.98c-.18.23-.36.38-.55.47.14.09.27.19.4.28a70.76 70.76 0 0 0 4.37-4.63c.76-.89 1.52-1.81 2.19-2.77-.3-.27-.61-.53-.92-.79-.07 1.94-4.62 6.32-5.49 7.45v-.01Z",transform:"translate(-144.023 -51.76)"}),ma("path",{d:"M474.36 63.31c-.4-.16-.84-.27-1.29-.37 1.56.42 3.08 1.22 3.76 2.74.62 1.4.32 2.95-.28 4.32.7-1.22.94-2.34.74-3.47-.24-1.33-1.19-2.54-2.93-3.21v-.01ZM477.34 89.18c-1.2-.81-2.4-1.62-3.6-2.42-.14.1-.26.19-.4.29 1.4.67 2.73 1.39 4 2.13ZM465.88 93.85c.37.25.74.5 1.1.75.46.32.92.65 1.38.97-1.57-1.2-2.01-1.61-2.49-1.72h.01ZM574.92 90.06c-2.28-5.21-4.93-11.13-5.67-12.26-.1-.15-1.57-3.01-1.63-3.08 0 0-.01.02-.02.02.4 1.37 1.09 2.69 1.65 3.99 2.14 4.95 4.36 9.86 6.67 14.73.6 1.26 1.21 2.52 1.83 3.78-.75-2.01-1.64-4.45-2.83-7.18ZM448.73 65.29c.1.2.22.38.34.57.22-.02.43-.06.65-.08v-.08c-.14-.05-.25 0-.99-.41ZM460.16 94.81c-.02.31-.06.59-.1.89-.03 1.71-.33 3.43-.79 5.07.15-.02.3-.03.45-.05.01-.04.02-.08.03-.11.09-.34.15-.69.2-1.03.17-1.07.25-2.16.33-3.24.05-.69.08-1.39.12-2.08-.27.1-.27.26-.24.57v-.02Z",transform:"translate(-144.023 -51.76)"}),ma("path",{d:"m328.67 98.12-3.22-6.58c-1.29-2.63-2.53-5.29-3.72-7.97-.25-.85-.52-1.69-.79-2.53-.81-2.57-1.67-5.12-2.55-7.67-1.92-5.53-3.9-11.08-6.32-16.41-.72-1.58-1.46-3.44-2.63-4.79-.03-.17-.16-.29-.34-.36a.282.282 0 0 0-.23-.04c-.06-.01-.12 0-.18.01-.74.06-1.5.38-2.19.61-2.22.77-4.4 1.64-6.63 2.38-.03-.08-.06-.16-.09-.25-.15-.42-.82-.24-.67.19.03.09.07.19.1.28l-.18.06c-.36.11-.28.6 0 .68.18 1.18.63 2.36.98 3.49.03.09.06.17.08.26-.08.23-.17.46-.24.64-.37.98-.79 1.94-1.21 2.9-1.27 2.89-2.62 5.75-3.98 8.6-3.18 6.67-6.44 13.31-9.64 19.97-1.08 2.25-2.2 4.5-3.15 6.81-.13.32.24.5.5.37 1.34 1.33 2.84 2.5 4.4 3.57.65.44 1.31.87 2.01 1.24.4.22.86.48 1.33.5.24.01.35-.19.33-.37.11-.1.21-.21.28-.28.41-.41.81-.84 1.2-1.26.85-.92 1.69-1.87 2.5-2.84 6.31-2.34 12.6-4.31 18.71-5.84 2.14 5.3 3.43 8.43 3.97 9.58.55 1.05 1.15 1.88 1.82 2.52 1.32.56 6.96-.03 9.23-1.96.87-1.28 1.19-2.67.93-4.15-.09-.5-.22-.95-.4-1.33l-.01-.03Zm-20.09-45.61c.43.77.83 1.56 1.21 2.35-.54-.45-1.27-.99-2.07-1.49-.42-.24-.6-.35-.94-.34.43-.15.85-.29 1.29-.41.17-.05.34-.08.51-.11Zm-25.86 45.66c.78-1.85 1.67-3.66 2.54-5.47 1.51-3.16 3.05-6.31 4.58-9.47 1.28-2.63 2.56-5.26 3.83-7.9l-1.1 2.66c-1.99 4.79-4.97 10.9-8.88 18.15-.43.76-.66 1.51-.71 2.24-.05-.05-.1-.09-.15-.14a.259.259 0 0 0-.11-.07Zm6.24 4.71c-.42-.23-.82-.48-1.22-.74 1.05.45 2 .72 2.55.72l-.21.21c-.05.05-.11.1-.16.15-.01.01-.04.03-.05.04 0-.02.03-.02.05-.03a.27.27 0 0 0-.08.07c-.05-.02-.1-.03-.14-.05-.25-.1-.49-.24-.73-.37h-.01Zm15.73-29.43c1.05 3.15 2.1 6.31 3.1 9.48.34 1.06.69 2.13 1.01 3.21-3.5.63-6.95 1.46-10.27 2.5 2.48-6.03 4.54-11.11 6.16-15.19Zm4.79 12.57c-.23-.79-.49-1.58-.73-2.36-.79-2.54-1.63-5.08-2.46-7.61l-1.2-3.6c.02-.04.04-.09.05-.13 1.6 4.45 3.28 9 5.01 13.57l-.67.12v.01Zm5.83-18.27-.15-.54c-.49-1.64-1.03-3.28-1.6-4.9.23.58.47 1.17.7 1.75 1.56 4.03 3.01 8.1 4.39 12.2-.33-.82-.67-1.64-.98-2.46l-2.35-6.05h-.01ZM390.43 79.37c-.13-10.43-.22-17.5-.24-19.97-.24-1.6.21-2.88-.65-3.65-.14-.13-.32-.23-.52-.32h.03c.45 0 .45-.69 0-.7-1.75-.03-3.5-.04-5.25-.14-1.38-.08-2.76-.21-4.15-.31-.07 0-.12.01-.17.04-.21-.07-.47.03-.45.31l.03.45c-.11.14-.19.3-.22.5-.21 1.26-.32 13.67-.36 23.59-.32 5.79-.67 11.57-.97 17.36-.09 1.73-.29 3.54-.21 5.3-.39.02-.38.64.04.69v.12c.05.44.74.45.7 0v-.06c1.1.09 2.2.21 3.3.3 1.14.19 2.44.2 3.29.17 1.73-.05 2.92-.05 3.8-.37.45-.05.9-.11 1.35-.17.44-.06.25-.73-.19-.67h-.01c.24-.32.45-.72.62-1.25.66-1.84.41-6.36.34-11.33l-.13-9.9.02.01Zm-12.26 18.17c.09-1.91.2-3.81.31-5.71.06 5.38 0 6.14-.01 6.51-.05 1.65-.21 2.81.72 3.66-.39-.04-.78-.07-1.17-.1-.06-1.44.09-2.93.16-4.35l-.01-.01ZM588.97 53.85c-2.06-.25-3.17-.51-3.76-.6a.3.3 0 0 1 .04-.08c.22-.39-.39-.75-.6-.35-.56 1.02-.9 2.19-1.26 3.29-.61 1.88-1.17 3.78-1.72 5.68-.63 2.19-1.24 4.39-1.83 6.59-.81 2.03-1.67 4.05-2.61 6.03-1.7-3.64-3.11-6.04-4.03-7.57-2.26-3.74-2.85-5.48-3.57-6.08l.31-.09c.43-.12.25-.8-.19-.67-1.06.3-2.12.6-3.17.95-.93.32-1.85.69-2.76 1.07-.13.05-.19.16-.22.27-.04.02-.08.05-.11.07-.04-.06-.07-.12-.11-.18a.354.354 0 0 0-.48-.12c-.16.09-.22.32-.13.48l.33.54c0 .09.02.18.06.28.51 1.16.78 1.38.72 1.47-2.42 3.44-5.41 7.86-6.2 9.1-1.27 1.97-2.01 3.14-2.45 3.84l-.91-6.56-.43-4.1c-.19-1.85-.37-3.23-.53-4.13-.19-1.1-.3-2.15-.45-3.16-.2-1.36-.29-2.06-.47-2.42h.04c.45.02.45-.68 0-.7-3.43-.16-6.81.94-10.17 1.48-.24-.22-.73-.04-.58.32.24.59.33 1.25.43 1.87.17 1.06.29 2.13.4 3.2.32 3.09.53 6.2.74 9.3.44 6.75.77 13.51 1.17 20.26.11 1.95.13 3.96.46 5.89.05.3.37.31.55.14.74 1.71 2.87 1.27 6.13 1.27 1.34 0 2.39.04 2.99-.11.02.32.48.53.63.18 3.61-8.26 7.41-16.46 12.05-24.2.03-.05.04-.1.05-.15.3.73.64 1.45.94 2.16.97 2.26 1.97 4.52 2.98 6.76 2.26 5.03 4.54 10.07 7.09 14.96.47.9.94 1.79 1.47 2.65.2.32.4.67.66.96-.18.25 0 .68.34.54.91-.38 1.82-.75 2.76-1.07 1.04-.35 2.11-.65 3.17-.95.39-.11.28-.66-.07-.68.62-.4.95-.96.87-1.91-.3-3.34.72-7.47.86-8.52l2.14-11.43c1.75-10.74 3.13-17.51 3.23-20.86.02-.49.08-2.84.13-3.24.17-1.25.48-1-4.96-1.65l.03-.02Zm-46.19 5.67c-.04-.24-.09-.48-.15-.71l.85-.15c-.34.24-.56.53-.7.86Zm1.95 25.12c-.36-6.63-.7-13.26-1.32-19.87 0 .02 0 .04.01.06.29 1.65.44 2.47.56 2.89 1 8.46 1.5 16.14 1.46 22.8-.06.99-.1 2-.11 3.02-.01.29-.03.68-.05 1.12-.01-.26-.03-.53-.04-.78-.19-3.08-.35-6.16-.52-9.23l.01-.01Zm36.4 18.66c-.11-.11-.24-.29-.37-.49.35.21.74.26 1.17.16-.27.11-.53.22-.8.32v.01Zm-.89-33.72c.12-.43.23-.86.35-1.29.71-1.77 1.41-3.55 2.08-5.33-.15.68-.26 1.22-.31 1.55-.5 2.94-2.13 7.59-3.58 13.36-.15-.35-.29-.66-.43-1 .61-2.44 1.25-4.87 1.9-7.3l-.01.01Zm3.56-12.48c.14-.44.28-.89.42-1.34-.13.7-.27 1.41-.42 2.11-.43 1.19-.86 2.38-1.31 3.57.42-1.45.85-2.9 1.31-4.34Zm-5.22 16.05c-.11.44-.23.87-.35 1.31-.12.46-.23.92-.35 1.38-.1-.22-.19-.4-.28-.61.34-.69.66-1.38.97-2.08h.01Zm-11.64 2.62c.06-.1.12-.19.17-.28.05.13.09.26.14.39a.398.398 0 0 0-.31-.11Zm2.3 2.98c-.56-1.3-1.25-2.63-1.65-3.99 0 0 .01-.02.02-.02.06.08 1.52 2.93 1.63 3.08.73 1.13 3.38 7.04 5.67 12.26 1.2 2.73 2.08 5.17 2.83 7.18-.62-1.25-1.23-2.51-1.83-3.78-2.31-4.87-4.53-9.78-6.67-14.73ZM275.92 87.03c-1.06-2.18-1.13-3.45-2.44-2.93-1.52.57-2.94 1.3-4.5 2.1-1.4.72-2.68 1.44-3.92 2.12.01-.25-.24-.5-.51-.34-4.8 2.93-12.41 4.7-17.28 1.31-1.98-1.77-3.32-4.15-3.97-5.78-.29-.95-.49-1.94-.63-2.93-.14-3.34 1.58-6.53 3.9-9.12.8-.79 1.68-1.51 2.66-2.12 3.7-2.3 8.22-3.07 12.51-2.51 2.71.35 5.32 1.24 7.71 2.55.39.22.75-.39.35-.6-.18-.1-.37-.18-.55-.27.56.27 1.03.33 1.51.19l-.48.39c-.15.11-.23.3-.13.48.09.15.33.24.48.13 1.3-.97 2.46-2.09 3.45-3.37.37-.29.64-.6.65-.97v-.02c.08-.33-.03-.7-.21-1.08-.31-.87-.98-2.01-2.19-3.26-2.43-2.52-3.79-3.45-5.68-4.26-1.14-.49-3.12-1.06-4.42-1.23-3.28-.42-10.64-1.21-18.18 4.11-7.74 5.46-11.94 12.3-12.23 20.61-.08 2.06.04 3.98.34 5.71.74 4.18 2.57 8 5.44 11.34 4.26 4.99 9.76 7.52 16.34 7.52 4.85 0 9.69-1.77 14.89-4.62.23-.12.45-.23.68-.35 2.19-1.1 4.37-2.23 6.46-3.5.49-.3 1.03-.61 1.5-.98 1.47-.87 1.11-1.12.49-2.95-.39-1.14-.76-2.7-2.06-5.36l.02-.01Zm-17.38-21.76c3.05-.42 6.31.79 9.36 2.35.51.39.94.68 1.33.87-5.61-2.86-12.72-3.39-18.44-.79 2.05-1.33 4.24-1.95 7.74-2.44l.01.01ZM443.67 72.67c-.4-2.2-1.15-4.33-2.37-6.22-1.49-2.32-3.58-4.19-5.91-5.64-6.17-3.81-13.75-5.11-20.83-6.01-3.23-.41-6.47-.69-9.72-.92l-1.39-.12c-.85-.07-1.52-.1-2.05-.1-1.08-.06-2.17-.12-3.25-.17-.08 0-.14.02-.19.05-.1.05-.18.14-.16.3.27 2.55-.01 5.12-.92 7.52-.15.38.4.56.62.28 1.32.59 2.68 1.05 4.08 1.37 0 2.78-.14 7.58-.33 12.91 0 0 0 .02-.01.03-.61 3.66-.79 7.42-1 11.12-.23 4.01-.43 8.03-.44 12.05 0 .64 0 1.28.03 1.93.02.31 0 .68.15.96.06.11.14.16.24.17-.2.17-.21.54.11.59 3.83.67 7.78.71 11.68.25 2.3-.19 4.87-.65 7.65-1.56 1.85-.54 3.67-1.18 5.43-1.91 7.2-3.02 14.31-8.07 17.35-15.53.76-1.86 1.17-3.8 1.31-5.75.3-1.93.28-3.82-.09-5.58l.01-.02Zm-19.32-15.42c5.74 1.41 11.94 3.68 15.65 8.55.25.32.47.65.69.99-2.3-2.82-5.68-5.69-12.88-8.23-2.16-.76-4.35-1.43-6.64-2.02 1.06.21 2.13.45 3.18.71Zm-25.82-3.04c.13 0 .27.01.4.02-.14.1-.26.23-.37.38 0-.13-.02-.26-.03-.4Zm34.82 22.17c-.75 3.09-3.55 5.66-5.88 7.58-3.35 2.76-7.21 5.03-11.28 6.54-1.33.49-2.71.9-4.12 1.15.06-1.38.08-2.76.07-4.13-.02-3.78-.16-7.56-.41-11.33-.09-1.37-.18-2.74-.37-4.1 0-.06-.03-.11-.06-.15.09-3.25.12-6.16.03-8.12 6.86 1.05 10.56 2.17 14.06 3.62 5.52 2.28 8.59 5.44 7.97 8.96l-.01-.02Zm-22 16.15c-.12 0-.23-.02-.34-.03l.34-.03v.06Zm-.69-.7c0-3.13.26-8.84.47-14.51.06 1.2.11 2.41.15 3.6.15 3.6.25 7.23.09 10.83-.24.03-.48.05-.71.07v.01Zm-12.33-30.94c.37.63 2.01 1.01 3.23 1.25v.15c-1.31-.31-2.59-.73-3.83-1.29.12-.36.23-.72.33-1.09.08.48.18.84.27.98Zm13.7 31.65v-.18c3.41-.56 6.71-2.02 9.69-3.68 2.31-1.28 4.59-2.78 6.63-4.53-4.69 4.53-11.61 8.24-16.33 8.38l.01.01Zm24.07-.75c-2.05 1.93-4.37 3.56-6.83 4.95 2.7-1.78 5.52-4.03 8.42-6.87.82-.82 1.56-1.69 2.23-2.59-1.08 1.65-2.38 3.16-3.81 4.51h-.01ZM187.16 92.14c-.79-2.47-2.1-7.12-3.1-6.87-.19-.01-2.09.77-4.08 1.54-3.06 1.18-5.91 2.13-10.09 2.82-2.74.42-5.87 1.01-10.61 1.06.04-3.34.05-6.01.05-7.99 7.97-.65 12.33-2.11 16.37-3.55 1.11-.39 2.69-1.01 2.63-1.8-.08-.35-.55-1.39-1.17-2.61-.47-1.16-.98-2.31-1.61-3.38-.42-.71-1.04-1.69-1.86-2.06-.11-.08-.22-.13-.29-.12-.02 0-.04 0-.07.01-.19-.04-.39-.05-.6-.01-.17.03-.24.15-.25.28-.04.02-.09.04-.14.05-4.33 1.48-8.85 2.33-13.24 3.61a499.1 499.1 0 0 0-.31-8.19c4.51-.99 8.88-1.38 13.11-1.82 3.68-.38 6.28.12 7.47.34.59.11.9.16 1.16.18h.1c-.1.37.44.66.62.28.02-.04.03-.08.05-.13.15.2.53.22.62-.1.17-.58.19-1.21.21-1.81v-.36c.03-.15.05-.3.07-.45.52-2.47.33-5.09-.64-7.44-.11-.27-.44-.28-.6-.14-.08-.21-.15-.42-.24-.62-.19-.41-.79-.05-.6.35.03.07.05.15.09.22-.98-.42-2.15-.54-3.17-.63-2.17-.19-4.37-.14-6.54 0-5.7.35-11.4 1.3-16.91 2.79-2.08.56-4.13 1.22-6.14 2-4.54 1.05-3.79 1.51-2.17 6.07.18.51.46 1.68.54 1.94.82 2.47 1.08 2.13 3.1 2.13s0 .05 0 .08h.52c-.48 2.66-.51 5.45-.62 8.13-.15 3.48-.22 6.96-.28 10.45 0 .41-.01.82-.02 1.23-.16.29-.33.57-.51.85-.05.38-.09.77-.14 1.18-.42 3.52-.59 6.48-.52 8.8v.34c.02.47.05.76.06.87.16 1.57-.26 3.47 1.35 3.79 1.61.32 3.5.55 4.85.55.11 0 .22-.02.33-.02 1.79.24 3.67.05 5.45-.12 2.85-.28 5.69-.7 8.51-1.19 3.03-.53 6.05-1.14 9.04-1.86 2.4-.58 4.82-1.19 7.13-2.06.51-.19 1.73-.57 2.46-1.14 1.81-.68 2.18-1 1.57-2.67-.23-.62-.48-1.49-.91-2.78l-.03-.02Zm-11.12-38.71c.89.05 1.93.08 2.89.3-.33 0-.68-.02-1.06-.03-8.28-.26-14.88.75-23.97 2.51 2.41-.64 4.85-1.16 7.28-1.59 4.87-.86 9.91-1.45 14.86-1.19Zm-26.53 22.13c.03 1.71.04 3.43 0 5.14-.04 1.27-.11 2.55-.24 3.82 0-.73.02-1.46.04-2.19.05-2.26.12-4.51.22-6.77h-.02Zm6.73 27.85c.2-.1.4-.21.58-.33 1.82-.17 3.82-.24 5.94-.34-.86.11-1.72.24-2.58.33-1.27.14-2.61.31-3.93.34h-.01ZM534.48 85.44c-3.52-8.38-7.07-16.75-10.5-25.17-.63-1.54-1.25-3.09-1.86-4.65-.31-.8-.65-1.6-.87-2.43-.04-.17-.17-.24-.31-.25.1-.2 0-.51-.29-.53-1.59-.08-3.18-.22-4.78-.25-1.96-.03-3.91.13-5.84.42-.31.05-.31.38-.13.56-.03.06-.05.14-.04.22.23 1.54.63 3.06 1.16 4.53.13.35.27.7.41 1.06l-2.68 6.18c-.11.03-.2.09-.25.22-.67 1.9-1.52 3.73-2.34 5.56a536.85 536.85 0 0 1-3.9 8.45c-2.64 5.64-5.34 11.25-7.91 16.93-.44.97-.88 1.94-1.29 2.93-.2.48-.47 1-.55 1.52v.05c-.02.12.02.26.16.34 1.19.73 2.41 1.41 3.66 2.05 1.2.62 2.45 1.25 3.76 1.61.43.12.62-.55.19-.67-1.13-.31-2.2-.83-3.24-1.36 1.09.36 2.1.69 2.75.93 2.82 1.01 2.38 1.1 4.3-3.75 2.1-1.09 4.34-1.96 6.53-2.79 4.35-1.64 8.8-3.03 13.27-4.29.82 2.01 1.77 3.97 2.72 5.92.35.83.62 1.45.79 1.82.22.42.45.8.69 1.15.17.33.33.67.5 1 .42.8.84 1.63 1.4 2.35.23.29.6 0 .55-.31 1.53-.02 3.06-.07 4.58-.27.92-.12 1.82-.32 2.71-.54 1.39-.27 3.85-1.11 3.74-1.42-.67-1.96-1.55-3.87-2.34-5.78-1.57-3.78-3.16-7.56-4.75-11.33v-.01Zm-11.65-26.16c1.54 3.81 3.12 7.6 4.7 11.4 2.94 7.05 5.91 14.09 8.87 21.13l-1.06-2.17c-2.71-5.51-5.2-11.19-7.41-16.87l-6.65-17.15c-.65-1.45-.55-2.19-.93-2.53.09 0 .18.01.28.02a.29.29 0 0 0-.04.26c.52 2.02 1.47 3.98 2.25 5.91h-.01Zm-6.58 13.58c.05-.15.09-.31.14-.46 1.41 3.92 2.88 7.9 4.39 11.87-3.22.52-6.38 1.25-9.46 2.14.55-1.22 1.05-2.46 1.53-3.7 1.24-3.24 2.37-6.53 3.39-9.85h.01Zm-.23-20c.36 0 .73.03 1.09.05-2.15.1-5.18.33-5.87.74-.24.15-.41.3-.53.45-.06-.29-.13-.58-.18-.88 1.82-.26 3.65-.39 5.49-.35v-.01Zm-.09 18.72c-.49 1.67-1.05 3.33-1.6 4.97-1.07 3.19-2.19 6.38-3.57 9.46-.09.21-.19.43-.29.65-.25.07-.5.14-.74.22 2.53-6.16 4.61-11.29 6.2-15.3Zm-6.34 25.16c4.97-2.38 9.37-4.1 14.02-5.27l.26.64c-4.8 1.35-9.63 2.8-14.28 4.63Zm20.17 6.76c.33.23.68.42 1.04.56h-.33c-.12 0-.21.06-.26.13-.15-.23-.31-.45-.45-.7v.01ZM226.57 91.75c-3.55-4.74-6.68-9.11-9.31-12.99 9.2-15.25 10.05-17.81 10.35-18.38.17-.34 1.09-2.27.64-2.53-1.13-.65-1.03-.65-2.97-1.71-1.19-.65-3.04-1.61-4.53-2.12-1.71-.59-1.24-.36-3 2.77-.06.1-.11.2-.17.3-.75 1.02-1.48 2.05-2.2 3.09-1.88 2.71-3.73 5.45-5.69 8.1-3.68-4.91-6.88-8.76-9.51-11.43-.15-.15-.3-.29-.46-.42-1.27-1.28-7.24 3.53-7.93 5.58-.09.09-.19.16-.28.25-.27.26.03.64.33.58.19.65.5 1.29.94 1.91 3.85 5.06 7.19 9.76 9.94 14-1.23 2.61-3.06 5-4.67 7.38l-2.28 3.33c-.5.66-.93 1.23-1.29 1.69-.67.93-2.09 2.61-2.3 3.87-.51.85-1.16 1.84-1.29 2.83-.06.44.61.63.67.19.01-.08.04-.15.06-.22 1.36 1.08 2.76 2.11 4.19 3.11 1.3.91 2.62 1.85 4.04 2.56.21.1.4 0 .48-.17.24.07.48.14.72.2.44.1.62-.57.19-.67-2.02-.48-3.77-1.57-5.23-3.02-.47-.46-.9-.96-1.32-1.46 1.74 1.35 4.2 2.89 5.89 4.14 1.39 1.03 2.85-2.27 4.22-4.2 1.86-2.64 3.96-5.86 5.52-8.29l10.39 14.51c.67.81 1.14 1.21 1.57 1.36-.05.24.12.51.41.4 1.53-.58 3.05-1.19 4.54-1.87 1.52-.69 3.06-1.45 4.36-2.5a.28.28 0 0 0 .12-.23c1.66-1.1.81-1.74-1.41-4.91-1.13-1.58-1.71-2.36-3.7-5.01l-.03-.02Zm2.41 6.54c.56 1.15 1.19 2.52 1.11 3.81-.06.04-.12.07-.17.1-.03-.88-.55-2.66-.94-3.91Zm-16.51-32.73c1.86-2.65 3.65-5.35 5.57-7.95.4-.55.81-1.13 1.26-1.66.19-.18.38-.33.56-.45.18.03.36.08.55.13l-8.05 10.11.12-.18h-.01ZM192.7 95.48c.79-1.37 1.66-2.69 2.54-4 1.19-1.79 2.4-3.56 3.61-5.33-.04.09-.09.17-.13.26-.1.22.03.41.2.49-2.47 3.42-4.89 6.73-6.4 9.28.21.24.4.48.63.75-.24.07-.4.36-.17.56.4.33.72.77 1.05 1.17.09.11.18.21.27.32-.84-.61-1.66-1.24-2.47-1.88.24-.57.58-1.11.87-1.61v-.01Zm7.46-10.32c.47-.81.98-1.59 1.49-2.37.31-.48.64-.95.96-1.43.26-.29.52-.56.75-.79-.99 1.48-2.09 3.03-3.2 4.59Zm10.03-16.22s-.03-.05-.05-.07c.22-.29.43-.59.64-.89-.2.32-.4.65-.58.96h-.01ZM371.54 87.96c-.01-.08-.01-.16-.03-.23-.06-.38-.58-.29-.66.03-.3-.05-.6-.08-.81-.11-1.14-.15-2.29-.19-3.44-.2 1.04-.09 2.09-.18 3.14-.23.45-.02.45-.72 0-.7-6.57.35-13.14 1.23-19.65 2.11-1.53.21-3.05.42-4.57.68-.01 0-.02.01-.04.01-.04-3.33-.13-6.66-.24-9.99-.19-5.7-.4-11.41-.88-17.1-.13-1.51-.23-3.07-.49-4.58 0-.25 0-.48-.02-.68-.06-1.19-.04-2.61-.68-2.78-.16-.07-.72-.16-1.5-.24.22-.17.16-.62-.2-.63-1.19-.04-2.39.09-3.57.23-1.2.14-2.41.32-3.59.6-.16-.1-.41-.06-.5.12-.06.02-.13.03-.19.05-.35.1-.29.55-.03.66-.26.6-.19 2.27-.21 3-.02.66-.66 33.73-.9 40.3-.03.65.06 1.12.04 1.45-.16 3.05.87 4.96 6.34 3.93 1.09-.08 2.75-.77 5.36-1.43 4.13-1.04 5.78-1.52 6.2-1.65 6.43-1.69 6.78-1.97 11.72-2.43.55-.05 4.8-.38 6.03-.3.64.04 1.19.07 1.65.1.09 0 .16-.03.24-.05.1.27.56.33.66-.02.39-1.32.61-2.71.78-4.08.2-1.61.29-3.24.15-4.86.24.03.52-.23.38-.53-.09-.2-.27-.33-.49-.43v-.02Zm-.63.56c.07.57.11 1.14.11 1.71-.21-.99-.53-1.71-.95-1.87.22.03.44.06.65.11.06.01.12.04.19.05Zm-25.41 1.73c1.54-.36 3.1-.64 4.66-.89-1.61.37-3.18.77-4.66 1.2v-.31Zm-.86-7.37c-.07-1.37-.16-2.75-.25-4.12-.21-3.13-.45-6.27-.79-9.4.02-2.25.08-4.31.13-6.11.16 2.08.29 4.16.4 6.24.23 4.46.38 8.93.5 13.39h.01Zm-.94-4c.16 2.41.29 4.83.39 7.24.06 1.6.14 3.22.09 4.83-.15.05-.32.09-.47.14V78.88h-.01ZM483.72 92.83c-3.05-2.28-6.22-4.4-9.38-6.51 8.86-6.49 13.49-12.95 13.73-19.23.04-.76 0-1.5-.13-2.2-.67-3.82-3.5-6.68-8.39-8.48.13.04.27.08.4.13 3.92 1.39 7.74 4.23 8.5 8.56.34 1.95-.05 3.96-.98 5.69-.21.4.39.75.6.35 1.86-3.46 1.46-7.55-.97-10.63-3.53-4.47-9.76-5.88-15.16-6.16-2.32-.12-4.64-.04-6.95.19-6 .32-12.71 1.68-17.63 3.21-.37.11-.67.23-.92.35-.2-.17-.62.02-.57.37v.03c-.64.68-.18 1.64.48 3.21.38.91.67 1.89 1.15 2.58.32.76.68 1.51 1.13 2.19.14.21.38.19.53.07.19-.02.38-.05.57-.08v1.57c-.06.06-.1.13-.11.23-.27 4.18-.34 8.38-.48 12.57l-.3 9.03c-.24 3.91-.44 6.77-.46 7.26-.05.88-.11 1.95.07 2.81-.01.22-.02.43-.04.65 0 .11-.02.23-.03.35 0 .05-.03.27-.01.16-.05.4.5.59.64.28.05.04.12.08.2.08 1.75.13 3.5.28 5.25.3 1.69.02 3.38-.12 5.06-.32.08.23.36.39.55.15.06-.08.11-.17.16-.26.18-.09.24-.32.18-.48.05-.2.1-.4.13-.6.16-.86.25-1.74.33-2.62.11-1.17.17-2.34.23-3.51.15-.01.32-.03.52-.04.36-.03 1.73-.15 2.06-.15.39 0 .7-.02.95-.04 1.76 1.11 3.45 2.35 5.14 3.55 2.83 2.01 5.64 4.04 8.47 6.04 1.42 1 2.85 2 4.29 2.97.1.06.19.07.27.04.08 0 .17-.02.25-.1 1.61-1.56 3.15-3.18 4.6-4.88.75-.88 1.49-1.78 2.15-2.73.01.01.03.02.04.03.34.3.83-.2.49-.49-2.16-1.9-4.34-3.76-6.64-5.48l.03-.01Zm-6.38-3.65a55.72 55.72 0 0 0-4-2.13c.14-.1.26-.19.4-.29 1.2.81 2.4 1.61 3.6 2.42Zm-20.1 11.78c.67-.37 1.23-.91 1.67-1.6-.11.5-.24 1-.38 1.49-.43.04-.86.08-1.29.11Zm2.38-37.24c1.34-.31 2.56-.52 3.71-.69-1.03.19-2.04.41-3.04.65-.14-.07-.34-.02-.45.11-.07.02-.15.04-.22.05v-.13.01Zm.04.84c.07-.02.14-.03.2-.05.34 1.66.41 3.41.5 5.09.17 2.9.24 5.81.28 8.71l.03 3.17c-.17.07-.34.14-.51.2-.06-4.96-.21-10.58-.51-17.12h.01Zm16.04 5.62c-1.16 2.25-3.06 4.1-5.02 5.66-2.8 2.23-5.99 3.97-9.3 5.35-.01-3.56-.09-7.12-.27-10.67-.1-2.04-.16-4.16-.57-6.18 3.3-.78 6.72-1.36 10.1-1.1 1.85.14 4.23.59 5.32 2.29.92 1.43.46 3.24-.26 4.65Zm.85-.18c.6-1.37.9-2.92.28-4.32-.67-1.52-2.2-2.32-3.76-2.74.46.1.89.21 1.29.37 1.74.67 2.69 1.88 2.93 3.21.2 1.13-.05 2.25-.74 3.47V70Zm-27.47-4.14c-.12-.19-.23-.38-.34-.57.74.42.85.36.99.41v.08c-.22.03-.43.06-.65.08Zm11.21 30.46c-.08 1.08-.16 2.17-.33 3.24-.05.35-.11.69-.2 1.03 0 .04-.02.07-.03.11-.15.02-.3.04-.45.05.45-1.64.76-3.36.79-5.07.03-.29.08-.57.1-.89-.03-.31-.03-.47.24-.57-.04.69-.07 1.39-.12 2.08v.02Zm5.6-2.47c.48.11.92.52 2.49 1.72-.46-.32-.92-.65-1.38-.97-.37-.25-.73-.5-1.1-.75h-.01Zm21.23 7.24a70.76 70.76 0 0 1-4.37 4.63c-.14-.09-.27-.19-.4-.28.19-.09.37-.24.55-.47.87-1.14 5.43-5.51 5.49-7.45.31.26.62.53.92.79-.67.97-1.42 1.88-2.19 2.77v.01Z",fill:"currentColor",transform:"translate(-144.023 -51.76)"})]}),v6=({style:e,size:t="small",withText:o})=>w6("div",{className:`ExcalidrawLogo is-${t}`,style:e,children:[ma(QO,{}),o&&ma(eB,{})]});import{Fragment as S6,jsx as Ht,jsxs as iy}from"react/jsx-runtime";var ay=({icon:e,shortcut:t,children:o})=>{let r=Le();return iy(S6,{children:[Ht("div",{className:"welcome-screen-menu-item__icon",children:e}),Ht("div",{className:"welcome-screen-menu-item__text",children:o}),t&&r.formFactor!=="phone"&&Ht("div",{className:"welcome-screen-menu-item__shortcut",children:t})]})};ay.displayName="WelcomeScreenMenuItemContent";var Em=({onSelect:e,children:t,icon:o,shortcut:r,className:n="",...i})=>Ht("button",{...i,type:"button",className:`welcome-screen-menu-item ${n}`,onClick:e,children:Ht(ay,{icon:o,shortcut:r,children:t})});Em.displayName="WelcomeScreenMenuItem";var T6=({children:e,href:t,icon:o,shortcut:r,className:n="",...i})=>Ht("a",{...i,className:`welcome-screen-menu-item ${n}`,href:t,target:"_blank",rel:"noopener",children:Ht(ay,{icon:o,shortcut:r,children:e})});T6.displayName="WelcomeScreenMenuItemLink";var _r=({children:e})=>{let{WelcomeScreenCenterTunnel:t}=at();return Ht(t.In,{children:Ht("div",{className:"welcome-screen-center",children:e||iy(S6,{children:[Ht(sy,{}),Ht(ly,{children:h("welcomeScreen.defaults.center_heading")}),iy(cy,{children:[Ht(my,{}),Ht(dy,{})]})]})})})};_r.displayName="Center";var sy=({children:e})=>Ht("div",{className:"welcome-screen-center__logo excalifont welcome-screen-decor",children:e||Ht(v6,{withText:!0})});sy.displayName="Logo";var ly=({children:e})=>Ht("div",{className:"welcome-screen-center__heading welcome-screen-decor excalifont",children:e});ly.displayName="Heading";var cy=({children:e})=>Ht("div",{className:"welcome-screen-menu",children:e});cy.displayName="Menu";var dy=()=>{let e=ot();return Ht(Em,{onSelect:()=>e.executeAction(Xi),shortcut:"?",icon:Ua,children:h("helpDialog.title")})};dy.displayName="MenuItemHelp";var my=()=>{let e=fe(),t=ot();return e.viewModeEnabled?null:Ht(Em,{onSelect:()=>t.executeAction(Ja),shortcut:it("loadScene"),icon:Ga,children:h("buttons.load")})};my.displayName="MenuItemLoadScene";var C6=({onSelect:e})=>{let{t}=Ge();return Ht(Em,{shortcut:null,onSelect:e,icon:rd,children:t("labels.liveCollaboration")})};C6.displayName="MenuItemLiveCollaborationTrigger";_r.Logo=sy;_r.Heading=ly;_r.Menu=cy;_r.MenuItem=Em;_r.MenuItemLink=T6;_r.MenuItemHelp=dy;_r.MenuItemLoadScene=my;_r.MenuItemLiveCollaborationTrigger=C6;import{jsx as lc,jsxs as py}from"react/jsx-runtime";var ef=({children:e})=>{let{WelcomeScreenMenuHintTunnel:t}=at();return lc(t.In,{children:py("div",{className:"excalifont welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--menu",children:[wb,lc("div",{className:"welcome-screen-decor-hint__label",children:e||h("welcomeScreen.defaults.menuHint")})]})})};ef.displayName="MenuHint";var tf=({children:e})=>{let{WelcomeScreenToolbarHintTunnel:t}=at();return lc(t.In,{children:py("div",{className:"excalifont welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--toolbar",children:[lc("div",{className:"welcome-screen-decor-hint__label",children:e||h("welcomeScreen.defaults.toolbarHint")}),Cb]})})};tf.displayName="ToolbarHint";var of=({children:e})=>{let{WelcomeScreenHelpHintTunnel:t}=at();return lc(t.In,{children:py("div",{className:"excalifont welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--help",children:[lc("div",{children:e||h("welcomeScreen.defaults.helpHint")}),Tb]})})};of.displayName="HelpHint";import{Fragment as I6,jsx as ym,jsxs as oB}from"react/jsx-runtime";var rf=e=>ym(I6,{children:e.children||oB(I6,{children:[ym(_r,{}),ym(ef,{}),ym(tf,{}),ym(of,{})]})});rf.displayName="WelcomeScreen";rf.Center=_r;rf.Hints={MenuHint:ef,ToolbarHint:tf,HelpHint:of};var tB=rf;var rB=()=>{Array.prototype.at||Object.defineProperty(Array.prototype,"at",{value:function(e){if(e=Math.trunc(e)||0,e<0&&(e+=this.length),!(e<0||e>=this.length))return this[e]},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.findLast||Object.defineProperty(Array.prototype,"findLast",{value:function(e,t){return this.slice().reverse().find((o,r)=>e.call(t,o,this.length-r-1,this))},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(e,t){for(let o=0;o<this.length;o++)if(e.call(t,this[o],o,this))return o;return-1},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.findLastIndex||Object.defineProperty(Array.prototype,"findLastIndex",{value:function(e,t){let o=this.slice().reverse().findIndex((r,n)=>e.call(t,r,this.length-n-1,this));return o===-1?-1:this.length-o-1},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.toReversed||Object.defineProperty(Array.prototype,"toReversed",{value:function(){return this.slice().reverse()},writable:!0,enumerable:!1,configurable:!0}),Array.prototype.toSorted||Object.defineProperty(Array.prototype,"toSorted",{value:function(e){return this.slice().sort(e)},writable:!0,enumerable:!1,configurable:!0}),Element.prototype.replaceChildren||(Element.prototype.replaceChildren=function(...e){this.innerHTML="",this.append(...e)})},k6=rB;import nB from"lodash.throttle";var iB=(e,t,o)=>!!(t&&(t.id===e.editingTextElement?.id||t.id===e.resizingElement?.id||t.id===e.newElement?.id||t.version>o.version||t.version===o.version&&t.versionNonce<=o.versionNonce)),aB=nB((e,t,o)=>{if(Wt()||jr()||window?.DEBUG_FRACTIONAL_INDICES){let r=Ls(e.map(n=>({...n})));Ew(r,{shouldThrow:jr()||Wt(),includeBoundTextValidation:!0,reconciliationContext:{localElements:t,remoteElements:o}})}},1e3*60,{leading:!0,trailing:!1}),sB=(e,t,o)=>{let r=te(e),n=[],i=new Set;for(let s of t)if(!i.has(s.id)){let l=r.get(s.id),c=iB(o,l,s);l&&c?(n.push(l),i.add(l.id)):(n.push(s),i.add(s.id))}for(let s of e)i.has(s.id)||(n.push(s),i.add(s.id));let a=pp(n);return aB(a,e,t),Ls(a),a};import{jsx as uy}from"react/jsx-runtime";var M6=({children:e,icon:t})=>{let{t:o}=Ge(),{TTDDialogTriggerTunnel:r}=at(),n=Ce();return uy(r.In,{children:uy(pe.Item,{onSelect:()=>{be("ai","dialog open","ttd"),n({openDialog:{name:"ttd",tab:"text-to-diagram"}})},icon:t??H1,badge:uy(pe.Item.Badge,{children:"AI"}),children:e??o("labels.textToDiagram")})})};M6.displayName="TTDDialogTrigger";function lB(e){let t=e.get("X-Ratelimit-Limit"),o=e.get("X-Ratelimit-Remaining");return{rateLimit:t?parseInt(t,10):void 0,rateLimitRemaining:o?parseInt(o,10):void 0}}async function*A6(e){let t=new TextDecoder,o="";try{for(;;){let{done:r,value:n}=await e.read();if(r)break;o+=t.decode(n,{stream:!0});let i=o.split(`
|
|
110
|
+
`);o=i.pop()||"";for(let a of i){let s=a.trim();s&&s.startsWith("data: ")&&(yield s.slice(6))}}}finally{e.releaseLock()}}async function cB(e){let{url:t,messages:o,onChunk:r,onStreamCreated:n,extractRateLimits:i=!0,signal:a}=e;try{let s="",l={},c=null,d=await fetch(t,{method:"POST",headers:{Accept:"text/event-stream","Content-Type":"application/json"},body:JSON.stringify({messages:o}),signal:a});if(i&&(l=lB(d.headers)),!d.ok){if(d.status===429)return{...l,error:new rn({message:"Rate limit exceeded",status:429})};let m=await d.text();throw new rn({message:m||"Generation failed...",status:d.status})}let p=d.body?.getReader();if(!p)throw new rn({message:"Couldn't get reader from response body",status:500});n?.();try{for await(let m of A6(p)){if(m==="[DONE]")break;try{let u=JSON.parse(m);if(u===null)break;switch(u.type){case"content":{let b=u.delta;b&&(s+=b,r?.(b));break}case"error":c=new rn({message:u.error.message,status:500});break;case"done":break}}catch(u){console.warn("Failed to parse SSE data:",m,u)}}}catch(m){m.name==="AbortError"?c=new rn({message:"Request aborted",status:499}):c=new rn({message:m.message||"Streaming error",status:500})}return c?{...l,error:c}:s?{generatedResponse:s,error:null,...l}:{...l,error:new rn({message:"Generation failed...",status:d.status})}}catch(s){return s.name==="AbortError"?{error:new rn({message:"Request aborted",status:499})}:{error:new rn({message:s.message||"Request failed",status:500})}}}import{useLayoutEffect as dB}from"react";var mB=e=>{let t=Ke();return dB(()=>{t.setPlugins({diagramToCode:{generate:e.generate}})},[t,e.generate]),null};import{parseMermaidToExcalidraw as T4e}from"@excalidraw/mermaid-to-excalidraw";import{jsx as vm}from"react/jsx-runtime";k6();var R6e=({children:e})=>{let[t,o]=bB(null);return vm(sc.Provider,{value:t,children:vm(Qg.Provider,{value:o,children:e})})},xB=e=>{let{onExport:t,className:o,ownerDocument:r=document,onChange:n,onThemeChange:i,onIncrement:a,initialData:s,initialState:l,onExcalidrawAPI:c,onMount:d,onUnmount:p,onInitialize:m,isCollaborating:u=!1,onPointerUpdate:b,renderTopLeftUI:f,renderTopRightUI:x,langCode:v=an.code,viewModeEnabled:y,interaction:E,ui:w,activeTool:C,zenModeEnabled:I,gridModeEnabled:A,libraryReturnUrl:M,theme:N,name:P,renderCustomStats:L,onPaste:R,detectScroll:H=!0,handleKeyboardGlobally:K=!1,onLibraryChange:F,autoFocus:U=!1,generateIdForFile:V,onLinkOpen:$,generateLinkForSelection:oe,onPointerDown:re,onPointerUp:ke,onScrollChange:G,onUserFollow:Z,userToFollow:Re,onDuplicate:ve,id:Ve,children:Se,validateEmbeddable:Ze,renderEmbeddable:xe,aiEnabled:st,showDeprecatedFonts:no,renderScrollbars:Zt,viewportStatusFrame:er,currentUserControls:pi,imageOptions:wn}=e,ui=e.UIOptions?.canvasActions,pa={...e.UIOptions,canvasActions:{...vf.canvasActions,...ui},tools:{image:e.UIOptions?.tools?.image??!0}};ui?.export&&(pa.canvasActions.export.saveFileToDisk=ui.export?.saveFileToDisk??vf.canvasActions.export.saveFileToDisk),pa.canvasActions.toggleTheme===null&&(N==null||i)&&(pa.canvasActions.toggleTheme=!0);let wm={maxFileSizeBytes:wn?.maxFileSizeBytes??xa.maxFileSizeBytes,maxWidthOrHeight:wn?.maxWidthOrHeight??xa.maxWidthOrHeight},Tn=hB(Qg),Xr=fB(c);Xr.current=c;let ua=uB(nf=>{Tn?.(nf),Xr.current?.(nf)},[Tn]),Tm=typeof E=="object"&&E!==null&&E.enabled?.browserZoom===!0&&E.enabled?.navigation!==!0;return gB(()=>{if((async()=>{await import("canvas-roundrect-polyfill")})(),Tm)return;let hy=af=>{typeof af.scale=="number"&&af.scale!==1&&af.preventDefault()};return r.addEventListener("touchmove",hy,{passive:!1}),()=>{r.removeEventListener("touchmove",hy)}},[Tm,r]),vm(j2,{store:yt,children:vm(b6,{langCode:v,theme:N,children:vm(f6,{id:Ve,onExport:t,className:o,ownerDocument:r,onChange:n,onThemeChange:i,onIncrement:a,initialData:s,initialState:l,onExcalidrawAPI:ua,onMount:d,onUnmount:p,onInitialize:m,isCollaborating:u,onPointerUpdate:b,renderTopLeftUI:f,renderTopRightUI:x,langCode:v,viewModeEnabled:y,interaction:E,ui:w,activeTool:C,zenModeEnabled:I,gridModeEnabled:A,libraryReturnUrl:M,theme:N,name:P,renderCustomStats:L,UIOptions:pa,onPaste:R,detectScroll:H,handleKeyboardGlobally:K,onLibraryChange:F,autoFocus:U,generateIdForFile:V,onLinkOpen:$,generateLinkForSelection:oe,onPointerDown:re,onPointerUp:ke,onScrollChange:G,onUserFollow:Z,userToFollow:Re,onDuplicate:ve,validateEmbeddable:Ze,renderEmbeddable:xe,aiEnabled:st!==!1,showDeprecatedFonts:no,renderScrollbars:Zt,viewportStatusFrame:er,currentUserControls:pi,imageOptions:wm,children:Se})})})},EB=(e,t)=>{if(e.children!==t.children)return!1;let{initialData:o,UIOptions:r={},imageOptions:n,interaction:i,ui:a,activeTool:s,...l}=e,{initialData:c,UIOptions:d={},imageOptions:p,interaction:m,ui:u,activeTool:b,...f}=t;if(!(s===b||s?.type===b?.type&&(s?.type==="custom"?s.customType:null)===(b?.type==="custom"?b.customType:null))||!(i===m||typeof i=="object"&&i!==null&&typeof m=="object"&&m!==null&&!!i.enabled?.links==!!m.enabled?.links&&!!i.enabled?.embeds==!!m.enabled?.embeds&&!!i.enabled?.interactiveContent==!!m.enabled?.interactiveContent&&!!i.enabled?.navigation==!!m.enabled?.navigation&&!!i.enabled?.browserZoom==!!m.enabled?.browserZoom&&!!i.enabled?.tools?.laser==!!m.enabled?.tools?.laser&&!!i.enabled?.tools?.custom==!!m.enabled?.tools?.custom)||!(a===u||typeof a=="object"&&a!==null&&typeof u=="object"&&u!==null&&!!a.enabled?.zoom==!!u.enabled?.zoom&&!!a.enabled?.scrollBackToContent==!!u.enabled?.scrollBackToContent))return!1;let E=Object.keys(r),w=Object.keys(d);if(E.length!==w.length)return!1;let C=E.every(A=>A==="getFormFactor"?!0:A==="canvasActions"?Object.keys(r.canvasActions).every(N=>N==="export"&&r?.canvasActions?.export&&d?.canvasActions?.export?r.canvasActions.export.saveFileToDisk===d.canvasActions.export.saveFileToDisk:r?.canvasActions?.[N]===d?.canvasActions?.[N]):r[A]===d[A]),I=(n?.maxWidthOrHeight??xa.maxWidthOrHeight)===(p?.maxWidthOrHeight??xa.maxWidthOrHeight)&&(n?.maxFileSizeBytes??xa.maxFileSizeBytes)===(p?.maxFileSizeBytes??xa.maxFileSizeBytes);return C&&I&&Dt(l,f)},yB=pB.memo(xB,EB);yB.displayName="Excalidraw";function N6e(e){return nl(e,!1)}export{mo as Button,O as CaptureUpdateAction,PD as CommandPalette,ff as DEFAULT_LASER_COLOR,cb as DEFAULT_OVERSCROLL,Ag as DefaultSidebar,mB as DiagramToCodePlugin,Xa as Ellipsify,yB as Excalidraw,sc as ExcalidrawAPIContext,R6e as ExcalidrawAPIProvider,pt as FONT_FAMILY,Hn as Fonts,XO as Footer,jO as LiveCollaborationTrigger,ue as MIME_TYPES,yo as MainMenu,Pt as ROUNDNESS,Tr as Sidebar,cm as Stats,Q as THEME,Ug as TTDDialog,M6 as TTDDialogTrigger,cB as TTDStreamFetch,Oy as UserIdleState,tB as WelcomeScreen,tk as actions,Ut as applyDarkModeFilter,_n as bumpVersion,N6 as cleanAppStateForExport,R6 as clearAppStateForLocalStorage,Ns as convertToExcalidrawElements,an as defaultLang,P6 as duplicateElement,Bn as duplicateElements,_6 as elementsOverlappingBBox,_S as exportToBlob,$c as exportToCanvas,H_ as exportToClipboard,Tl as exportToSvg,Te as getCommonBounds,fb as getDataURL,Un as getDefaultAppState,kf as getFormFactor,Ih as getLibraryItemsHash,me as getNonDeletedElements,D6 as getSceneVersion,Zr as getStrokeWidthByKey,kc as getTextFromElements,Xf as getVisibleSceneBounds,ab as hashElementsVersion,sb as hashString,oT as icons,Ra as isElementLink,tn as isInvisiblySmallElement,Me as isLinearElement,Ol as isSpreadsheetValidForChartType,Us as languages,gn as libraryItemsAtom,Fp as loadFromBlob,gb as loadLibraryFromBlob,hb as loadSceneOrLibraryFromBlob,FS as mergeLibraryItems,bo as mutateElement,se as newElementWith,Rr as normalizeLink,a0 as parseLibraryTokensFromUrl,T4e as parseMermaidToExcalidraw,A6 as parseSSEStream,sB as reconcileElements,U0 as renderSpreadsheet,Kc as restoreAppState,B6 as restoreElement,Pi as restoreElements,Xc as restoreLibraryItems,Gt as sceneCoordsToViewportCoords,Gc as serializeAsJSON,O6 as serializeLibraryAsJSON,L6 as setCustomTextMetricsProvider,xc as throttleRAF,ng as tryParseSpreadsheet,Le as useEditorInterface,Wu as useExcalidrawAPI,N6e as useExcalidrawStateValue,Y_ as useHandleLibrary,Ge as useI18n,wL as useOnExcalidrawStateChange,Kt as useStylesPanelMode,ze as viewportCoordsToSceneCoords,Oa as zoomToFitBounds};
|