@excalidraw/excalidraw 0.17.1-1d71f84 → 0.17.1-2f9526d
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 +14 -2
- 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-AK7SWNLN.js → chunk-Q6A4M3MN.js} +9 -5
- package/dist/browser/dev/excalidraw-assets-dev/chunk-Q6A4M3MN.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-RWZVJAQU.js → chunk-Q6NFAEKN.js} +4597 -2668
- package/dist/browser/dev/excalidraw-assets-dev/chunk-Q6NFAEKN.js.map +7 -0
- 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-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/{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-6QVAH5JA.js} +37 -15
- package/dist/browser/dev/excalidraw-assets-dev/dist-6QVAH5JA.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js → en-Y27YPU72.js} +2 -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-O66MQ7WQ.css} +1 -1
- package/dist/browser/dev/excalidraw-assets-dev/image-O66MQ7WQ.css.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{image-EDKQZH7Z.js → image-Y5X7K6KW.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 +72 -28
- package/dist/browser/dev/index.css.map +3 -3
- package/dist/browser/dev/index.js +2211 -1904
- package/dist/browser/dev/index.js.map +4 -4
- 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-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-CTYINSWT.js → chunk-IZMZ6RPD.js} +2 -2
- package/dist/browser/prod/excalidraw-assets/{chunk-AHLLBBVJ.js → chunk-L5DS24G6.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/chunk-MDMKPHYD.js +55 -0
- package/dist/browser/prod/excalidraw-assets/{chunk-CQJF3C6G.js → chunk-MUNOKHUD.js} +1 -1
- 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-567JAXHK.js +7 -0
- package/dist/browser/prod/excalidraw-assets/{en-LROPV2RN.js → en-GSUSWMSH.js} +1 -1
- 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-7MVXYJUE.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 +24 -24
- package/dist/dev/{en-II4GK66F.json → en-OIPCBIOA.json} +8 -4
- package/dist/dev/index.css +72 -28
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +5626 -3465
- package/dist/dev/index.js.map +4 -4
- package/dist/excalidraw/actions/actionAddToLibrary.d.ts +4 -4
- 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 +10 -10
- package/dist/excalidraw/actions/actionBoundText.js +11 -5
- package/dist/excalidraw/actions/actionCanvas.d.ts +52 -52
- package/dist/excalidraw/actions/actionCanvas.js +19 -14
- package/dist/excalidraw/actions/actionClipboard.d.ts +24 -24
- package/dist/excalidraw/actions/actionClipboard.js +14 -13
- package/dist/excalidraw/actions/actionDeleteSelected.d.ts +10 -10
- 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 +9 -9
- package/dist/excalidraw/actions/actionElementLock.js +3 -2
- package/dist/excalidraw/actions/actionExport.d.ts +33 -33
- package/dist/excalidraw/actions/actionExport.js +15 -11
- package/dist/excalidraw/actions/actionFinalize.d.ts +9 -9
- 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 +16 -171
- package/dist/excalidraw/actions/actionFrame.js +7 -6
- package/dist/excalidraw/actions/actionGroup.d.ts +12 -322
- 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 +6 -4
- package/dist/excalidraw/actions/actionLinearEditor.js +21 -5
- package/dist/excalidraw/actions/actionLink.d.ts +5 -5
- package/dist/excalidraw/actions/actionLink.js +2 -1
- package/dist/excalidraw/actions/actionMenu.d.ts +8 -8
- package/dist/excalidraw/actions/actionMenu.js +4 -3
- package/dist/excalidraw/actions/actionNavigate.d.ts +4 -4
- package/dist/excalidraw/actions/actionNavigate.js +3 -2
- package/dist/excalidraw/actions/actionProperties.d.ts +34 -34
- package/dist/excalidraw/actions/actionProperties.js +19 -14
- package/dist/excalidraw/actions/actionSelectAll.d.ts +5 -5
- package/dist/excalidraw/actions/actionSelectAll.js +2 -1
- package/dist/excalidraw/actions/actionStyles.d.ts +9 -12
- package/dist/excalidraw/actions/actionStyles.js +4 -3
- package/dist/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
- package/dist/excalidraw/actions/actionTextAutoResize.js +38 -0
- package/dist/excalidraw/actions/actionToggleGridMode.d.ts +7 -5
- package/dist/excalidraw/actions/actionToggleGridMode.js +6 -2
- package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +4 -4
- package/dist/excalidraw/actions/actionToggleObjectsSnapMode.js +2 -1
- package/dist/excalidraw/actions/actionToggleStats.d.ts +4 -4
- package/dist/excalidraw/actions/actionToggleStats.js +2 -1
- package/dist/excalidraw/actions/actionToggleViewMode.d.ts +4 -4
- package/dist/excalidraw/actions/actionToggleViewMode.js +2 -1
- package/dist/excalidraw/actions/actionToggleZenMode.d.ts +4 -4
- 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 +1 -1
- package/dist/excalidraw/animated-trail.d.ts +2 -2
- package/dist/excalidraw/appState.d.ts +5 -5
- package/dist/excalidraw/change.d.ts +191 -0
- package/dist/excalidraw/change.js +894 -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 +9 -6
- package/dist/excalidraw/components/App.d.ts +28 -14
- package/dist/excalidraw/components/App.js +407 -187
- package/dist/excalidraw/components/ButtonIconSelect.js +1 -1
- 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 +1 -1
- package/dist/excalidraw/components/ColorPicker/Picker.d.ts +3 -3
- 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 +30 -15
- 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/HelpDialog.js +8 -6
- 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 +2 -2
- 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 +1 -1
- 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/PublishLibrary.d.ts +1 -1
- 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/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.d.ts +2 -2
- 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 +4 -4
- 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/canvases/InteractiveCanvas.d.ts +3 -2
- package/dist/excalidraw/components/canvases/InteractiveCanvas.js +3 -2
- package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +2 -2
- package/dist/excalidraw/components/canvases/StaticCanvas.js +2 -2
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.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/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 +6 -1
- package/dist/excalidraw/components/icons.js +23 -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/constants.d.ts +5 -5
- package/dist/excalidraw/constants.js +6 -3
- 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 +7 -7
- package/dist/excalidraw/data/transform.d.ts +4 -4
- package/dist/excalidraw/data/transform.js +12 -3
- 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 +50 -9
- package/dist/excalidraw/element/binding.js +712 -155
- 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 +3 -3
- package/dist/excalidraw/element/embeddable.d.ts +9 -6
- 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 +12 -12
- package/dist/excalidraw/element/linearElementEditor.js +7 -5
- package/dist/excalidraw/element/mutateElement.d.ts +4 -5
- package/dist/excalidraw/element/mutateElement.js +5 -3
- package/dist/excalidraw/element/newElement.d.ts +4 -9
- package/dist/excalidraw/element/newElement.js +17 -14
- package/dist/excalidraw/element/resizeElements.d.ts +4 -4
- package/dist/excalidraw/element/resizeElements.js +170 -97
- 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 +5 -6
- package/dist/excalidraw/element/textElement.js +13 -37
- package/dist/excalidraw/element/textWysiwyg.d.ts +10 -5
- package/dist/excalidraw/element/textWysiwyg.js +6 -8
- package/dist/excalidraw/element/transformHandles.d.ts +24 -6
- package/dist/excalidraw/element/transformHandles.js +22 -11
- package/dist/excalidraw/element/typeChecks.d.ts +4 -4
- 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/fractionalIndex.d.ts +40 -0
- package/dist/excalidraw/fractionalIndex.js +241 -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 +5 -3
- 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 +3 -1
- package/dist/excalidraw/index.js +2 -0
- package/dist/excalidraw/jotai.d.ts +1 -1
- package/dist/excalidraw/laser-trails.d.ts +3 -2
- package/dist/excalidraw/locales/en.json +8 -4
- package/dist/excalidraw/math.d.ts +2 -2
- 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 +8 -7
- package/dist/excalidraw/renderer/renderElement.d.ts +3 -3
- package/dist/excalidraw/renderer/renderElement.js +5 -5
- 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 +10 -0
- package/dist/excalidraw/scene/Fonts.d.ts +2 -4
- package/dist/excalidraw/scene/Fonts.js +6 -12
- package/dist/excalidraw/scene/Renderer.d.ts +4 -4
- package/dist/excalidraw/scene/Renderer.js +2 -3
- package/dist/excalidraw/scene/Scene.d.ts +19 -12
- package/dist/excalidraw/scene/Scene.js +44 -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 +2 -2
- package/dist/excalidraw/scene/export.js +6 -5
- 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 +5 -4
- package/dist/excalidraw/scene/zoom.d.ts +1 -1
- package/dist/excalidraw/snapping.d.ts +4 -4
- package/dist/excalidraw/store.d.ts +99 -0
- package/dist/excalidraw/store.js +269 -0
- package/dist/excalidraw/types.d.ts +33 -19
- package/dist/excalidraw/utils.d.ts +11 -4
- package/dist/excalidraw/utils.js +8 -0
- package/dist/excalidraw/zindex.d.ts +4 -4
- package/dist/excalidraw/zindex.js +9 -13
- package/dist/prod/{en-II4GK66F.json → en-OIPCBIOA.json} +8 -4
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +44 -44
- 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 +2 -2
- 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/withinBounds.d.ts +1 -1
- package/history.ts +163 -218
- package/package.json +3 -2
- 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/excalidraw-assets/chunk-LL4GORAM.js +0 -55
- package/dist/browser/prod/excalidraw-assets/dist-PIPZXALV.js +0 -6
- package/dist/browser/prod/excalidraw-assets/image-EFCJDJH3.js +0 -1
- /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-Y27YPU72.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-Y5X7K6KW.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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { NonDeletedExcalidrawElement } from "./types";
|
|
2
|
-
import { AppState, PointerDownState } from "../types";
|
|
3
|
-
import Scene from "../scene/Scene";
|
|
1
|
+
import type { NonDeletedExcalidrawElement } from "./types";
|
|
2
|
+
import type { AppState, PointerDownState } from "../types";
|
|
3
|
+
import type Scene from "../scene/Scene";
|
|
4
4
|
export declare const dragSelectedElements: (pointerDownState: PointerDownState, selectedElements: NonDeletedExcalidrawElement[], offset: {
|
|
5
5
|
x: number;
|
|
6
6
|
y: number;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { ExcalidrawProps } from "../types";
|
|
3
|
-
import { ExcalidrawElement, ExcalidrawIframeLikeElement, IframeData } from "./types";
|
|
2
|
+
import type { ExcalidrawProps } from "../types";
|
|
3
|
+
import type { ExcalidrawElement, ExcalidrawIframeLikeElement, IframeData } from "./types";
|
|
4
|
+
import type { MarkRequired } from "../utility-types";
|
|
5
|
+
type IframeDataWithSandbox = MarkRequired<IframeData, "sandbox">;
|
|
4
6
|
export declare const createSrcDoc: (body: string) => string;
|
|
5
|
-
export declare const getEmbedLink: (link: string | null | undefined) =>
|
|
7
|
+
export declare const getEmbedLink: (link: string | null | undefined) => IframeDataWithSandbox | null;
|
|
6
8
|
export declare const createPlaceholderEmbeddableLabel: (element: ExcalidrawIframeLikeElement) => ExcalidrawElement;
|
|
7
9
|
export declare const actionSetEmbeddableAsActiveTool: {
|
|
8
10
|
name: "setEmbeddableAsActiveTool";
|
|
@@ -11,8 +13,8 @@ export declare const actionSetEmbeddableAsActiveTool: {
|
|
|
11
13
|
};
|
|
12
14
|
target: string;
|
|
13
15
|
label: string;
|
|
14
|
-
perform: (elements: readonly
|
|
15
|
-
elements: readonly
|
|
16
|
+
perform: (elements: readonly import("./types").OrderedExcalidrawElement[], appState: Readonly<import("../types").AppState>, _: any, app: import("../types").AppClassProperties) => {
|
|
17
|
+
elements: readonly import("./types").OrderedExcalidrawElement[];
|
|
16
18
|
appState: {
|
|
17
19
|
activeTool: {
|
|
18
20
|
lastActiveTool: import("../types").ActiveTool | null;
|
|
@@ -165,10 +167,11 @@ export declare const actionSetEmbeddableAsActiveTool: {
|
|
|
165
167
|
userToFollow: import("../types").UserToFollow | null;
|
|
166
168
|
followedBy: Set<import("../types").SocketId>;
|
|
167
169
|
};
|
|
168
|
-
|
|
170
|
+
storeAction: import("../store").StoreActionType;
|
|
169
171
|
};
|
|
170
172
|
} & {
|
|
171
173
|
keyTest?: undefined;
|
|
172
174
|
};
|
|
173
175
|
export declare const maybeParseEmbedSrc: (str: string) => string;
|
|
174
176
|
export declare const embeddableURLValidator: (url: string | null | undefined, validateEmbeddable: ExcalidrawProps["validateEmbeddable"]) => boolean;
|
|
177
|
+
export {};
|
|
@@ -5,16 +5,18 @@ import { setCursorForShape } from "../cursor";
|
|
|
5
5
|
import { newTextElement } from "./newElement";
|
|
6
6
|
import { wrapText } from "./textElement";
|
|
7
7
|
import { isIframeElement } from "./typeChecks";
|
|
8
|
+
import { sanitizeHTMLAttribute } from "../data/url";
|
|
9
|
+
import { StoreAction } from "../store";
|
|
8
10
|
const embeddedLinkCache = new Map();
|
|
9
11
|
const RE_YOUTUBE = /^(?:http(?:s)?:\/\/)?(?:www\.)?youtu(?:be\.com|\.be)\/(embed\/|watch\?v=|shorts\/|playlist\?list=|embed\/videoseries\?list=)?([a-zA-Z0-9_-]+)(?:\?t=|&t=|\?start=|&start=)?([a-zA-Z0-9_-]+)?[^\s]*$/;
|
|
10
|
-
const RE_VIMEO = /^(?:http(?:s)?:\/\/)?(?:(?:w){3}
|
|
12
|
+
const RE_VIMEO = /^(?:http(?:s)?:\/\/)?(?:(?:w){3}\.)?(?:player\.)?vimeo\.com\/(?:video\/)?([^?\s]+)(?:\?.*)?$/;
|
|
11
13
|
const RE_FIGMA = /^https:\/\/(?:www\.)?figma\.com/;
|
|
12
|
-
const RE_GH_GIST = /^https:\/\/gist\.github\.com/;
|
|
13
|
-
const RE_GH_GIST_EMBED = /^<script[\s\S]*?\ssrc=["'](https:\/\/gist
|
|
14
|
+
const RE_GH_GIST = /^https:\/\/gist\.github\.com\/([\w_-]+)\/([\w_-]+)/;
|
|
15
|
+
const RE_GH_GIST_EMBED = /^<script[\s\S]*?\ssrc=["'](https:\/\/gist\.github\.com\/.*?)\.js["']/i;
|
|
14
16
|
// not anchored to start to allow <blockquote> twitter embeds
|
|
15
|
-
const RE_TWITTER = /(?:
|
|
16
|
-
const RE_TWITTER_EMBED = /^<blockquote[\s\S]*?\shref=["'](https
|
|
17
|
-
const RE_VALTOWN = /^https:\/\/(?:www\.)?val
|
|
17
|
+
const RE_TWITTER = /(?:https?:\/\/)?(?:(?:w){3}\.)?(?:twitter|x)\.com\/[^/]+\/status\/(\d+)/;
|
|
18
|
+
const RE_TWITTER_EMBED = /^<blockquote[\s\S]*?\shref=["'](https?:\/\/(?:twitter|x)\.com\/[^"']*)/i;
|
|
19
|
+
const RE_VALTOWN = /^https:\/\/(?:www\.)?val\.town\/(v|embed)\/[a-zA-Z_$][0-9a-zA-Z_$]+\.[a-zA-Z_$][0-9a-zA-Z_$]+/;
|
|
18
20
|
const RE_GENERIC_EMBED = /^<(?:iframe|blockquote)[\s\S]*?\s(?:src|href)=["']([^"']*)["'][\s\S]*?>$/i;
|
|
19
21
|
const RE_GIPHY = /giphy.com\/(?:clips|embed|gifs)\/[a-zA-Z0-9]*?-?([a-zA-Z0-9]+)(?:[^a-zA-Z0-9]|$)/;
|
|
20
22
|
const ALLOWED_DOMAINS = new Set([
|
|
@@ -31,7 +33,17 @@ const ALLOWED_DOMAINS = new Set([
|
|
|
31
33
|
"stackblitz.com",
|
|
32
34
|
"val.town",
|
|
33
35
|
"giphy.com",
|
|
34
|
-
|
|
36
|
+
]);
|
|
37
|
+
const ALLOW_SAME_ORIGIN = new Set([
|
|
38
|
+
"youtube.com",
|
|
39
|
+
"youtu.be",
|
|
40
|
+
"vimeo.com",
|
|
41
|
+
"player.vimeo.com",
|
|
42
|
+
"figma.com",
|
|
43
|
+
"twitter.com",
|
|
44
|
+
"x.com",
|
|
45
|
+
"*.simplepdf.eu",
|
|
46
|
+
"stackblitz.com",
|
|
35
47
|
]);
|
|
36
48
|
export const createSrcDoc = (body) => {
|
|
37
49
|
return `<html><body>${body}</body></html>`;
|
|
@@ -44,6 +56,7 @@ export const getEmbedLink = (link) => {
|
|
|
44
56
|
return embeddedLinkCache.get(link);
|
|
45
57
|
}
|
|
46
58
|
const originalLink = link;
|
|
59
|
+
const allowSameOrigin = ALLOW_SAME_ORIGIN.has(matchHostname(link, ALLOW_SAME_ORIGIN) || "");
|
|
47
60
|
let type = "generic";
|
|
48
61
|
let aspectRatio = { w: 560, h: 840 };
|
|
49
62
|
const ytLink = link.match(RE_YOUTUBE);
|
|
@@ -70,8 +83,14 @@ export const getEmbedLink = (link) => {
|
|
|
70
83
|
link,
|
|
71
84
|
intrinsicSize: aspectRatio,
|
|
72
85
|
type,
|
|
86
|
+
sandbox: { allowSameOrigin },
|
|
73
87
|
});
|
|
74
|
-
return {
|
|
88
|
+
return {
|
|
89
|
+
link,
|
|
90
|
+
intrinsicSize: aspectRatio,
|
|
91
|
+
type,
|
|
92
|
+
sandbox: { allowSameOrigin },
|
|
93
|
+
};
|
|
75
94
|
}
|
|
76
95
|
const vimeoLink = link.match(RE_VIMEO);
|
|
77
96
|
if (vimeoLink?.[1]) {
|
|
@@ -88,8 +107,15 @@ export const getEmbedLink = (link) => {
|
|
|
88
107
|
link,
|
|
89
108
|
intrinsicSize: aspectRatio,
|
|
90
109
|
type,
|
|
110
|
+
sandbox: { allowSameOrigin },
|
|
91
111
|
});
|
|
92
|
-
return {
|
|
112
|
+
return {
|
|
113
|
+
link,
|
|
114
|
+
intrinsicSize: aspectRatio,
|
|
115
|
+
type,
|
|
116
|
+
error,
|
|
117
|
+
sandbox: { allowSameOrigin },
|
|
118
|
+
};
|
|
93
119
|
}
|
|
94
120
|
const figmaLink = link.match(RE_FIGMA);
|
|
95
121
|
if (figmaLink) {
|
|
@@ -100,8 +126,14 @@ export const getEmbedLink = (link) => {
|
|
|
100
126
|
link,
|
|
101
127
|
intrinsicSize: aspectRatio,
|
|
102
128
|
type,
|
|
129
|
+
sandbox: { allowSameOrigin },
|
|
103
130
|
});
|
|
104
|
-
return {
|
|
131
|
+
return {
|
|
132
|
+
link,
|
|
133
|
+
intrinsicSize: aspectRatio,
|
|
134
|
+
type,
|
|
135
|
+
sandbox: { allowSameOrigin },
|
|
136
|
+
};
|
|
105
137
|
}
|
|
106
138
|
const valLink = link.match(RE_VALTOWN);
|
|
107
139
|
if (valLink) {
|
|
@@ -111,64 +143,62 @@ export const getEmbedLink = (link) => {
|
|
|
111
143
|
link,
|
|
112
144
|
intrinsicSize: aspectRatio,
|
|
113
145
|
type,
|
|
146
|
+
sandbox: { allowSameOrigin },
|
|
114
147
|
});
|
|
115
|
-
return {
|
|
148
|
+
return {
|
|
149
|
+
link,
|
|
150
|
+
intrinsicSize: aspectRatio,
|
|
151
|
+
type,
|
|
152
|
+
sandbox: { allowSameOrigin },
|
|
153
|
+
};
|
|
116
154
|
}
|
|
117
155
|
if (RE_TWITTER.test(link)) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
ret = {
|
|
133
|
-
type: "document",
|
|
134
|
-
srcdoc: (theme) => createSrcDoc(`<blockquote class="twitter-tweet" data-dnt="true" data-theme="${theme}"><a href="${link}"></a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>`),
|
|
135
|
-
intrinsicSize: { w: 480, h: 480 },
|
|
136
|
-
};
|
|
137
|
-
}
|
|
156
|
+
const postId = link.match(RE_TWITTER)[1];
|
|
157
|
+
// the embed srcdoc still supports twitter.com domain only.
|
|
158
|
+
// Note that we don't attempt to parse the username as it can consist of
|
|
159
|
+
// non-latin1 characters, and the username in the url can be set to anything
|
|
160
|
+
// without affecting the embed.
|
|
161
|
+
const safeURL = sanitizeHTMLAttribute(`https://twitter.com/x/status/${postId}`);
|
|
162
|
+
const ret = {
|
|
163
|
+
type: "document",
|
|
164
|
+
srcdoc: (theme) => createSrcDoc(`<blockquote class="twitter-tweet" data-dnt="true" data-theme="${theme}"><a href="${safeURL}"></a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>`),
|
|
165
|
+
intrinsicSize: { w: 480, h: 480 },
|
|
166
|
+
sandbox: { allowSameOrigin },
|
|
167
|
+
};
|
|
138
168
|
embeddedLinkCache.set(originalLink, ret);
|
|
139
169
|
return ret;
|
|
140
170
|
}
|
|
141
171
|
if (RE_GH_GIST.test(link)) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
srcdoc: () => srcDoc,
|
|
149
|
-
intrinsicSize: { w: 550, h: 720 },
|
|
150
|
-
};
|
|
151
|
-
// assume regular url
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
ret = {
|
|
155
|
-
type: "document",
|
|
156
|
-
srcdoc: () => createSrcDoc(`
|
|
157
|
-
<script src="${link}.js"></script>
|
|
172
|
+
const [, user, gistId] = link.match(RE_GH_GIST);
|
|
173
|
+
const safeURL = sanitizeHTMLAttribute(`https://gist.github.com/${user}/${gistId}`);
|
|
174
|
+
const ret = {
|
|
175
|
+
type: "document",
|
|
176
|
+
srcdoc: () => createSrcDoc(`
|
|
177
|
+
<script src="${safeURL}.js"></script>
|
|
158
178
|
<style type="text/css">
|
|
159
179
|
* { margin: 0px; }
|
|
160
180
|
table, .gist { height: 100%; }
|
|
161
181
|
.gist .gist-file { height: calc(100vh - 2px); padding: 0px; display: grid; grid-template-rows: 1fr auto; }
|
|
162
182
|
</style>
|
|
163
183
|
`),
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
}
|
|
184
|
+
intrinsicSize: { w: 550, h: 720 },
|
|
185
|
+
sandbox: { allowSameOrigin },
|
|
186
|
+
};
|
|
167
187
|
embeddedLinkCache.set(link, ret);
|
|
168
188
|
return ret;
|
|
169
189
|
}
|
|
170
|
-
embeddedLinkCache.set(link, {
|
|
171
|
-
|
|
190
|
+
embeddedLinkCache.set(link, {
|
|
191
|
+
link,
|
|
192
|
+
intrinsicSize: aspectRatio,
|
|
193
|
+
type,
|
|
194
|
+
sandbox: { allowSameOrigin },
|
|
195
|
+
});
|
|
196
|
+
return {
|
|
197
|
+
link,
|
|
198
|
+
intrinsicSize: aspectRatio,
|
|
199
|
+
type,
|
|
200
|
+
sandbox: { allowSameOrigin },
|
|
201
|
+
};
|
|
172
202
|
};
|
|
173
203
|
export const createPlaceholderEmbeddableLabel = (element) => {
|
|
174
204
|
let text;
|
|
@@ -219,29 +249,35 @@ export const actionSetEmbeddableAsActiveTool = register({
|
|
|
219
249
|
type: "embeddable",
|
|
220
250
|
}),
|
|
221
251
|
},
|
|
222
|
-
|
|
252
|
+
storeAction: StoreAction.NONE,
|
|
223
253
|
};
|
|
224
254
|
},
|
|
225
255
|
});
|
|
226
|
-
const
|
|
256
|
+
const matchHostname = (url,
|
|
227
257
|
/** using a Set assumes it already contains normalized bare domains */
|
|
228
258
|
allowedHostnames) => {
|
|
229
259
|
try {
|
|
230
260
|
const { hostname } = new URL(url);
|
|
231
261
|
const bareDomain = hostname.replace(/^www\./, "");
|
|
232
|
-
const bareDomainWithFirstSubdomainWildcarded = bareDomain.replace(/^([^.]+)/, "*");
|
|
233
262
|
if (allowedHostnames instanceof Set) {
|
|
234
|
-
|
|
235
|
-
|
|
263
|
+
if (ALLOWED_DOMAINS.has(bareDomain)) {
|
|
264
|
+
return bareDomain;
|
|
265
|
+
}
|
|
266
|
+
const bareDomainWithFirstSubdomainWildcarded = bareDomain.replace(/^([^.]+)/, "*");
|
|
267
|
+
if (ALLOWED_DOMAINS.has(bareDomainWithFirstSubdomainWildcarded)) {
|
|
268
|
+
return bareDomainWithFirstSubdomainWildcarded;
|
|
269
|
+
}
|
|
270
|
+
return null;
|
|
236
271
|
}
|
|
237
|
-
|
|
238
|
-
|
|
272
|
+
const bareAllowedHostname = allowedHostnames.replace(/^www\./, "");
|
|
273
|
+
if (bareDomain === bareAllowedHostname) {
|
|
274
|
+
return bareAllowedHostname;
|
|
239
275
|
}
|
|
240
276
|
}
|
|
241
277
|
catch (error) {
|
|
242
278
|
// ignore
|
|
243
279
|
}
|
|
244
|
-
return
|
|
280
|
+
return null;
|
|
245
281
|
};
|
|
246
282
|
export const maybeParseEmbedSrc = (str) => {
|
|
247
283
|
const twitterMatch = str.match(RE_TWITTER_EMBED);
|
|
@@ -286,12 +322,12 @@ export const embeddableURLValidator = (url, validateEmbeddable) => {
|
|
|
286
322
|
return true;
|
|
287
323
|
}
|
|
288
324
|
}
|
|
289
|
-
else if (
|
|
325
|
+
else if (matchHostname(url, domain)) {
|
|
290
326
|
return true;
|
|
291
327
|
}
|
|
292
328
|
}
|
|
293
329
|
return false;
|
|
294
330
|
}
|
|
295
331
|
}
|
|
296
|
-
return
|
|
332
|
+
return !!matchHostname(url, ALLOWED_DOMAINS);
|
|
297
333
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AppClassProperties, DataURL, BinaryFiles } from "../types";
|
|
2
|
-
import { ExcalidrawElement, FileId, InitializedExcalidrawImageElement } from "./types";
|
|
1
|
+
import type { AppClassProperties, DataURL, BinaryFiles } from "../types";
|
|
2
|
+
import type { ExcalidrawElement, FileId, InitializedExcalidrawImageElement } from "./types";
|
|
3
3
|
export declare const loadHTMLImageElement: (dataURL: DataURL) => Promise<HTMLImageElement>;
|
|
4
4
|
/** NOTE: updates cache even if already populated with given image. Thus,
|
|
5
5
|
* you should filter out the images upstream if you want to optimize this. */
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { ExcalidrawElement, NonDeletedExcalidrawElement, NonDeleted } from "./types";
|
|
2
|
-
export { newElement, newTextElement,
|
|
1
|
+
import type { ExcalidrawElement, NonDeletedExcalidrawElement, NonDeleted } from "./types";
|
|
2
|
+
export { newElement, newTextElement, refreshTextDimensions, newLinearElement, newImageElement, duplicateElement, } from "./newElement";
|
|
3
3
|
export { getElementAbsoluteCoords, getElementBounds, getCommonBounds, getDiamondPoints, getArrowheadPoints, getClosestElementBounds, } from "./bounds";
|
|
4
4
|
export { OMIT_SIDES_FOR_MULTIPLE_ELEMENTS, getTransformHandlesFromCoords, getTransformHandles, } from "./transformHandles";
|
|
5
|
-
export { hitTest, isHittingElementBoundingBoxWithoutHittingElement, } from "./collision";
|
|
6
5
|
export { resizeTest, getCursorForResizingElement, getElementWithTransformHandleType, getTransformHandleTypeFromCoords, } from "./resizeTest";
|
|
7
6
|
export { transformElements, getResizeOffsetXY, getResizeArrowDirection, } from "./resizeElements";
|
|
8
7
|
export { dragSelectedElements, getDragOffsetXY, dragNewElement, } from "./dragElements";
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { isInvisiblySmallElement } from "./sizeHelpers";
|
|
2
2
|
import { isLinearElementType } from "./typeChecks";
|
|
3
|
-
export { newElement, newTextElement,
|
|
3
|
+
export { newElement, newTextElement, refreshTextDimensions, newLinearElement, newImageElement, duplicateElement, } from "./newElement";
|
|
4
4
|
export { getElementAbsoluteCoords, getElementBounds, getCommonBounds, getDiamondPoints, getArrowheadPoints, getClosestElementBounds, } from "./bounds";
|
|
5
5
|
export { OMIT_SIDES_FOR_MULTIPLE_ELEMENTS, getTransformHandlesFromCoords, getTransformHandles, } from "./transformHandles";
|
|
6
|
-
export { hitTest, isHittingElementBoundingBoxWithoutHittingElement, } from "./collision";
|
|
7
6
|
export { resizeTest, getCursorForResizingElement, getElementWithTransformHandleType, getTransformHandleTypeFromCoords, } from "./resizeTest";
|
|
8
7
|
export { transformElements, getResizeOffsetXY, getResizeArrowDirection, } from "./resizeElements";
|
|
9
8
|
export { dragSelectedElements, getDragOffsetXY, dragNewElement, } from "./dragElements";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { NonDeleted, ExcalidrawLinearElement, ExcalidrawElement, PointBinding, ExcalidrawBindableElement, ExcalidrawTextElementWithContainer, ElementsMap,
|
|
3
|
-
import { Bounds } from "./bounds";
|
|
4
|
-
import { Point, AppState, PointerCoords, InteractiveCanvasAppState } from "../types";
|
|
5
|
-
import
|
|
2
|
+
import type { NonDeleted, ExcalidrawLinearElement, ExcalidrawElement, PointBinding, ExcalidrawBindableElement, ExcalidrawTextElementWithContainer, ElementsMap, NonDeletedSceneElementsMap } from "./types";
|
|
3
|
+
import type { Bounds } from "./bounds";
|
|
4
|
+
import type { Point, AppState, PointerCoords, InteractiveCanvasAppState, AppClassProperties } from "../types";
|
|
5
|
+
import type { Store } from "../store";
|
|
6
6
|
declare const editorMidPointsCache: {
|
|
7
7
|
version: number | null;
|
|
8
8
|
points: (Point | null)[];
|
|
@@ -52,7 +52,7 @@ export declare class LinearElementEditor {
|
|
|
52
52
|
x: number;
|
|
53
53
|
y: number;
|
|
54
54
|
}[]) => void, linearElementEditor: LinearElementEditor, elementsMap: NonDeletedSceneElementsMap): boolean;
|
|
55
|
-
static handlePointerUp(event: PointerEvent, editingLinearElement: LinearElementEditor, appState: AppState,
|
|
55
|
+
static handlePointerUp(event: PointerEvent, editingLinearElement: LinearElementEditor, appState: AppState, app: AppClassProperties): LinearElementEditor;
|
|
56
56
|
static getEditorMidPoints: (element: NonDeleted<ExcalidrawLinearElement>, elementsMap: ElementsMap, appState: InteractiveCanvasAppState) => (typeof editorMidPointsCache)["points"];
|
|
57
57
|
static updateEditorMidPointsCache: (element: NonDeleted<ExcalidrawLinearElement>, elementsMap: ElementsMap, appState: InteractiveCanvasAppState) => void;
|
|
58
58
|
static getSegmentMidpointHitCoords: (linearElementEditor: LinearElementEditor, scenePointer: {
|
|
@@ -62,10 +62,10 @@ export declare class LinearElementEditor {
|
|
|
62
62
|
static isSegmentTooShort(element: NonDeleted<ExcalidrawLinearElement>, startPoint: Point, endPoint: Point, zoom: AppState["zoom"]): boolean;
|
|
63
63
|
static getSegmentMidPoint(element: NonDeleted<ExcalidrawLinearElement>, startPoint: Point, endPoint: Point, endPointIndex: number, elementsMap: ElementsMap): readonly [number, number];
|
|
64
64
|
static getSegmentMidPointIndex(linearElementEditor: LinearElementEditor, appState: AppState, midPoint: Point, elementsMap: ElementsMap): number;
|
|
65
|
-
static handlePointerDown(event: React.PointerEvent<HTMLElement>, appState: AppState,
|
|
65
|
+
static handlePointerDown(event: React.PointerEvent<HTMLElement>, appState: AppState, store: Store, scenePointer: {
|
|
66
66
|
x: number;
|
|
67
67
|
y: number;
|
|
68
|
-
}, linearElementEditor: LinearElementEditor,
|
|
68
|
+
}, linearElementEditor: LinearElementEditor, app: AppClassProperties): {
|
|
69
69
|
didAddPoint: boolean;
|
|
70
70
|
hitElement: NonDeleted<ExcalidrawElement> | null;
|
|
71
71
|
linearElementEditor: LinearElementEditor | null;
|
|
@@ -133,13 +133,13 @@ export declare class LinearElementEditor {
|
|
|
133
133
|
isLoading: boolean;
|
|
134
134
|
errorMessage: import("react").ReactNode;
|
|
135
135
|
activeEmbeddable: {
|
|
136
|
-
element: NonDeletedExcalidrawElement;
|
|
136
|
+
element: import("./types").NonDeletedExcalidrawElement;
|
|
137
137
|
state: "hover" | "active";
|
|
138
138
|
} | null;
|
|
139
|
-
draggingElement: NonDeletedExcalidrawElement | null;
|
|
140
|
-
resizingElement: NonDeletedExcalidrawElement | null;
|
|
139
|
+
draggingElement: import("./types").NonDeletedExcalidrawElement | null;
|
|
140
|
+
resizingElement: import("./types").NonDeletedExcalidrawElement | null;
|
|
141
141
|
multiElement: NonDeleted<ExcalidrawLinearElement> | null;
|
|
142
|
-
selectionElement: NonDeletedExcalidrawElement | null;
|
|
142
|
+
selectionElement: import("./types").NonDeletedExcalidrawElement | null;
|
|
143
143
|
isBindingEnabled: boolean;
|
|
144
144
|
startBoundElement: NonDeleted<ExcalidrawBindableElement> | null;
|
|
145
145
|
suggestedBindings: import("./binding").SuggestedBinding[];
|
|
@@ -152,7 +152,7 @@ export declare class LinearElementEditor {
|
|
|
152
152
|
};
|
|
153
153
|
editingFrame: string | null;
|
|
154
154
|
elementsToHighlight: NonDeleted<ExcalidrawElement>[] | null;
|
|
155
|
-
editingElement: NonDeletedExcalidrawElement | null;
|
|
155
|
+
editingElement: import("./types").NonDeletedExcalidrawElement | null;
|
|
156
156
|
activeTool: {
|
|
157
157
|
lastActiveTool: import("../types").ActiveTool | null;
|
|
158
158
|
locked: boolean;
|
|
@@ -163,7 +163,8 @@ export class LinearElementEditor {
|
|
|
163
163
|
}
|
|
164
164
|
return false;
|
|
165
165
|
}
|
|
166
|
-
static handlePointerUp(event, editingLinearElement, appState,
|
|
166
|
+
static handlePointerUp(event, editingLinearElement, appState, app) {
|
|
167
|
+
const elementsMap = app.scene.getNonDeletedElementsMap();
|
|
167
168
|
const { elementId, selectedPointsIndices, isDragging, pointerDownState } = editingLinearElement;
|
|
168
169
|
const element = LinearElementEditor.getElement(elementId, elementsMap);
|
|
169
170
|
if (!element) {
|
|
@@ -185,7 +186,7 @@ export class LinearElementEditor {
|
|
|
185
186
|
]);
|
|
186
187
|
}
|
|
187
188
|
const bindingElement = isBindingEnabled(appState)
|
|
188
|
-
? getHoveredElementForBinding(tupleToCoors(LinearElementEditor.getPointAtIndexGlobalCoordinates(element, selectedPoint, elementsMap)),
|
|
189
|
+
? getHoveredElementForBinding(tupleToCoors(LinearElementEditor.getPointAtIndexGlobalCoordinates(element, selectedPoint, elementsMap)), app)
|
|
189
190
|
: null;
|
|
190
191
|
bindings[selectedPoint === 0 ? "startBindingElement" : "endBindingElement"] = bindingElement;
|
|
191
192
|
}
|
|
@@ -313,7 +314,8 @@ export class LinearElementEditor {
|
|
|
313
314
|
}
|
|
314
315
|
return -1;
|
|
315
316
|
}
|
|
316
|
-
static handlePointerDown(event, appState,
|
|
317
|
+
static handlePointerDown(event, appState, store, scenePointer, linearElementEditor, app) {
|
|
318
|
+
const elementsMap = app.scene.getNonDeletedElementsMap();
|
|
317
319
|
const ret = {
|
|
318
320
|
didAddPoint: false,
|
|
319
321
|
hitElement: null,
|
|
@@ -342,7 +344,7 @@ export class LinearElementEditor {
|
|
|
342
344
|
});
|
|
343
345
|
ret.didAddPoint = true;
|
|
344
346
|
}
|
|
345
|
-
|
|
347
|
+
store.shouldCaptureIncrement();
|
|
346
348
|
ret.linearElementEditor = {
|
|
347
349
|
...linearElementEditor,
|
|
348
350
|
pointerDownState: {
|
|
@@ -357,7 +359,7 @@ export class LinearElementEditor {
|
|
|
357
359
|
},
|
|
358
360
|
selectedPointsIndices: [element.points.length - 1],
|
|
359
361
|
lastUncommittedPoint: null,
|
|
360
|
-
endBindingElement: getHoveredElementForBinding(scenePointer,
|
|
362
|
+
endBindingElement: getHoveredElementForBinding(scenePointer, app),
|
|
361
363
|
};
|
|
362
364
|
ret.didAddPoint = true;
|
|
363
365
|
return ret;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { ExcalidrawElement } from "./types";
|
|
2
|
-
import { Mutable } from "../utility-types";
|
|
3
|
-
type ElementUpdate<TElement extends ExcalidrawElement> = Omit<Partial<TElement>, "id" | "version" | "versionNonce">;
|
|
1
|
+
import type { ExcalidrawElement } from "./types";
|
|
2
|
+
import type { Mutable } from "../utility-types";
|
|
3
|
+
export type ElementUpdate<TElement extends ExcalidrawElement> = Omit<Partial<TElement>, "id" | "version" | "versionNonce" | "updated">;
|
|
4
4
|
export declare const mutateElement: <TElement extends Mutable<ExcalidrawElement>>(element: TElement, updates: ElementUpdate<TElement>, informMutation?: boolean) => TElement;
|
|
5
|
-
export declare const newElementWith: <TElement extends ExcalidrawElement>(element: TElement, updates: ElementUpdate<TElement
|
|
5
|
+
export declare const newElementWith: <TElement extends ExcalidrawElement>(element: TElement, updates: ElementUpdate<TElement>, force?: boolean) => TElement;
|
|
6
6
|
/**
|
|
7
7
|
* Mutates element, bumping `version`, `versionNonce`, and `updated`.
|
|
8
8
|
*
|
|
9
9
|
* NOTE: does not trigger re-render.
|
|
10
10
|
*/
|
|
11
11
|
export declare const bumpVersion: <T extends Mutable<ExcalidrawElement>>(element: T, version?: ExcalidrawElement["version"]) => T;
|
|
12
|
-
export {};
|
|
@@ -71,11 +71,13 @@ export const mutateElement = (element, updates, informMutation = true) => {
|
|
|
71
71
|
element.versionNonce = randomInteger();
|
|
72
72
|
element.updated = getUpdatedTimestamp();
|
|
73
73
|
if (informMutation) {
|
|
74
|
-
Scene.getScene(element)?.
|
|
74
|
+
Scene.getScene(element)?.triggerUpdate();
|
|
75
75
|
}
|
|
76
76
|
return element;
|
|
77
77
|
};
|
|
78
|
-
export const newElementWith = (element, updates
|
|
78
|
+
export const newElementWith = (element, updates,
|
|
79
|
+
/** pass `true` to always regenerate */
|
|
80
|
+
force = false) => {
|
|
79
81
|
let didChange = false;
|
|
80
82
|
for (const key in updates) {
|
|
81
83
|
const value = updates[key];
|
|
@@ -88,7 +90,7 @@ export const newElementWith = (element, updates) => {
|
|
|
88
90
|
didChange = true;
|
|
89
91
|
}
|
|
90
92
|
}
|
|
91
|
-
if (!didChange) {
|
|
93
|
+
if (!didChange && !force) {
|
|
92
94
|
return element;
|
|
93
95
|
}
|
|
94
96
|
return {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ExcalidrawElement, ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap } from "./types";
|
|
2
|
-
import { AppState } from "../types";
|
|
3
|
-
import { MarkOptional, Mutable } from "../utility-types";
|
|
4
|
-
export type ElementConstructorOpts = MarkOptional<Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted" | "updated">, "width" | "height" | "angle" | "groupIds" | "frameId" | "boundElements" | "seed" | "version" | "versionNonce" | "link" | "strokeStyle" | "fillStyle" | "strokeColor" | "backgroundColor" | "roughness" | "strokeWidth" | "roundness" | "locked" | "opacity" | "customData">;
|
|
1
|
+
import type { ExcalidrawElement, ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap } from "./types";
|
|
2
|
+
import type { AppState } from "../types";
|
|
3
|
+
import type { MarkOptional, Mutable } from "../utility-types";
|
|
4
|
+
export type ElementConstructorOpts = MarkOptional<Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted" | "updated">, "width" | "height" | "angle" | "groupIds" | "frameId" | "index" | "boundElements" | "seed" | "version" | "versionNonce" | "link" | "strokeStyle" | "fillStyle" | "strokeColor" | "backgroundColor" | "roughness" | "strokeWidth" | "roundness" | "locked" | "opacity" | "customData">;
|
|
5
5
|
export declare const newElement: (opts: {
|
|
6
6
|
type: ExcalidrawGenericElement["type"];
|
|
7
7
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawGenericElement>;
|
|
@@ -34,11 +34,6 @@ export declare const refreshTextDimensions: (textElement: ExcalidrawTextElement,
|
|
|
34
34
|
height: number;
|
|
35
35
|
text: string;
|
|
36
36
|
} | undefined;
|
|
37
|
-
export declare const updateTextElement: (textElement: ExcalidrawTextElement, container: ExcalidrawTextContainer | null, elementsMap: ElementsMap, { text, isDeleted, originalText, }: {
|
|
38
|
-
text: string;
|
|
39
|
-
isDeleted?: boolean | undefined;
|
|
40
|
-
originalText: string;
|
|
41
|
-
}) => ExcalidrawTextElement;
|
|
42
37
|
export declare const newFreeDrawElement: (opts: {
|
|
43
38
|
type: "freedraw";
|
|
44
39
|
points?: ExcalidrawFreeDrawElement["points"];
|
|
@@ -7,7 +7,7 @@ import { adjustXYWithRotation } from "../math";
|
|
|
7
7
|
import { getResizedElementAbsoluteCoords } from "./bounds";
|
|
8
8
|
import { measureText, normalizeText, wrapText, getBoundTextMaxWidth, getDefaultLineHeight, } from "./textElement";
|
|
9
9
|
import { DEFAULT_ELEMENT_PROPS, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_TEXT_ALIGN, DEFAULT_VERTICAL_ALIGN, VERTICAL_ALIGN, } from "../constants";
|
|
10
|
-
const _newElementBase = (type, { x, y, strokeColor = DEFAULT_ELEMENT_PROPS.strokeColor, backgroundColor = DEFAULT_ELEMENT_PROPS.backgroundColor, fillStyle = DEFAULT_ELEMENT_PROPS.fillStyle, strokeWidth = DEFAULT_ELEMENT_PROPS.strokeWidth, strokeStyle = DEFAULT_ELEMENT_PROPS.strokeStyle, roughness = DEFAULT_ELEMENT_PROPS.roughness, opacity = DEFAULT_ELEMENT_PROPS.opacity, width = 0, height = 0, angle = 0, groupIds = [], frameId = null, roundness = null, boundElements = null, link = null, locked = DEFAULT_ELEMENT_PROPS.locked, ...rest }) => {
|
|
10
|
+
const _newElementBase = (type, { x, y, strokeColor = DEFAULT_ELEMENT_PROPS.strokeColor, backgroundColor = DEFAULT_ELEMENT_PROPS.backgroundColor, fillStyle = DEFAULT_ELEMENT_PROPS.fillStyle, strokeWidth = DEFAULT_ELEMENT_PROPS.strokeWidth, strokeStyle = DEFAULT_ELEMENT_PROPS.strokeStyle, roughness = DEFAULT_ELEMENT_PROPS.roughness, opacity = DEFAULT_ELEMENT_PROPS.opacity, width = 0, height = 0, angle = 0, groupIds = [], frameId = null, index = null, roundness = null, boundElements = null, link = null, locked = DEFAULT_ELEMENT_PROPS.locked, ...rest }) => {
|
|
11
11
|
// assign type to guard against excess properties
|
|
12
12
|
const element = {
|
|
13
13
|
id: rest.id || randomId(),
|
|
@@ -26,6 +26,7 @@ const _newElementBase = (type, { x, y, strokeColor = DEFAULT_ELEMENT_PROPS.strok
|
|
|
26
26
|
opacity,
|
|
27
27
|
groupIds,
|
|
28
28
|
frameId,
|
|
29
|
+
index,
|
|
29
30
|
roundness,
|
|
30
31
|
seed: rest.seed ?? randomInteger(),
|
|
31
32
|
version: rest.version || 1,
|
|
@@ -84,7 +85,7 @@ export const newTextElement = (opts) => {
|
|
|
84
85
|
const textAlign = opts.textAlign || DEFAULT_TEXT_ALIGN;
|
|
85
86
|
const verticalAlign = opts.verticalAlign || DEFAULT_VERTICAL_ALIGN;
|
|
86
87
|
const offsets = getTextElementPositionOffsets({ textAlign, verticalAlign }, metrics);
|
|
87
|
-
const
|
|
88
|
+
const textElementProps = {
|
|
88
89
|
..._newElementBase("text", opts),
|
|
89
90
|
text,
|
|
90
91
|
fontSize,
|
|
@@ -97,18 +98,25 @@ export const newTextElement = (opts) => {
|
|
|
97
98
|
height: metrics.height,
|
|
98
99
|
containerId: opts.containerId || null,
|
|
99
100
|
originalText: text,
|
|
101
|
+
autoResize: true,
|
|
100
102
|
lineHeight,
|
|
101
|
-
}
|
|
103
|
+
};
|
|
104
|
+
const textElement = newElementWith(textElementProps, {});
|
|
102
105
|
return textElement;
|
|
103
106
|
};
|
|
104
107
|
const getAdjustedDimensions = (element, elementsMap, nextText) => {
|
|
105
|
-
|
|
108
|
+
let { width: nextWidth, height: nextHeight } = measureText(nextText, getFontString(element), element.lineHeight);
|
|
109
|
+
// wrapped text
|
|
110
|
+
if (!element.autoResize) {
|
|
111
|
+
nextWidth = element.width;
|
|
112
|
+
}
|
|
106
113
|
const { textAlign, verticalAlign } = element;
|
|
107
114
|
let x;
|
|
108
115
|
let y;
|
|
109
116
|
if (textAlign === "center" &&
|
|
110
117
|
verticalAlign === VERTICAL_ALIGN.MIDDLE &&
|
|
111
|
-
!element.containerId
|
|
118
|
+
!element.containerId &&
|
|
119
|
+
element.autoResize) {
|
|
112
120
|
const prevMetrics = measureText(element.text, getFontString(element), element.lineHeight);
|
|
113
121
|
const offsets = getTextElementPositionOffsets(element, {
|
|
114
122
|
width: nextWidth - prevMetrics.width,
|
|
@@ -141,19 +149,14 @@ export const refreshTextDimensions = (textElement, container, elementsMap, text
|
|
|
141
149
|
if (textElement.isDeleted) {
|
|
142
150
|
return;
|
|
143
151
|
}
|
|
144
|
-
if (container) {
|
|
145
|
-
text = wrapText(text, getFontString(textElement),
|
|
152
|
+
if (container || !textElement.autoResize) {
|
|
153
|
+
text = wrapText(text, getFontString(textElement), container
|
|
154
|
+
? getBoundTextMaxWidth(container, textElement)
|
|
155
|
+
: textElement.width);
|
|
146
156
|
}
|
|
147
157
|
const dimensions = getAdjustedDimensions(textElement, elementsMap, text);
|
|
148
158
|
return { text, ...dimensions };
|
|
149
159
|
};
|
|
150
|
-
export const updateTextElement = (textElement, container, elementsMap, { text, isDeleted, originalText, }) => {
|
|
151
|
-
return newElementWith(textElement, {
|
|
152
|
-
originalText,
|
|
153
|
-
isDeleted: isDeleted ?? textElement.isDeleted,
|
|
154
|
-
...refreshTextDimensions(textElement, container, elementsMap, originalText),
|
|
155
|
-
});
|
|
156
|
-
};
|
|
157
160
|
export const newFreeDrawElement = (opts) => {
|
|
158
161
|
return {
|
|
159
162
|
..._newElementBase(opts.type, opts),
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, ElementsMap } from "./types";
|
|
2
|
-
import { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
|
|
3
|
-
import { PointerDownState } from "../types";
|
|
1
|
+
import type { ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, ElementsMap } from "./types";
|
|
2
|
+
import type { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
|
|
3
|
+
import type { PointerDownState } from "../types";
|
|
4
4
|
export declare const normalizeAngle: (angle: number) => number;
|
|
5
5
|
export declare const transformElements: (originalElements: PointerDownState["originalElements"], transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number) => boolean;
|
|
6
6
|
export declare const resizeSingleElement: (originalElements: PointerDownState["originalElements"], shouldMaintainAspectRatio: boolean, element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, transformHandleDirection: TransformHandleDirection, shouldResizeFromCenter: boolean, pointerX: number, pointerY: number) => void;
|
|
7
|
-
export declare const resizeMultipleElements: (originalElements: PointerDownState["originalElements"], selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, transformHandleType:
|
|
7
|
+
export declare const resizeMultipleElements: (originalElements: PointerDownState["originalElements"], selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number) => void;
|
|
8
8
|
export declare const getResizeOffsetXY: (transformHandleType: MaybeTransformHandleType, selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, x: number, y: number) => [number, number];
|
|
9
9
|
export declare const getResizeArrowDirection: (transformHandleType: MaybeTransformHandleType, element: NonDeleted<ExcalidrawLinearElement>) => "origin" | "end";
|