@excalidraw/excalidraw 0.18.0-2a82821 → 0.18.0-2b1c2a9
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 +121 -8
- package/dist/dev/chunk-72CYJXY3.js +69 -0
- package/dist/dev/chunk-72CYJXY3.js.map +7 -0
- package/dist/dev/{chunk-T3GRJXT6.js → chunk-KKZSEXXE.js} +397 -125
- package/dist/dev/chunk-KKZSEXXE.js.map +7 -0
- package/dist/dev/{chunk-KY5OFS4H.js → chunk-ZQ2W3FVU.js} +19 -2
- package/dist/dev/chunk-ZQ2W3FVU.js.map +7 -0
- package/dist/dev/data/{image-7TCIBRTP.js → image-ORD6XJVB.js} +2 -2
- package/dist/dev/index.css +615 -630
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +10557 -7110
- package/dist/dev/index.js.map +4 -4
- package/dist/dev/locales/{ar-SA-AGVJN2FU.js → ar-SA-EW44IW4V.js} +91 -46
- package/dist/dev/locales/ar-SA-EW44IW4V.js.map +7 -0
- package/dist/dev/locales/{az-AZ-62IXPX5D.js → az-AZ-AI7WAYA2.js} +49 -4
- package/dist/dev/locales/az-AZ-AI7WAYA2.js.map +7 -0
- package/dist/dev/locales/{bg-BG-UBDZF4KA.js → bg-BG-43ZNGDXF.js} +49 -4
- package/dist/dev/locales/bg-BG-43ZNGDXF.js.map +7 -0
- package/dist/dev/locales/{bn-BD-4TAUVZOD.js → bn-BD-PU4CN7NP.js} +49 -4
- package/dist/dev/locales/bn-BD-PU4CN7NP.js.map +7 -0
- package/dist/dev/locales/{bn-IN-PUGL2LDE.js → bn-IN-54CF43JL.js} +49 -4
- package/dist/dev/locales/bn-IN-54CF43JL.js.map +7 -0
- package/dist/dev/locales/{ca-ES-GEEW5L7T.js → ca-ES-RHJO3QDO.js} +50 -5
- package/dist/dev/locales/ca-ES-RHJO3QDO.js.map +7 -0
- package/dist/dev/locales/{cs-CZ-LNVE3QM5.js → cs-CZ-ZRSAO3BA.js} +49 -4
- package/dist/dev/locales/cs-CZ-ZRSAO3BA.js.map +7 -0
- package/dist/dev/locales/{da-DK-CAYJG7FJ.js → da-DK-OAB6DEJX.js} +49 -4
- package/dist/dev/locales/da-DK-OAB6DEJX.js.map +7 -0
- package/dist/dev/locales/{de-CH-GCXOD4LK.js → de-CH-QF7JLXTF.js} +157 -112
- package/dist/dev/locales/de-CH-QF7JLXTF.js.map +7 -0
- package/dist/dev/locales/{de-DE-CGDBECYD.js → de-DE-5ZO4KOPT.js} +157 -112
- package/dist/dev/locales/de-DE-5ZO4KOPT.js.map +7 -0
- package/dist/dev/locales/{el-GR-G5QZC24A.js → el-GR-F74ZSUEO.js} +50 -5
- package/dist/dev/locales/el-GR-F74ZSUEO.js.map +7 -0
- package/dist/dev/locales/{en-BYFCZL7X.js → en-DSRJ5DKP.js} +4 -2
- package/dist/dev/locales/{es-ES-UMEOH76W.js → es-ES-3B3IENPS.js} +144 -99
- package/dist/dev/locales/es-ES-3B3IENPS.js.map +7 -0
- package/dist/dev/locales/{eu-ES-IWRZXJC5.js → eu-ES-NH447TVU.js} +203 -158
- package/dist/dev/locales/eu-ES-NH447TVU.js.map +7 -0
- package/dist/dev/locales/{fa-IR-QOYVIIJA.js → fa-IR-GHKV6Q2J.js} +58 -13
- package/dist/dev/locales/fa-IR-GHKV6Q2J.js.map +7 -0
- package/dist/dev/locales/{fi-FI-BXRW65OA.js → fi-FI-ZXSYWCC4.js} +49 -4
- package/dist/dev/locales/fi-FI-ZXSYWCC4.js.map +7 -0
- package/dist/dev/locales/{fr-FR-R2QH5VCW.js → fr-FR-RJSOSEYS.js} +88 -43
- package/dist/dev/locales/fr-FR-RJSOSEYS.js.map +7 -0
- package/dist/dev/locales/{gl-ES-4ES3ZADP.js → gl-ES-NAUVMVFY.js} +49 -4
- package/dist/dev/locales/gl-ES-NAUVMVFY.js.map +7 -0
- package/dist/dev/locales/{he-IL-TRQRRYPH.js → he-IL-JBKWWR75.js} +145 -100
- package/dist/dev/locales/he-IL-JBKWWR75.js.map +7 -0
- package/dist/dev/locales/{hi-IN-U46BOJEC.js → hi-IN-SD773MVZ.js} +50 -5
- package/dist/dev/locales/hi-IN-SD773MVZ.js.map +7 -0
- package/dist/dev/locales/{hu-HU-JDULJ6XL.js → hu-HU-OTA7GOAV.js} +49 -4
- package/dist/dev/locales/hu-HU-OTA7GOAV.js.map +7 -0
- package/dist/dev/locales/{id-ID-BLIXNCUT.js → id-ID-2JAZWVTQ.js} +138 -93
- package/dist/dev/locales/id-ID-2JAZWVTQ.js.map +7 -0
- package/dist/dev/locales/{it-IT-6TBW7RUK.js → it-IT-GHWUAT77.js} +54 -9
- package/dist/dev/locales/it-IT-GHWUAT77.js.map +7 -0
- package/dist/dev/locales/{ja-JP-6HYAQFYX.js → ja-JP-YMGRGBPS.js} +189 -144
- package/dist/dev/locales/ja-JP-YMGRGBPS.js.map +7 -0
- package/dist/dev/locales/{kaa-Z5UP62XJ.js → kaa-RRE7XUCW.js} +49 -4
- package/dist/dev/locales/kaa-RRE7XUCW.js.map +7 -0
- package/dist/dev/locales/{kab-KAB-Z7STWQKS.js → kab-KAB-ZCYVOJU4.js} +49 -4
- package/dist/dev/locales/kab-KAB-ZCYVOJU4.js.map +7 -0
- package/dist/dev/locales/{kk-KZ-BWHY45DX.js → kk-KZ-TO6XEFJC.js} +49 -4
- package/dist/dev/locales/kk-KZ-TO6XEFJC.js.map +7 -0
- package/dist/dev/locales/{km-KH-HGLNWNRU.js → km-KH-3HTDL5HB.js} +49 -4
- package/dist/dev/locales/km-KH-3HTDL5HB.js.map +7 -0
- package/dist/dev/locales/{ko-KR-CO36WKPC.js → ko-KR-O4L4O7L6.js} +133 -88
- package/dist/dev/locales/ko-KR-O4L4O7L6.js.map +7 -0
- package/dist/dev/locales/{ku-TR-AACVIARC.js → ku-TR-AFJWDY67.js} +49 -4
- package/dist/dev/locales/ku-TR-AFJWDY67.js.map +7 -0
- package/dist/dev/locales/{lt-LT-CFYYFLDV.js → lt-LT-7QOT2VDQ.js} +49 -4
- package/dist/dev/locales/lt-LT-7QOT2VDQ.js.map +7 -0
- package/dist/dev/locales/{lv-LV-QCBBOFFU.js → lv-LV-WV6C4NYF.js} +49 -4
- package/dist/dev/locales/lv-LV-WV6C4NYF.js.map +7 -0
- package/dist/dev/locales/{mr-IN-B2CM5GK5.js → mr-IN-3TLYWOEI.js} +52 -7
- package/dist/dev/locales/mr-IN-3TLYWOEI.js.map +7 -0
- package/dist/dev/locales/{my-MM-756BNN36.js → my-MM-NNL2QJT3.js} +49 -4
- package/dist/dev/locales/my-MM-NNL2QJT3.js.map +7 -0
- package/dist/dev/locales/{nb-NO-5BLHQI4J.js → nb-NO-PG3XLMEV.js} +50 -5
- package/dist/dev/locales/nb-NO-PG3XLMEV.js.map +7 -0
- package/dist/dev/locales/{nl-NL-225BLGAH.js → nl-NL-MMOYEKKQ.js} +59 -14
- package/dist/dev/locales/nl-NL-MMOYEKKQ.js.map +7 -0
- package/dist/dev/locales/{nn-NO-4J7MR6GH.js → nn-NO-AAC2I2YX.js} +49 -4
- package/dist/dev/locales/nn-NO-AAC2I2YX.js.map +7 -0
- package/dist/dev/locales/{oc-FR-XCETH7KF.js → oc-FR-SR6MFB4N.js} +50 -5
- package/dist/dev/locales/oc-FR-SR6MFB4N.js.map +7 -0
- package/dist/dev/locales/{pa-IN-32NBAN5L.js → pa-IN-ADGMQLQI.js} +49 -4
- package/dist/dev/locales/pa-IN-ADGMQLQI.js.map +7 -0
- package/dist/dev/locales/{percentages-ZRLRVMSI.js → percentages-DKKGPYTW.js} +2 -2
- package/dist/dev/locales/{pl-PL-R6OJ54BT.js → pl-PL-FNIPTMVP.js} +50 -5
- package/dist/dev/locales/pl-PL-FNIPTMVP.js.map +7 -0
- package/dist/dev/locales/{pt-BR-7AFGAKGR.js → pt-BR-67FMCDNE.js} +136 -91
- package/dist/dev/locales/pt-BR-67FMCDNE.js.map +7 -0
- package/dist/dev/locales/{pt-PT-S6BMW6MY.js → pt-PT-4G3GI4SF.js} +135 -90
- package/dist/dev/locales/pt-PT-4G3GI4SF.js.map +7 -0
- package/dist/dev/locales/{ro-RO-4JVGQHS2.js → ro-RO-CUZFN555.js} +54 -9
- package/dist/dev/locales/ro-RO-CUZFN555.js.map +7 -0
- package/dist/dev/locales/{ru-RU-IESI752T.js → ru-RU-4GHINTII.js} +56 -11
- package/dist/dev/locales/ru-RU-4GHINTII.js.map +7 -0
- package/dist/dev/locales/{si-LK-H75E7PKD.js → si-LK-SSNT7T4A.js} +50 -5
- package/dist/dev/locales/si-LK-SSNT7T4A.js.map +7 -0
- package/dist/dev/locales/{sk-SK-EUK2NR2F.js → sk-SK-J7TKZQEH.js} +87 -42
- package/dist/dev/locales/sk-SK-J7TKZQEH.js.map +7 -0
- package/dist/dev/locales/{sl-SI-AKW7R5PW.js → sl-SI-SIBF67NE.js} +50 -5
- package/dist/dev/locales/sl-SI-SIBF67NE.js.map +7 -0
- package/dist/dev/locales/{sv-SE-QIBOOXLJ.js → sv-SE-YTR46NVM.js} +131 -86
- package/dist/dev/locales/sv-SE-YTR46NVM.js.map +7 -0
- package/dist/dev/locales/{ta-IN-LBK2NQ5K.js → ta-IN-7AW6CTGA.js} +49 -4
- package/dist/dev/locales/ta-IN-7AW6CTGA.js.map +7 -0
- package/dist/dev/locales/{th-TH-YJ2E6GVT.js → th-TH-DTLYJYKV.js} +94 -49
- package/dist/dev/locales/th-TH-DTLYJYKV.js.map +7 -0
- package/dist/dev/locales/{tr-TR-Y5GO2XJW.js → tr-TR-UDQGNXAG.js} +126 -81
- package/dist/dev/locales/tr-TR-UDQGNXAG.js.map +7 -0
- package/dist/dev/locales/{uk-UA-XYAFHHJW.js → uk-UA-25HL2NCU.js} +109 -64
- package/dist/dev/locales/uk-UA-25HL2NCU.js.map +7 -0
- package/dist/dev/locales/{uz-UZ-LF3CBRYE.js → uz-UZ-OPSBAY4H.js} +49 -4
- package/dist/dev/locales/uz-UZ-OPSBAY4H.js.map +7 -0
- package/dist/dev/locales/{vi-VN-WDPZEUOJ.js → vi-VN-DK367UGA.js} +49 -4
- package/dist/dev/locales/vi-VN-DK367UGA.js.map +7 -0
- package/dist/dev/locales/{zh-CN-SZ37453H.js → zh-CN-QCVKNWUH.js} +88 -43
- package/dist/dev/locales/zh-CN-QCVKNWUH.js.map +7 -0
- package/dist/dev/locales/{zh-HK-QDQ5QNBC.js → zh-HK-WFGYHWPG.js} +49 -4
- package/dist/dev/locales/zh-HK-WFGYHWPG.js.map +7 -0
- package/dist/dev/locales/{zh-TW-CYU6GFBV.js → zh-TW-WHQS4ZSD.js} +134 -89
- package/dist/dev/locales/zh-TW-WHQS4ZSD.js.map +7 -0
- package/dist/prod/chunk-5XKZK2GL.js +1 -0
- package/dist/prod/chunk-COKSSPJQ.js +4 -0
- package/dist/prod/chunk-ZPMXAHWN.js +12 -0
- package/dist/prod/data/{image-2UP6PNYP.js → image-52MW35OO.js} +1 -1
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +68 -99
- package/dist/prod/locales/ar-SA-5WIASEJP.js +10 -0
- 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-2RFA324Y.js +1 -0
- 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-FIYUE2GQ.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-EOMR5R3I.js +8 -0
- package/dist/prod/locales/it-IT-FC2VTM3L.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-IHMV2US7.js +7 -0
- 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-Q7USCRWZ.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-JRML4FIH.js +6 -0
- package/dist/prod/locales/sv-SE-4ZPKFFXF.js +12 -0
- package/dist/prod/locales/ta-IN-V6NHHU6Z.js +6 -0
- package/dist/prod/locales/th-TH-P7CTMGDK.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/types/common/src/colors.d.ts +19 -0
- package/dist/types/common/src/constants.d.ts +3 -0
- package/dist/types/common/src/keys.d.ts +2 -0
- package/dist/types/common/src/points.d.ts +1 -1
- package/dist/types/common/src/utils.d.ts +1 -43
- package/dist/types/element/src/Scene.d.ts +1 -1
- package/dist/types/element/src/align.d.ts +2 -2
- package/dist/types/element/src/arrowEndpointText.d.ts +49 -0
- package/dist/types/element/src/arrows/focus.d.ts +5 -2
- package/dist/types/element/src/binding.d.ts +17 -8
- package/dist/types/element/src/bounds.d.ts +5 -9
- package/dist/types/element/src/bucketFill.d.ts +110 -0
- package/dist/types/element/src/collision.d.ts +1 -1
- package/dist/types/element/src/comparisons.d.ts +4 -4
- package/dist/types/element/src/convertToShape.d.ts +23 -0
- package/dist/types/element/src/distribute.d.ts +2 -2
- package/dist/types/element/src/dragElements.d.ts +27 -0
- package/dist/types/element/src/duplicate.d.ts +3 -3
- package/dist/types/element/src/embeddable.d.ts +2 -2
- package/dist/types/element/src/flowchart.d.ts +7 -7
- package/dist/types/element/src/fractionalIndex.d.ts +2 -2
- package/dist/types/element/src/frame.d.ts +4 -4
- package/dist/types/element/src/groups.d.ts +9 -9
- package/dist/types/element/src/index.d.ts +4 -1
- package/dist/types/element/src/linearElementEditor.d.ts +27 -10
- package/dist/types/element/src/newElement.d.ts +14 -0
- package/dist/types/element/src/renderElement.d.ts +0 -3
- package/dist/types/element/src/resizeElements.d.ts +2 -2
- package/dist/types/element/src/selection.d.ts +5 -5
- package/dist/types/element/src/shape.d.ts +12 -0
- package/dist/types/element/src/sortElements.d.ts +10 -0
- package/dist/types/element/src/textElement.d.ts +13 -9
- package/dist/types/element/src/transform.d.ts +2 -2
- package/dist/types/element/src/typeChecks.d.ts +25 -25
- package/dist/types/element/src/types.d.ts +9 -1
- package/dist/types/element/src/utils.d.ts +7 -3
- package/dist/types/element/src/zindex.d.ts +2 -2
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +36 -12
- package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +24 -8
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +146 -931
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +24 -8
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +12 -4
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +38 -13
- package/dist/types/excalidraw/actions/actionDeselect.d.ts +9 -4
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -3
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +12 -4
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +25 -9
- package/dist/types/excalidraw/actions/actionExport.d.ts +26 -10
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +1 -0
- package/dist/types/excalidraw/actions/actionFrame.d.ts +48 -197
- package/dist/types/excalidraw/actions/actionGroup.d.ts +39 -23
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +16 -6
- package/dist/types/excalidraw/actions/actionLink.d.ts +13 -5
- package/dist/types/excalidraw/actions/actionMenu.d.ts +12 -4
- package/dist/types/excalidraw/actions/actionProperties.d.ts +43 -24
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +17 -9
- package/dist/types/excalidraw/actions/actionStyles.d.ts +12 -4
- package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +13 -5
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +16 -9
- package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +13 -5
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +13 -5
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +16 -9
- package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +13 -5
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +14 -6
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +13 -5
- package/dist/types/excalidraw/actions/index.d.ts +1 -2
- package/dist/types/excalidraw/actions/manager.d.ts +1 -0
- package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
- package/dist/types/excalidraw/actions/types.d.ts +8 -4
- package/dist/types/excalidraw/appState.d.ts +9 -4
- package/dist/types/excalidraw/components/Actions.d.ts +17 -12
- package/dist/types/excalidraw/components/App.arrowText.d.ts +104 -0
- package/dist/types/excalidraw/components/App.bucketFill.d.ts +48 -0
- package/dist/types/excalidraw/components/App.cursor.d.ts +38 -0
- package/dist/types/excalidraw/components/App.d.ts +372 -67
- package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
- package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
- package/dist/types/excalidraw/components/App.viewport.d.ts +73 -0
- package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +9 -3
- package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +3 -1
- package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +3 -1
- package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +9 -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/keyboardNavHandlers.d.ts +2 -1
- package/dist/types/excalidraw/components/ColorPicker/topPicksDnD.d.ts +31 -0
- package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +1 -1
- package/dist/types/excalidraw/components/CursorHint.d.ts +46 -0
- package/dist/types/excalidraw/components/{ToolButton.d.ts → IconButton.d.ts} +16 -19
- package/dist/types/excalidraw/components/Island.d.ts +7 -0
- package/dist/types/excalidraw/components/LaserPointerButton.d.ts +2 -4
- package/dist/types/excalidraw/components/LayerUI.d.ts +5 -2
- package/dist/types/excalidraw/components/LockButton.d.ts +3 -4
- package/dist/types/excalidraw/components/MagicButton.d.ts +0 -2
- package/dist/types/excalidraw/components/MobileMenu.d.ts +4 -4
- package/dist/types/excalidraw/components/MobileToolbar.d.ts +9 -0
- package/dist/types/excalidraw/components/PenModeButton.d.ts +2 -5
- package/dist/types/excalidraw/components/Popover.d.ts +1 -3
- package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
- package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/DragInput.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/Position.d.ts +3 -3
- package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
- package/dist/types/excalidraw/components/TTDDialog/utils/TTDStreamFetch.d.ts +1 -0
- package/dist/types/excalidraw/components/ToolPopover.d.ts +3 -6
- package/dist/types/excalidraw/components/Toolbar.d.ts +11 -0
- package/dist/types/excalidraw/components/Tools.d.ts +146 -0
- 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/InteractiveCanvas.d.ts +2 -0
- package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
- package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +2 -2
- package/dist/types/excalidraw/components/icons.d.ts +4 -1
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +1 -1
- package/dist/types/excalidraw/components/positionElementBesideCursor.d.ts +26 -0
- package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +39 -0
- package/dist/types/excalidraw/data/blob.d.ts +28 -12
- package/dist/types/excalidraw/data/index.d.ts +4 -4
- package/dist/types/excalidraw/data/json.d.ts +20 -12
- package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
- 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 +4 -2
- package/dist/types/excalidraw/lasso/utils.d.ts +2 -0
- package/dist/types/excalidraw/renderer/animation.d.ts +1 -0
- package/dist/types/excalidraw/renderer/helpers.d.ts +7 -0
- package/dist/types/excalidraw/renderer/interactiveScene.d.ts +1 -3
- package/dist/types/excalidraw/scene/Renderer.d.ts +12 -11
- package/dist/types/excalidraw/scene/export.d.ts +3 -3
- package/dist/types/excalidraw/scene/index.d.ts +1 -1
- package/dist/types/excalidraw/scene/types.d.ts +4 -3
- package/dist/types/excalidraw/snapping.d.ts +7 -7
- package/dist/types/excalidraw/types.d.ts +410 -20
- package/dist/types/excalidraw/viewport.d.ts +275 -0
- package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +2 -3
- package/dist/types/laser-pointer/src/state.d.ts +1 -0
- package/dist/types/math/src/curve.d.ts +19 -12
- package/dist/types/math/src/index.d.ts +1 -0
- package/dist/types/math/src/pca.d.ts +79 -0
- package/dist/types/math/src/polygon.d.ts +25 -1
- package/dist/types/math/src/segment.d.ts +6 -0
- package/dist/types/utils/src/export.d.ts +3 -3
- package/package.json +4 -4
- package/dist/dev/chunk-KY5OFS4H.js.map +0 -7
- package/dist/dev/chunk-T3GRJXT6.js.map +0 -7
- package/dist/dev/chunk-URPEKBQ3.js +0 -69
- package/dist/dev/chunk-URPEKBQ3.js.map +0 -7
- package/dist/dev/locales/ar-SA-AGVJN2FU.js.map +0 -7
- package/dist/dev/locales/az-AZ-62IXPX5D.js.map +0 -7
- package/dist/dev/locales/bg-BG-UBDZF4KA.js.map +0 -7
- package/dist/dev/locales/bn-BD-4TAUVZOD.js.map +0 -7
- package/dist/dev/locales/bn-IN-PUGL2LDE.js.map +0 -7
- package/dist/dev/locales/ca-ES-GEEW5L7T.js.map +0 -7
- package/dist/dev/locales/cs-CZ-LNVE3QM5.js.map +0 -7
- package/dist/dev/locales/da-DK-CAYJG7FJ.js.map +0 -7
- package/dist/dev/locales/de-CH-GCXOD4LK.js.map +0 -7
- package/dist/dev/locales/de-DE-CGDBECYD.js.map +0 -7
- package/dist/dev/locales/el-GR-G5QZC24A.js.map +0 -7
- package/dist/dev/locales/es-ES-UMEOH76W.js.map +0 -7
- package/dist/dev/locales/eu-ES-IWRZXJC5.js.map +0 -7
- package/dist/dev/locales/fa-IR-QOYVIIJA.js.map +0 -7
- package/dist/dev/locales/fi-FI-BXRW65OA.js.map +0 -7
- package/dist/dev/locales/fr-FR-R2QH5VCW.js.map +0 -7
- package/dist/dev/locales/gl-ES-4ES3ZADP.js.map +0 -7
- package/dist/dev/locales/he-IL-TRQRRYPH.js.map +0 -7
- package/dist/dev/locales/hi-IN-U46BOJEC.js.map +0 -7
- package/dist/dev/locales/hu-HU-JDULJ6XL.js.map +0 -7
- package/dist/dev/locales/id-ID-BLIXNCUT.js.map +0 -7
- package/dist/dev/locales/it-IT-6TBW7RUK.js.map +0 -7
- package/dist/dev/locales/ja-JP-6HYAQFYX.js.map +0 -7
- package/dist/dev/locales/kaa-Z5UP62XJ.js.map +0 -7
- package/dist/dev/locales/kab-KAB-Z7STWQKS.js.map +0 -7
- package/dist/dev/locales/kk-KZ-BWHY45DX.js.map +0 -7
- package/dist/dev/locales/km-KH-HGLNWNRU.js.map +0 -7
- package/dist/dev/locales/ko-KR-CO36WKPC.js.map +0 -7
- package/dist/dev/locales/ku-TR-AACVIARC.js.map +0 -7
- package/dist/dev/locales/lt-LT-CFYYFLDV.js.map +0 -7
- package/dist/dev/locales/lv-LV-QCBBOFFU.js.map +0 -7
- package/dist/dev/locales/mr-IN-B2CM5GK5.js.map +0 -7
- package/dist/dev/locales/my-MM-756BNN36.js.map +0 -7
- package/dist/dev/locales/nb-NO-5BLHQI4J.js.map +0 -7
- package/dist/dev/locales/nl-NL-225BLGAH.js.map +0 -7
- package/dist/dev/locales/nn-NO-4J7MR6GH.js.map +0 -7
- package/dist/dev/locales/oc-FR-XCETH7KF.js.map +0 -7
- package/dist/dev/locales/pa-IN-32NBAN5L.js.map +0 -7
- package/dist/dev/locales/pl-PL-R6OJ54BT.js.map +0 -7
- package/dist/dev/locales/pt-BR-7AFGAKGR.js.map +0 -7
- package/dist/dev/locales/pt-PT-S6BMW6MY.js.map +0 -7
- package/dist/dev/locales/ro-RO-4JVGQHS2.js.map +0 -7
- package/dist/dev/locales/ru-RU-IESI752T.js.map +0 -7
- package/dist/dev/locales/si-LK-H75E7PKD.js.map +0 -7
- package/dist/dev/locales/sk-SK-EUK2NR2F.js.map +0 -7
- package/dist/dev/locales/sl-SI-AKW7R5PW.js.map +0 -7
- package/dist/dev/locales/sv-SE-QIBOOXLJ.js.map +0 -7
- package/dist/dev/locales/ta-IN-LBK2NQ5K.js.map +0 -7
- package/dist/dev/locales/th-TH-YJ2E6GVT.js.map +0 -7
- package/dist/dev/locales/tr-TR-Y5GO2XJW.js.map +0 -7
- package/dist/dev/locales/uk-UA-XYAFHHJW.js.map +0 -7
- package/dist/dev/locales/uz-UZ-LF3CBRYE.js.map +0 -7
- package/dist/dev/locales/vi-VN-WDPZEUOJ.js.map +0 -7
- package/dist/dev/locales/zh-CN-SZ37453H.js.map +0 -7
- package/dist/dev/locales/zh-HK-QDQ5QNBC.js.map +0 -7
- package/dist/dev/locales/zh-TW-CYU6GFBV.js.map +0 -7
- package/dist/prod/chunk-2HD5NY2D.js +0 -4
- package/dist/prod/chunk-3PELD44J.js +0 -1
- package/dist/prod/chunk-RLJP2BVF.js +0 -12
- package/dist/prod/locales/ar-SA-NXDWD63E.js +0 -8
- package/dist/prod/locales/az-AZ-MXSORGZV.js +0 -1
- package/dist/prod/locales/bg-BG-O6MV2KSF.js +0 -5
- package/dist/prod/locales/bn-BD-T2VJNT7N.js +0 -3
- package/dist/prod/locales/bn-IN-MMW2ORAC.js +0 -3
- package/dist/prod/locales/ca-ES-MKBCGNOG.js +0 -8
- package/dist/prod/locales/cs-CZ-V77HGUP7.js +0 -7
- package/dist/prod/locales/da-DK-I5RFNTM4.js +0 -2
- package/dist/prod/locales/de-CH-WLRDEVBV.js +0 -7
- package/dist/prod/locales/de-DE-DTI4WUSC.js +0 -7
- package/dist/prod/locales/el-GR-ZXDJ2OS4.js +0 -7
- package/dist/prod/locales/en-W2XZHOH3.js +0 -1
- package/dist/prod/locales/es-ES-DYQHAD43.js +0 -7
- package/dist/prod/locales/eu-ES-QDSYU5Y3.js +0 -7
- package/dist/prod/locales/fa-IR-26LZG4PM.js +0 -9
- package/dist/prod/locales/fi-FI-6YS4KDE4.js +0 -6
- package/dist/prod/locales/fr-FR-BRLLPTZC.js +0 -12
- package/dist/prod/locales/gl-ES-OKUZTLYG.js +0 -6
- package/dist/prod/locales/he-IL-26MGYIU7.js +0 -8
- package/dist/prod/locales/hi-IN-Q4ZOGTP2.js +0 -3
- package/dist/prod/locales/hu-HU-P2OXPSN5.js +0 -3
- package/dist/prod/locales/id-ID-2EIKXYN6.js +0 -8
- package/dist/prod/locales/it-IT-4CFKVXI2.js +0 -12
- package/dist/prod/locales/ja-JP-MAND2Z4V.js +0 -7
- package/dist/prod/locales/kaa-HQRTCXTJ.js +0 -1
- package/dist/prod/locales/kab-KAB-JKIKKTGH.js +0 -4
- package/dist/prod/locales/kk-KZ-HXQ63ZFC.js +0 -1
- package/dist/prod/locales/km-KH-PKL3LSGX.js +0 -7
- package/dist/prod/locales/ko-KR-KXLREZX3.js +0 -5
- package/dist/prod/locales/ku-TR-MJ4IER3X.js +0 -6
- package/dist/prod/locales/lt-LT-H6WFQ6FJ.js +0 -3
- package/dist/prod/locales/lv-LV-GOCK6SJW.js +0 -4
- package/dist/prod/locales/mr-IN-IXVLDMEQ.js +0 -9
- package/dist/prod/locales/my-MM-YG6MYTTD.js +0 -1
- package/dist/prod/locales/nb-NO-XGWJISD2.js +0 -8
- package/dist/prod/locales/nl-NL-XVDVCPNC.js +0 -13
- package/dist/prod/locales/nn-NO-EMX5MJX5.js +0 -4
- package/dist/prod/locales/oc-FR-ROEINTVO.js +0 -4
- package/dist/prod/locales/pa-IN-ZYN6SUDY.js +0 -4
- package/dist/prod/locales/percentages-5DKR754L.js +0 -1
- package/dist/prod/locales/pl-PL-6VTG7PHC.js +0 -12
- package/dist/prod/locales/pt-BR-5YFKRR5G.js +0 -6
- package/dist/prod/locales/pt-PT-GEIXXZ67.js +0 -8
- package/dist/prod/locales/ro-RO-E2P6TFZI.js +0 -12
- package/dist/prod/locales/ru-RU-YBIIY43T.js +0 -10
- package/dist/prod/locales/si-LK-673C2CI2.js +0 -1
- package/dist/prod/locales/sk-SK-CKZHQ4AP.js +0 -7
- package/dist/prod/locales/sl-SI-557H2GWM.js +0 -6
- package/dist/prod/locales/sv-SE-XOPKKDWS.js +0 -8
- package/dist/prod/locales/ta-IN-XBH7DQI3.js +0 -6
- package/dist/prod/locales/th-TH-TOCWH3R4.js +0 -1
- package/dist/prod/locales/tr-TR-GXW6CYY5.js +0 -4
- package/dist/prod/locales/uk-UA-IJKTNUDG.js +0 -6
- package/dist/prod/locales/uz-UZ-TBZZEA4V.js +0 -1
- package/dist/prod/locales/vi-VN-MULSGNVB.js +0 -7
- package/dist/prod/locales/zh-CN-MVX3E32U.js +0 -11
- package/dist/prod/locales/zh-HK-JNU5RLIE.js +0 -1
- package/dist/prod/locales/zh-TW-LENVCA6T.js +0 -9
- package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +0 -172
- package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +0 -10
- package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
- package/dist/types/excalidraw/components/MobileToolBar.d.ts +0 -10
- package/dist/types/excalidraw/components/shapes.d.ts +0 -270
- package/dist/types/excalidraw/cursor.d.ts +0 -5
- package/dist/types/excalidraw/scene/scroll.d.ts +0 -18
- package/dist/types/excalidraw/scene/zoom.d.ts +0 -12
- /package/dist/dev/data/{image-7TCIBRTP.js.map → image-ORD6XJVB.js.map} +0 -0
- /package/dist/dev/locales/{en-BYFCZL7X.js.map → en-DSRJ5DKP.js.map} +0 -0
- /package/dist/dev/locales/{percentages-ZRLRVMSI.js.map → percentages-DKKGPYTW.js.map} +0 -0
|
@@ -105,6 +105,7 @@ var getDefaultAppState = () => {
|
|
|
105
105
|
scrolledOutside: false,
|
|
106
106
|
scrollX: 0,
|
|
107
107
|
scrollY: 0,
|
|
108
|
+
scrollConstraints: null,
|
|
108
109
|
selectedElementIds: {},
|
|
109
110
|
hoveredElementIds: {},
|
|
110
111
|
selectedGroupIds: {},
|
|
@@ -116,6 +117,7 @@ var getDefaultAppState = () => {
|
|
|
116
117
|
panels: STATS_PANELS.generalStats | STATS_PANELS.elementProperties
|
|
117
118
|
},
|
|
118
119
|
suggestedBinding: null,
|
|
120
|
+
hoveredArrowTextAnchor: null,
|
|
119
121
|
frameRendering: { enabled: true, clip: true, name: true, outline: true },
|
|
120
122
|
frameToHighlight: null,
|
|
121
123
|
editingFrame: null,
|
|
@@ -135,15 +137,18 @@ var getDefaultAppState = () => {
|
|
|
135
137
|
y: 0
|
|
136
138
|
},
|
|
137
139
|
objectsSnapModeEnabled: false,
|
|
138
|
-
userToFollow: null,
|
|
139
|
-
followedBy: /* @__PURE__ */ new Set(),
|
|
140
140
|
isCropping: false,
|
|
141
141
|
croppingElementId: null,
|
|
142
142
|
searchMatches: null,
|
|
143
143
|
lockedMultiSelections: {},
|
|
144
144
|
activeLockedId: null,
|
|
145
145
|
bindMode: "orbit",
|
|
146
|
-
boxSelectionMode: "contain"
|
|
146
|
+
boxSelectionMode: "contain",
|
|
147
|
+
colorTopPicks: {
|
|
148
|
+
elementStroke: null,
|
|
149
|
+
elementBackground: null,
|
|
150
|
+
bucketFill: null
|
|
151
|
+
}
|
|
147
152
|
};
|
|
148
153
|
};
|
|
149
154
|
var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
|
|
@@ -224,6 +229,7 @@ var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
|
|
|
224
229
|
scrolledOutside: { browser: true, export: false, server: false },
|
|
225
230
|
scrollX: { browser: true, export: false, server: false },
|
|
226
231
|
scrollY: { browser: true, export: false, server: false },
|
|
232
|
+
scrollConstraints: { browser: false, export: false, server: false },
|
|
227
233
|
selectedElementIds: { browser: true, export: false, server: false },
|
|
228
234
|
hoveredElementIds: { browser: false, export: false, server: false },
|
|
229
235
|
selectedGroupIds: { browser: true, export: false, server: false },
|
|
@@ -236,6 +242,7 @@ var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
|
|
|
236
242
|
shouldCacheIgnoreZoom: { browser: true, export: false, server: false },
|
|
237
243
|
stats: { browser: true, export: false, server: false },
|
|
238
244
|
suggestedBinding: { browser: false, export: false, server: false },
|
|
245
|
+
hoveredArrowTextAnchor: { browser: false, export: false, server: false },
|
|
239
246
|
frameRendering: { browser: false, export: false, server: false },
|
|
240
247
|
frameToHighlight: { browser: false, export: false, server: false },
|
|
241
248
|
editingFrame: { browser: false, export: false, server: false },
|
|
@@ -251,14 +258,13 @@ var APP_STATE_STORAGE_CONF = /* @__PURE__ */ ((config) => config)({
|
|
|
251
258
|
snapLines: { browser: false, export: false, server: false },
|
|
252
259
|
originSnapOffset: { browser: false, export: false, server: false },
|
|
253
260
|
objectsSnapModeEnabled: { browser: true, export: false, server: false },
|
|
254
|
-
userToFollow: { browser: false, export: false, server: false },
|
|
255
|
-
followedBy: { browser: false, export: false, server: false },
|
|
256
261
|
isCropping: { browser: false, export: false, server: false },
|
|
257
262
|
croppingElementId: { browser: false, export: false, server: false },
|
|
258
263
|
searchMatches: { browser: false, export: false, server: false },
|
|
259
264
|
lockedMultiSelections: { browser: true, export: true, server: true },
|
|
260
265
|
activeLockedId: { browser: false, export: false, server: false },
|
|
261
|
-
bindMode: { browser: true, export: false, server: false }
|
|
266
|
+
bindMode: { browser: true, export: false, server: false },
|
|
267
|
+
colorTopPicks: { browser: true, export: false, server: false }
|
|
262
268
|
});
|
|
263
269
|
var _clearAppStateForStorage = (appState, exportType) => {
|
|
264
270
|
const stateForExport = {};
|
|
@@ -356,25 +362,202 @@ import {
|
|
|
356
362
|
getTargetElements
|
|
357
363
|
} from "@excalidraw/element";
|
|
358
364
|
|
|
359
|
-
//
|
|
360
|
-
import { getVisibleElements } from "@excalidraw/element";
|
|
365
|
+
// viewport.ts
|
|
361
366
|
import {
|
|
362
|
-
|
|
363
|
-
|
|
367
|
+
arrayToMap,
|
|
368
|
+
MAX_ZOOM,
|
|
369
|
+
MIN_ZOOM,
|
|
370
|
+
viewportCoordsToSceneCoords,
|
|
371
|
+
ZOOM_STEP
|
|
364
372
|
} from "@excalidraw/common";
|
|
365
|
-
import {
|
|
366
|
-
import {
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
373
|
+
import { clamp, pointDistance, pointFrom, roundToStep } from "@excalidraw/math";
|
|
374
|
+
import {
|
|
375
|
+
CaptureUpdateAction,
|
|
376
|
+
getCommonBounds,
|
|
377
|
+
getElementBounds,
|
|
378
|
+
getVisibleElements
|
|
379
|
+
} from "@excalidraw/element";
|
|
380
|
+
var DEFAULT_OVERSCROLL = 150;
|
|
381
|
+
var constrainScrollAxis = (scroll, boxStart, boxSize, visibleSize, offsetStart, offsetEnd, overscroll) => {
|
|
382
|
+
const max = -boxStart + offsetStart;
|
|
383
|
+
const min = visibleSize - (boxStart + boxSize) - offsetEnd;
|
|
384
|
+
if (min > max) {
|
|
385
|
+
const center = (min + max) / 2;
|
|
386
|
+
return clamp(scroll, center - overscroll, center + overscroll);
|
|
387
|
+
}
|
|
388
|
+
return clamp(scroll, min - overscroll, max + overscroll);
|
|
389
|
+
};
|
|
390
|
+
var constrainScrollState = (state, overscroll = 0) => {
|
|
391
|
+
const { scrollConstraints, width, height } = state;
|
|
392
|
+
if (!scrollConstraints) {
|
|
393
|
+
return { scrollX: state.scrollX, scrollY: state.scrollY, zoom: state.zoom };
|
|
394
|
+
}
|
|
395
|
+
const minZoom = scrollConstraints.lockZoom ? scrollConstraints.zoom : MIN_ZOOM;
|
|
396
|
+
const zoomValue = getNormalizedZoom(
|
|
397
|
+
clamp(state.zoom.value, minZoom, MAX_ZOOM)
|
|
372
398
|
);
|
|
373
|
-
|
|
374
|
-
{
|
|
375
|
-
|
|
399
|
+
if (!scrollConstraints.lockScroll) {
|
|
400
|
+
return {
|
|
401
|
+
scrollX: state.scrollX,
|
|
402
|
+
scrollY: state.scrollY,
|
|
403
|
+
zoom: { value: zoomValue }
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
const give = Math.max(overscroll, 0) / zoomValue;
|
|
407
|
+
const offsets = scrollConstraints.offsets;
|
|
408
|
+
const offsetTop = (offsets?.top ?? 0) / zoomValue;
|
|
409
|
+
const offsetRight = (offsets?.right ?? 0) / zoomValue;
|
|
410
|
+
const offsetBottom = (offsets?.bottom ?? 0) / zoomValue;
|
|
411
|
+
const offsetLeft = (offsets?.left ?? 0) / zoomValue;
|
|
412
|
+
return {
|
|
413
|
+
scrollX: constrainScrollAxis(
|
|
414
|
+
state.scrollX,
|
|
415
|
+
scrollConstraints.x,
|
|
416
|
+
scrollConstraints.width,
|
|
417
|
+
width / zoomValue,
|
|
418
|
+
offsetLeft,
|
|
419
|
+
offsetRight,
|
|
420
|
+
give
|
|
421
|
+
),
|
|
422
|
+
scrollY: constrainScrollAxis(
|
|
423
|
+
state.scrollY,
|
|
424
|
+
scrollConstraints.y,
|
|
425
|
+
scrollConstraints.height,
|
|
426
|
+
height / zoomValue,
|
|
427
|
+
offsetTop,
|
|
428
|
+
offsetBottom,
|
|
429
|
+
give
|
|
430
|
+
),
|
|
431
|
+
zoom: { value: zoomValue }
|
|
432
|
+
};
|
|
433
|
+
};
|
|
434
|
+
var getViewportForZoom = ({ viewportX, viewportY, nextZoom }, appState) => {
|
|
435
|
+
const appLayerX = viewportX - appState.offsetLeft;
|
|
436
|
+
const appLayerY = viewportY - appState.offsetTop;
|
|
437
|
+
const currentZoom = appState.zoom.value;
|
|
438
|
+
const baseScrollX = appState.scrollX + (appLayerX - appLayerX / currentZoom);
|
|
439
|
+
const baseScrollY = appState.scrollY + (appLayerY - appLayerY / currentZoom);
|
|
440
|
+
const zoomOffsetScrollX = -(appLayerX - appLayerX / nextZoom);
|
|
441
|
+
const zoomOffsetScrollY = -(appLayerY - appLayerY / nextZoom);
|
|
442
|
+
return {
|
|
443
|
+
scrollX: baseScrollX + zoomOffsetScrollX,
|
|
444
|
+
scrollY: baseScrollY + zoomOffsetScrollY,
|
|
445
|
+
zoom: {
|
|
446
|
+
value: nextZoom
|
|
447
|
+
}
|
|
448
|
+
};
|
|
449
|
+
};
|
|
450
|
+
var getViewportForZoomWithScrollConstraints = (opts, state) => {
|
|
451
|
+
const restingViewport = constrainScrollState(state);
|
|
452
|
+
const overscrollX = (state.scrollX - restingViewport.scrollX) * state.zoom.value;
|
|
453
|
+
const overscrollY = (state.scrollY - restingViewport.scrollY) * state.zoom.value;
|
|
454
|
+
const zoomedViewport = constrainScrollState({
|
|
455
|
+
...state,
|
|
456
|
+
...getViewportForZoom(opts, state)
|
|
457
|
+
});
|
|
458
|
+
if (!state.scrollConstraints?.lockScroll || !overscrollX && !overscrollY) {
|
|
459
|
+
return zoomedViewport;
|
|
460
|
+
}
|
|
461
|
+
const zoom = zoomedViewport.zoom.value;
|
|
462
|
+
return constrainScrollState(
|
|
463
|
+
{
|
|
464
|
+
...state,
|
|
465
|
+
...zoomedViewport,
|
|
466
|
+
scrollX: zoomedViewport.scrollX + overscrollX / zoom,
|
|
467
|
+
scrollY: zoomedViewport.scrollY + overscrollY / zoom
|
|
468
|
+
},
|
|
469
|
+
state.scrollConstraints.overscroll
|
|
470
|
+
);
|
|
471
|
+
};
|
|
472
|
+
var zoomValueToFitBoundsOnViewport = (bounds, viewportDimensions) => {
|
|
473
|
+
const [x1, y1, x2, y2] = bounds;
|
|
474
|
+
const commonBoundsWidth = x2 - x1;
|
|
475
|
+
const zoomValueForWidth = viewportDimensions.width / commonBoundsWidth;
|
|
476
|
+
const commonBoundsHeight = y2 - y1;
|
|
477
|
+
const zoomValueForHeight = viewportDimensions.height / commonBoundsHeight;
|
|
478
|
+
const smallestZoomValue = Math.min(zoomValueForWidth, zoomValueForHeight);
|
|
479
|
+
return Math.min(smallestZoomValue, 1);
|
|
480
|
+
};
|
|
481
|
+
var zoomToFitBounds = ({
|
|
482
|
+
bounds,
|
|
483
|
+
appState,
|
|
484
|
+
canvasOffsets,
|
|
485
|
+
fit = "scale-down",
|
|
486
|
+
minZoom = -Infinity,
|
|
487
|
+
maxZoom = Infinity,
|
|
488
|
+
steppedZoom = false
|
|
489
|
+
}) => {
|
|
490
|
+
const [x1, y1, x2, y2] = bounds;
|
|
491
|
+
const centerX = (x1 + x2) / 2;
|
|
492
|
+
const centerY = (y1 + y2) / 2;
|
|
493
|
+
const canvasOffsetLeft = canvasOffsets?.left ?? 0;
|
|
494
|
+
const canvasOffsetTop = canvasOffsets?.top ?? 0;
|
|
495
|
+
const canvasOffsetRight = canvasOffsets?.right ?? 0;
|
|
496
|
+
const canvasOffsetBottom = canvasOffsets?.bottom ?? 0;
|
|
497
|
+
const effectiveCanvasWidth = appState.width - canvasOffsetLeft - canvasOffsetRight;
|
|
498
|
+
const effectiveCanvasHeight = appState.height - canvasOffsetTop - canvasOffsetBottom;
|
|
499
|
+
let adjustedZoomValue;
|
|
500
|
+
if (fit === "none") {
|
|
501
|
+
adjustedZoomValue = appState.zoom.value;
|
|
502
|
+
} else if (fit === "contain") {
|
|
503
|
+
const commonBoundsWidth = x2 - x1;
|
|
504
|
+
const commonBoundsHeight = y2 - y1;
|
|
505
|
+
adjustedZoomValue = Math.min(
|
|
506
|
+
effectiveCanvasWidth / commonBoundsWidth,
|
|
507
|
+
effectiveCanvasHeight / commonBoundsHeight
|
|
508
|
+
);
|
|
509
|
+
} else {
|
|
510
|
+
adjustedZoomValue = zoomValueToFitBoundsOnViewport(bounds, {
|
|
511
|
+
width: effectiveCanvasWidth,
|
|
512
|
+
height: effectiveCanvasHeight
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
const targetZoomValue = steppedZoom && fit !== "none" ? roundToStep(adjustedZoomValue, ZOOM_STEP, "floor") : adjustedZoomValue;
|
|
516
|
+
const newZoomValue = getNormalizedZoom(
|
|
517
|
+
clamp(targetZoomValue, minZoom, maxZoom)
|
|
376
518
|
);
|
|
377
|
-
|
|
519
|
+
const centerScroll = centerScrollOn({
|
|
520
|
+
scenePoint: { x: centerX, y: centerY },
|
|
521
|
+
viewportDimensions: {
|
|
522
|
+
width: appState.width,
|
|
523
|
+
height: appState.height
|
|
524
|
+
},
|
|
525
|
+
offsets: canvasOffsets,
|
|
526
|
+
zoom: { value: newZoomValue }
|
|
527
|
+
});
|
|
528
|
+
return {
|
|
529
|
+
appState: {
|
|
530
|
+
...appState,
|
|
531
|
+
scrollX: centerScroll.scrollX,
|
|
532
|
+
scrollY: centerScroll.scrollY,
|
|
533
|
+
zoom: { value: newZoomValue }
|
|
534
|
+
},
|
|
535
|
+
captureUpdate: CaptureUpdateAction.EVENTUALLY
|
|
536
|
+
};
|
|
537
|
+
};
|
|
538
|
+
var doBoundsExceedViewport = (appState, bounds) => {
|
|
539
|
+
const [x1, y1, x2, y2] = bounds;
|
|
540
|
+
return (x2 - x1) * appState.zoom.value > appState.width || (y2 - y1) * appState.zoom.value > appState.height;
|
|
541
|
+
};
|
|
542
|
+
var getClosestElementBounds = (elements, from) => {
|
|
543
|
+
if (!elements.length) {
|
|
544
|
+
return [0, 0, 0, 0];
|
|
545
|
+
}
|
|
546
|
+
let minDistance = Infinity;
|
|
547
|
+
let closestElement = elements[0];
|
|
548
|
+
const elementsMap = arrayToMap(elements);
|
|
549
|
+
elements.forEach((element) => {
|
|
550
|
+
const [x1, y1, x2, y2] = getElementBounds(element, elementsMap);
|
|
551
|
+
const distance2 = pointDistance(
|
|
552
|
+
pointFrom((x1 + x2) / 2, (y1 + y2) / 2),
|
|
553
|
+
pointFrom(from.x, from.y)
|
|
554
|
+
);
|
|
555
|
+
if (distance2 < minDistance) {
|
|
556
|
+
minDistance = distance2;
|
|
557
|
+
closestElement = element;
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
return getElementBounds(closestElement, elementsMap);
|
|
378
561
|
};
|
|
379
562
|
var centerScrollOn = ({
|
|
380
563
|
scenePoint,
|
|
@@ -391,7 +574,7 @@ var centerScrollOn = ({
|
|
|
391
574
|
scrollY
|
|
392
575
|
};
|
|
393
576
|
};
|
|
394
|
-
var
|
|
577
|
+
var getScrollToContentState = (elements, appState) => {
|
|
395
578
|
elements = getVisibleElements(elements);
|
|
396
579
|
if (!elements.length) {
|
|
397
580
|
return {
|
|
@@ -400,11 +583,14 @@ var calculateScrollCenter = (elements, appState) => {
|
|
|
400
583
|
};
|
|
401
584
|
}
|
|
402
585
|
let [x1, y1, x2, y2] = getCommonBounds(elements);
|
|
403
|
-
if (
|
|
586
|
+
if (doBoundsExceedViewport(appState, [x1, y1, x2, y2])) {
|
|
404
587
|
[x1, y1, x2, y2] = getClosestElementBounds(
|
|
405
588
|
elements,
|
|
406
589
|
viewportCoordsToSceneCoords(
|
|
407
|
-
{
|
|
590
|
+
{
|
|
591
|
+
clientX: appState.offsetLeft + appState.width / 2,
|
|
592
|
+
clientY: appState.offsetTop + appState.height / 2
|
|
593
|
+
},
|
|
408
594
|
appState
|
|
409
595
|
)
|
|
410
596
|
);
|
|
@@ -429,16 +615,16 @@ import {
|
|
|
429
615
|
} from "@excalidraw/element";
|
|
430
616
|
|
|
431
617
|
// scene/normalize.ts
|
|
432
|
-
import { MAX_ZOOM, MIN_ZOOM } from "@excalidraw/common";
|
|
433
|
-
import { clamp, round } from "@excalidraw/math";
|
|
618
|
+
import { MAX_ZOOM as MAX_ZOOM2, MIN_ZOOM as MIN_ZOOM2 } from "@excalidraw/common";
|
|
619
|
+
import { clamp as clamp2, round } from "@excalidraw/math";
|
|
434
620
|
var getNormalizedZoom = (zoom) => {
|
|
435
|
-
return
|
|
621
|
+
return clamp2(round(zoom, 6), MIN_ZOOM2, MAX_ZOOM2);
|
|
436
622
|
};
|
|
437
623
|
var getNormalizedGridSize = (gridStep) => {
|
|
438
|
-
return
|
|
624
|
+
return clamp2(Math.round(gridStep), 1, 100);
|
|
439
625
|
};
|
|
440
626
|
var getNormalizedGridStep = (gridStep) => {
|
|
441
|
-
return
|
|
627
|
+
return clamp2(Math.round(gridStep), 1, 100);
|
|
442
628
|
};
|
|
443
629
|
|
|
444
630
|
// scene/export.ts
|
|
@@ -451,7 +637,7 @@ import {
|
|
|
451
637
|
THEME as THEME5,
|
|
452
638
|
MIME_TYPES as MIME_TYPES5,
|
|
453
639
|
EXPORT_DATA_TYPES as EXPORT_DATA_TYPES2,
|
|
454
|
-
arrayToMap,
|
|
640
|
+
arrayToMap as arrayToMap2,
|
|
455
641
|
distance,
|
|
456
642
|
getFontString as getFontString2,
|
|
457
643
|
toBrandedType,
|
|
@@ -2798,8 +2984,9 @@ var XiaolaiFontFaces = [
|
|
|
2798
2984
|
|
|
2799
2985
|
// fonts/Fonts.ts
|
|
2800
2986
|
var _Fonts = class _Fonts {
|
|
2801
|
-
constructor(scene) {
|
|
2987
|
+
constructor(scene, ownerDocument = document) {
|
|
2802
2988
|
__publicField(this, "scene");
|
|
2989
|
+
__publicField(this, "ownerDocument");
|
|
2803
2990
|
/**
|
|
2804
2991
|
* Get all the font families for the given scene.
|
|
2805
2992
|
*/
|
|
@@ -2851,9 +3038,14 @@ var _Fonts = class _Fonts {
|
|
|
2851
3038
|
const charsPerFamily = _Fonts.getCharsPerFamily(
|
|
2852
3039
|
this.scene.getNonDeletedElements()
|
|
2853
3040
|
);
|
|
2854
|
-
return _Fonts.loadFontFaces(
|
|
3041
|
+
return _Fonts.loadFontFaces(
|
|
3042
|
+
sceneFamilies,
|
|
3043
|
+
charsPerFamily,
|
|
3044
|
+
this.ownerDocument
|
|
3045
|
+
);
|
|
2855
3046
|
});
|
|
2856
3047
|
this.scene = scene;
|
|
3048
|
+
this.ownerDocument = ownerDocument;
|
|
2857
3049
|
}
|
|
2858
3050
|
static get registered() {
|
|
2859
3051
|
if (!_Fonts._registered) {
|
|
@@ -2891,33 +3083,37 @@ var _Fonts = class _Fonts {
|
|
|
2891
3083
|
const fontFaces = await new PromisePool(iterator, concurrency).all();
|
|
2892
3084
|
return Array.from(new Set(fontFaces));
|
|
2893
3085
|
}
|
|
2894
|
-
static async loadFontFaces(fontFamilies, charsPerFamily) {
|
|
3086
|
+
static async loadFontFaces(fontFamilies, charsPerFamily, ownerDocument) {
|
|
2895
3087
|
for (const { fontFaces: fontFaces2, metadata } of _Fonts.registered.values()) {
|
|
2896
3088
|
if (metadata.local) {
|
|
2897
3089
|
continue;
|
|
2898
3090
|
}
|
|
2899
3091
|
for (const { fontFace } of fontFaces2) {
|
|
2900
|
-
if (!
|
|
2901
|
-
|
|
3092
|
+
if (!ownerDocument.fonts.has(fontFace)) {
|
|
3093
|
+
ownerDocument.fonts.add(fontFace);
|
|
2902
3094
|
}
|
|
2903
3095
|
}
|
|
2904
3096
|
}
|
|
2905
|
-
const iterator = _Fonts.fontFacesLoader(
|
|
3097
|
+
const iterator = _Fonts.fontFacesLoader(
|
|
3098
|
+
fontFamilies,
|
|
3099
|
+
charsPerFamily,
|
|
3100
|
+
ownerDocument
|
|
3101
|
+
);
|
|
2906
3102
|
const concurrency = 10;
|
|
2907
3103
|
const fontFaces = await new PromisePool(iterator, concurrency).all();
|
|
2908
3104
|
return fontFaces.flat().filter(Boolean);
|
|
2909
3105
|
}
|
|
2910
|
-
static *fontFacesLoader(fontFamilies, charsPerFamily) {
|
|
3106
|
+
static *fontFacesLoader(fontFamilies, charsPerFamily, ownerDocument) {
|
|
2911
3107
|
for (const [index, fontFamily] of fontFamilies.entries()) {
|
|
2912
3108
|
const font = getFontString({
|
|
2913
3109
|
fontFamily,
|
|
2914
3110
|
fontSize: FONT_SIZES.sm
|
|
2915
3111
|
});
|
|
2916
3112
|
const text = _Fonts.getCharacters(charsPerFamily, fontFamily);
|
|
2917
|
-
if (!
|
|
3113
|
+
if (!ownerDocument.fonts.check(font, text)) {
|
|
2918
3114
|
yield promiseTry3(async () => {
|
|
2919
3115
|
try {
|
|
2920
|
-
const fontFaces = await
|
|
3116
|
+
const fontFaces = await ownerDocument.fonts.load(font, text);
|
|
2921
3117
|
return [index, fontFaces];
|
|
2922
3118
|
} catch (e) {
|
|
2923
3119
|
console.error(
|
|
@@ -3060,16 +3256,17 @@ __publicField(_Fonts, "_initialized", false);
|
|
|
3060
3256
|
/**
|
|
3061
3257
|
* Load font faces for passed elements - use when the scene is unavailable (i.e. export).
|
|
3062
3258
|
*/
|
|
3063
|
-
__publicField(_Fonts, "loadElementsFonts", async (elements) => {
|
|
3259
|
+
__publicField(_Fonts, "loadElementsFonts", async (elements, ownerDocument = document) => {
|
|
3064
3260
|
const fontFamilies = _Fonts.getUniqueFamilies(elements);
|
|
3065
3261
|
const charsPerFamily = _Fonts.getCharsPerFamily(elements);
|
|
3066
|
-
return _Fonts.loadFontFaces(fontFamilies, charsPerFamily);
|
|
3262
|
+
return _Fonts.loadFontFaces(fontFamilies, charsPerFamily, ownerDocument);
|
|
3067
3263
|
});
|
|
3068
3264
|
var Fonts = _Fonts;
|
|
3069
3265
|
|
|
3070
3266
|
// renderer/staticScene.ts
|
|
3071
3267
|
import {
|
|
3072
3268
|
applyDarkModeFilter as applyDarkModeFilter2,
|
|
3269
|
+
COLOR_WHITE as COLOR_WHITE2,
|
|
3073
3270
|
FRAME_STYLE,
|
|
3074
3271
|
THEME as THEME3,
|
|
3075
3272
|
throttleRAF
|
|
@@ -3091,7 +3288,7 @@ import { renderElement } from "@excalidraw/element";
|
|
|
3091
3288
|
import { getElementAbsoluteCoords as getElementAbsoluteCoords2 } from "@excalidraw/element";
|
|
3092
3289
|
|
|
3093
3290
|
// components/hyperlink/helpers.ts
|
|
3094
|
-
import { pointFrom, pointRotateRads } from "@excalidraw/math";
|
|
3291
|
+
import { pointFrom as pointFrom2, pointRotateRads } from "@excalidraw/math";
|
|
3095
3292
|
import { MIME_TYPES as MIME_TYPES3 } from "@excalidraw/common";
|
|
3096
3293
|
import { getElementAbsoluteCoords } from "@excalidraw/element";
|
|
3097
3294
|
import { hitElementBoundingBox } from "@excalidraw/element";
|
|
@@ -3117,8 +3314,8 @@ var getLinkHandleFromCoords = ([x1, y1, x2, y2], angle, appState) => {
|
|
|
3117
3314
|
const x = x2 + dashedLineMargin - centeringOffset;
|
|
3118
3315
|
const y = y1 - dashedLineMargin - linkMarginY + centeringOffset;
|
|
3119
3316
|
const [rotatedX, rotatedY] = pointRotateRads(
|
|
3120
|
-
|
|
3121
|
-
|
|
3317
|
+
pointFrom2(x + linkWidth / 2, y + linkHeight / 2),
|
|
3318
|
+
pointFrom2(centerX, centerY),
|
|
3122
3319
|
angle
|
|
3123
3320
|
);
|
|
3124
3321
|
return [
|
|
@@ -3143,19 +3340,21 @@ var isPointHittingLink = (element, elementsMap, appState, [x, y], isMobile) => {
|
|
|
3143
3340
|
if (!element.link || appState.selectedElementIds[element.id]) {
|
|
3144
3341
|
return false;
|
|
3145
3342
|
}
|
|
3146
|
-
if (!isMobile && appState.viewModeEnabled && hitElementBoundingBox(
|
|
3343
|
+
if (!isMobile && appState.viewModeEnabled && hitElementBoundingBox(pointFrom2(x, y), element, elementsMap)) {
|
|
3147
3344
|
return true;
|
|
3148
3345
|
}
|
|
3149
3346
|
return isPointHittingLinkIcon(
|
|
3150
3347
|
element,
|
|
3151
3348
|
elementsMap,
|
|
3152
3349
|
appState,
|
|
3153
|
-
|
|
3350
|
+
pointFrom2(x, y)
|
|
3154
3351
|
);
|
|
3155
3352
|
};
|
|
3156
3353
|
|
|
3157
3354
|
// renderer/helpers.ts
|
|
3158
|
-
import { THEME as THEME2, applyDarkModeFilter } from "@excalidraw/common";
|
|
3355
|
+
import { COLOR_WHITE, THEME as THEME2, applyDarkModeFilter } from "@excalidraw/common";
|
|
3356
|
+
var DEFAULT_SELECTION_COLOR = "#6965db";
|
|
3357
|
+
var getSelectionColor = (element) => element && getComputedStyle(element).getPropertyValue("--color-selection").trim() || DEFAULT_SELECTION_COLOR;
|
|
3159
3358
|
var fillCircle = (context, cx, cy, radius, stroke, fill = true) => {
|
|
3160
3359
|
context.beginPath();
|
|
3161
3360
|
context.arc(cx, cy, radius, 0, Math.PI * 2);
|
|
@@ -3182,19 +3381,20 @@ var bootstrapCanvas = ({
|
|
|
3182
3381
|
context.setTransform(1, 0, 0, 1, 0, 0);
|
|
3183
3382
|
context.scale(scale, scale);
|
|
3184
3383
|
if (typeof viewBackgroundColor === "string") {
|
|
3185
|
-
const
|
|
3186
|
-
|
|
3187
|
-
/(hsla|rgba)\(/.test(viewBackgroundColor);
|
|
3188
|
-
if (hasTransparence) {
|
|
3384
|
+
const isOpaque = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(viewBackgroundColor);
|
|
3385
|
+
if (!isOpaque) {
|
|
3189
3386
|
context.clearRect(0, 0, normalizedWidth, normalizedHeight);
|
|
3190
3387
|
}
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3388
|
+
if (viewBackgroundColor !== "transparent") {
|
|
3389
|
+
context.save();
|
|
3390
|
+
context.fillStyle = COLOR_WHITE;
|
|
3391
|
+
context.fillStyle = applyDarkModeFilter(
|
|
3392
|
+
viewBackgroundColor,
|
|
3393
|
+
theme === THEME2.DARK
|
|
3394
|
+
);
|
|
3395
|
+
context.fillRect(0, 0, normalizedWidth, normalizedHeight);
|
|
3396
|
+
context.restore();
|
|
3397
|
+
}
|
|
3198
3398
|
} else {
|
|
3199
3399
|
context.clearRect(0, 0, normalizedWidth, normalizedHeight);
|
|
3200
3400
|
}
|
|
@@ -3321,7 +3521,8 @@ var renderLinkIcon = (element, context, appState, elementsMap) => {
|
|
|
3321
3521
|
window.devicePixelRatio * appState.zoom.value,
|
|
3322
3522
|
window.devicePixelRatio * appState.zoom.value
|
|
3323
3523
|
);
|
|
3324
|
-
linkCanvasCacheContext.fillStyle =
|
|
3524
|
+
linkCanvasCacheContext.fillStyle = COLOR_WHITE2;
|
|
3525
|
+
linkCanvasCacheContext.fillStyle = appState.viewBackgroundColor || COLOR_WHITE2;
|
|
3325
3526
|
linkCanvasCacheContext.fillRect(0, 0, width, height);
|
|
3326
3527
|
if (canvasKey === "elementLink") {
|
|
3327
3528
|
linkCanvasCacheContext.drawImage(ELEMENT_LINK_IMG, 0, 0, width, height);
|
|
@@ -3446,7 +3647,7 @@ var _renderStaticScene = ({
|
|
|
3446
3647
|
);
|
|
3447
3648
|
}
|
|
3448
3649
|
context.restore();
|
|
3449
|
-
if (!isExporting) {
|
|
3650
|
+
if (!isExporting && renderConfig.renderLinks !== false) {
|
|
3450
3651
|
renderLinkIcon(element, context, appState, elementsMap);
|
|
3451
3652
|
}
|
|
3452
3653
|
} catch (error) {
|
|
@@ -3484,7 +3685,7 @@ var _renderStaticScene = ({
|
|
|
3484
3685
|
appState
|
|
3485
3686
|
);
|
|
3486
3687
|
}
|
|
3487
|
-
if (!isExporting) {
|
|
3688
|
+
if (!isExporting && renderConfig.renderLinks !== false) {
|
|
3488
3689
|
renderLinkIcon(element, context, appState, elementsMap);
|
|
3489
3690
|
}
|
|
3490
3691
|
};
|
|
@@ -3541,6 +3742,7 @@ var renderStaticScene = (renderConfig, throttle) => {
|
|
|
3541
3742
|
|
|
3542
3743
|
// renderer/staticSvgScene.ts
|
|
3543
3744
|
import {
|
|
3745
|
+
BOUND_TEXT_PADDING,
|
|
3544
3746
|
FRAME_STYLE as FRAME_STYLE2,
|
|
3545
3747
|
MAX_DECIMALS_FOR_SVG_EXPORT,
|
|
3546
3748
|
SVG_NS,
|
|
@@ -3785,13 +3987,19 @@ var renderElementToSvg = (element, elementsMap, rsvg, svgRoot, files, offsetX, o
|
|
|
3785
3987
|
boundText,
|
|
3786
3988
|
elementsMap
|
|
3787
3989
|
);
|
|
3788
|
-
const maskX = offsetX + boundTextCoords.x - element.x;
|
|
3789
|
-
const maskY = offsetY + boundTextCoords.y - element.y;
|
|
3990
|
+
const maskX = offsetX + boundTextCoords.x - element.x - BOUND_TEXT_PADDING;
|
|
3991
|
+
const maskY = offsetY + boundTextCoords.y - element.y - BOUND_TEXT_PADDING;
|
|
3790
3992
|
maskRectInvisible.setAttribute("x", maskX.toString());
|
|
3791
3993
|
maskRectInvisible.setAttribute("y", maskY.toString());
|
|
3792
3994
|
maskRectInvisible.setAttribute("fill", "#000");
|
|
3793
|
-
maskRectInvisible.setAttribute(
|
|
3794
|
-
|
|
3995
|
+
maskRectInvisible.setAttribute(
|
|
3996
|
+
"width",
|
|
3997
|
+
`${boundText.width + BOUND_TEXT_PADDING * 2}`
|
|
3998
|
+
);
|
|
3999
|
+
maskRectInvisible.setAttribute(
|
|
4000
|
+
"height",
|
|
4001
|
+
`${boundText.height + BOUND_TEXT_PADDING * 2}`
|
|
4002
|
+
);
|
|
3795
4003
|
maskRectInvisible.setAttribute("opacity", "1");
|
|
3796
4004
|
maskPath.appendChild(maskRectInvisible);
|
|
3797
4005
|
}
|
|
@@ -4107,7 +4315,7 @@ var renderSceneToSvg = (elements, elementsMap, rsvg, svgRoot, files, renderConfi
|
|
|
4107
4315
|
renderConfig
|
|
4108
4316
|
);
|
|
4109
4317
|
const boundTextElement = getBoundTextElement2(element, elementsMap);
|
|
4110
|
-
if (boundTextElement) {
|
|
4318
|
+
if (boundTextElement?.isDeleted === false) {
|
|
4111
4319
|
renderElementToSvg(
|
|
4112
4320
|
boundTextElement,
|
|
4113
4321
|
elementsMap,
|
|
@@ -4118,6 +4326,10 @@ var renderSceneToSvg = (elements, elementsMap, rsvg, svgRoot, files, renderConfi
|
|
|
4118
4326
|
boundTextElement.y + renderConfig.offsetY,
|
|
4119
4327
|
renderConfig
|
|
4120
4328
|
);
|
|
4329
|
+
} else if (boundTextElement) {
|
|
4330
|
+
console.error(
|
|
4331
|
+
"[NONDELETED][INVARIANT] Skipped rendering deleted bound text element"
|
|
4332
|
+
);
|
|
4121
4333
|
}
|
|
4122
4334
|
} catch (error) {
|
|
4123
4335
|
console.error(error);
|
|
@@ -4209,7 +4421,7 @@ var prepareElementsForRender = ({
|
|
|
4209
4421
|
nextElements = getElementsOverlappingFrame(
|
|
4210
4422
|
elements,
|
|
4211
4423
|
exportingFrame,
|
|
4212
|
-
|
|
4424
|
+
arrayToMap2(elements)
|
|
4213
4425
|
);
|
|
4214
4426
|
} else if (frameRendering.enabled && frameRendering.name) {
|
|
4215
4427
|
nextElements = addFrameLabelsAsTextElements(elements, {
|
|
@@ -4267,10 +4479,10 @@ var exportToCanvas = async (elements, appState, files, {
|
|
|
4267
4479
|
canvas,
|
|
4268
4480
|
rc: rough.canvas(canvas),
|
|
4269
4481
|
elementsMap: toBrandedType(
|
|
4270
|
-
|
|
4482
|
+
arrayToMap2(elementsForRender)
|
|
4271
4483
|
),
|
|
4272
4484
|
allElementsMap: toBrandedType(
|
|
4273
|
-
|
|
4485
|
+
arrayToMap2(syncInvalidIndices(elements))
|
|
4274
4486
|
),
|
|
4275
4487
|
visibleElements: elementsForRender,
|
|
4276
4488
|
scale,
|
|
@@ -4359,7 +4571,7 @@ var exportToSvg = async (elements, appState, files, opts) => {
|
|
|
4359
4571
|
}
|
|
4360
4572
|
const frameElements = getFrameLikeElements(elements);
|
|
4361
4573
|
if (frameElements.length) {
|
|
4362
|
-
const elementsMap =
|
|
4574
|
+
const elementsMap = arrayToMap2(elements);
|
|
4363
4575
|
for (const frame of frameElements) {
|
|
4364
4576
|
const clipPath = svgRoot.ownerDocument.createElementNS(
|
|
4365
4577
|
SVG_NS2,
|
|
@@ -4408,7 +4620,7 @@ var exportToSvg = async (elements, appState, files, opts) => {
|
|
|
4408
4620
|
const renderEmbeddables = opts?.renderEmbeddables ?? false;
|
|
4409
4621
|
renderSceneToSvg(
|
|
4410
4622
|
elementsForRender,
|
|
4411
|
-
toBrandedType(
|
|
4623
|
+
toBrandedType(arrayToMap2(elementsForRender)),
|
|
4412
4624
|
rsvg,
|
|
4413
4625
|
svgRoot,
|
|
4414
4626
|
files || {},
|
|
@@ -4479,16 +4691,17 @@ var getCanvasSize = (elements, exportPadding) => {
|
|
|
4479
4691
|
const height = distance(minY, maxY) + exportPadding * 2;
|
|
4480
4692
|
return [minX, minY, width, height];
|
|
4481
4693
|
};
|
|
4482
|
-
var getExportSize = (elements, exportPadding, scale) => {
|
|
4483
|
-
const [, , width, height] = getCanvasSize(elements, exportPadding).map(
|
|
4484
|
-
(dimension) => Math.trunc(dimension * scale)
|
|
4485
|
-
);
|
|
4486
|
-
return [width, height];
|
|
4487
|
-
};
|
|
4488
4694
|
|
|
4489
4695
|
// data/restore.ts
|
|
4490
|
-
import { isFiniteNumber, isValidPoint, pointFrom as pointFrom2 } from "@excalidraw/math";
|
|
4491
4696
|
import {
|
|
4697
|
+
clamp as clamp3,
|
|
4698
|
+
isFiniteNumber,
|
|
4699
|
+
isValidPoint,
|
|
4700
|
+
pointFrom as pointFrom3
|
|
4701
|
+
} from "@excalidraw/math";
|
|
4702
|
+
import {
|
|
4703
|
+
colorToHex,
|
|
4704
|
+
COLOR_TOP_PICKS_SLOTS,
|
|
4492
4705
|
DEFAULT_FONT_FAMILY as DEFAULT_FONT_FAMILY2,
|
|
4493
4706
|
DEFAULT_STROKE_STREAMLINE,
|
|
4494
4707
|
DEFAULT_TEXT_ALIGN as DEFAULT_TEXT_ALIGN2,
|
|
@@ -4502,7 +4715,7 @@ import {
|
|
|
4502
4715
|
randomId,
|
|
4503
4716
|
getUpdatedTimestamp,
|
|
4504
4717
|
updateActiveTool,
|
|
4505
|
-
arrayToMap as
|
|
4718
|
+
arrayToMap as arrayToMap3,
|
|
4506
4719
|
getSizeFromPoints,
|
|
4507
4720
|
normalizeLink as normalizeLink2,
|
|
4508
4721
|
getLineHeight,
|
|
@@ -4515,7 +4728,8 @@ import {
|
|
|
4515
4728
|
normalizeArrowhead,
|
|
4516
4729
|
isPointInElement,
|
|
4517
4730
|
isValidPolygon,
|
|
4518
|
-
projectFixedPointOntoDiagonal
|
|
4731
|
+
projectFixedPointOntoDiagonal,
|
|
4732
|
+
isNonDeletedElement
|
|
4519
4733
|
} from "@excalidraw/element";
|
|
4520
4734
|
import { normalizeFixedPoint } from "@excalidraw/element";
|
|
4521
4735
|
import {
|
|
@@ -4535,21 +4749,43 @@ import {
|
|
|
4535
4749
|
isTextElement as isTextElement4,
|
|
4536
4750
|
isUsingAdaptiveRadius
|
|
4537
4751
|
} from "@excalidraw/element";
|
|
4538
|
-
import {
|
|
4752
|
+
import {
|
|
4753
|
+
normalizeBoundElementsOrder,
|
|
4754
|
+
syncInvalidIndices as syncInvalidIndices2,
|
|
4755
|
+
syncMovedIndices
|
|
4756
|
+
} from "@excalidraw/element";
|
|
4539
4757
|
import { refreshTextDimensions } from "@excalidraw/element";
|
|
4540
4758
|
import { getNormalizedDimensions } from "@excalidraw/element";
|
|
4541
4759
|
import { isInvisiblySmallElement } from "@excalidraw/element";
|
|
4542
|
-
var
|
|
4760
|
+
var MAX_LINEAR_PX = 75e3;
|
|
4761
|
+
var handleOversizedLinearElements = (element) => {
|
|
4762
|
+
if (element.width <= MAX_LINEAR_PX && element.height <= MAX_LINEAR_PX) {
|
|
4763
|
+
return element;
|
|
4764
|
+
}
|
|
4765
|
+
const label = element.type === "arrow" ? `${isElbowArrow(element) ? "elbow" : "simple"} arrow` : element.type;
|
|
4766
|
+
console.error(
|
|
4767
|
+
`Removing extremely large ${label} ${element.id} (width: ${element.width}, height: ${element.height}, x: ${element.x}, y: ${element.y})`
|
|
4768
|
+
);
|
|
4769
|
+
return {
|
|
4770
|
+
...element,
|
|
4771
|
+
x: 0,
|
|
4772
|
+
y: 0,
|
|
4773
|
+
width: 100,
|
|
4774
|
+
height: 100,
|
|
4775
|
+
points: [pointFrom3(0, 0), pointFrom3(100, 100)],
|
|
4776
|
+
isDeleted: true
|
|
4777
|
+
};
|
|
4778
|
+
};
|
|
4543
4779
|
var restoreLinearElementPoints = (points, width, height) => {
|
|
4544
4780
|
const restoredPoints = Array.isArray(points) ? points.reduce((acc, point) => {
|
|
4545
4781
|
if (isValidPoint(point)) {
|
|
4546
|
-
acc.push(
|
|
4782
|
+
acc.push(pointFrom3(point[0], point[1]));
|
|
4547
4783
|
}
|
|
4548
4784
|
return acc;
|
|
4549
4785
|
}, []) : [];
|
|
4550
4786
|
return restoredPoints.length < 2 ? [
|
|
4551
|
-
|
|
4552
|
-
|
|
4787
|
+
pointFrom3(0, 0),
|
|
4788
|
+
pointFrom3(
|
|
4553
4789
|
isFiniteNumber(width) ? width : 0,
|
|
4554
4790
|
isFiniteNumber(height) ? height : 0
|
|
4555
4791
|
)
|
|
@@ -4567,7 +4803,7 @@ var restoreFreedrawPoints = (points, pressures) => {
|
|
|
4567
4803
|
const restoredPressures = [];
|
|
4568
4804
|
points.forEach((point, index) => {
|
|
4569
4805
|
if (isValidPoint(point)) {
|
|
4570
|
-
restoredPoints.push(
|
|
4806
|
+
restoredPoints.push(pointFrom3(point[0], point[1]));
|
|
4571
4807
|
if (index in pressureValues) {
|
|
4572
4808
|
const pressure = pressureValues[index];
|
|
4573
4809
|
restoredPressures.push(isFiniteNumber(pressure) ? pressure : 0.5);
|
|
@@ -4596,7 +4832,9 @@ var AllowedExcalidrawActiveTools = {
|
|
|
4596
4832
|
embeddable: true,
|
|
4597
4833
|
hand: true,
|
|
4598
4834
|
laser: false,
|
|
4599
|
-
|
|
4835
|
+
autoshape: false,
|
|
4836
|
+
magicframe: false,
|
|
4837
|
+
bucketfill: true
|
|
4600
4838
|
};
|
|
4601
4839
|
var ALLOWED_STROKE_VARIABILITIES = /* @__PURE__ */ new Set([
|
|
4602
4840
|
"constant",
|
|
@@ -4654,6 +4892,9 @@ var repairBinding = (element, binding, targetElementsMap, existingElementsMap, s
|
|
|
4654
4892
|
elementsMap
|
|
4655
4893
|
);
|
|
4656
4894
|
const mode = isPointInElement(p, boundElement, elementsMap) ? "inside" : "orbit";
|
|
4895
|
+
if (!isNonDeletedElement(element)) {
|
|
4896
|
+
console.error("[NONDELETED][INVARIANT] Restoring a deleted element");
|
|
4897
|
+
}
|
|
4657
4898
|
const safeElement = {
|
|
4658
4899
|
...element,
|
|
4659
4900
|
startBinding: element.startBinding?.elementId ? {
|
|
@@ -4777,7 +5018,8 @@ var restoreElement = (element, targetElementsMap, existingElementsMap, opts) =>
|
|
|
4777
5018
|
containerId: element.containerId ?? null,
|
|
4778
5019
|
originalText: element.originalText || text,
|
|
4779
5020
|
autoResize: element.autoResize ?? true,
|
|
4780
|
-
lineHeight
|
|
5021
|
+
lineHeight,
|
|
5022
|
+
labelPosition: isFiniteNumber(element.labelPosition) ? clamp3(element.labelPosition, 0, 1) : null
|
|
4781
5023
|
});
|
|
4782
5024
|
if (opts?.deleteInvisibleElements && !text && !element.isDeleted) {
|
|
4783
5025
|
element = { ...element, originalText: text, isDeleted: true };
|
|
@@ -4822,7 +5064,7 @@ var restoreElement = (element, targetElementsMap, existingElementsMap, opts) =>
|
|
|
4822
5064
|
y: y ?? 0
|
|
4823
5065
|
}));
|
|
4824
5066
|
}
|
|
4825
|
-
|
|
5067
|
+
const restoredLine = restoreElementWithProperties(element, {
|
|
4826
5068
|
type: "line",
|
|
4827
5069
|
startBinding: null,
|
|
4828
5070
|
endBinding: null,
|
|
@@ -4836,6 +5078,7 @@ var restoreElement = (element, targetElementsMap, existingElementsMap, opts) =>
|
|
|
4836
5078
|
} : {},
|
|
4837
5079
|
...getSizeFromPoints(points)
|
|
4838
5080
|
});
|
|
5081
|
+
return handleOversizedLinearElements(restoredLine);
|
|
4839
5082
|
case "arrow": {
|
|
4840
5083
|
const startArrowhead2 = normalizeArrowhead(element.startArrowhead);
|
|
4841
5084
|
const endArrowhead2 = element.endArrowhead === void 0 ? "arrow" : normalizeArrowhead(element.endArrowhead);
|
|
@@ -4889,24 +5132,7 @@ var restoreElement = (element, targetElementsMap, existingElementsMap, opts) =>
|
|
|
4889
5132
|
restoredElement
|
|
4890
5133
|
)
|
|
4891
5134
|
};
|
|
4892
|
-
|
|
4893
|
-
console.error(
|
|
4894
|
-
`Removing extremely large arrow ${normalizedRestoredElement.id} (type: ${isElbowArrow(normalizedRestoredElement) ? "elbow" : "simple"}, width: ${normalizedRestoredElement.width}, height: ${normalizedRestoredElement.height}, x: ${normalizedRestoredElement.x}, y: ${normalizedRestoredElement.y})`
|
|
4895
|
-
);
|
|
4896
|
-
return {
|
|
4897
|
-
...normalizedRestoredElement,
|
|
4898
|
-
x: 0,
|
|
4899
|
-
y: 0,
|
|
4900
|
-
width: 100,
|
|
4901
|
-
height: 100,
|
|
4902
|
-
points: [
|
|
4903
|
-
pointFrom2(0, 0),
|
|
4904
|
-
pointFrom2(100, 100)
|
|
4905
|
-
],
|
|
4906
|
-
isDeleted: true
|
|
4907
|
-
};
|
|
4908
|
-
}
|
|
4909
|
-
return normalizedRestoredElement;
|
|
5135
|
+
return handleOversizedLinearElements(normalizedRestoredElement);
|
|
4910
5136
|
}
|
|
4911
5137
|
case "ellipse":
|
|
4912
5138
|
case "rectangle":
|
|
@@ -4963,6 +5189,19 @@ var repairBoundElement = (boundElement, elementsMap) => {
|
|
|
4963
5189
|
container.boundElements = boundElements;
|
|
4964
5190
|
}
|
|
4965
5191
|
};
|
|
5192
|
+
var repairBoundTextElementOrder = (elements) => {
|
|
5193
|
+
const originalPositions = new Map(
|
|
5194
|
+
elements.map((element, index) => [element.id, index])
|
|
5195
|
+
);
|
|
5196
|
+
const normalizedElements = normalizeBoundElementsOrder(elements);
|
|
5197
|
+
const reorderedBoundTextElements = normalizedElements.filter(
|
|
5198
|
+
(element, index) => isTextElement4(element) && element.containerId && originalPositions.get(element.id) !== index
|
|
5199
|
+
);
|
|
5200
|
+
return reorderedBoundTextElements.length ? syncMovedIndices(
|
|
5201
|
+
normalizedElements,
|
|
5202
|
+
arrayToMap3(reorderedBoundTextElements)
|
|
5203
|
+
) : normalizedElements;
|
|
5204
|
+
};
|
|
4966
5205
|
var repairFrameMembership = (element, elementsMap) => {
|
|
4967
5206
|
if (element.frameId) {
|
|
4968
5207
|
const containingFrame = elementsMap.get(element.frameId);
|
|
@@ -4973,8 +5212,8 @@ var repairFrameMembership = (element, elementsMap) => {
|
|
|
4973
5212
|
};
|
|
4974
5213
|
var restoreElements = (targetElements, existingElements, opts) => {
|
|
4975
5214
|
const existingIds = /* @__PURE__ */ new Set();
|
|
4976
|
-
const targetElementsMap =
|
|
4977
|
-
const existingElementsMap = existingElements ?
|
|
5215
|
+
const targetElementsMap = arrayToMap3(targetElements || []);
|
|
5216
|
+
const existingElementsMap = existingElements ? arrayToMap3(existingElements) : null;
|
|
4978
5217
|
const restoredElements = syncInvalidIndices2(
|
|
4979
5218
|
(targetElements || []).reduce((elements, element) => {
|
|
4980
5219
|
if (element.type === "selection") {
|
|
@@ -5015,7 +5254,7 @@ var restoreElements = (targetElements, existingElements, opts) => {
|
|
|
5015
5254
|
if (!opts?.repairBindings) {
|
|
5016
5255
|
return restoredElements;
|
|
5017
5256
|
}
|
|
5018
|
-
const restoredElementsMap =
|
|
5257
|
+
const restoredElementsMap = arrayToMap3(restoredElements);
|
|
5019
5258
|
for (const element of restoredElements) {
|
|
5020
5259
|
if (element.frameId) {
|
|
5021
5260
|
repairFrameMembership(element, restoredElementsMap);
|
|
@@ -5044,7 +5283,8 @@ var restoreElements = (targetElements, existingElements, opts) => {
|
|
|
5044
5283
|
}
|
|
5045
5284
|
}
|
|
5046
5285
|
}
|
|
5047
|
-
|
|
5286
|
+
const repairedElements = repairBoundTextElementOrder(restoredElements);
|
|
5287
|
+
return repairedElements.map((element) => {
|
|
5048
5288
|
if (isElbowArrow(element) && !isArrowBoundToElement(element) && !validateElbowPoints(element.points)) {
|
|
5049
5289
|
return {
|
|
5050
5290
|
...element,
|
|
@@ -5053,7 +5293,7 @@ var restoreElements = (targetElements, existingElements, opts) => {
|
|
|
5053
5293
|
restoredElementsMap,
|
|
5054
5294
|
{
|
|
5055
5295
|
points: [
|
|
5056
|
-
|
|
5296
|
+
pointFrom3(0, 0),
|
|
5057
5297
|
element.points[element.points.length - 1]
|
|
5058
5298
|
]
|
|
5059
5299
|
}
|
|
@@ -5082,10 +5322,10 @@ var restoreElements = (targetElements, existingElements, opts) => {
|
|
|
5082
5322
|
width: boundElement.width,
|
|
5083
5323
|
height: boundElement.height,
|
|
5084
5324
|
points: [
|
|
5085
|
-
|
|
5086
|
-
|
|
5087
|
-
|
|
5088
|
-
|
|
5325
|
+
pointFrom3(0, 0),
|
|
5326
|
+
pointFrom3(0, -10),
|
|
5327
|
+
pointFrom3(boundElement.width / 2 + 5, -10),
|
|
5328
|
+
pointFrom3(
|
|
5089
5329
|
boundElement.width / 2 + 5,
|
|
5090
5330
|
boundElement.height / 2 + 5
|
|
5091
5331
|
)
|
|
@@ -5111,6 +5351,25 @@ var LegacyAppStateMigrations = {
|
|
|
5111
5351
|
];
|
|
5112
5352
|
}
|
|
5113
5353
|
};
|
|
5354
|
+
var restoreColorTopPicksList = (value) => {
|
|
5355
|
+
if (!Array.isArray(value)) {
|
|
5356
|
+
return null;
|
|
5357
|
+
}
|
|
5358
|
+
const colors = /* @__PURE__ */ new Map();
|
|
5359
|
+
for (const color of value) {
|
|
5360
|
+
if (typeof color !== "string") {
|
|
5361
|
+
continue;
|
|
5362
|
+
}
|
|
5363
|
+
const normalized = colorToHex(color) ?? color.toLowerCase();
|
|
5364
|
+
if (!colors.has(normalized)) {
|
|
5365
|
+
colors.set(normalized, color);
|
|
5366
|
+
}
|
|
5367
|
+
if (colors.size >= COLOR_TOP_PICKS_SLOTS) {
|
|
5368
|
+
break;
|
|
5369
|
+
}
|
|
5370
|
+
}
|
|
5371
|
+
return colors.size ? [...colors.values()] : null;
|
|
5372
|
+
};
|
|
5114
5373
|
var restoreAppState = (appState, localAppState) => {
|
|
5115
5374
|
appState = appState || {};
|
|
5116
5375
|
const defaultAppState = getDefaultAppState();
|
|
@@ -5135,6 +5394,17 @@ var restoreAppState = (appState, localAppState) => {
|
|
|
5135
5394
|
if (boxSelectionMode !== void 0) {
|
|
5136
5395
|
nextAppState.boxSelectionMode = boxSelectionMode;
|
|
5137
5396
|
}
|
|
5397
|
+
nextAppState.colorTopPicks = {
|
|
5398
|
+
elementStroke: restoreColorTopPicksList(
|
|
5399
|
+
nextAppState.colorTopPicks?.elementStroke
|
|
5400
|
+
),
|
|
5401
|
+
elementBackground: restoreColorTopPicksList(
|
|
5402
|
+
nextAppState.colorTopPicks?.elementBackground
|
|
5403
|
+
),
|
|
5404
|
+
bucketFill: restoreColorTopPicksList(
|
|
5405
|
+
nextAppState.colorTopPicks?.bucketFill
|
|
5406
|
+
)
|
|
5407
|
+
};
|
|
5138
5408
|
if (appState.currentItemStrokeWidth !== void 0) {
|
|
5139
5409
|
nextAppState.currentItemStrokeWidthKey = getStrokeWidthKey(appState.currentItemStrokeWidth) ?? defaultAppState.currentItemStrokeWidthKey;
|
|
5140
5410
|
}
|
|
@@ -5171,9 +5441,8 @@ var restoreAppState = (appState, localAppState) => {
|
|
|
5171
5441
|
};
|
|
5172
5442
|
};
|
|
5173
5443
|
var restoreLibraryItem = (libraryItem) => {
|
|
5174
|
-
const elements =
|
|
5175
|
-
|
|
5176
|
-
null
|
|
5444
|
+
const elements = getNonDeletedElements(
|
|
5445
|
+
restoreElements(libraryItem.elements, null)
|
|
5177
5446
|
);
|
|
5178
5447
|
return elements.length ? { ...libraryItem, elements } : null;
|
|
5179
5448
|
};
|
|
@@ -5211,7 +5480,7 @@ var parseFileContents = async (blob) => {
|
|
|
5211
5480
|
let contents;
|
|
5212
5481
|
if (blob.type === MIME_TYPES6.png) {
|
|
5213
5482
|
try {
|
|
5214
|
-
return await (await import("./data/image-
|
|
5483
|
+
return await (await import("./data/image-ORD6XJVB.js")).decodePngMetadata(blob);
|
|
5215
5484
|
} catch (error) {
|
|
5216
5485
|
if (error.message === "INVALID") {
|
|
5217
5486
|
throw new ImageSceneDataError(
|
|
@@ -5303,7 +5572,7 @@ var loadSceneOrLibraryFromBlob = async (blob, localAppState, localElements, file
|
|
|
5303
5572
|
theme: localAppState?.theme,
|
|
5304
5573
|
fileHandle: fileHandle || blob.handle || null,
|
|
5305
5574
|
...cleanAppStateForExport(data.appState || {}),
|
|
5306
|
-
...localAppState ?
|
|
5575
|
+
...localAppState ? getScrollToContentState(data.elements || [], localAppState) : {}
|
|
5307
5576
|
},
|
|
5308
5577
|
localAppState
|
|
5309
5578
|
),
|
|
@@ -5615,8 +5884,11 @@ var decodePngMetadata = async (blob) => {
|
|
|
5615
5884
|
};
|
|
5616
5885
|
|
|
5617
5886
|
export {
|
|
5618
|
-
|
|
5619
|
-
|
|
5887
|
+
DEFAULT_OVERSCROLL,
|
|
5888
|
+
constrainScrollState,
|
|
5889
|
+
getViewportForZoomWithScrollConstraints,
|
|
5890
|
+
zoomToFitBounds,
|
|
5891
|
+
getScrollToContentState,
|
|
5620
5892
|
getNormalizedZoom,
|
|
5621
5893
|
getNormalizedGridStep,
|
|
5622
5894
|
isSomeElementSelected,
|
|
@@ -5647,6 +5919,7 @@ export {
|
|
|
5647
5919
|
saveLibraryAsJSON,
|
|
5648
5920
|
getLinkHandleFromCoords,
|
|
5649
5921
|
isPointHittingLink,
|
|
5922
|
+
getSelectionColor,
|
|
5650
5923
|
fillCircle,
|
|
5651
5924
|
getNormalizedCanvasDimensions,
|
|
5652
5925
|
bootstrapCanvas,
|
|
@@ -5656,7 +5929,6 @@ export {
|
|
|
5656
5929
|
renderStaticScene,
|
|
5657
5930
|
exportToCanvas,
|
|
5658
5931
|
exportToSvg,
|
|
5659
|
-
getExportSize,
|
|
5660
5932
|
restoreElement,
|
|
5661
5933
|
restoreElements,
|
|
5662
5934
|
restoreAppState,
|
|
@@ -5685,4 +5957,4 @@ export {
|
|
|
5685
5957
|
createFile,
|
|
5686
5958
|
normalizeFile
|
|
5687
5959
|
};
|
|
5688
|
-
//# sourceMappingURL=chunk-
|
|
5960
|
+
//# sourceMappingURL=chunk-KKZSEXXE.js.map
|