@excalidraw/excalidraw 0.17.1-1d71f84 → 0.17.1-1ed53b1
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-AK7SWNLN.js → chunk-JKPJV7MZ.js} +6 -4
- package/dist/browser/dev/excalidraw-assets-dev/chunk-JKPJV7MZ.js.map +7 -0
- 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-RWZVJAQU.js → chunk-OKAZAA6U.js} +4494 -2647
- package/dist/browser/dev/excalidraw-assets-dev/chunk-OKAZAA6U.js.map +7 -0
- 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-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-ITJNUBZF.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js → en-BF4XUPIZ.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-EDKQZH7Z.js → image-LVS32KQQ.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/{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 +2064 -1830
- 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-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-O4AI3NNG.js} +2 -2
- package/dist/browser/prod/excalidraw-assets/{chunk-NI6SYCUG.js → chunk-QOQYOOQ4.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/chunk-SXBDZOS3.js +55 -0
- 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-PIPZXALV.js → dist-54276HPL.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{en-LROPV2RN.js → en-N7CLNF6C.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-VAGBVQ3G.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-UQDDYCH7.json} +5 -3
- package/dist/dev/index.css +72 -28
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +5352 -3354
- 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 +8 -4
- 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 +18 -13
- 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/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 +7 -7
- 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 +8 -5
- package/dist/excalidraw/components/App.d.ts +27 -13
- package/dist/excalidraw/components/App.js +362 -157
- 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 +28 -13
- 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 +1 -1
- 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/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/HelpDialog.js +8 -6
- package/dist/excalidraw/components/HintViewer.d.ts +1 -1
- 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/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/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/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 +2 -1
- package/dist/excalidraw/components/canvases/InteractiveCanvas.js +1 -0
- package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
- 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 +19 -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 +6 -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 +1 -2
- package/dist/excalidraw/element/index.js +0 -1
- package/dist/excalidraw/element/linearElementEditor.d.ts +12 -12
- package/dist/excalidraw/element/linearElementEditor.js +7 -5
- package/dist/excalidraw/element/mutateElement.d.ts +3 -4
- package/dist/excalidraw/element/newElement.d.ts +4 -4
- package/dist/excalidraw/element/newElement.js +2 -1
- package/dist/excalidraw/element/resizeElements.d.ts +4 -4
- package/dist/excalidraw/element/resizeElements.js +110 -86
- package/dist/excalidraw/element/resizeTest.d.ts +7 -7
- package/dist/excalidraw/element/resizeTest.js +55 -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 +5 -34
- package/dist/excalidraw/element/textWysiwyg.d.ts +2 -2
- package/dist/excalidraw/element/transformHandles.d.ts +24 -6
- package/dist/excalidraw/element/transformHandles.js +24 -3
- package/dist/excalidraw/element/typeChecks.d.ts +4 -4
- package/dist/excalidraw/element/types.d.ts +26 -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 +5 -3
- 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 +1 -1
- package/dist/excalidraw/scene/Renderer.d.ts +3 -3
- package/dist/excalidraw/scene/Scene.d.ts +9 -8
- package/dist/excalidraw/scene/Scene.js +31 -16
- 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 +5 -4
- 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-UQDDYCH7.json} +5 -3
- 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 +2 -1
- 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/image-OFRRV5MB.css.map +0 -7
- package/dist/browser/prod/excalidraw-assets/chunk-LL4GORAM.js +0 -55
- 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/{dist-Z46EOVOL.js.map → dist-ITJNUBZF.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{en-5TCZHGGJ.js.map → en-BF4XUPIZ.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-LVS32KQQ.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,7 +1,7 @@
|
|
|
1
1
|
import { MIN_FONT_SIZE, SHIFT_LOCKING_ANGLE } from "../constants";
|
|
2
2
|
import { rescalePoints } from "../points";
|
|
3
|
-
import { rotate,
|
|
4
|
-
import { getElementAbsoluteCoords, getCommonBounds, getResizedElementAbsoluteCoords, getCommonBoundingBox,
|
|
3
|
+
import { rotate, centerPoint, rotatePoint } from "../math";
|
|
4
|
+
import { getElementAbsoluteCoords, getCommonBounds, getResizedElementAbsoluteCoords, getCommonBoundingBox, } from "./bounds";
|
|
5
5
|
import { isArrowElement, isBoundToContainer, isFrameLikeElement, isFreeDrawElement, isImageElement, isLinearElement, isTextElement, } from "./typeChecks";
|
|
6
6
|
import { mutateElement } from "./mutateElement";
|
|
7
7
|
import { getFontString } from "../utils";
|
|
@@ -9,6 +9,7 @@ import { updateBoundElements } from "./binding";
|
|
|
9
9
|
import Scene from "../scene/Scene";
|
|
10
10
|
import { getApproxMinLineWidth, getBoundTextElement, getBoundTextElementId, getContainerElement, handleBindTextResize, getBoundTextMaxWidth, getApproxMinLineHeight, } from "./textElement";
|
|
11
11
|
import { LinearElementEditor } from "./linearElementEditor";
|
|
12
|
+
import { isInGroup } from "../groups";
|
|
12
13
|
export const normalizeAngle = (angle) => {
|
|
13
14
|
if (angle < 0) {
|
|
14
15
|
return angle + 2 * Math.PI;
|
|
@@ -44,11 +45,8 @@ export const transformElements = (originalElements, transformHandleType, selecte
|
|
|
44
45
|
rotateMultipleElements(originalElements, selectedElements, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle, centerX, centerY);
|
|
45
46
|
return true;
|
|
46
47
|
}
|
|
47
|
-
else if (transformHandleType
|
|
48
|
-
transformHandleType
|
|
49
|
-
transformHandleType === "sw" ||
|
|
50
|
-
transformHandleType === "se") {
|
|
51
|
-
resizeMultipleElements(originalElements, selectedElements, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
|
|
48
|
+
else if (transformHandleType) {
|
|
49
|
+
resizeMultipleElements(originalElements, selectedElements, elementsMap, transformHandleType, shouldResizeFromCenter, shouldMaintainAspectRatio, pointerX, pointerY);
|
|
52
50
|
return true;
|
|
53
51
|
}
|
|
54
52
|
}
|
|
@@ -102,39 +100,25 @@ const measureFontSizeFromWidth = (element, elementsMap, nextWidth) => {
|
|
|
102
100
|
size: nextFontSize,
|
|
103
101
|
};
|
|
104
102
|
};
|
|
105
|
-
const getSidesForTransformHandle = (transformHandleType, shouldResizeFromCenter) => {
|
|
106
|
-
return {
|
|
107
|
-
n: /^(n|ne|nw)$/.test(transformHandleType) ||
|
|
108
|
-
(shouldResizeFromCenter && /^(s|se|sw)$/.test(transformHandleType)),
|
|
109
|
-
s: /^(s|se|sw)$/.test(transformHandleType) ||
|
|
110
|
-
(shouldResizeFromCenter && /^(n|ne|nw)$/.test(transformHandleType)),
|
|
111
|
-
w: /^(w|nw|sw)$/.test(transformHandleType) ||
|
|
112
|
-
(shouldResizeFromCenter && /^(e|ne|se)$/.test(transformHandleType)),
|
|
113
|
-
e: /^(e|ne|se)$/.test(transformHandleType) ||
|
|
114
|
-
(shouldResizeFromCenter && /^(w|nw|sw)$/.test(transformHandleType)),
|
|
115
|
-
};
|
|
116
|
-
};
|
|
117
103
|
const resizeSingleTextElement = (element, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY) => {
|
|
118
|
-
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
|
|
119
|
-
const cx = (x1 + x2) / 2;
|
|
120
|
-
const cy = (y1 + y2) / 2;
|
|
104
|
+
const [x1, y1, x2, y2, cx, cy] = getElementAbsoluteCoords(element, elementsMap);
|
|
121
105
|
// rotation pointer with reverse angle
|
|
122
106
|
const [rotatedX, rotatedY] = rotate(pointerX, pointerY, cx, cy, -element.angle);
|
|
123
|
-
let
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
break;
|
|
134
|
-
case "sw":
|
|
135
|
-
scale = Math.max((x2 - rotatedX) / (x2 - x1), (rotatedY - y1) / (y2 - y1));
|
|
136
|
-
break;
|
|
107
|
+
let scaleX = 0;
|
|
108
|
+
let scaleY = 0;
|
|
109
|
+
if (transformHandleType.includes("e")) {
|
|
110
|
+
scaleX = (rotatedX - x1) / (x2 - x1);
|
|
111
|
+
}
|
|
112
|
+
if (transformHandleType.includes("w")) {
|
|
113
|
+
scaleX = (x2 - rotatedX) / (x2 - x1);
|
|
114
|
+
}
|
|
115
|
+
if (transformHandleType.includes("n")) {
|
|
116
|
+
scaleY = (y2 - rotatedY) / (y2 - y1);
|
|
137
117
|
}
|
|
118
|
+
if (transformHandleType.includes("s")) {
|
|
119
|
+
scaleY = (rotatedY - y1) / (y2 - y1);
|
|
120
|
+
}
|
|
121
|
+
const scale = Math.max(scaleX, scaleY);
|
|
138
122
|
if (scale > 0) {
|
|
139
123
|
const nextWidth = element.width * scale;
|
|
140
124
|
const nextHeight = element.height * scale;
|
|
@@ -142,18 +126,49 @@ const resizeSingleTextElement = (element, elementsMap, transformHandleType, shou
|
|
|
142
126
|
if (metrics === null) {
|
|
143
127
|
return;
|
|
144
128
|
}
|
|
145
|
-
const
|
|
146
|
-
const
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
129
|
+
const startTopLeft = [x1, y1];
|
|
130
|
+
const startBottomRight = [x2, y2];
|
|
131
|
+
const startCenter = [cx, cy];
|
|
132
|
+
let newTopLeft = [x1, y1];
|
|
133
|
+
if (["n", "w", "nw"].includes(transformHandleType)) {
|
|
134
|
+
newTopLeft = [
|
|
135
|
+
startBottomRight[0] - Math.abs(nextWidth),
|
|
136
|
+
startBottomRight[1] - Math.abs(nextHeight),
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
if (transformHandleType === "ne") {
|
|
140
|
+
const bottomLeft = [startTopLeft[0], startBottomRight[1]];
|
|
141
|
+
newTopLeft = [bottomLeft[0], bottomLeft[1] - Math.abs(nextHeight)];
|
|
142
|
+
}
|
|
143
|
+
if (transformHandleType === "sw") {
|
|
144
|
+
const topRight = [startBottomRight[0], startTopLeft[1]];
|
|
145
|
+
newTopLeft = [topRight[0] - Math.abs(nextWidth), topRight[1]];
|
|
146
|
+
}
|
|
147
|
+
if (["s", "n"].includes(transformHandleType)) {
|
|
148
|
+
newTopLeft[0] = startCenter[0] - nextWidth / 2;
|
|
149
|
+
}
|
|
150
|
+
if (["e", "w"].includes(transformHandleType)) {
|
|
151
|
+
newTopLeft[1] = startCenter[1] - nextHeight / 2;
|
|
152
|
+
}
|
|
153
|
+
if (shouldResizeFromCenter) {
|
|
154
|
+
newTopLeft[0] = startCenter[0] - Math.abs(nextWidth) / 2;
|
|
155
|
+
newTopLeft[1] = startCenter[1] - Math.abs(nextHeight) / 2;
|
|
156
|
+
}
|
|
157
|
+
const angle = element.angle;
|
|
158
|
+
const rotatedTopLeft = rotatePoint(newTopLeft, [cx, cy], angle);
|
|
159
|
+
const newCenter = [
|
|
160
|
+
newTopLeft[0] + Math.abs(nextWidth) / 2,
|
|
161
|
+
newTopLeft[1] + Math.abs(nextHeight) / 2,
|
|
162
|
+
];
|
|
163
|
+
const rotatedNewCenter = rotatePoint(newCenter, [cx, cy], angle);
|
|
164
|
+
newTopLeft = rotatePoint(rotatedTopLeft, rotatedNewCenter, -angle);
|
|
165
|
+
const [nextX, nextY] = newTopLeft;
|
|
151
166
|
mutateElement(element, {
|
|
152
167
|
fontSize: metrics.size,
|
|
153
168
|
width: nextWidth,
|
|
154
169
|
height: nextHeight,
|
|
155
|
-
x:
|
|
156
|
-
y:
|
|
170
|
+
x: nextX,
|
|
171
|
+
y: nextY,
|
|
157
172
|
});
|
|
158
173
|
}
|
|
159
174
|
};
|
|
@@ -364,7 +379,7 @@ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio,
|
|
|
364
379
|
handleBindTextResize(element, elementsMap, transformHandleDirection, shouldMaintainAspectRatio);
|
|
365
380
|
}
|
|
366
381
|
};
|
|
367
|
-
export const resizeMultipleElements = (originalElements, selectedElements, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY) => {
|
|
382
|
+
export const resizeMultipleElements = (originalElements, selectedElements, elementsMap, transformHandleType, shouldResizeFromCenter, shouldMaintainAspectRatio, pointerX, pointerY) => {
|
|
368
383
|
// map selected elements to the original elements. While it never should
|
|
369
384
|
// happen that pointerDownState.originalElements won't contain the selected
|
|
370
385
|
// elements during resize, this coupling isn't guaranteed, so to ensure
|
|
@@ -396,29 +411,54 @@ export const resizeMultipleElements = (originalElements, selectedElements, eleme
|
|
|
396
411
|
return [...acc, { ...text, ...xy }];
|
|
397
412
|
}, []);
|
|
398
413
|
const { minX, minY, maxX, maxY, midX, midY } = getCommonBoundingBox(targetElements.map(({ orig }) => orig).concat(boundTextElements));
|
|
399
|
-
|
|
400
|
-
|
|
414
|
+
const width = maxX - minX;
|
|
415
|
+
const height = maxY - minY;
|
|
401
416
|
const direction = transformHandleType;
|
|
402
|
-
const
|
|
417
|
+
const anchorsMap = {
|
|
403
418
|
ne: [minX, maxY],
|
|
404
419
|
se: [minX, minY],
|
|
405
420
|
sw: [maxX, minY],
|
|
406
421
|
nw: [maxX, maxY],
|
|
422
|
+
e: [minX, minY + height / 2],
|
|
423
|
+
w: [maxX, minY + height / 2],
|
|
424
|
+
n: [minX + width / 2, maxY],
|
|
425
|
+
s: [minX + width / 2, minY],
|
|
407
426
|
};
|
|
408
427
|
// anchor point must be on the opposite side of the dragged selection handle
|
|
409
428
|
// or be the center of the selection if shouldResizeFromCenter
|
|
410
429
|
const [anchorX, anchorY] = shouldResizeFromCenter
|
|
411
430
|
? [midX, midY]
|
|
412
|
-
:
|
|
413
|
-
const
|
|
431
|
+
: anchorsMap[direction];
|
|
432
|
+
const resizeFromCenterScale = shouldResizeFromCenter ? 2 : 1;
|
|
433
|
+
const scale = Math.max(Math.abs(pointerX - anchorX) / width || 0, Math.abs(pointerY - anchorY) / height || 0) * resizeFromCenterScale;
|
|
414
434
|
if (scale === 0) {
|
|
415
435
|
return;
|
|
416
436
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
437
|
+
let scaleX = direction.includes("e") || direction.includes("w")
|
|
438
|
+
? (Math.abs(pointerX - anchorX) / width) * resizeFromCenterScale
|
|
439
|
+
: 1;
|
|
440
|
+
let scaleY = direction.includes("n") || direction.includes("s")
|
|
441
|
+
? (Math.abs(pointerY - anchorY) / height) * resizeFromCenterScale
|
|
442
|
+
: 1;
|
|
443
|
+
const keepAspectRatio = shouldMaintainAspectRatio ||
|
|
444
|
+
targetElements.some((item) => item.latest.angle !== 0 ||
|
|
445
|
+
isTextElement(item.latest) ||
|
|
446
|
+
isInGroup(item.latest));
|
|
447
|
+
if (keepAspectRatio) {
|
|
448
|
+
scaleX = scale;
|
|
449
|
+
scaleY = scale;
|
|
450
|
+
}
|
|
451
|
+
const flipConditionsMap = {
|
|
452
|
+
ne: [pointerX < anchorX, pointerY > anchorY],
|
|
453
|
+
se: [pointerX < anchorX, pointerY < anchorY],
|
|
454
|
+
sw: [pointerX > anchorX, pointerY < anchorY],
|
|
455
|
+
nw: [pointerX > anchorX, pointerY > anchorY],
|
|
456
|
+
// e.g. when resizing from the "e" side, we do not need to consider changes in the `y` direction
|
|
457
|
+
// and therefore, we do not need to flip in the `y` direction at all
|
|
458
|
+
e: [pointerX < anchorX, false],
|
|
459
|
+
w: [pointerX > anchorX, false],
|
|
460
|
+
n: [false, pointerY > anchorY],
|
|
461
|
+
s: [false, pointerY < anchorY],
|
|
422
462
|
};
|
|
423
463
|
/**
|
|
424
464
|
* to flip an element:
|
|
@@ -428,7 +468,7 @@ export const resizeMultipleElements = (originalElements, selectedElements, eleme
|
|
|
428
468
|
* mirror points in the case of linear & freedraw elemenets
|
|
429
469
|
* 3. adjust element angle
|
|
430
470
|
*/
|
|
431
|
-
const [flipFactorX, flipFactorY] =
|
|
471
|
+
const [flipFactorX, flipFactorY] = flipConditionsMap[direction].map((condition) => (condition ? -1 : 1));
|
|
432
472
|
const isFlippedByX = flipFactorX < 0;
|
|
433
473
|
const isFlippedByY = flipFactorY < 0;
|
|
434
474
|
const elementsAndUpdates = [];
|
|
@@ -437,16 +477,16 @@ export const resizeMultipleElements = (originalElements, selectedElements, eleme
|
|
|
437
477
|
if (isTextElement(orig) && isBoundToContainer(orig)) {
|
|
438
478
|
continue;
|
|
439
479
|
}
|
|
440
|
-
const width = orig.width *
|
|
441
|
-
const height = orig.height *
|
|
480
|
+
const width = orig.width * scaleX;
|
|
481
|
+
const height = orig.height * scaleY;
|
|
442
482
|
const angle = normalizeAngle(orig.angle * flipFactorX * flipFactorY);
|
|
443
483
|
const isLinearOrFreeDraw = isLinearElement(orig) || isFreeDrawElement(orig);
|
|
444
484
|
const offsetX = orig.x - anchorX;
|
|
445
485
|
const offsetY = orig.y - anchorY;
|
|
446
486
|
const shiftX = isFlippedByX && !isLinearOrFreeDraw ? width : 0;
|
|
447
487
|
const shiftY = isFlippedByY && !isLinearOrFreeDraw ? height : 0;
|
|
448
|
-
const x = anchorX + flipFactorX * (offsetX *
|
|
449
|
-
const y = anchorY + flipFactorY * (offsetY *
|
|
488
|
+
const x = anchorX + flipFactorX * (offsetX * scaleX + shiftX);
|
|
489
|
+
const y = anchorY + flipFactorY * (offsetY * scaleY + shiftY);
|
|
450
490
|
const rescaledPoints = rescalePointsInElement(orig, width * flipFactorX, height * flipFactorY, false);
|
|
451
491
|
const update = {
|
|
452
492
|
x,
|
|
@@ -456,30 +496,9 @@ export const resizeMultipleElements = (originalElements, selectedElements, eleme
|
|
|
456
496
|
angle,
|
|
457
497
|
...rescaledPoints,
|
|
458
498
|
};
|
|
459
|
-
if (isImageElement(orig)
|
|
499
|
+
if (isImageElement(orig)) {
|
|
460
500
|
update.scale = [orig.scale[0] * flipFactorX, orig.scale[1] * flipFactorY];
|
|
461
501
|
}
|
|
462
|
-
if (isLinearElement(orig) && (isFlippedByX || isFlippedByY)) {
|
|
463
|
-
const origBounds = getElementPointsCoords(orig, orig.points);
|
|
464
|
-
const newBounds = getElementPointsCoords({ ...orig, x, y }, rescaledPoints.points);
|
|
465
|
-
const origXY = [orig.x, orig.y];
|
|
466
|
-
const newXY = [x, y];
|
|
467
|
-
const linearShift = (axis) => {
|
|
468
|
-
const i = axis === "x" ? 0 : 1;
|
|
469
|
-
return ((newBounds[i + 2] -
|
|
470
|
-
newXY[i] -
|
|
471
|
-
(origXY[i] - origBounds[i]) * scale +
|
|
472
|
-
(origBounds[i + 2] - origXY[i]) * scale -
|
|
473
|
-
(newXY[i] - newBounds[i])) /
|
|
474
|
-
2);
|
|
475
|
-
};
|
|
476
|
-
if (isFlippedByX) {
|
|
477
|
-
update.x -= linearShift("x");
|
|
478
|
-
}
|
|
479
|
-
if (isFlippedByY) {
|
|
480
|
-
update.y -= linearShift("y");
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
502
|
if (isTextElement(orig)) {
|
|
484
503
|
const metrics = measureFontSizeFromWidth(orig, elementsMap, width);
|
|
485
504
|
if (!metrics) {
|
|
@@ -489,11 +508,16 @@ export const resizeMultipleElements = (originalElements, selectedElements, eleme
|
|
|
489
508
|
}
|
|
490
509
|
const boundTextElement = originalElements.get(getBoundTextElementId(orig) ?? "");
|
|
491
510
|
if (boundTextElement) {
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
511
|
+
if (keepAspectRatio) {
|
|
512
|
+
const newFontSize = boundTextElement.fontSize * scale;
|
|
513
|
+
if (newFontSize < MIN_FONT_SIZE) {
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
update.boundTextFontSize = newFontSize;
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
update.boundTextFontSize = boundTextElement.fontSize;
|
|
495
520
|
}
|
|
496
|
-
update.boundTextFontSize = newFontSize;
|
|
497
521
|
}
|
|
498
522
|
elementsAndUpdates.push({
|
|
499
523
|
element: latest,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { ExcalidrawElement, PointerType, NonDeletedExcalidrawElement, ElementsMap } from "./types";
|
|
2
|
-
import { MaybeTransformHandleType } from "./transformHandles";
|
|
3
|
-
import { AppState, Zoom } from "../types";
|
|
4
|
-
import { Bounds } from "./bounds";
|
|
5
|
-
export declare const resizeTest: (element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, appState: AppState, x: number, y: number, zoom: Zoom, pointerType: PointerType) => MaybeTransformHandleType;
|
|
6
|
-
export declare const getElementWithTransformHandleType: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType, elementsMap: ElementsMap) => {
|
|
1
|
+
import type { ExcalidrawElement, PointerType, NonDeletedExcalidrawElement, ElementsMap } from "./types";
|
|
2
|
+
import type { MaybeTransformHandleType } from "./transformHandles";
|
|
3
|
+
import type { AppState, Device, Zoom } from "../types";
|
|
4
|
+
import type { Bounds } from "./bounds";
|
|
5
|
+
export declare const resizeTest: (element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, appState: AppState, x: number, y: number, zoom: Zoom, pointerType: PointerType, device: Device) => MaybeTransformHandleType;
|
|
6
|
+
export declare const getElementWithTransformHandleType: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType, elementsMap: ElementsMap, device: Device) => {
|
|
7
7
|
element: NonDeletedExcalidrawElement;
|
|
8
8
|
transformHandleType: MaybeTransformHandleType;
|
|
9
9
|
} | null;
|
|
10
|
-
export declare const getTransformHandleTypeFromCoords: ([x1, y1, x2, y2]: Bounds, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType) => MaybeTransformHandleType;
|
|
10
|
+
export declare const getTransformHandleTypeFromCoords: ([x1, y1, x2, y2]: Bounds, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType, device: Device) => MaybeTransformHandleType;
|
|
11
11
|
export declare const getCursorForResizingElement: (resizingElement: {
|
|
12
12
|
element?: ExcalidrawElement;
|
|
13
13
|
transformHandleType: MaybeTransformHandleType;
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getTransformHandlesFromCoords, getTransformHandles, getOmitSidesForDevice, canResizeFromSides, } from "./transformHandles";
|
|
2
|
+
import { getElementAbsoluteCoords } from "./bounds";
|
|
3
|
+
import { SIDE_RESIZING_THRESHOLD } from "../constants";
|
|
4
|
+
import { angleToDegrees, pointOnLine, pointRotate, } from "../../utils/geometry/geometry";
|
|
5
|
+
import { isLinearElement } from "./typeChecks";
|
|
2
6
|
const isInsideTransformHandle = (transformHandle, x, y) => x >= transformHandle[0] &&
|
|
3
7
|
x <= transformHandle[0] + transformHandle[2] &&
|
|
4
8
|
y >= transformHandle[1] &&
|
|
5
9
|
y <= transformHandle[1] + transformHandle[3];
|
|
6
|
-
export const resizeTest = (element, elementsMap, appState, x, y, zoom, pointerType) => {
|
|
10
|
+
export const resizeTest = (element, elementsMap, appState, x, y, zoom, pointerType, device) => {
|
|
7
11
|
if (!appState.selectedElementIds[element.id]) {
|
|
8
12
|
return false;
|
|
9
13
|
}
|
|
10
|
-
const { rotation: rotationTransformHandle, ...transformHandles } = getTransformHandles(element, zoom, elementsMap, pointerType);
|
|
14
|
+
const { rotation: rotationTransformHandle, ...transformHandles } = getTransformHandles(element, zoom, elementsMap, pointerType, getOmitSidesForDevice(device));
|
|
11
15
|
if (rotationTransformHandle &&
|
|
12
16
|
isInsideTransformHandle(rotationTransformHandle, x, y)) {
|
|
13
17
|
return "rotation";
|
|
@@ -22,25 +26,56 @@ export const resizeTest = (element, elementsMap, appState, x, y, zoom, pointerTy
|
|
|
22
26
|
if (filter.length > 0) {
|
|
23
27
|
return filter[0];
|
|
24
28
|
}
|
|
29
|
+
if (canResizeFromSides(device)) {
|
|
30
|
+
const [x1, y1, x2, y2, cx, cy] = getElementAbsoluteCoords(element, elementsMap);
|
|
31
|
+
// Note that for a text element, when "resized" from the side
|
|
32
|
+
// we should make it wrap/unwrap
|
|
33
|
+
if (element.type !== "text" &&
|
|
34
|
+
!(isLinearElement(element) && element.points.length <= 2)) {
|
|
35
|
+
const SPACING = SIDE_RESIZING_THRESHOLD / zoom.value;
|
|
36
|
+
const sides = getSelectionBorders([x1 - SPACING, y1 - SPACING], [x2 + SPACING, y2 + SPACING], [cx, cy], angleToDegrees(element.angle));
|
|
37
|
+
for (const [dir, side] of Object.entries(sides)) {
|
|
38
|
+
// test to see if x, y are on the line segment
|
|
39
|
+
if (pointOnLine([x, y], side, SPACING)) {
|
|
40
|
+
return dir;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
25
45
|
return false;
|
|
26
46
|
};
|
|
27
|
-
export const getElementWithTransformHandleType = (elements, appState, scenePointerX, scenePointerY, zoom, pointerType, elementsMap) => {
|
|
47
|
+
export const getElementWithTransformHandleType = (elements, appState, scenePointerX, scenePointerY, zoom, pointerType, elementsMap, device) => {
|
|
28
48
|
return elements.reduce((result, element) => {
|
|
29
49
|
if (result) {
|
|
30
50
|
return result;
|
|
31
51
|
}
|
|
32
|
-
const transformHandleType = resizeTest(element, elementsMap, appState, scenePointerX, scenePointerY, zoom, pointerType);
|
|
52
|
+
const transformHandleType = resizeTest(element, elementsMap, appState, scenePointerX, scenePointerY, zoom, pointerType, device);
|
|
33
53
|
return transformHandleType ? { element, transformHandleType } : null;
|
|
34
54
|
}, null);
|
|
35
55
|
};
|
|
36
|
-
export const getTransformHandleTypeFromCoords = ([x1, y1, x2, y2], scenePointerX, scenePointerY, zoom, pointerType) => {
|
|
37
|
-
const transformHandles = getTransformHandlesFromCoords([x1, y1, x2, y2, (x1 + x2) / 2, (y1 + y2) / 2], 0, zoom, pointerType,
|
|
56
|
+
export const getTransformHandleTypeFromCoords = ([x1, y1, x2, y2], scenePointerX, scenePointerY, zoom, pointerType, device) => {
|
|
57
|
+
const transformHandles = getTransformHandlesFromCoords([x1, y1, x2, y2, (x1 + x2) / 2, (y1 + y2) / 2], 0, zoom, pointerType, getOmitSidesForDevice(device));
|
|
38
58
|
const found = Object.keys(transformHandles).find((key) => {
|
|
39
59
|
const transformHandle = transformHandles[key];
|
|
40
60
|
return (transformHandle &&
|
|
41
61
|
isInsideTransformHandle(transformHandle, scenePointerX, scenePointerY));
|
|
42
62
|
});
|
|
43
|
-
|
|
63
|
+
if (found) {
|
|
64
|
+
return found;
|
|
65
|
+
}
|
|
66
|
+
if (canResizeFromSides(device)) {
|
|
67
|
+
const cx = (x1 + x2) / 2;
|
|
68
|
+
const cy = (y1 + y2) / 2;
|
|
69
|
+
const SPACING = SIDE_RESIZING_THRESHOLD / zoom.value;
|
|
70
|
+
const sides = getSelectionBorders([x1 - SPACING, y1 - SPACING], [x2 + SPACING, y2 + SPACING], [cx, cy], angleToDegrees(0));
|
|
71
|
+
for (const [dir, side] of Object.entries(sides)) {
|
|
72
|
+
// test to see if x, y are on the line segment
|
|
73
|
+
if (pointOnLine([scenePointerX, scenePointerY], side, SPACING)) {
|
|
74
|
+
return dir;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
44
79
|
};
|
|
45
80
|
const RESIZE_CURSORS = ["ns", "nesw", "ew", "nwse"];
|
|
46
81
|
const rotateResizeCursor = (cursor, angle) => {
|
|
@@ -93,3 +128,15 @@ export const getCursorForResizingElement = (resizingElement) => {
|
|
|
93
128
|
}
|
|
94
129
|
return cursor ? `${cursor}-resize` : "";
|
|
95
130
|
};
|
|
131
|
+
const getSelectionBorders = ([x1, y1], [x2, y2], center, angleInDegrees) => {
|
|
132
|
+
const topLeft = pointRotate([x1, y1], angleInDegrees, center);
|
|
133
|
+
const topRight = pointRotate([x2, y1], angleInDegrees, center);
|
|
134
|
+
const bottomLeft = pointRotate([x1, y2], angleInDegrees, center);
|
|
135
|
+
const bottomRight = pointRotate([x2, y2], angleInDegrees, center);
|
|
136
|
+
return {
|
|
137
|
+
n: [topLeft, topRight],
|
|
138
|
+
e: [topRight, bottomRight],
|
|
139
|
+
s: [bottomRight, bottomLeft],
|
|
140
|
+
w: [bottomLeft, topLeft],
|
|
141
|
+
};
|
|
142
|
+
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { NonDeletedExcalidrawElement } from "./types";
|
|
2
|
-
import { UIAppState } from "../types";
|
|
1
|
+
import type { NonDeletedExcalidrawElement } from "./types";
|
|
2
|
+
import type { UIAppState } from "../types";
|
|
3
3
|
export declare const showSelectedShapeActions: (appState: UIAppState, elements: readonly NonDeletedExcalidrawElement[]) => boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ElementsMap, ExcalidrawElement } from "./types";
|
|
2
|
-
import { AppState, Zoom } from "../types";
|
|
1
|
+
import type { ElementsMap, ExcalidrawElement } from "./types";
|
|
2
|
+
import type { AppState, Zoom } from "../types";
|
|
3
3
|
export declare const isInvisiblySmallElement: (element: ExcalidrawElement) => boolean;
|
|
4
4
|
export declare const isElementInViewport: (element: ExcalidrawElement, width: number, height: number, viewTransformations: {
|
|
5
5
|
zoom: Zoom;
|
|
@@ -3,6 +3,9 @@ import { isFreeDrawElement, isLinearElement } from "./typeChecks";
|
|
|
3
3
|
import { SHIFT_LOCKING_ANGLE } from "../constants";
|
|
4
4
|
import { getElementBounds } from "./bounds";
|
|
5
5
|
import { viewportCoordsToSceneCoords } from "../utils";
|
|
6
|
+
// TODO: remove invisible elements consistently actions, so that invisible elements are not recorded by the store, exported, broadcasted or persisted
|
|
7
|
+
// - perhaps could be as part of a standalone 'cleanup' action, in addition to 'finalize'
|
|
8
|
+
// - could also be part of `_clearElements`
|
|
6
9
|
export const isInvisiblySmallElement = (element) => {
|
|
7
10
|
if (isLinearElement(element) || isFreeDrawElement(element)) {
|
|
8
11
|
return element.points.length < 2;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { ExcalidrawElement } from "./types";
|
|
1
|
+
import type { ExcalidrawElement } from "./types";
|
|
2
2
|
export declare const normalizeElementOrder: (elements: readonly ExcalidrawElement[]) => readonly ExcalidrawElement[];
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ElementsMap, ExcalidrawElement, ExcalidrawElementType, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer, FontFamilyValues, FontString, NonDeletedExcalidrawElement } from "./types";
|
|
2
|
-
import { MaybeTransformHandleType } from "./transformHandles";
|
|
3
|
-
import { AppState } from "../types";
|
|
4
|
-
import { ExtractSetType, MakeBrand } from "../utility-types";
|
|
1
|
+
import type { ElementsMap, ExcalidrawElement, ExcalidrawElementType, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer, FontFamilyValues, FontString, NonDeletedExcalidrawElement } from "./types";
|
|
2
|
+
import type { MaybeTransformHandleType } from "./transformHandles";
|
|
3
|
+
import type { AppState } from "../types";
|
|
4
|
+
import type { ExtractSetType, MakeBrand } from "../utility-types";
|
|
5
5
|
export declare const normalizeText: (text: string) => string;
|
|
6
|
-
export declare const redrawTextBoundingBox: (textElement: ExcalidrawTextElement, container: ExcalidrawElement | null, elementsMap: ElementsMap) => void;
|
|
6
|
+
export declare const redrawTextBoundingBox: (textElement: ExcalidrawTextElement, container: ExcalidrawElement | null, elementsMap: ElementsMap, informMutation?: boolean) => void;
|
|
7
7
|
export declare const bindTextToShapeAfterDuplication: (newElements: ExcalidrawElement[], oldElements: ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
|
|
8
8
|
export declare const handleBindTextResize: (container: NonDeletedExcalidrawElement, elementsMap: ElementsMap, transformHandleType: MaybeTransformHandleType, shouldMaintainAspectRatio?: boolean) => void;
|
|
9
9
|
export declare const computeBoundTextPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer, elementsMap: ElementsMap) => {
|
|
@@ -61,7 +61,6 @@ export declare const getBoundTextElementPosition: (container: ExcalidrawElement,
|
|
|
61
61
|
} | undefined;
|
|
62
62
|
export declare const shouldAllowVerticalAlign: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap) => boolean;
|
|
63
63
|
export declare const suppportsHorizontalAlign: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap) => boolean;
|
|
64
|
-
export declare const getTextBindableContainerAtPosition: (elements: readonly ExcalidrawElement[], appState: AppState, x: number, y: number, elementsMap: ElementsMap) => ExcalidrawTextContainer | null;
|
|
65
64
|
declare const VALID_CONTAINER_TYPES: Set<string>;
|
|
66
65
|
export declare const isValidTextContainer: (element: {
|
|
67
66
|
type: ExcalidrawElementType;
|
|
@@ -4,10 +4,6 @@ import { ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO, ARROW_LABEL_WIDTH_FRACTION, B
|
|
|
4
4
|
import { isTextElement } from ".";
|
|
5
5
|
import { isBoundToContainer, isArrowElement } from "./typeChecks";
|
|
6
6
|
import { LinearElementEditor } from "./linearElementEditor";
|
|
7
|
-
import { isTextBindableContainer } from "./typeChecks";
|
|
8
|
-
import { getElementAbsoluteCoords } from ".";
|
|
9
|
-
import { getSelectedElements } from "../scene";
|
|
10
|
-
import { isHittingElementNotConsideringBoundingBox } from "./collision";
|
|
11
7
|
import { resetOriginalContainerCache, updateOriginalContainerCache, } from "./containerCache";
|
|
12
8
|
export const normalizeText = (text) => {
|
|
13
9
|
return (normalizeEOL(text)
|
|
@@ -17,7 +13,7 @@ export const normalizeText = (text) => {
|
|
|
17
13
|
const splitIntoLines = (text) => {
|
|
18
14
|
return normalizeText(text).split("\n");
|
|
19
15
|
};
|
|
20
|
-
export const redrawTextBoundingBox = (textElement, container, elementsMap) => {
|
|
16
|
+
export const redrawTextBoundingBox = (textElement, container, elementsMap, informMutation = true) => {
|
|
21
17
|
let maxWidth = undefined;
|
|
22
18
|
const boundTextUpdates = {
|
|
23
19
|
x: textElement.x,
|
|
@@ -25,6 +21,7 @@ export const redrawTextBoundingBox = (textElement, container, elementsMap) => {
|
|
|
25
21
|
text: textElement.text,
|
|
26
22
|
width: textElement.width,
|
|
27
23
|
height: textElement.height,
|
|
24
|
+
angle: container?.angle ?? textElement.angle,
|
|
28
25
|
};
|
|
29
26
|
boundTextUpdates.text = textElement.text;
|
|
30
27
|
if (container) {
|
|
@@ -39,12 +36,12 @@ export const redrawTextBoundingBox = (textElement, container, elementsMap) => {
|
|
|
39
36
|
const maxContainerWidth = getBoundTextMaxWidth(container, textElement);
|
|
40
37
|
if (!isArrowElement(container) && metrics.height > maxContainerHeight) {
|
|
41
38
|
const nextHeight = computeContainerDimensionForBoundText(metrics.height, container.type);
|
|
42
|
-
mutateElement(container, { height: nextHeight });
|
|
39
|
+
mutateElement(container, { height: nextHeight }, informMutation);
|
|
43
40
|
updateOriginalContainerCache(container.id, nextHeight);
|
|
44
41
|
}
|
|
45
42
|
if (metrics.width > maxContainerWidth) {
|
|
46
43
|
const nextWidth = computeContainerDimensionForBoundText(metrics.width, container.type);
|
|
47
|
-
mutateElement(container, { width: nextWidth });
|
|
44
|
+
mutateElement(container, { width: nextWidth }, informMutation);
|
|
48
45
|
}
|
|
49
46
|
const updatedTextElement = {
|
|
50
47
|
...textElement,
|
|
@@ -54,7 +51,7 @@ export const redrawTextBoundingBox = (textElement, container, elementsMap) => {
|
|
|
54
51
|
boundTextUpdates.x = x;
|
|
55
52
|
boundTextUpdates.y = y;
|
|
56
53
|
}
|
|
57
|
-
mutateElement(textElement, boundTextUpdates);
|
|
54
|
+
mutateElement(textElement, boundTextUpdates, informMutation);
|
|
58
55
|
};
|
|
59
56
|
export const bindTextToShapeAfterDuplication = (newElements, oldElements, oldIdToDuplicatedId) => {
|
|
60
57
|
const newElementsMap = arrayToMap(newElements);
|
|
@@ -540,32 +537,6 @@ export const suppportsHorizontalAlign = (selectedElements, elementsMap) => {
|
|
|
540
537
|
return isTextElement(element);
|
|
541
538
|
});
|
|
542
539
|
};
|
|
543
|
-
export const getTextBindableContainerAtPosition = (elements, appState, x, y, elementsMap) => {
|
|
544
|
-
const selectedElements = getSelectedElements(elements, appState);
|
|
545
|
-
if (selectedElements.length === 1) {
|
|
546
|
-
return isTextBindableContainer(selectedElements[0], false)
|
|
547
|
-
? selectedElements[0]
|
|
548
|
-
: null;
|
|
549
|
-
}
|
|
550
|
-
let hitElement = null;
|
|
551
|
-
// We need to to hit testing from front (end of the array) to back (beginning of the array)
|
|
552
|
-
for (let index = elements.length - 1; index >= 0; --index) {
|
|
553
|
-
if (elements[index].isDeleted) {
|
|
554
|
-
continue;
|
|
555
|
-
}
|
|
556
|
-
const [x1, y1, x2, y2] = getElementAbsoluteCoords(elements[index], elementsMap);
|
|
557
|
-
if (isArrowElement(elements[index]) &&
|
|
558
|
-
isHittingElementNotConsideringBoundingBox(elements[index], appState, null, [x, y], elementsMap)) {
|
|
559
|
-
hitElement = elements[index];
|
|
560
|
-
break;
|
|
561
|
-
}
|
|
562
|
-
else if (x1 < x && x < x2 && y1 < y && y < y2) {
|
|
563
|
-
hitElement = elements[index];
|
|
564
|
-
break;
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
return isTextBindableContainer(hitElement, false) ? hitElement : null;
|
|
568
|
-
};
|
|
569
540
|
const VALID_CONTAINER_TYPES = new Set([
|
|
570
541
|
"rectangle",
|
|
571
542
|
"ellipse",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ExcalidrawElement, ExcalidrawTextElement } from "./types";
|
|
2
|
-
import App from "../components/App";
|
|
1
|
+
import type { ExcalidrawElement, ExcalidrawTextElement } from "./types";
|
|
2
|
+
import type App from "../components/App";
|
|
3
3
|
export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app, }: {
|
|
4
4
|
id: ExcalidrawElement["id"];
|
|
5
5
|
onChange?: ((text: string) => void) | undefined;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ElementsMap, ExcalidrawElement, NonDeletedExcalidrawElement, PointerType } from "./types";
|
|
2
|
-
import { Bounds } from "./bounds";
|
|
3
|
-
import { InteractiveCanvasAppState, Zoom } from "../types";
|
|
1
|
+
import type { ElementsMap, ExcalidrawElement, NonDeletedExcalidrawElement, PointerType } from "./types";
|
|
2
|
+
import type { Bounds } from "./bounds";
|
|
3
|
+
import type { Device, InteractiveCanvasAppState, Zoom } from "../types";
|
|
4
4
|
export type TransformHandleDirection = "n" | "s" | "w" | "e" | "nw" | "ne" | "sw" | "se";
|
|
5
5
|
export type TransformHandleType = TransformHandleDirection | "rotation";
|
|
6
6
|
export type TransformHandle = Bounds;
|
|
@@ -8,6 +8,12 @@ export type TransformHandles = Partial<{
|
|
|
8
8
|
[T in TransformHandleType]: TransformHandle;
|
|
9
9
|
}>;
|
|
10
10
|
export type MaybeTransformHandleType = TransformHandleType | false;
|
|
11
|
+
export declare const DEFAULT_OMIT_SIDES: {
|
|
12
|
+
e: boolean;
|
|
13
|
+
s: boolean;
|
|
14
|
+
n: boolean;
|
|
15
|
+
w: boolean;
|
|
16
|
+
};
|
|
11
17
|
export declare const OMIT_SIDES_FOR_MULTIPLE_ELEMENTS: {
|
|
12
18
|
e: boolean;
|
|
13
19
|
s: boolean;
|
|
@@ -21,16 +27,28 @@ export declare const OMIT_SIDES_FOR_FRAME: {
|
|
|
21
27
|
w: boolean;
|
|
22
28
|
rotation: boolean;
|
|
23
29
|
};
|
|
30
|
+
export declare const canResizeFromSides: (device: Device) => boolean;
|
|
31
|
+
export declare const getOmitSidesForDevice: (device: Device) => {};
|
|
24
32
|
export declare const getTransformHandlesFromCoords: ([x1, y1, x2, y2, cx, cy]: [number, number, number, number, number, number], angle: number, zoom: Zoom, pointerType: PointerType, omitSides?: {
|
|
25
33
|
s?: boolean | undefined;
|
|
26
|
-
n?: boolean | undefined;
|
|
27
|
-
w?: boolean | undefined;
|
|
28
34
|
e?: boolean | undefined;
|
|
35
|
+
w?: boolean | undefined;
|
|
36
|
+
n?: boolean | undefined;
|
|
29
37
|
nw?: boolean | undefined;
|
|
30
38
|
ne?: boolean | undefined;
|
|
31
39
|
sw?: boolean | undefined;
|
|
32
40
|
se?: boolean | undefined;
|
|
33
41
|
rotation?: boolean | undefined;
|
|
34
42
|
}, margin?: number) => TransformHandles;
|
|
35
|
-
export declare const getTransformHandles: (element: ExcalidrawElement, zoom: Zoom, elementsMap: ElementsMap, pointerType?: PointerType
|
|
43
|
+
export declare const getTransformHandles: (element: ExcalidrawElement, zoom: Zoom, elementsMap: ElementsMap, pointerType?: PointerType, omitSides?: {
|
|
44
|
+
s?: boolean | undefined;
|
|
45
|
+
e?: boolean | undefined;
|
|
46
|
+
w?: boolean | undefined;
|
|
47
|
+
n?: boolean | undefined;
|
|
48
|
+
nw?: boolean | undefined;
|
|
49
|
+
ne?: boolean | undefined;
|
|
50
|
+
sw?: boolean | undefined;
|
|
51
|
+
se?: boolean | undefined;
|
|
52
|
+
rotation?: boolean | undefined;
|
|
53
|
+
}) => TransformHandles;
|
|
36
54
|
export declare const shouldShowBoundingBox: (elements: readonly NonDeletedExcalidrawElement[], appState: InteractiveCanvasAppState) => boolean;
|