@excalidraw/excalidraw 0.17.1-550a388 → 0.17.1-62228e0
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 +18 -2
- package/dist/browser/dev/excalidraw-assets-dev/CascadiaMono-Regular-NWCXRPUG.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-ACFH36JV.js → blockDiagram-91b80b7a-H47FTXHA.js} +5 -5
- package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-QZ27YR47.js → c4Diagram-b2a90758-NNJK6GKC.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-HO2HMSK7.js → chunk-4KQVEBHW.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-USGV265L.js → chunk-53YI56GV.js} +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-EDFX3S7X.js → chunk-A2WCJI4I.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-IX4V72YG.js → chunk-EFLPX7NE.js} +6 -6
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-MXVETLVM.js → chunk-JYIQCNWV.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-YZIOORVX.js → chunk-LVIQQW6F.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-6U7GQNJT.js → chunk-PXLO3FOU.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-7DACDEY3.js → chunk-TO2AW5PW.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-NJ77ZFNJ.js → chunk-VURILHLY.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-AK7SWNLN.js → chunk-XDYNNNIZ.js} +48 -10
- package/dist/browser/dev/excalidraw-assets-dev/chunk-XDYNNNIZ.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-2T2GU7NF.js → chunk-ZAYGSUHF.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-Z3PH3V2B.js → chunk-ZQR5ML6Y.js} +26 -26
- package/dist/browser/dev/excalidraw-assets-dev/chunk-ZQR5ML6Y.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-RWZVJAQU.js → chunk-ZYC7SDAJ.js} +13172 -7476
- package/dist/browser/dev/excalidraw-assets-dev/chunk-ZYC7SDAJ.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-QSLMH4JW.js → classDiagram-30eddba6-CUYIJICN.js} +5 -5
- package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-DY4DYQ5P.js → classDiagram-v2-f2df5561-K6WW6K73.js} +8 -8
- package/dist/browser/dev/excalidraw-assets-dev/{dist-Z46EOVOL.js → dist-DNSPZDOZ.js} +67 -33
- package/dist/browser/dev/excalidraw-assets-dev/dist-DNSPZDOZ.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js → en-RAFN4KPD.js} +8 -2
- package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-SOOJRTCB.js → erDiagram-47591fe2-XGAD7EEP.js} +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-AHGL4KPK.js → flowDiagram-5540d9b9-B6EOVNNO.js} +9 -9
- package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-56LDZZWY.js → flowDiagram-v2-3b53844e-NUG24FJH.js} +9 -9
- package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-27LUKRI6.js → flowchart-elk-definition-5fe447d6-25Y7PCBL.js} +5 -5
- package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-EHGYGNG6.js → ganttDiagram-9a3bba1f-GNL6ZDTC.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-AJQNBDW5.js → gitGraphDiagram-96e6b4ee-HNW52NVO.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{image-OFRRV5MB.css → image-WDHYGKKP.css} +1 -1
- package/dist/browser/dev/excalidraw-assets-dev/image-WDHYGKKP.css.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{image-EDKQZH7Z.js → image-ZNLDWTK3.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-SWLLQVES.js → infoDiagram-bcd20f53-FWEUVFLT.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-7UAVCWOZ.js → journeyDiagram-4fe6b3dc-RZIUI7UG.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-SROW5KGM.js → mindmap-definition-f354de21-GBVN45GU.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-QKCI6NCB.js → pieDiagram-79897490-ECENNII6.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-LNYJZFC5.js → quadrantDiagram-62f64e94-ZMEOFVNL.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZZD7ZHFA.js → requirementDiagram-05bf5f74-FHZSFHCR.js} +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-L75ZZ4UM.js → sankeyDiagram-97764748-VDKIKTA6.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-6PCU7TDK.js → sequenceDiagram-acc0e65c-6JUSPVKX.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-WM76WOPR.js → stateDiagram-0ff1cf1a-L3AKWENF.js} +5 -5
- package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-N4HZW3O2.js → stateDiagram-v2-9a9d610d-NU3GGMCH.js} +8 -8
- package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-ZHGCAXGP.js → timeline-definition-fea2a41d-JGP7XCHW.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-2DLOVRAZ.js → xychartDiagram-ab372869-HLFHHF2I.js} +3 -3
- package/dist/browser/dev/index.css +668 -191
- package/dist/browser/dev/index.css.map +3 -3
- package/dist/browser/dev/index.js +14529 -9273
- package/dist/browser/dev/index.js.map +4 -4
- package/dist/browser/prod/excalidraw-assets/CascadiaMono-Regular-NWCXRPUG.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/{blockDiagram-91b80b7a-ONPS22AM.js → blockDiagram-91b80b7a-FVCRVGN5.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{c4Diagram-b2a90758-XMIQY7ZT.js → c4Diagram-b2a90758-56CXO7GA.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-GCHQBOKV.js → chunk-635MQ3CK.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-P5M3G2RP.js → chunk-AIKXYJX3.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-E2YLWFZX.js → chunk-CR7VMNWC.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/chunk-F3JN4YS2.js +61 -0
- package/dist/browser/prod/excalidraw-assets/{chunk-WEYK4A2L.js → chunk-FFF2CSVG.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-R3HAIP6R.js → chunk-G4WDCSPE.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-HFOXJM22.js → chunk-HKZSHFLX.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-XIMFFJTE.js → chunk-IKCDYWMW.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-AHLLBBVJ.js → chunk-L5DS24G6.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-CQJF3C6G.js → chunk-MUNOKHUD.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-CTYINSWT.js → chunk-MXFM2KIK.js} +5 -5
- package/dist/browser/prod/excalidraw-assets/{chunk-NI6SYCUG.js → chunk-QOQYOOQ4.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-I2PZFXTK.js → chunk-ZTIWFPBM.js} +21 -21
- package/dist/browser/prod/excalidraw-assets/{classDiagram-30eddba6-IEJXXCVX.js → classDiagram-30eddba6-BCUTAUMD.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{classDiagram-v2-f2df5561-7LZDSWOS.js → classDiagram-v2-f2df5561-6SOXSGQ2.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/dist-NLUQPPQQ.js +7 -0
- package/dist/browser/prod/excalidraw-assets/en-SQSS4H2K.js +1 -0
- package/dist/browser/prod/excalidraw-assets/{erDiagram-47591fe2-E5V666CF.js → erDiagram-47591fe2-RE6HB7RM.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{flowDiagram-5540d9b9-GMBRCYVF.js → flowDiagram-5540d9b9-ZNJZBERW.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{flowDiagram-v2-3b53844e-Z4HUWP6B.js → flowDiagram-v2-3b53844e-LY44JLQJ.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{flowchart-elk-definition-5fe447d6-5ZCYTX5N.js → flowchart-elk-definition-5fe447d6-TMTJ6Z7O.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{ganttDiagram-9a3bba1f-WM32OMT5.js → ganttDiagram-9a3bba1f-5O6EA6LX.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{gitGraphDiagram-96e6b4ee-CAKZ2U6E.js → gitGraphDiagram-96e6b4ee-UHYNM5DI.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/image-CMH7O36X.js +1 -0
- package/dist/browser/prod/excalidraw-assets/{infoDiagram-bcd20f53-MUIKXGC4.js → infoDiagram-bcd20f53-BP77NQEH.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{journeyDiagram-4fe6b3dc-NYRV4HK2.js → journeyDiagram-4fe6b3dc-XMGKCMES.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{mindmap-definition-f354de21-MY55DRSM.js → mindmap-definition-f354de21-ZQRRBRWF.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{pieDiagram-79897490-47L6J6L2.js → pieDiagram-79897490-IGXEC2KX.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{quadrantDiagram-62f64e94-DF5C2GDT.js → quadrantDiagram-62f64e94-WTHHDYJL.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{requirementDiagram-05bf5f74-C4IMUBDN.js → requirementDiagram-05bf5f74-MV4OFRVW.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{sankeyDiagram-97764748-YHW7EUST.js → sankeyDiagram-97764748-ZGYUHEJT.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{sequenceDiagram-acc0e65c-H3XEHT32.js → sequenceDiagram-acc0e65c-IBSENK6W.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{stateDiagram-0ff1cf1a-Z5WB6Q3P.js → stateDiagram-0ff1cf1a-DB73XNZH.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{stateDiagram-v2-9a9d610d-T7OZETQC.js → stateDiagram-v2-9a9d610d-2OOBUPNR.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{timeline-definition-fea2a41d-VVC22BWF.js → timeline-definition-fea2a41d-P3NQQVDU.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{xychartDiagram-ab372869-JAXODQF7.js → xychartDiagram-ab372869-HI3XLK3Y.js} +1 -1
- package/dist/browser/prod/index.css +1 -1
- package/dist/browser/prod/index.js +70 -51
- package/dist/dev/CascadiaMono-Regular-NWCXRPUG.woff2 +0 -0
- package/dist/dev/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
- package/dist/dev/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
- package/dist/dev/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
- package/dist/dev/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
- package/dist/{prod/en-II4GK66F.json → dev/en-HDAPS7XK.json} +41 -9
- package/dist/dev/index.css +668 -191
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +22026 -16675
- package/dist/dev/index.js.map +4 -4
- package/dist/excalidraw/actions/actionAddToLibrary.d.ts +22 -10
- package/dist/excalidraw/actions/actionAddToLibrary.js +4 -3
- package/dist/excalidraw/actions/actionAlign.d.ts +22 -22
- package/dist/excalidraw/actions/actionAlign.js +7 -6
- package/dist/excalidraw/actions/actionBoundText.d.ts +22 -14
- package/dist/excalidraw/actions/actionBoundText.js +11 -5
- package/dist/excalidraw/actions/actionCanvas.d.ts +124 -76
- package/dist/excalidraw/actions/actionCanvas.js +20 -15
- package/dist/excalidraw/actions/actionClipboard.d.ts +66 -38
- package/dist/excalidraw/actions/actionClipboard.js +14 -13
- package/dist/excalidraw/actions/actionDeleteSelected.d.ts +28 -16
- package/dist/excalidraw/actions/actionDeleteSelected.js +6 -3
- package/dist/excalidraw/actions/actionDistribute.d.ts +10 -10
- package/dist/excalidraw/actions/actionDistribute.js +3 -2
- package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +7 -8
- package/dist/excalidraw/actions/actionDuplicateSelection.js +7 -3
- package/dist/excalidraw/actions/actionElementLock.d.ts +21 -13
- package/dist/excalidraw/actions/actionElementLock.js +3 -2
- package/dist/excalidraw/actions/actionExport.d.ts +87 -51
- package/dist/excalidraw/actions/actionExport.js +15 -11
- package/dist/excalidraw/actions/actionFinalize.d.ts +21 -13
- package/dist/excalidraw/actions/actionFinalize.js +9 -5
- package/dist/excalidraw/actions/actionFlip.d.ts +10 -10
- package/dist/excalidraw/actions/actionFlip.js +12 -12
- package/dist/excalidraw/actions/actionFrame.d.ts +193 -24
- package/dist/excalidraw/actions/actionFrame.js +7 -6
- package/dist/excalidraw/actions/actionGroup.d.ts +28 -20
- package/dist/excalidraw/actions/actionGroup.js +9 -11
- package/dist/excalidraw/actions/actionHistory.d.ts +4 -3
- package/dist/excalidraw/actions/actionHistory.js +27 -28
- package/dist/excalidraw/actions/actionLinearEditor.d.ts +12 -6
- package/dist/excalidraw/actions/actionLinearEditor.js +21 -5
- package/dist/excalidraw/actions/actionLink.d.ts +11 -7
- package/dist/excalidraw/actions/actionLink.js +2 -1
- package/dist/excalidraw/actions/actionMenu.d.ts +26 -14
- package/dist/excalidraw/actions/actionMenu.js +4 -3
- package/dist/excalidraw/actions/actionNavigate.d.ts +16 -8
- package/dist/excalidraw/actions/actionNavigate.js +3 -2
- package/dist/excalidraw/actions/actionProperties.d.ts +272 -62
- package/dist/excalidraw/actions/actionProperties.js +261 -59
- package/dist/excalidraw/actions/actionSelectAll.d.ts +11 -7
- package/dist/excalidraw/actions/actionSelectAll.js +2 -1
- package/dist/excalidraw/actions/actionStyles.d.ts +17 -13
- package/dist/excalidraw/actions/actionStyles.js +7 -5
- package/dist/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
- package/dist/excalidraw/actions/actionTextAutoResize.js +38 -0
- package/dist/excalidraw/actions/actionToggleGridMode.d.ts +13 -7
- package/dist/excalidraw/actions/actionToggleGridMode.js +6 -2
- package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +10 -6
- package/dist/excalidraw/actions/actionToggleObjectsSnapMode.js +2 -1
- package/dist/excalidraw/actions/actionToggleStats.d.ts +11 -6
- package/dist/excalidraw/actions/actionToggleStats.js +6 -4
- package/dist/excalidraw/actions/actionToggleViewMode.d.ts +10 -6
- package/dist/excalidraw/actions/actionToggleViewMode.js +2 -1
- package/dist/excalidraw/actions/actionToggleZenMode.d.ts +10 -6
- package/dist/excalidraw/actions/actionToggleZenMode.js +2 -1
- package/dist/excalidraw/actions/actionZindex.d.ts +23 -19
- package/dist/excalidraw/actions/actionZindex.js +9 -4
- package/dist/excalidraw/actions/manager.d.ts +5 -5
- package/dist/excalidraw/actions/register.d.ts +1 -1
- package/dist/excalidraw/actions/shortcuts.d.ts +2 -2
- package/dist/excalidraw/actions/shortcuts.js +1 -1
- package/dist/excalidraw/actions/types.d.ts +8 -8
- package/dist/excalidraw/align.d.ts +1 -1
- package/dist/excalidraw/analytics.js +9 -7
- package/dist/excalidraw/animated-trail.d.ts +2 -2
- package/dist/excalidraw/appState.d.ts +9 -6
- package/dist/excalidraw/appState.js +8 -3
- package/dist/excalidraw/change.d.ts +191 -0
- package/dist/excalidraw/change.js +901 -0
- package/dist/excalidraw/charts.d.ts +1 -1
- package/dist/excalidraw/clients.d.ts +2 -2
- package/dist/excalidraw/clients.js +1 -1
- package/dist/excalidraw/clipboard.d.ts +3 -3
- package/dist/excalidraw/colors.d.ts +1 -1
- package/dist/excalidraw/components/Actions.d.ts +3 -3
- package/dist/excalidraw/components/Actions.js +10 -7
- package/dist/excalidraw/components/App.d.ts +26 -16
- package/dist/excalidraw/components/App.js +490 -217
- package/dist/excalidraw/components/ButtonIcon.d.ts +15 -0
- package/dist/excalidraw/components/ButtonIcon.js +8 -0
- package/dist/excalidraw/components/ButtonIconSelect.js +2 -3
- package/dist/excalidraw/components/ButtonSeparator.d.ts +2 -0
- package/dist/excalidraw/components/ButtonSeparator.js +7 -0
- package/dist/excalidraw/components/CheckboxItem.js +1 -1
- package/dist/excalidraw/components/ColorPicker/ColorInput.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/ColorInput.js +1 -1
- package/dist/excalidraw/components/ColorPicker/ColorPicker.d.ts +4 -4
- package/dist/excalidraw/components/ColorPicker/ColorPicker.js +48 -80
- package/dist/excalidraw/components/ColorPicker/Picker.d.ts +3 -3
- package/dist/excalidraw/components/ColorPicker/Picker.js +1 -1
- package/dist/excalidraw/components/ColorPicker/PickerColorList.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/PickerHeading.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/ShadeList.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/TopPicks.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +2 -2
- package/dist/excalidraw/components/ColorPicker/colorPickerUtils.js +1 -1
- package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
- package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.js +1 -1
- package/dist/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -1
- package/dist/excalidraw/components/CommandPalette/CommandPalette.js +33 -18
- package/dist/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -1
- package/dist/excalidraw/components/CommandPalette/types.d.ts +3 -3
- package/dist/excalidraw/components/ConfirmDialog.d.ts +1 -1
- package/dist/excalidraw/components/ContextMenu.d.ts +2 -2
- package/dist/excalidraw/components/ContextMenu.js +2 -2
- package/dist/excalidraw/components/DarkModeToggle.d.ts +1 -1
- package/dist/excalidraw/components/DarkModeToggle.js +3 -1
- package/dist/excalidraw/components/DefaultSidebar.d.ts +2 -2
- package/dist/excalidraw/components/Dialog.js +1 -1
- package/dist/excalidraw/components/DialogActionButton.d.ts +1 -1
- package/dist/excalidraw/components/EyeDropper.d.ts +2 -2
- package/dist/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
- package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
- package/dist/excalidraw/components/FontPicker/FontPicker.d.ts +21 -0
- package/dist/excalidraw/components/FontPicker/FontPicker.js +49 -0
- package/dist/excalidraw/components/FontPicker/FontPickerList.d.ts +25 -0
- package/dist/excalidraw/components/FontPicker/FontPickerList.js +119 -0
- package/dist/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +7 -0
- package/dist/excalidraw/components/FontPicker/FontPickerTrigger.js +13 -0
- package/dist/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +14 -0
- package/dist/excalidraw/components/FontPicker/keyboardNavHandlers.js +38 -0
- package/dist/excalidraw/components/HelpDialog.js +9 -7
- package/dist/excalidraw/components/HintViewer.d.ts +1 -1
- package/dist/excalidraw/components/IconPicker.js +2 -2
- package/dist/excalidraw/components/ImageExportDialog.d.ts +1 -1
- package/dist/excalidraw/components/InitializeApp.d.ts +2 -2
- package/dist/excalidraw/components/JSONExportDialog.d.ts +3 -3
- package/dist/excalidraw/components/LayerUI.d.ts +4 -4
- package/dist/excalidraw/components/LayerUI.js +10 -7
- package/dist/excalidraw/components/LibraryMenu.d.ts +2 -2
- package/dist/excalidraw/components/LibraryMenuBrowseButton.d.ts +1 -1
- package/dist/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
- package/dist/excalidraw/components/LibraryMenuHeaderContent.d.ts +2 -2
- package/dist/excalidraw/components/LibraryMenuItems.d.ts +1 -1
- package/dist/excalidraw/components/LibraryMenuSection.d.ts +5 -4
- package/dist/excalidraw/components/LibraryUnit.d.ts +2 -2
- package/dist/excalidraw/components/LoadingMessage.d.ts +1 -1
- package/dist/excalidraw/components/MagicSettings.js +2 -2
- package/dist/excalidraw/components/MobileMenu.d.ts +3 -3
- package/dist/excalidraw/components/MobileMenu.js +2 -6
- package/dist/excalidraw/components/Modal.d.ts +1 -1
- package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
- package/dist/excalidraw/components/PasteChartDialog.d.ts +1 -1
- package/dist/excalidraw/components/PasteChartDialog.js +1 -1
- package/dist/excalidraw/components/PropertiesPopover.d.ts +15 -0
- package/dist/excalidraw/components/PropertiesPopover.js +31 -0
- package/dist/excalidraw/components/PublishLibrary.d.ts +1 -1
- package/dist/excalidraw/components/QuickSearch.d.ts +9 -0
- package/dist/excalidraw/components/QuickSearch.js +8 -0
- package/dist/excalidraw/components/RadioGroup.d.ts +2 -1
- package/dist/excalidraw/components/RadioGroup.js +1 -1
- package/dist/excalidraw/components/SVGLayer.d.ts +1 -1
- package/dist/excalidraw/components/ScrollableList.d.ts +9 -0
- package/dist/excalidraw/components/ScrollableList.js +8 -0
- package/dist/excalidraw/components/Sidebar/Sidebar.d.ts +2 -2
- package/dist/excalidraw/components/Sidebar/Sidebar.js +1 -1
- package/dist/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -1
- package/dist/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -1
- package/dist/excalidraw/components/Sidebar/SidebarTrigger.d.ts +1 -1
- package/dist/excalidraw/components/Sidebar/common.d.ts +1 -1
- package/dist/excalidraw/components/Stack.d.ts +2 -2
- package/dist/excalidraw/components/Stats/Angle.d.ts +12 -0
- package/dist/excalidraw/components/Stats/Angle.js +52 -0
- package/dist/excalidraw/components/Stats/Collapsible.d.ts +9 -0
- package/dist/excalidraw/components/Stats/Collapsible.js +12 -0
- package/dist/excalidraw/components/Stats/Dimension.d.ts +12 -0
- package/dist/excalidraw/components/Stats/Dimension.js +67 -0
- package/dist/excalidraw/components/Stats/DragInput.d.ts +32 -0
- package/dist/excalidraw/components/Stats/DragInput.js +174 -0
- package/dist/excalidraw/components/Stats/FontSize.d.ts +12 -0
- package/dist/excalidraw/components/Stats/FontSize.js +50 -0
- package/dist/excalidraw/components/Stats/MultiAngle.d.ts +12 -0
- package/dist/excalidraw/components/Stats/MultiAngle.js +66 -0
- package/dist/excalidraw/components/Stats/MultiDimension.d.ts +15 -0
- package/dist/excalidraw/components/Stats/MultiDimension.js +197 -0
- package/dist/excalidraw/components/Stats/MultiFontSize.d.ts +13 -0
- package/dist/excalidraw/components/Stats/MultiFontSize.js +72 -0
- package/dist/excalidraw/components/Stats/MultiPosition.d.ts +15 -0
- package/dist/excalidraw/components/Stats/MultiPosition.js +100 -0
- package/dist/excalidraw/components/Stats/Position.d.ts +13 -0
- package/dist/excalidraw/components/Stats/Position.js +39 -0
- package/dist/excalidraw/components/Stats/index.d.ts +16 -0
- package/dist/excalidraw/components/Stats/index.js +78 -0
- package/dist/excalidraw/components/Stats/utils.d.ts +25 -0
- package/dist/excalidraw/components/Stats/utils.js +158 -0
- package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.js +6 -2
- package/dist/excalidraw/components/TTDDialog/TTDDialog.js +2 -2
- package/dist/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/common.d.ts +5 -5
- package/dist/excalidraw/components/TTDDialog/common.js +3 -7
- package/dist/excalidraw/components/TextField.d.ts +1 -1
- package/dist/excalidraw/components/Toast.d.ts +1 -1
- package/dist/excalidraw/components/ToolButton.d.ts +4 -2
- package/dist/excalidraw/components/ToolButton.js +1 -1
- package/dist/excalidraw/components/Trans.d.ts +1 -1
- package/dist/excalidraw/components/UserList.d.ts +1 -1
- package/dist/excalidraw/components/UserList.js +22 -22
- package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +5 -3
- package/dist/excalidraw/components/canvases/InteractiveCanvas.js +5 -2
- package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +2 -2
- package/dist/excalidraw/components/canvases/StaticCanvas.js +3 -2
- package/dist/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +12 -3
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +24 -4
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.js +55 -14
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +2 -1
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContent.js +2 -2
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +18 -0
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.js +9 -0
- package/dist/excalidraw/components/dropdownMenu/common.d.ts +1 -1
- package/dist/excalidraw/components/dropdownMenu/common.js +3 -2
- package/dist/excalidraw/components/footer/Footer.d.ts +2 -2
- package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +2 -2
- package/dist/excalidraw/components/hyperlink/Hyperlink.js +3 -3
- package/dist/excalidraw/components/hyperlink/helpers.d.ts +3 -3
- package/dist/excalidraw/components/hyperlink/helpers.js +2 -3
- package/dist/excalidraw/components/icons.d.ts +10 -1
- package/dist/excalidraw/components/icons.js +27 -5
- package/dist/excalidraw/components/main-menu/DefaultItems.d.ts +12 -2
- package/dist/excalidraw/components/main-menu/DefaultItems.js +38 -7
- package/dist/excalidraw/components/main-menu/MainMenu.d.ts +12 -3
- package/dist/excalidraw/components/welcome-screen/WelcomeScreen.Center.js +2 -2
- package/dist/excalidraw/components/welcome-screen/WelcomeScreen.Hints.js +3 -3
- package/dist/excalidraw/constants.d.ts +24 -6
- package/dist/excalidraw/constants.js +29 -7
- package/dist/excalidraw/context/ui-appState.d.ts +1 -1
- package/dist/excalidraw/cursor.d.ts +1 -1
- package/dist/excalidraw/data/EditorLocalStorage.d.ts +2 -2
- package/dist/excalidraw/data/blob.d.ts +5 -5
- package/dist/excalidraw/data/filesystem.d.ts +2 -1
- package/dist/excalidraw/data/index.d.ts +4 -4
- package/dist/excalidraw/data/json.d.ts +3 -3
- package/dist/excalidraw/data/library.d.ts +3 -3
- package/dist/excalidraw/data/magic.d.ts +3 -3
- package/dist/excalidraw/data/magic.js +2 -1
- package/dist/excalidraw/data/reconcile.d.ts +6 -0
- package/dist/excalidraw/data/reconcile.js +49 -0
- package/dist/excalidraw/data/resave.d.ts +2 -2
- package/dist/excalidraw/data/restore.d.ts +5 -5
- package/dist/excalidraw/data/restore.js +25 -10
- package/dist/excalidraw/data/transform.d.ts +4 -4
- package/dist/excalidraw/data/transform.js +15 -5
- package/dist/excalidraw/data/types.d.ts +3 -3
- package/dist/excalidraw/data/url.d.ts +1 -0
- package/dist/excalidraw/data/url.js +4 -1
- package/dist/excalidraw/element/ElementCanvasButtons.d.ts +1 -1
- package/dist/excalidraw/element/binding.d.ts +49 -8
- package/dist/excalidraw/element/binding.js +716 -153
- package/dist/excalidraw/element/bounds.d.ts +3 -4
- package/dist/excalidraw/element/bounds.js +0 -3
- package/dist/excalidraw/element/collision.d.ts +14 -19
- package/dist/excalidraw/element/collision.js +36 -713
- package/dist/excalidraw/element/containerCache.d.ts +1 -1
- package/dist/excalidraw/element/dragElements.d.ts +4 -4
- package/dist/excalidraw/element/dragElements.js +27 -3
- package/dist/excalidraw/element/embeddable.d.ts +15 -8
- package/dist/excalidraw/element/embeddable.js +98 -62
- package/dist/excalidraw/element/image.d.ts +2 -2
- package/dist/excalidraw/element/index.d.ts +2 -3
- package/dist/excalidraw/element/index.js +1 -2
- package/dist/excalidraw/element/linearElementEditor.d.ts +18 -14
- package/dist/excalidraw/element/linearElementEditor.js +12 -7
- package/dist/excalidraw/element/mutateElement.d.ts +4 -5
- package/dist/excalidraw/element/mutateElement.js +5 -3
- package/dist/excalidraw/element/newElement.d.ts +6 -9
- package/dist/excalidraw/element/newElement.js +21 -17
- package/dist/excalidraw/element/resizeElements.d.ts +12 -4
- package/dist/excalidraw/element/resizeElements.js +174 -98
- package/dist/excalidraw/element/resizeTest.d.ts +7 -7
- package/dist/excalidraw/element/resizeTest.js +53 -8
- package/dist/excalidraw/element/showSelectedShapeActions.d.ts +2 -2
- package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
- package/dist/excalidraw/element/sizeHelpers.js +3 -0
- package/dist/excalidraw/element/sortElements.d.ts +1 -1
- package/dist/excalidraw/element/textElement.d.ts +7 -30
- package/dist/excalidraw/element/textElement.js +68 -144
- package/dist/excalidraw/element/textWysiwyg.d.ts +12 -6
- package/dist/excalidraw/element/textWysiwyg.js +75 -62
- package/dist/excalidraw/element/transformHandles.d.ts +24 -6
- package/dist/excalidraw/element/transformHandles.js +22 -11
- package/dist/excalidraw/element/typeChecks.d.ts +5 -5
- package/dist/excalidraw/element/types.d.ts +33 -10
- package/dist/excalidraw/emitter.d.ts +1 -1
- package/dist/excalidraw/errors.d.ts +3 -0
- package/dist/excalidraw/errors.js +3 -0
- package/dist/excalidraw/fonts/ExcalidrawFont.d.ts +17 -0
- package/dist/excalidraw/fonts/ExcalidrawFont.js +50 -0
- package/dist/excalidraw/fonts/index.d.ts +45 -0
- package/dist/excalidraw/fonts/index.js +202 -0
- package/dist/excalidraw/fonts/metadata.d.ts +34 -0
- package/dist/excalidraw/fonts/metadata.js +90 -0
- package/dist/excalidraw/fractionalIndex.d.ts +40 -0
- package/dist/excalidraw/fractionalIndex.js +239 -0
- package/dist/excalidraw/frame.d.ts +4 -4
- package/dist/excalidraw/gatransforms.d.ts +1 -1
- package/dist/excalidraw/gesture.d.ts +1 -1
- package/dist/excalidraw/groups.d.ts +6 -4
- package/dist/excalidraw/groups.js +17 -0
- package/dist/excalidraw/history.d.ts +35 -47
- package/dist/excalidraw/history.js +100 -167
- package/dist/excalidraw/hooks/useCreatePortalContainer.js +2 -1
- package/dist/excalidraw/hooks/useEmitter.d.ts +2 -0
- package/dist/excalidraw/hooks/useEmitter.js +13 -0
- package/dist/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
- package/dist/excalidraw/i18n.d.ts +1 -1
- package/dist/excalidraw/index.d.ts +4 -2
- package/dist/excalidraw/index.js +5 -3
- package/dist/excalidraw/jotai.d.ts +1 -1
- package/dist/excalidraw/laser-trails.d.ts +3 -2
- package/dist/excalidraw/locales/en.json +41 -9
- package/dist/excalidraw/math.d.ts +4 -2
- package/dist/excalidraw/math.js +6 -0
- package/dist/excalidraw/mermaid.d.ts +2 -0
- package/dist/excalidraw/mermaid.js +28 -0
- package/dist/excalidraw/points.d.ts +1 -1
- package/dist/excalidraw/queue.d.ts +1 -1
- package/dist/excalidraw/renderer/helpers.d.ts +2 -2
- package/dist/excalidraw/renderer/helpers.js +2 -2
- package/dist/excalidraw/renderer/interactiveScene.d.ts +2 -2
- package/dist/excalidraw/renderer/interactiveScene.js +38 -11
- package/dist/excalidraw/renderer/renderElement.d.ts +6 -4
- package/dist/excalidraw/renderer/renderElement.js +81 -61
- package/dist/excalidraw/renderer/renderSnaps.d.ts +1 -1
- package/dist/excalidraw/renderer/renderSnaps.js +2 -1
- package/dist/excalidraw/renderer/staticScene.d.ts +1 -1
- package/dist/excalidraw/renderer/staticScene.js +14 -3
- package/dist/excalidraw/renderer/staticSvgScene.d.ts +4 -4
- package/dist/excalidraw/renderer/staticSvgScene.js +12 -1
- package/dist/excalidraw/scene/Renderer.d.ts +4 -4
- package/dist/excalidraw/scene/Renderer.js +2 -3
- package/dist/excalidraw/scene/Scene.d.ts +22 -12
- package/dist/excalidraw/scene/Scene.js +47 -23
- package/dist/excalidraw/scene/Shape.d.ts +1 -1
- package/dist/excalidraw/scene/ShapeCache.d.ts +4 -4
- package/dist/excalidraw/scene/comparisons.d.ts +2 -2
- package/dist/excalidraw/scene/export.d.ts +3 -2
- package/dist/excalidraw/scene/export.js +40 -29
- package/dist/excalidraw/scene/scroll.d.ts +2 -2
- package/dist/excalidraw/scene/scrollbars.d.ts +3 -3
- package/dist/excalidraw/scene/selection.d.ts +2 -2
- package/dist/excalidraw/scene/types.d.ts +7 -8
- package/dist/excalidraw/scene/zoom.d.ts +1 -1
- package/dist/excalidraw/shapes.d.ts +7 -0
- package/dist/excalidraw/shapes.js +40 -0
- package/dist/excalidraw/snapping.d.ts +4 -4
- package/dist/excalidraw/snapping.js +2 -1
- package/dist/excalidraw/store.d.ts +129 -0
- package/dist/excalidraw/store.js +296 -0
- package/dist/excalidraw/types.d.ts +45 -22
- package/dist/excalidraw/utils.d.ts +20 -4
- package/dist/excalidraw/utils.js +29 -0
- package/dist/excalidraw/zindex.d.ts +4 -4
- package/dist/excalidraw/zindex.js +9 -13
- package/dist/prod/CascadiaMono-Regular-NWCXRPUG.woff2 +0 -0
- package/dist/prod/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
- package/dist/prod/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
- package/dist/prod/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
- package/dist/prod/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
- package/dist/{dev/en-II4GK66F.json → prod/en-HDAPS7XK.json} +41 -9
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +47 -53
- package/dist/utils/bbox.d.ts +2 -2
- package/dist/utils/collision.d.ts +4 -0
- package/dist/utils/collision.js +48 -0
- package/dist/utils/export.d.ts +4 -3
- package/dist/utils/export.js +2 -1
- package/dist/utils/geometry/geometry.d.ts +71 -0
- package/dist/utils/geometry/geometry.js +674 -0
- package/dist/utils/geometry/shape.d.ts +56 -0
- package/dist/utils/geometry/shape.js +168 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/withinBounds.d.ts +1 -1
- package/history.ts +163 -218
- package/package.json +3 -2
- package/dist/browser/dev/Cascadia-CYPE3OJC.woff2 +0 -0
- package/dist/browser/dev/Virgil-UZN6MUT6.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/chunk-AK7SWNLN.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/chunk-RWZVJAQU.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/chunk-Z3PH3V2B.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/dist-Z46EOVOL.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/image-OFRRV5MB.css.map +0 -7
- package/dist/browser/prod/Cascadia-CYPE3OJC.woff2 +0 -0
- package/dist/browser/prod/Virgil-UZN6MUT6.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/chunk-LL4GORAM.js +0 -55
- package/dist/browser/prod/excalidraw-assets/dist-PIPZXALV.js +0 -6
- package/dist/browser/prod/excalidraw-assets/en-LROPV2RN.js +0 -1
- package/dist/browser/prod/excalidraw-assets/image-EFCJDJH3.js +0 -1
- package/dist/dev/Cascadia-CYPE3OJC.woff2 +0 -0
- package/dist/dev/Virgil-UZN6MUT6.woff2 +0 -0
- package/dist/excalidraw/components/Stats.d.ts +0 -11
- package/dist/excalidraw/components/Stats.js +0 -13
- package/dist/excalidraw/scene/Fonts.d.ts +0 -21
- package/dist/excalidraw/scene/Fonts.js +0 -72
- package/dist/prod/Cascadia-CYPE3OJC.woff2 +0 -0
- package/dist/prod/Virgil-UZN6MUT6.woff2 +0 -0
- /package/dist/browser/dev/{Assistant-Bold-ZDZZ6JHA.woff2 → excalidraw-assets-dev/Assistant-Bold-ZDZZ6JHA.woff2} +0 -0
- /package/dist/browser/dev/{Assistant-Medium-DZ25RZU3.woff2 → excalidraw-assets-dev/Assistant-Medium-DZ25RZU3.woff2} +0 -0
- /package/dist/browser/dev/{Assistant-Regular-PLF2XOGW.woff2 → excalidraw-assets-dev/Assistant-Regular-PLF2XOGW.woff2} +0 -0
- /package/dist/browser/dev/{Assistant-SemiBold-CZ5MX6FK.woff2 → excalidraw-assets-dev/Assistant-SemiBold-CZ5MX6FK.woff2} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-ACFH36JV.js.map → blockDiagram-91b80b7a-H47FTXHA.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-QZ27YR47.js.map → c4Diagram-b2a90758-NNJK6GKC.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-HO2HMSK7.js.map → chunk-4KQVEBHW.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-USGV265L.js.map → chunk-53YI56GV.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-EDFX3S7X.js.map → chunk-A2WCJI4I.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-IX4V72YG.js.map → chunk-EFLPX7NE.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-MXVETLVM.js.map → chunk-JYIQCNWV.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-YZIOORVX.js.map → chunk-LVIQQW6F.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-6U7GQNJT.js.map → chunk-PXLO3FOU.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-7DACDEY3.js.map → chunk-TO2AW5PW.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-NJ77ZFNJ.js.map → chunk-VURILHLY.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-2T2GU7NF.js.map → chunk-ZAYGSUHF.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-QSLMH4JW.js.map → classDiagram-30eddba6-CUYIJICN.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-DY4DYQ5P.js.map → classDiagram-v2-f2df5561-K6WW6K73.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js.map → en-RAFN4KPD.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-SOOJRTCB.js.map → erDiagram-47591fe2-XGAD7EEP.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-AHGL4KPK.js.map → flowDiagram-5540d9b9-B6EOVNNO.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-56LDZZWY.js.map → flowDiagram-v2-3b53844e-NUG24FJH.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-27LUKRI6.js.map → flowchart-elk-definition-5fe447d6-25Y7PCBL.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-EHGYGNG6.js.map → ganttDiagram-9a3bba1f-GNL6ZDTC.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-AJQNBDW5.js.map → gitGraphDiagram-96e6b4ee-HNW52NVO.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{image-EDKQZH7Z.js.map → image-ZNLDWTK3.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-SWLLQVES.js.map → infoDiagram-bcd20f53-FWEUVFLT.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-7UAVCWOZ.js.map → journeyDiagram-4fe6b3dc-RZIUI7UG.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-SROW5KGM.js.map → mindmap-definition-f354de21-GBVN45GU.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-QKCI6NCB.js.map → pieDiagram-79897490-ECENNII6.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-LNYJZFC5.js.map → quadrantDiagram-62f64e94-ZMEOFVNL.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZZD7ZHFA.js.map → requirementDiagram-05bf5f74-FHZSFHCR.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-L75ZZ4UM.js.map → sankeyDiagram-97764748-VDKIKTA6.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-6PCU7TDK.js.map → sequenceDiagram-acc0e65c-6JUSPVKX.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-WM76WOPR.js.map → stateDiagram-0ff1cf1a-L3AKWENF.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-N4HZW3O2.js.map → stateDiagram-v2-9a9d610d-NU3GGMCH.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-ZHGCAXGP.js.map → timeline-definition-fea2a41d-JGP7XCHW.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-2DLOVRAZ.js.map → xychartDiagram-ab372869-HLFHHF2I.js.map} +0 -0
- /package/dist/browser/prod/{Assistant-Bold-ZDZZ6JHA.woff2 → excalidraw-assets/Assistant-Bold-ZDZZ6JHA.woff2} +0 -0
- /package/dist/browser/prod/{Assistant-Medium-DZ25RZU3.woff2 → excalidraw-assets/Assistant-Medium-DZ25RZU3.woff2} +0 -0
- /package/dist/browser/prod/{Assistant-Regular-PLF2XOGW.woff2 → excalidraw-assets/Assistant-Regular-PLF2XOGW.woff2} +0 -0
- /package/dist/browser/prod/{Assistant-SemiBold-CZ5MX6FK.woff2 → excalidraw-assets/Assistant-SemiBold-CZ5MX6FK.woff2} +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type Scene from "../scene/Scene";
|
|
2
|
+
import type { ExcalidrawTextElement, FontFamilyValues } from "../element/types";
|
|
3
|
+
import { type FontMetadata } from "./metadata";
|
|
4
|
+
import { type Font } from "./ExcalidrawFont";
|
|
5
|
+
export declare class Fonts {
|
|
6
|
+
static readonly loadedFontsCache: Set<string>;
|
|
7
|
+
private static _registered;
|
|
8
|
+
static get registered(): Map<number, {
|
|
9
|
+
metadata: FontMetadata;
|
|
10
|
+
fontFaces: Font[];
|
|
11
|
+
}>;
|
|
12
|
+
get registered(): Map<number, {
|
|
13
|
+
metadata: FontMetadata;
|
|
14
|
+
fontFaces: Font[];
|
|
15
|
+
}>;
|
|
16
|
+
private readonly scene;
|
|
17
|
+
get sceneFamilies(): number[];
|
|
18
|
+
constructor({ scene }: {
|
|
19
|
+
scene: Scene;
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* if we load a (new) font, it's likely that text elements using it have
|
|
23
|
+
* already been rendered using a fallback font. Thus, we want invalidate
|
|
24
|
+
* their shapes and rerender. See #637.
|
|
25
|
+
*
|
|
26
|
+
* Invalidates text elements and rerenders scene, provided that at least one
|
|
27
|
+
* of the supplied fontFaces has not already been processed.
|
|
28
|
+
*/
|
|
29
|
+
onLoaded: (fontFaces: readonly FontFace[]) => false | undefined;
|
|
30
|
+
load: () => Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* WARN: should be called just once on init, even across multiple instances.
|
|
33
|
+
*/
|
|
34
|
+
private static init;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Calculates vertical offset for a text with alphabetic baseline.
|
|
38
|
+
*/
|
|
39
|
+
export declare const getVerticalOffset: (fontFamily: ExcalidrawTextElement["fontFamily"], fontSize: ExcalidrawTextElement["fontSize"], lineHeightPx: number) => number;
|
|
40
|
+
/**
|
|
41
|
+
* Gets line height forr a selected family.
|
|
42
|
+
*/
|
|
43
|
+
export declare const getLineHeight: (fontFamily: FontFamilyValues) => number & {
|
|
44
|
+
_brand: "unitlessLineHeight";
|
|
45
|
+
};
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { ShapeCache } from "../scene/ShapeCache";
|
|
2
|
+
import { isTextElement } from "../element";
|
|
3
|
+
import { getFontString } from "../utils";
|
|
4
|
+
import { FONT_FAMILY } from "../constants";
|
|
5
|
+
import { LOCAL_FONT_PROTOCOL, FONT_METADATA, RANGES, } from "./metadata";
|
|
6
|
+
import { ExcalidrawFont } from "./ExcalidrawFont";
|
|
7
|
+
import { getContainerElement } from "../element/textElement";
|
|
8
|
+
import Virgil from "./assets/Virgil-Regular.woff2";
|
|
9
|
+
import Excalifont from "./assets/Excalifont-Regular.woff2";
|
|
10
|
+
import Cascadia from "./assets/CascadiaMono-Regular.woff2";
|
|
11
|
+
import ComicShanns from "./assets/ComicShanns-Regular.woff2";
|
|
12
|
+
import LiberationSans from "./assets/LiberationSans-Regular.woff2";
|
|
13
|
+
import LilitaLatin from "https://fonts.gstatic.com/s/lilitaone/v15/i7dPIFZ9Zz-WBtRtedDbYEF8RXi4EwQ.woff2";
|
|
14
|
+
import LilitaLatinExt from "https://fonts.gstatic.com/s/lilitaone/v15/i7dPIFZ9Zz-WBtRtedDbYE98RXi4EwSsbg.woff2";
|
|
15
|
+
import NunitoLatin from "https://fonts.gstatic.com/s/nunito/v26/XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTQ3j6zbXWjgeg.woff2";
|
|
16
|
+
import NunitoLatinExt from "https://fonts.gstatic.com/s/nunito/v26/XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTo3j6zbXWjgevT5.woff2";
|
|
17
|
+
import NunitoCyrilic from "https://fonts.gstatic.com/s/nunito/v26/XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTA3j6zbXWjgevT5.woff2";
|
|
18
|
+
import NunitoCyrilicExt from "https://fonts.gstatic.com/s/nunito/v26/XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTk3j6zbXWjgevT5.woff2";
|
|
19
|
+
import NunitoVietnamese from "https://fonts.gstatic.com/s/nunito/v26/XRXI3I6Li01BKofiOc5wtlZ2di8HDIkhdTs3j6zbXWjgevT5.woff2";
|
|
20
|
+
export class Fonts {
|
|
21
|
+
// it's ok to track fonts across multiple instances only once, so let's use
|
|
22
|
+
// a static member to reduce memory footprint
|
|
23
|
+
static loadedFontsCache = new Set();
|
|
24
|
+
static _registered;
|
|
25
|
+
static get registered() {
|
|
26
|
+
if (!Fonts._registered) {
|
|
27
|
+
// lazy load the fonts
|
|
28
|
+
Fonts._registered = Fonts.init();
|
|
29
|
+
}
|
|
30
|
+
return Fonts._registered;
|
|
31
|
+
}
|
|
32
|
+
get registered() {
|
|
33
|
+
return Fonts.registered;
|
|
34
|
+
}
|
|
35
|
+
scene;
|
|
36
|
+
get sceneFamilies() {
|
|
37
|
+
return Array.from(this.scene.getNonDeletedElements().reduce((families, element) => {
|
|
38
|
+
if (isTextElement(element)) {
|
|
39
|
+
families.add(element.fontFamily);
|
|
40
|
+
}
|
|
41
|
+
return families;
|
|
42
|
+
}, new Set()));
|
|
43
|
+
}
|
|
44
|
+
constructor({ scene }) {
|
|
45
|
+
this.scene = scene;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* if we load a (new) font, it's likely that text elements using it have
|
|
49
|
+
* already been rendered using a fallback font. Thus, we want invalidate
|
|
50
|
+
* their shapes and rerender. See #637.
|
|
51
|
+
*
|
|
52
|
+
* Invalidates text elements and rerenders scene, provided that at least one
|
|
53
|
+
* of the supplied fontFaces has not already been processed.
|
|
54
|
+
*/
|
|
55
|
+
onLoaded = (fontFaces) => {
|
|
56
|
+
if (
|
|
57
|
+
// bail if all fonts with have been processed. We're checking just a
|
|
58
|
+
// subset of the font properties (though it should be enough), so it
|
|
59
|
+
// can technically bail on a false positive.
|
|
60
|
+
fontFaces.every((fontFace) => {
|
|
61
|
+
const sig = `${fontFace.family}-${fontFace.style}-${fontFace.weight}-${fontFace.unicodeRange}`;
|
|
62
|
+
if (Fonts.loadedFontsCache.has(sig)) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
Fonts.loadedFontsCache.add(sig);
|
|
66
|
+
return false;
|
|
67
|
+
})) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
let didUpdate = false;
|
|
71
|
+
const elementsMap = this.scene.getNonDeletedElementsMap();
|
|
72
|
+
for (const element of this.scene.getNonDeletedElements()) {
|
|
73
|
+
if (isTextElement(element)) {
|
|
74
|
+
didUpdate = true;
|
|
75
|
+
ShapeCache.delete(element);
|
|
76
|
+
const container = getContainerElement(element, elementsMap);
|
|
77
|
+
if (container) {
|
|
78
|
+
ShapeCache.delete(container);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (didUpdate) {
|
|
83
|
+
this.scene.triggerUpdate();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
load = async () => {
|
|
87
|
+
// Add all registered font faces into the `document.fonts` (if not added already)
|
|
88
|
+
for (const { fontFaces } of Fonts.registered.values()) {
|
|
89
|
+
for (const { fontFace, url } of fontFaces) {
|
|
90
|
+
if (url.protocol !== LOCAL_FONT_PROTOCOL &&
|
|
91
|
+
!window.document.fonts.has(fontFace)) {
|
|
92
|
+
window.document.fonts.add(fontFace);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const loaded = await Promise.all(this.sceneFamilies.map(async (fontFamily) => {
|
|
97
|
+
const fontString = getFontString({
|
|
98
|
+
fontFamily,
|
|
99
|
+
fontSize: 16,
|
|
100
|
+
});
|
|
101
|
+
// WARN: without "text" param it does not have to mean that all font faces are loaded, instead it could be just one!
|
|
102
|
+
if (!window.document.fonts.check(fontString)) {
|
|
103
|
+
try {
|
|
104
|
+
// WARN: browser prioritizes loading only font faces with unicode ranges for characters which are present in the document (html & canvas), other font faces could stay unloaded
|
|
105
|
+
// we might want to retry here, i.e. in case CDN is down, but so far I didn't experience any issues - maybe it handles retry-like logic under the hood
|
|
106
|
+
return await window.document.fonts.load(fontString);
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
// don't let it all fail if just one font fails to load
|
|
110
|
+
console.error(`Failed to load font: "${fontString}" with error "${e}", given the following registered font:`, JSON.stringify(Fonts.registered.get(fontFamily), undefined, 2));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return Promise.resolve();
|
|
114
|
+
}));
|
|
115
|
+
this.onLoaded(loaded.flat().filter(Boolean));
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* WARN: should be called just once on init, even across multiple instances.
|
|
119
|
+
*/
|
|
120
|
+
static init() {
|
|
121
|
+
const fonts = {
|
|
122
|
+
registered: new Map(),
|
|
123
|
+
};
|
|
124
|
+
const _register = register.bind(fonts);
|
|
125
|
+
_register("Virgil", FONT_METADATA[FONT_FAMILY.Virgil], {
|
|
126
|
+
uri: Virgil,
|
|
127
|
+
});
|
|
128
|
+
_register("Excalifont", FONT_METADATA[FONT_FAMILY.Excalifont], {
|
|
129
|
+
uri: Excalifont,
|
|
130
|
+
});
|
|
131
|
+
// keeping for backwards compatibility reasons, uses system font (Helvetica on MacOS, Arial on Win)
|
|
132
|
+
_register("Helvetica", FONT_METADATA[FONT_FAMILY.Helvetica], {
|
|
133
|
+
uri: LOCAL_FONT_PROTOCOL,
|
|
134
|
+
});
|
|
135
|
+
// used for server-side pdf & png export instead of helvetica (technically does not need metrics, but kept in for consistency)
|
|
136
|
+
_register("Liberation Sans", FONT_METADATA[FONT_FAMILY["Liberation Sans"]], {
|
|
137
|
+
uri: LiberationSans,
|
|
138
|
+
});
|
|
139
|
+
_register("Cascadia", FONT_METADATA[FONT_FAMILY.Cascadia], {
|
|
140
|
+
uri: Cascadia,
|
|
141
|
+
});
|
|
142
|
+
_register("Comic Shanns", FONT_METADATA[FONT_FAMILY["Comic Shanns"]], {
|
|
143
|
+
uri: ComicShanns,
|
|
144
|
+
});
|
|
145
|
+
_register("Lilita One", FONT_METADATA[FONT_FAMILY["Lilita One"]], { uri: LilitaLatinExt, descriptors: { unicodeRange: RANGES.LATIN_EXT } }, { uri: LilitaLatin, descriptors: { unicodeRange: RANGES.LATIN } });
|
|
146
|
+
_register("Nunito", FONT_METADATA[FONT_FAMILY.Nunito], {
|
|
147
|
+
uri: NunitoCyrilicExt,
|
|
148
|
+
descriptors: { unicodeRange: RANGES.CYRILIC_EXT, weight: "500" },
|
|
149
|
+
}, {
|
|
150
|
+
uri: NunitoCyrilic,
|
|
151
|
+
descriptors: { unicodeRange: RANGES.CYRILIC, weight: "500" },
|
|
152
|
+
}, {
|
|
153
|
+
uri: NunitoVietnamese,
|
|
154
|
+
descriptors: { unicodeRange: RANGES.VIETNAMESE, weight: "500" },
|
|
155
|
+
}, {
|
|
156
|
+
uri: NunitoLatinExt,
|
|
157
|
+
descriptors: { unicodeRange: RANGES.LATIN_EXT, weight: "500" },
|
|
158
|
+
}, {
|
|
159
|
+
uri: NunitoLatin,
|
|
160
|
+
descriptors: { unicodeRange: RANGES.LATIN, weight: "500" },
|
|
161
|
+
});
|
|
162
|
+
return fonts.registered;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Register a new font.
|
|
167
|
+
*
|
|
168
|
+
* @param family font family
|
|
169
|
+
* @param metadata font metadata
|
|
170
|
+
* @param params array of the rest of the FontFace parameters [uri: string, descriptors: FontFaceDescriptors?] ,
|
|
171
|
+
*/
|
|
172
|
+
function register(family, metadata, ...params) {
|
|
173
|
+
// TODO: likely we will need to abandon number "id" in order to support custom fonts
|
|
174
|
+
const familyId = FONT_FAMILY[family];
|
|
175
|
+
const registeredFamily = this.registered.get(familyId);
|
|
176
|
+
if (!registeredFamily) {
|
|
177
|
+
this.registered.set(familyId, {
|
|
178
|
+
metadata,
|
|
179
|
+
fontFaces: params.map(({ uri, descriptors }) => new ExcalidrawFont(family, uri, descriptors)),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return this.registered;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Calculates vertical offset for a text with alphabetic baseline.
|
|
186
|
+
*/
|
|
187
|
+
export const getVerticalOffset = (fontFamily, fontSize, lineHeightPx) => {
|
|
188
|
+
const { unitsPerEm, ascender, descender } = Fonts.registered.get(fontFamily)?.metadata.metrics ||
|
|
189
|
+
FONT_METADATA[FONT_FAMILY.Virgil].metrics;
|
|
190
|
+
const fontSizeEm = fontSize / unitsPerEm;
|
|
191
|
+
const lineGap = (lineHeightPx - fontSizeEm * ascender + fontSizeEm * descender) / 2;
|
|
192
|
+
const verticalOffset = fontSizeEm * ascender + lineGap;
|
|
193
|
+
return verticalOffset;
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Gets line height forr a selected family.
|
|
197
|
+
*/
|
|
198
|
+
export const getLineHeight = (fontFamily) => {
|
|
199
|
+
const { lineHeight } = Fonts.registered.get(fontFamily)?.metadata.metrics ||
|
|
200
|
+
FONT_METADATA[FONT_FAMILY.Excalifont].metrics;
|
|
201
|
+
return lineHeight;
|
|
202
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
/**
|
|
3
|
+
* Encapsulates font metrics with additional font metadata.
|
|
4
|
+
* */
|
|
5
|
+
export interface FontMetadata {
|
|
6
|
+
/** for head & hhea metrics read the woff2 with https://fontdrop.info/ */
|
|
7
|
+
metrics: {
|
|
8
|
+
/** head.unitsPerEm metric */
|
|
9
|
+
unitsPerEm: 1000 | 1024 | 2048;
|
|
10
|
+
/** hhea.ascender metric */
|
|
11
|
+
ascender: number;
|
|
12
|
+
/** hhea.descender metric */
|
|
13
|
+
descender: number;
|
|
14
|
+
/** harcoded unitless line-height, https://github.com/excalidraw/excalidraw/pull/6360#issuecomment-1477635971 */
|
|
15
|
+
lineHeight: number;
|
|
16
|
+
};
|
|
17
|
+
/** element to be displayed as an icon */
|
|
18
|
+
icon: JSX.Element;
|
|
19
|
+
/** flag to indicate a deprecated font */
|
|
20
|
+
deprecated?: true;
|
|
21
|
+
/** flag to indicate a server-side only font */
|
|
22
|
+
serverSide?: true;
|
|
23
|
+
}
|
|
24
|
+
export declare const FONT_METADATA: Record<number, FontMetadata>;
|
|
25
|
+
/** Unicode ranges */
|
|
26
|
+
export declare const RANGES: {
|
|
27
|
+
LATIN: string;
|
|
28
|
+
LATIN_EXT: string;
|
|
29
|
+
CYRILIC_EXT: string;
|
|
30
|
+
CYRILIC: string;
|
|
31
|
+
VIETNAMESE: string;
|
|
32
|
+
};
|
|
33
|
+
/** local protocol to skip the local font from registering or inlining */
|
|
34
|
+
export declare const LOCAL_FONT_PROTOCOL = "local:";
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { FontFamilyCodeIcon, FontFamilyHeadingIcon, FontFamilyNormalIcon, FreedrawIcon, } from "../components/icons";
|
|
2
|
+
import { FONT_FAMILY } from "../constants";
|
|
3
|
+
export const FONT_METADATA = {
|
|
4
|
+
[FONT_FAMILY.Excalifont]: {
|
|
5
|
+
metrics: {
|
|
6
|
+
unitsPerEm: 1000,
|
|
7
|
+
ascender: 886,
|
|
8
|
+
descender: -374,
|
|
9
|
+
lineHeight: 1.25,
|
|
10
|
+
},
|
|
11
|
+
icon: FreedrawIcon,
|
|
12
|
+
},
|
|
13
|
+
[FONT_FAMILY.Nunito]: {
|
|
14
|
+
metrics: {
|
|
15
|
+
unitsPerEm: 1000,
|
|
16
|
+
ascender: 1011,
|
|
17
|
+
descender: -353,
|
|
18
|
+
lineHeight: 1.35,
|
|
19
|
+
},
|
|
20
|
+
icon: FontFamilyNormalIcon,
|
|
21
|
+
},
|
|
22
|
+
[FONT_FAMILY["Lilita One"]]: {
|
|
23
|
+
metrics: {
|
|
24
|
+
unitsPerEm: 1000,
|
|
25
|
+
ascender: 923,
|
|
26
|
+
descender: -220,
|
|
27
|
+
lineHeight: 1.15,
|
|
28
|
+
},
|
|
29
|
+
icon: FontFamilyHeadingIcon,
|
|
30
|
+
},
|
|
31
|
+
[FONT_FAMILY["Comic Shanns"]]: {
|
|
32
|
+
metrics: {
|
|
33
|
+
unitsPerEm: 1000,
|
|
34
|
+
ascender: 750,
|
|
35
|
+
descender: -250,
|
|
36
|
+
lineHeight: 1.25,
|
|
37
|
+
},
|
|
38
|
+
icon: FontFamilyCodeIcon,
|
|
39
|
+
},
|
|
40
|
+
[FONT_FAMILY.Virgil]: {
|
|
41
|
+
metrics: {
|
|
42
|
+
unitsPerEm: 1000,
|
|
43
|
+
ascender: 886,
|
|
44
|
+
descender: -374,
|
|
45
|
+
lineHeight: 1.25,
|
|
46
|
+
},
|
|
47
|
+
icon: FreedrawIcon,
|
|
48
|
+
deprecated: true,
|
|
49
|
+
},
|
|
50
|
+
[FONT_FAMILY.Helvetica]: {
|
|
51
|
+
metrics: {
|
|
52
|
+
unitsPerEm: 2048,
|
|
53
|
+
ascender: 1577,
|
|
54
|
+
descender: -471,
|
|
55
|
+
lineHeight: 1.15,
|
|
56
|
+
},
|
|
57
|
+
icon: FontFamilyNormalIcon,
|
|
58
|
+
deprecated: true,
|
|
59
|
+
},
|
|
60
|
+
[FONT_FAMILY.Cascadia]: {
|
|
61
|
+
metrics: {
|
|
62
|
+
unitsPerEm: 2048,
|
|
63
|
+
ascender: 1900,
|
|
64
|
+
descender: -480,
|
|
65
|
+
lineHeight: 1.2,
|
|
66
|
+
},
|
|
67
|
+
icon: FontFamilyCodeIcon,
|
|
68
|
+
deprecated: true,
|
|
69
|
+
},
|
|
70
|
+
[FONT_FAMILY["Liberation Sans"]]: {
|
|
71
|
+
metrics: {
|
|
72
|
+
unitsPerEm: 2048,
|
|
73
|
+
ascender: 1854,
|
|
74
|
+
descender: -434,
|
|
75
|
+
lineHeight: 1.15,
|
|
76
|
+
},
|
|
77
|
+
icon: FontFamilyNormalIcon,
|
|
78
|
+
serverSide: true,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
/** Unicode ranges */
|
|
82
|
+
export const RANGES = {
|
|
83
|
+
LATIN: "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD",
|
|
84
|
+
LATIN_EXT: "U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF",
|
|
85
|
+
CYRILIC_EXT: "U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F",
|
|
86
|
+
CYRILIC: "U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116",
|
|
87
|
+
VIETNAMESE: "U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB",
|
|
88
|
+
};
|
|
89
|
+
/** local protocol to skip the local font from registering or inlining */
|
|
90
|
+
export const LOCAL_FONT_PROTOCOL = "local:";
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ExcalidrawElement, OrderedExcalidrawElement } from "./element/types";
|
|
2
|
+
/**
|
|
3
|
+
* Envisioned relation between array order and fractional indices:
|
|
4
|
+
*
|
|
5
|
+
* 1) Array (or array-like ordered data structure) should be used as a cache of elements order, hiding the internal fractional indices implementation.
|
|
6
|
+
* - it's undesirable to perform reorder for each related operation, therefore it's necessary to cache the order defined by fractional indices into an ordered data structure
|
|
7
|
+
* - it's easy enough to define the order of the elements from the outside (boundaries), without worrying about the underlying structure of fractional indices (especially for the host apps)
|
|
8
|
+
* - it's necessary to always keep the array support for backwards compatibility (restore) - old scenes, old libraries, supporting multiple excalidraw versions etc.
|
|
9
|
+
* - it's necessary to always keep the fractional indices in sync with the array order
|
|
10
|
+
* - elements with invalid indices should be detected and synced, without altering the already valid indices
|
|
11
|
+
*
|
|
12
|
+
* 2) Fractional indices should be used to reorder the elements, whenever the cached order is expected to be invalidated.
|
|
13
|
+
* - as the fractional indices are encoded as part of the elements, it opens up possibilities for incremental-like APIs
|
|
14
|
+
* - re-order based on fractional indices should be part of (multiplayer) operations such as reconciliation & undo/redo
|
|
15
|
+
* - technically all the z-index actions could perform also re-order based on fractional indices,but in current state it would not bring much benefits,
|
|
16
|
+
* as it's faster & more efficient to perform re-order based on array manipulation and later synchronisation of moved indices with the array order
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Ensure that all elements have valid fractional indices.
|
|
20
|
+
*
|
|
21
|
+
* @throws `InvalidFractionalIndexError` if invalid index is detected.
|
|
22
|
+
*/
|
|
23
|
+
export declare const validateFractionalIndices: (indices: (ExcalidrawElement["index"] | undefined)[]) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Order the elements based on the fractional indices.
|
|
26
|
+
* - when fractional indices are identical, break the tie based on the element id
|
|
27
|
+
* - when there is no fractional index in one of the elements, respect the order of the array
|
|
28
|
+
*/
|
|
29
|
+
export declare const orderByFractionalIndex: (elements: OrderedExcalidrawElement[]) => OrderedExcalidrawElement[];
|
|
30
|
+
/**
|
|
31
|
+
* Synchronizes invalid fractional indices of moved elements with the array order by mutating passed elements.
|
|
32
|
+
* If the synchronization fails or the result is invalid, it fallbacks to `syncInvalidIndices`.
|
|
33
|
+
*/
|
|
34
|
+
export declare const syncMovedIndices: (elements: readonly ExcalidrawElement[], movedElements: Map<string, ExcalidrawElement>) => OrderedExcalidrawElement[];
|
|
35
|
+
/**
|
|
36
|
+
* Synchronizes all invalid fractional indices with the array order by mutating passed elements.
|
|
37
|
+
*
|
|
38
|
+
* WARN: in edge cases it could modify the elements which were not moved, as it's impossible to guess the actually moved elements from the elements array itself.
|
|
39
|
+
*/
|
|
40
|
+
export declare const syncInvalidIndices: (elements: readonly ExcalidrawElement[]) => OrderedExcalidrawElement[];
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { generateNKeysBetween } from "fractional-indexing";
|
|
2
|
+
import { mutateElement } from "./element/mutateElement";
|
|
3
|
+
import { InvalidFractionalIndexError } from "./errors";
|
|
4
|
+
/**
|
|
5
|
+
* Envisioned relation between array order and fractional indices:
|
|
6
|
+
*
|
|
7
|
+
* 1) Array (or array-like ordered data structure) should be used as a cache of elements order, hiding the internal fractional indices implementation.
|
|
8
|
+
* - it's undesirable to perform reorder for each related operation, therefore it's necessary to cache the order defined by fractional indices into an ordered data structure
|
|
9
|
+
* - it's easy enough to define the order of the elements from the outside (boundaries), without worrying about the underlying structure of fractional indices (especially for the host apps)
|
|
10
|
+
* - it's necessary to always keep the array support for backwards compatibility (restore) - old scenes, old libraries, supporting multiple excalidraw versions etc.
|
|
11
|
+
* - it's necessary to always keep the fractional indices in sync with the array order
|
|
12
|
+
* - elements with invalid indices should be detected and synced, without altering the already valid indices
|
|
13
|
+
*
|
|
14
|
+
* 2) Fractional indices should be used to reorder the elements, whenever the cached order is expected to be invalidated.
|
|
15
|
+
* - as the fractional indices are encoded as part of the elements, it opens up possibilities for incremental-like APIs
|
|
16
|
+
* - re-order based on fractional indices should be part of (multiplayer) operations such as reconciliation & undo/redo
|
|
17
|
+
* - technically all the z-index actions could perform also re-order based on fractional indices,but in current state it would not bring much benefits,
|
|
18
|
+
* as it's faster & more efficient to perform re-order based on array manipulation and later synchronisation of moved indices with the array order
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Ensure that all elements have valid fractional indices.
|
|
22
|
+
*
|
|
23
|
+
* @throws `InvalidFractionalIndexError` if invalid index is detected.
|
|
24
|
+
*/
|
|
25
|
+
export const validateFractionalIndices = (indices) => {
|
|
26
|
+
for (const [i, index] of indices.entries()) {
|
|
27
|
+
const predecessorIndex = indices[i - 1];
|
|
28
|
+
const successorIndex = indices[i + 1];
|
|
29
|
+
if (!isValidFractionalIndex(index, predecessorIndex, successorIndex)) {
|
|
30
|
+
throw new InvalidFractionalIndexError(`Fractional indices invariant for element has been compromised - ["${predecessorIndex}", "${index}", "${successorIndex}"] [predecessor, current, successor]`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Order the elements based on the fractional indices.
|
|
36
|
+
* - when fractional indices are identical, break the tie based on the element id
|
|
37
|
+
* - when there is no fractional index in one of the elements, respect the order of the array
|
|
38
|
+
*/
|
|
39
|
+
export const orderByFractionalIndex = (elements) => {
|
|
40
|
+
return elements.sort((a, b) => {
|
|
41
|
+
// in case the indices are not the defined at runtime
|
|
42
|
+
if (isOrderedElement(a) && isOrderedElement(b)) {
|
|
43
|
+
if (a.index < b.index) {
|
|
44
|
+
return -1;
|
|
45
|
+
}
|
|
46
|
+
else if (a.index > b.index) {
|
|
47
|
+
return 1;
|
|
48
|
+
}
|
|
49
|
+
// break ties based on the element id
|
|
50
|
+
return a.id < b.id ? -1 : 1;
|
|
51
|
+
}
|
|
52
|
+
// defensively keep the array order
|
|
53
|
+
return 1;
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Synchronizes invalid fractional indices of moved elements with the array order by mutating passed elements.
|
|
58
|
+
* If the synchronization fails or the result is invalid, it fallbacks to `syncInvalidIndices`.
|
|
59
|
+
*/
|
|
60
|
+
export const syncMovedIndices = (elements, movedElements) => {
|
|
61
|
+
try {
|
|
62
|
+
const indicesGroups = getMovedIndicesGroups(elements, movedElements);
|
|
63
|
+
// try generatating indices, throws on invalid movedElements
|
|
64
|
+
const elementsUpdates = generateIndices(elements, indicesGroups);
|
|
65
|
+
// ensure next indices are valid before mutation, throws on invalid ones
|
|
66
|
+
validateFractionalIndices(elements.map((x) => elementsUpdates.get(x)?.index || x.index));
|
|
67
|
+
// split mutation so we don't end up in an incosistent state
|
|
68
|
+
for (const [element, update] of elementsUpdates) {
|
|
69
|
+
mutateElement(element, update, false);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
// fallback to default sync
|
|
74
|
+
syncInvalidIndices(elements);
|
|
75
|
+
}
|
|
76
|
+
return elements;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Synchronizes all invalid fractional indices with the array order by mutating passed elements.
|
|
80
|
+
*
|
|
81
|
+
* WARN: in edge cases it could modify the elements which were not moved, as it's impossible to guess the actually moved elements from the elements array itself.
|
|
82
|
+
*/
|
|
83
|
+
export const syncInvalidIndices = (elements) => {
|
|
84
|
+
const indicesGroups = getInvalidIndicesGroups(elements);
|
|
85
|
+
const elementsUpdates = generateIndices(elements, indicesGroups);
|
|
86
|
+
for (const [element, update] of elementsUpdates) {
|
|
87
|
+
mutateElement(element, update, false);
|
|
88
|
+
}
|
|
89
|
+
return elements;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Get contiguous groups of indices of passed moved elements.
|
|
93
|
+
*
|
|
94
|
+
* NOTE: First and last elements within the groups are indices of lower and upper bounds.
|
|
95
|
+
*/
|
|
96
|
+
const getMovedIndicesGroups = (elements, movedElements) => {
|
|
97
|
+
const indicesGroups = [];
|
|
98
|
+
let i = 0;
|
|
99
|
+
while (i < elements.length) {
|
|
100
|
+
if (movedElements.has(elements[i].id)) {
|
|
101
|
+
const indicesGroup = [i - 1, i]; // push the lower bound index as the first item
|
|
102
|
+
while (++i < elements.length) {
|
|
103
|
+
if (!movedElements.has(elements[i].id)) {
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
indicesGroup.push(i);
|
|
107
|
+
}
|
|
108
|
+
indicesGroup.push(i); // push the upper bound index as the last item
|
|
109
|
+
indicesGroups.push(indicesGroup);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
i++;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return indicesGroups;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Gets contiguous groups of all invalid indices automatically detected inside the elements array.
|
|
119
|
+
*
|
|
120
|
+
* WARN: First and last items within the groups do NOT have to be contiguous, those are the found lower and upper bounds!
|
|
121
|
+
*/
|
|
122
|
+
const getInvalidIndicesGroups = (elements) => {
|
|
123
|
+
const indicesGroups = [];
|
|
124
|
+
// once we find lowerBound / upperBound, it cannot be lower than that, so we cache it for better perf.
|
|
125
|
+
let lowerBound = undefined;
|
|
126
|
+
let upperBound = undefined;
|
|
127
|
+
let lowerBoundIndex = -1;
|
|
128
|
+
let upperBoundIndex = 0;
|
|
129
|
+
/** @returns maybe valid lowerBound */
|
|
130
|
+
const getLowerBound = (index) => {
|
|
131
|
+
const lowerBound = elements[lowerBoundIndex]
|
|
132
|
+
? elements[lowerBoundIndex].index
|
|
133
|
+
: undefined;
|
|
134
|
+
// we are already iterating left to right, therefore there is no need for additional looping
|
|
135
|
+
const candidate = elements[index - 1]?.index;
|
|
136
|
+
if ((!lowerBound && candidate) || // first lowerBound
|
|
137
|
+
(lowerBound && candidate && candidate > lowerBound) // next lowerBound
|
|
138
|
+
) {
|
|
139
|
+
// WARN: candidate's index could be higher or same as the current element's index
|
|
140
|
+
return [candidate, index - 1];
|
|
141
|
+
}
|
|
142
|
+
// cache hit! take the last lower bound
|
|
143
|
+
return [lowerBound, lowerBoundIndex];
|
|
144
|
+
};
|
|
145
|
+
/** @returns always valid upperBound */
|
|
146
|
+
const getUpperBound = (index) => {
|
|
147
|
+
const upperBound = elements[upperBoundIndex]
|
|
148
|
+
? elements[upperBoundIndex].index
|
|
149
|
+
: undefined;
|
|
150
|
+
// cache hit! don't let it find the upper bound again
|
|
151
|
+
if (upperBound && index < upperBoundIndex) {
|
|
152
|
+
return [upperBound, upperBoundIndex];
|
|
153
|
+
}
|
|
154
|
+
// set the current upperBoundIndex as the starting point
|
|
155
|
+
let i = upperBoundIndex;
|
|
156
|
+
while (++i < elements.length) {
|
|
157
|
+
const candidate = elements[i]?.index;
|
|
158
|
+
if ((!upperBound && candidate) || // first upperBound
|
|
159
|
+
(upperBound && candidate && candidate > upperBound) // next upperBound
|
|
160
|
+
) {
|
|
161
|
+
return [candidate, i];
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// we reached the end, sky is the limit
|
|
165
|
+
return [undefined, i];
|
|
166
|
+
};
|
|
167
|
+
let i = 0;
|
|
168
|
+
while (i < elements.length) {
|
|
169
|
+
const current = elements[i].index;
|
|
170
|
+
[lowerBound, lowerBoundIndex] = getLowerBound(i);
|
|
171
|
+
[upperBound, upperBoundIndex] = getUpperBound(i);
|
|
172
|
+
if (!isValidFractionalIndex(current, lowerBound, upperBound)) {
|
|
173
|
+
// push the lower bound index as the first item
|
|
174
|
+
const indicesGroup = [lowerBoundIndex, i];
|
|
175
|
+
while (++i < elements.length) {
|
|
176
|
+
const current = elements[i].index;
|
|
177
|
+
const [nextLowerBound, nextLowerBoundIndex] = getLowerBound(i);
|
|
178
|
+
const [nextUpperBound, nextUpperBoundIndex] = getUpperBound(i);
|
|
179
|
+
if (isValidFractionalIndex(current, nextLowerBound, nextUpperBound)) {
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
// assign bounds only for the moved elements
|
|
183
|
+
[lowerBound, lowerBoundIndex] = [nextLowerBound, nextLowerBoundIndex];
|
|
184
|
+
[upperBound, upperBoundIndex] = [nextUpperBound, nextUpperBoundIndex];
|
|
185
|
+
indicesGroup.push(i);
|
|
186
|
+
}
|
|
187
|
+
// push the upper bound index as the last item
|
|
188
|
+
indicesGroup.push(upperBoundIndex);
|
|
189
|
+
indicesGroups.push(indicesGroup);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
i++;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return indicesGroups;
|
|
196
|
+
};
|
|
197
|
+
const isValidFractionalIndex = (index, predecessor, successor) => {
|
|
198
|
+
if (!index) {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
if (predecessor && successor) {
|
|
202
|
+
return predecessor < index && index < successor;
|
|
203
|
+
}
|
|
204
|
+
if (!predecessor && successor) {
|
|
205
|
+
// first element
|
|
206
|
+
return index < successor;
|
|
207
|
+
}
|
|
208
|
+
if (predecessor && !successor) {
|
|
209
|
+
// last element
|
|
210
|
+
return predecessor < index;
|
|
211
|
+
}
|
|
212
|
+
// only element in the array
|
|
213
|
+
return !!index;
|
|
214
|
+
};
|
|
215
|
+
const generateIndices = (elements, indicesGroups) => {
|
|
216
|
+
const elementsUpdates = new Map();
|
|
217
|
+
for (const indices of indicesGroups) {
|
|
218
|
+
const lowerBoundIndex = indices.shift();
|
|
219
|
+
const upperBoundIndex = indices.pop();
|
|
220
|
+
const fractionalIndices = generateNKeysBetween(elements[lowerBoundIndex]?.index, elements[upperBoundIndex]?.index, indices.length);
|
|
221
|
+
for (let i = 0; i < indices.length; i++) {
|
|
222
|
+
const element = elements[indices[i]];
|
|
223
|
+
elementsUpdates.set(element, {
|
|
224
|
+
index: fractionalIndices[i],
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return elementsUpdates;
|
|
229
|
+
};
|
|
230
|
+
const isOrderedElement = (element) => {
|
|
231
|
+
// for now it's sufficient whether the index is there
|
|
232
|
+
// meaning, the element was already ordered in the past
|
|
233
|
+
// meaning, it is not a newly inserted element, not an unrestored element, etc.
|
|
234
|
+
// it does not have to mean that the index itself is valid
|
|
235
|
+
if (element.index) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
return false;
|
|
239
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ElementsMap, ElementsMapOrArray, ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeleted, NonDeletedExcalidrawElement } from "./element/types";
|
|
2
|
-
import { AppClassProperties, AppState, StaticCanvasAppState } from "./types";
|
|
1
|
+
import type { ElementsMap, ElementsMapOrArray, ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeleted, NonDeletedExcalidrawElement } from "./element/types";
|
|
2
|
+
import type { AppClassProperties, AppState, StaticCanvasAppState } from "./types";
|
|
3
3
|
import type { ExcalidrawElementsIncludingDeleted } from "./scene/Scene";
|
|
4
|
-
import { ReadonlySetLike } from "./utility-types";
|
|
5
|
-
export declare const bindElementsToFramesAfterDuplication: (nextElements: ExcalidrawElement[], oldElements: readonly ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
|
|
4
|
+
import type { ReadonlySetLike } from "./utility-types";
|
|
5
|
+
export declare const bindElementsToFramesAfterDuplication: (nextElements: readonly ExcalidrawElement[], oldElements: readonly ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
|
|
6
6
|
export declare function isElementIntersectingFrame(element: ExcalidrawElement, frame: ExcalidrawFrameLikeElement, elementsMap: ElementsMap): boolean;
|
|
7
7
|
export declare const getElementsCompletelyInFrame: (elements: readonly ExcalidrawElement[], frame: ExcalidrawFrameLikeElement, elementsMap: ElementsMap) => ExcalidrawElement[];
|
|
8
8
|
export declare const isElementContainingFrame: (elements: readonly ExcalidrawElement[], element: ExcalidrawElement, frame: ExcalidrawFrameLikeElement, elementsMap: ElementsMap) => boolean;
|