@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
|
@@ -88,7 +88,6 @@ var import_defaultShapes = require("../config/defaultShapes");
|
|
|
88
88
|
var import_constants = require("../constants");
|
|
89
89
|
var import_exportToSvg = require("../exports/exportToSvg");
|
|
90
90
|
var import_getSvgAsImage = require("../exports/getSvgAsImage");
|
|
91
|
-
var import_environment = require("../globals/environment");
|
|
92
91
|
var import_menus = require("../globals/menus");
|
|
93
92
|
var import_time = require("../globals/time");
|
|
94
93
|
var import_options = require("../options");
|
|
@@ -123,8 +122,8 @@ var import_TextManager = require("./managers/TextManager/TextManager");
|
|
|
123
122
|
var import_TickManager = require("./managers/TickManager/TickManager");
|
|
124
123
|
var import_UserPreferencesManager = require("./managers/UserPreferencesManager/UserPreferencesManager");
|
|
125
124
|
var import_RootState = require("./tools/RootState");
|
|
126
|
-
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,
|
|
127
|
-
class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_dec = [import_state.computed], _getCanUndo_dec = [import_state.computed], _getCanRedo_dec = [import_state.computed], _getPath_dec = [import_state.computed], _getCurrentTool_dec = [import_state.computed], _getCurrentToolId_dec = [import_state.computed], _getDocumentSettings_dec = [import_state.computed], _getInstanceState_dec = [import_state.computed],
|
|
125
|
+
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;
|
|
126
|
+
class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_dec = [import_state.computed], _getCanUndo_dec = [import_state.computed], _getCanRedo_dec = [import_state.computed], _getPath_dec = [import_state.computed], _getCurrentTool_dec = [import_state.computed], _getCurrentToolId_dec = [import_state.computed], _getDocumentSettings_dec = [import_state.computed], _getInstanceState_dec = [import_state.computed], _getPageStates_dec = [import_state.computed], __getPageStatesQuery_dec = [import_state.computed], _getCurrentPageState_dec = [import_state.computed], __getCurrentPageStateId_dec = [import_state.computed], _getSelectedShapeIds_dec = [import_state.computed], _getSelectedShapes_dec = [import_state.computed], _getCurrentPageShapesInReadingOrder_dec = [import_state.computed], _getOnlySelectedShapeId_dec = [import_state.computed], _getOnlySelectedShape_dec = [import_state.computed], _getSelectionPageBounds_dec = [import_state.computed], _getSelectionRotation_dec = [import_state.computed], _getSelectionRotatedPageBounds_dec = [import_state.computed], _getSelectionRotatedScreenBounds_dec = [import_state.computed], _getFocusedGroupId_dec = [import_state.computed], _getFocusedGroup_dec = [import_state.computed], _getEditingShapeId_dec = [import_state.computed], _getEditingShape_dec = [import_state.computed], _getRichTextEditor_dec = [import_state.computed], _getHoveredShapeId_dec = [import_state.computed], _getHoveredShape_dec = [import_state.computed], _getHintingShapeIds_dec = [import_state.computed], _getHintingShape_dec = [import_state.computed], _getErasingShapeIds_dec = [import_state.computed], _getErasingShapes_dec = [import_state.computed], __unsafe_getCameraId_dec = [import_state.computed], _getCamera_dec = [import_state.computed], _getViewportPageBoundsForFollowing_dec = [import_state.computed], _getCameraForFollowing_dec = [import_state.computed], _getZoomLevel_dec = [import_state.computed], _getViewportScreenBounds_dec = [import_state.computed], _getViewportScreenCenter_dec = [import_state.computed], _getViewportPageBounds_dec = [import_state.computed], __getCollaboratorsQuery_dec = [import_state.computed], _getCollaborators_dec = [import_state.computed], _getCollaboratorsOnCurrentPage_dec = [import_state.computed], _getRenderingShapes_dec = [import_state.computed], __getAllPagesQuery_dec = [import_state.computed], _getPages_dec = [import_state.computed], _getCurrentPageId_dec = [import_state.computed], _getCurrentPageShapeIdsSorted_dec = [import_state.computed], __getAllAssetsQuery_dec = [import_state.computed], __getShapeHandlesCache_dec = [import_state.computed], __getShapePageTransformCache_dec = [import_state.computed], __getShapePageBoundsCache_dec = [import_state.computed], __getShapeClipPathCache_dec = [import_state.computed], __getShapeMaskCache_dec = [import_state.computed], __getShapeMaskedPageBoundsCache_dec = [import_state.computed], _getNotVisibleShapes_dec = [import_state.computed], _getCulledShapes_dec = [import_state.computed], _getCurrentPageBounds_dec = [import_state.computed], _getCurrentPageShapes_dec = [import_state.computed], _getCurrentPageShapesSorted_dec = [import_state.computed], _getCurrentPageRenderingShapesSorted_dec = [import_state.computed], __getBindingsIndexCache_dec = [import_state.computed], __getSelectionSharedStyles_dec = [import_state.computed], _getSharedStyles_dec = [(0, import_state.computed)({ isEqual: (a, b) => a.equals(b) })], _getSharedOpacity_dec = [import_state.computed], _getIsFocused_dec = [import_state.computed], _getIsReadonly_dec = [import_state.computed], __setShiftKeyTimeout_dec = [import_utils.bind], __setAltKeyTimeout_dec = [import_utils.bind], __setCtrlKeyTimeout_dec = [import_utils.bind], __setMetaKeyTimeout_dec = [import_utils.bind], _a) {
|
|
128
127
|
constructor({
|
|
129
128
|
store,
|
|
130
129
|
user,
|
|
@@ -138,8 +137,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
138
137
|
autoFocus,
|
|
139
138
|
inferDarkMode,
|
|
140
139
|
options,
|
|
141
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
142
|
-
isShapeHidden,
|
|
143
140
|
getShapeVisibility,
|
|
144
141
|
fontAssetUrls
|
|
145
142
|
}) {
|
|
@@ -206,13 +203,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
206
203
|
* @public
|
|
207
204
|
*/
|
|
208
205
|
__publicField(this, "fonts");
|
|
209
|
-
/**
|
|
210
|
-
* A manager for the editor's environment.
|
|
211
|
-
*
|
|
212
|
-
* @deprecated This is deprecated and will be removed in a future version. Use the `tlenv` global export instead.
|
|
213
|
-
* @public
|
|
214
|
-
*/
|
|
215
|
-
__publicField(this, "environment", import_environment.tlenv);
|
|
216
206
|
/**
|
|
217
207
|
* A manager for the editor's scribbles.
|
|
218
208
|
*
|
|
@@ -415,14 +405,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
415
405
|
/** @internal */
|
|
416
406
|
__publicField(this, "performanceTrackerTimeout", -1);
|
|
417
407
|
__publicField(this, "_pendingEventsForNextTick", []);
|
|
418
|
-
|
|
419
|
-
!(isShapeHidden && getShapeVisibility),
|
|
420
|
-
"Cannot use both isShapeHidden and getShapeVisibility"
|
|
421
|
-
);
|
|
422
|
-
this._getShapeVisibility = isShapeHidden ? (
|
|
423
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
424
|
-
(shape, editor) => isShapeHidden(shape, editor) ? "hidden" : "inherit"
|
|
425
|
-
) : getShapeVisibility;
|
|
408
|
+
this._getShapeVisibility = getShapeVisibility;
|
|
426
409
|
this.options = { ...import_options.defaultTldrawOptions, ...options };
|
|
427
410
|
this.store = store;
|
|
428
411
|
this.history = new import_HistoryManager.HistoryManager({
|
|
@@ -902,34 +885,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
902
885
|
getCanRedo() {
|
|
903
886
|
return this.history.getNumRedos() > 0;
|
|
904
887
|
}
|
|
905
|
-
/**
|
|
906
|
-
* Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear
|
|
907
|
-
* any redos.
|
|
908
|
-
*
|
|
909
|
-
* @example
|
|
910
|
-
* ```ts
|
|
911
|
-
* editor.mark()
|
|
912
|
-
* editor.mark('flip shapes')
|
|
913
|
-
* ```
|
|
914
|
-
*
|
|
915
|
-
* @param markId - The mark's id, usually the reason for adding the mark.
|
|
916
|
-
*
|
|
917
|
-
* @public
|
|
918
|
-
* @deprecated use {@link Editor.markHistoryStoppingPoint} instead
|
|
919
|
-
*/
|
|
920
|
-
mark(markId) {
|
|
921
|
-
if (typeof markId === "string") {
|
|
922
|
-
console.warn(
|
|
923
|
-
`[tldraw] \`editor.history.mark("${markId}")\` is deprecated. Please use \`const myMarkId = editor.markHistoryStoppingPoint()\` instead.`
|
|
924
|
-
);
|
|
925
|
-
} else {
|
|
926
|
-
console.warn(
|
|
927
|
-
"[tldraw] `editor.mark()` is deprecated. Use `editor.markHistoryStoppingPoint()` instead."
|
|
928
|
-
);
|
|
929
|
-
}
|
|
930
|
-
this.history._mark(markId ?? (0, import_utils.uniqueId)());
|
|
931
|
-
return this;
|
|
932
|
-
}
|
|
933
888
|
/**
|
|
934
889
|
* Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear
|
|
935
890
|
* any redos. You typically want to do this just before a user interaction begins or is handled.
|
|
@@ -1045,12 +1000,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1045
1000
|
}
|
|
1046
1001
|
return this;
|
|
1047
1002
|
}
|
|
1048
|
-
/**
|
|
1049
|
-
* @deprecated Use `Editor.run` instead.
|
|
1050
|
-
*/
|
|
1051
|
-
batch(fn, opts) {
|
|
1052
|
-
return this.run(fn, opts);
|
|
1053
|
-
}
|
|
1054
1003
|
/* --------------------- Errors --------------------- */
|
|
1055
1004
|
/** @internal */
|
|
1056
1005
|
annotateError(error, {
|
|
@@ -1272,39 +1221,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1272
1221
|
]);
|
|
1273
1222
|
}, opts);
|
|
1274
1223
|
}
|
|
1275
|
-
getOpenMenus() {
|
|
1276
|
-
return this.menus.getOpenMenus();
|
|
1277
|
-
}
|
|
1278
|
-
/**
|
|
1279
|
-
* @deprecated Use `editor.menus.addOpenMenu` instead.
|
|
1280
|
-
*
|
|
1281
|
-
* @public
|
|
1282
|
-
*/
|
|
1283
|
-
addOpenMenu(id) {
|
|
1284
|
-
this.menus.addOpenMenu(id);
|
|
1285
|
-
return this;
|
|
1286
|
-
}
|
|
1287
|
-
/**
|
|
1288
|
-
* @deprecated Use `editor.menus.deleteOpenMenu` instead.
|
|
1289
|
-
*
|
|
1290
|
-
* @public
|
|
1291
|
-
*/
|
|
1292
|
-
deleteOpenMenu(id) {
|
|
1293
|
-
this.menus.deleteOpenMenu(id);
|
|
1294
|
-
return this;
|
|
1295
|
-
}
|
|
1296
|
-
/**
|
|
1297
|
-
* @deprecated Use `editor.menus.clearOpenMenus` instead.
|
|
1298
|
-
*
|
|
1299
|
-
* @public
|
|
1300
|
-
*/
|
|
1301
|
-
clearOpenMenus() {
|
|
1302
|
-
this.menus.clearOpenMenus();
|
|
1303
|
-
return this;
|
|
1304
|
-
}
|
|
1305
|
-
getIsMenuOpen() {
|
|
1306
|
-
return this.menus.hasAnyOpenMenus();
|
|
1307
|
-
}
|
|
1308
1224
|
/* --------------------- Cursor --------------------- */
|
|
1309
1225
|
/**
|
|
1310
1226
|
* Set the cursor.
|
|
@@ -1432,7 +1348,9 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1432
1348
|
return this;
|
|
1433
1349
|
}
|
|
1434
1350
|
/**
|
|
1435
|
-
* Select all
|
|
1351
|
+
* Select all shapes. If the user has selected shapes that share a parent,
|
|
1352
|
+
* select all shapes within that parent. If the user has not selected any shapes,
|
|
1353
|
+
* or if the shapes shapes are only on select all shapes on the current page.
|
|
1436
1354
|
*
|
|
1437
1355
|
* @example
|
|
1438
1356
|
* ```ts
|
|
@@ -1442,7 +1360,23 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1442
1360
|
* @public
|
|
1443
1361
|
*/
|
|
1444
1362
|
selectAll() {
|
|
1445
|
-
|
|
1363
|
+
let parentToSelectWithinId = null;
|
|
1364
|
+
const selectedShapeIds = this.getSelectedShapeIds();
|
|
1365
|
+
if (selectedShapeIds.length > 0) {
|
|
1366
|
+
for (const id of selectedShapeIds) {
|
|
1367
|
+
const shape = this.getShape(id);
|
|
1368
|
+
if (!shape) continue;
|
|
1369
|
+
if (parentToSelectWithinId === null) {
|
|
1370
|
+
parentToSelectWithinId = shape.parentId;
|
|
1371
|
+
} else if (parentToSelectWithinId !== shape.parentId) {
|
|
1372
|
+
return this;
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
if (!parentToSelectWithinId) {
|
|
1377
|
+
parentToSelectWithinId = this.getCurrentPageId();
|
|
1378
|
+
}
|
|
1379
|
+
const ids = this.getSortedChildIdsForParent(parentToSelectWithinId);
|
|
1446
1380
|
if (ids.length <= 0) return this;
|
|
1447
1381
|
this.setSelectedShapes(this._getUnlockedShapeIds(ids));
|
|
1448
1382
|
return this;
|
|
@@ -1461,9 +1395,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1461
1395
|
const selectedShapeIds = this.getSelectedShapeIds();
|
|
1462
1396
|
const firstParentId = selectedShapeIds[0] ? this.getShape(selectedShapeIds[0])?.parentId : null;
|
|
1463
1397
|
const isSelectedWithinContainer = firstParentId && selectedShapeIds.every((shapeId) => this.getShape(shapeId)?.parentId === firstParentId) && !(0, import_tlschema.isPageId)(firstParentId);
|
|
1464
|
-
const
|
|
1465
|
-
|
|
1466
|
-
) : this.getCurrentPageShapesInReadingOrder();
|
|
1398
|
+
const filteredShapes = isSelectedWithinContainer ? this.getCurrentPageShapes().filter((shape2) => shape2.parentId === firstParentId) : this.getCurrentPageShapes().filter((shape2) => (0, import_tlschema.isPageId)(shape2.parentId));
|
|
1399
|
+
const readingOrderShapes = isSelectedWithinContainer ? this._getShapesInReadingOrder(filteredShapes) : this.getCurrentPageShapesInReadingOrder();
|
|
1467
1400
|
const currentShapeId = selectedShapeIds.length === 1 ? selectedShapeIds[0] : readingOrderShapes.find((shape2) => selectedShapeIds.includes(shape2.id))?.id;
|
|
1468
1401
|
let adjacentShapeId;
|
|
1469
1402
|
if (direction === "next" || direction === "prev") {
|
|
@@ -1473,7 +1406,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1473
1406
|
adjacentShapeId = shapeIds[adjacentIndex];
|
|
1474
1407
|
} else {
|
|
1475
1408
|
if (!currentShapeId) return;
|
|
1476
|
-
adjacentShapeId = this.getNearestAdjacentShape(currentShapeId, direction);
|
|
1409
|
+
adjacentShapeId = this.getNearestAdjacentShape(filteredShapes, currentShapeId, direction);
|
|
1477
1410
|
}
|
|
1478
1411
|
const shape = this.getShape(adjacentShapeId);
|
|
1479
1412
|
if (!shape) return;
|
|
@@ -1539,11 +1472,10 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1539
1472
|
*
|
|
1540
1473
|
* @public
|
|
1541
1474
|
*/
|
|
1542
|
-
getNearestAdjacentShape(currentShapeId, direction) {
|
|
1475
|
+
getNearestAdjacentShape(shapes, currentShapeId, direction) {
|
|
1543
1476
|
const directionToAngle = { right: 0, left: 180, down: 90, up: 270 };
|
|
1544
1477
|
const currentShape = this.getShape(currentShapeId);
|
|
1545
1478
|
if (!currentShape) return currentShapeId;
|
|
1546
|
-
const shapes = this.getCurrentPageShapes();
|
|
1547
1479
|
const tabbableShapes = shapes.filter(
|
|
1548
1480
|
(shape) => this.getShapeUtil(shape).canTabTo(shape) && shape.id !== currentShapeId
|
|
1549
1481
|
);
|
|
@@ -2307,28 +2239,11 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2307
2239
|
{ history: "ignore" }
|
|
2308
2240
|
);
|
|
2309
2241
|
const { currentScreenPoint, currentPagePoint } = this.inputs;
|
|
2310
|
-
const { screenBounds } = this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID);
|
|
2311
2242
|
if (currentScreenPoint.x / z - x !== currentPagePoint.x || currentScreenPoint.y / z - y !== currentPagePoint.y) {
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
// weird but true: we need to put the screen point back into client space
|
|
2317
|
-
point: import_Vec.Vec.AddXY(currentScreenPoint, screenBounds.x, screenBounds.y),
|
|
2318
|
-
pointerId: import_constants.INTERNAL_POINTER_IDS.CAMERA_MOVE,
|
|
2319
|
-
ctrlKey: this.inputs.ctrlKey,
|
|
2320
|
-
altKey: this.inputs.altKey,
|
|
2321
|
-
shiftKey: this.inputs.shiftKey,
|
|
2322
|
-
metaKey: this.inputs.metaKey,
|
|
2323
|
-
accelKey: (0, import_keyboard.isAccelKey)(this.inputs),
|
|
2324
|
-
button: 0,
|
|
2325
|
-
isPen: this.getInstanceState().isPenMode ?? false
|
|
2326
|
-
};
|
|
2327
|
-
if (opts?.immediate) {
|
|
2328
|
-
this._flushEventForTick(event);
|
|
2329
|
-
} else {
|
|
2330
|
-
this.dispatch(event);
|
|
2331
|
-
}
|
|
2243
|
+
this.updatePointer({
|
|
2244
|
+
immediate: opts?.immediate,
|
|
2245
|
+
pointerId: import_constants.INTERNAL_POINTER_IDS.CAMERA_MOVE
|
|
2246
|
+
});
|
|
2332
2247
|
}
|
|
2333
2248
|
this._tickCameraState();
|
|
2334
2249
|
});
|
|
@@ -3297,19 +3212,24 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3297
3212
|
*/
|
|
3298
3213
|
deletePage(page) {
|
|
3299
3214
|
const id = typeof page === "string" ? page : page.id;
|
|
3300
|
-
this.run(
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3311
|
-
|
|
3312
|
-
|
|
3215
|
+
this.run(
|
|
3216
|
+
() => {
|
|
3217
|
+
if (this.getIsReadonly()) return;
|
|
3218
|
+
const pages = this.getPages();
|
|
3219
|
+
if (pages.length === 1) return;
|
|
3220
|
+
const deletedPage = this.getPage(id);
|
|
3221
|
+
if (!deletedPage) return;
|
|
3222
|
+
if (id === this.getCurrentPageId()) {
|
|
3223
|
+
const index = pages.findIndex((page2) => page2.id === id);
|
|
3224
|
+
const next = pages[index - 1] ?? pages[index + 1];
|
|
3225
|
+
this.setCurrentPage(next.id);
|
|
3226
|
+
}
|
|
3227
|
+
const shapes = this.getSortedChildIdsForParent(deletedPage.id);
|
|
3228
|
+
this.deleteShapes(shapes);
|
|
3229
|
+
this.store.remove([deletedPage.id]);
|
|
3230
|
+
},
|
|
3231
|
+
{ ignoreShapeLock: true }
|
|
3232
|
+
);
|
|
3313
3233
|
return this;
|
|
3314
3234
|
}
|
|
3315
3235
|
/**
|
|
@@ -3608,8 +3528,9 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3608
3528
|
return this.store.createComputedCache("pageBoundsCache", (shape) => {
|
|
3609
3529
|
const pageTransform = this.getShapePageTransform(shape);
|
|
3610
3530
|
if (!pageTransform) return void 0;
|
|
3611
|
-
|
|
3612
|
-
|
|
3531
|
+
return import_Box.Box.FromPoints(
|
|
3532
|
+
pageTransform.applyToPoints(this.getShapeGeometry(shape).boundsVertices)
|
|
3533
|
+
);
|
|
3613
3534
|
});
|
|
3614
3535
|
}
|
|
3615
3536
|
/**
|
|
@@ -3662,16 +3583,17 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3662
3583
|
_getShapeMaskCache() {
|
|
3663
3584
|
return this.store.createComputedCache("pageMaskCache", (shape) => {
|
|
3664
3585
|
if ((0, import_tlschema.isPageId)(shape.parentId)) return void 0;
|
|
3665
|
-
const
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
|
|
3669
|
-
|
|
3670
|
-
|
|
3671
|
-
const pageTransform = this.getShapePageTransform(
|
|
3672
|
-
|
|
3673
|
-
}
|
|
3674
|
-
|
|
3586
|
+
const clipPaths = [];
|
|
3587
|
+
for (const ancestor of this.getShapeAncestors(shape.id)) {
|
|
3588
|
+
const util = this.getShapeUtil(ancestor);
|
|
3589
|
+
const clipPath = util.getClipPath?.(ancestor);
|
|
3590
|
+
if (!clipPath) continue;
|
|
3591
|
+
if (util.shouldClipChild?.(shape) === false) continue;
|
|
3592
|
+
const pageTransform = this.getShapePageTransform(ancestor.id);
|
|
3593
|
+
clipPaths.push(pageTransform.applyToPoints(clipPath));
|
|
3594
|
+
}
|
|
3595
|
+
if (clipPaths.length === 0) return void 0;
|
|
3596
|
+
const pageMask = clipPaths.reduce((acc, b) => {
|
|
3675
3597
|
const intersection = (0, import_intersect.intersectPolygonPolygon)(acc, b);
|
|
3676
3598
|
if (intersection) {
|
|
3677
3599
|
return intersection.map(import_Vec.Vec.Cast);
|
|
@@ -3906,6 +3828,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3906
3828
|
hitInside = false,
|
|
3907
3829
|
hitFrameInside = false
|
|
3908
3830
|
} = opts;
|
|
3831
|
+
const [innerMargin, outerMargin] = Array.isArray(margin) ? margin : [margin, margin];
|
|
3909
3832
|
let inHollowSmallestArea = Infinity;
|
|
3910
3833
|
let inHollowSmallestAreaHit = null;
|
|
3911
3834
|
let inMarginClosestToEdgeDistance = Infinity;
|
|
@@ -3915,7 +3838,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3915
3838
|
return false;
|
|
3916
3839
|
const pageMask = this.getShapeMask(shape);
|
|
3917
3840
|
if (pageMask && !(0, import_utils2.pointInPolygon)(point, pageMask)) return false;
|
|
3918
|
-
if (filter
|
|
3841
|
+
if (filter && !filter(shape)) return false;
|
|
3919
3842
|
return true;
|
|
3920
3843
|
});
|
|
3921
3844
|
for (let i = shapesToCheck.length - 1; i >= 0; i--) {
|
|
@@ -3923,7 +3846,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3923
3846
|
const geometry = this.getShapeGeometry(shape);
|
|
3924
3847
|
const isGroup = geometry instanceof import_Group2d.Group2d;
|
|
3925
3848
|
const pointInShapeSpace = this.getPointInShapeSpace(shape, point);
|
|
3926
|
-
if (this.isShapeOfType(shape, "frame") || this.isShapeOfType(shape, "
|
|
3849
|
+
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()) {
|
|
3927
3850
|
for (const childGeometry of geometry.children) {
|
|
3928
3851
|
if (childGeometry.isLabel && childGeometry.isPointInBounds(pointInShapeSpace)) {
|
|
3929
3852
|
return shape;
|
|
@@ -3931,8 +3854,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3931
3854
|
}
|
|
3932
3855
|
}
|
|
3933
3856
|
if (this.isShapeOfType(shape, "frame")) {
|
|
3934
|
-
const distance2 = geometry.distanceToPoint(pointInShapeSpace,
|
|
3935
|
-
if (
|
|
3857
|
+
const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitFrameInside);
|
|
3858
|
+
if (hitFrameInside ? distance2 > 0 && distance2 <= outerMargin || distance2 <= 0 && distance2 > -innerMargin : distance2 > 0 && distance2 <= outerMargin) {
|
|
3936
3859
|
return inMarginClosestToEdgeHit || shape;
|
|
3937
3860
|
}
|
|
3938
3861
|
if (geometry.hitTestPoint(pointInShapeSpace, 0, true)) {
|
|
@@ -3952,10 +3875,10 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3952
3875
|
}
|
|
3953
3876
|
distance = minDistance;
|
|
3954
3877
|
} else {
|
|
3955
|
-
if (
|
|
3878
|
+
if (outerMargin === 0 && (geometry.bounds.w < 1 || geometry.bounds.h < 1)) {
|
|
3956
3879
|
distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
|
|
3957
3880
|
} else {
|
|
3958
|
-
if (geometry.bounds.containsPoint(pointInShapeSpace,
|
|
3881
|
+
if (geometry.bounds.containsPoint(pointInShapeSpace, outerMargin)) {
|
|
3959
3882
|
distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
|
|
3960
3883
|
} else {
|
|
3961
3884
|
distance = Infinity;
|
|
@@ -3963,12 +3886,22 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3963
3886
|
}
|
|
3964
3887
|
}
|
|
3965
3888
|
if (geometry.isClosed) {
|
|
3966
|
-
if (distance <=
|
|
3889
|
+
if (distance <= outerMargin || hitInside && distance <= 0 && distance > -innerMargin) {
|
|
3967
3890
|
if (geometry.isFilled || isGroup && geometry.children[0].isFilled) {
|
|
3968
3891
|
return inMarginClosestToEdgeHit || shape;
|
|
3969
3892
|
} else {
|
|
3970
3893
|
if (this.getShapePageBounds(shape).contains(viewportPageBounds)) continue;
|
|
3971
|
-
if (
|
|
3894
|
+
if (hitInside ? (
|
|
3895
|
+
// On hitInside, the distance will be negative for hits inside
|
|
3896
|
+
// If the distance is positive, check against the outer margin
|
|
3897
|
+
distance > 0 && distance <= outerMargin || // If the distance is negative, check against the inner margin
|
|
3898
|
+
distance <= 0 && distance > -innerMargin
|
|
3899
|
+
) : (
|
|
3900
|
+
// If hitInside is false, then sadly _we do not know_ whether the
|
|
3901
|
+
// point is inside or outside of the shape, so we check against
|
|
3902
|
+
// the max of the two margins
|
|
3903
|
+
Math.abs(distance) <= Math.max(innerMargin, outerMargin)
|
|
3904
|
+
)) {
|
|
3972
3905
|
if (Math.abs(distance) < inMarginClosestToEdgeDistance) {
|
|
3973
3906
|
inMarginClosestToEdgeDistance = Math.abs(distance);
|
|
3974
3907
|
inMarginClosestToEdgeHit = shape;
|
|
@@ -4358,10 +4291,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
4358
4291
|
}
|
|
4359
4292
|
return shapeIds;
|
|
4360
4293
|
}
|
|
4361
|
-
/** @deprecated Use {@link Editor.getDraggingOverShape} instead */
|
|
4362
|
-
getDroppingOverShape(point, droppingShapes) {
|
|
4363
|
-
return this.getDraggingOverShape(point, droppingShapes);
|
|
4364
|
-
}
|
|
4365
4294
|
/**
|
|
4366
4295
|
* Get the shape that some shapes should be dropped on at a given point.
|
|
4367
4296
|
*
|
|
@@ -4733,7 +4662,16 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
4733
4662
|
}
|
|
4734
4663
|
this.createShapes(shapesToCreate);
|
|
4735
4664
|
this.createBindings(bindingsToCreate);
|
|
4736
|
-
this.setSelectedShapes(
|
|
4665
|
+
this.setSelectedShapes(
|
|
4666
|
+
(0, import_utils.compact)(
|
|
4667
|
+
ids.map((oldId) => {
|
|
4668
|
+
const newId = shapeIds.get(oldId);
|
|
4669
|
+
if (!newId) return null;
|
|
4670
|
+
if (!this.getShape(newId)) return null;
|
|
4671
|
+
return newId;
|
|
4672
|
+
})
|
|
4673
|
+
)
|
|
4674
|
+
);
|
|
4737
4675
|
if (offset !== void 0) {
|
|
4738
4676
|
const selectionPageBounds = this.getSelectionPageBounds();
|
|
4739
4677
|
const viewportPageBounds = this.getViewportPageBounds();
|
|
@@ -5487,8 +5425,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
5487
5425
|
const shapesMovingTogether = [shape];
|
|
5488
5426
|
const boundsOfShapesMovingTogether = [shapePageBounds];
|
|
5489
5427
|
if (!this.getShapeUtil(shape).canBeLaidOut?.(shape, {
|
|
5490
|
-
type: "stretch"
|
|
5491
|
-
shapes: shapesToStretchFirstPass
|
|
5428
|
+
type: "stretch"
|
|
5492
5429
|
})) {
|
|
5493
5430
|
continue;
|
|
5494
5431
|
}
|
|
@@ -5813,21 +5750,24 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
5813
5750
|
}
|
|
5814
5751
|
if (!partial.parentId || !(this.store.has(partial.parentId) || shapes.some((p) => p.id === partial.parentId))) {
|
|
5815
5752
|
let parentId = this.getFocusedGroupId();
|
|
5816
|
-
|
|
5817
|
-
|
|
5818
|
-
|
|
5819
|
-
|
|
5820
|
-
parent
|
|
5821
|
-
|
|
5822
|
-
|
|
5823
|
-
|
|
5824
|
-
|
|
5825
|
-
|
|
5826
|
-
|
|
5753
|
+
const isPositioned = partial.x !== void 0 && partial.y !== void 0;
|
|
5754
|
+
if (isPositioned) {
|
|
5755
|
+
for (let i = currentPageShapesSorted.length - 1; i >= 0; i--) {
|
|
5756
|
+
const parent = currentPageShapesSorted[i];
|
|
5757
|
+
const util = this.getShapeUtil(parent);
|
|
5758
|
+
if (util.canReceiveNewChildrenOfType(parent, partial.type) && !this.isShapeHidden(parent) && this.isPointInShape(
|
|
5759
|
+
parent,
|
|
5760
|
+
// If no parent is provided, then we can treat the
|
|
5761
|
+
// shape's provided x/y as being in the page's space.
|
|
5762
|
+
{ x: partial.x ?? 0, y: partial.y ?? 0 },
|
|
5763
|
+
{
|
|
5764
|
+
margin: 0,
|
|
5765
|
+
hitInside: true
|
|
5766
|
+
}
|
|
5767
|
+
)) {
|
|
5768
|
+
parentId = parent.id;
|
|
5769
|
+
break;
|
|
5827
5770
|
}
|
|
5828
|
-
)) {
|
|
5829
|
-
parentId = parent.id;
|
|
5830
|
-
break;
|
|
5831
5771
|
}
|
|
5832
5772
|
}
|
|
5833
5773
|
const prevParentId = partial.parentId;
|
|
@@ -6498,16 +6438,20 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
6498
6438
|
* 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.
|
|
6499
6439
|
*
|
|
6500
6440
|
* @param info - Info about the external content.
|
|
6441
|
+
* @param opts - Options for handling external content, including force flag to bypass readonly checks.
|
|
6501
6442
|
*/
|
|
6502
|
-
async putExternalContent(info) {
|
|
6443
|
+
async putExternalContent(info, opts = {}) {
|
|
6444
|
+
if (!opts.force && this.getIsReadonly()) return;
|
|
6503
6445
|
return this.externalContentHandlers[info.type]?.(info);
|
|
6504
6446
|
}
|
|
6505
6447
|
/**
|
|
6506
6448
|
* Handle replacing external content.
|
|
6507
6449
|
*
|
|
6508
6450
|
* @param info - Info about the external content.
|
|
6451
|
+
* @param opts - Options for handling external content, including force flag to bypass readonly checks.
|
|
6509
6452
|
*/
|
|
6510
|
-
async replaceExternalContent(info) {
|
|
6453
|
+
async replaceExternalContent(info, opts = {}) {
|
|
6454
|
+
if (!opts.force && this.getIsReadonly()) return;
|
|
6511
6455
|
return this.externalContentHandlers[info.type]?.(info);
|
|
6512
6456
|
}
|
|
6513
6457
|
/**
|
|
@@ -6861,12 +6805,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
6861
6805
|
height: result.height
|
|
6862
6806
|
};
|
|
6863
6807
|
}
|
|
6864
|
-
/** @deprecated Use {@link Editor.getSvgString} or {@link Editor.getSvgElement} instead. */
|
|
6865
|
-
async getSvg(shapes, opts = {}) {
|
|
6866
|
-
const result = await this.getSvgElement(shapes, opts);
|
|
6867
|
-
if (!result) return void 0;
|
|
6868
|
-
return result.svg;
|
|
6869
|
-
}
|
|
6870
6808
|
/**
|
|
6871
6809
|
* Get an exported image of the given shapes.
|
|
6872
6810
|
*
|
|
@@ -6916,6 +6854,23 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
6916
6854
|
}
|
|
6917
6855
|
}
|
|
6918
6856
|
}
|
|
6857
|
+
/**
|
|
6858
|
+
* Get an exported image of the given shapes as a data URL.
|
|
6859
|
+
*
|
|
6860
|
+
* @param shapes - The shapes (or shape ids) to export.
|
|
6861
|
+
* @param opts - Options for the export.
|
|
6862
|
+
*
|
|
6863
|
+
* @returns A data URL of the image.
|
|
6864
|
+
* @public
|
|
6865
|
+
*/
|
|
6866
|
+
async toImageDataUrl(shapes, opts = {}) {
|
|
6867
|
+
const { blob, width, height } = await this.toImage(shapes, opts);
|
|
6868
|
+
return {
|
|
6869
|
+
url: await import_utils.FileHelpers.blobToDataUrl(blob),
|
|
6870
|
+
width,
|
|
6871
|
+
height
|
|
6872
|
+
};
|
|
6873
|
+
}
|
|
6919
6874
|
/**
|
|
6920
6875
|
* Update the input points from a pointer, pinch, or wheel event.
|
|
6921
6876
|
*
|
|
@@ -7012,6 +6967,47 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7012
6967
|
this.dispatch({ type: "misc", name: "complete" });
|
|
7013
6968
|
return this;
|
|
7014
6969
|
}
|
|
6970
|
+
/**
|
|
6971
|
+
* Dispatch a pointer move event in the current position of the pointer. This is useful when
|
|
6972
|
+
* external circumstances have changed (e.g. the camera moved or a shape was moved) and you want
|
|
6973
|
+
* the current interaction to respond to that change.
|
|
6974
|
+
*
|
|
6975
|
+
* @example
|
|
6976
|
+
* ```ts
|
|
6977
|
+
* editor.updatePointer()
|
|
6978
|
+
* ```
|
|
6979
|
+
*
|
|
6980
|
+
* @param options - The options for updating the pointer.
|
|
6981
|
+
* @returns The editor instance.
|
|
6982
|
+
* @public
|
|
6983
|
+
*/
|
|
6984
|
+
updatePointer(options) {
|
|
6985
|
+
const event = {
|
|
6986
|
+
type: "pointer",
|
|
6987
|
+
target: "canvas",
|
|
6988
|
+
name: "pointer_move",
|
|
6989
|
+
point: options?.point ?? // weird but true: what `inputs` calls screen-space is actually viewport space. so
|
|
6990
|
+
// we need to convert back into true screen space first. we should fix this...
|
|
6991
|
+
import_Vec.Vec.Add(
|
|
6992
|
+
this.inputs.currentScreenPoint,
|
|
6993
|
+
this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID).screenBounds
|
|
6994
|
+
),
|
|
6995
|
+
pointerId: options?.pointerId ?? 0,
|
|
6996
|
+
button: options?.button ?? 0,
|
|
6997
|
+
isPen: options?.isPen ?? this.inputs.isPen,
|
|
6998
|
+
shiftKey: options?.shiftKey ?? this.inputs.shiftKey,
|
|
6999
|
+
altKey: options?.altKey ?? this.inputs.altKey,
|
|
7000
|
+
ctrlKey: options?.ctrlKey ?? this.inputs.ctrlKey,
|
|
7001
|
+
metaKey: options?.metaKey ?? this.inputs.metaKey,
|
|
7002
|
+
accelKey: options?.accelKey ?? (0, import_keyboard.isAccelKey)(this.inputs)
|
|
7003
|
+
};
|
|
7004
|
+
if (options?.immediate) {
|
|
7005
|
+
this._flushEventForTick(event);
|
|
7006
|
+
} else {
|
|
7007
|
+
this.dispatch(event);
|
|
7008
|
+
}
|
|
7009
|
+
return this;
|
|
7010
|
+
}
|
|
7015
7011
|
/**
|
|
7016
7012
|
* Puts the editor into focused mode.
|
|
7017
7013
|
*
|
|
@@ -7789,8 +7785,6 @@ __decorateElement(_init, 1, "getCurrentTool", _getCurrentTool_dec, Editor);
|
|
|
7789
7785
|
__decorateElement(_init, 1, "getCurrentToolId", _getCurrentToolId_dec, Editor);
|
|
7790
7786
|
__decorateElement(_init, 1, "getDocumentSettings", _getDocumentSettings_dec, Editor);
|
|
7791
7787
|
__decorateElement(_init, 1, "getInstanceState", _getInstanceState_dec, Editor);
|
|
7792
|
-
__decorateElement(_init, 1, "getOpenMenus", _getOpenMenus_dec, Editor);
|
|
7793
|
-
__decorateElement(_init, 1, "getIsMenuOpen", _getIsMenuOpen_dec, Editor);
|
|
7794
7788
|
__decorateElement(_init, 1, "getPageStates", _getPageStates_dec, Editor);
|
|
7795
7789
|
__decorateElement(_init, 1, "_getPageStatesQuery", __getPageStatesQuery_dec, Editor);
|
|
7796
7790
|
__decorateElement(_init, 1, "getCurrentPageState", _getCurrentPageState_dec, Editor);
|