@excalidraw/excalidraw 0.18.0-817d8c5 → 0.18.0-a30e1b2
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 +11 -11
- package/dist/dev/{chunk-LMHBUWQS.js → chunk-CARD3WJZ.js} +10 -4
- package/dist/dev/chunk-CARD3WJZ.js.map +7 -0
- package/dist/dev/{chunk-3SN6HYVK.js → chunk-ETWEPOFC.js} +15663 -22657
- package/dist/dev/chunk-ETWEPOFC.js.map +7 -0
- package/dist/dev/chunk-FB2NA5UG.js +4132 -0
- package/dist/dev/chunk-FB2NA5UG.js.map +7 -0
- package/dist/dev/{chunk-53KHN5WM.js → chunk-RS23HYC4.js} +2 -2
- package/dist/dev/{chunk-53KHN5WM.js.map → chunk-RS23HYC4.js.map} +1 -1
- package/dist/dev/data/{image-V26YBSDB.js → image-AYLHSOBV.js} +3 -3
- package/dist/dev/index.css +3093 -3055
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +32056 -23232
- package/dist/dev/index.js.map +4 -4
- package/dist/dev/locales/{en-OZCJJ2HN.js → en-E3O5XSXJ.js} +2 -2
- package/dist/dev/subset-shared.chunk.js +2 -2
- package/dist/dev/subset-worker.chunk.js +2 -2
- package/dist/prod/chunk-6BSJPDKJ.js +33 -0
- package/dist/prod/{chunk-6U3AYISY.js → chunk-FGHASORR.js} +4 -4
- package/dist/prod/chunk-LS7FJGPW.js +86 -0
- package/dist/prod/{chunk-G5N3DNGT.js → chunk-SBKTMZM7.js} +1 -1
- package/dist/prod/data/image-VAYKYPXV.js +1 -0
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +19 -15
- package/dist/prod/locales/{en-B4ZKOASM.js → en-44IKVKYT.js} +1 -1
- package/dist/prod/subset-shared.chunk.js +1 -1
- package/dist/prod/subset-worker.chunk.js +1 -1
- package/dist/types/{excalidraw/binaryheap.d.ts → common/src/binary-heap.d.ts} +1 -1
- package/dist/types/{excalidraw → common/src}/colors.d.ts +1 -0
- package/dist/types/{excalidraw → common/src}/constants.d.ts +11 -6
- package/dist/types/{excalidraw → common/src}/emitter.d.ts +1 -1
- package/dist/types/{excalidraw/fonts/FontMetadata.d.ts → common/src/font-metadata.d.ts} +15 -5
- package/dist/types/common/src/index.d.ts +12 -0
- package/dist/types/{excalidraw → common/src}/points.d.ts +2 -0
- package/dist/types/common/src/promise-pool.d.ts +6 -0
- package/dist/types/{excalidraw → common/src}/utility-types.d.ts +5 -0
- package/dist/types/{excalidraw → common/src}/utils.d.ts +22 -12
- package/dist/types/{excalidraw/scene → element/src}/Scene.d.ts +12 -15
- package/dist/types/{excalidraw/scene → element/src}/Shape.d.ts +2 -2
- package/dist/types/{excalidraw/scene → element/src}/ShapeCache.d.ts +4 -4
- package/dist/types/element/src/align.d.ts +7 -0
- package/dist/types/{excalidraw/element → element/src}/binding.d.ts +24 -16
- package/dist/types/{excalidraw/element → element/src}/bounds.d.ts +9 -4
- package/dist/types/{excalidraw/element → element/src}/collision.d.ts +3 -3
- package/dist/types/{excalidraw/scene → element/src}/comparisons.d.ts +1 -1
- package/dist/types/{excalidraw/change.d.ts → element/src/delta.d.ts} +41 -36
- package/dist/types/{excalidraw → element/src}/distribute.d.ts +1 -1
- package/dist/types/{excalidraw/element → element/src}/dragElements.d.ts +5 -4
- package/dist/types/element/src/duplicate.d.ts +63 -0
- package/dist/types/{excalidraw/element → element/src}/elbowArrow.d.ts +1 -1
- package/dist/types/{excalidraw/element → element/src}/elementLink.d.ts +1 -1
- package/dist/types/element/src/embeddable.d.ts +10 -0
- package/dist/types/{excalidraw/element → element/src}/flowchart.d.ts +4 -3
- package/dist/types/{excalidraw → element/src}/fractionalIndex.d.ts +5 -2
- package/dist/types/{excalidraw → element/src}/frame.d.ts +8 -7
- package/dist/types/{excalidraw → element/src}/groups.d.ts +5 -5
- package/dist/types/{excalidraw/element → element/src}/heading.d.ts +1 -2
- package/dist/types/{excalidraw/element → element/src}/image.d.ts +2 -2
- package/dist/types/element/src/index.d.ts +16 -0
- package/dist/types/{excalidraw/element → element/src}/linearElementEditor.d.ts +16 -20
- package/dist/types/{excalidraw/element → element/src}/mutateElement.d.ts +11 -3
- package/dist/types/{excalidraw/element → element/src}/newElement.d.ts +4 -44
- package/dist/types/{excalidraw/renderer → element/src}/renderElement.d.ts +3 -3
- package/dist/types/{excalidraw/element → element/src}/resizeElements.d.ts +6 -6
- package/dist/types/{excalidraw/element → element/src}/resizeTest.d.ts +4 -4
- package/dist/types/{excalidraw/scene → element/src}/selection.d.ts +13 -2
- package/dist/types/element/src/shapes.d.ts +23 -0
- package/dist/types/{excalidraw/element → element/src}/showSelectedShapeActions.d.ts +1 -1
- package/dist/types/{excalidraw/element → element/src}/sizeHelpers.d.ts +1 -2
- package/dist/types/element/src/store.d.ts +227 -0
- package/dist/types/{excalidraw/element → element/src}/textElement.d.ts +8 -7
- package/dist/types/{excalidraw/element → element/src}/transformHandles.d.ts +7 -7
- package/dist/types/{excalidraw/element → element/src}/typeChecks.d.ts +5 -2
- package/dist/types/{excalidraw/element → element/src}/types.d.ts +9 -2
- package/dist/types/element/src/zindex.d.ts +7 -0
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +88 -103
- package/dist/types/excalidraw/actions/actionAlign.d.ts +15 -15
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +64 -74
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +608 -497
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +188 -218
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +31 -36
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +89 -104
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +7 -7
- package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +5 -9
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +34 -39
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +65 -76
- package/dist/types/excalidraw/{element/embeddable.d.ts → actions/actionEmbeddable.d.ts} +31 -46
- package/dist/types/excalidraw/actions/actionExport.d.ts +342 -387
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +52 -62
- package/dist/types/excalidraw/actions/actionFlip.d.ts +7 -7
- package/dist/types/excalidraw/actions/actionFrame.d.ts +234 -254
- package/dist/types/excalidraw/actions/actionGroup.d.ts +65 -75
- package/dist/types/excalidraw/actions/actionHistory.d.ts +2 -3
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +32 -37
- package/dist/types/excalidraw/actions/actionLink.d.ts +34 -39
- package/dist/types/excalidraw/actions/actionMenu.d.ts +91 -106
- package/dist/types/excalidraw/actions/actionNavigate.d.ts +59 -69
- package/dist/types/excalidraw/actions/actionProperties.d.ts +396 -471
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +33 -38
- package/dist/types/excalidraw/actions/actionStyles.d.ts +37 -42
- package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +3 -3
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +33 -38
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +33 -38
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +32 -209
- package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +19 -0
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +32 -38
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +33 -39
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +33 -39
- package/dist/types/excalidraw/actions/actionZindex.d.ts +16 -16
- package/dist/types/excalidraw/actions/index.d.ts +1 -0
- package/dist/types/excalidraw/actions/manager.d.ts +2 -2
- package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
- package/dist/types/excalidraw/actions/types.d.ts +5 -5
- package/dist/types/excalidraw/animated-trail.d.ts +7 -1
- package/dist/types/excalidraw/appState.d.ts +34 -33
- package/dist/types/excalidraw/charts.d.ts +1 -1
- package/dist/types/excalidraw/clipboard.d.ts +7 -7
- package/dist/types/excalidraw/components/Actions.d.ts +3 -3
- package/dist/types/excalidraw/components/App.d.ts +38 -20
- package/dist/types/excalidraw/components/Avatar.d.ts +1 -1
- package/dist/types/excalidraw/components/ButtonIcon.d.ts +1 -1
- package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +4 -4
- package/dist/types/excalidraw/components/ColorPicker/HotkeyLabel.d.ts +1 -2
- package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +2 -2
- package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +1 -1
- package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +1 -1
- package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +3 -3
- package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +1 -1
- package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -1
- package/dist/types/excalidraw/components/ConfirmDialog.d.ts +1 -1
- package/dist/types/excalidraw/components/ContextMenu.d.ts +2 -2
- package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +49 -0
- package/dist/types/excalidraw/components/DarkModeToggle.d.ts +1 -1
- package/dist/types/excalidraw/components/DefaultSidebar.d.ts +2 -2
- package/dist/types/excalidraw/components/DialogActionButton.d.ts +1 -1
- package/dist/types/excalidraw/{element → components}/ElementCanvasButtons.d.ts +1 -1
- package/dist/types/excalidraw/components/ElementLinkDialog.d.ts +5 -4
- package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -1
- package/dist/types/excalidraw/components/FixedSideContainer.d.ts +1 -1
- package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
- package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +1 -1
- package/dist/types/excalidraw/components/FontPicker/FontPickerList.d.ts +3 -3
- package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +1 -1
- package/dist/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +1 -1
- package/dist/types/excalidraw/components/HintViewer.d.ts +1 -1
- package/dist/types/excalidraw/components/IconPicker.d.ts +1 -1
- package/dist/types/excalidraw/components/ImageExportDialog.d.ts +2 -2
- package/dist/types/excalidraw/components/InitializeApp.d.ts +1 -1
- package/dist/types/excalidraw/components/Island.d.ts +1 -1
- package/dist/types/excalidraw/components/JSONExportDialog.d.ts +2 -2
- package/dist/types/excalidraw/components/LayerUI.d.ts +3 -3
- package/dist/types/excalidraw/components/LibraryMenuHeaderContent.d.ts +1 -1
- package/dist/types/excalidraw/components/LibraryMenuItems.d.ts +1 -1
- package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +3 -3
- package/dist/types/excalidraw/components/LibraryUnit.d.ts +2 -2
- package/dist/types/excalidraw/components/LoadingMessage.d.ts +1 -1
- package/dist/types/excalidraw/components/MagicButton.d.ts +1 -1
- package/dist/types/excalidraw/components/MobileMenu.d.ts +3 -3
- package/dist/types/excalidraw/components/PasteChartDialog.d.ts +1 -1
- package/dist/types/excalidraw/components/PropertiesPopover.d.ts +1 -1
- package/dist/types/excalidraw/components/PublishLibrary.d.ts +1 -1
- package/dist/types/excalidraw/components/SVGLayer.d.ts +1 -1
- package/dist/types/excalidraw/components/Sidebar/SidebarTrigger.d.ts +1 -1
- package/dist/types/excalidraw/components/Sidebar/common.d.ts +1 -1
- package/dist/types/excalidraw/components/Stack.d.ts +1 -1
- package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/CanvasGrid.d.ts +1 -1
- package/dist/types/excalidraw/components/Stats/Collapsible.d.ts +2 -1
- package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/DragInput.d.ts +3 -3
- package/dist/types/excalidraw/components/Stats/FontSize.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +3 -3
- package/dist/types/excalidraw/components/Stats/MultiFontSize.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/Position.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/index.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/utils.d.ts +4 -11
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
- package/dist/types/excalidraw/components/TTDDialog/common.d.ts +1 -1
- package/dist/types/excalidraw/components/TextField.d.ts +1 -1
- package/dist/types/excalidraw/components/Toast.d.ts +1 -1
- package/dist/types/excalidraw/components/ToolButton.d.ts +2 -2
- package/dist/types/excalidraw/components/Tooltip.d.ts +1 -1
- package/dist/types/excalidraw/components/UserList.d.ts +1 -1
- package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +4 -3
- package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +2 -2
- package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +3 -3
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +1 -1
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +2 -2
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +1 -1
- package/dist/types/excalidraw/components/hyperlink/Hyperlink.d.ts +5 -4
- package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +2 -2
- package/dist/types/excalidraw/components/icons.d.ts +2 -1
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +1 -1
- package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +4 -1
- package/dist/types/excalidraw/components/shapes.d.ts +62 -0
- package/dist/types/excalidraw/context/tunnels.d.ts +1 -1
- package/dist/types/excalidraw/data/EditorLocalStorage.d.ts +1 -1
- package/dist/types/excalidraw/data/blob.d.ts +4 -4
- package/dist/types/excalidraw/data/filesystem.d.ts +2 -2
- package/dist/types/excalidraw/data/index.d.ts +2 -2
- package/dist/types/excalidraw/data/json.d.ts +1 -1
- package/dist/types/excalidraw/data/library.d.ts +3 -3
- package/dist/types/excalidraw/data/reconcile.d.ts +2 -2
- package/dist/types/excalidraw/data/resave.d.ts +1 -1
- package/dist/types/excalidraw/data/restore.d.ts +1 -1
- package/dist/types/excalidraw/data/transform.d.ts +4 -4
- package/dist/types/excalidraw/data/types.d.ts +3 -3
- package/dist/types/excalidraw/editor-jotai.d.ts +6 -6
- package/dist/types/excalidraw/eraser/index.d.ts +14 -0
- package/dist/types/excalidraw/errors.d.ts +0 -3
- package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -13
- package/dist/types/excalidraw/history.d.ts +15 -23
- package/dist/types/excalidraw/hooks/useEmitter.d.ts +1 -1
- package/dist/types/excalidraw/i18n.d.ts +1 -1
- package/dist/types/excalidraw/index.d.ts +16 -15
- package/dist/types/excalidraw/laser-trails.d.ts +1 -1
- package/dist/types/excalidraw/lasso/index.d.ts +15 -0
- package/dist/types/excalidraw/lasso/utils.d.ts +12 -0
- package/dist/types/excalidraw/renderer/helpers.d.ts +7 -2
- package/dist/types/excalidraw/renderer/staticSvgScene.d.ts +2 -2
- package/dist/types/excalidraw/scene/Renderer.d.ts +3 -3
- package/dist/types/excalidraw/scene/export.d.ts +1 -1
- package/dist/types/excalidraw/scene/index.d.ts +2 -2
- package/dist/types/excalidraw/scene/scroll.d.ts +1 -1
- package/dist/types/excalidraw/scene/scrollbars.d.ts +2 -3
- package/dist/types/excalidraw/scene/types.d.ts +6 -4
- package/dist/types/excalidraw/snapping.d.ts +5 -6
- package/dist/types/excalidraw/types.d.ts +31 -18
- package/dist/types/excalidraw/visualdebug.d.ts +2 -2
- package/dist/types/excalidraw/{element → wysiwyg}/textWysiwyg.d.ts +4 -2
- package/dist/types/math/{curve.d.ts → src/curve.d.ts} +2 -0
- package/dist/types/math/{point.d.ts → src/point.d.ts} +2 -2
- package/dist/types/math/{polygon.d.ts → src/polygon.d.ts} +1 -0
- package/dist/types/math/{segment.d.ts → src/segment.d.ts} +1 -1
- package/dist/types/math/{types.d.ts → src/types.d.ts} +1 -0
- package/dist/types/math/{vector.d.ts → src/vector.d.ts} +4 -0
- package/dist/types/utils/{bbox.d.ts → src/bbox.d.ts} +1 -1
- package/dist/types/utils/{collision.d.ts → src/collision.d.ts} +2 -3
- package/dist/types/utils/{export.d.ts → src/export.d.ts} +2 -2
- package/dist/types/utils/{index.d.ts → src/index.d.ts} +1 -1
- package/dist/types/utils/{geometry → src}/shape.d.ts +2 -15
- package/dist/types/utils/{withinBounds.d.ts → src/withinBounds.d.ts} +2 -2
- package/history.ts +70 -94
- package/package.json +16 -4
- package/dist/dev/chunk-3SN6HYVK.js.map +0 -7
- package/dist/dev/chunk-LMHBUWQS.js.map +0 -7
- package/dist/dev/chunk-OKSO7T74.js +0 -4132
- package/dist/dev/chunk-OKSO7T74.js.map +0 -7
- package/dist/prod/chunk-36CXSE6H.js +0 -34
- package/dist/prod/chunk-EIO257PC.js +0 -86
- package/dist/prod/data/image-N4WCURRR.js +0 -1
- package/dist/types/excalidraw/align.d.ts +0 -7
- package/dist/types/excalidraw/element/index.d.ts +0 -26
- package/dist/types/excalidraw/shapes.d.ts +0 -85
- package/dist/types/excalidraw/store.d.ts +0 -129
- package/dist/types/excalidraw/zindex.d.ts +0 -6
- package/dist/dev/data/{image-V26YBSDB.js.map → image-AYLHSOBV.js.map} +0 -0
- package/dist/dev/locales/{en-OZCJJ2HN.js.map → en-E3O5XSXJ.js.map} +0 -0
- package/dist/types/{excalidraw → common/src}/keys.d.ts +0 -0
- package/dist/types/{excalidraw → common/src}/queue.d.ts +0 -0
- package/dist/types/{excalidraw → common/src}/random.d.ts +0 -0
- package/dist/types/{excalidraw/data → common/src}/url.d.ts +0 -0
- package/dist/types/{excalidraw/element → element/src}/containerCache.d.ts +0 -0
- package/dist/types/{excalidraw/element → element/src}/cropElement.d.ts +0 -0
- package/dist/types/{excalidraw/element → element/src}/distance.d.ts +0 -0
- package/dist/types/{excalidraw/element → element/src}/sortElements.d.ts +0 -0
- package/dist/types/{excalidraw/element → element/src}/textMeasurements.d.ts +0 -0
- package/dist/types/{excalidraw/element → element/src}/textWrapping.d.ts +0 -0
- package/dist/types/{excalidraw/element → element/src}/utils.d.ts +1 -1
- /package/dist/types/math/{angle.d.ts → src/angle.d.ts} +0 -0
- /package/dist/types/math/{ellipse.d.ts → src/ellipse.d.ts} +0 -0
- /package/dist/types/math/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/types/math/{line.d.ts → src/line.d.ts} +0 -0
- /package/dist/types/math/{range.d.ts → src/range.d.ts} +0 -0
- /package/dist/types/math/{rectangle.d.ts → src/rectangle.d.ts} +0 -0
- /package/dist/types/math/{triangle.d.ts → src/triangle.d.ts} +0 -0
- /package/dist/types/math/{utils.d.ts → src/utils.d.ts} +0 -0
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type
|
|
3
|
-
import type {
|
|
1
|
+
import type { IMAGE_MIME_TYPES, UserIdleState, throttleRAF, MIME_TYPES } from "@excalidraw/common";
|
|
2
|
+
import type { SuggestedBinding } from "@excalidraw/element/binding";
|
|
3
|
+
import type { LinearElementEditor } from "@excalidraw/element/linearElementEditor";
|
|
4
|
+
import type { MaybeTransformHandleType } from "@excalidraw/element/transformHandles";
|
|
5
|
+
import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, ChartType, FontFamilyValues, FileId, ExcalidrawImageElement, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement } from "@excalidraw/element/types";
|
|
6
|
+
import type { Merge, MaybePromise, ValueOf, MakeBrand } from "@excalidraw/common/utility-types";
|
|
7
|
+
import type { CaptureUpdateActionType, DurableIncrement, EphemeralIncrement } from "@excalidraw/element/store";
|
|
4
8
|
import type { Action } from "./actions/types";
|
|
5
|
-
import type { LinearElementEditor } from "./element/linearElementEditor";
|
|
6
|
-
import type { SuggestedBinding } from "./element/binding";
|
|
7
|
-
import type { ImportedDataState } from "./data/types";
|
|
8
|
-
import type App from "./components/App";
|
|
9
|
-
import type { throttleRAF } from "./utils";
|
|
10
9
|
import type { Spreadsheet } from "./charts";
|
|
11
|
-
import type { Language } from "./i18n";
|
|
12
10
|
import type { ClipboardData } from "./clipboard";
|
|
13
|
-
import type
|
|
14
|
-
import type { MaybeTransformHandleType } from "./element/transformHandles";
|
|
11
|
+
import type App from "./components/App";
|
|
15
12
|
import type Library from "./data/library";
|
|
16
13
|
import type { FileSystemHandle } from "./data/filesystem";
|
|
17
|
-
import type { IMAGE_MIME_TYPES, MIME_TYPES } from "./constants";
|
|
18
14
|
import type { ContextMenuItems } from "./components/ContextMenu";
|
|
19
15
|
import type { SnapLine } from "./snapping";
|
|
20
|
-
import type {
|
|
21
|
-
import type {
|
|
22
|
-
import type {
|
|
16
|
+
import type { ImportedDataState } from "./data/types";
|
|
17
|
+
import type { Language } from "./i18n";
|
|
18
|
+
import type { isOverScrollBars } from "./scene/scrollbars";
|
|
19
|
+
import type React from "react";
|
|
20
|
+
import type { JSX } from "react";
|
|
23
21
|
export type SocketId = string & {
|
|
24
22
|
_brand: "SocketId";
|
|
25
23
|
};
|
|
@@ -86,7 +84,7 @@ export type BinaryFileData = {
|
|
|
86
84
|
};
|
|
87
85
|
export type BinaryFileMetadata = Omit<BinaryFileData, "dataURL">;
|
|
88
86
|
export type BinaryFiles = Record<ExcalidrawElement["id"], BinaryFileData>;
|
|
89
|
-
export type ToolType = "selection" | "rectangle" | "diamond" | "ellipse" | "arrow" | "line" | "freedraw" | "text" | "image" | "eraser" | "hand" | "frame" | "magicframe" | "embeddable" | "laser";
|
|
87
|
+
export type ToolType = "selection" | "lasso" | "rectangle" | "diamond" | "ellipse" | "arrow" | "line" | "freedraw" | "text" | "image" | "eraser" | "hand" | "frame" | "magicframe" | "embeddable" | "laser";
|
|
90
88
|
export type ElementOrToolType = ExcalidrawElementType | ToolType | "custom";
|
|
91
89
|
export type ActiveTool = {
|
|
92
90
|
type: ToolType;
|
|
@@ -219,6 +217,7 @@ export interface AppState {
|
|
|
219
217
|
*/
|
|
220
218
|
lastActiveTool: ActiveTool | null;
|
|
221
219
|
locked: boolean;
|
|
220
|
+
fromSelection: boolean;
|
|
222
221
|
} & ActiveTool;
|
|
223
222
|
penMode: boolean;
|
|
224
223
|
penDetected: boolean;
|
|
@@ -342,9 +341,13 @@ export interface AppState {
|
|
|
342
341
|
/** image cropping */
|
|
343
342
|
isCropping: boolean;
|
|
344
343
|
croppingElementId: ExcalidrawElement["id"] | null;
|
|
345
|
-
|
|
344
|
+
/** null if no search matches found / search closed */
|
|
345
|
+
searchMatches: Readonly<{
|
|
346
|
+
focusedId: ExcalidrawElement["id"] | null;
|
|
347
|
+
matches: readonly SearchMatch[];
|
|
348
|
+
}> | null;
|
|
346
349
|
}
|
|
347
|
-
type SearchMatch = {
|
|
350
|
+
export type SearchMatch = {
|
|
348
351
|
id: string;
|
|
349
352
|
focus: boolean;
|
|
350
353
|
matchedLines: {
|
|
@@ -352,6 +355,7 @@ type SearchMatch = {
|
|
|
352
355
|
offsetY: number;
|
|
353
356
|
width: number;
|
|
354
357
|
height: number;
|
|
358
|
+
showOnCanvas: boolean;
|
|
355
359
|
}[];
|
|
356
360
|
};
|
|
357
361
|
export type UIAppState = Omit<AppState, "suggestedBindings" | "startBoundElement" | "cursorButton" | "scrollX" | "scrollY">;
|
|
@@ -404,6 +408,7 @@ export type OnUserFollowedPayload = {
|
|
|
404
408
|
};
|
|
405
409
|
export interface ExcalidrawProps {
|
|
406
410
|
onChange?: (elements: readonly OrderedExcalidrawElement[], appState: AppState, files: BinaryFiles) => void;
|
|
411
|
+
onIncrement?: (event: DurableIncrement | EphemeralIncrement) => void;
|
|
407
412
|
initialData?: (() => MaybePromise<ExcalidrawInitialDataState | null>) | MaybePromise<ExcalidrawInitialDataState | null>;
|
|
408
413
|
excalidrawAPI?: (api: ExcalidrawImperativeAPI) => void;
|
|
409
414
|
isCollaborating?: boolean;
|
|
@@ -460,6 +465,7 @@ export interface ExcalidrawProps {
|
|
|
460
465
|
renderEmbeddable?: (element: NonDeleted<ExcalidrawEmbeddableElement>, appState: AppState) => JSX.Element | null;
|
|
461
466
|
aiEnabled?: boolean;
|
|
462
467
|
showDeprecatedFonts?: boolean;
|
|
468
|
+
renderScrollbars?: boolean;
|
|
463
469
|
}
|
|
464
470
|
export type SceneData = {
|
|
465
471
|
elements?: ImportedDataState["elements"];
|
|
@@ -545,6 +551,7 @@ export type AppClassProperties = {
|
|
|
545
551
|
visibleElements: App["visibleElements"];
|
|
546
552
|
excalidrawContainerValue: App["excalidrawContainerValue"];
|
|
547
553
|
onPointerUpEmitter: App["onPointerUpEmitter"];
|
|
554
|
+
updateEditorAtom: App["updateEditorAtom"];
|
|
548
555
|
};
|
|
549
556
|
export type PointerDownState = Readonly<{
|
|
550
557
|
origin: Readonly<{
|
|
@@ -588,6 +595,10 @@ export type PointerDownState = Readonly<{
|
|
|
588
595
|
x: number;
|
|
589
596
|
y: number;
|
|
590
597
|
} | null;
|
|
598
|
+
origin: {
|
|
599
|
+
x: number;
|
|
600
|
+
y: number;
|
|
601
|
+
};
|
|
591
602
|
};
|
|
592
603
|
eventListeners: {
|
|
593
604
|
onMove: null | ReturnType<typeof throttleRAF>;
|
|
@@ -602,6 +613,7 @@ export type PointerDownState = Readonly<{
|
|
|
602
613
|
export type UnsubscribeCallback = () => void;
|
|
603
614
|
export interface ExcalidrawImperativeAPI {
|
|
604
615
|
updateScene: InstanceType<typeof App>["updateScene"];
|
|
616
|
+
mutateElement: InstanceType<typeof App>["mutateElement"];
|
|
605
617
|
updateLibrary: InstanceType<typeof Library>["updateLibrary"];
|
|
606
618
|
resetScene: InstanceType<typeof App>["resetScene"];
|
|
607
619
|
getSceneElementsIncludingDeleted: InstanceType<typeof App>["getSceneElementsIncludingDeleted"];
|
|
@@ -629,6 +641,7 @@ export interface ExcalidrawImperativeAPI {
|
|
|
629
641
|
*/
|
|
630
642
|
updateFrameRendering: InstanceType<typeof App>["updateFrameRendering"];
|
|
631
643
|
onChange: (callback: (elements: readonly ExcalidrawElement[], appState: AppState, files: BinaryFiles) => void) => UnsubscribeCallback;
|
|
644
|
+
onIncrement: (callback: (event: DurableIncrement | EphemeralIncrement) => void) => UnsubscribeCallback;
|
|
632
645
|
onPointerDown: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: React.PointerEvent<HTMLElement>) => void) => UnsubscribeCallback;
|
|
633
646
|
onPointerUp: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: PointerEvent) => void) => UnsubscribeCallback;
|
|
634
647
|
onScrollChange: (callback: (scrollX: number, scrollY: number, zoom: Zoom) => void) => UnsubscribeCallback;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { Curve } from "@excalidraw/math";
|
|
2
1
|
import { type GlobalPoint, type LocalPoint } from "@excalidraw/math";
|
|
2
|
+
import type { Curve } from "@excalidraw/math";
|
|
3
3
|
import type { LineSegment } from "@excalidraw/utils";
|
|
4
|
-
import type { Bounds } from "
|
|
4
|
+
import type { Bounds } from "@excalidraw/element/bounds";
|
|
5
5
|
declare global {
|
|
6
6
|
interface Window {
|
|
7
7
|
visualDebug?: {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { ExcalidrawElement, ExcalidrawTextElement } from "
|
|
1
|
+
import type { ExcalidrawElement, ExcalidrawTextElement } from "@excalidraw/element/types";
|
|
2
2
|
import type App from "../components/App";
|
|
3
|
+
type SubmitHandler = () => void;
|
|
3
4
|
export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app, autoSelect, }: {
|
|
4
5
|
id: ExcalidrawElement["id"];
|
|
5
6
|
/**
|
|
@@ -19,4 +20,5 @@ export declare const textWysiwyg: ({ id, onChange, onSubmit, getViewportCoords,
|
|
|
19
20
|
excalidrawContainer: HTMLDivElement | null;
|
|
20
21
|
app: App;
|
|
21
22
|
autoSelect?: boolean | undefined;
|
|
22
|
-
}) =>
|
|
23
|
+
}) => SubmitHandler;
|
|
24
|
+
export {};
|
|
@@ -8,6 +8,7 @@ import type { Curve, GlobalPoint, LineSegment, LocalPoint } from "./types";
|
|
|
8
8
|
* @returns
|
|
9
9
|
*/
|
|
10
10
|
export declare function curve<Point extends GlobalPoint | LocalPoint>(a: Point, b: Point, c: Point, d: Point): Curve<Point>;
|
|
11
|
+
export declare const bezierEquation: <Point extends GlobalPoint | LocalPoint>(c: Curve<Point>, t: number) => Point;
|
|
11
12
|
/**
|
|
12
13
|
* Computes the intersection between a cubic spline and a line segment.
|
|
13
14
|
*/
|
|
@@ -38,3 +39,4 @@ export declare function curvePointDistance<Point extends GlobalPoint | LocalPoin
|
|
|
38
39
|
* Determines if the parameter is a Curve
|
|
39
40
|
*/
|
|
40
41
|
export declare function isCurve<P extends GlobalPoint | LocalPoint>(v: unknown): v is Curve<P>;
|
|
42
|
+
export declare function curveTangent<Point extends GlobalPoint | LocalPoint>([p0, p1, p2, p3]: Curve<Point>, t: number): import("./types").Vector;
|
|
@@ -45,7 +45,7 @@ export declare function isPoint(p: unknown): p is LocalPoint | GlobalPoint;
|
|
|
45
45
|
*/
|
|
46
46
|
export declare function pointsEqual<Point extends GlobalPoint | LocalPoint>(a: Point, b: Point): boolean;
|
|
47
47
|
/**
|
|
48
|
-
*
|
|
48
|
+
* Rotate a point by [angle] radians.
|
|
49
49
|
*
|
|
50
50
|
* @param point The point to rotate
|
|
51
51
|
* @param center The point to rotate around, the center point
|
|
@@ -54,7 +54,7 @@ export declare function pointsEqual<Point extends GlobalPoint | LocalPoint>(a: P
|
|
|
54
54
|
*/
|
|
55
55
|
export declare function pointRotateRads<Point extends GlobalPoint | LocalPoint>([x, y]: Point, [cx, cy]: Point, angle: Radians): Point;
|
|
56
56
|
/**
|
|
57
|
-
*
|
|
57
|
+
* Rotate a point by [angle] degree.
|
|
58
58
|
*
|
|
59
59
|
* @param point The point to rotate
|
|
60
60
|
* @param center The point to rotate around, the center point
|
|
@@ -2,4 +2,5 @@ import type { GlobalPoint, LocalPoint, Polygon } from "./types";
|
|
|
2
2
|
export declare function polygon<Point extends GlobalPoint | LocalPoint>(...points: Point[]): Polygon<Point>;
|
|
3
3
|
export declare function polygonFromPoints<Point extends GlobalPoint | LocalPoint>(points: Point[]): Polygon<Point>;
|
|
4
4
|
export declare const polygonIncludesPoint: <Point extends GlobalPoint | LocalPoint>(point: Point, polygon: Polygon<Point>) => boolean;
|
|
5
|
+
export declare const polygonIncludesPointNonZero: <Point extends [number, number]>(point: Point, polygon: Point[]) => boolean;
|
|
5
6
|
export declare const pointOnPolygon: <Point extends GlobalPoint | LocalPoint>(p: Point, poly: Polygon<Point>, threshold?: number) => boolean;
|
|
@@ -36,4 +36,4 @@ export declare const distanceToLineSegment: <Point extends GlobalPoint | LocalPo
|
|
|
36
36
|
* @param s
|
|
37
37
|
* @returns
|
|
38
38
|
*/
|
|
39
|
-
export declare function lineSegmentIntersectionPoints<Point extends GlobalPoint | LocalPoint>(l: LineSegment<Point>, s: LineSegment<Point
|
|
39
|
+
export declare function lineSegmentIntersectionPoints<Point extends GlobalPoint | LocalPoint>(l: LineSegment<Point>, s: LineSegment<Point>, threshold?: number): Point | null;
|
|
@@ -86,3 +86,7 @@ export declare function vectorMagnitude(v: Vector): number;
|
|
|
86
86
|
* @returns The new normalized vector
|
|
87
87
|
*/
|
|
88
88
|
export declare const vectorNormalize: (v: Vector) => Vector;
|
|
89
|
+
/**
|
|
90
|
+
* Calculate the right-hand normal of the vector.
|
|
91
|
+
*/
|
|
92
|
+
export declare const vectorNormal: (v: Vector) => Vector;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type GlobalPoint, type LocalPoint } from "@excalidraw/math";
|
|
2
|
-
import type { Bounds } from "@excalidraw/
|
|
2
|
+
import type { Bounds } from "@excalidraw/element/bounds";
|
|
3
3
|
export type LineSegment<P extends LocalPoint | GlobalPoint> = [P, P];
|
|
4
4
|
export declare function getBBox<P extends LocalPoint | GlobalPoint>(line: LineSegment<P>): Bounds;
|
|
5
5
|
export declare function doBBoxesIntersect(a: Bounds, b: Bounds): boolean;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { Polyline } from "./geometry/shape";
|
|
2
|
-
import { type GeometricShape } from "./geometry/shape";
|
|
3
|
-
import type { Curve } from "@excalidraw/math";
|
|
4
1
|
import { type GlobalPoint, type LocalPoint, type Polygon } from "@excalidraw/math";
|
|
2
|
+
import type { Curve } from "@excalidraw/math";
|
|
3
|
+
import type { Polyline, GeometricShape } from "./shape";
|
|
5
4
|
export declare const isPointOnShape: <Point extends GlobalPoint | LocalPoint>(point: Point, shape: GeometricShape<Point>, tolerance?: number) => boolean;
|
|
6
5
|
export declare const isPointInShape: <Point extends GlobalPoint | LocalPoint>(point: Point, shape: GeometricShape<Point>) => boolean;
|
|
7
6
|
export declare const isPointInBounds: <Point extends GlobalPoint | LocalPoint>(point: Point, bounds: Polygon<Point>) => boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { MIME_TYPES } from "@excalidraw/common";
|
|
2
|
+
import type { ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeleted } from "@excalidraw/element/types";
|
|
1
3
|
import type { AppState, BinaryFiles } from "@excalidraw/excalidraw/types";
|
|
2
|
-
import type { ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeleted } from "@excalidraw/excalidraw/element/types";
|
|
3
|
-
import { MIME_TYPES } from "@excalidraw/excalidraw/constants";
|
|
4
4
|
export { MIME_TYPES };
|
|
5
5
|
type ExportOpts = {
|
|
6
6
|
elements: readonly NonDeleted<ExcalidrawElement>[];
|
|
@@ -1,19 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* this file defines pure geometric shapes
|
|
3
|
-
*
|
|
4
|
-
* for instance, a cubic bezier curve is specified by its four control points and
|
|
5
|
-
* an ellipse is defined by its center, angle, semi major axis and semi minor axis
|
|
6
|
-
* (but in semi-width and semi-height so it's more relevant to Excalidraw)
|
|
7
|
-
*
|
|
8
|
-
* the idea with pure shapes is so that we can provide collision and other geoemtric methods not depending on
|
|
9
|
-
* the specifics of roughjs or elements in Excalidraw; instead, we can focus on the pure shapes themselves
|
|
10
|
-
*
|
|
11
|
-
* also included in this file are methods for converting an Excalidraw element or a Drawable from roughjs
|
|
12
|
-
* to pure shapes
|
|
13
|
-
*/
|
|
14
|
-
import type { Curve, LineSegment, Polygon, Radians } from "@excalidraw/math";
|
|
15
1
|
import { type GlobalPoint, type LocalPoint } from "@excalidraw/math";
|
|
16
|
-
import type { ElementsMap, ExcalidrawBindableElement, ExcalidrawDiamondElement, ExcalidrawElement, ExcalidrawEllipseElement, ExcalidrawEmbeddableElement, ExcalidrawFrameLikeElement, ExcalidrawFreeDrawElement, ExcalidrawIframeElement, ExcalidrawImageElement, ExcalidrawLinearElement, ExcalidrawRectangleElement, ExcalidrawSelectionElement, ExcalidrawTextElement } from "@excalidraw/
|
|
2
|
+
import type { ElementsMap, ExcalidrawBindableElement, ExcalidrawDiamondElement, ExcalidrawElement, ExcalidrawEllipseElement, ExcalidrawEmbeddableElement, ExcalidrawFrameLikeElement, ExcalidrawFreeDrawElement, ExcalidrawIframeElement, ExcalidrawImageElement, ExcalidrawLinearElement, ExcalidrawRectangleElement, ExcalidrawSelectionElement, ExcalidrawTextElement } from "@excalidraw/element/types";
|
|
3
|
+
import type { Curve, LineSegment, Polygon, Radians } from "@excalidraw/math";
|
|
17
4
|
import type { Drawable, Op } from "roughjs/bin/core";
|
|
18
5
|
export type Polyline<Point extends GlobalPoint | LocalPoint> = LineSegment<Point>[];
|
|
19
6
|
export type Polycurve<Point extends GlobalPoint | LocalPoint> = Curve<Point>[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { Bounds } from "@excalidraw/element/bounds";
|
|
2
|
+
import type { ExcalidrawElement, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
|
|
3
3
|
type Element = NonDeletedExcalidrawElement;
|
|
4
4
|
type Elements = readonly NonDeletedExcalidrawElement[];
|
|
5
5
|
export declare const isElementInsideBBox: (element: Element, bbox: Bounds, eitherDirection?: boolean) => boolean;
|
package/history.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import { Emitter } from "@excalidraw/common";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
CaptureUpdateAction,
|
|
5
|
+
StoreChange,
|
|
6
|
+
StoreDelta,
|
|
7
|
+
type Store,
|
|
8
|
+
} from "@excalidraw/element/store";
|
|
9
|
+
|
|
10
|
+
import type { SceneElementsMap } from "@excalidraw/element/types";
|
|
11
|
+
|
|
5
12
|
import type { AppState } from "./types";
|
|
6
13
|
|
|
7
|
-
|
|
14
|
+
class HistoryEntry extends StoreDelta {}
|
|
8
15
|
|
|
9
16
|
export class HistoryChangedEvent {
|
|
10
17
|
constructor(
|
|
@@ -18,8 +25,8 @@ export class History {
|
|
|
18
25
|
[HistoryChangedEvent]
|
|
19
26
|
>();
|
|
20
27
|
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
public readonly undoStack: HistoryEntry[] = [];
|
|
29
|
+
public readonly redoStack: HistoryEntry[] = [];
|
|
23
30
|
|
|
24
31
|
public get isUndoStackEmpty() {
|
|
25
32
|
return this.undoStack.length === 0;
|
|
@@ -29,60 +36,52 @@ export class History {
|
|
|
29
36
|
return this.redoStack.length === 0;
|
|
30
37
|
}
|
|
31
38
|
|
|
39
|
+
constructor(private readonly store: Store) {}
|
|
40
|
+
|
|
32
41
|
public clear() {
|
|
33
42
|
this.undoStack.length = 0;
|
|
34
43
|
this.redoStack.length = 0;
|
|
35
44
|
}
|
|
36
45
|
|
|
37
46
|
/**
|
|
38
|
-
* Record a local
|
|
47
|
+
* Record a non-empty local durable increment, which will go into the undo stack..
|
|
48
|
+
* Do not re-record history entries, which were already pushed to undo / redo stack, as part of history action.
|
|
39
49
|
*/
|
|
40
|
-
public record(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const entry = HistoryEntry.create(appStateChange, elementsChange);
|
|
50
|
+
public record(delta: StoreDelta) {
|
|
51
|
+
if (delta.isEmpty() || delta instanceof HistoryEntry) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
45
54
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.undoStack.push(entry.inverse());
|
|
55
|
+
// construct history entry, so once it's emitted, it's not recorded again
|
|
56
|
+
const entry = HistoryEntry.inverse(delta);
|
|
49
57
|
|
|
50
|
-
|
|
51
|
-
// don't reset redo stack on local appState changes,
|
|
52
|
-
// as a simple click (unselect) could lead to losing all the redo entries
|
|
53
|
-
// only reset on non empty elements changes!
|
|
54
|
-
this.redoStack.length = 0;
|
|
55
|
-
}
|
|
58
|
+
this.undoStack.push(entry);
|
|
56
59
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
)
|
|
60
|
+
if (!entry.elements.isEmpty()) {
|
|
61
|
+
// don't reset redo stack on local appState changes,
|
|
62
|
+
// as a simple click (unselect) could lead to losing all the redo entries
|
|
63
|
+
// only reset on non empty elements changes!
|
|
64
|
+
this.redoStack.length = 0;
|
|
60
65
|
}
|
|
66
|
+
|
|
67
|
+
this.onHistoryChangedEmitter.trigger(
|
|
68
|
+
new HistoryChangedEvent(this.isUndoStackEmpty, this.isRedoStackEmpty),
|
|
69
|
+
);
|
|
61
70
|
}
|
|
62
71
|
|
|
63
|
-
public undo(
|
|
64
|
-
elements: SceneElementsMap,
|
|
65
|
-
appState: AppState,
|
|
66
|
-
snapshot: Readonly<Snapshot>,
|
|
67
|
-
) {
|
|
72
|
+
public undo(elements: SceneElementsMap, appState: AppState) {
|
|
68
73
|
return this.perform(
|
|
69
74
|
elements,
|
|
70
75
|
appState,
|
|
71
|
-
snapshot,
|
|
72
76
|
() => History.pop(this.undoStack),
|
|
73
77
|
(entry: HistoryEntry) => History.push(this.redoStack, entry, elements),
|
|
74
78
|
);
|
|
75
79
|
}
|
|
76
80
|
|
|
77
|
-
public redo(
|
|
78
|
-
elements: SceneElementsMap,
|
|
79
|
-
appState: AppState,
|
|
80
|
-
snapshot: Readonly<Snapshot>,
|
|
81
|
-
) {
|
|
81
|
+
public redo(elements: SceneElementsMap, appState: AppState) {
|
|
82
82
|
return this.perform(
|
|
83
83
|
elements,
|
|
84
84
|
appState,
|
|
85
|
-
snapshot,
|
|
86
85
|
() => History.pop(this.redoStack),
|
|
87
86
|
(entry: HistoryEntry) => History.push(this.undoStack, entry, elements),
|
|
88
87
|
);
|
|
@@ -91,7 +90,6 @@ export class History {
|
|
|
91
90
|
private perform(
|
|
92
91
|
elements: SceneElementsMap,
|
|
93
92
|
appState: AppState,
|
|
94
|
-
snapshot: Readonly<Snapshot>,
|
|
95
93
|
pop: () => HistoryEntry | null,
|
|
96
94
|
push: (entry: HistoryEntry) => void,
|
|
97
95
|
): [SceneElementsMap, AppState] | void {
|
|
@@ -102,6 +100,10 @@ export class History {
|
|
|
102
100
|
return;
|
|
103
101
|
}
|
|
104
102
|
|
|
103
|
+
const action = CaptureUpdateAction.IMMEDIATELY;
|
|
104
|
+
|
|
105
|
+
let prevSnapshot = this.store.snapshot;
|
|
106
|
+
|
|
105
107
|
let nextElements = elements;
|
|
106
108
|
let nextAppState = appState;
|
|
107
109
|
let containsVisibleChange = false;
|
|
@@ -110,9 +112,29 @@ export class History {
|
|
|
110
112
|
while (historyEntry) {
|
|
111
113
|
try {
|
|
112
114
|
[nextElements, nextAppState, containsVisibleChange] =
|
|
113
|
-
|
|
115
|
+
StoreDelta.applyTo(
|
|
116
|
+
historyEntry,
|
|
117
|
+
nextElements,
|
|
118
|
+
nextAppState,
|
|
119
|
+
prevSnapshot,
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
const nextSnapshot = prevSnapshot.maybeClone(
|
|
123
|
+
action,
|
|
124
|
+
nextElements,
|
|
125
|
+
nextAppState,
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
// schedule immediate capture, so that it's emitted for the sync purposes
|
|
129
|
+
this.store.scheduleMicroAction({
|
|
130
|
+
action,
|
|
131
|
+
change: StoreChange.create(prevSnapshot, nextSnapshot),
|
|
132
|
+
delta: historyEntry,
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
prevSnapshot = nextSnapshot;
|
|
114
136
|
} finally {
|
|
115
|
-
// make sure to always push
|
|
137
|
+
// make sure to always push, even if the delta is corrupted
|
|
116
138
|
push(historyEntry);
|
|
117
139
|
}
|
|
118
140
|
|
|
@@ -133,7 +155,7 @@ export class History {
|
|
|
133
155
|
}
|
|
134
156
|
}
|
|
135
157
|
|
|
136
|
-
private static pop(stack:
|
|
158
|
+
private static pop(stack: HistoryEntry[]): HistoryEntry | null {
|
|
137
159
|
if (!stack.length) {
|
|
138
160
|
return null;
|
|
139
161
|
}
|
|
@@ -148,63 +170,17 @@ export class History {
|
|
|
148
170
|
}
|
|
149
171
|
|
|
150
172
|
private static push(
|
|
151
|
-
stack:
|
|
173
|
+
stack: HistoryEntry[],
|
|
152
174
|
entry: HistoryEntry,
|
|
153
175
|
prevElements: SceneElementsMap,
|
|
154
176
|
) {
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
export class HistoryEntry {
|
|
161
|
-
private constructor(
|
|
162
|
-
public readonly appStateChange: AppStateChange,
|
|
163
|
-
public readonly elementsChange: ElementsChange,
|
|
164
|
-
) {}
|
|
165
|
-
|
|
166
|
-
public static create(
|
|
167
|
-
appStateChange: AppStateChange,
|
|
168
|
-
elementsChange: ElementsChange,
|
|
169
|
-
) {
|
|
170
|
-
return new HistoryEntry(appStateChange, elementsChange);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
public inverse(): HistoryEntry {
|
|
174
|
-
return new HistoryEntry(
|
|
175
|
-
this.appStateChange.inverse(),
|
|
176
|
-
this.elementsChange.inverse(),
|
|
177
|
+
const inversedEntry = HistoryEntry.inverse(entry);
|
|
178
|
+
const updatedEntry = HistoryEntry.applyLatestChanges(
|
|
179
|
+
inversedEntry,
|
|
180
|
+
prevElements,
|
|
181
|
+
"inserted",
|
|
177
182
|
);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
public applyTo(
|
|
181
|
-
elements: SceneElementsMap,
|
|
182
|
-
appState: AppState,
|
|
183
|
-
snapshot: Readonly<Snapshot>,
|
|
184
|
-
): [SceneElementsMap, AppState, boolean] {
|
|
185
|
-
const [nextElements, elementsContainVisibleChange] =
|
|
186
|
-
this.elementsChange.applyTo(elements, snapshot.elements);
|
|
187
183
|
|
|
188
|
-
|
|
189
|
-
this.appStateChange.applyTo(appState, nextElements);
|
|
190
|
-
|
|
191
|
-
const appliedVisibleChanges =
|
|
192
|
-
elementsContainVisibleChange || appStateContainsVisibleChange;
|
|
193
|
-
|
|
194
|
-
return [nextElements, nextAppState, appliedVisibleChanges];
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Apply latest (remote) changes to the history entry, creates new instance of `HistoryEntry`.
|
|
199
|
-
*/
|
|
200
|
-
public applyLatestChanges(elements: SceneElementsMap): HistoryEntry {
|
|
201
|
-
const updatedElementsChange =
|
|
202
|
-
this.elementsChange.applyLatestChanges(elements);
|
|
203
|
-
|
|
204
|
-
return HistoryEntry.create(this.appStateChange, updatedElementsChange);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
public isEmpty(): boolean {
|
|
208
|
-
return this.appStateChange.isEmpty() && this.elementsChange.isEmpty();
|
|
184
|
+
return stack.push(updatedEntry);
|
|
209
185
|
}
|
|
210
186
|
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@excalidraw/excalidraw",
|
|
3
|
-
"version": "0.18.0-
|
|
3
|
+
"version": "0.18.0-a30e1b2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/types/excalidraw/index.d.ts",
|
|
6
6
|
"main": "./dist/prod/index.js",
|
|
7
7
|
"module": "./dist/prod/index.js",
|
|
8
8
|
"exports": {
|
|
9
|
+
"./common/*": {
|
|
10
|
+
"types": "./dist/types/common/src/*.d.ts"
|
|
11
|
+
},
|
|
12
|
+
"./element/*": {
|
|
13
|
+
"types": "./dist/types/element/src/*.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./math/*": {
|
|
16
|
+
"types": "./dist/types/math/src/*.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./utils/*": {
|
|
19
|
+
"types": "./dist/types/utils/src/*.d.ts"
|
|
20
|
+
},
|
|
9
21
|
"./*": {
|
|
10
22
|
"types": "./dist/types/excalidraw/*.d.ts"
|
|
11
23
|
},
|
|
@@ -64,7 +76,7 @@
|
|
|
64
76
|
"@excalidraw/mermaid-to-excalidraw": "1.1.2",
|
|
65
77
|
"@excalidraw/random-username": "1.1.0",
|
|
66
78
|
"@radix-ui/react-popover": "1.1.6",
|
|
67
|
-
"@radix-ui/react-tabs": "1.
|
|
79
|
+
"@radix-ui/react-tabs": "1.1.3",
|
|
68
80
|
"browser-fs-access": "0.29.1",
|
|
69
81
|
"canvas-roundrect-polyfill": "0.0.1",
|
|
70
82
|
"clsx": "1.1.1",
|
|
@@ -117,7 +129,7 @@
|
|
|
117
129
|
"bugs": "https://github.com/excalidraw/excalidraw/issues",
|
|
118
130
|
"homepage": "https://github.com/excalidraw/excalidraw/tree/master/packages/excalidraw",
|
|
119
131
|
"scripts": {
|
|
120
|
-
"gen:types": "
|
|
121
|
-
"build:esm": "
|
|
132
|
+
"gen:types": "rimraf types && tsc",
|
|
133
|
+
"build:esm": "rimraf dist && node ../../scripts/buildPackage.js && yarn gen:types"
|
|
122
134
|
}
|
|
123
135
|
}
|