@excalidraw/excalidraw 0.17.1-d9bbf1e → 0.17.1-e63dd02
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 +4 -0
- package/dist/browser/dev/excalidraw-assets-dev/CascadiaCode-Regular-TMZI7IJ5.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-XOM7LNOU.js → chunk-IT7T3AIK.js} +49 -8
- package/dist/browser/dev/excalidraw-assets-dev/chunk-IT7T3AIK.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-BLEB3M62.js → chunk-RNHSD5AR.js} +7668 -2142
- package/dist/browser/dev/excalidraw-assets-dev/chunk-RNHSD5AR.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{dist-ITJNUBZF.js → dist-DNSPZDOZ.js} +66 -32
- package/dist/browser/dev/excalidraw-assets-dev/dist-DNSPZDOZ.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{en-TR4QLF5E.js → en-XV7OZCPP.js} +8 -2
- package/dist/browser/dev/excalidraw-assets-dev/{image-ZGDDRBEN.js → image-77HZYGLG.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{image-O66MQ7WQ.css → image-WDHYGKKP.css} +1 -1
- package/dist/browser/dev/excalidraw-assets-dev/{image-O66MQ7WQ.css.map → image-WDHYGKKP.css.map} +2 -2
- package/dist/browser/dev/index.css +610 -180
- package/dist/browser/dev/index.css.map +3 -3
- package/dist/browser/dev/index.js +13306 -8006
- package/dist/browser/dev/index.js.map +4 -4
- package/dist/browser/prod/excalidraw-assets/CascadiaCode-Regular-TMZI7IJ5.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/chunk-OYEADJSR.js +63 -0
- package/dist/browser/prod/excalidraw-assets/{chunk-5SYIAZGL.js → chunk-PDYFZJMS.js} +5 -5
- package/dist/browser/prod/excalidraw-assets/dist-NLUQPPQQ.js +7 -0
- package/dist/browser/prod/excalidraw-assets/en-YVAVVILW.js +1 -0
- package/dist/browser/prod/excalidraw-assets/image-X3GFZHNN.js +1 -0
- package/dist/browser/prod/index.css +1 -1
- package/dist/browser/prod/index.js +70 -51
- package/dist/dev/CascadiaCode-Regular-TMZI7IJ5.woff2 +0 -0
- package/dist/dev/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
- package/dist/dev/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
- package/dist/dev/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
- package/dist/dev/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
- package/dist/dev/{en-XW4JO6VX.json → en-YNVBSAIL.json} +42 -7
- package/dist/dev/index.css +610 -180
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +22165 -16833
- package/dist/dev/index.js.map +4 -4
- package/dist/excalidraw/actions/actionAddToLibrary.d.ts +24 -9
- package/dist/excalidraw/actions/actionAlign.d.ts +8 -8
- package/dist/excalidraw/actions/actionBoundText.d.ts +20 -10
- package/dist/excalidraw/actions/actionBoundText.js +3 -1
- package/dist/excalidraw/actions/actionCanvas.d.ts +100 -40
- package/dist/excalidraw/actions/actionCanvas.js +1 -1
- package/dist/excalidraw/actions/actionClipboard.d.ts +62 -26
- package/dist/excalidraw/actions/actionDeleteSelected.d.ts +28 -12
- package/dist/excalidraw/actions/actionDeleteSelected.js +24 -5
- package/dist/excalidraw/actions/actionDistribute.d.ts +4 -4
- package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +3 -3
- package/dist/excalidraw/actions/actionDuplicateSelection.js +1 -2
- package/dist/excalidraw/actions/actionElementLock.d.ts +17 -7
- package/dist/excalidraw/actions/actionExport.d.ts +75 -30
- package/dist/excalidraw/actions/actionFinalize.d.ts +17 -7
- package/dist/excalidraw/actions/actionFinalize.js +2 -2
- package/dist/excalidraw/actions/actionFlip.d.ts +4 -4
- package/dist/excalidraw/actions/actionFlip.js +2 -2
- package/dist/excalidraw/actions/actionFrame.d.ts +338 -10
- package/dist/excalidraw/actions/actionGroup.d.ts +324 -4
- package/dist/excalidraw/actions/actionHistory.d.ts +3 -3
- package/dist/excalidraw/actions/actionHistory.js +8 -8
- package/dist/excalidraw/actions/actionLinearEditor.d.ts +12 -5
- package/dist/excalidraw/actions/actionLinearEditor.js +21 -5
- package/dist/excalidraw/actions/actionLink.d.ts +8 -3
- package/dist/excalidraw/actions/actionMenu.d.ts +24 -9
- package/dist/excalidraw/actions/actionNavigate.d.ts +17 -7
- package/dist/excalidraw/actions/actionProperties.d.ts +476 -82
- package/dist/excalidraw/actions/actionProperties.js +384 -59
- package/dist/excalidraw/actions/actionSelectAll.d.ts +9 -4
- package/dist/excalidraw/actions/actionStyles.d.ts +12 -4
- package/dist/excalidraw/actions/actionStyles.js +3 -2
- package/dist/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
- package/dist/excalidraw/actions/actionTextAutoResize.js +38 -0
- package/dist/excalidraw/actions/actionToggleGridMode.d.ts +9 -4
- package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +8 -3
- package/dist/excalidraw/actions/actionToggleStats.d.ts +9 -3
- package/dist/excalidraw/actions/actionToggleStats.js +4 -3
- package/dist/excalidraw/actions/actionToggleViewMode.d.ts +8 -3
- package/dist/excalidraw/actions/actionToggleZenMode.d.ts +8 -3
- package/dist/excalidraw/actions/actionZindex.d.ts +8 -4
- package/dist/excalidraw/actions/actionZindex.js +4 -0
- package/dist/excalidraw/actions/manager.d.ts +3 -3
- package/dist/excalidraw/actions/register.d.ts +1 -1
- package/dist/excalidraw/actions/shortcuts.d.ts +2 -2
- package/dist/excalidraw/actions/types.d.ts +6 -6
- package/dist/excalidraw/align.d.ts +1 -1
- package/dist/excalidraw/analytics.js +9 -7
- package/dist/excalidraw/animated-trail.d.ts +2 -2
- package/dist/excalidraw/appState.d.ts +6 -2
- package/dist/excalidraw/appState.js +14 -3
- package/dist/excalidraw/binaryheap.d.ts +12 -0
- package/dist/excalidraw/binaryheap.js +93 -0
- package/dist/excalidraw/change.d.ts +6 -5
- package/dist/excalidraw/change.js +20 -11
- package/dist/excalidraw/charts.d.ts +1 -1
- package/dist/excalidraw/charts.js +0 -10
- 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 +14 -9
- package/dist/excalidraw/components/App.d.ts +14 -17
- package/dist/excalidraw/components/App.js +356 -217
- package/dist/excalidraw/components/ButtonIcon.d.ts +15 -0
- package/dist/excalidraw/components/ButtonIcon.js +8 -0
- package/dist/excalidraw/components/ButtonIconSelect.js +2 -3
- package/dist/excalidraw/components/ButtonSeparator.d.ts +2 -0
- package/dist/excalidraw/components/ButtonSeparator.js +7 -0
- package/dist/excalidraw/components/CheckboxItem.js +1 -1
- package/dist/excalidraw/components/ColorPicker/ColorInput.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/ColorInput.js +1 -1
- package/dist/excalidraw/components/ColorPicker/ColorPicker.d.ts +4 -4
- package/dist/excalidraw/components/ColorPicker/ColorPicker.js +48 -80
- package/dist/excalidraw/components/ColorPicker/Picker.d.ts +3 -3
- package/dist/excalidraw/components/ColorPicker/Picker.js +1 -1
- package/dist/excalidraw/components/ColorPicker/PickerColorList.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/PickerHeading.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/ShadeList.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/TopPicks.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +2 -2
- package/dist/excalidraw/components/ColorPicker/colorPickerUtils.js +1 -1
- package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
- package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.js +1 -1
- package/dist/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -1
- package/dist/excalidraw/components/CommandPalette/CommandPalette.js +5 -5
- 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/DefaultSidebar.d.ts +2 -2
- package/dist/excalidraw/components/Dialog.js +1 -1
- package/dist/excalidraw/components/DialogActionButton.d.ts +1 -1
- package/dist/excalidraw/components/EyeDropper.d.ts +2 -2
- package/dist/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
- package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
- package/dist/excalidraw/components/FontPicker/FontPicker.d.ts +21 -0
- package/dist/excalidraw/components/FontPicker/FontPicker.js +49 -0
- package/dist/excalidraw/components/FontPicker/FontPickerList.d.ts +25 -0
- package/dist/excalidraw/components/FontPicker/FontPickerList.js +119 -0
- package/dist/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +7 -0
- package/dist/excalidraw/components/FontPicker/FontPickerTrigger.js +13 -0
- package/dist/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +14 -0
- package/dist/excalidraw/components/FontPicker/keyboardNavHandlers.js +38 -0
- package/dist/excalidraw/components/HelpDialog.js +2 -2
- package/dist/excalidraw/components/HintViewer.d.ts +1 -1
- package/dist/excalidraw/components/HintViewer.js +6 -3
- package/dist/excalidraw/components/IconPicker.js +2 -2
- package/dist/excalidraw/components/ImageExportDialog.d.ts +1 -1
- package/dist/excalidraw/components/InitializeApp.d.ts +2 -2
- package/dist/excalidraw/components/JSONExportDialog.d.ts +3 -3
- package/dist/excalidraw/components/LayerUI.d.ts +4 -4
- package/dist/excalidraw/components/LayerUI.js +10 -7
- package/dist/excalidraw/components/LibraryMenu.d.ts +2 -2
- package/dist/excalidraw/components/LibraryMenuBrowseButton.d.ts +1 -1
- package/dist/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
- package/dist/excalidraw/components/LibraryMenuHeaderContent.d.ts +2 -2
- package/dist/excalidraw/components/LibraryMenuItems.d.ts +1 -1
- package/dist/excalidraw/components/LibraryMenuSection.d.ts +5 -4
- package/dist/excalidraw/components/LibraryUnit.d.ts +2 -2
- package/dist/excalidraw/components/LoadingMessage.d.ts +1 -1
- package/dist/excalidraw/components/MagicSettings.js +2 -2
- package/dist/excalidraw/components/MobileMenu.d.ts +3 -3
- package/dist/excalidraw/components/MobileMenu.js +2 -6
- package/dist/excalidraw/components/Modal.d.ts +1 -1
- package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
- package/dist/excalidraw/components/PasteChartDialog.d.ts +1 -1
- package/dist/excalidraw/components/PasteChartDialog.js +1 -1
- package/dist/excalidraw/components/PropertiesPopover.d.ts +15 -0
- package/dist/excalidraw/components/PropertiesPopover.js +31 -0
- package/dist/excalidraw/components/PublishLibrary.d.ts +1 -1
- package/dist/excalidraw/components/QuickSearch.d.ts +9 -0
- package/dist/excalidraw/components/QuickSearch.js +8 -0
- package/dist/excalidraw/components/SVGLayer.d.ts +1 -1
- package/dist/excalidraw/components/ScrollableList.d.ts +9 -0
- package/dist/excalidraw/components/ScrollableList.js +8 -0
- package/dist/excalidraw/components/Sidebar/Sidebar.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/Stats/Angle.d.ts +12 -0
- package/dist/excalidraw/components/Stats/Angle.js +53 -0
- package/dist/excalidraw/components/Stats/Collapsible.d.ts +9 -0
- package/dist/excalidraw/components/Stats/Collapsible.js +12 -0
- package/dist/excalidraw/components/Stats/Dimension.d.ts +12 -0
- package/dist/excalidraw/components/Stats/Dimension.js +68 -0
- package/dist/excalidraw/components/Stats/DragInput.d.ts +32 -0
- package/dist/excalidraw/components/Stats/DragInput.js +174 -0
- package/dist/excalidraw/components/Stats/FontSize.d.ts +12 -0
- package/dist/excalidraw/components/Stats/FontSize.js +50 -0
- package/dist/excalidraw/components/Stats/MultiAngle.d.ts +12 -0
- package/dist/excalidraw/components/Stats/MultiAngle.js +66 -0
- package/dist/excalidraw/components/Stats/MultiDimension.d.ts +15 -0
- package/dist/excalidraw/components/Stats/MultiDimension.js +199 -0
- package/dist/excalidraw/components/Stats/MultiFontSize.d.ts +13 -0
- package/dist/excalidraw/components/Stats/MultiFontSize.js +72 -0
- package/dist/excalidraw/components/Stats/MultiPosition.d.ts +15 -0
- package/dist/excalidraw/components/Stats/MultiPosition.js +101 -0
- package/dist/excalidraw/components/Stats/Position.d.ts +13 -0
- package/dist/excalidraw/components/Stats/Position.js +40 -0
- package/dist/excalidraw/components/Stats/index.d.ts +16 -0
- package/dist/excalidraw/components/Stats/index.js +79 -0
- package/dist/excalidraw/components/Stats/utils.d.ts +26 -0
- package/dist/excalidraw/components/Stats/utils.js +162 -0
- package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialog.js +2 -2
- package/dist/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/common.d.ts +5 -5
- package/dist/excalidraw/components/TTDDialog/common.js +3 -7
- package/dist/excalidraw/components/TextField.d.ts +1 -1
- package/dist/excalidraw/components/Toast.d.ts +1 -1
- package/dist/excalidraw/components/ToolButton.d.ts +3 -2
- package/dist/excalidraw/components/Trans.d.ts +1 -1
- package/dist/excalidraw/components/UserList.d.ts +1 -1
- package/dist/excalidraw/components/UserList.js +22 -22
- package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +3 -2
- package/dist/excalidraw/components/canvases/InteractiveCanvas.js +4 -2
- package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +2 -2
- package/dist/excalidraw/components/canvases/StaticCanvas.js +3 -2
- package/dist/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +12 -3
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +24 -4
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.js +55 -14
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +2 -1
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItemContent.js +2 -2
- package/dist/excalidraw/components/dropdownMenu/common.d.ts +1 -1
- package/dist/excalidraw/components/dropdownMenu/common.js +3 -2
- package/dist/excalidraw/components/footer/Footer.d.ts +2 -2
- package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +2 -2
- package/dist/excalidraw/components/hyperlink/helpers.d.ts +3 -3
- package/dist/excalidraw/components/icons.d.ts +10 -2
- package/dist/excalidraw/components/icons.js +29 -6
- package/dist/excalidraw/components/main-menu/MainMenu.d.ts +12 -3
- package/dist/excalidraw/components/welcome-screen/WelcomeScreen.Center.js +2 -2
- package/dist/excalidraw/components/welcome-screen/WelcomeScreen.Hints.js +3 -3
- package/dist/excalidraw/constants.d.ts +24 -3
- package/dist/excalidraw/constants.js +28 -4
- 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/reconcile.d.ts +3 -3
- package/dist/excalidraw/data/reconcile.js +18 -1
- package/dist/excalidraw/data/resave.d.ts +2 -2
- package/dist/excalidraw/data/restore.d.ts +3 -3
- package/dist/excalidraw/data/restore.js +58 -9
- package/dist/excalidraw/data/transform.d.ts +3 -3
- package/dist/excalidraw/data/transform.js +8 -5
- package/dist/excalidraw/data/types.d.ts +3 -3
- package/dist/excalidraw/element/ElementCanvasButtons.d.ts +1 -1
- package/dist/excalidraw/element/binding.d.ts +29 -10
- package/dist/excalidraw/element/binding.js +303 -71
- package/dist/excalidraw/element/bounds.d.ts +3 -3
- package/dist/excalidraw/element/collision.d.ts +4 -4
- package/dist/excalidraw/element/collision.js +5 -2
- package/dist/excalidraw/element/containerCache.d.ts +1 -1
- package/dist/excalidraw/element/dragElements.d.ts +6 -6
- package/dist/excalidraw/element/dragElements.js +39 -5
- package/dist/excalidraw/element/embeddable.d.ts +11 -6
- package/dist/excalidraw/element/heading.d.ts +11 -0
- package/dist/excalidraw/element/heading.js +81 -0
- package/dist/excalidraw/element/image.d.ts +2 -2
- package/dist/excalidraw/element/index.d.ts +2 -2
- package/dist/excalidraw/element/index.js +1 -1
- package/dist/excalidraw/element/linearElementEditor.d.ts +27 -16
- package/dist/excalidraw/element/linearElementEditor.js +133 -56
- package/dist/excalidraw/element/mutateElement.d.ts +3 -3
- package/dist/excalidraw/element/mutateElement.js +5 -3
- package/dist/excalidraw/element/newElement.d.ts +12 -10
- package/dist/excalidraw/element/newElement.js +31 -16
- package/dist/excalidraw/element/resizeElements.d.ts +15 -6
- package/dist/excalidraw/element/resizeElements.js +122 -46
- package/dist/excalidraw/element/resizeTest.d.ts +4 -4
- package/dist/excalidraw/element/resizeTest.js +2 -4
- package/dist/excalidraw/element/routing.d.ts +13 -0
- package/dist/excalidraw/element/routing.js +641 -0
- package/dist/excalidraw/element/showSelectedShapeActions.d.ts +2 -2
- package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
- package/dist/excalidraw/element/sortElements.d.ts +1 -1
- package/dist/excalidraw/element/textElement.d.ts +6 -28
- package/dist/excalidraw/element/textElement.js +64 -112
- package/dist/excalidraw/element/textWysiwyg.d.ts +12 -6
- package/dist/excalidraw/element/textWysiwyg.js +75 -62
- package/dist/excalidraw/element/transformHandles.d.ts +3 -3
- package/dist/excalidraw/element/transformHandles.js +7 -12
- package/dist/excalidraw/element/typeChecks.d.ts +7 -4
- package/dist/excalidraw/element/typeChecks.js +17 -0
- package/dist/excalidraw/element/types.d.ts +22 -4
- package/dist/excalidraw/emitter.d.ts +1 -1
- package/dist/excalidraw/fonts/ExcalidrawFont.d.ts +21 -0
- package/dist/excalidraw/fonts/ExcalidrawFont.js +112 -0
- package/dist/excalidraw/fonts/index.d.ts +58 -0
- package/dist/excalidraw/fonts/index.js +240 -0
- package/dist/excalidraw/fonts/metadata.d.ts +36 -0
- package/dist/excalidraw/fonts/metadata.js +91 -0
- package/dist/excalidraw/fractionalIndex.d.ts +12 -5
- package/dist/excalidraw/fractionalIndex.js +40 -10
- package/dist/excalidraw/frame.d.ts +4 -4
- package/dist/excalidraw/frame.js +3 -3
- package/dist/excalidraw/gatransforms.d.ts +1 -1
- package/dist/excalidraw/gesture.d.ts +1 -1
- package/dist/excalidraw/groups.d.ts +4 -4
- package/dist/excalidraw/history.d.ts +8 -7
- package/dist/excalidraw/history.js +8 -8
- package/dist/excalidraw/hooks/useEmitter.d.ts +1 -1
- package/dist/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
- package/dist/excalidraw/i18n.d.ts +1 -1
- package/dist/excalidraw/index.d.ts +2 -2
- package/dist/excalidraw/index.js +3 -3
- package/dist/excalidraw/jotai.d.ts +1 -1
- package/dist/excalidraw/laser-trails.d.ts +3 -2
- package/dist/excalidraw/locales/en.json +42 -7
- package/dist/excalidraw/math.d.ts +47 -2
- package/dist/excalidraw/math.js +116 -0
- package/dist/excalidraw/mermaid.d.ts +2 -0
- package/dist/excalidraw/mermaid.js +29 -0
- package/dist/excalidraw/points.d.ts +1 -1
- package/dist/excalidraw/queue.d.ts +1 -1
- package/dist/excalidraw/renderer/helpers.d.ts +2 -2
- package/dist/excalidraw/renderer/interactiveScene.d.ts +2 -2
- package/dist/excalidraw/renderer/interactiveScene.js +64 -22
- package/dist/excalidraw/renderer/renderElement.d.ts +6 -4
- package/dist/excalidraw/renderer/renderElement.js +78 -58
- package/dist/excalidraw/renderer/renderSnaps.d.ts +1 -1
- package/dist/excalidraw/renderer/staticScene.d.ts +1 -1
- package/dist/excalidraw/renderer/staticSvgScene.d.ts +4 -4
- package/dist/excalidraw/renderer/staticSvgScene.js +2 -1
- package/dist/excalidraw/scene/Renderer.d.ts +4 -4
- package/dist/excalidraw/scene/Renderer.js +2 -3
- package/dist/excalidraw/scene/Scene.d.ts +16 -7
- package/dist/excalidraw/scene/Scene.js +26 -11
- package/dist/excalidraw/scene/Shape.d.ts +1 -1
- package/dist/excalidraw/scene/Shape.js +56 -5
- package/dist/excalidraw/scene/ShapeCache.d.ts +4 -4
- package/dist/excalidraw/scene/comparisons.d.ts +3 -2
- package/dist/excalidraw/scene/comparisons.js +1 -1
- package/dist/excalidraw/scene/export.d.ts +4 -3
- package/dist/excalidraw/scene/export.js +34 -36
- 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 +6 -8
- package/dist/excalidraw/scene/zoom.d.ts +1 -1
- package/dist/excalidraw/shapes.d.ts +8 -0
- package/dist/excalidraw/shapes.js +57 -0
- package/dist/excalidraw/snapping.d.ts +4 -4
- package/dist/excalidraw/snapping.js +2 -1
- package/dist/excalidraw/store.d.ts +34 -4
- package/dist/excalidraw/store.js +27 -0
- package/dist/excalidraw/types.d.ts +32 -21
- package/dist/excalidraw/utils.d.ts +15 -5
- package/dist/excalidraw/utils.js +22 -0
- package/dist/excalidraw/zindex.d.ts +2 -2
- package/dist/prod/CascadiaCode-Regular-TMZI7IJ5.woff2 +0 -0
- package/dist/prod/ComicShanns-Regular-6TOETDFT.woff2 +0 -0
- package/dist/prod/Excalifont-Regular-CPKEUDVM.woff2 +0 -0
- package/dist/prod/LiberationSans-Regular-ZQD73GJM.woff2 +0 -0
- package/dist/prod/Virgil-Regular-YHAB2VGJ.woff2 +0 -0
- package/dist/prod/{en-XW4JO6VX.json → en-YNVBSAIL.json} +42 -7
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +49 -53
- package/dist/utils/bbox.d.ts +2 -2
- package/dist/utils/collision.d.ts +1 -1
- package/dist/utils/export.d.ts +4 -3
- package/dist/utils/export.js +2 -1
- package/dist/utils/geometry/geometry.d.ts +3 -2
- package/dist/utils/geometry/geometry.js +5 -1
- package/dist/utils/geometry/shape.d.ts +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/withinBounds.d.ts +1 -1
- package/history.ts +13 -6
- package/package.json +2 -2
- package/dist/browser/dev/Cascadia-CYPE3OJC.woff2 +0 -0
- package/dist/browser/dev/Virgil-UZN6MUT6.woff2 +0 -0
- package/dist/browser/dev/excalidraw-assets-dev/chunk-BLEB3M62.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/chunk-XOM7LNOU.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/dist-ITJNUBZF.js.map +0 -7
- package/dist/browser/prod/Cascadia-CYPE3OJC.woff2 +0 -0
- package/dist/browser/prod/Virgil-UZN6MUT6.woff2 +0 -0
- package/dist/browser/prod/excalidraw-assets/chunk-UWBW5SR2.js +0 -55
- package/dist/browser/prod/excalidraw-assets/dist-54276HPL.js +0 -6
- package/dist/browser/prod/excalidraw-assets/en-7GPZE2Y2.js +0 -1
- package/dist/browser/prod/excalidraw-assets/image-35KQQ5EN.js +0 -1
- package/dist/dev/Cascadia-CYPE3OJC.woff2 +0 -0
- package/dist/dev/Virgil-UZN6MUT6.woff2 +0 -0
- package/dist/excalidraw/components/Stats.d.ts +0 -11
- package/dist/excalidraw/components/Stats.js +0 -13
- package/dist/excalidraw/scene/Fonts.d.ts +0 -21
- package/dist/excalidraw/scene/Fonts.js +0 -72
- package/dist/prod/Cascadia-CYPE3OJC.woff2 +0 -0
- package/dist/prod/Virgil-UZN6MUT6.woff2 +0 -0
- /package/dist/browser/dev/{Assistant-Bold-ZDZZ6JHA.woff2 → excalidraw-assets-dev/Assistant-Bold-ZDZZ6JHA.woff2} +0 -0
- /package/dist/browser/dev/{Assistant-Medium-DZ25RZU3.woff2 → excalidraw-assets-dev/Assistant-Medium-DZ25RZU3.woff2} +0 -0
- /package/dist/browser/dev/{Assistant-Regular-PLF2XOGW.woff2 → excalidraw-assets-dev/Assistant-Regular-PLF2XOGW.woff2} +0 -0
- /package/dist/browser/dev/{Assistant-SemiBold-CZ5MX6FK.woff2 → excalidraw-assets-dev/Assistant-SemiBold-CZ5MX6FK.woff2} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{en-TR4QLF5E.js.map → en-XV7OZCPP.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{image-ZGDDRBEN.js.map → image-77HZYGLG.js.map} +0 -0
- /package/dist/browser/prod/{Assistant-Bold-ZDZZ6JHA.woff2 → excalidraw-assets/Assistant-Bold-ZDZZ6JHA.woff2} +0 -0
- /package/dist/browser/prod/{Assistant-Medium-DZ25RZU3.woff2 → excalidraw-assets/Assistant-Medium-DZ25RZU3.woff2} +0 -0
- /package/dist/browser/prod/{Assistant-Regular-PLF2XOGW.woff2 → excalidraw-assets/Assistant-Regular-PLF2XOGW.woff2} +0 -0
- /package/dist/browser/prod/{Assistant-SemiBold-CZ5MX6FK.woff2 → excalidraw-assets/Assistant-SemiBold-CZ5MX6FK.woff2} +0 -0
|
@@ -4,11 +4,12 @@ import { getCurvePathOps, getElementPointsCoords, getMinMaxXYFromCurvePathOps, }
|
|
|
4
4
|
import { mutateElement } from "./mutateElement";
|
|
5
5
|
import { bindOrUnbindLinearElement, getHoveredElementForBinding, isBindingEnabled, } from "./binding";
|
|
6
6
|
import { tupleToCoors } from "../utils";
|
|
7
|
-
import { isBindingElement } from "./typeChecks";
|
|
7
|
+
import { isBindingElement, isElbowArrow, isFixedPointBinding, } from "./typeChecks";
|
|
8
8
|
import { KEYS, shouldRotateWithDiscreteAngle } from "../keys";
|
|
9
9
|
import { getBoundTextElement, handleBindTextResize } from "./textElement";
|
|
10
10
|
import { DRAGGING_THRESHOLD } from "../constants";
|
|
11
11
|
import { ShapeCache } from "../scene/ShapeCache";
|
|
12
|
+
import { mutateElbowArrow } from "./routing";
|
|
12
13
|
const editorMidPointsCache = { version: null, points: [], zoom: null };
|
|
13
14
|
export class LinearElementEditor {
|
|
14
15
|
elementId;
|
|
@@ -25,7 +26,9 @@ export class LinearElementEditor {
|
|
|
25
26
|
segmentMidPointHoveredCoords;
|
|
26
27
|
constructor(element) {
|
|
27
28
|
this.elementId = element.id;
|
|
28
|
-
|
|
29
|
+
if (!arePointsEqual(element.points[0], [0, 0])) {
|
|
30
|
+
console.error("Linear element is not normalized", Error().stack);
|
|
31
|
+
}
|
|
29
32
|
this.selectedPointsIndices = null;
|
|
30
33
|
this.lastUncommittedPoint = null;
|
|
31
34
|
this.isDragging = false;
|
|
@@ -35,6 +38,7 @@ export class LinearElementEditor {
|
|
|
35
38
|
this.pointerDownState = {
|
|
36
39
|
prevSelectedPointsIndices: null,
|
|
37
40
|
lastClickedPoint: -1,
|
|
41
|
+
lastClickedIsEndPoint: false,
|
|
38
42
|
origin: null,
|
|
39
43
|
segmentMidpoint: {
|
|
40
44
|
value: null,
|
|
@@ -73,7 +77,8 @@ export class LinearElementEditor {
|
|
|
73
77
|
}
|
|
74
78
|
const [selectionX1, selectionY1, selectionX2, selectionY2] = getElementAbsoluteCoords(appState.draggingElement, elementsMap);
|
|
75
79
|
const pointsSceneCoords = LinearElementEditor.getPointsGlobalCoordinates(element, elementsMap);
|
|
76
|
-
const nextSelectedPoints = pointsSceneCoords
|
|
80
|
+
const nextSelectedPoints = pointsSceneCoords
|
|
81
|
+
.reduce((acc, point, index) => {
|
|
77
82
|
if ((point[0] >= selectionX1 &&
|
|
78
83
|
point[0] <= selectionX2 &&
|
|
79
84
|
point[1] >= selectionY1 &&
|
|
@@ -82,7 +87,15 @@ export class LinearElementEditor {
|
|
|
82
87
|
acc.push(index);
|
|
83
88
|
}
|
|
84
89
|
return acc;
|
|
85
|
-
}, [])
|
|
90
|
+
}, [])
|
|
91
|
+
.filter((index) => {
|
|
92
|
+
if (isElbowArrow(element) &&
|
|
93
|
+
index !== 0 &&
|
|
94
|
+
index !== element.points.length - 1) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
});
|
|
86
99
|
setState({
|
|
87
100
|
editingLinearElement: {
|
|
88
101
|
...editingLinearElement,
|
|
@@ -93,17 +106,35 @@ export class LinearElementEditor {
|
|
|
93
106
|
});
|
|
94
107
|
}
|
|
95
108
|
/** @returns whether point was dragged */
|
|
96
|
-
static handlePointDragging(event, appState, scenePointerX, scenePointerY, maybeSuggestBinding, linearElementEditor,
|
|
109
|
+
static handlePointDragging(event, appState, scenePointerX, scenePointerY, maybeSuggestBinding, linearElementEditor, scene) {
|
|
97
110
|
if (!linearElementEditor) {
|
|
98
111
|
return false;
|
|
99
112
|
}
|
|
100
|
-
const {
|
|
113
|
+
const { elementId } = linearElementEditor;
|
|
114
|
+
const elementsMap = scene.getNonDeletedElementsMap();
|
|
101
115
|
const element = LinearElementEditor.getElement(elementId, elementsMap);
|
|
102
116
|
if (!element) {
|
|
103
117
|
return false;
|
|
104
118
|
}
|
|
119
|
+
if (isElbowArrow(element) &&
|
|
120
|
+
!linearElementEditor.pointerDownState.lastClickedIsEndPoint &&
|
|
121
|
+
linearElementEditor.pointerDownState.lastClickedPoint !== 0) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
const selectedPointsIndices = isElbowArrow(element)
|
|
125
|
+
? linearElementEditor.selectedPointsIndices
|
|
126
|
+
?.reduce((startEnd, index) => (index === 0
|
|
127
|
+
? [0, startEnd[1]]
|
|
128
|
+
: [startEnd[0], element.points.length - 1]), [false, false])
|
|
129
|
+
.filter((idx) => typeof idx === "number")
|
|
130
|
+
: linearElementEditor.selectedPointsIndices;
|
|
131
|
+
const lastClickedPoint = isElbowArrow(element)
|
|
132
|
+
? linearElementEditor.pointerDownState.lastClickedPoint > 0
|
|
133
|
+
? element.points.length - 1
|
|
134
|
+
: 0
|
|
135
|
+
: linearElementEditor.pointerDownState.lastClickedPoint;
|
|
105
136
|
// point that's being dragged (out of all selected points)
|
|
106
|
-
const draggingPoint = element.points[
|
|
137
|
+
const draggingPoint = element.points[lastClickedPoint];
|
|
107
138
|
if (selectedPointsIndices && draggingPoint) {
|
|
108
139
|
if (shouldRotateWithDiscreteAngle(event) &&
|
|
109
140
|
selectedPointsIndices.length === 1 &&
|
|
@@ -115,18 +146,16 @@ export class LinearElementEditor {
|
|
|
115
146
|
{
|
|
116
147
|
index: selectedIndex,
|
|
117
148
|
point: [width + referencePoint[0], height + referencePoint[1]],
|
|
118
|
-
isDragging: selectedIndex ===
|
|
119
|
-
linearElementEditor.pointerDownState.lastClickedPoint,
|
|
149
|
+
isDragging: selectedIndex === lastClickedPoint,
|
|
120
150
|
},
|
|
121
|
-
]);
|
|
151
|
+
], scene);
|
|
122
152
|
}
|
|
123
153
|
else {
|
|
124
154
|
const newDraggingPointPosition = LinearElementEditor.createPointAt(element, elementsMap, scenePointerX - linearElementEditor.pointerOffset.x, scenePointerY - linearElementEditor.pointerOffset.y, event[KEYS.CTRL_OR_CMD] ? null : appState.gridSize);
|
|
125
155
|
const deltaX = newDraggingPointPosition[0] - draggingPoint[0];
|
|
126
156
|
const deltaY = newDraggingPointPosition[1] - draggingPoint[1];
|
|
127
157
|
LinearElementEditor.movePoints(element, selectedPointsIndices.map((pointIndex) => {
|
|
128
|
-
const newPointPosition = pointIndex ===
|
|
129
|
-
linearElementEditor.pointerDownState.lastClickedPoint
|
|
158
|
+
const newPointPosition = pointIndex === lastClickedPoint
|
|
130
159
|
? LinearElementEditor.createPointAt(element, elementsMap, scenePointerX - linearElementEditor.pointerOffset.x, scenePointerY - linearElementEditor.pointerOffset.y, event[KEYS.CTRL_OR_CMD] ? null : appState.gridSize)
|
|
131
160
|
: [
|
|
132
161
|
element.points[pointIndex][0] + deltaX,
|
|
@@ -135,10 +164,9 @@ export class LinearElementEditor {
|
|
|
135
164
|
return {
|
|
136
165
|
index: pointIndex,
|
|
137
166
|
point: newPointPosition,
|
|
138
|
-
isDragging: pointIndex ===
|
|
139
|
-
linearElementEditor.pointerDownState.lastClickedPoint,
|
|
167
|
+
isDragging: pointIndex === lastClickedPoint,
|
|
140
168
|
};
|
|
141
|
-
}));
|
|
169
|
+
}), scene);
|
|
142
170
|
}
|
|
143
171
|
const boundTextElement = getBoundTextElement(element, elementsMap);
|
|
144
172
|
if (boundTextElement) {
|
|
@@ -163,8 +191,9 @@ export class LinearElementEditor {
|
|
|
163
191
|
}
|
|
164
192
|
return false;
|
|
165
193
|
}
|
|
166
|
-
static handlePointerUp(event, editingLinearElement, appState,
|
|
167
|
-
const elementsMap =
|
|
194
|
+
static handlePointerUp(event, editingLinearElement, appState, scene) {
|
|
195
|
+
const elementsMap = scene.getNonDeletedElementsMap();
|
|
196
|
+
const elements = scene.getNonDeletedElements();
|
|
168
197
|
const { elementId, selectedPointsIndices, isDragging, pointerDownState } = editingLinearElement;
|
|
169
198
|
const element = LinearElementEditor.getElement(elementId, elementsMap);
|
|
170
199
|
if (!element) {
|
|
@@ -183,10 +212,10 @@ export class LinearElementEditor {
|
|
|
183
212
|
? element.points[element.points.length - 1]
|
|
184
213
|
: element.points[0],
|
|
185
214
|
},
|
|
186
|
-
]);
|
|
215
|
+
], scene);
|
|
187
216
|
}
|
|
188
217
|
const bindingElement = isBindingEnabled(appState)
|
|
189
|
-
? getHoveredElementForBinding(tupleToCoors(LinearElementEditor.getPointAtIndexGlobalCoordinates(element, selectedPoint, elementsMap)),
|
|
218
|
+
? getHoveredElementForBinding(tupleToCoors(LinearElementEditor.getPointAtIndexGlobalCoordinates(element, selectedPoint, elementsMap)), elements, elementsMap)
|
|
190
219
|
: null;
|
|
191
220
|
bindings[selectedPoint === 0 ? "startBindingElement" : "endBindingElement"] = bindingElement;
|
|
192
221
|
}
|
|
@@ -314,8 +343,9 @@ export class LinearElementEditor {
|
|
|
314
343
|
}
|
|
315
344
|
return -1;
|
|
316
345
|
}
|
|
317
|
-
static handlePointerDown(event, appState, store, scenePointer, linearElementEditor,
|
|
318
|
-
const elementsMap =
|
|
346
|
+
static handlePointerDown(event, appState, store, scenePointer, linearElementEditor, scene) {
|
|
347
|
+
const elementsMap = scene.getNonDeletedElementsMap();
|
|
348
|
+
const elements = scene.getNonDeletedElements();
|
|
319
349
|
const ret = {
|
|
320
350
|
didAddPoint: false,
|
|
321
351
|
hitElement: null,
|
|
@@ -335,7 +365,8 @@ export class LinearElementEditor {
|
|
|
335
365
|
segmentMidpointIndex = LinearElementEditor.getSegmentMidPointIndex(linearElementEditor, appState, segmentMidpoint, elementsMap);
|
|
336
366
|
}
|
|
337
367
|
if (event.altKey && appState.editingLinearElement) {
|
|
338
|
-
if (linearElementEditor.lastUncommittedPoint == null
|
|
368
|
+
if (linearElementEditor.lastUncommittedPoint == null ||
|
|
369
|
+
!isElbowArrow(element)) {
|
|
339
370
|
mutateElement(element, {
|
|
340
371
|
points: [
|
|
341
372
|
...element.points,
|
|
@@ -350,6 +381,7 @@ export class LinearElementEditor {
|
|
|
350
381
|
pointerDownState: {
|
|
351
382
|
prevSelectedPointsIndices: linearElementEditor.selectedPointsIndices,
|
|
352
383
|
lastClickedPoint: -1,
|
|
384
|
+
lastClickedIsEndPoint: false,
|
|
353
385
|
origin: { x: scenePointer.x, y: scenePointer.y },
|
|
354
386
|
segmentMidpoint: {
|
|
355
387
|
value: segmentMidpoint,
|
|
@@ -359,7 +391,7 @@ export class LinearElementEditor {
|
|
|
359
391
|
},
|
|
360
392
|
selectedPointsIndices: [element.points.length - 1],
|
|
361
393
|
lastUncommittedPoint: null,
|
|
362
|
-
endBindingElement: getHoveredElementForBinding(scenePointer,
|
|
394
|
+
endBindingElement: getHoveredElementForBinding(scenePointer, elements, elementsMap),
|
|
363
395
|
};
|
|
364
396
|
ret.didAddPoint = true;
|
|
365
397
|
return ret;
|
|
@@ -378,7 +410,7 @@ export class LinearElementEditor {
|
|
|
378
410
|
// the point).
|
|
379
411
|
const { startBindingElement, endBindingElement } = linearElementEditor;
|
|
380
412
|
if (isBindingEnabled(appState) && isBindingElement(element)) {
|
|
381
|
-
bindOrUnbindLinearElement(element, startBindingElement, endBindingElement, elementsMap);
|
|
413
|
+
bindOrUnbindLinearElement(element, startBindingElement, endBindingElement, elementsMap, scene);
|
|
382
414
|
}
|
|
383
415
|
}
|
|
384
416
|
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
|
|
@@ -400,6 +432,7 @@ export class LinearElementEditor {
|
|
|
400
432
|
pointerDownState: {
|
|
401
433
|
prevSelectedPointsIndices: linearElementEditor.selectedPointsIndices,
|
|
402
434
|
lastClickedPoint: clickedPointIndex,
|
|
435
|
+
lastClickedIsEndPoint: clickedPointIndex === element.points.length - 1,
|
|
403
436
|
origin: { x: scenePointer.x, y: scenePointer.y },
|
|
404
437
|
segmentMidpoint: {
|
|
405
438
|
value: segmentMidpoint,
|
|
@@ -426,11 +459,12 @@ export class LinearElementEditor {
|
|
|
426
459
|
}
|
|
427
460
|
return arePointsEqual(point1, point2);
|
|
428
461
|
}
|
|
429
|
-
static handlePointerMove(event, scenePointerX, scenePointerY, appState,
|
|
462
|
+
static handlePointerMove(event, scenePointerX, scenePointerY, appState, scene) {
|
|
430
463
|
if (!appState.editingLinearElement) {
|
|
431
464
|
return null;
|
|
432
465
|
}
|
|
433
466
|
const { elementId, lastUncommittedPoint } = appState.editingLinearElement;
|
|
467
|
+
const elementsMap = scene.getNonDeletedElementsMap();
|
|
434
468
|
const element = LinearElementEditor.getElement(elementId, elementsMap);
|
|
435
469
|
if (!element) {
|
|
436
470
|
return appState.editingLinearElement;
|
|
@@ -439,7 +473,7 @@ export class LinearElementEditor {
|
|
|
439
473
|
const lastPoint = points[points.length - 1];
|
|
440
474
|
if (!event.altKey) {
|
|
441
475
|
if (lastPoint === lastUncommittedPoint) {
|
|
442
|
-
LinearElementEditor.deletePoints(element, [points.length - 1]);
|
|
476
|
+
LinearElementEditor.deletePoints(element, [points.length - 1], scene);
|
|
443
477
|
}
|
|
444
478
|
return {
|
|
445
479
|
...appState.editingLinearElement,
|
|
@@ -456,7 +490,9 @@ export class LinearElementEditor {
|
|
|
456
490
|
];
|
|
457
491
|
}
|
|
458
492
|
else {
|
|
459
|
-
newPoint = LinearElementEditor.createPointAt(element, elementsMap, scenePointerX - appState.editingLinearElement.pointerOffset.x, scenePointerY - appState.editingLinearElement.pointerOffset.y, event[KEYS.CTRL_OR_CMD]
|
|
493
|
+
newPoint = LinearElementEditor.createPointAt(element, elementsMap, scenePointerX - appState.editingLinearElement.pointerOffset.x, scenePointerY - appState.editingLinearElement.pointerOffset.y, event[KEYS.CTRL_OR_CMD] || isElbowArrow(element)
|
|
494
|
+
? null
|
|
495
|
+
: appState.gridSize);
|
|
460
496
|
}
|
|
461
497
|
if (lastPoint === lastUncommittedPoint) {
|
|
462
498
|
LinearElementEditor.movePoints(element, [
|
|
@@ -464,10 +500,10 @@ export class LinearElementEditor {
|
|
|
464
500
|
index: element.points.length - 1,
|
|
465
501
|
point: newPoint,
|
|
466
502
|
},
|
|
467
|
-
]);
|
|
503
|
+
], scene);
|
|
468
504
|
}
|
|
469
505
|
else {
|
|
470
|
-
LinearElementEditor.addPoints(element, appState, [{ point: newPoint }]);
|
|
506
|
+
LinearElementEditor.addPoints(element, appState, [{ point: newPoint }], scene);
|
|
471
507
|
}
|
|
472
508
|
return {
|
|
473
509
|
...appState.editingLinearElement,
|
|
@@ -509,6 +545,10 @@ export class LinearElementEditor {
|
|
|
509
545
|
: rotate(x, y, cx, cy, element.angle);
|
|
510
546
|
}
|
|
511
547
|
static pointFromAbsoluteCoords(element, absoluteCoords, elementsMap) {
|
|
548
|
+
if (isElbowArrow(element)) {
|
|
549
|
+
// No rotation for elbow arrows
|
|
550
|
+
return [absoluteCoords[0] - element.x, absoluteCoords[1] - element.y];
|
|
551
|
+
}
|
|
512
552
|
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
|
|
513
553
|
const cx = (x1 + x2) / 2;
|
|
514
554
|
const cy = (y1 + y2) / 2;
|
|
@@ -561,11 +601,12 @@ export class LinearElementEditor {
|
|
|
561
601
|
static normalizePoints(element) {
|
|
562
602
|
mutateElement(element, LinearElementEditor.getNormalizedPoints(element));
|
|
563
603
|
}
|
|
564
|
-
static duplicateSelectedPoints(appState,
|
|
604
|
+
static duplicateSelectedPoints(appState, scene) {
|
|
565
605
|
if (!appState.editingLinearElement) {
|
|
566
606
|
return false;
|
|
567
607
|
}
|
|
568
608
|
const { selectedPointsIndices, elementId } = appState.editingLinearElement;
|
|
609
|
+
const elementsMap = scene.getNonDeletedElementsMap();
|
|
569
610
|
const element = LinearElementEditor.getElement(elementId, elementsMap);
|
|
570
611
|
if (!element || selectedPointsIndices === null) {
|
|
571
612
|
return false;
|
|
@@ -601,7 +642,7 @@ export class LinearElementEditor {
|
|
|
601
642
|
index: element.points.length - 1,
|
|
602
643
|
point: [lastPoint[0] + 30, lastPoint[1] + 30],
|
|
603
644
|
},
|
|
604
|
-
]);
|
|
645
|
+
], scene);
|
|
605
646
|
}
|
|
606
647
|
return {
|
|
607
648
|
appState: {
|
|
@@ -613,7 +654,7 @@ export class LinearElementEditor {
|
|
|
613
654
|
},
|
|
614
655
|
};
|
|
615
656
|
}
|
|
616
|
-
static deletePoints(element, pointIndices) {
|
|
657
|
+
static deletePoints(element, pointIndices, scene) {
|
|
617
658
|
let offsetX = 0;
|
|
618
659
|
let offsetY = 0;
|
|
619
660
|
const isDeletingOriginPoint = pointIndices.includes(0);
|
|
@@ -634,15 +675,15 @@ export class LinearElementEditor {
|
|
|
634
675
|
}
|
|
635
676
|
return acc;
|
|
636
677
|
}, []);
|
|
637
|
-
LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY);
|
|
678
|
+
LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY, scene);
|
|
638
679
|
}
|
|
639
|
-
static addPoints(element, appState, targetPoints) {
|
|
680
|
+
static addPoints(element, appState, targetPoints, scene) {
|
|
640
681
|
const offsetX = 0;
|
|
641
682
|
const offsetY = 0;
|
|
642
683
|
const nextPoints = [...element.points, ...targetPoints.map((x) => x.point)];
|
|
643
|
-
LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY);
|
|
684
|
+
LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY, scene);
|
|
644
685
|
}
|
|
645
|
-
static movePoints(element, targetPoints, otherUpdates) {
|
|
686
|
+
static movePoints(element, targetPoints, scene, otherUpdates, options) {
|
|
646
687
|
const { points } = element;
|
|
647
688
|
// in case we're moving start point, instead of modifying its position
|
|
648
689
|
// which would break the invariant of it being at [0,0], we move
|
|
@@ -661,21 +702,31 @@ export class LinearElementEditor {
|
|
|
661
702
|
const nextPoints = points.map((point, idx) => {
|
|
662
703
|
const selectedPointData = targetPoints.find((p) => p.index === idx);
|
|
663
704
|
if (selectedPointData) {
|
|
664
|
-
if (
|
|
705
|
+
if (selectedPointData.index === 0) {
|
|
665
706
|
return point;
|
|
666
707
|
}
|
|
667
708
|
const deltaX = selectedPointData.point[0] - points[selectedPointData.index][0];
|
|
668
709
|
const deltaY = selectedPointData.point[1] - points[selectedPointData.index][1];
|
|
669
|
-
return [
|
|
710
|
+
return [
|
|
711
|
+
point[0] + deltaX - offsetX,
|
|
712
|
+
point[1] + deltaY - offsetY,
|
|
713
|
+
];
|
|
670
714
|
}
|
|
671
715
|
return offsetX || offsetY
|
|
672
716
|
? [point[0] - offsetX, point[1] - offsetY]
|
|
673
717
|
: point;
|
|
674
718
|
});
|
|
675
|
-
LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY, otherUpdates
|
|
719
|
+
LinearElementEditor._updatePoints(element, nextPoints, offsetX, offsetY, scene, otherUpdates, {
|
|
720
|
+
isDragging: targetPoints.reduce((dragging, targetPoint) => dragging || targetPoint.isDragging === true, false),
|
|
721
|
+
changedElements: options?.changedElements,
|
|
722
|
+
});
|
|
676
723
|
}
|
|
677
724
|
static shouldAddMidpoint(linearElementEditor, pointerCoords, appState, elementsMap) {
|
|
678
725
|
const element = LinearElementEditor.getElement(linearElementEditor.elementId, elementsMap);
|
|
726
|
+
// Elbow arrows don't allow midpoints
|
|
727
|
+
if (element && isElbowArrow(element)) {
|
|
728
|
+
return false;
|
|
729
|
+
}
|
|
679
730
|
if (!element) {
|
|
680
731
|
return false;
|
|
681
732
|
}
|
|
@@ -704,7 +755,7 @@ export class LinearElementEditor {
|
|
|
704
755
|
pointerDownState: linearElementEditor.pointerDownState,
|
|
705
756
|
selectedPointsIndices: linearElementEditor.selectedPointsIndices,
|
|
706
757
|
};
|
|
707
|
-
const midpoint = LinearElementEditor.createPointAt(element, elementsMap, pointerCoords.x, pointerCoords.y, snapToGrid ? appState.gridSize : null);
|
|
758
|
+
const midpoint = LinearElementEditor.createPointAt(element, elementsMap, pointerCoords.x, pointerCoords.y, snapToGrid && !isElbowArrow(element) ? appState.gridSize : null);
|
|
708
759
|
const points = [
|
|
709
760
|
...element.points.slice(0, segmentMidpoint.index),
|
|
710
761
|
midpoint,
|
|
@@ -724,25 +775,51 @@ export class LinearElementEditor {
|
|
|
724
775
|
ret.selectedPointsIndices = [segmentMidpoint.index];
|
|
725
776
|
return ret;
|
|
726
777
|
}
|
|
727
|
-
static _updatePoints(element, nextPoints, offsetX, offsetY, otherUpdates) {
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
778
|
+
static _updatePoints(element, nextPoints, offsetX, offsetY, scene, otherUpdates, options) {
|
|
779
|
+
if (isElbowArrow(element)) {
|
|
780
|
+
const bindings = {};
|
|
781
|
+
if (otherUpdates?.startBinding !== undefined) {
|
|
782
|
+
bindings.startBinding =
|
|
783
|
+
otherUpdates.startBinding !== null &&
|
|
784
|
+
isFixedPointBinding(otherUpdates.startBinding)
|
|
785
|
+
? otherUpdates.startBinding
|
|
786
|
+
: null;
|
|
787
|
+
}
|
|
788
|
+
if (otherUpdates?.endBinding !== undefined) {
|
|
789
|
+
bindings.endBinding =
|
|
790
|
+
otherUpdates.endBinding !== null &&
|
|
791
|
+
isFixedPointBinding(otherUpdates.endBinding)
|
|
792
|
+
? otherUpdates.endBinding
|
|
793
|
+
: null;
|
|
794
|
+
}
|
|
795
|
+
mutateElbowArrow(element, scene, nextPoints, [offsetX, offsetY], bindings, options);
|
|
796
|
+
}
|
|
797
|
+
else {
|
|
798
|
+
const nextCoords = getElementPointsCoords(element, nextPoints);
|
|
799
|
+
const prevCoords = getElementPointsCoords(element, element.points);
|
|
800
|
+
const nextCenterX = (nextCoords[0] + nextCoords[2]) / 2;
|
|
801
|
+
const nextCenterY = (nextCoords[1] + nextCoords[3]) / 2;
|
|
802
|
+
const prevCenterX = (prevCoords[0] + prevCoords[2]) / 2;
|
|
803
|
+
const prevCenterY = (prevCoords[1] + prevCoords[3]) / 2;
|
|
804
|
+
const dX = prevCenterX - nextCenterX;
|
|
805
|
+
const dY = prevCenterY - nextCenterY;
|
|
806
|
+
const rotated = rotate(offsetX, offsetY, dX, dY, element.angle);
|
|
807
|
+
mutateElement(element, {
|
|
808
|
+
...otherUpdates,
|
|
809
|
+
points: nextPoints,
|
|
810
|
+
x: element.x + rotated[0],
|
|
811
|
+
y: element.y + rotated[1],
|
|
812
|
+
});
|
|
813
|
+
}
|
|
743
814
|
}
|
|
744
815
|
static _getShiftLockedDelta(element, elementsMap, referencePoint, scenePointer, gridSize) {
|
|
745
816
|
const referencePointCoords = LinearElementEditor.getPointGlobalCoordinates(element, referencePoint, elementsMap);
|
|
817
|
+
if (isElbowArrow(element)) {
|
|
818
|
+
return [
|
|
819
|
+
scenePointer[0] - referencePointCoords[0],
|
|
820
|
+
scenePointer[1] - referencePointCoords[1],
|
|
821
|
+
];
|
|
822
|
+
}
|
|
746
823
|
const [gridX, gridY] = getGridPoint(scenePointer[0], scenePointer[1], gridSize);
|
|
747
824
|
const { width, height } = getLockedLinearCursorAlignSize(referencePointCoords[0], referencePointCoords[1], gridX, gridY);
|
|
748
825
|
return rotatePoint([width, height], [0, 0], -element.angle);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { ExcalidrawElement } from "./types";
|
|
2
|
-
import { Mutable } from "../utility-types";
|
|
1
|
+
import type { ExcalidrawElement } from "./types";
|
|
2
|
+
import type { Mutable } from "../utility-types";
|
|
3
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
|
*
|
|
@@ -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,6 +1,6 @@
|
|
|
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";
|
|
1
|
+
import type { ExcalidrawElement, ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, GroupId, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap, ExcalidrawArrowElement } from "./types";
|
|
2
|
+
import type { AppState } from "../types";
|
|
3
|
+
import type { MarkOptional, Mutable } from "../utility-types";
|
|
4
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"];
|
|
@@ -19,6 +19,7 @@ export declare const newMagicFrameElement: (opts: {
|
|
|
19
19
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawMagicFrameElement>;
|
|
20
20
|
export declare const newTextElement: (opts: {
|
|
21
21
|
text: string;
|
|
22
|
+
originalText?: string;
|
|
22
23
|
fontSize?: number;
|
|
23
24
|
fontFamily?: FontFamilyValues;
|
|
24
25
|
textAlign?: TextAlign;
|
|
@@ -26,6 +27,7 @@ export declare const newTextElement: (opts: {
|
|
|
26
27
|
containerId?: ExcalidrawTextContainer["id"] | null;
|
|
27
28
|
lineHeight?: ExcalidrawTextElement["lineHeight"];
|
|
28
29
|
strokeWidth?: ExcalidrawTextElement["strokeWidth"];
|
|
30
|
+
autoResize?: ExcalidrawTextElement["autoResize"];
|
|
29
31
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawTextElement>;
|
|
30
32
|
export declare const refreshTextDimensions: (textElement: ExcalidrawTextElement, container: ExcalidrawTextContainer | null, elementsMap: ElementsMap, text?: string) => {
|
|
31
33
|
x: number;
|
|
@@ -34,11 +36,6 @@ export declare const refreshTextDimensions: (textElement: ExcalidrawTextElement,
|
|
|
34
36
|
height: number;
|
|
35
37
|
text: string;
|
|
36
38
|
} | 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
39
|
export declare const newFreeDrawElement: (opts: {
|
|
43
40
|
type: "freedraw";
|
|
44
41
|
points?: ExcalidrawFreeDrawElement["points"];
|
|
@@ -46,10 +43,15 @@ export declare const newFreeDrawElement: (opts: {
|
|
|
46
43
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawFreeDrawElement>;
|
|
47
44
|
export declare const newLinearElement: (opts: {
|
|
48
45
|
type: ExcalidrawLinearElement["type"];
|
|
49
|
-
startArrowhead?: Arrowhead | null;
|
|
50
|
-
endArrowhead?: Arrowhead | null;
|
|
51
46
|
points?: ExcalidrawLinearElement["points"];
|
|
52
47
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawLinearElement>;
|
|
48
|
+
export declare const newArrowElement: (opts: {
|
|
49
|
+
type: ExcalidrawArrowElement["type"];
|
|
50
|
+
startArrowhead?: Arrowhead | null;
|
|
51
|
+
endArrowhead?: Arrowhead | null;
|
|
52
|
+
points?: ExcalidrawArrowElement["points"];
|
|
53
|
+
elbowed?: boolean;
|
|
54
|
+
} & ElementConstructorOpts) => NonDeleted<ExcalidrawArrowElement>;
|
|
53
55
|
export declare const newImageElement: (opts: {
|
|
54
56
|
type: ExcalidrawImageElement["type"];
|
|
55
57
|
status?: ExcalidrawImageElement["status"];
|
|
@@ -5,8 +5,9 @@ import { getNewGroupIdsForDuplication } from "../groups";
|
|
|
5
5
|
import { getElementAbsoluteCoords } from ".";
|
|
6
6
|
import { adjustXYWithRotation } from "../math";
|
|
7
7
|
import { getResizedElementAbsoluteCoords } from "./bounds";
|
|
8
|
-
import { measureText, normalizeText, wrapText, getBoundTextMaxWidth,
|
|
8
|
+
import { measureText, normalizeText, wrapText, getBoundTextMaxWidth, } 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
|
+
import { getLineHeight } from "../fonts";
|
|
10
11
|
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
12
|
// assign type to guard against excess properties
|
|
12
13
|
const element = {
|
|
@@ -79,13 +80,13 @@ const getTextElementPositionOffsets = (opts, metrics) => {
|
|
|
79
80
|
export const newTextElement = (opts) => {
|
|
80
81
|
const fontFamily = opts.fontFamily || DEFAULT_FONT_FAMILY;
|
|
81
82
|
const fontSize = opts.fontSize || DEFAULT_FONT_SIZE;
|
|
82
|
-
const lineHeight = opts.lineHeight ||
|
|
83
|
+
const lineHeight = opts.lineHeight || getLineHeight(fontFamily);
|
|
83
84
|
const text = normalizeText(opts.text);
|
|
84
85
|
const metrics = measureText(text, getFontString({ fontFamily, fontSize }), lineHeight);
|
|
85
86
|
const textAlign = opts.textAlign || DEFAULT_TEXT_ALIGN;
|
|
86
87
|
const verticalAlign = opts.verticalAlign || DEFAULT_VERTICAL_ALIGN;
|
|
87
88
|
const offsets = getTextElementPositionOffsets({ textAlign, verticalAlign }, metrics);
|
|
88
|
-
const
|
|
89
|
+
const textElementProps = {
|
|
89
90
|
..._newElementBase("text", opts),
|
|
90
91
|
text,
|
|
91
92
|
fontSize,
|
|
@@ -97,19 +98,26 @@ export const newTextElement = (opts) => {
|
|
|
97
98
|
width: metrics.width,
|
|
98
99
|
height: metrics.height,
|
|
99
100
|
containerId: opts.containerId || null,
|
|
100
|
-
originalText: text,
|
|
101
|
+
originalText: opts.originalText ?? text,
|
|
102
|
+
autoResize: opts.autoResize ?? true,
|
|
101
103
|
lineHeight,
|
|
102
|
-
}
|
|
104
|
+
};
|
|
105
|
+
const textElement = newElementWith(textElementProps, {});
|
|
103
106
|
return textElement;
|
|
104
107
|
};
|
|
105
108
|
const getAdjustedDimensions = (element, elementsMap, nextText) => {
|
|
106
|
-
|
|
109
|
+
let { width: nextWidth, height: nextHeight } = measureText(nextText, getFontString(element), element.lineHeight);
|
|
110
|
+
// wrapped text
|
|
111
|
+
if (!element.autoResize) {
|
|
112
|
+
nextWidth = element.width;
|
|
113
|
+
}
|
|
107
114
|
const { textAlign, verticalAlign } = element;
|
|
108
115
|
let x;
|
|
109
116
|
let y;
|
|
110
117
|
if (textAlign === "center" &&
|
|
111
118
|
verticalAlign === VERTICAL_ALIGN.MIDDLE &&
|
|
112
|
-
!element.containerId
|
|
119
|
+
!element.containerId &&
|
|
120
|
+
element.autoResize) {
|
|
113
121
|
const prevMetrics = measureText(element.text, getFontString(element), element.lineHeight);
|
|
114
122
|
const offsets = getTextElementPositionOffsets(element, {
|
|
115
123
|
width: nextWidth - prevMetrics.width,
|
|
@@ -142,19 +150,14 @@ export const refreshTextDimensions = (textElement, container, elementsMap, text
|
|
|
142
150
|
if (textElement.isDeleted) {
|
|
143
151
|
return;
|
|
144
152
|
}
|
|
145
|
-
if (container) {
|
|
146
|
-
text = wrapText(text, getFontString(textElement),
|
|
153
|
+
if (container || !textElement.autoResize) {
|
|
154
|
+
text = wrapText(text, getFontString(textElement), container
|
|
155
|
+
? getBoundTextMaxWidth(container, textElement)
|
|
156
|
+
: textElement.width);
|
|
147
157
|
}
|
|
148
158
|
const dimensions = getAdjustedDimensions(textElement, elementsMap, text);
|
|
149
159
|
return { text, ...dimensions };
|
|
150
160
|
};
|
|
151
|
-
export const updateTextElement = (textElement, container, elementsMap, { text, isDeleted, originalText, }) => {
|
|
152
|
-
return newElementWith(textElement, {
|
|
153
|
-
originalText,
|
|
154
|
-
isDeleted: isDeleted ?? textElement.isDeleted,
|
|
155
|
-
...refreshTextDimensions(textElement, container, elementsMap, originalText),
|
|
156
|
-
});
|
|
157
|
-
};
|
|
158
161
|
export const newFreeDrawElement = (opts) => {
|
|
159
162
|
return {
|
|
160
163
|
..._newElementBase(opts.type, opts),
|
|
@@ -165,6 +168,17 @@ export const newFreeDrawElement = (opts) => {
|
|
|
165
168
|
};
|
|
166
169
|
};
|
|
167
170
|
export const newLinearElement = (opts) => {
|
|
171
|
+
return {
|
|
172
|
+
..._newElementBase(opts.type, opts),
|
|
173
|
+
points: opts.points || [],
|
|
174
|
+
lastCommittedPoint: null,
|
|
175
|
+
startBinding: null,
|
|
176
|
+
endBinding: null,
|
|
177
|
+
startArrowhead: null,
|
|
178
|
+
endArrowhead: null,
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
export const newArrowElement = (opts) => {
|
|
168
182
|
return {
|
|
169
183
|
..._newElementBase(opts.type, opts),
|
|
170
184
|
points: opts.points || [],
|
|
@@ -173,6 +187,7 @@ export const newLinearElement = (opts) => {
|
|
|
173
187
|
endBinding: null,
|
|
174
188
|
startArrowhead: opts.startArrowhead || null,
|
|
175
189
|
endArrowhead: opts.endArrowhead || null,
|
|
190
|
+
elbowed: opts.elbowed || false,
|
|
176
191
|
};
|
|
177
192
|
};
|
|
178
193
|
export const newImageElement = (opts) => {
|
|
@@ -1,9 +1,18 @@
|
|
|
1
|
-
import { ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, ElementsMap } from "./types";
|
|
2
|
-
import { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
|
|
3
|
-
import { PointerDownState } from "../types";
|
|
1
|
+
import type { ExcalidrawLinearElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, NonDeleted, ElementsMap } from "./types";
|
|
2
|
+
import type { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
|
|
3
|
+
import type { PointerDownState } from "../types";
|
|
4
|
+
import Scene from "../scene/Scene";
|
|
4
5
|
export declare const normalizeAngle: (angle: number) => number;
|
|
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
|
-
export declare const
|
|
7
|
-
|
|
6
|
+
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, scene: Scene) => boolean;
|
|
7
|
+
export declare const rescalePointsInElement: (element: NonDeletedExcalidrawElement, width: number, height: number, normalizePoints: boolean) => {
|
|
8
|
+
points: (readonly [number, number])[];
|
|
9
|
+
} | {
|
|
10
|
+
points?: undefined;
|
|
11
|
+
};
|
|
12
|
+
export declare const measureFontSizeFromWidth: (element: NonDeleted<ExcalidrawTextElement>, elementsMap: ElementsMap, nextWidth: number) => {
|
|
13
|
+
size: number;
|
|
14
|
+
} | null;
|
|
15
|
+
export declare const resizeSingleElement: (originalElements: PointerDownState["originalElements"], shouldMaintainAspectRatio: boolean, element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, transformHandleDirection: TransformHandleDirection, shouldResizeFromCenter: boolean, pointerX: number, pointerY: number, scene: Scene) => void;
|
|
16
|
+
export declare const resizeMultipleElements: (originalElements: PointerDownState["originalElements"], selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, scene: Scene) => void;
|
|
8
17
|
export declare const getResizeOffsetXY: (transformHandleType: MaybeTransformHandleType, selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, x: number, y: number) => [number, number];
|
|
9
18
|
export declare const getResizeArrowDirection: (transformHandleType: MaybeTransformHandleType, element: NonDeleted<ExcalidrawLinearElement>) => "origin" | "end";
|