tldraw 4.2.2 → 4.2.3
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 +242 -311
- package/dist-cjs/index.js +5 -13
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/bindings/arrow/ArrowBindingUtil.js.map +2 -2
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +4 -7
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
- package/dist-cjs/lib/defaultEmbedDefinitions.js.map +2 -2
- package/dist-cjs/lib/defaultExternalContentHandlers.js +5 -5
- package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
- package/dist-cjs/lib/defaultSideEffects.js +1 -6
- package/dist-cjs/lib/defaultSideEffects.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +13 -14
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrow-types.js.map +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/elbow/elbowArrowSnapLines.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/shared.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js +10 -4
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +4 -7
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/bookmark/bookmarks.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +22 -24
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/getPath.js +11 -20
- package/dist-cjs/lib/shapes/draw/getPath.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +86 -82
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +3 -3
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +0 -6
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/frame/FrameShapeTool.js.map +1 -1
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +5 -6
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +142 -146
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/toolStates/Idle.js +10 -5
- package/dist-cjs/lib/shapes/geo/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js +3 -3
- package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +21 -23
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/line/toolStates/Pointing.js +3 -3
- package/dist-cjs/lib/shapes/line/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +11 -6
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/note/noteHelpers.js.map +2 -2
- package/dist-cjs/lib/shapes/note/toolStates/Pointing.js +10 -5
- package/dist-cjs/lib/shapes/note/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +2 -3
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +2 -14
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +3 -3
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js +4 -12
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +3 -3
- package/dist-cjs/lib/shapes/shared/ShapeFill.js +2 -2
- package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/crop.js +0 -1
- package/dist-cjs/lib/shapes/shared/crop.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/interpolate-props.js +3 -3
- package/dist-cjs/lib/shapes/shared/interpolate-props.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/useEditableRichText.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/{useEfficientZoomThreshold.js → useForceSolid.js} +7 -10
- package/dist-cjs/lib/shapes/shared/useForceSolid.js.map +7 -0
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +1 -1
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
- package/dist-cjs/lib/shapes/text/RichTextArea.js +0 -5
- package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -5
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js +10 -4
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Pointing.js +5 -7
- package/dist-cjs/lib/shapes/text/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +5 -4
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +4 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/HandTool.js +5 -3
- package/dist-cjs/lib/tools/HandTool/HandTool.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js +2 -3
- package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js +1 -1
- package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js +1 -1
- package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js +11 -10
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js +5 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js +6 -4
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js +1 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +6 -8
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js +11 -38
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +50 -42
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js +6 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js +14 -4
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +13 -4
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +6 -5
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +3 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js +6 -7
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +11 -13
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/selectHelpers.js +4 -15
- package/dist-cjs/lib/tools/SelectTool/selectHelpers.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js +1 -1
- package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js +3 -3
- package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js +6 -5
- package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js +3 -1
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
- package/dist-cjs/lib/{utils/test-helpers.js → tools/selection-logic/getShouldEnterCropModeOnPointerDown.js} +8 -21
- package/dist-cjs/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.js.map +7 -0
- package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js +1 -1
- package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js +1 -1
- package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js.map +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js.map +2 -2
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js +9 -3
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js +3 -1
- package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/CursorChatBubble.js +1 -1
- package/dist-cjs/lib/ui/components/CursorChatBubble.js.map +2 -2
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.js +21 -1
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/EditLinkDialog.js +1 -11
- package/dist-cjs/lib/ui/components/EditLinkDialog.js.map +2 -2
- package/dist-cjs/lib/ui/components/HelperButtons/StopFollowing.js.map +2 -2
- package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +1 -1
- package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
- package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js +15 -2
- package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js.map +3 -3
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js +1 -3
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js.map +2 -2
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js +0 -6
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/TopPanel/CenteredTopPanelContainer.js.map +1 -1
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js +32 -0
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js.map +7 -0
- package/dist-cjs/lib/ui/components/menu-items.js +1 -3
- package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -3
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -1
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +93 -149
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +1 -1
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
- package/dist-cjs/lib/ui/context/actions.js +8 -7
- package/dist-cjs/lib/ui/context/actions.js.map +2 -2
- package/dist-cjs/lib/ui/context/components.js +2 -1
- package/dist-cjs/lib/ui/context/components.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +2 -2
- package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useFlatten.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTools.js +5 -4
- package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
- package/dist-cjs/lib/ui/version.js +3 -3
- package/dist-cjs/lib/ui/version.js.map +1 -1
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +6 -16
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
- package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
- package/dist-cjs/lib/utils/frames/frames.js.map +2 -2
- package/dist-cjs/lib/utils/text/richText.js +2 -4
- package/dist-cjs/lib/utils/text/richText.js.map +2 -2
- package/dist-cjs/lib/utils/text/textDirection.js +51 -0
- package/dist-cjs/lib/utils/text/textDirection.js.map +7 -0
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +2 -7
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
- package/dist-esm/index.d.mts +242 -311
- package/dist-esm/index.mjs +5 -14
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/bindings/arrow/ArrowBindingUtil.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs +4 -8
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
- package/dist-esm/lib/defaultEmbedDefinitions.mjs.map +2 -2
- package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -5
- package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
- package/dist-esm/lib/defaultSideEffects.mjs +1 -6
- package/dist-esm/lib/defaultSideEffects.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +15 -15
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/elbow/elbowArrowSnapLines.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/shared.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs +10 -4
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +4 -7
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/bookmark/bookmarks.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +24 -29
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/getPath.mjs +11 -21
- package/dist-esm/lib/shapes/draw/getPath.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +86 -83
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +3 -3
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +0 -6
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/frame/FrameShapeTool.mjs.map +1 -1
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +5 -6
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +142 -147
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs +10 -5
- package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs +3 -3
- package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +22 -24
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs +3 -3
- package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +12 -7
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/noteHelpers.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs +10 -5
- package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +3 -4
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +2 -14
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +4 -12
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs +2 -2
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/crop.mjs +0 -1
- package/dist-esm/lib/shapes/shared/crop.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs +4 -4
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useEditableRichText.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs +9 -0
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs.map +7 -0
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +1 -1
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/RichTextArea.mjs +0 -5
- package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +2 -5
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs +10 -4
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs +5 -7
- package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +5 -4
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +8 -3
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/HandTool.mjs +5 -3
- package/dist-esm/lib/tools/HandTool/HandTool.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs +2 -3
- package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs +1 -1
- package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs +1 -1
- package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs +11 -10
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs +5 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs +6 -4
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs +1 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +6 -8
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs +11 -38
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +51 -43
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs +6 -6
- package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs +19 -6
- package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +13 -4
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +6 -5
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +3 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs +6 -7
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +11 -13
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs +4 -17
- package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs +1 -1
- package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs +3 -3
- package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs +6 -5
- package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs +3 -1
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs +8 -0
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs.map +7 -0
- package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs +1 -1
- package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs +1 -1
- package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs.map +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs +8 -2
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs +3 -1
- package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/CursorChatBubble.mjs +1 -1
- package/dist-esm/lib/ui/components/CursorChatBubble.mjs.map +2 -2
- package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs +30 -3
- package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/EditLinkDialog.mjs +1 -11
- package/dist-esm/lib/ui/components/EditLinkDialog.mjs.map +2 -2
- package/dist-esm/lib/ui/components/HelperButtons/StopFollowing.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +1 -1
- package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
- package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs +6 -3
- package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs.map +2 -2
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs +1 -3
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs.map +2 -2
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs +0 -6
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/TopPanel/CenteredTopPanelContainer.mjs.map +1 -1
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs +12 -0
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs.map +7 -0
- package/dist-esm/lib/ui/components/menu-items.mjs +5 -4
- package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -3
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +95 -157
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
- package/dist-esm/lib/ui/context/actions.mjs +8 -7
- package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
- package/dist-esm/lib/ui/context/components.mjs +2 -1
- package/dist-esm/lib/ui/context/components.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/menu-hooks.mjs +4 -1
- package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useFlatten.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTools.mjs +5 -4
- package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
- package/dist-esm/lib/ui/version.mjs +3 -3
- package/dist-esm/lib/ui/version.mjs.map +1 -1
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +6 -17
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
- package/dist-esm/lib/utils/export/exportAs.mjs +3 -1
- package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
- package/dist-esm/lib/utils/frames/frames.mjs.map +2 -2
- package/dist-esm/lib/utils/text/richText.mjs +2 -5
- package/dist-esm/lib/utils/text/richText.mjs.map +2 -2
- package/dist-esm/lib/utils/text/textDirection.mjs +31 -0
- package/dist-esm/lib/utils/text/textDirection.mjs.map +7 -0
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +2 -8
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
- package/package.json +16 -18
- package/src/index.ts +2 -6
- package/src/lib/Tldraw.test.tsx +1 -46
- package/src/lib/bindings/arrow/ArrowBindingUtil.ts +1 -1
- package/src/lib/canvas/TldrawSelectionForeground.tsx +9 -20
- package/src/lib/defaultEmbedDefinitions.ts +0 -1
- package/src/lib/defaultExternalContentHandlers.ts +14 -13
- package/src/lib/defaultSideEffects.ts +1 -6
- package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +133 -40
- package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +8 -8
- package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +2 -2
- package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +16 -16
- package/src/lib/shapes/arrow/arrow-types.ts +0 -2
- package/src/lib/shapes/arrow/arrowLabel.ts +2 -2
- package/src/lib/shapes/arrow/arrowTargetState.ts +2 -2
- package/src/lib/shapes/arrow/elbow/elbowArrowSnapLines.tsx +3 -3
- package/src/lib/shapes/arrow/shared.ts +4 -4
- package/src/lib/shapes/arrow/toolStates/Idle.tsx +14 -4
- package/src/lib/shapes/arrow/toolStates/Pointing.tsx +5 -8
- package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +1 -1
- package/src/lib/shapes/bookmark/bookmarks.ts +3 -3
- package/src/lib/shapes/draw/DrawShapeUtil.tsx +26 -30
- package/src/lib/shapes/draw/getPath.ts +10 -31
- package/src/lib/shapes/draw/toolStates/Drawing.ts +90 -100
- package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -8
- package/src/lib/shapes/frame/FrameShapeTool.ts +1 -1
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +4 -10
- package/src/lib/shapes/geo/GeoShapeUtil.test.tsx +2 -10
- package/src/lib/shapes/geo/GeoShapeUtil.tsx +176 -228
- package/src/lib/shapes/geo/toolStates/Idle.ts +15 -5
- package/src/lib/shapes/geo/toolStates/Pointing.ts +6 -6
- package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +24 -25
- package/src/lib/shapes/line/LineShapeTool.test.ts +6 -6
- package/src/lib/shapes/line/LineShapeUtil.test.tsx +5 -5
- package/src/lib/shapes/line/toolStates/Pointing.ts +4 -4
- package/src/lib/shapes/note/NoteShapeTool.test.ts +1 -2
- package/src/lib/shapes/note/NoteShapeUtil.tsx +10 -9
- package/src/lib/shapes/note/noteCloning.test.ts +1 -3
- package/src/lib/shapes/note/noteHelpers.ts +2 -2
- package/src/lib/shapes/note/toolStates/Pointing.ts +10 -5
- package/src/lib/shapes/shared/HyperlinkButton.tsx +3 -4
- package/src/lib/shapes/shared/PlainTextLabel.tsx +2 -12
- package/src/lib/shapes/shared/RichTextLabel.tsx +4 -14
- package/src/lib/shapes/shared/ShapeFill.tsx +2 -2
- package/src/lib/shapes/shared/crop.ts +0 -1
- package/src/lib/shapes/shared/interpolate-props.ts +4 -4
- package/src/lib/shapes/shared/useEditablePlainText.ts +3 -7
- package/src/lib/shapes/shared/useEditableRichText.ts +3 -7
- package/src/lib/shapes/shared/useForceSolid.ts +6 -0
- package/src/lib/shapes/shared/useImageOrVideoAsset.ts +1 -1
- package/src/lib/shapes/text/RichTextArea.tsx +0 -5
- package/src/lib/shapes/text/TextShapeTool.test.ts +4 -4
- package/src/lib/shapes/text/TextShapeUtil.tsx +0 -5
- package/src/lib/shapes/text/toolStates/Idle.ts +14 -4
- package/src/lib/shapes/text/toolStates/Pointing.ts +8 -8
- package/src/lib/shapes/video/VideoShapeUtil.tsx +1 -2
- package/src/lib/tools/EraserTool/childStates/Erasing.ts +10 -7
- package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -5
- package/src/lib/tools/HandTool/HandTool.ts +5 -3
- package/src/lib/tools/HandTool/childStates/Dragging.ts +2 -3
- package/src/lib/tools/HandTool/childStates/Pointing.ts +1 -1
- package/src/lib/tools/LaserTool/childStates/Lasering.ts +1 -1
- package/src/lib/tools/SelectTool/DragAndDropManager.ts +11 -14
- package/src/lib/tools/SelectTool/childStates/Brushing.ts +11 -8
- package/src/lib/tools/SelectTool/childStates/Crop/children/Cropping.ts +6 -7
- package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +4 -3
- package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.ts +1 -2
- package/src/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +12 -11
- package/src/lib/tools/SelectTool/childStates/EditingShape.ts +16 -57
- package/src/lib/tools/SelectTool/childStates/Idle.ts +81 -64
- package/src/lib/tools/SelectTool/childStates/PointingArrowLabel.ts +8 -7
- package/src/lib/tools/SelectTool/childStates/PointingCanvas.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingHandle.ts +17 -9
- package/src/lib/tools/SelectTool/childStates/PointingResizeHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingRotateHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingSelection.ts +4 -4
- package/src/lib/tools/SelectTool/childStates/PointingShape.ts +14 -4
- package/src/lib/tools/SelectTool/childStates/Resizing.ts +10 -8
- package/src/lib/tools/SelectTool/childStates/Rotating.ts +3 -2
- package/src/lib/tools/SelectTool/childStates/ScribbleBrushing.ts +10 -9
- package/src/lib/tools/SelectTool/childStates/Translating.ts +15 -16
- package/src/lib/tools/SelectTool/selectHelpers.ts +4 -39
- package/src/lib/tools/ZoomTool/ZoomTool.ts +1 -1
- package/src/lib/tools/ZoomTool/childStates/Pointing.ts +3 -3
- package/src/lib/tools/ZoomTool/childStates/ZoomBrushing.ts +6 -5
- package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +3 -1
- package/src/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.ts +10 -0
- package/src/lib/tools/selection-logic/selectOnCanvasPointerUp.ts +1 -1
- package/src/lib/tools/selection-logic/updateHoveredShapeId.ts +1 -1
- package/src/lib/ui/TldrawUi.tsx +2 -5
- package/src/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.tsx +9 -1
- package/src/lib/ui/components/ContextMenu/DefaultContextMenu.tsx +3 -1
- package/src/lib/ui/components/CursorChatBubble.tsx +2 -2
- package/src/lib/ui/components/DefaultDebugPanel.tsx +42 -3
- package/src/lib/ui/components/EditLinkDialog.tsx +6 -16
- package/src/lib/ui/components/HelperButtons/StopFollowing.tsx +2 -2
- package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +1 -1
- package/src/lib/ui/components/OfflineIndicator/OfflineIndicator.tsx +5 -6
- package/src/lib/ui/components/PageMenu/PageItemInput.tsx +1 -3
- package/src/lib/ui/components/SharePanel/PeopleMenu.tsx +0 -8
- package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +2 -2
- package/src/lib/ui/components/Toolbar/DefaultImageToolbar.tsx +1 -1
- package/src/lib/ui/components/Toolbar/DefaultRichTextToolbar.tsx +1 -1
- package/src/lib/ui/components/TopPanel/CenteredTopPanelContainer.tsx +1 -1
- package/src/lib/ui/components/TopPanel/DefaultTopPanel.tsx +10 -0
- package/src/lib/ui/components/menu-items.tsx +15 -9
- package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +3 -5
- package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +2 -2
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +113 -208
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.tsx +1 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.tsx +1 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +2 -2
- package/src/lib/ui/context/actions.tsx +19 -15
- package/src/lib/ui/context/components.tsx +2 -1
- package/src/lib/ui/hooks/menu-hooks.ts +19 -9
- package/src/lib/ui/hooks/useClipboardEvents.ts +2 -2
- package/src/lib/ui/hooks/useFlatten.ts +2 -1
- package/src/lib/ui/hooks/useKeyboardShortcuts.ts +2 -2
- package/src/lib/ui/hooks/useTools.tsx +7 -5
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +29 -31
- package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +48 -12
- package/src/lib/utils/excalidraw/putExcalidrawContent.ts +6 -19
- package/src/lib/utils/export/exportAs.ts +9 -2
- package/src/lib/utils/frames/frames.ts +1 -1
- package/src/lib/utils/text/richText.ts +5 -6
- package/src/lib/utils/text/textDirection.ts +32 -0
- package/src/lib/utils/tldr/buildFromV1Document.ts +19 -21
- package/src/test/Editor.test.tsx +41 -78
- package/src/test/EraserTool.test.ts +12 -10
- package/src/test/SelectTool.test.ts +19 -11
- package/src/test/TestEditor.ts +51 -49
- package/src/test/TldrawEditor.test.tsx +20 -24
- package/src/test/__snapshots__/drawing.test.ts.snap +1257 -3
- package/src/test/__snapshots__/resizing.test.ts.snap +12 -3
- package/src/test/arrows-megabus.test.tsx +1 -1
- package/src/test/bindings.test.tsx +25 -29
- package/src/test/bindingsIndex.test.tsx +4 -4
- package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +10 -10
- package/src/test/commands/createShapes.test.ts +1 -15
- package/src/test/commands/getSvgString.test.ts +2 -2
- package/src/test/commands/putContent.test.ts +1 -80
- package/src/test/commands/setCamera.test.ts +11 -13
- package/src/test/commands/stackShapes.test.ts +8 -34
- package/src/test/commands/updateShapes.test.ts +5 -21
- package/src/test/commands/zoomToBounds.test.ts +3 -19
- package/src/test/commands/zoomToSelection.test.ts +3 -14
- package/src/test/custom-clipping.test.ts +44 -52
- package/src/test/customSnapping.test.tsx +62 -77
- package/src/test/drawing.test.ts +10 -17
- package/src/test/duplicate.test.ts +1 -1
- package/src/test/flipShapes.test.ts +0 -33
- package/src/test/frames.test.ts +2 -94
- package/src/test/getCulledShapes.test.tsx +3 -11
- package/src/test/getShapeAtPoint.test.ts +2 -2
- package/src/test/groups.test.tsx +4 -7
- package/src/test/modifiers.test.ts +6 -6
- package/src/test/resizing.test.ts +22 -16
- package/src/test/selection-omnibus.test.ts +13 -13
- package/src/test/shapeutils.test.ts +1 -1
- package/src/test/spacebarPanning.test.ts +10 -28
- package/src/test/styles2.test.tsx +1 -1
- package/src/test/styles3.test.ts +5 -5
- package/src/test/test-jsx.tsx +57 -72
- package/src/test/text.test.ts +17 -15
- package/src/test/translating.test.ts +8 -6
- package/tldraw.css +41 -45
- package/dist-cjs/lib/shapes/shared/useEfficientZoomThreshold.js.map +0 -7
- package/dist-cjs/lib/utils/test-helpers.js.map +0 -7
- package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs +0 -12
- package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs.map +0 -7
- package/dist-esm/lib/utils/test-helpers.mjs +0 -21
- package/dist-esm/lib/utils/test-helpers.mjs.map +0 -7
- package/src/lib/shapes/draw/DrawShapeUtil.test.ts +0 -146
- package/src/lib/shapes/highlight/HighlightShapeUtil.test.ts +0 -146
- package/src/lib/shapes/shared/useEfficientZoomThreshold.ts +0 -10
- package/src/lib/utils/test-helpers.ts +0 -60
- package/src/test/commands/cameraState.test.ts +0 -299
- package/src/test/commands/createShape.test.ts +0 -64
- package/src/test/commands/isShapeOfType.test.ts +0 -44
- package/src/test/commands/updateShape.test.ts +0 -67
|
@@ -183,11 +183,6 @@ export const RichTextArea = React.forwardRef<HTMLDivElement, TextAreaProps>(func
|
|
|
183
183
|
blockSeparator: '\n',
|
|
184
184
|
},
|
|
185
185
|
},
|
|
186
|
-
// N.B. We disable the text direction in the core list here,
|
|
187
|
-
// but we add it back in again in our own extensions list so that
|
|
188
|
-
// people can omit/override it if they want to.
|
|
189
|
-
enableCoreExtensions: { textDirection: false },
|
|
190
|
-
textDirection: 'auto',
|
|
191
186
|
...restOfTipTapConfig,
|
|
192
187
|
content: rInitialRichText.current as JSONContent,
|
|
193
188
|
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DefaultTextAlignStyle, toRichText } from '@tldraw/editor'
|
|
1
|
+
import { DefaultTextAlignStyle, TLTextShape, toRichText } from '@tldraw/editor'
|
|
2
2
|
import { vi } from 'vitest'
|
|
3
3
|
import { TestEditor } from '../../../test/TestEditor'
|
|
4
4
|
import { TextShapeTool } from './TextShapeTool'
|
|
@@ -24,7 +24,7 @@ describe(TextShapeTool, () => {
|
|
|
24
24
|
editor.pointerUp()
|
|
25
25
|
editor.expectToBeIn('select.editing_shape')
|
|
26
26
|
// This comes from the component, not the state chart
|
|
27
|
-
editor.updateShapes([
|
|
27
|
+
editor.updateShapes<TLTextShape>([
|
|
28
28
|
{
|
|
29
29
|
...editor.getCurrentPageShapes()[0]!,
|
|
30
30
|
type: 'text',
|
|
@@ -96,7 +96,7 @@ describe('When in idle state', () => {
|
|
|
96
96
|
editor.expectToBeIn('select.editing_shape')
|
|
97
97
|
|
|
98
98
|
// Update the text shape with some content
|
|
99
|
-
editor.updateShapes([
|
|
99
|
+
editor.updateShapes<TLTextShape>([
|
|
100
100
|
{
|
|
101
101
|
...editor.getCurrentPageShapes()[0]!,
|
|
102
102
|
type: 'text',
|
|
@@ -133,7 +133,7 @@ describe('When in idle state', () => {
|
|
|
133
133
|
editor.expectToBeIn('select.editing_shape')
|
|
134
134
|
|
|
135
135
|
// Update the text shape with some content
|
|
136
|
-
editor.updateShapes([
|
|
136
|
+
editor.updateShapes<TLTextShape>([
|
|
137
137
|
{
|
|
138
138
|
...editor.getCurrentPageShapes()[0]!,
|
|
139
139
|
type: 'text',
|
|
@@ -43,8 +43,6 @@ const sizeCache = createComputedCache(
|
|
|
43
43
|
export interface TextShapeOptions {
|
|
44
44
|
/** How much addition padding should be added to the horizontal geometry of the shape when binding to an arrow? */
|
|
45
45
|
extraArrowHorizontalPadding: number
|
|
46
|
-
/** Whether to show the outline of the text shape (using the same color as the canvas). This helps with overlapping shapes. It does not show up on Safari, where text outline is a performance issues. */
|
|
47
|
-
showTextOutline: boolean
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
/** @public */
|
|
@@ -55,7 +53,6 @@ export class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
55
53
|
|
|
56
54
|
override options: TextShapeOptions = {
|
|
57
55
|
extraArrowHorizontalPadding: 10,
|
|
58
|
-
showTextOutline: true,
|
|
59
56
|
}
|
|
60
57
|
|
|
61
58
|
getDefaultProps(): TLTextShape['props'] {
|
|
@@ -143,7 +140,6 @@ export class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
143
140
|
isSelected={isSelected}
|
|
144
141
|
textWidth={width}
|
|
145
142
|
textHeight={height}
|
|
146
|
-
showTextOutline={this.options.showTextOutline}
|
|
147
143
|
style={{
|
|
148
144
|
transform: `scale(${scale})`,
|
|
149
145
|
transformOrigin: 'top left',
|
|
@@ -179,7 +175,6 @@ export class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
179
175
|
labelColor={getColorValue(theme, shape.props.color, 'solid')}
|
|
180
176
|
bounds={exportBounds}
|
|
181
177
|
padding={0}
|
|
182
|
-
showTextOutline={this.options.showTextOutline}
|
|
183
178
|
/>
|
|
184
179
|
)
|
|
185
180
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { StateNode, TLKeyboardEventInfo, TLPointerEventInfo } from '@tldraw/editor'
|
|
2
2
|
import { updateHoveredShapeId } from '../../../tools/selection-logic/updateHoveredShapeId'
|
|
3
|
-
import { startEditingShapeWithRichText } from '../../../tools/SelectTool/selectHelpers'
|
|
4
3
|
|
|
5
4
|
export class Idle extends StateNode {
|
|
6
5
|
static override id = 'idle'
|
|
@@ -28,10 +27,21 @@ export class Idle extends StateNode {
|
|
|
28
27
|
|
|
29
28
|
override onKeyDown(info: TLKeyboardEventInfo) {
|
|
30
29
|
if (info.key === 'Enter') {
|
|
30
|
+
if (this.editor.getIsReadonly()) return null
|
|
31
31
|
const onlySelectedShape = this.editor.getOnlySelectedShape()
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
// If the only selected shape is editable, start editing it
|
|
33
|
+
if (
|
|
34
|
+
onlySelectedShape &&
|
|
35
|
+
this.editor.getShapeUtil(onlySelectedShape).canEdit(onlySelectedShape)
|
|
36
|
+
) {
|
|
37
|
+
this.editor.setCurrentTool('select')
|
|
38
|
+
this.editor.setEditingShape(onlySelectedShape.id)
|
|
39
|
+
this.editor.root.getCurrent()?.transition('editing_shape', {
|
|
40
|
+
...info,
|
|
41
|
+
target: 'shape',
|
|
42
|
+
shape: onlySelectedShape,
|
|
43
|
+
})
|
|
44
|
+
}
|
|
35
45
|
}
|
|
36
46
|
}
|
|
37
47
|
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
maybeSnapToGrid,
|
|
10
10
|
toRichText,
|
|
11
11
|
} from '@tldraw/editor'
|
|
12
|
-
import { startEditingShapeWithRichText } from '../../../tools/SelectTool/selectHelpers'
|
|
13
12
|
|
|
14
13
|
export class Pointing extends StateNode {
|
|
15
14
|
static override id = 'pointing'
|
|
@@ -38,12 +37,11 @@ export class Pointing extends StateNode {
|
|
|
38
37
|
if (Date.now() - this.enterTime < 150) return
|
|
39
38
|
|
|
40
39
|
const { editor } = this
|
|
41
|
-
const isPointing = editor.inputs
|
|
40
|
+
const { isPointing } = editor.inputs
|
|
42
41
|
|
|
43
42
|
if (!isPointing) return
|
|
44
43
|
|
|
45
|
-
const originPagePoint = editor.inputs
|
|
46
|
-
const currentPagePoint = editor.inputs.getCurrentPagePoint()
|
|
44
|
+
const { originPagePoint, currentPagePoint } = editor.inputs
|
|
47
45
|
|
|
48
46
|
const currentDragDist = Math.abs(originPagePoint.x - currentPagePoint.x)
|
|
49
47
|
|
|
@@ -85,7 +83,8 @@ export class Pointing extends StateNode {
|
|
|
85
83
|
creationCursorOffset: { x: currentDragDist * scale, y: 1 },
|
|
86
84
|
onInteractionEnd: 'text',
|
|
87
85
|
onCreate: () => {
|
|
88
|
-
|
|
86
|
+
editor.setEditingShape(shape.id)
|
|
87
|
+
// this will automatically set the state to 'select.editing_shape'
|
|
89
88
|
},
|
|
90
89
|
})
|
|
91
90
|
}
|
|
@@ -110,12 +109,13 @@ export class Pointing extends StateNode {
|
|
|
110
109
|
private complete() {
|
|
111
110
|
this.editor.markHistoryStoppingPoint('creating text shape')
|
|
112
111
|
const id = createShapeId()
|
|
113
|
-
const originPagePoint = this.editor.inputs
|
|
112
|
+
const { originPagePoint } = this.editor.inputs
|
|
114
113
|
const shape = this.createTextShape(id, originPagePoint, true, 20)
|
|
115
114
|
if (!shape) return
|
|
116
115
|
|
|
117
116
|
this.editor.select(id)
|
|
118
|
-
|
|
117
|
+
this.editor.setEditingShape(id)
|
|
118
|
+
// this will automatically set the state to 'select.editing_shape'
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
private cancel() {
|
|
@@ -124,7 +124,7 @@ export class Pointing extends StateNode {
|
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
private createTextShape(id: TLShapeId, point: Vec, autoSize: boolean, width: number) {
|
|
127
|
-
this.editor.createShape({
|
|
127
|
+
this.editor.createShape<TLTextShape>({
|
|
128
128
|
id,
|
|
129
129
|
type: 'text',
|
|
130
130
|
x: point.x,
|
|
@@ -95,8 +95,7 @@ export class VideoShapeUtil extends BaseBoxShapeUtil<TLVideoShape> {
|
|
|
95
95
|
|
|
96
96
|
const VideoShape = memo(function VideoShape({ shape }: { shape: TLVideoShape }) {
|
|
97
97
|
const editor = useEditor()
|
|
98
|
-
const showControls =
|
|
99
|
-
editor.getShapeGeometry(shape).bounds.w * editor.getEfficientZoomLevel() >= 110
|
|
98
|
+
const showControls = editor.getShapeGeometry(shape).bounds.w * editor.getZoomLevel() >= 110
|
|
100
99
|
const isEditing = useIsEditing(shape.id)
|
|
101
100
|
const prefersReducedMotion = usePrefersReducedMotion()
|
|
102
101
|
const { Spinner } = useEditorComponents()
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
StateNode,
|
|
3
|
+
TLFrameShape,
|
|
4
|
+
TLGroupShape,
|
|
3
5
|
TLPointerEventInfo,
|
|
4
6
|
TLShapeId,
|
|
5
7
|
isAccelKey,
|
|
@@ -26,7 +28,7 @@ export class Erasing extends StateNode {
|
|
|
26
28
|
this.markId = this.editor.markHistoryStoppingPoint('erase scribble begin')
|
|
27
29
|
this.info = info
|
|
28
30
|
|
|
29
|
-
const originPagePoint = this.editor.inputs
|
|
31
|
+
const { originPagePoint } = this.editor.inputs
|
|
30
32
|
this.excludedShapeIds = new Set(
|
|
31
33
|
this.editor
|
|
32
34
|
.getCurrentPageShapes()
|
|
@@ -35,8 +37,8 @@ export class Erasing extends StateNode {
|
|
|
35
37
|
if (this.editor.isShapeOrAncestorLocked(shape)) return true
|
|
36
38
|
//If the shape is a group or frame, check we're inside it when we start erasing
|
|
37
39
|
if (
|
|
38
|
-
this.editor.isShapeOfType(shape, 'group') ||
|
|
39
|
-
this.editor.isShapeOfType(shape, 'frame')
|
|
40
|
+
this.editor.isShapeOfType<TLGroupShape>(shape, 'group') ||
|
|
41
|
+
this.editor.isShapeOfType<TLFrameShape>(shape, 'frame')
|
|
40
42
|
) {
|
|
41
43
|
const pointInShapeShape = this.editor.getPointInShapeSpace(shape, originPagePoint)
|
|
42
44
|
const geometry = this.editor.getShapeGeometry(shape)
|
|
@@ -58,7 +60,7 @@ export class Erasing extends StateNode {
|
|
|
58
60
|
}
|
|
59
61
|
|
|
60
62
|
private pushPointToScribble() {
|
|
61
|
-
const { x, y } = this.editor.inputs.
|
|
63
|
+
const { x, y } = this.editor.inputs.currentPagePoint
|
|
62
64
|
this.editor.scribbles.addPoint(this.scribbleId, x, y)
|
|
63
65
|
}
|
|
64
66
|
|
|
@@ -98,8 +100,9 @@ export class Erasing extends StateNode {
|
|
|
98
100
|
const erasingShapeIds = editor.getErasingShapeIds()
|
|
99
101
|
const zoomLevel = editor.getZoomLevel()
|
|
100
102
|
const currentPageShapes = editor.getCurrentPageRenderingShapesSorted()
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
+
const {
|
|
104
|
+
inputs: { currentPagePoint, previousPagePoint },
|
|
105
|
+
} = editor
|
|
103
106
|
|
|
104
107
|
this.pushPointToScribble()
|
|
105
108
|
|
|
@@ -108,7 +111,7 @@ export class Erasing extends StateNode {
|
|
|
108
111
|
const minDist = this.editor.options.hitTestMargin / zoomLevel
|
|
109
112
|
|
|
110
113
|
for (const shape of currentPageShapes) {
|
|
111
|
-
if (editor.isShapeOfType(shape, 'group')) continue
|
|
114
|
+
if (editor.isShapeOfType<TLGroupShape>(shape, 'group')) continue
|
|
112
115
|
|
|
113
116
|
// Avoid testing masked shapes, unless the pointer is inside the mask
|
|
114
117
|
const pageMask = editor.getShapeMask(shape.id)
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
isAccelKey,
|
|
3
|
+
StateNode,
|
|
4
|
+
TLFrameShape,
|
|
5
|
+
TLGroupShape,
|
|
6
|
+
TLPointerEventInfo,
|
|
7
|
+
TLShapeId,
|
|
8
|
+
} from '@tldraw/editor'
|
|
2
9
|
|
|
3
10
|
export class Pointing extends StateNode {
|
|
4
11
|
static override id = 'pointing'
|
|
@@ -10,7 +17,9 @@ export class Pointing extends StateNode {
|
|
|
10
17
|
|
|
11
18
|
const zoomLevel = this.editor.getZoomLevel()
|
|
12
19
|
const currentPageShapesSorted = this.editor.getCurrentPageRenderingShapesSorted()
|
|
13
|
-
const
|
|
20
|
+
const {
|
|
21
|
+
inputs: { currentPagePoint },
|
|
22
|
+
} = this.editor
|
|
14
23
|
|
|
15
24
|
const erasing = new Set<TLShapeId>()
|
|
16
25
|
|
|
@@ -18,7 +27,10 @@ export class Pointing extends StateNode {
|
|
|
18
27
|
|
|
19
28
|
for (let n = currentPageShapesSorted.length, i = n - 1; i >= 0; i--) {
|
|
20
29
|
const shape = currentPageShapesSorted[i]
|
|
21
|
-
if (
|
|
30
|
+
if (
|
|
31
|
+
this.editor.isShapeOrAncestorLocked(shape) ||
|
|
32
|
+
this.editor.isShapeOfType<TLGroupShape>(shape, 'group')
|
|
33
|
+
) {
|
|
22
34
|
continue
|
|
23
35
|
}
|
|
24
36
|
|
|
@@ -30,7 +42,10 @@ export class Pointing extends StateNode {
|
|
|
30
42
|
) {
|
|
31
43
|
const hitShape = this.editor.getOutermostSelectableShape(shape)
|
|
32
44
|
// If we've hit a frame after hitting any other shape, stop here
|
|
33
|
-
if (
|
|
45
|
+
if (
|
|
46
|
+
this.editor.isShapeOfType<TLFrameShape>(hitShape, 'frame') &&
|
|
47
|
+
erasing.size > initialSize
|
|
48
|
+
) {
|
|
34
49
|
break
|
|
35
50
|
}
|
|
36
51
|
|
|
@@ -67,7 +82,7 @@ export class Pointing extends StateNode {
|
|
|
67
82
|
override onPointerMove(info: TLPointerEventInfo) {
|
|
68
83
|
if (this._isHoldingAccelKey) return
|
|
69
84
|
|
|
70
|
-
if (this.editor.inputs.
|
|
85
|
+
if (this.editor.inputs.isDragging) {
|
|
71
86
|
this.startErasing(info)
|
|
72
87
|
}
|
|
73
88
|
}
|
|
@@ -14,7 +14,7 @@ export class HandTool extends StateNode {
|
|
|
14
14
|
|
|
15
15
|
override onDoubleClick(info: TLClickEventInfo) {
|
|
16
16
|
if (info.phase === 'settle') {
|
|
17
|
-
const currentScreenPoint = this.editor.inputs
|
|
17
|
+
const { currentScreenPoint } = this.editor.inputs
|
|
18
18
|
this.editor.zoomIn(currentScreenPoint, {
|
|
19
19
|
animation: { duration: 220, easing: EASINGS.easeOutQuint },
|
|
20
20
|
})
|
|
@@ -23,7 +23,7 @@ export class HandTool extends StateNode {
|
|
|
23
23
|
|
|
24
24
|
override onTripleClick(info: TLClickEventInfo) {
|
|
25
25
|
if (info.phase === 'settle') {
|
|
26
|
-
const currentScreenPoint = this.editor.inputs
|
|
26
|
+
const { currentScreenPoint } = this.editor.inputs
|
|
27
27
|
this.editor.zoomOut(currentScreenPoint, {
|
|
28
28
|
animation: { duration: 320, easing: EASINGS.easeOutQuint },
|
|
29
29
|
})
|
|
@@ -33,7 +33,9 @@ export class HandTool extends StateNode {
|
|
|
33
33
|
override onQuadrupleClick(info: TLClickEventInfo) {
|
|
34
34
|
if (info.phase === 'settle') {
|
|
35
35
|
const zoomLevel = this.editor.getZoomLevel()
|
|
36
|
-
const
|
|
36
|
+
const {
|
|
37
|
+
inputs: { currentScreenPoint },
|
|
38
|
+
} = this.editor
|
|
37
39
|
|
|
38
40
|
if (zoomLevel === 1) {
|
|
39
41
|
this.editor.zoomToFit({ animation: { duration: 400, easing: EASINGS.easeOutQuint } })
|
|
@@ -28,8 +28,7 @@ export class Dragging extends StateNode {
|
|
|
28
28
|
|
|
29
29
|
private update() {
|
|
30
30
|
const { initialCamera, editor } = this
|
|
31
|
-
const currentScreenPoint = editor.inputs
|
|
32
|
-
const originScreenPoint = editor.inputs.getOriginScreenPoint()
|
|
31
|
+
const { currentScreenPoint, originScreenPoint } = editor.inputs
|
|
33
32
|
|
|
34
33
|
const delta = Vec.Sub(currentScreenPoint, originScreenPoint).div(editor.getZoomLevel())
|
|
35
34
|
if (delta.len2() === 0) return
|
|
@@ -38,7 +37,7 @@ export class Dragging extends StateNode {
|
|
|
38
37
|
|
|
39
38
|
private complete() {
|
|
40
39
|
const { editor } = this
|
|
41
|
-
const pointerVelocity = editor.inputs
|
|
40
|
+
const { pointerVelocity } = editor.inputs
|
|
42
41
|
|
|
43
42
|
const velocityAtPointerUp = Math.min(pointerVelocity.len(), 2)
|
|
44
43
|
|
|
@@ -31,7 +31,7 @@ export class Lasering extends StateNode {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
private pushPointToScribble() {
|
|
34
|
-
const { x, y } = this.editor.inputs.
|
|
34
|
+
const { x, y } = this.editor.inputs.currentPagePoint
|
|
35
35
|
this.editor.scribbles.addPoint(this.scribbleId, x, y)
|
|
36
36
|
}
|
|
37
37
|
|
|
@@ -44,7 +44,7 @@ export class DragAndDropManager {
|
|
|
44
44
|
|
|
45
45
|
for (const shape of shapesToActuallyMove) {
|
|
46
46
|
const parent = editor.getShapeParent(shape)
|
|
47
|
-
if (parent && editor.isShapeOfType(parent, 'group')) {
|
|
47
|
+
if (parent && editor.isShapeOfType<TLGroupShape>(parent, 'group')) {
|
|
48
48
|
if (!movingGroups.has(parent)) {
|
|
49
49
|
movingGroups.add(parent)
|
|
50
50
|
}
|
|
@@ -70,7 +70,9 @@ export class DragAndDropManager {
|
|
|
70
70
|
}
|
|
71
71
|
this.initialIndices.set(shape.id, shape.index)
|
|
72
72
|
|
|
73
|
-
const group = editor.findShapeAncestor(shape, (s) =>
|
|
73
|
+
const group = editor.findShapeAncestor(shape, (s) =>
|
|
74
|
+
editor.isShapeOfType<TLGroupShape>(s, 'group')
|
|
75
|
+
)
|
|
74
76
|
if (group) {
|
|
75
77
|
this.initialGroupIds.set(shape.id, group.id)
|
|
76
78
|
}
|
|
@@ -92,13 +94,10 @@ export class DragAndDropManager {
|
|
|
92
94
|
this.intervalTimerId = this.editor.timers.setInterval(
|
|
93
95
|
() => {
|
|
94
96
|
skip2of3FramesWhileMovingFast++
|
|
95
|
-
if (
|
|
96
|
-
skip2of3FramesWhileMovingFast % 3 &&
|
|
97
|
-
this.editor.inputs.getPointerVelocity().len() > 0.5
|
|
98
|
-
) {
|
|
97
|
+
if (skip2of3FramesWhileMovingFast % 3 && this.editor.inputs.pointerVelocity.len() > 0.5) {
|
|
99
98
|
return
|
|
100
99
|
}
|
|
101
|
-
this.updateDraggingShapes(editor.inputs.
|
|
100
|
+
this.updateDraggingShapes(editor.inputs.currentPagePoint, cb)
|
|
102
101
|
},
|
|
103
102
|
movingShapes.length > 10 ? SLOW_POINTER_LAG_DURATION : FAST_POINTER_LAG_DURATION
|
|
104
103
|
)
|
|
@@ -106,10 +105,9 @@ export class DragAndDropManager {
|
|
|
106
105
|
|
|
107
106
|
dropShapes(shapes: TLShape[]) {
|
|
108
107
|
const { editor } = this
|
|
109
|
-
|
|
110
|
-
this.updateDraggingShapes(currentPagePoint)
|
|
108
|
+
this.updateDraggingShapes(editor.inputs.currentPagePoint)
|
|
111
109
|
|
|
112
|
-
const draggingOverShape = editor.getDraggingOverShape(currentPagePoint, shapes)
|
|
110
|
+
const draggingOverShape = editor.getDraggingOverShape(editor.inputs.currentPagePoint, shapes)
|
|
113
111
|
|
|
114
112
|
if (draggingOverShape) {
|
|
115
113
|
const util = editor.getShapeUtil(draggingOverShape)
|
|
@@ -151,9 +149,8 @@ export class DragAndDropManager {
|
|
|
151
149
|
// This is the shape under the pointer that can handle at least one of the dragging shapes
|
|
152
150
|
const nextDraggingOverShape = editor.getDraggingOverShape(point, this.shapesToActuallyMove)
|
|
153
151
|
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
this.prevPagePoint.setTo(currentPagePoint)
|
|
152
|
+
const cursorDidMove = !this.prevPagePoint.equals(editor.inputs.currentPagePoint)
|
|
153
|
+
this.prevPagePoint.setTo(editor.inputs.currentPagePoint)
|
|
157
154
|
|
|
158
155
|
editor.run(() => {
|
|
159
156
|
if (this.prevDraggingOverShape?.id === nextDraggingOverShape?.id) {
|
|
@@ -161,7 +158,7 @@ export class DragAndDropManager {
|
|
|
161
158
|
cursorDidMove &&
|
|
162
159
|
nextDraggingOverShape &&
|
|
163
160
|
isShapeId(nextDraggingOverShape.id) &&
|
|
164
|
-
!editor.inputs.
|
|
161
|
+
!editor.inputs.previousPagePoint.equals(editor.inputs.currentPagePoint)
|
|
165
162
|
) {
|
|
166
163
|
// If the cursor moved, call onDragShapesOver for the previous dragging over shape
|
|
167
164
|
const util = editor.getShapeUtil(nextDraggingOverShape)
|
|
@@ -3,6 +3,8 @@ import {
|
|
|
3
3
|
Mat,
|
|
4
4
|
StateNode,
|
|
5
5
|
TLCancelEventInfo,
|
|
6
|
+
TLFrameShape,
|
|
7
|
+
TLGroupShape,
|
|
6
8
|
TLKeyboardEventInfo,
|
|
7
9
|
TLPageId,
|
|
8
10
|
TLPointerEventInfo,
|
|
@@ -31,7 +33,7 @@ export class Brushing extends StateNode {
|
|
|
31
33
|
|
|
32
34
|
override onEnter(info: TLPointerEventInfo & { target: 'canvas' }) {
|
|
33
35
|
const { editor } = this
|
|
34
|
-
const altKey = editor.inputs
|
|
36
|
+
const { altKey } = editor.inputs
|
|
35
37
|
|
|
36
38
|
this.isWrapMode = editor.user.getIsWrapMode()
|
|
37
39
|
|
|
@@ -55,7 +57,9 @@ export class Brushing extends StateNode {
|
|
|
55
57
|
editor
|
|
56
58
|
.getCurrentPageShapes()
|
|
57
59
|
.filter(
|
|
58
|
-
(shape) =>
|
|
60
|
+
(shape) =>
|
|
61
|
+
editor.isShapeOfType<TLGroupShape>(shape, 'group') ||
|
|
62
|
+
editor.isShapeOrAncestorLocked(shape)
|
|
59
63
|
)
|
|
60
64
|
.map((shape) => shape.id)
|
|
61
65
|
)
|
|
@@ -96,7 +100,7 @@ export class Brushing extends StateNode {
|
|
|
96
100
|
}
|
|
97
101
|
|
|
98
102
|
override onKeyDown(info: TLKeyboardEventInfo) {
|
|
99
|
-
if (this.editor.inputs.
|
|
103
|
+
if (this.editor.inputs.altKey) {
|
|
100
104
|
this.parent.transition('scribble_brushing', info)
|
|
101
105
|
} else {
|
|
102
106
|
this.hitTestShapes()
|
|
@@ -114,10 +118,9 @@ export class Brushing extends StateNode {
|
|
|
114
118
|
|
|
115
119
|
private hitTestShapes() {
|
|
116
120
|
const { editor, excludedShapeIds, isWrapMode } = this
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const ctrlKey = editor.inputs.getCtrlKey()
|
|
121
|
+
const {
|
|
122
|
+
inputs: { originPagePoint, currentPagePoint, shiftKey, ctrlKey },
|
|
123
|
+
} = editor
|
|
121
124
|
|
|
122
125
|
// We'll be collecting shape ids of selected shapes; if we're holding shift key, we start from our initial shapes
|
|
123
126
|
const results = new Set(shiftKey ? this.initialSelectedShapeIds : [])
|
|
@@ -174,7 +177,7 @@ export class Brushing extends StateNode {
|
|
|
174
177
|
|
|
175
178
|
// If we're in wrap mode and the brush did not fully encloses the shape, it's a miss
|
|
176
179
|
// We also skip frames unless we've completely selected the frame.
|
|
177
|
-
if (isWrapping || editor.isShapeOfType(shape, 'frame')) {
|
|
180
|
+
if (isWrapping || editor.isShapeOfType<TLFrameShape>(shape, 'frame')) {
|
|
178
181
|
continue testAllShapes
|
|
179
182
|
}
|
|
180
183
|
|
|
@@ -83,12 +83,9 @@ export class Cropping extends StateNode {
|
|
|
83
83
|
const util = this.editor.getShapeUtil<ShapeWithCrop>(shape.type)
|
|
84
84
|
if (!util) return
|
|
85
85
|
|
|
86
|
-
const shiftKey = this.editor.inputs
|
|
87
|
-
const currentPagePoint = this.editor.inputs
|
|
88
|
-
|
|
89
|
-
.clone()
|
|
90
|
-
.sub(cursorHandleOffset)
|
|
91
|
-
const originPagePoint = this.editor.inputs.getOriginPagePoint().clone().sub(cursorHandleOffset)
|
|
86
|
+
const { shiftKey } = this.editor.inputs
|
|
87
|
+
const currentPagePoint = this.editor.inputs.currentPagePoint.clone().sub(cursorHandleOffset)
|
|
88
|
+
const originPagePoint = this.editor.inputs.originPagePoint.clone().sub(cursorHandleOffset)
|
|
92
89
|
const change = currentPagePoint.clone().sub(originPagePoint).rot(-shape.rotation)
|
|
93
90
|
|
|
94
91
|
const crop = shape.props.crop ?? getDefaultCrop()
|
|
@@ -148,7 +145,9 @@ export class Cropping extends StateNode {
|
|
|
148
145
|
|
|
149
146
|
private createSnapshot() {
|
|
150
147
|
const selectionRotation = this.editor.getSelectionRotation()
|
|
151
|
-
const
|
|
148
|
+
const {
|
|
149
|
+
inputs: { originPagePoint },
|
|
150
|
+
} = this.editor
|
|
152
151
|
|
|
153
152
|
const shape = this.editor.getOnlySelectedShape() as ShapeWithCrop
|
|
154
153
|
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
ShapeWithCrop,
|
|
3
3
|
StateNode,
|
|
4
4
|
TLClickEventInfo,
|
|
5
|
+
TLGroupShape,
|
|
5
6
|
TLKeyboardEventInfo,
|
|
6
7
|
TLPointerEventInfo,
|
|
7
8
|
Vec,
|
|
@@ -42,7 +43,7 @@ export class Idle extends StateNode {
|
|
|
42
43
|
switch (info.target) {
|
|
43
44
|
case 'canvas': {
|
|
44
45
|
const hitShape = getHitShapeOnCanvasPointerDown(this.editor)
|
|
45
|
-
if (hitShape && !this.editor.isShapeOfType(hitShape, 'group')) {
|
|
46
|
+
if (hitShape && !this.editor.isShapeOfType<TLGroupShape>(hitShape, 'group')) {
|
|
46
47
|
this.onPointerDown({
|
|
47
48
|
...info,
|
|
48
49
|
shape: hitShape,
|
|
@@ -112,7 +113,7 @@ export class Idle extends StateNode {
|
|
|
112
113
|
override onDoubleClick(info: TLClickEventInfo) {
|
|
113
114
|
// Without this, the double click's "settle" would trigger the reset
|
|
114
115
|
// after the user double clicked the edge to begin cropping
|
|
115
|
-
if (this.editor.inputs.
|
|
116
|
+
if (this.editor.inputs.shiftKey || info.phase !== 'up') return
|
|
116
117
|
|
|
117
118
|
const croppingShapeId = this.editor.getCroppingShapeId()
|
|
118
119
|
if (!croppingShapeId) return
|
|
@@ -190,7 +191,7 @@ export class Idle extends StateNode {
|
|
|
190
191
|
this.editor.markHistoryStoppingPoint('translate crop')
|
|
191
192
|
}
|
|
192
193
|
|
|
193
|
-
this.editor.updateShapes([partial])
|
|
194
|
+
this.editor.updateShapes<ShapeWithCrop>([partial])
|
|
194
195
|
}
|
|
195
196
|
}
|
|
196
197
|
}
|
|
@@ -94,8 +94,7 @@ export class TranslatingCrop extends StateNode {
|
|
|
94
94
|
|
|
95
95
|
if (!shape) return
|
|
96
96
|
|
|
97
|
-
const originPagePoint = this.editor.inputs
|
|
98
|
-
const currentPagePoint = this.editor.inputs.getCurrentPagePoint()
|
|
97
|
+
const { originPagePoint, currentPagePoint } = this.editor.inputs
|
|
99
98
|
const delta = currentPagePoint.clone().sub(originPagePoint)
|
|
100
99
|
const partial = getTranslateCroppedImageChange(this.editor, shape, delta)
|
|
101
100
|
|
|
@@ -12,7 +12,7 @@ export function getTranslateCroppedImageChange(editor: Editor, shape: ShapeWithC
|
|
|
12
12
|
return
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
const flatten: 'x' | 'y' | null = editor.inputs.
|
|
15
|
+
const flatten: 'x' | 'y' | null = editor.inputs.shiftKey
|
|
16
16
|
? Math.abs(delta.x) < Math.abs(delta.y)
|
|
17
17
|
? 'x'
|
|
18
18
|
: 'y'
|
|
@@ -73,7 +73,7 @@ export class DraggingHandle extends StateNode {
|
|
|
73
73
|
|
|
74
74
|
this.initialPageTransform = this.editor.getShapePageTransform(shape)!
|
|
75
75
|
this.initialPageRotation = this.initialPageTransform.rotation()
|
|
76
|
-
this.initialPagePoint = this.editor.inputs.
|
|
76
|
+
this.initialPagePoint = this.editor.inputs.originPagePoint.clone()
|
|
77
77
|
|
|
78
78
|
this.editor.setCursor({ type: isCreating ? 'cross' : 'grabbing', rotation: 0 })
|
|
79
79
|
|
|
@@ -115,7 +115,7 @@ export class DraggingHandle extends StateNode {
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
// <!-- Only relevant to arrows
|
|
118
|
-
if (this.editor.isShapeOfType(shape, 'arrow')) {
|
|
118
|
+
if (this.editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) {
|
|
119
119
|
const initialBinding = getArrowBindings(this.editor, shape)[info.handle.id as 'start' | 'end']
|
|
120
120
|
|
|
121
121
|
this.isPrecise = false
|
|
@@ -228,7 +228,7 @@ export class DraggingHandle extends StateNode {
|
|
|
228
228
|
}
|
|
229
229
|
const endChanges = util.onHandleDragEnd?.(shape, handleDragInfo)
|
|
230
230
|
if (endChanges) {
|
|
231
|
-
this.editor.updateShapes([{ ...endChanges, id: shape.id }])
|
|
231
|
+
this.editor.updateShapes([{ ...endChanges, id: shape.id, type: shape.type }])
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
234
|
|
|
@@ -284,12 +284,10 @@ export class DraggingHandle extends StateNode {
|
|
|
284
284
|
const { editor, shapeId, initialPagePoint } = this
|
|
285
285
|
const { initialHandle, initialPageRotation, initialAdjacentHandle } = this
|
|
286
286
|
const isSnapMode = this.editor.user.getIsSnapMode()
|
|
287
|
-
const {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
const altKey = editor.inputs.getAltKey()
|
|
292
|
-
const pointerVelocity = editor.inputs.getPointerVelocity()
|
|
287
|
+
const {
|
|
288
|
+
snaps,
|
|
289
|
+
inputs: { currentPagePoint, shiftKey, ctrlKey, altKey, pointerVelocity },
|
|
290
|
+
} = editor
|
|
293
291
|
|
|
294
292
|
const initial = this.info.shape
|
|
295
293
|
|
|
@@ -297,7 +295,7 @@ export class DraggingHandle extends StateNode {
|
|
|
297
295
|
if (!shape) return
|
|
298
296
|
const util = editor.getShapeUtil(shape)
|
|
299
297
|
|
|
300
|
-
const initialBinding = editor.isShapeOfType(shape, 'arrow')
|
|
298
|
+
const initialBinding = editor.isShapeOfType<TLArrowShape>(shape, 'arrow')
|
|
301
299
|
? getArrowBindings(editor, shape)[initialHandle.id as 'start' | 'end']
|
|
302
300
|
: undefined
|
|
303
301
|
|
|
@@ -354,7 +352,10 @@ export class DraggingHandle extends StateNode {
|
|
|
354
352
|
const next: TLShapePartial<any> = { id: shape.id, type: shape.type, ...changes }
|
|
355
353
|
|
|
356
354
|
// Arrows
|
|
357
|
-
if (
|
|
355
|
+
if (
|
|
356
|
+
initialHandle.type === 'vertex' &&
|
|
357
|
+
this.editor.isShapeOfType<TLArrowShape>(shape, 'arrow')
|
|
358
|
+
) {
|
|
358
359
|
const bindingAfter = getArrowBindings(editor, shape)[initialHandle.id as 'start' | 'end']
|
|
359
360
|
|
|
360
361
|
if (bindingAfter) {
|