@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Drawable, Options } from "roughjs/bin/core";
|
|
2
2
|
import type { RoughGenerator } from "roughjs/bin/generator";
|
|
3
3
|
import type { ExcalidrawElement, NonDeletedExcalidrawElement, ExcalidrawSelectionElement } from "../element/types";
|
|
4
|
-
import { EmbedsValidationStatus } from "../types";
|
|
4
|
+
import type { EmbedsValidationStatus } from "../types";
|
|
5
5
|
export declare const generateRoughOptions: (element: ExcalidrawElement, continuousPath?: boolean) => Options;
|
|
6
6
|
/**
|
|
7
7
|
* Generates the roughjs shape for given element.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { getDiamondPoints, getArrowheadPoints } from "../element";
|
|
2
|
-
import { isPathALoop, getCornerRadius } from "../math";
|
|
2
|
+
import { isPathALoop, getCornerRadius, distanceSq2d } from "../math";
|
|
3
3
|
import { generateFreeDrawShape } from "../renderer/renderElement";
|
|
4
4
|
import { isTransparent, assertNever } from "../utils";
|
|
5
5
|
import { simplify } from "points-on-curve";
|
|
6
6
|
import { ROUGHNESS } from "../constants";
|
|
7
|
-
import { isEmbeddableElement, isIframeElement, isIframeLikeElement, isLinearElement, } from "../element/typeChecks";
|
|
7
|
+
import { isElbowArrow, isEmbeddableElement, isIframeElement, isIframeLikeElement, isLinearElement, } from "../element/typeChecks";
|
|
8
8
|
import { canChangeRoundness } from "./comparisons";
|
|
9
9
|
const getDashArrayDashed = (strokeWidth) => [8, 8 + strokeWidth];
|
|
10
10
|
const getDashArrayDotted = (strokeWidth) => [1.5, 6 + strokeWidth];
|
|
@@ -261,9 +261,14 @@ export const _generateElementShape = (element, generator, { isExporting, canvasB
|
|
|
261
261
|
// points array can be empty in the beginning, so it is important to add
|
|
262
262
|
// initial position to it
|
|
263
263
|
const points = element.points.length ? element.points : [[0, 0]];
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
264
|
+
if (isElbowArrow(element)) {
|
|
265
|
+
shape = [
|
|
266
|
+
generator.path(generateElbowArrowShape(points, 16), generateRoughOptions(element, true)),
|
|
267
|
+
];
|
|
268
|
+
}
|
|
269
|
+
else if (!element.roundness) {
|
|
270
|
+
// curve is always the first element
|
|
271
|
+
// this simplifies finding the curve for an element
|
|
267
272
|
if (options.fill) {
|
|
268
273
|
shape = [generator.polygon(points, options)];
|
|
269
274
|
}
|
|
@@ -322,3 +327,49 @@ export const _generateElementShape = (element, generator, { isExporting, canvasB
|
|
|
322
327
|
}
|
|
323
328
|
}
|
|
324
329
|
};
|
|
330
|
+
const generateElbowArrowShape = (points, radius) => {
|
|
331
|
+
const subpoints = [];
|
|
332
|
+
for (let i = 1; i < points.length - 1; i += 1) {
|
|
333
|
+
const prev = points[i - 1];
|
|
334
|
+
const next = points[i + 1];
|
|
335
|
+
const corner = Math.min(radius, Math.sqrt(distanceSq2d(points[i], next)) / 2, Math.sqrt(distanceSq2d(points[i], prev)) / 2);
|
|
336
|
+
if (prev[0] < points[i][0] && prev[1] === points[i][1]) {
|
|
337
|
+
// LEFT
|
|
338
|
+
subpoints.push([points[i][0] - corner, points[i][1]]);
|
|
339
|
+
}
|
|
340
|
+
else if (prev[0] === points[i][0] && prev[1] < points[i][1]) {
|
|
341
|
+
// UP
|
|
342
|
+
subpoints.push([points[i][0], points[i][1] - corner]);
|
|
343
|
+
}
|
|
344
|
+
else if (prev[0] > points[i][0] && prev[1] === points[i][1]) {
|
|
345
|
+
// RIGHT
|
|
346
|
+
subpoints.push([points[i][0] + corner, points[i][1]]);
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
subpoints.push([points[i][0], points[i][1] + corner]);
|
|
350
|
+
}
|
|
351
|
+
subpoints.push(points[i]);
|
|
352
|
+
if (next[0] < points[i][0] && next[1] === points[i][1]) {
|
|
353
|
+
// LEFT
|
|
354
|
+
subpoints.push([points[i][0] - corner, points[i][1]]);
|
|
355
|
+
}
|
|
356
|
+
else if (next[0] === points[i][0] && next[1] < points[i][1]) {
|
|
357
|
+
// UP
|
|
358
|
+
subpoints.push([points[i][0], points[i][1] - corner]);
|
|
359
|
+
}
|
|
360
|
+
else if (next[0] > points[i][0] && next[1] === points[i][1]) {
|
|
361
|
+
// RIGHT
|
|
362
|
+
subpoints.push([points[i][0] + corner, points[i][1]]);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
subpoints.push([points[i][0], points[i][1] + corner]);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
const d = [`M ${points[0][0]} ${points[0][1]}`];
|
|
369
|
+
for (let i = 0; i < subpoints.length; i += 3) {
|
|
370
|
+
d.push(`L ${subpoints[i][0]} ${subpoints[i][1]}`);
|
|
371
|
+
d.push(`Q ${subpoints[i + 1][0]} ${subpoints[i + 1][1]}, ${subpoints[i + 2][0]} ${subpoints[i + 2][1]}`);
|
|
372
|
+
}
|
|
373
|
+
d.push(`L ${points[points.length - 1][0]} ${points[points.length - 1][1]}`);
|
|
374
|
+
return d.join(" ");
|
|
375
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Drawable } from "roughjs/bin/core";
|
|
2
|
-
import { ExcalidrawElement } from "../element/types";
|
|
3
|
-
import { ElementShape, ElementShapes } from "./types";
|
|
4
|
-
import { AppState, EmbedsValidationStatus } from "../types";
|
|
1
|
+
import type { Drawable } from "roughjs/bin/core";
|
|
2
|
+
import type { ExcalidrawElement } from "../element/types";
|
|
3
|
+
import type { ElementShape, ElementShapes } from "./types";
|
|
4
|
+
import type { AppState, EmbedsValidationStatus } from "../types";
|
|
5
5
|
export declare class ShapeCache {
|
|
6
6
|
private static rg;
|
|
7
7
|
private static cache;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { NonDeletedExcalidrawElement } from "../element/types";
|
|
2
|
-
import { ElementOrToolType } from "../types";
|
|
1
|
+
import type { NonDeletedExcalidrawElement } from "../element/types";
|
|
2
|
+
import type { ElementOrToolType } from "../types";
|
|
3
3
|
export declare const hasBackground: (type: ElementOrToolType) => boolean;
|
|
4
4
|
export declare const hasStrokeColor: (type: ElementOrToolType) => boolean;
|
|
5
5
|
export declare const hasStrokeWidth: (type: ElementOrToolType) => boolean;
|
|
6
6
|
export declare const hasStrokeStyle: (type: ElementOrToolType) => boolean;
|
|
7
7
|
export declare const canChangeRoundness: (type: ElementOrToolType) => boolean;
|
|
8
|
+
export declare const toolIsArrow: (type: ElementOrToolType) => boolean;
|
|
8
9
|
export declare const canHaveArrowheads: (type: ElementOrToolType) => boolean;
|
|
9
10
|
export declare const getElementAtPosition: (elements: readonly NonDeletedExcalidrawElement[], isAtPositionFn: (element: NonDeletedExcalidrawElement) => boolean) => NonDeletedExcalidrawElement | null;
|
|
10
11
|
export declare const getElementsAtPosition: (elements: readonly NonDeletedExcalidrawElement[], isAtPositionFn: (element: NonDeletedExcalidrawElement) => boolean) => NonDeletedExcalidrawElement[];
|
|
@@ -25,10 +25,10 @@ export const hasStrokeStyle = (type) => type === "rectangle" ||
|
|
|
25
25
|
export const canChangeRoundness = (type) => type === "rectangle" ||
|
|
26
26
|
type === "iframe" ||
|
|
27
27
|
type === "embeddable" ||
|
|
28
|
-
type === "arrow" ||
|
|
29
28
|
type === "line" ||
|
|
30
29
|
type === "diamond" ||
|
|
31
30
|
type === "image";
|
|
31
|
+
export const toolIsArrow = (type) => type === "arrow";
|
|
32
32
|
export const canHaveArrowheads = (type) => type === "arrow";
|
|
33
33
|
export const getElementAtPosition = (elements, isAtPositionFn) => {
|
|
34
34
|
let hitElement = null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ExcalidrawFrameLikeElement, NonDeletedExcalidrawElement } from "../element/types";
|
|
2
|
-
import { AppState, BinaryFiles } from "../types";
|
|
1
|
+
import type { ExcalidrawFrameLikeElement, NonDeletedExcalidrawElement } from "../element/types";
|
|
2
|
+
import type { AppState, BinaryFiles } from "../types";
|
|
3
3
|
export declare const exportToCanvas: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, files: BinaryFiles, { exportBackground, exportPadding, viewBackgroundColor, exportingFrame, }: {
|
|
4
4
|
exportBackground: boolean;
|
|
5
5
|
exportPadding?: number | undefined;
|
|
@@ -8,7 +8,7 @@ export declare const exportToCanvas: (elements: readonly NonDeletedExcalidrawEle
|
|
|
8
8
|
}, createCanvas?: (width: number, height: number) => {
|
|
9
9
|
canvas: HTMLCanvasElement;
|
|
10
10
|
scale: number;
|
|
11
|
-
}) => Promise<HTMLCanvasElement>;
|
|
11
|
+
}, loadFonts?: () => Promise<void>) => Promise<HTMLCanvasElement>;
|
|
12
12
|
export declare const exportToSvg: (elements: readonly NonDeletedExcalidrawElement[], appState: {
|
|
13
13
|
exportBackground: boolean;
|
|
14
14
|
exportPadding?: number;
|
|
@@ -23,5 +23,6 @@ export declare const exportToSvg: (elements: readonly NonDeletedExcalidrawElemen
|
|
|
23
23
|
*/
|
|
24
24
|
renderEmbeddables?: boolean;
|
|
25
25
|
exportingFrame?: ExcalidrawFrameLikeElement | null;
|
|
26
|
+
skipInliningFonts?: true;
|
|
26
27
|
}) => Promise<SVGSVGElement>;
|
|
27
28
|
export declare const getExportSize: (elements: readonly NonDeletedExcalidrawElement[], exportPadding: number, scale: number) => [number, number];
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import rough from "roughjs/bin/rough";
|
|
2
|
-
import { getCommonBounds, getElementAbsoluteCoords
|
|
2
|
+
import { getCommonBounds, getElementAbsoluteCoords } from "../element/bounds";
|
|
3
3
|
import { renderSceneToSvg } from "../renderer/staticSvgScene";
|
|
4
4
|
import { arrayToMap, distance, getFontString, toBrandedType } from "../utils";
|
|
5
|
-
import { DEFAULT_EXPORT_PADDING,
|
|
5
|
+
import { DEFAULT_EXPORT_PADDING, FRAME_STYLE, FONT_FAMILY, SVG_NS, THEME, THEME_FILTER, } from "../constants";
|
|
6
6
|
import { getDefaultAppState } from "../appState";
|
|
7
7
|
import { serializeAsJSON } from "../data/json";
|
|
8
8
|
import { getInitializedImageElements, updateImageCache, } from "../element/image";
|
|
9
9
|
import { getElementsOverlappingFrame, getFrameLikeElements, getFrameLikeTitle, getRootElements, } from "../frame";
|
|
10
10
|
import { newTextElement } from "../element";
|
|
11
11
|
import { newElementWith } from "../element/mutateElement";
|
|
12
|
-
import {
|
|
12
|
+
import { isFrameLikeElement, isTextElement } from "../element/typeChecks";
|
|
13
13
|
import { syncInvalidIndices } from "../fractionalIndex";
|
|
14
14
|
import { renderStaticScene } from "../renderer/staticScene";
|
|
15
|
+
import { Fonts } from "../fonts";
|
|
15
16
|
const SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;
|
|
16
17
|
const truncateText = (element, maxWidth) => {
|
|
17
18
|
if (element.width <= maxWidth) {
|
|
@@ -48,26 +49,18 @@ const truncateText = (element, maxWidth) => {
|
|
|
48
49
|
*/
|
|
49
50
|
const addFrameLabelsAsTextElements = (elements, opts) => {
|
|
50
51
|
const nextElements = [];
|
|
51
|
-
let frameIndex = 0;
|
|
52
|
-
let magicFrameIndex = 0;
|
|
53
52
|
for (const element of elements) {
|
|
54
53
|
if (isFrameLikeElement(element)) {
|
|
55
|
-
if (isFrameElement(element)) {
|
|
56
|
-
frameIndex++;
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
magicFrameIndex++;
|
|
60
|
-
}
|
|
61
54
|
let textElement = newTextElement({
|
|
62
55
|
x: element.x,
|
|
63
56
|
y: element.y - FRAME_STYLE.nameOffsetY,
|
|
64
|
-
fontFamily: FONT_FAMILY.
|
|
57
|
+
fontFamily: FONT_FAMILY.Helvetica,
|
|
65
58
|
fontSize: FRAME_STYLE.nameFontSize,
|
|
66
59
|
lineHeight: FRAME_STYLE.nameLineHeight,
|
|
67
60
|
strokeColor: opts.exportWithDarkMode
|
|
68
61
|
? FRAME_STYLE.nameColorDarkTheme
|
|
69
62
|
: FRAME_STYLE.nameColorLightTheme,
|
|
70
|
-
text: getFrameLikeTitle(element
|
|
63
|
+
text: getFrameLikeTitle(element),
|
|
71
64
|
});
|
|
72
65
|
textElement.y -= textElement.height;
|
|
73
66
|
textElement = truncateText(textElement, element.width);
|
|
@@ -106,7 +99,11 @@ export const exportToCanvas = async (elements, appState, files, { exportBackgrou
|
|
|
106
99
|
canvas.width = width * appState.exportScale;
|
|
107
100
|
canvas.height = height * appState.exportScale;
|
|
108
101
|
return { canvas, scale: appState.exportScale };
|
|
102
|
+
}, loadFonts = async () => {
|
|
103
|
+
await Fonts.loadFontsForElements(elements);
|
|
109
104
|
}) => {
|
|
105
|
+
// load font faces before continuing, by default leverages browsers' [FontFace API](https://developer.mozilla.org/en-US/docs/Web/API/FontFace)
|
|
106
|
+
await loadFonts();
|
|
110
107
|
const frameRendering = getFrameRenderingConfig(exportingFrame ?? null, appState.frameRendering ?? null);
|
|
111
108
|
const elementsForRender = prepareElementsForRender({
|
|
112
109
|
elements,
|
|
@@ -195,17 +192,6 @@ export const exportToSvg = async (elements, appState, files, opts) => {
|
|
|
195
192
|
if (exportWithDarkMode) {
|
|
196
193
|
svgRoot.setAttribute("filter", THEME_FILTER);
|
|
197
194
|
}
|
|
198
|
-
let assetPath = "https://excalidraw.com/";
|
|
199
|
-
// Asset path needs to be determined only when using package
|
|
200
|
-
if (import.meta.env.VITE_IS_EXCALIDRAW_NPM_PACKAGE) {
|
|
201
|
-
assetPath =
|
|
202
|
-
window.EXCALIDRAW_ASSET_PATH ||
|
|
203
|
-
`https://unpkg.com/${import.meta.env.VITE_PKG_NAME}@${import.meta.env.PKG_VERSION}`;
|
|
204
|
-
if (assetPath?.startsWith("/")) {
|
|
205
|
-
assetPath = assetPath.replace("/", `${window.location.origin}/`);
|
|
206
|
-
}
|
|
207
|
-
assetPath = `${assetPath}/dist/excalidraw-assets/`;
|
|
208
|
-
}
|
|
209
195
|
const offsetX = -minX + exportPadding;
|
|
210
196
|
const offsetY = -minY + exportPadding;
|
|
211
197
|
const frameElements = getFrameLikeElements(elements);
|
|
@@ -223,23 +209,35 @@ export const exportToSvg = async (elements, appState, files, opts) => {
|
|
|
223
209
|
</rect>
|
|
224
210
|
</clipPath>`;
|
|
225
211
|
}
|
|
212
|
+
const fontFamilies = elements.reduce((acc, element) => {
|
|
213
|
+
if (isTextElement(element)) {
|
|
214
|
+
acc.add(element.fontFamily);
|
|
215
|
+
}
|
|
216
|
+
return acc;
|
|
217
|
+
}, new Set());
|
|
218
|
+
const fontFaces = opts?.skipInliningFonts
|
|
219
|
+
? []
|
|
220
|
+
: await Promise.all(Array.from(fontFamilies).map(async (x) => {
|
|
221
|
+
const { fonts, metadata } = Fonts.registered.get(x) ?? {};
|
|
222
|
+
if (!Array.isArray(fonts)) {
|
|
223
|
+
console.error(`Couldn't find registered fonts for font-family "${x}"`, Fonts.registered);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (metadata?.local) {
|
|
227
|
+
// don't inline local fonts
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
return Promise.all(fonts.map(async (font) => `@font-face {
|
|
231
|
+
font-family: ${font.fontFace.family};
|
|
232
|
+
src: url(${await font.getContent()});
|
|
233
|
+
}`));
|
|
234
|
+
}));
|
|
226
235
|
svgRoot.innerHTML = `
|
|
227
236
|
${SVG_EXPORT_TAG}
|
|
228
237
|
${metadata}
|
|
229
238
|
<defs>
|
|
230
239
|
<style class="style-fonts">
|
|
231
|
-
|
|
232
|
-
font-family: "Virgil";
|
|
233
|
-
src: url("${assetPath}Virgil.woff2");
|
|
234
|
-
}
|
|
235
|
-
@font-face {
|
|
236
|
-
font-family: "Cascadia";
|
|
237
|
-
src: url("${assetPath}Cascadia.woff2");
|
|
238
|
-
}
|
|
239
|
-
@font-face {
|
|
240
|
-
font-family: "Assistant";
|
|
241
|
-
src: url("${assetPath}Assistant-Regular.woff2");
|
|
242
|
-
}
|
|
240
|
+
${fontFaces.flat().filter(Boolean).join("\n")}
|
|
243
241
|
</style>
|
|
244
242
|
${exportingFrameClipPath}
|
|
245
243
|
</defs>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AppState, PointerCoords, Zoom } from "../types";
|
|
2
|
-
import { ExcalidrawElement } from "../element/types";
|
|
1
|
+
import type { AppState, PointerCoords, Zoom } from "../types";
|
|
2
|
+
import type { ExcalidrawElement } from "../element/types";
|
|
3
3
|
export declare const centerScrollOn: ({ scenePoint, viewportDimensions, zoom, }: {
|
|
4
4
|
scenePoint: PointerCoords;
|
|
5
5
|
viewportDimensions: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { InteractiveCanvasAppState } from "../types";
|
|
2
|
-
import { ScrollBars } from "./types";
|
|
3
|
-
import { ExcalidrawElement } from "../element/types";
|
|
1
|
+
import type { InteractiveCanvasAppState } from "../types";
|
|
2
|
+
import type { ScrollBars } from "./types";
|
|
3
|
+
import type { ExcalidrawElement } from "../element/types";
|
|
4
4
|
export declare const SCROLLBAR_MARGIN = 4;
|
|
5
5
|
export declare const SCROLLBAR_WIDTH = 6;
|
|
6
6
|
export declare const SCROLLBAR_COLOR = "rgba(0,0,0,0.3)";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ElementsMap, ElementsMapOrArray, ExcalidrawElement, NonDeletedExcalidrawElement } from "../element/types";
|
|
2
|
-
import { AppState, InteractiveCanvasAppState } from "../types";
|
|
1
|
+
import type { ElementsMap, ElementsMapOrArray, ExcalidrawElement, NonDeletedExcalidrawElement } from "../element/types";
|
|
2
|
+
import type { AppState, InteractiveCanvasAppState } from "../types";
|
|
3
3
|
/**
|
|
4
4
|
* Frames and their containing elements are not to be selected at the same time.
|
|
5
5
|
* Given an array of selected elements, if there are frames and their containing elements
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { RoughCanvas } from "roughjs/bin/canvas";
|
|
2
|
-
import { Drawable } from "roughjs/bin/core";
|
|
3
|
-
import { ExcalidrawElement,
|
|
4
|
-
import { AppClassProperties, AppState, EmbedsValidationStatus, ElementsPendingErasure, InteractiveCanvasAppState, StaticCanvasAppState, SocketId, UserIdleState, Device } from "../types";
|
|
5
|
-
import { MakeBrand } from "../utility-types";
|
|
2
|
+
import type { Drawable } from "roughjs/bin/core";
|
|
3
|
+
import type { ExcalidrawElement, NonDeletedElementsMap, NonDeletedExcalidrawElement, NonDeletedSceneElementsMap } from "../element/types";
|
|
4
|
+
import type { AppClassProperties, AppState, EmbedsValidationStatus, ElementsPendingErasure, InteractiveCanvasAppState, StaticCanvasAppState, SocketId, UserIdleState, Device } from "../types";
|
|
5
|
+
import type { MakeBrand } from "../utility-types";
|
|
6
6
|
export type RenderableElementsMap = NonDeletedElementsMap & MakeBrand<"RenderableElementsMap">;
|
|
7
7
|
export type StaticCanvasRenderConfig = {
|
|
8
8
|
canvasBackgroundColor: AppState["viewBackgroundColor"];
|
|
@@ -33,7 +33,7 @@ export type InteractiveCanvasRenderConfig = {
|
|
|
33
33
|
remotePointerUserStates: Map<SocketId, UserIdleState>;
|
|
34
34
|
remotePointerUsernames: Map<SocketId, string>;
|
|
35
35
|
remotePointerButton: Map<SocketId, string | undefined>;
|
|
36
|
-
selectionColor
|
|
36
|
+
selectionColor: string;
|
|
37
37
|
renderScrollbars?: boolean;
|
|
38
38
|
};
|
|
39
39
|
export type RenderInteractiveSceneCallback = {
|
|
@@ -56,6 +56,7 @@ export type InteractiveSceneRenderConfig = {
|
|
|
56
56
|
elementsMap: RenderableElementsMap;
|
|
57
57
|
visibleElements: readonly NonDeletedExcalidrawElement[];
|
|
58
58
|
selectedElements: readonly NonDeletedExcalidrawElement[];
|
|
59
|
+
allElementsMap: NonDeletedSceneElementsMap;
|
|
59
60
|
scale: number;
|
|
60
61
|
appState: InteractiveCanvasAppState;
|
|
61
62
|
renderConfig: InteractiveCanvasRenderConfig;
|
|
@@ -66,9 +67,6 @@ export type SceneScroll = {
|
|
|
66
67
|
scrollX: number;
|
|
67
68
|
scrollY: number;
|
|
68
69
|
};
|
|
69
|
-
export interface Scene {
|
|
70
|
-
elements: ExcalidrawTextElement[];
|
|
71
|
-
}
|
|
72
70
|
export type ExportType = "png" | "clipboard" | "clipboard-svg" | "backend" | "svg";
|
|
73
71
|
export type ScrollBars = {
|
|
74
72
|
horizontal: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AppState, NormalizedZoomValue } from "../types";
|
|
1
|
+
import type { AppState, NormalizedZoomValue } from "../types";
|
|
2
2
|
export declare const getNormalizedZoom: (zoom: number) => NormalizedZoomValue;
|
|
3
3
|
export declare const getStateForZoom: ({ viewportX, viewportY, nextZoom, }: {
|
|
4
4
|
viewportX: number;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import { type GeometricShape } from "../utils/geometry/shape";
|
|
3
|
+
import type { ElementsMap, ExcalidrawElement } from "./element/types";
|
|
2
4
|
export declare const SHAPES: readonly [{
|
|
3
5
|
readonly icon: JSX.Element;
|
|
4
6
|
readonly value: "selection";
|
|
@@ -61,3 +63,9 @@ export declare const SHAPES: readonly [{
|
|
|
61
63
|
readonly fillable: false;
|
|
62
64
|
}];
|
|
63
65
|
export declare const findShapeByKey: (key: string) => "text" | "image" | "selection" | "rectangle" | "diamond" | "ellipse" | "arrow" | "line" | "freedraw" | "eraser" | null;
|
|
66
|
+
/**
|
|
67
|
+
* get the pure geometric shape of an excalidraw element
|
|
68
|
+
* which is then used for hit detection
|
|
69
|
+
*/
|
|
70
|
+
export declare const getElementShape: (element: ExcalidrawElement, elementsMap: ElementsMap) => GeometricShape;
|
|
71
|
+
export declare const getBoundTextShape: (element: ExcalidrawElement, elementsMap: ElementsMap) => GeometricShape | null;
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
import { getClosedCurveShape, getCurveShape, getEllipseShape, getFreedrawShape, getPolygonShape, } from "../utils/geometry/shape";
|
|
1
2
|
import { ArrowIcon, DiamondIcon, EllipseIcon, EraserIcon, FreedrawIcon, ImageIcon, LineIcon, RectangleIcon, SelectionIcon, TextIcon, } from "./components/icons";
|
|
3
|
+
import { getElementAbsoluteCoords } from "./element";
|
|
4
|
+
import { shouldTestInside } from "./element/collision";
|
|
5
|
+
import { LinearElementEditor } from "./element/linearElementEditor";
|
|
6
|
+
import { getBoundTextElement } from "./element/textElement";
|
|
2
7
|
import { KEYS } from "./keys";
|
|
8
|
+
import { ShapeCache } from "./scene/ShapeCache";
|
|
3
9
|
export const SHAPES = [
|
|
4
10
|
{
|
|
5
11
|
icon: SelectionIcon,
|
|
@@ -82,3 +88,54 @@ export const findShapeByKey = (key) => {
|
|
|
82
88
|
});
|
|
83
89
|
return shape?.value || null;
|
|
84
90
|
};
|
|
91
|
+
/**
|
|
92
|
+
* get the pure geometric shape of an excalidraw element
|
|
93
|
+
* which is then used for hit detection
|
|
94
|
+
*/
|
|
95
|
+
export const getElementShape = (element, elementsMap) => {
|
|
96
|
+
switch (element.type) {
|
|
97
|
+
case "rectangle":
|
|
98
|
+
case "diamond":
|
|
99
|
+
case "frame":
|
|
100
|
+
case "magicframe":
|
|
101
|
+
case "embeddable":
|
|
102
|
+
case "image":
|
|
103
|
+
case "iframe":
|
|
104
|
+
case "text":
|
|
105
|
+
case "selection":
|
|
106
|
+
return getPolygonShape(element);
|
|
107
|
+
case "arrow":
|
|
108
|
+
case "line": {
|
|
109
|
+
const roughShape = ShapeCache.get(element)?.[0] ??
|
|
110
|
+
ShapeCache.generateElementShape(element, null)[0];
|
|
111
|
+
const [, , , , cx, cy] = getElementAbsoluteCoords(element, elementsMap);
|
|
112
|
+
return shouldTestInside(element)
|
|
113
|
+
? getClosedCurveShape(element, roughShape, [element.x, element.y], element.angle, [cx, cy])
|
|
114
|
+
: getCurveShape(roughShape, [element.x, element.y], element.angle, [
|
|
115
|
+
cx,
|
|
116
|
+
cy,
|
|
117
|
+
]);
|
|
118
|
+
}
|
|
119
|
+
case "ellipse":
|
|
120
|
+
return getEllipseShape(element);
|
|
121
|
+
case "freedraw": {
|
|
122
|
+
const [, , , , cx, cy] = getElementAbsoluteCoords(element, elementsMap);
|
|
123
|
+
return getFreedrawShape(element, [cx, cy], shouldTestInside(element));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
export const getBoundTextShape = (element, elementsMap) => {
|
|
128
|
+
const boundTextElement = getBoundTextElement(element, elementsMap);
|
|
129
|
+
if (boundTextElement) {
|
|
130
|
+
if (element.type === "arrow") {
|
|
131
|
+
return getElementShape({
|
|
132
|
+
...boundTextElement,
|
|
133
|
+
// arrow's bound text accurate position is not stored in the element's property
|
|
134
|
+
// but rather calculated and returned from the following static method
|
|
135
|
+
...LinearElementEditor.getBoundTextElementPosition(element, boundTextElement, elementsMap),
|
|
136
|
+
}, elementsMap);
|
|
137
|
+
}
|
|
138
|
+
return getElementShape(boundTextElement, elementsMap);
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Bounds } from "./element/bounds";
|
|
2
|
-
import { MaybeTransformHandleType } from "./element/transformHandles";
|
|
3
|
-
import { ElementsMap, ExcalidrawElement, NonDeletedExcalidrawElement } from "./element/types";
|
|
4
|
-
import { AppState, KeyboardModifiersObject, Point } from "./types";
|
|
1
|
+
import type { Bounds } from "./element/bounds";
|
|
2
|
+
import type { MaybeTransformHandleType } from "./element/transformHandles";
|
|
3
|
+
import type { ElementsMap, ExcalidrawElement, NonDeletedExcalidrawElement } from "./element/types";
|
|
4
|
+
import type { AppState, KeyboardModifiersObject, Point } from "./types";
|
|
5
5
|
export declare const getSnapDistance: (zoomValue: number) => number;
|
|
6
6
|
type Vector2D = {
|
|
7
7
|
x: number;
|
|
@@ -835,5 +835,6 @@ export const isActiveToolNonLinearSnappable = (activeToolType) => {
|
|
|
835
835
|
activeToolType === TOOL_TYPE.diamond ||
|
|
836
836
|
activeToolType === TOOL_TYPE.frame ||
|
|
837
837
|
activeToolType === TOOL_TYPE.magicframe ||
|
|
838
|
-
activeToolType === TOOL_TYPE.image
|
|
838
|
+
activeToolType === TOOL_TYPE.image ||
|
|
839
|
+
activeToolType === TOOL_TYPE.text);
|
|
839
840
|
};
|
|
@@ -1,12 +1,42 @@
|
|
|
1
1
|
import { AppStateChange, ElementsChange } from "./change";
|
|
2
|
-
import { OrderedExcalidrawElement } from "./element/types";
|
|
2
|
+
import type { OrderedExcalidrawElement } from "./element/types";
|
|
3
3
|
import { Emitter } from "./emitter";
|
|
4
|
-
import { AppState, ObservedAppState } from "./types";
|
|
4
|
+
import type { AppState, ObservedAppState } from "./types";
|
|
5
|
+
import type { ValueOf } from "./utility-types";
|
|
5
6
|
export declare const getObservedAppState: (appState: AppState) => ObservedAppState;
|
|
6
|
-
export type StoreActionType = "capture" | "update" | "none";
|
|
7
7
|
export declare const StoreAction: {
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Immediately undoable.
|
|
10
|
+
*
|
|
11
|
+
* Use for updates which should be captured.
|
|
12
|
+
* Should be used for most of the local updates.
|
|
13
|
+
*
|
|
14
|
+
* These updates will _immediately_ make it to the local undo / redo stacks.
|
|
15
|
+
*/
|
|
16
|
+
readonly CAPTURE: "capture";
|
|
17
|
+
/**
|
|
18
|
+
* Never undoable.
|
|
19
|
+
*
|
|
20
|
+
* Use for updates which should never be recorded, such as remote updates
|
|
21
|
+
* or scene initialization.
|
|
22
|
+
*
|
|
23
|
+
* These updates will _never_ make it to the local undo / redo stacks.
|
|
24
|
+
*/
|
|
25
|
+
readonly UPDATE: "update";
|
|
26
|
+
/**
|
|
27
|
+
* Eventually undoable.
|
|
28
|
+
*
|
|
29
|
+
* Use for updates which should not be captured immediately - likely
|
|
30
|
+
* exceptions which are part of some async multi-step process. Otherwise, all
|
|
31
|
+
* such updates would end up being captured with the next
|
|
32
|
+
* `StoreAction.CAPTURE` - triggered either by the next `updateScene`
|
|
33
|
+
* or internally by the editor.
|
|
34
|
+
*
|
|
35
|
+
* These updates will _eventually_ make it to the local undo / redo stacks.
|
|
36
|
+
*/
|
|
37
|
+
readonly NONE: "none";
|
|
9
38
|
};
|
|
39
|
+
export type StoreActionType = ValueOf<typeof StoreAction>;
|
|
10
40
|
/**
|
|
11
41
|
* Represent an increment to the Store.
|
|
12
42
|
*/
|
package/dist/excalidraw/store.js
CHANGED
|
@@ -25,8 +25,35 @@ export const getObservedAppState = (appState) => {
|
|
|
25
25
|
};
|
|
26
26
|
const isObservedAppState = (appState) => !!Reflect.get(appState, hiddenObservedAppStateProp);
|
|
27
27
|
export const StoreAction = {
|
|
28
|
+
/**
|
|
29
|
+
* Immediately undoable.
|
|
30
|
+
*
|
|
31
|
+
* Use for updates which should be captured.
|
|
32
|
+
* Should be used for most of the local updates.
|
|
33
|
+
*
|
|
34
|
+
* These updates will _immediately_ make it to the local undo / redo stacks.
|
|
35
|
+
*/
|
|
28
36
|
CAPTURE: "capture",
|
|
37
|
+
/**
|
|
38
|
+
* Never undoable.
|
|
39
|
+
*
|
|
40
|
+
* Use for updates which should never be recorded, such as remote updates
|
|
41
|
+
* or scene initialization.
|
|
42
|
+
*
|
|
43
|
+
* These updates will _never_ make it to the local undo / redo stacks.
|
|
44
|
+
*/
|
|
29
45
|
UPDATE: "update",
|
|
46
|
+
/**
|
|
47
|
+
* Eventually undoable.
|
|
48
|
+
*
|
|
49
|
+
* Use for updates which should not be captured immediately - likely
|
|
50
|
+
* exceptions which are part of some async multi-step process. Otherwise, all
|
|
51
|
+
* such updates would end up being captured with the next
|
|
52
|
+
* `StoreAction.CAPTURE` - triggered either by the next `updateScene`
|
|
53
|
+
* or internally by the editor.
|
|
54
|
+
*
|
|
55
|
+
* These updates will _eventually_ make it to the local undo / redo stacks.
|
|
56
|
+
*/
|
|
30
57
|
NONE: "none",
|
|
31
58
|
};
|
|
32
59
|
/**
|