@tldraw/editor 3.16.0-internal.a478398270c6 → 3.16.0-internal.f8b97f0c414f
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/dist-cjs/index.d.ts +350 -142
- package/dist-cjs/index.js +13 -6
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/TldrawEditor.js +10 -8
- package/dist-cjs/lib/TldrawEditor.js.map +2 -2
- package/dist-cjs/lib/components/MenuClickCapture.js +0 -5
- package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
- package/dist-cjs/lib/components/SVGContainer.js +1 -1
- package/dist-cjs/lib/components/SVGContainer.js.map +2 -2
- package/dist-cjs/lib/components/Shape.js +11 -36
- package/dist-cjs/lib/components/Shape.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultBrush.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultBrush.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +15 -24
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCursor.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultCursor.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultGrid.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultGrid.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultHandles.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultHandles.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultScribble.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +9 -1
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultShapeWrapper.js +53 -0
- package/dist-cjs/lib/components/default-components/DefaultShapeWrapper.js.map +7 -0
- package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultSpinner.js +27 -15
- package/dist-cjs/lib/components/default-components/DefaultSpinner.js.map +3 -3
- package/dist-cjs/lib/config/TLUserPreferences.js +15 -3
- package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +174 -180
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +4 -0
- package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +2 -2
- package/dist-cjs/lib/editor/derivations/parentsToChildren.js.map +2 -2
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +14 -4
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/BaseBoxShapeUtil.js.map +1 -1
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js +23 -0
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.js.map +2 -2
- package/dist-cjs/lib/editor/tools/StateNode.js +20 -1
- package/dist-cjs/lib/editor/tools/StateNode.js.map +2 -2
- package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
- package/dist-cjs/lib/exports/getSvgJsx.js +35 -16
- package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
- package/dist-cjs/lib/hooks/useCanvasEvents.js +44 -35
- package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useDocumentEvents.js +5 -5
- package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useEditor.js +1 -4
- package/dist-cjs/lib/hooks/useEditor.js.map +2 -2
- package/dist-cjs/lib/hooks/useEditorComponents.js +2 -0
- package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
- package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js +1 -2
- package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
- package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useHandleEvents.js +3 -3
- package/dist-cjs/lib/hooks/useHandleEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js +4 -1
- package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js +4 -1
- package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useSelectionEvents.js +4 -4
- package/dist-cjs/lib/hooks/useSelectionEvents.js.map +2 -2
- package/dist-cjs/lib/{utils/nearestMultiple.js → hooks/useStateAttribute.js} +15 -14
- package/dist-cjs/lib/hooks/useStateAttribute.js.map +7 -0
- package/dist-cjs/lib/license/LicenseManager.js +140 -53
- package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
- package/dist-cjs/lib/license/LicenseProvider.js +39 -1
- package/dist-cjs/lib/license/LicenseProvider.js.map +2 -2
- package/dist-cjs/lib/license/Watermark.js +75 -13
- package/dist-cjs/lib/license/Watermark.js.map +3 -3
- package/dist-cjs/lib/license/useLicenseManagerState.js.map +2 -2
- package/dist-cjs/lib/options.js +7 -0
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/primitives/Box.js +3 -0
- package/dist-cjs/lib/primitives/Box.js.map +2 -2
- package/dist-cjs/lib/primitives/Vec.js +0 -4
- package/dist-cjs/lib/primitives/Vec.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Arc2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +3 -1
- package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js +50 -20
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Group2d.js +8 -1
- package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/geometry-constants.js +2 -2
- package/dist-cjs/lib/primitives/geometry/geometry-constants.js.map +2 -2
- package/dist-cjs/lib/primitives/intersect.js +4 -4
- package/dist-cjs/lib/primitives/intersect.js.map +2 -2
- package/dist-cjs/lib/primitives/utils.js +4 -0
- package/dist-cjs/lib/primitives/utils.js.map +2 -2
- package/dist-cjs/lib/utils/EditorAtom.js +45 -0
- package/dist-cjs/lib/utils/EditorAtom.js.map +7 -0
- package/dist-cjs/lib/utils/dom.js +12 -1
- package/dist-cjs/lib/utils/dom.js.map +2 -2
- package/dist-cjs/lib/utils/getPointerInfo.js +2 -2
- package/dist-cjs/lib/utils/getPointerInfo.js.map +2 -2
- package/dist-cjs/lib/utils/reparenting.js +2 -35
- package/dist-cjs/lib/utils/reparenting.js.map +3 -3
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +0 -1
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
- package/dist-cjs/version.js +3 -3
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +350 -142
- package/dist-esm/index.mjs +24 -8
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +11 -9
- package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
- package/dist-esm/lib/components/MenuClickCapture.mjs +0 -5
- package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
- package/dist-esm/lib/components/SVGContainer.mjs +1 -1
- package/dist-esm/lib/components/SVGContainer.mjs.map +2 -2
- package/dist-esm/lib/components/Shape.mjs +11 -36
- package/dist-esm/lib/components/Shape.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultBrush.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultBrush.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +16 -25
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +2 -2
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCursor.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultCursor.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultGrid.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultGrid.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultHandles.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultHandles.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +9 -1
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultShapeWrapper.mjs +23 -0
- package/dist-esm/lib/components/default-components/DefaultShapeWrapper.mjs.map +7 -0
- package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultSpinner.mjs +17 -15
- package/dist-esm/lib/components/default-components/DefaultSpinner.mjs.map +2 -2
- package/dist-esm/lib/config/TLUserPreferences.mjs +15 -3
- package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +174 -180
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +4 -0
- package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +2 -2
- package/dist-esm/lib/editor/derivations/parentsToChildren.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +14 -4
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/BaseBoxShapeUtil.mjs.map +1 -1
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +23 -0
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/StateNode.mjs +20 -1
- package/dist-esm/lib/editor/tools/StateNode.mjs.map +2 -2
- package/dist-esm/lib/exports/getSvgJsx.mjs +36 -16
- package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCanvasEvents.mjs +47 -37
- package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useDocumentEvents.mjs +11 -6
- package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEditor.mjs +1 -4
- package/dist-esm/lib/hooks/useEditor.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEditorComponents.mjs +4 -0
- package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs +2 -3
- package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useGestureEvents.mjs +2 -2
- package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useHandleEvents.mjs +9 -4
- package/dist-esm/lib/hooks/useHandleEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs +4 -1
- package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs +4 -1
- package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useSelectionEvents.mjs +6 -5
- package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useStateAttribute.mjs +15 -0
- package/dist-esm/lib/hooks/useStateAttribute.mjs.map +7 -0
- package/dist-esm/lib/license/LicenseManager.mjs +141 -54
- package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
- package/dist-esm/lib/license/LicenseProvider.mjs +39 -2
- package/dist-esm/lib/license/LicenseProvider.mjs.map +2 -2
- package/dist-esm/lib/license/Watermark.mjs +76 -14
- package/dist-esm/lib/license/Watermark.mjs.map +3 -3
- package/dist-esm/lib/license/useLicenseManagerState.mjs.map +2 -2
- package/dist-esm/lib/options.mjs +7 -0
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/primitives/Box.mjs +4 -1
- package/dist-esm/lib/primitives/Box.mjs.map +2 -2
- package/dist-esm/lib/primitives/Vec.mjs +0 -4
- package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +3 -1
- package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +53 -21
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Group2d.mjs +8 -1
- package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/geometry-constants.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/geometry-constants.mjs.map +2 -2
- package/dist-esm/lib/primitives/intersect.mjs +5 -5
- package/dist-esm/lib/primitives/intersect.mjs.map +2 -2
- package/dist-esm/lib/primitives/utils.mjs +4 -0
- package/dist-esm/lib/primitives/utils.mjs.map +2 -2
- package/dist-esm/lib/utils/EditorAtom.mjs +25 -0
- package/dist-esm/lib/utils/EditorAtom.mjs.map +7 -0
- package/dist-esm/lib/utils/dom.mjs +12 -1
- package/dist-esm/lib/utils/dom.mjs.map +2 -2
- package/dist-esm/lib/utils/getPointerInfo.mjs +2 -2
- package/dist-esm/lib/utils/getPointerInfo.mjs.map +2 -2
- package/dist-esm/lib/utils/reparenting.mjs +3 -40
- package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +0 -1
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +327 -315
- package/package.json +16 -38
- package/src/index.ts +19 -10
- package/src/lib/TldrawEditor.tsx +16 -21
- package/src/lib/components/MenuClickCapture.tsx +0 -8
- package/src/lib/components/SVGContainer.tsx +1 -1
- package/src/lib/components/Shape.tsx +12 -33
- package/src/lib/components/default-components/DefaultBrush.tsx +1 -1
- package/src/lib/components/default-components/DefaultCanvas.tsx +13 -24
- package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +2 -2
- package/src/lib/components/default-components/DefaultCursor.tsx +1 -1
- package/src/lib/components/default-components/DefaultErrorFallback.tsx +1 -1
- package/src/lib/components/default-components/DefaultGrid.tsx +1 -1
- package/src/lib/components/default-components/DefaultHandles.tsx +5 -1
- package/src/lib/components/default-components/DefaultScribble.tsx +1 -1
- package/src/lib/components/default-components/DefaultShapeIndicator.tsx +6 -2
- package/src/lib/components/default-components/DefaultShapeWrapper.tsx +35 -0
- package/src/lib/components/default-components/DefaultSnapIndictor.tsx +1 -1
- package/src/lib/components/default-components/DefaultSpinner.tsx +12 -12
- package/src/lib/config/TLUserPreferences.ts +15 -1
- package/src/lib/editor/Editor.test.ts +512 -8
- package/src/lib/editor/Editor.ts +252 -267
- package/src/lib/editor/derivations/notVisibleShapes.ts +6 -0
- package/src/lib/editor/derivations/parentsToChildren.ts +1 -1
- package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +15 -14
- package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +16 -15
- package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +49 -48
- package/src/lib/editor/managers/FontManager/FontManager.test.ts +38 -27
- package/src/lib/editor/managers/HistoryManager/HistoryManager.test.ts +7 -6
- package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +12 -11
- package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +57 -50
- package/src/lib/editor/managers/TextManager/TextManager.test.ts +51 -26
- package/src/lib/editor/managers/TickManager/TickManager.test.ts +14 -13
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +55 -26
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +14 -1
- package/src/lib/editor/shapes/BaseBoxShapeUtil.tsx +2 -2
- package/src/lib/editor/shapes/ShapeUtil.ts +108 -8
- package/src/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.ts +2 -1
- package/src/lib/editor/tools/StateNode.test.ts +285 -0
- package/src/lib/editor/tools/StateNode.ts +27 -1
- package/src/lib/editor/types/misc-types.ts +73 -7
- package/src/lib/exports/getSvgJsx.test.ts +874 -0
- package/src/lib/exports/getSvgJsx.tsx +78 -21
- package/src/lib/hooks/useCanvasEvents.ts +60 -47
- package/src/lib/hooks/useDocumentEvents.ts +11 -6
- package/src/lib/hooks/useEditor.tsx +6 -5
- package/src/lib/hooks/useEditorComponents.tsx +8 -2
- package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +2 -2
- package/src/lib/hooks/useGestureEvents.ts +2 -2
- package/src/lib/hooks/useHandleEvents.ts +9 -4
- package/src/lib/hooks/usePassThroughMouseOverEvents.ts +4 -1
- package/src/lib/hooks/usePassThroughWheelEvents.ts +6 -1
- package/src/lib/hooks/useSelectionEvents.ts +6 -5
- package/src/lib/hooks/useStateAttribute.ts +15 -0
- package/src/lib/license/LicenseManager.test.ts +724 -383
- package/src/lib/license/LicenseManager.ts +201 -58
- package/src/lib/license/LicenseProvider.tsx +74 -2
- package/src/lib/license/Watermark.test.tsx +2 -1
- package/src/lib/license/Watermark.tsx +81 -14
- package/src/lib/license/useLicenseManagerState.ts +2 -2
- package/src/lib/options.ts +8 -0
- package/src/lib/primitives/Box.test.ts +126 -0
- package/src/lib/primitives/Box.ts +10 -1
- package/src/lib/primitives/Vec.ts +0 -5
- package/src/lib/primitives/geometry/Arc2d.ts +2 -2
- package/src/lib/primitives/geometry/Circle2d.ts +2 -2
- package/src/lib/primitives/geometry/CubicBezier2d.ts +4 -1
- package/src/lib/primitives/geometry/Ellipse2d.ts +2 -2
- package/src/lib/primitives/geometry/Geometry2d.test.ts +420 -0
- package/src/lib/primitives/geometry/Geometry2d.ts +78 -21
- package/src/lib/primitives/geometry/Group2d.ts +10 -1
- package/src/lib/primitives/geometry/geometry-constants.ts +2 -1
- package/src/lib/primitives/intersect.test.ts +946 -0
- package/src/lib/primitives/intersect.ts +12 -5
- package/src/lib/primitives/utils.ts +11 -0
- package/src/lib/test/InFrontOfTheCanvas.test.tsx +187 -0
- package/src/lib/utils/EditorAtom.ts +37 -0
- package/src/lib/utils/dom.test.ts +94 -0
- package/src/lib/utils/dom.ts +38 -1
- package/src/lib/utils/getPointerInfo.ts +2 -1
- package/src/lib/utils/reparenting.ts +3 -69
- package/src/lib/utils/sync/LocalIndexedDb.test.ts +2 -1
- package/src/lib/utils/sync/TLLocalSyncClient.test.ts +15 -15
- package/src/lib/utils/sync/TLLocalSyncClient.ts +0 -1
- package/src/version.ts +3 -3
- package/dist-cjs/lib/utils/nearestMultiple.js.map +0 -7
- package/dist-esm/lib/utils/nearestMultiple.mjs +0 -14
- package/dist-esm/lib/utils/nearestMultiple.mjs.map +0 -7
- package/src/lib/test/currentToolIdMask.test.ts +0 -49
- package/src/lib/utils/nearestMultiple.ts +0 -13
|
@@ -46,7 +46,7 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
|
|
|
46
46
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
47
47
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
48
48
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
49
|
-
var __setMetaKeyTimeout_dec, __setCtrlKeyTimeout_dec, __setAltKeyTimeout_dec, __setShiftKeyTimeout_dec, _getIsReadonly_dec, _getIsFocused_dec, _getSharedOpacity_dec, _getSharedStyles_dec, __getSelectionSharedStyles_dec, __getBindingsIndexCache_dec, _getCurrentPageRenderingShapesSorted_dec, _getCurrentPageShapesSorted_dec, _getCurrentPageShapes_dec, _getCurrentPageBounds_dec, _getCulledShapes_dec, _getNotVisibleShapes_dec, __getShapeMaskedPageBoundsCache_dec, __getShapeMaskCache_dec, __getShapeClipPathCache_dec, __getShapePageBoundsCache_dec, __getShapePageTransformCache_dec, __getShapeHandlesCache_dec, __getAllAssetsQuery_dec, _getCurrentPageShapeIdsSorted_dec, _getCurrentPageId_dec, _getPages_dec, __getAllPagesQuery_dec, _getRenderingShapes_dec, _getCollaboratorsOnCurrentPage_dec, _getCollaborators_dec, __getCollaboratorsQuery_dec, _getViewportPageBounds_dec, _getViewportScreenCenter_dec, _getViewportScreenBounds_dec, _getZoomLevel_dec, _getCameraForFollowing_dec, _getViewportPageBoundsForFollowing_dec, _getCamera_dec, __unsafe_getCameraId_dec, _getErasingShapes_dec, _getErasingShapeIds_dec, _getHintingShape_dec, _getHintingShapeIds_dec, _getHoveredShape_dec, _getHoveredShapeId_dec, _getRichTextEditor_dec, _getEditingShape_dec, _getEditingShapeId_dec, _getFocusedGroup_dec, _getFocusedGroupId_dec, _getSelectionRotatedScreenBounds_dec, _getSelectionRotatedPageBounds_dec, _getSelectionRotation_dec, _getSelectionPageBounds_dec, _getOnlySelectedShape_dec, _getOnlySelectedShapeId_dec, _getCurrentPageShapesInReadingOrder_dec, _getSelectedShapes_dec, _getSelectedShapeIds_dec, __getCurrentPageStateId_dec, _getCurrentPageState_dec, __getPageStatesQuery_dec, _getPageStates_dec,
|
|
49
|
+
var __setMetaKeyTimeout_dec, __setCtrlKeyTimeout_dec, __setAltKeyTimeout_dec, __setShiftKeyTimeout_dec, _getIsReadonly_dec, _getIsFocused_dec, _getSharedOpacity_dec, _getSharedStyles_dec, __getSelectionSharedStyles_dec, __getBindingsIndexCache_dec, _getCurrentPageRenderingShapesSorted_dec, _getCurrentPageShapesSorted_dec, _getCurrentPageShapes_dec, _getCurrentPageBounds_dec, _getCulledShapes_dec, _getNotVisibleShapes_dec, __getShapeMaskedPageBoundsCache_dec, __getShapeMaskCache_dec, __getShapeClipPathCache_dec, __getShapePageBoundsCache_dec, __getShapePageTransformCache_dec, __getShapeHandlesCache_dec, __getAllAssetsQuery_dec, _getCurrentPageShapeIdsSorted_dec, _getCurrentPageId_dec, _getPages_dec, __getAllPagesQuery_dec, _getRenderingShapes_dec, _getCollaboratorsOnCurrentPage_dec, _getCollaborators_dec, __getCollaboratorsQuery_dec, _getViewportPageBounds_dec, _getViewportScreenCenter_dec, _getViewportScreenBounds_dec, _getZoomLevel_dec, _getCameraForFollowing_dec, _getViewportPageBoundsForFollowing_dec, _getCamera_dec, __unsafe_getCameraId_dec, _getErasingShapes_dec, _getErasingShapeIds_dec, _getHintingShape_dec, _getHintingShapeIds_dec, _getHoveredShape_dec, _getHoveredShapeId_dec, _getRichTextEditor_dec, _getEditingShape_dec, _getEditingShapeId_dec, _getFocusedGroup_dec, _getFocusedGroupId_dec, _getSelectionRotatedScreenBounds_dec, _getSelectionRotatedPageBounds_dec, _getSelectionRotation_dec, _getSelectionPageBounds_dec, _getOnlySelectedShape_dec, _getOnlySelectedShapeId_dec, _getCurrentPageShapesInReadingOrder_dec, _getSelectedShapes_dec, _getSelectedShapeIds_dec, __getCurrentPageStateId_dec, _getCurrentPageState_dec, __getPageStatesQuery_dec, _getPageStates_dec, _getInstanceState_dec, _getDocumentSettings_dec, _getCurrentToolId_dec, _getCurrentTool_dec, _getPath_dec, _getCanRedo_dec, _getCanUndo_dec, _getIsShapeHiddenCache_dec, _a, _init;
|
|
50
50
|
import {
|
|
51
51
|
EMPTY_ARRAY,
|
|
52
52
|
atom,
|
|
@@ -120,7 +120,6 @@ import {
|
|
|
120
120
|
} from "../constants.mjs";
|
|
121
121
|
import { exportToSvg } from "../exports/exportToSvg.mjs";
|
|
122
122
|
import { getSvgAsImage } from "../exports/getSvgAsImage.mjs";
|
|
123
|
-
import { tlenv } from "../globals/environment.mjs";
|
|
124
123
|
import { tlmenus } from "../globals/menus.mjs";
|
|
125
124
|
import { tltime } from "../globals/time.mjs";
|
|
126
125
|
import { defaultTldrawOptions } from "../options.mjs";
|
|
@@ -158,7 +157,7 @@ import { TextManager } from "./managers/TextManager/TextManager.mjs";
|
|
|
158
157
|
import { TickManager } from "./managers/TickManager/TickManager.mjs";
|
|
159
158
|
import { UserPreferencesManager } from "./managers/UserPreferencesManager/UserPreferencesManager.mjs";
|
|
160
159
|
import { RootState } from "./tools/RootState.mjs";
|
|
161
|
-
class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed], _getCanUndo_dec = [computed], _getCanRedo_dec = [computed], _getPath_dec = [computed], _getCurrentTool_dec = [computed], _getCurrentToolId_dec = [computed], _getDocumentSettings_dec = [computed], _getInstanceState_dec = [computed],
|
|
160
|
+
class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed], _getCanUndo_dec = [computed], _getCanRedo_dec = [computed], _getPath_dec = [computed], _getCurrentTool_dec = [computed], _getCurrentToolId_dec = [computed], _getDocumentSettings_dec = [computed], _getInstanceState_dec = [computed], _getPageStates_dec = [computed], __getPageStatesQuery_dec = [computed], _getCurrentPageState_dec = [computed], __getCurrentPageStateId_dec = [computed], _getSelectedShapeIds_dec = [computed], _getSelectedShapes_dec = [computed], _getCurrentPageShapesInReadingOrder_dec = [computed], _getOnlySelectedShapeId_dec = [computed], _getOnlySelectedShape_dec = [computed], _getSelectionPageBounds_dec = [computed], _getSelectionRotation_dec = [computed], _getSelectionRotatedPageBounds_dec = [computed], _getSelectionRotatedScreenBounds_dec = [computed], _getFocusedGroupId_dec = [computed], _getFocusedGroup_dec = [computed], _getEditingShapeId_dec = [computed], _getEditingShape_dec = [computed], _getRichTextEditor_dec = [computed], _getHoveredShapeId_dec = [computed], _getHoveredShape_dec = [computed], _getHintingShapeIds_dec = [computed], _getHintingShape_dec = [computed], _getErasingShapeIds_dec = [computed], _getErasingShapes_dec = [computed], __unsafe_getCameraId_dec = [computed], _getCamera_dec = [computed], _getViewportPageBoundsForFollowing_dec = [computed], _getCameraForFollowing_dec = [computed], _getZoomLevel_dec = [computed], _getViewportScreenBounds_dec = [computed], _getViewportScreenCenter_dec = [computed], _getViewportPageBounds_dec = [computed], __getCollaboratorsQuery_dec = [computed], _getCollaborators_dec = [computed], _getCollaboratorsOnCurrentPage_dec = [computed], _getRenderingShapes_dec = [computed], __getAllPagesQuery_dec = [computed], _getPages_dec = [computed], _getCurrentPageId_dec = [computed], _getCurrentPageShapeIdsSorted_dec = [computed], __getAllAssetsQuery_dec = [computed], __getShapeHandlesCache_dec = [computed], __getShapePageTransformCache_dec = [computed], __getShapePageBoundsCache_dec = [computed], __getShapeClipPathCache_dec = [computed], __getShapeMaskCache_dec = [computed], __getShapeMaskedPageBoundsCache_dec = [computed], _getNotVisibleShapes_dec = [computed], _getCulledShapes_dec = [computed], _getCurrentPageBounds_dec = [computed], _getCurrentPageShapes_dec = [computed], _getCurrentPageShapesSorted_dec = [computed], _getCurrentPageRenderingShapesSorted_dec = [computed], __getBindingsIndexCache_dec = [computed], __getSelectionSharedStyles_dec = [computed], _getSharedStyles_dec = [computed({ isEqual: (a, b) => a.equals(b) })], _getSharedOpacity_dec = [computed], _getIsFocused_dec = [computed], _getIsReadonly_dec = [computed], __setShiftKeyTimeout_dec = [bind], __setAltKeyTimeout_dec = [bind], __setCtrlKeyTimeout_dec = [bind], __setMetaKeyTimeout_dec = [bind], _a) {
|
|
162
161
|
constructor({
|
|
163
162
|
store,
|
|
164
163
|
user,
|
|
@@ -172,8 +171,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
172
171
|
autoFocus,
|
|
173
172
|
inferDarkMode,
|
|
174
173
|
options,
|
|
175
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
176
|
-
isShapeHidden,
|
|
177
174
|
getShapeVisibility,
|
|
178
175
|
fontAssetUrls
|
|
179
176
|
}) {
|
|
@@ -240,13 +237,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
240
237
|
* @public
|
|
241
238
|
*/
|
|
242
239
|
__publicField(this, "fonts");
|
|
243
|
-
/**
|
|
244
|
-
* A manager for the editor's environment.
|
|
245
|
-
*
|
|
246
|
-
* @deprecated This is deprecated and will be removed in a future version. Use the `tlenv` global export instead.
|
|
247
|
-
* @public
|
|
248
|
-
*/
|
|
249
|
-
__publicField(this, "environment", tlenv);
|
|
250
240
|
/**
|
|
251
241
|
* A manager for the editor's scribbles.
|
|
252
242
|
*
|
|
@@ -449,14 +439,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
449
439
|
/** @internal */
|
|
450
440
|
__publicField(this, "performanceTrackerTimeout", -1);
|
|
451
441
|
__publicField(this, "_pendingEventsForNextTick", []);
|
|
452
|
-
|
|
453
|
-
!(isShapeHidden && getShapeVisibility),
|
|
454
|
-
"Cannot use both isShapeHidden and getShapeVisibility"
|
|
455
|
-
);
|
|
456
|
-
this._getShapeVisibility = isShapeHidden ? (
|
|
457
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
458
|
-
((shape, editor) => isShapeHidden(shape, editor) ? "hidden" : "inherit")
|
|
459
|
-
) : getShapeVisibility;
|
|
442
|
+
this._getShapeVisibility = getShapeVisibility;
|
|
460
443
|
this.options = { ...defaultTldrawOptions, ...options };
|
|
461
444
|
this.store = store;
|
|
462
445
|
this.history = new HistoryManager({
|
|
@@ -936,34 +919,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
936
919
|
getCanRedo() {
|
|
937
920
|
return this.history.getNumRedos() > 0;
|
|
938
921
|
}
|
|
939
|
-
/**
|
|
940
|
-
* Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear
|
|
941
|
-
* any redos.
|
|
942
|
-
*
|
|
943
|
-
* @example
|
|
944
|
-
* ```ts
|
|
945
|
-
* editor.mark()
|
|
946
|
-
* editor.mark('flip shapes')
|
|
947
|
-
* ```
|
|
948
|
-
*
|
|
949
|
-
* @param markId - The mark's id, usually the reason for adding the mark.
|
|
950
|
-
*
|
|
951
|
-
* @public
|
|
952
|
-
* @deprecated use {@link Editor.markHistoryStoppingPoint} instead
|
|
953
|
-
*/
|
|
954
|
-
mark(markId) {
|
|
955
|
-
if (typeof markId === "string") {
|
|
956
|
-
console.warn(
|
|
957
|
-
`[tldraw] \`editor.history.mark("${markId}")\` is deprecated. Please use \`const myMarkId = editor.markHistoryStoppingPoint()\` instead.`
|
|
958
|
-
);
|
|
959
|
-
} else {
|
|
960
|
-
console.warn(
|
|
961
|
-
"[tldraw] `editor.mark()` is deprecated. Use `editor.markHistoryStoppingPoint()` instead."
|
|
962
|
-
);
|
|
963
|
-
}
|
|
964
|
-
this.history._mark(markId ?? uniqueId());
|
|
965
|
-
return this;
|
|
966
|
-
}
|
|
967
922
|
/**
|
|
968
923
|
* Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear
|
|
969
924
|
* any redos. You typically want to do this just before a user interaction begins or is handled.
|
|
@@ -1079,12 +1034,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1079
1034
|
}
|
|
1080
1035
|
return this;
|
|
1081
1036
|
}
|
|
1082
|
-
/**
|
|
1083
|
-
* @deprecated Use `Editor.run` instead.
|
|
1084
|
-
*/
|
|
1085
|
-
batch(fn, opts) {
|
|
1086
|
-
return this.run(fn, opts);
|
|
1087
|
-
}
|
|
1088
1037
|
/* --------------------- Errors --------------------- */
|
|
1089
1038
|
/** @internal */
|
|
1090
1039
|
annotateError(error, {
|
|
@@ -1306,39 +1255,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1306
1255
|
]);
|
|
1307
1256
|
}, opts);
|
|
1308
1257
|
}
|
|
1309
|
-
getOpenMenus() {
|
|
1310
|
-
return this.menus.getOpenMenus();
|
|
1311
|
-
}
|
|
1312
|
-
/**
|
|
1313
|
-
* @deprecated Use `editor.menus.addOpenMenu` instead.
|
|
1314
|
-
*
|
|
1315
|
-
* @public
|
|
1316
|
-
*/
|
|
1317
|
-
addOpenMenu(id) {
|
|
1318
|
-
this.menus.addOpenMenu(id);
|
|
1319
|
-
return this;
|
|
1320
|
-
}
|
|
1321
|
-
/**
|
|
1322
|
-
* @deprecated Use `editor.menus.deleteOpenMenu` instead.
|
|
1323
|
-
*
|
|
1324
|
-
* @public
|
|
1325
|
-
*/
|
|
1326
|
-
deleteOpenMenu(id) {
|
|
1327
|
-
this.menus.deleteOpenMenu(id);
|
|
1328
|
-
return this;
|
|
1329
|
-
}
|
|
1330
|
-
/**
|
|
1331
|
-
* @deprecated Use `editor.menus.clearOpenMenus` instead.
|
|
1332
|
-
*
|
|
1333
|
-
* @public
|
|
1334
|
-
*/
|
|
1335
|
-
clearOpenMenus() {
|
|
1336
|
-
this.menus.clearOpenMenus();
|
|
1337
|
-
return this;
|
|
1338
|
-
}
|
|
1339
|
-
getIsMenuOpen() {
|
|
1340
|
-
return this.menus.hasAnyOpenMenus();
|
|
1341
|
-
}
|
|
1342
1258
|
/* --------------------- Cursor --------------------- */
|
|
1343
1259
|
/**
|
|
1344
1260
|
* Set the cursor.
|
|
@@ -1466,7 +1382,9 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1466
1382
|
return this;
|
|
1467
1383
|
}
|
|
1468
1384
|
/**
|
|
1469
|
-
* Select all
|
|
1385
|
+
* Select all shapes. If the user has selected shapes that share a parent,
|
|
1386
|
+
* select all shapes within that parent. If the user has not selected any shapes,
|
|
1387
|
+
* or if the shapes shapes are only on select all shapes on the current page.
|
|
1470
1388
|
*
|
|
1471
1389
|
* @example
|
|
1472
1390
|
* ```ts
|
|
@@ -1476,7 +1394,23 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1476
1394
|
* @public
|
|
1477
1395
|
*/
|
|
1478
1396
|
selectAll() {
|
|
1479
|
-
|
|
1397
|
+
let parentToSelectWithinId = null;
|
|
1398
|
+
const selectedShapeIds = this.getSelectedShapeIds();
|
|
1399
|
+
if (selectedShapeIds.length > 0) {
|
|
1400
|
+
for (const id of selectedShapeIds) {
|
|
1401
|
+
const shape = this.getShape(id);
|
|
1402
|
+
if (!shape) continue;
|
|
1403
|
+
if (parentToSelectWithinId === null) {
|
|
1404
|
+
parentToSelectWithinId = shape.parentId;
|
|
1405
|
+
} else if (parentToSelectWithinId !== shape.parentId) {
|
|
1406
|
+
return this;
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
if (!parentToSelectWithinId) {
|
|
1411
|
+
parentToSelectWithinId = this.getCurrentPageId();
|
|
1412
|
+
}
|
|
1413
|
+
const ids = this.getSortedChildIdsForParent(parentToSelectWithinId);
|
|
1480
1414
|
if (ids.length <= 0) return this;
|
|
1481
1415
|
this.setSelectedShapes(this._getUnlockedShapeIds(ids));
|
|
1482
1416
|
return this;
|
|
@@ -1495,9 +1429,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1495
1429
|
const selectedShapeIds = this.getSelectedShapeIds();
|
|
1496
1430
|
const firstParentId = selectedShapeIds[0] ? this.getShape(selectedShapeIds[0])?.parentId : null;
|
|
1497
1431
|
const isSelectedWithinContainer = firstParentId && selectedShapeIds.every((shapeId) => this.getShape(shapeId)?.parentId === firstParentId) && !isPageId(firstParentId);
|
|
1498
|
-
const
|
|
1499
|
-
|
|
1500
|
-
) : this.getCurrentPageShapesInReadingOrder();
|
|
1432
|
+
const filteredShapes = isSelectedWithinContainer ? this.getCurrentPageShapes().filter((shape2) => shape2.parentId === firstParentId) : this.getCurrentPageShapes().filter((shape2) => isPageId(shape2.parentId));
|
|
1433
|
+
const readingOrderShapes = isSelectedWithinContainer ? this._getShapesInReadingOrder(filteredShapes) : this.getCurrentPageShapesInReadingOrder();
|
|
1501
1434
|
const currentShapeId = selectedShapeIds.length === 1 ? selectedShapeIds[0] : readingOrderShapes.find((shape2) => selectedShapeIds.includes(shape2.id))?.id;
|
|
1502
1435
|
let adjacentShapeId;
|
|
1503
1436
|
if (direction === "next" || direction === "prev") {
|
|
@@ -1507,7 +1440,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1507
1440
|
adjacentShapeId = shapeIds[adjacentIndex];
|
|
1508
1441
|
} else {
|
|
1509
1442
|
if (!currentShapeId) return;
|
|
1510
|
-
adjacentShapeId = this.getNearestAdjacentShape(currentShapeId, direction);
|
|
1443
|
+
adjacentShapeId = this.getNearestAdjacentShape(filteredShapes, currentShapeId, direction);
|
|
1511
1444
|
}
|
|
1512
1445
|
const shape = this.getShape(adjacentShapeId);
|
|
1513
1446
|
if (!shape) return;
|
|
@@ -1573,11 +1506,10 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1573
1506
|
*
|
|
1574
1507
|
* @public
|
|
1575
1508
|
*/
|
|
1576
|
-
getNearestAdjacentShape(currentShapeId, direction) {
|
|
1509
|
+
getNearestAdjacentShape(shapes, currentShapeId, direction) {
|
|
1577
1510
|
const directionToAngle = { right: 0, left: 180, down: 90, up: 270 };
|
|
1578
1511
|
const currentShape = this.getShape(currentShapeId);
|
|
1579
1512
|
if (!currentShape) return currentShapeId;
|
|
1580
|
-
const shapes = this.getCurrentPageShapes();
|
|
1581
1513
|
const tabbableShapes = shapes.filter(
|
|
1582
1514
|
(shape) => this.getShapeUtil(shape).canTabTo(shape) && shape.id !== currentShapeId
|
|
1583
1515
|
);
|
|
@@ -2341,28 +2273,11 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
2341
2273
|
{ history: "ignore" }
|
|
2342
2274
|
);
|
|
2343
2275
|
const { currentScreenPoint, currentPagePoint } = this.inputs;
|
|
2344
|
-
const { screenBounds } = this.store.unsafeGetWithoutCapture(TLINSTANCE_ID);
|
|
2345
2276
|
if (currentScreenPoint.x / z - x !== currentPagePoint.x || currentScreenPoint.y / z - y !== currentPagePoint.y) {
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
// weird but true: we need to put the screen point back into client space
|
|
2351
|
-
point: Vec.AddXY(currentScreenPoint, screenBounds.x, screenBounds.y),
|
|
2352
|
-
pointerId: INTERNAL_POINTER_IDS.CAMERA_MOVE,
|
|
2353
|
-
ctrlKey: this.inputs.ctrlKey,
|
|
2354
|
-
altKey: this.inputs.altKey,
|
|
2355
|
-
shiftKey: this.inputs.shiftKey,
|
|
2356
|
-
metaKey: this.inputs.metaKey,
|
|
2357
|
-
accelKey: isAccelKey(this.inputs),
|
|
2358
|
-
button: 0,
|
|
2359
|
-
isPen: this.getInstanceState().isPenMode ?? false
|
|
2360
|
-
};
|
|
2361
|
-
if (opts?.immediate) {
|
|
2362
|
-
this._flushEventForTick(event);
|
|
2363
|
-
} else {
|
|
2364
|
-
this.dispatch(event);
|
|
2365
|
-
}
|
|
2277
|
+
this.updatePointer({
|
|
2278
|
+
immediate: opts?.immediate,
|
|
2279
|
+
pointerId: INTERNAL_POINTER_IDS.CAMERA_MOVE
|
|
2280
|
+
});
|
|
2366
2281
|
}
|
|
2367
2282
|
this._tickCameraState();
|
|
2368
2283
|
});
|
|
@@ -3331,19 +3246,24 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3331
3246
|
*/
|
|
3332
3247
|
deletePage(page) {
|
|
3333
3248
|
const id = typeof page === "string" ? page : page.id;
|
|
3334
|
-
this.run(
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3249
|
+
this.run(
|
|
3250
|
+
() => {
|
|
3251
|
+
if (this.getIsReadonly()) return;
|
|
3252
|
+
const pages = this.getPages();
|
|
3253
|
+
if (pages.length === 1) return;
|
|
3254
|
+
const deletedPage = this.getPage(id);
|
|
3255
|
+
if (!deletedPage) return;
|
|
3256
|
+
if (id === this.getCurrentPageId()) {
|
|
3257
|
+
const index = pages.findIndex((page2) => page2.id === id);
|
|
3258
|
+
const next = pages[index - 1] ?? pages[index + 1];
|
|
3259
|
+
this.setCurrentPage(next.id);
|
|
3260
|
+
}
|
|
3261
|
+
const shapes = this.getSortedChildIdsForParent(deletedPage.id);
|
|
3262
|
+
this.deleteShapes(shapes);
|
|
3263
|
+
this.store.remove([deletedPage.id]);
|
|
3264
|
+
},
|
|
3265
|
+
{ ignoreShapeLock: true }
|
|
3266
|
+
);
|
|
3347
3267
|
return this;
|
|
3348
3268
|
}
|
|
3349
3269
|
/**
|
|
@@ -3642,8 +3562,9 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3642
3562
|
return this.store.createComputedCache("pageBoundsCache", (shape) => {
|
|
3643
3563
|
const pageTransform = this.getShapePageTransform(shape);
|
|
3644
3564
|
if (!pageTransform) return void 0;
|
|
3645
|
-
|
|
3646
|
-
|
|
3565
|
+
return Box.FromPoints(
|
|
3566
|
+
pageTransform.applyToPoints(this.getShapeGeometry(shape).boundsVertices)
|
|
3567
|
+
);
|
|
3647
3568
|
});
|
|
3648
3569
|
}
|
|
3649
3570
|
/**
|
|
@@ -3696,16 +3617,17 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3696
3617
|
_getShapeMaskCache() {
|
|
3697
3618
|
return this.store.createComputedCache("pageMaskCache", (shape) => {
|
|
3698
3619
|
if (isPageId(shape.parentId)) return void 0;
|
|
3699
|
-
const
|
|
3700
|
-
|
|
3701
|
-
|
|
3702
|
-
|
|
3703
|
-
|
|
3704
|
-
|
|
3705
|
-
const pageTransform = this.getShapePageTransform(
|
|
3706
|
-
|
|
3707
|
-
}
|
|
3708
|
-
|
|
3620
|
+
const clipPaths = [];
|
|
3621
|
+
for (const ancestor of this.getShapeAncestors(shape.id)) {
|
|
3622
|
+
const util = this.getShapeUtil(ancestor);
|
|
3623
|
+
const clipPath = util.getClipPath?.(ancestor);
|
|
3624
|
+
if (!clipPath) continue;
|
|
3625
|
+
if (util.shouldClipChild?.(shape) === false) continue;
|
|
3626
|
+
const pageTransform = this.getShapePageTransform(ancestor.id);
|
|
3627
|
+
clipPaths.push(pageTransform.applyToPoints(clipPath));
|
|
3628
|
+
}
|
|
3629
|
+
if (clipPaths.length === 0) return void 0;
|
|
3630
|
+
const pageMask = clipPaths.reduce((acc, b) => {
|
|
3709
3631
|
const intersection = intersectPolygonPolygon(acc, b);
|
|
3710
3632
|
if (intersection) {
|
|
3711
3633
|
return intersection.map(Vec.Cast);
|
|
@@ -3940,6 +3862,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3940
3862
|
hitInside = false,
|
|
3941
3863
|
hitFrameInside = false
|
|
3942
3864
|
} = opts;
|
|
3865
|
+
const [innerMargin, outerMargin] = Array.isArray(margin) ? margin : [margin, margin];
|
|
3943
3866
|
let inHollowSmallestArea = Infinity;
|
|
3944
3867
|
let inHollowSmallestAreaHit = null;
|
|
3945
3868
|
let inMarginClosestToEdgeDistance = Infinity;
|
|
@@ -3949,7 +3872,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3949
3872
|
return false;
|
|
3950
3873
|
const pageMask = this.getShapeMask(shape);
|
|
3951
3874
|
if (pageMask && !pointInPolygon(point, pageMask)) return false;
|
|
3952
|
-
if (filter
|
|
3875
|
+
if (filter && !filter(shape)) return false;
|
|
3953
3876
|
return true;
|
|
3954
3877
|
});
|
|
3955
3878
|
for (let i = shapesToCheck.length - 1; i >= 0; i--) {
|
|
@@ -3957,7 +3880,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3957
3880
|
const geometry = this.getShapeGeometry(shape);
|
|
3958
3881
|
const isGroup = geometry instanceof Group2d;
|
|
3959
3882
|
const pointInShapeSpace = this.getPointInShapeSpace(shape, point);
|
|
3960
|
-
if (this.isShapeOfType(shape, "frame") || this.isShapeOfType(shape, "
|
|
3883
|
+
if (this.isShapeOfType(shape, "frame") || (this.isShapeOfType(shape, "note") || this.isShapeOfType(shape, "arrow") || this.isShapeOfType(shape, "geo") && shape.props.fill === "none") && this.getShapeUtil(shape).getText(shape)?.trim()) {
|
|
3961
3884
|
for (const childGeometry of geometry.children) {
|
|
3962
3885
|
if (childGeometry.isLabel && childGeometry.isPointInBounds(pointInShapeSpace)) {
|
|
3963
3886
|
return shape;
|
|
@@ -3965,8 +3888,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3965
3888
|
}
|
|
3966
3889
|
}
|
|
3967
3890
|
if (this.isShapeOfType(shape, "frame")) {
|
|
3968
|
-
const distance2 = geometry.distanceToPoint(pointInShapeSpace,
|
|
3969
|
-
if (
|
|
3891
|
+
const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitFrameInside);
|
|
3892
|
+
if (hitFrameInside ? distance2 > 0 && distance2 <= outerMargin || distance2 <= 0 && distance2 > -innerMargin : distance2 > 0 && distance2 <= outerMargin) {
|
|
3970
3893
|
return inMarginClosestToEdgeHit || shape;
|
|
3971
3894
|
}
|
|
3972
3895
|
if (geometry.hitTestPoint(pointInShapeSpace, 0, true)) {
|
|
@@ -3986,10 +3909,10 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3986
3909
|
}
|
|
3987
3910
|
distance = minDistance;
|
|
3988
3911
|
} else {
|
|
3989
|
-
if (
|
|
3912
|
+
if (outerMargin === 0 && (geometry.bounds.w < 1 || geometry.bounds.h < 1)) {
|
|
3990
3913
|
distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
|
|
3991
3914
|
} else {
|
|
3992
|
-
if (geometry.bounds.containsPoint(pointInShapeSpace,
|
|
3915
|
+
if (geometry.bounds.containsPoint(pointInShapeSpace, outerMargin)) {
|
|
3993
3916
|
distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
|
|
3994
3917
|
} else {
|
|
3995
3918
|
distance = Infinity;
|
|
@@ -3997,12 +3920,22 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3997
3920
|
}
|
|
3998
3921
|
}
|
|
3999
3922
|
if (geometry.isClosed) {
|
|
4000
|
-
if (distance <=
|
|
3923
|
+
if (distance <= outerMargin || hitInside && distance <= 0 && distance > -innerMargin) {
|
|
4001
3924
|
if (geometry.isFilled || isGroup && geometry.children[0].isFilled) {
|
|
4002
3925
|
return inMarginClosestToEdgeHit || shape;
|
|
4003
3926
|
} else {
|
|
4004
3927
|
if (this.getShapePageBounds(shape).contains(viewportPageBounds)) continue;
|
|
4005
|
-
if (
|
|
3928
|
+
if (hitInside ? (
|
|
3929
|
+
// On hitInside, the distance will be negative for hits inside
|
|
3930
|
+
// If the distance is positive, check against the outer margin
|
|
3931
|
+
(// If the distance is negative, check against the inner margin
|
|
3932
|
+
distance > 0 && distance <= outerMargin || distance <= 0 && distance > -innerMargin)
|
|
3933
|
+
) : (
|
|
3934
|
+
// If hitInside is false, then sadly _we do not know_ whether the
|
|
3935
|
+
// point is inside or outside of the shape, so we check against
|
|
3936
|
+
// the max of the two margins
|
|
3937
|
+
(Math.abs(distance) <= Math.max(innerMargin, outerMargin))
|
|
3938
|
+
)) {
|
|
4006
3939
|
if (Math.abs(distance) < inMarginClosestToEdgeDistance) {
|
|
4007
3940
|
inMarginClosestToEdgeDistance = Math.abs(distance);
|
|
4008
3941
|
inMarginClosestToEdgeHit = shape;
|
|
@@ -4392,10 +4325,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
4392
4325
|
}
|
|
4393
4326
|
return shapeIds;
|
|
4394
4327
|
}
|
|
4395
|
-
/** @deprecated Use {@link Editor.getDraggingOverShape} instead */
|
|
4396
|
-
getDroppingOverShape(point, droppingShapes) {
|
|
4397
|
-
return this.getDraggingOverShape(point, droppingShapes);
|
|
4398
|
-
}
|
|
4399
4328
|
/**
|
|
4400
4329
|
* Get the shape that some shapes should be dropped on at a given point.
|
|
4401
4330
|
*
|
|
@@ -4767,7 +4696,16 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
4767
4696
|
}
|
|
4768
4697
|
this.createShapes(shapesToCreate);
|
|
4769
4698
|
this.createBindings(bindingsToCreate);
|
|
4770
|
-
this.setSelectedShapes(
|
|
4699
|
+
this.setSelectedShapes(
|
|
4700
|
+
compact(
|
|
4701
|
+
ids.map((oldId) => {
|
|
4702
|
+
const newId = shapeIds.get(oldId);
|
|
4703
|
+
if (!newId) return null;
|
|
4704
|
+
if (!this.getShape(newId)) return null;
|
|
4705
|
+
return newId;
|
|
4706
|
+
})
|
|
4707
|
+
)
|
|
4708
|
+
);
|
|
4771
4709
|
if (offset !== void 0) {
|
|
4772
4710
|
const selectionPageBounds = this.getSelectionPageBounds();
|
|
4773
4711
|
const viewportPageBounds = this.getViewportPageBounds();
|
|
@@ -5521,8 +5459,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
5521
5459
|
const shapesMovingTogether = [shape];
|
|
5522
5460
|
const boundsOfShapesMovingTogether = [shapePageBounds];
|
|
5523
5461
|
if (!this.getShapeUtil(shape).canBeLaidOut?.(shape, {
|
|
5524
|
-
type: "stretch"
|
|
5525
|
-
shapes: shapesToStretchFirstPass
|
|
5462
|
+
type: "stretch"
|
|
5526
5463
|
})) {
|
|
5527
5464
|
continue;
|
|
5528
5465
|
}
|
|
@@ -5847,21 +5784,24 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
5847
5784
|
}
|
|
5848
5785
|
if (!partial.parentId || !(this.store.has(partial.parentId) || shapes.some((p) => p.id === partial.parentId))) {
|
|
5849
5786
|
let parentId = this.getFocusedGroupId();
|
|
5850
|
-
|
|
5851
|
-
|
|
5852
|
-
|
|
5853
|
-
|
|
5854
|
-
parent
|
|
5855
|
-
|
|
5856
|
-
|
|
5857
|
-
|
|
5858
|
-
|
|
5859
|
-
|
|
5860
|
-
|
|
5787
|
+
const isPositioned = partial.x !== void 0 && partial.y !== void 0;
|
|
5788
|
+
if (isPositioned) {
|
|
5789
|
+
for (let i = currentPageShapesSorted.length - 1; i >= 0; i--) {
|
|
5790
|
+
const parent = currentPageShapesSorted[i];
|
|
5791
|
+
const util = this.getShapeUtil(parent);
|
|
5792
|
+
if (util.canReceiveNewChildrenOfType(parent, partial.type) && !this.isShapeHidden(parent) && this.isPointInShape(
|
|
5793
|
+
parent,
|
|
5794
|
+
// If no parent is provided, then we can treat the
|
|
5795
|
+
// shape's provided x/y as being in the page's space.
|
|
5796
|
+
{ x: partial.x ?? 0, y: partial.y ?? 0 },
|
|
5797
|
+
{
|
|
5798
|
+
margin: 0,
|
|
5799
|
+
hitInside: true
|
|
5800
|
+
}
|
|
5801
|
+
)) {
|
|
5802
|
+
parentId = parent.id;
|
|
5803
|
+
break;
|
|
5861
5804
|
}
|
|
5862
|
-
)) {
|
|
5863
|
-
parentId = parent.id;
|
|
5864
|
-
break;
|
|
5865
5805
|
}
|
|
5866
5806
|
}
|
|
5867
5807
|
const prevParentId = partial.parentId;
|
|
@@ -6532,16 +6472,20 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
6532
6472
|
* Handle external content, such as files, urls, embeds, or plain text which has been put into the app, for example by pasting external text or dropping external images onto canvas.
|
|
6533
6473
|
*
|
|
6534
6474
|
* @param info - Info about the external content.
|
|
6475
|
+
* @param opts - Options for handling external content, including force flag to bypass readonly checks.
|
|
6535
6476
|
*/
|
|
6536
|
-
async putExternalContent(info) {
|
|
6477
|
+
async putExternalContent(info, opts = {}) {
|
|
6478
|
+
if (!opts.force && this.getIsReadonly()) return;
|
|
6537
6479
|
return this.externalContentHandlers[info.type]?.(info);
|
|
6538
6480
|
}
|
|
6539
6481
|
/**
|
|
6540
6482
|
* Handle replacing external content.
|
|
6541
6483
|
*
|
|
6542
6484
|
* @param info - Info about the external content.
|
|
6485
|
+
* @param opts - Options for handling external content, including force flag to bypass readonly checks.
|
|
6543
6486
|
*/
|
|
6544
|
-
async replaceExternalContent(info) {
|
|
6487
|
+
async replaceExternalContent(info, opts = {}) {
|
|
6488
|
+
if (!opts.force && this.getIsReadonly()) return;
|
|
6545
6489
|
return this.externalContentHandlers[info.type]?.(info);
|
|
6546
6490
|
}
|
|
6547
6491
|
/**
|
|
@@ -6895,12 +6839,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
6895
6839
|
height: result.height
|
|
6896
6840
|
};
|
|
6897
6841
|
}
|
|
6898
|
-
/** @deprecated Use {@link Editor.getSvgString} or {@link Editor.getSvgElement} instead. */
|
|
6899
|
-
async getSvg(shapes, opts = {}) {
|
|
6900
|
-
const result = await this.getSvgElement(shapes, opts);
|
|
6901
|
-
if (!result) return void 0;
|
|
6902
|
-
return result.svg;
|
|
6903
|
-
}
|
|
6904
6842
|
/**
|
|
6905
6843
|
* Get an exported image of the given shapes.
|
|
6906
6844
|
*
|
|
@@ -6950,6 +6888,23 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
6950
6888
|
}
|
|
6951
6889
|
}
|
|
6952
6890
|
}
|
|
6891
|
+
/**
|
|
6892
|
+
* Get an exported image of the given shapes as a data URL.
|
|
6893
|
+
*
|
|
6894
|
+
* @param shapes - The shapes (or shape ids) to export.
|
|
6895
|
+
* @param opts - Options for the export.
|
|
6896
|
+
*
|
|
6897
|
+
* @returns A data URL of the image.
|
|
6898
|
+
* @public
|
|
6899
|
+
*/
|
|
6900
|
+
async toImageDataUrl(shapes, opts = {}) {
|
|
6901
|
+
const { blob, width, height } = await this.toImage(shapes, opts);
|
|
6902
|
+
return {
|
|
6903
|
+
url: await FileHelpers.blobToDataUrl(blob),
|
|
6904
|
+
width,
|
|
6905
|
+
height
|
|
6906
|
+
};
|
|
6907
|
+
}
|
|
6953
6908
|
/**
|
|
6954
6909
|
* Update the input points from a pointer, pinch, or wheel event.
|
|
6955
6910
|
*
|
|
@@ -7046,6 +7001,47 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7046
7001
|
this.dispatch({ type: "misc", name: "complete" });
|
|
7047
7002
|
return this;
|
|
7048
7003
|
}
|
|
7004
|
+
/**
|
|
7005
|
+
* Dispatch a pointer move event in the current position of the pointer. This is useful when
|
|
7006
|
+
* external circumstances have changed (e.g. the camera moved or a shape was moved) and you want
|
|
7007
|
+
* the current interaction to respond to that change.
|
|
7008
|
+
*
|
|
7009
|
+
* @example
|
|
7010
|
+
* ```ts
|
|
7011
|
+
* editor.updatePointer()
|
|
7012
|
+
* ```
|
|
7013
|
+
*
|
|
7014
|
+
* @param options - The options for updating the pointer.
|
|
7015
|
+
* @returns The editor instance.
|
|
7016
|
+
* @public
|
|
7017
|
+
*/
|
|
7018
|
+
updatePointer(options) {
|
|
7019
|
+
const event = {
|
|
7020
|
+
type: "pointer",
|
|
7021
|
+
target: "canvas",
|
|
7022
|
+
name: "pointer_move",
|
|
7023
|
+
point: options?.point ?? // weird but true: what `inputs` calls screen-space is actually viewport space. so
|
|
7024
|
+
// we need to convert back into true screen space first. we should fix this...
|
|
7025
|
+
Vec.Add(
|
|
7026
|
+
this.inputs.currentScreenPoint,
|
|
7027
|
+
this.store.unsafeGetWithoutCapture(TLINSTANCE_ID).screenBounds
|
|
7028
|
+
),
|
|
7029
|
+
pointerId: options?.pointerId ?? 0,
|
|
7030
|
+
button: options?.button ?? 0,
|
|
7031
|
+
isPen: options?.isPen ?? this.inputs.isPen,
|
|
7032
|
+
shiftKey: options?.shiftKey ?? this.inputs.shiftKey,
|
|
7033
|
+
altKey: options?.altKey ?? this.inputs.altKey,
|
|
7034
|
+
ctrlKey: options?.ctrlKey ?? this.inputs.ctrlKey,
|
|
7035
|
+
metaKey: options?.metaKey ?? this.inputs.metaKey,
|
|
7036
|
+
accelKey: options?.accelKey ?? isAccelKey(this.inputs)
|
|
7037
|
+
};
|
|
7038
|
+
if (options?.immediate) {
|
|
7039
|
+
this._flushEventForTick(event);
|
|
7040
|
+
} else {
|
|
7041
|
+
this.dispatch(event);
|
|
7042
|
+
}
|
|
7043
|
+
return this;
|
|
7044
|
+
}
|
|
7049
7045
|
/**
|
|
7050
7046
|
* Puts the editor into focused mode.
|
|
7051
7047
|
*
|
|
@@ -7823,8 +7819,6 @@ __decorateElement(_init, 1, "getCurrentTool", _getCurrentTool_dec, Editor);
|
|
|
7823
7819
|
__decorateElement(_init, 1, "getCurrentToolId", _getCurrentToolId_dec, Editor);
|
|
7824
7820
|
__decorateElement(_init, 1, "getDocumentSettings", _getDocumentSettings_dec, Editor);
|
|
7825
7821
|
__decorateElement(_init, 1, "getInstanceState", _getInstanceState_dec, Editor);
|
|
7826
|
-
__decorateElement(_init, 1, "getOpenMenus", _getOpenMenus_dec, Editor);
|
|
7827
|
-
__decorateElement(_init, 1, "getIsMenuOpen", _getIsMenuOpen_dec, Editor);
|
|
7828
7822
|
__decorateElement(_init, 1, "getPageStates", _getPageStates_dec, Editor);
|
|
7829
7823
|
__decorateElement(_init, 1, "_getPageStatesQuery", __getPageStatesQuery_dec, Editor);
|
|
7830
7824
|
__decorateElement(_init, 1, "getCurrentPageState", _getCurrentPageState_dec, Editor);
|