tldraw 4.3.0-next.f4772c19540d → 4.4.0-canary.29afdff6bb04
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/README.md +0 -2
- package/dist-cjs/index.d.ts +311 -242
- package/dist-cjs/index.js +13 -5
- 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 +2 -2
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
- package/dist-cjs/lib/defaultEmbedDefinitions.js +1 -1
- 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 +6 -1
- package/dist-cjs/lib/defaultSideEffects.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +14 -13
- 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/elbow/getElbowArrowInfo.js +1 -1
- package/dist-cjs/lib/shapes/arrow/elbow/getElbowArrowInfo.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/shared.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js +4 -10
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +7 -4
- 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 +25 -23
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/getPath.js +20 -11
- package/dist-cjs/lib/shapes/draw/getPath.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +82 -86
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +3 -3
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +6 -0
- 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 +7 -13
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +146 -142
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/toolStates/Idle.js +5 -10
- 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 +23 -21
- 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 +6 -11
- 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 +5 -10
- package/dist-cjs/lib/shapes/note/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +3 -2
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +14 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +3 -3
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js +12 -4
- 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 +1 -0
- 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/{useForceSolid.js → useEfficientZoomThreshold.js} +10 -7
- package/dist-cjs/lib/shapes/shared/useEfficientZoomThreshold.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 +5 -0
- package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js +5 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js +4 -10
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Pointing.js +7 -5
- 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 +12 -6
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +2 -4
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/HandTool.js +3 -5
- package/dist-cjs/lib/tools/HandTool/HandTool.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js +3 -2
- 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 +10 -11
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js +20 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +3 -3
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js +4 -6
- 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 +2 -1
- 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 +8 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js +38 -11
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +42 -50
- 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 +4 -14
- 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 +4 -13
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +5 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +2 -3
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js +22 -8
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js.map +3 -3
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +13 -11
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/selectHelpers.js +15 -4
- 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 +5 -6
- package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js +1 -3
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
- 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 +3 -9
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js +1 -3
- 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 +2 -22
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/EditLinkDialog.js +11 -1
- package/dist-cjs/lib/ui/components/EditLinkDialog.js.map +2 -2
- package/dist-cjs/lib/ui/components/HelperButtons/BackToContent.js +1 -1
- package/dist-cjs/lib/ui/components/HelperButtons/BackToContent.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 +2 -15
- package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js.map +3 -3
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js +3 -1
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js.map +2 -2
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js +6 -0
- 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/menu-items.js +3 -1
- package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +3 -1
- 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 +149 -93
- 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 +14 -7
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
- package/dist-cjs/lib/ui/context/actions.js +7 -8
- package/dist-cjs/lib/ui/context/actions.js.map +2 -2
- package/dist-cjs/lib/ui/context/components.js +1 -2
- 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 +4 -5
- 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 +16 -6
- 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/{tools/selection-logic/getShouldEnterCropModeOnPointerDown.js → utils/test-helpers.js} +21 -8
- package/dist-cjs/lib/utils/test-helpers.js.map +7 -0
- package/dist-cjs/lib/utils/text/richText.js +15 -19
- package/dist-cjs/lib/utils/text/richText.js.map +3 -3
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +7 -2
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
- package/dist-esm/index.d.mts +311 -242
- package/dist-esm/index.mjs +14 -5
- 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 +2 -2
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
- package/dist-esm/lib/defaultEmbedDefinitions.mjs +1 -1
- 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 +6 -1
- 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/elbow/getElbowArrowInfo.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/elbow/getElbowArrowInfo.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/shared.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs +4 -10
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +7 -4
- 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 +30 -25
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/getPath.mjs +21 -11
- package/dist-esm/lib/shapes/draw/getPath.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +83 -86
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +3 -3
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +6 -0
- 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 +7 -13
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +147 -142
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs +5 -10
- 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 +24 -22
- 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 +7 -12
- 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 +5 -10
- package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +4 -3
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +14 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +12 -4
- 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 +1 -0
- 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/useEfficientZoomThreshold.mjs +12 -0
- package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.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 +5 -0
- package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +5 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs +4 -10
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs +7 -5
- 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 +13 -6
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +3 -8
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/HandTool.mjs +3 -5
- package/dist-esm/lib/tools/HandTool/HandTool.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs +3 -2
- 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 +10 -11
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs +20 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +3 -3
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs +4 -6
- 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 +2 -1
- 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 +8 -6
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs +38 -11
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +43 -51
- 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 +6 -19
- 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 +4 -13
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +5 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +2 -3
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs +23 -8
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs.map +3 -3
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +13 -11
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs +17 -4
- 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 +5 -6
- package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs +1 -3
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
- 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 +2 -8
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs +1 -3
- 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 +4 -31
- package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/EditLinkDialog.mjs +11 -1
- package/dist-esm/lib/ui/components/EditLinkDialog.mjs.map +2 -2
- package/dist-esm/lib/ui/components/HelperButtons/BackToContent.mjs +1 -1
- package/dist-esm/lib/ui/components/HelperButtons/BackToContent.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 +3 -6
- package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs.map +2 -2
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs +3 -1
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs.map +2 -2
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs +6 -0
- 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/menu-items.mjs +4 -5
- package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +3 -1
- 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 +157 -95
- 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 +15 -8
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
- package/dist-esm/lib/ui/context/actions.mjs +7 -8
- package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
- package/dist-esm/lib/ui/context/components.mjs +1 -2
- package/dist-esm/lib/ui/context/components.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/menu-hooks.mjs +1 -4
- 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 +4 -5
- 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 +17 -6
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
- package/dist-esm/lib/utils/export/exportAs.mjs +1 -3
- 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/test-helpers.mjs +21 -0
- package/dist-esm/lib/utils/test-helpers.mjs.map +7 -0
- package/dist-esm/lib/utils/text/richText.mjs +12 -5
- package/dist-esm/lib/utils/text/richText.mjs.map +2 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +8 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
- package/package.json +18 -16
- package/src/index.ts +6 -2
- package/src/lib/Tldraw.test.tsx +46 -1
- package/src/lib/bindings/arrow/ArrowBindingUtil.ts +1 -1
- package/src/lib/canvas/TldrawSelectionForeground.tsx +6 -11
- package/src/lib/defaultEmbedDefinitions.ts +2 -1
- package/src/lib/defaultExternalContentHandlers.ts +13 -14
- package/src/lib/defaultSideEffects.ts +6 -1
- package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +40 -133
- 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 +2 -0
- 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/elbow/getElbowArrowInfo.test.ts +80 -0
- package/src/lib/shapes/arrow/elbow/getElbowArrowInfo.tsx +1 -1
- package/src/lib/shapes/arrow/shared.ts +4 -4
- package/src/lib/shapes/arrow/toolStates/Idle.tsx +4 -14
- package/src/lib/shapes/arrow/toolStates/Pointing.tsx +8 -5
- package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +1 -1
- package/src/lib/shapes/bookmark/bookmarks.ts +3 -3
- package/src/lib/shapes/draw/DrawShapeUtil.test.ts +146 -0
- package/src/lib/shapes/draw/DrawShapeUtil.tsx +33 -27
- package/src/lib/shapes/draw/getPath.ts +31 -10
- package/src/lib/shapes/draw/toolStates/Drawing.ts +100 -90
- package/src/lib/shapes/embed/EmbedShapeUtil.tsx +8 -1
- package/src/lib/shapes/frame/FrameShapeTool.ts +1 -1
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +11 -11
- package/src/lib/shapes/geo/GeoShapeUtil.test.tsx +10 -2
- package/src/lib/shapes/geo/GeoShapeUtil.tsx +228 -176
- package/src/lib/shapes/geo/toolStates/Idle.ts +5 -15
- package/src/lib/shapes/geo/toolStates/Pointing.ts +6 -6
- package/src/lib/shapes/highlight/HighlightShapeUtil.test.ts +146 -0
- package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +27 -24
- 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 +2 -1
- package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -10
- package/src/lib/shapes/note/noteCloning.test.ts +3 -1
- package/src/lib/shapes/note/noteHelpers.ts +2 -2
- package/src/lib/shapes/note/toolStates/Pointing.ts +5 -10
- package/src/lib/shapes/shared/HyperlinkButton.tsx +4 -3
- package/src/lib/shapes/shared/PlainTextLabel.tsx +12 -2
- package/src/lib/shapes/shared/RichTextLabel.tsx +14 -4
- package/src/lib/shapes/shared/ShapeFill.tsx +2 -2
- package/src/lib/shapes/shared/crop.ts +1 -0
- package/src/lib/shapes/shared/interpolate-props.ts +4 -4
- package/src/lib/shapes/shared/useEditablePlainText.ts +7 -3
- package/src/lib/shapes/shared/useEditableRichText.ts +7 -3
- package/src/lib/shapes/shared/useEfficientZoomThreshold.ts +10 -0
- package/src/lib/shapes/shared/useImageOrVideoAsset.ts +1 -1
- package/src/lib/shapes/text/RichTextArea.tsx +5 -0
- package/src/lib/shapes/text/TextShapeTool.test.ts +4 -4
- package/src/lib/shapes/text/TextShapeUtil.tsx +5 -0
- package/src/lib/shapes/text/toolStates/Idle.ts +4 -14
- package/src/lib/shapes/text/toolStates/Pointing.ts +8 -8
- package/src/lib/shapes/video/VideoShapeUtil.tsx +2 -1
- package/src/lib/tools/EraserTool/childStates/Erasing.ts +21 -11
- package/src/lib/tools/EraserTool/childStates/Pointing.ts +5 -20
- package/src/lib/tools/HandTool/HandTool.ts +3 -5
- package/src/lib/tools/HandTool/childStates/Dragging.ts +3 -2
- 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 +14 -11
- package/src/lib/tools/SelectTool/childStates/Brushing.ts +30 -14
- package/src/lib/tools/SelectTool/childStates/Crop/children/Cropping.ts +7 -6
- package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +3 -4
- 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 +2 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +11 -12
- package/src/lib/tools/SelectTool/childStates/EditingShape.ts +57 -16
- package/src/lib/tools/SelectTool/childStates/Idle.ts +64 -81
- package/src/lib/tools/SelectTool/childStates/PointingArrowLabel.ts +7 -8
- package/src/lib/tools/SelectTool/childStates/PointingCanvas.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingHandle.ts +9 -17
- 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 +4 -14
- package/src/lib/tools/SelectTool/childStates/Resizing.ts +8 -10
- package/src/lib/tools/SelectTool/childStates/Rotating.ts +2 -3
- package/src/lib/tools/SelectTool/childStates/ScribbleBrushing.ts +34 -14
- package/src/lib/tools/SelectTool/childStates/Translating.ts +16 -15
- package/src/lib/tools/SelectTool/selectHelpers.ts +39 -4
- 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 +5 -6
- package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +1 -3
- 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 +5 -2
- package/src/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.tsx +1 -9
- package/src/lib/ui/components/ContextMenu/DefaultContextMenu.tsx +1 -3
- package/src/lib/ui/components/CursorChatBubble.tsx +2 -2
- package/src/lib/ui/components/DefaultDebugPanel.tsx +4 -43
- package/src/lib/ui/components/EditLinkDialog.tsx +16 -6
- package/src/lib/ui/components/HelperButtons/BackToContent.tsx +1 -1
- 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 +6 -5
- package/src/lib/ui/components/PageMenu/PageItemInput.tsx +3 -1
- package/src/lib/ui/components/SharePanel/PeopleMenu.tsx +8 -0
- 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/menu-items.tsx +9 -15
- package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +5 -3
- package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +2 -2
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +208 -113
- 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 +7 -4
- package/src/lib/ui/context/actions.tsx +15 -19
- package/src/lib/ui/context/components.tsx +1 -2
- package/src/lib/ui/hooks/menu-hooks.ts +9 -19
- package/src/lib/ui/hooks/useClipboardEvents.ts +2 -2
- package/src/lib/ui/hooks/useFlatten.ts +1 -2
- package/src/lib/ui/hooks/useKeyboardShortcuts.ts +2 -2
- package/src/lib/ui/hooks/useTools.tsx +5 -7
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +27 -23
- package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +12 -48
- package/src/lib/utils/excalidraw/putExcalidrawContent.ts +19 -6
- package/src/lib/utils/export/exportAs.ts +2 -9
- package/src/lib/utils/frames/frames.ts +1 -1
- package/src/lib/utils/test-helpers.ts +62 -0
- package/src/lib/utils/text/richText.ts +13 -8
- package/src/lib/utils/tldr/buildFromV1Document.ts +21 -19
- package/src/test/Editor.test.tsx +78 -41
- package/src/test/EraserTool.test.ts +10 -12
- package/src/test/SelectTool.test.ts +11 -19
- package/src/test/TestEditor.ts +49 -51
- package/src/test/TldrawEditor.test.tsx +24 -20
- package/src/test/__snapshots__/drawing.test.ts.snap +3 -1257
- package/src/test/__snapshots__/resizing.test.ts.snap +3 -12
- package/src/test/arrows-megabus.test.tsx +1 -1
- package/src/test/bindings.test.tsx +29 -25
- package/src/test/bindingsIndex.test.tsx +4 -4
- package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +10 -10
- package/src/test/commands/cameraState.test.ts +299 -0
- package/src/test/commands/createShape.test.ts +64 -0
- package/src/test/commands/createShapes.test.ts +15 -1
- package/src/test/commands/getSvgString.test.ts +2 -2
- package/src/test/commands/isShapeOfType.test.ts +44 -0
- package/src/test/commands/putContent.test.ts +80 -1
- package/src/test/commands/setCamera.test.ts +13 -11
- package/src/test/commands/stackShapes.test.ts +34 -8
- package/src/test/commands/updateShape.test.ts +67 -0
- package/src/test/commands/updateShapes.test.ts +21 -5
- package/src/test/commands/zoomToBounds.test.ts +19 -3
- package/src/test/commands/zoomToSelection.test.ts +14 -3
- package/src/test/custom-clipping.test.ts +52 -44
- package/src/test/customSnapping.test.tsx +77 -62
- package/src/test/drawing.test.ts +17 -10
- package/src/test/duplicate.test.ts +1 -1
- package/src/test/flipShapes.test.ts +33 -0
- package/src/test/frames.test.ts +94 -2
- package/src/test/getCulledShapes.test.tsx +11 -3
- package/src/test/getShapeAtPoint.test.ts +2 -2
- package/src/test/groups.test.tsx +7 -4
- package/src/test/modifiers.test.ts +6 -6
- package/src/test/notVisibleShapes.test.ts +698 -0
- package/src/test/resizing.test.ts +16 -22
- package/src/test/selection-omnibus.test.ts +13 -13
- package/src/test/shapeutils.test.ts +1 -1
- package/src/test/spacebarPanning.test.ts +28 -10
- package/src/test/styles2.test.tsx +1 -1
- package/src/test/styles3.test.ts +5 -5
- package/src/test/test-jsx.tsx +72 -57
- package/src/test/text.test.ts +15 -17
- package/src/test/translating.test.ts +6 -8
- package/src/test/ui/BackToContent.test.tsx +111 -0
- package/tldraw.css +41 -35
- package/dist-cjs/lib/shapes/shared/useForceSolid.js.map +0 -7
- package/dist-cjs/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.js.map +0 -7
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js +0 -32
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js.map +0 -7
- package/dist-cjs/lib/utils/text/textDirection.js +0 -51
- package/dist-cjs/lib/utils/text/textDirection.js.map +0 -7
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs +0 -9
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs.map +0 -7
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs +0 -8
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs.map +0 -7
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs +0 -12
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs.map +0 -7
- package/dist-esm/lib/utils/text/textDirection.mjs +0 -31
- package/dist-esm/lib/utils/text/textDirection.mjs.map +0 -7
- package/src/lib/shapes/shared/useForceSolid.ts +0 -6
- package/src/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.ts +0 -10
- package/src/lib/ui/components/TopPanel/DefaultTopPanel.tsx +0 -10
- package/src/lib/utils/text/textDirection.ts +0 -32
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Box,
|
|
3
3
|
DefaultFontFamilies,
|
|
4
|
+
ExtractShapeByProps,
|
|
4
5
|
TLDefaultFillStyle,
|
|
5
6
|
TLDefaultFontStyle,
|
|
6
7
|
TLDefaultHorizontalAlignStyle,
|
|
@@ -14,6 +15,7 @@ import {
|
|
|
14
15
|
useReactor,
|
|
15
16
|
useValue,
|
|
16
17
|
} from '@tldraw/editor'
|
|
18
|
+
import classNames from 'classnames'
|
|
17
19
|
import React, { useMemo } from 'react'
|
|
18
20
|
import { renderHtmlFromRichText } from '../../utils/text/richText'
|
|
19
21
|
import { RichTextArea } from '../text/RichTextArea'
|
|
@@ -24,7 +26,7 @@ import { useEditableRichText } from './useEditableRichText'
|
|
|
24
26
|
/** @public */
|
|
25
27
|
export interface RichTextLabelProps {
|
|
26
28
|
shapeId: TLShapeId
|
|
27
|
-
type:
|
|
29
|
+
type: ExtractShapeByProps<{ richText: TLRichText }>['type']
|
|
28
30
|
font: TLDefaultFontStyle
|
|
29
31
|
fontSize: number
|
|
30
32
|
lineHeight: number
|
|
@@ -43,6 +45,7 @@ export interface RichTextLabelProps {
|
|
|
43
45
|
textHeight?: number
|
|
44
46
|
padding?: number
|
|
45
47
|
hasCustomTabBehavior?: boolean
|
|
48
|
+
showTextOutline?: boolean
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
/**
|
|
@@ -71,6 +74,7 @@ export const RichTextLabel = React.memo(function RichTextLabel({
|
|
|
71
74
|
textWidth,
|
|
72
75
|
textHeight,
|
|
73
76
|
hasCustomTabBehavior,
|
|
77
|
+
showTextOutline = true,
|
|
74
78
|
}: RichTextLabelProps) {
|
|
75
79
|
const editor = useEditor()
|
|
76
80
|
const isDragging = React.useRef(false)
|
|
@@ -93,7 +97,7 @@ export const RichTextLabel = React.memo(function RichTextLabel({
|
|
|
93
97
|
'isDragging',
|
|
94
98
|
() => {
|
|
95
99
|
editor.getInstanceState()
|
|
96
|
-
isDragging.current = editor.inputs.
|
|
100
|
+
isDragging.current = editor.inputs.getIsDragging()
|
|
97
101
|
},
|
|
98
102
|
[editor]
|
|
99
103
|
)
|
|
@@ -128,7 +132,10 @@ export const RichTextLabel = React.memo(function RichTextLabel({
|
|
|
128
132
|
const cssPrefix = classNamePrefix || 'tl-text'
|
|
129
133
|
return (
|
|
130
134
|
<div
|
|
131
|
-
className={
|
|
135
|
+
className={classNames(
|
|
136
|
+
`${cssPrefix}-label tl-text-wrapper tl-rich-text-wrapper`,
|
|
137
|
+
showTextOutline ? 'tl-text__outline' : 'tl-text__no-outline'
|
|
138
|
+
)}
|
|
132
139
|
aria-hidden={!isEditing}
|
|
133
140
|
data-font={font}
|
|
134
141
|
data-align={align}
|
|
@@ -258,7 +265,10 @@ export function RichTextSVG({
|
|
|
258
265
|
y={bounds.minY}
|
|
259
266
|
width={bounds.w}
|
|
260
267
|
height={bounds.h}
|
|
261
|
-
className=
|
|
268
|
+
className={classNames(
|
|
269
|
+
'tl-export-embed-styles tl-rich-text tl-rich-text-svg',
|
|
270
|
+
showTextOutline ? 'tl-text__outline' : 'tl-text__no-outline'
|
|
271
|
+
)}
|
|
262
272
|
>
|
|
263
273
|
<div style={wrapperStyle}>
|
|
264
274
|
<div dangerouslySetInnerHTML={{ __html: html }} style={style} />
|
|
@@ -50,10 +50,10 @@ export const ShapeFill = React.memo(function ShapeFill({
|
|
|
50
50
|
export function PatternFill({ d, color, theme }: ShapeFillProps) {
|
|
51
51
|
const editor = useEditor()
|
|
52
52
|
const svgExport = useSvgExportContext()
|
|
53
|
-
const zoomLevel = useValue('zoomLevel', () => editor.
|
|
53
|
+
const zoomLevel = useValue('zoomLevel', () => editor.getEfficientZoomLevel(), [editor])
|
|
54
54
|
const getHashPatternZoomName = useGetHashPatternZoomName()
|
|
55
55
|
|
|
56
|
-
const teenyTiny =
|
|
56
|
+
const teenyTiny = zoomLevel <= 0.18
|
|
57
57
|
|
|
58
58
|
return (
|
|
59
59
|
<>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TLDrawShapeSegment, VecModel, lerp } from '@tldraw/editor'
|
|
1
|
+
import { TLDrawShapeSegment, VecModel, b64Vecs, lerp } from '@tldraw/editor'
|
|
2
2
|
|
|
3
3
|
/** @public */
|
|
4
4
|
export const interpolateSegments = (
|
|
@@ -10,8 +10,8 @@ export const interpolateSegments = (
|
|
|
10
10
|
const endPoints: VecModel[] = []
|
|
11
11
|
|
|
12
12
|
// Extract all points from startSegments and endSegments
|
|
13
|
-
startSegments.forEach((segment) => startPoints.push(...segment.
|
|
14
|
-
endSegments.forEach((segment) => endPoints.push(...segment.
|
|
13
|
+
startSegments.forEach((segment) => startPoints.push(...b64Vecs.decodePoints(segment.path)))
|
|
14
|
+
endSegments.forEach((segment) => endPoints.push(...b64Vecs.decodePoints(segment.path)))
|
|
15
15
|
|
|
16
16
|
const maxLength = Math.max(startPoints.length, endPoints.length)
|
|
17
17
|
const pointsToUseStart: VecModel[] = []
|
|
@@ -39,7 +39,7 @@ export const interpolateSegments = (
|
|
|
39
39
|
return [
|
|
40
40
|
{
|
|
41
41
|
type: 'free',
|
|
42
|
-
|
|
42
|
+
path: b64Vecs.encodePoints(interpolatedPoints),
|
|
43
43
|
},
|
|
44
44
|
]
|
|
45
45
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Editor,
|
|
3
|
+
ExtractShapeByProps,
|
|
3
4
|
TLShapeId,
|
|
4
|
-
TLUnknownShape,
|
|
5
5
|
getPointerInfo,
|
|
6
6
|
noop,
|
|
7
7
|
preventDefault,
|
|
@@ -13,7 +13,11 @@ import React, { useCallback, useEffect, useRef } from 'react'
|
|
|
13
13
|
import { TextHelpers } from './TextHelpers'
|
|
14
14
|
|
|
15
15
|
/** @public */
|
|
16
|
-
export function useEditablePlainText(
|
|
16
|
+
export function useEditablePlainText(
|
|
17
|
+
shapeId: TLShapeId,
|
|
18
|
+
type: ExtractShapeByProps<{ text: string }>['type'],
|
|
19
|
+
text?: string
|
|
20
|
+
) {
|
|
17
21
|
const commonUseEditableTextHandlers = useEditableTextCommon(shapeId)
|
|
18
22
|
const isEditing = commonUseEditableTextHandlers.isEditing
|
|
19
23
|
const editor = useEditor()
|
|
@@ -75,7 +79,7 @@ export function useEditablePlainText(shapeId: TLShapeId, type: string, text?: st
|
|
|
75
79
|
if (editor.getEditingShapeId() !== shapeId) return
|
|
76
80
|
|
|
77
81
|
const normalizedPlaintext = TextHelpers.normalizeText(plaintext || '')
|
|
78
|
-
editor.updateShape
|
|
82
|
+
editor.updateShape({
|
|
79
83
|
id: shapeId,
|
|
80
84
|
type,
|
|
81
85
|
props: { text: normalizedPlaintext },
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { TLRichText, TLShapeId,
|
|
1
|
+
import { ExtractShapeByProps, TLRichText, TLShapeId, isAccelKey, useEditor } from '@tldraw/editor'
|
|
2
2
|
import { useCallback, useEffect, useRef } from 'react'
|
|
3
3
|
import { isEmptyRichText } from '../../utils/text/richText'
|
|
4
4
|
import { useEditableTextCommon } from './useEditablePlainText'
|
|
5
5
|
|
|
6
6
|
/** @public */
|
|
7
|
-
export function useEditableRichText(
|
|
7
|
+
export function useEditableRichText(
|
|
8
|
+
shapeId: TLShapeId,
|
|
9
|
+
type: ExtractShapeByProps<{ richText: TLRichText }>['type'],
|
|
10
|
+
richText?: TLRichText
|
|
11
|
+
) {
|
|
8
12
|
const commonUseEditableTextHandlers = useEditableTextCommon(shapeId)
|
|
9
13
|
const isEditing = commonUseEditableTextHandlers.isEditing
|
|
10
14
|
const editor = useEditor()
|
|
@@ -39,7 +43,7 @@ export function useEditableRichText(shapeId: TLShapeId, type: string, richText?:
|
|
|
39
43
|
({ richText }: { richText: TLRichText }) => {
|
|
40
44
|
if (editor.getEditingShapeId() !== shapeId) return
|
|
41
45
|
|
|
42
|
-
editor.updateShape
|
|
46
|
+
editor.updateShape({
|
|
43
47
|
id: shapeId,
|
|
44
48
|
type,
|
|
45
49
|
props: { richText },
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useEditor, useValue } from '@tldraw/editor'
|
|
2
|
+
|
|
3
|
+
/** Returns true when zoomed out far enough that shapes should render in a simplified "solid" style. */
|
|
4
|
+
export function useEfficientZoomThreshold(threshold = 0.25) {
|
|
5
|
+
const editor = useEditor()
|
|
6
|
+
return useValue('efficient zoom threshold', () => editor.getEfficientZoomLevel() < threshold, [
|
|
7
|
+
editor,
|
|
8
|
+
threshold,
|
|
9
|
+
])
|
|
10
|
+
}
|
|
@@ -96,7 +96,7 @@ export function useImageOrVideoAsset({ shapeId, assetId, width }: UseImageOrVide
|
|
|
96
96
|
|
|
97
97
|
const screenScale = exportInfo
|
|
98
98
|
? exportInfo.scale * (width / asset.props.w)
|
|
99
|
-
: editor.
|
|
99
|
+
: editor.getEfficientZoomLevel() * (width / asset.props.w)
|
|
100
100
|
|
|
101
101
|
function resolve(asset: TLImageAsset | TLVideoAsset, url: string | null) {
|
|
102
102
|
if (isCancelled) return // don't update if the hook has remounted
|
|
@@ -183,6 +183,11 @@ 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',
|
|
186
191
|
...restOfTipTapConfig,
|
|
187
192
|
content: rInitialRichText.current as JSONContent,
|
|
188
193
|
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DefaultTextAlignStyle,
|
|
1
|
+
import { DefaultTextAlignStyle, 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([
|
|
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([
|
|
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([
|
|
137
137
|
{
|
|
138
138
|
...editor.getCurrentPageShapes()[0]!,
|
|
139
139
|
type: 'text',
|
|
@@ -43,6 +43,8 @@ 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
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
/** @public */
|
|
@@ -53,6 +55,7 @@ export class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
53
55
|
|
|
54
56
|
override options: TextShapeOptions = {
|
|
55
57
|
extraArrowHorizontalPadding: 10,
|
|
58
|
+
showTextOutline: true,
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
getDefaultProps(): TLTextShape['props'] {
|
|
@@ -140,6 +143,7 @@ export class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
140
143
|
isSelected={isSelected}
|
|
141
144
|
textWidth={width}
|
|
142
145
|
textHeight={height}
|
|
146
|
+
showTextOutline={this.options.showTextOutline}
|
|
143
147
|
style={{
|
|
144
148
|
transform: `scale(${scale})`,
|
|
145
149
|
transformOrigin: 'top left',
|
|
@@ -175,6 +179,7 @@ export class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
175
179
|
labelColor={getColorValue(theme, shape.props.color, 'solid')}
|
|
176
180
|
bounds={exportBounds}
|
|
177
181
|
padding={0}
|
|
182
|
+
showTextOutline={this.options.showTextOutline}
|
|
178
183
|
/>
|
|
179
184
|
)
|
|
180
185
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
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'
|
|
3
4
|
|
|
4
5
|
export class Idle extends StateNode {
|
|
5
6
|
static override id = 'idle'
|
|
@@ -27,21 +28,10 @@ export class Idle extends StateNode {
|
|
|
27
28
|
|
|
28
29
|
override onKeyDown(info: TLKeyboardEventInfo) {
|
|
29
30
|
if (info.key === 'Enter') {
|
|
30
|
-
if (this.editor.getIsReadonly()) return null
|
|
31
31
|
const onlySelectedShape = this.editor.getOnlySelectedShape()
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
}
|
|
32
|
+
if (!this.editor.canEditShape(onlySelectedShape)) return
|
|
33
|
+
this.editor.setCurrentTool('select')
|
|
34
|
+
startEditingShapeWithRichText(this.editor, onlySelectedShape.id, { info })
|
|
45
35
|
}
|
|
46
36
|
}
|
|
47
37
|
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
maybeSnapToGrid,
|
|
10
10
|
toRichText,
|
|
11
11
|
} from '@tldraw/editor'
|
|
12
|
+
import { startEditingShapeWithRichText } from '../../../tools/SelectTool/selectHelpers'
|
|
12
13
|
|
|
13
14
|
export class Pointing extends StateNode {
|
|
14
15
|
static override id = 'pointing'
|
|
@@ -37,11 +38,12 @@ export class Pointing extends StateNode {
|
|
|
37
38
|
if (Date.now() - this.enterTime < 150) return
|
|
38
39
|
|
|
39
40
|
const { editor } = this
|
|
40
|
-
const
|
|
41
|
+
const isPointing = editor.inputs.getIsPointing()
|
|
41
42
|
|
|
42
43
|
if (!isPointing) return
|
|
43
44
|
|
|
44
|
-
const
|
|
45
|
+
const originPagePoint = editor.inputs.getOriginPagePoint()
|
|
46
|
+
const currentPagePoint = editor.inputs.getCurrentPagePoint()
|
|
45
47
|
|
|
46
48
|
const currentDragDist = Math.abs(originPagePoint.x - currentPagePoint.x)
|
|
47
49
|
|
|
@@ -83,8 +85,7 @@ export class Pointing extends StateNode {
|
|
|
83
85
|
creationCursorOffset: { x: currentDragDist * scale, y: 1 },
|
|
84
86
|
onInteractionEnd: 'text',
|
|
85
87
|
onCreate: () => {
|
|
86
|
-
editor
|
|
87
|
-
// this will automatically set the state to 'select.editing_shape'
|
|
88
|
+
startEditingShapeWithRichText(editor, shape.id)
|
|
88
89
|
},
|
|
89
90
|
})
|
|
90
91
|
}
|
|
@@ -109,13 +110,12 @@ export class Pointing extends StateNode {
|
|
|
109
110
|
private complete() {
|
|
110
111
|
this.editor.markHistoryStoppingPoint('creating text shape')
|
|
111
112
|
const id = createShapeId()
|
|
112
|
-
const
|
|
113
|
+
const originPagePoint = this.editor.inputs.getOriginPagePoint()
|
|
113
114
|
const shape = this.createTextShape(id, originPagePoint, true, 20)
|
|
114
115
|
if (!shape) return
|
|
115
116
|
|
|
116
117
|
this.editor.select(id)
|
|
117
|
-
this.editor
|
|
118
|
-
// this will automatically set the state to 'select.editing_shape'
|
|
118
|
+
startEditingShapeWithRichText(this.editor, id)
|
|
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({
|
|
128
128
|
id,
|
|
129
129
|
type: 'text',
|
|
130
130
|
x: point.x,
|
|
@@ -95,7 +95,8 @@ 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 =
|
|
98
|
+
const showControls =
|
|
99
|
+
editor.getShapeGeometry(shape).bounds.w * editor.getEfficientZoomLevel() >= 110
|
|
99
100
|
const isEditing = useIsEditing(shape.id)
|
|
100
101
|
const prefersReducedMotion = usePrefersReducedMotion()
|
|
101
102
|
const { Spinner } = useEditorComponents()
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
+
Box,
|
|
2
3
|
StateNode,
|
|
3
|
-
TLFrameShape,
|
|
4
|
-
TLGroupShape,
|
|
5
4
|
TLPointerEventInfo,
|
|
6
5
|
TLShapeId,
|
|
7
6
|
isAccelKey,
|
|
@@ -28,7 +27,7 @@ export class Erasing extends StateNode {
|
|
|
28
27
|
this.markId = this.editor.markHistoryStoppingPoint('erase scribble begin')
|
|
29
28
|
this.info = info
|
|
30
29
|
|
|
31
|
-
const
|
|
30
|
+
const originPagePoint = this.editor.inputs.getOriginPagePoint()
|
|
32
31
|
this.excludedShapeIds = new Set(
|
|
33
32
|
this.editor
|
|
34
33
|
.getCurrentPageShapes()
|
|
@@ -37,8 +36,8 @@ export class Erasing extends StateNode {
|
|
|
37
36
|
if (this.editor.isShapeOrAncestorLocked(shape)) return true
|
|
38
37
|
//If the shape is a group or frame, check we're inside it when we start erasing
|
|
39
38
|
if (
|
|
40
|
-
this.editor.isShapeOfType
|
|
41
|
-
this.editor.isShapeOfType
|
|
39
|
+
this.editor.isShapeOfType(shape, 'group') ||
|
|
40
|
+
this.editor.isShapeOfType(shape, 'frame')
|
|
42
41
|
) {
|
|
43
42
|
const pointInShapeShape = this.editor.getPointInShapeSpace(shape, originPagePoint)
|
|
44
43
|
const geometry = this.editor.getShapeGeometry(shape)
|
|
@@ -60,7 +59,7 @@ export class Erasing extends StateNode {
|
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
private pushPointToScribble() {
|
|
63
|
-
const { x, y } = this.editor.inputs.
|
|
62
|
+
const { x, y } = this.editor.inputs.getCurrentPagePoint()
|
|
64
63
|
this.editor.scribbles.addPoint(this.scribbleId, x, y)
|
|
65
64
|
}
|
|
66
65
|
|
|
@@ -99,10 +98,8 @@ export class Erasing extends StateNode {
|
|
|
99
98
|
const { editor, excludedShapeIds } = this
|
|
100
99
|
const erasingShapeIds = editor.getErasingShapeIds()
|
|
101
100
|
const zoomLevel = editor.getZoomLevel()
|
|
102
|
-
const
|
|
103
|
-
const
|
|
104
|
-
inputs: { currentPagePoint, previousPagePoint },
|
|
105
|
-
} = editor
|
|
101
|
+
const currentPagePoint = editor.inputs.getCurrentPagePoint()
|
|
102
|
+
const previousPagePoint = editor.inputs.getPreviousPagePoint()
|
|
106
103
|
|
|
107
104
|
this.pushPointToScribble()
|
|
108
105
|
|
|
@@ -110,8 +107,21 @@ export class Erasing extends StateNode {
|
|
|
110
107
|
const erasing = new Set<TLShapeId>(erasingShapeIds)
|
|
111
108
|
const minDist = this.editor.options.hitTestMargin / zoomLevel
|
|
112
109
|
|
|
110
|
+
// Create bounds around line segment with margin
|
|
111
|
+
const lineBounds = Box.FromPoints([previousPagePoint, currentPagePoint]).expandBy(minDist)
|
|
112
|
+
const candidateIds = editor.getShapeIdsInsideBounds(lineBounds)
|
|
113
|
+
|
|
114
|
+
// Early return if no candidates - avoid expensive getCurrentPageRenderingShapesSorted()
|
|
115
|
+
if (candidateIds.size === 0) {
|
|
116
|
+
editor.setErasingShapes(Array.from(erasing))
|
|
117
|
+
return
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const allShapes = editor.getCurrentPageRenderingShapesSorted()
|
|
121
|
+
const currentPageShapes = allShapes.filter((shape) => candidateIds.has(shape.id))
|
|
122
|
+
|
|
113
123
|
for (const shape of currentPageShapes) {
|
|
114
|
-
if (editor.isShapeOfType
|
|
124
|
+
if (editor.isShapeOfType(shape, 'group')) continue
|
|
115
125
|
|
|
116
126
|
// Avoid testing masked shapes, unless the pointer is inside the mask
|
|
117
127
|
const pageMask = editor.getShapeMask(shape.id)
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
isAccelKey,
|
|
3
|
-
StateNode,
|
|
4
|
-
TLFrameShape,
|
|
5
|
-
TLGroupShape,
|
|
6
|
-
TLPointerEventInfo,
|
|
7
|
-
TLShapeId,
|
|
8
|
-
} from '@tldraw/editor'
|
|
1
|
+
import { isAccelKey, StateNode, TLPointerEventInfo, TLShapeId } from '@tldraw/editor'
|
|
9
2
|
|
|
10
3
|
export class Pointing extends StateNode {
|
|
11
4
|
static override id = 'pointing'
|
|
@@ -17,9 +10,7 @@ export class Pointing extends StateNode {
|
|
|
17
10
|
|
|
18
11
|
const zoomLevel = this.editor.getZoomLevel()
|
|
19
12
|
const currentPageShapesSorted = this.editor.getCurrentPageRenderingShapesSorted()
|
|
20
|
-
const
|
|
21
|
-
inputs: { currentPagePoint },
|
|
22
|
-
} = this.editor
|
|
13
|
+
const currentPagePoint = this.editor.inputs.getCurrentPagePoint()
|
|
23
14
|
|
|
24
15
|
const erasing = new Set<TLShapeId>()
|
|
25
16
|
|
|
@@ -27,10 +18,7 @@ export class Pointing extends StateNode {
|
|
|
27
18
|
|
|
28
19
|
for (let n = currentPageShapesSorted.length, i = n - 1; i >= 0; i--) {
|
|
29
20
|
const shape = currentPageShapesSorted[i]
|
|
30
|
-
if (
|
|
31
|
-
this.editor.isShapeOrAncestorLocked(shape) ||
|
|
32
|
-
this.editor.isShapeOfType<TLGroupShape>(shape, 'group')
|
|
33
|
-
) {
|
|
21
|
+
if (this.editor.isShapeOrAncestorLocked(shape) || this.editor.isShapeOfType(shape, 'group')) {
|
|
34
22
|
continue
|
|
35
23
|
}
|
|
36
24
|
|
|
@@ -42,10 +30,7 @@ export class Pointing extends StateNode {
|
|
|
42
30
|
) {
|
|
43
31
|
const hitShape = this.editor.getOutermostSelectableShape(shape)
|
|
44
32
|
// If we've hit a frame after hitting any other shape, stop here
|
|
45
|
-
if (
|
|
46
|
-
this.editor.isShapeOfType<TLFrameShape>(hitShape, 'frame') &&
|
|
47
|
-
erasing.size > initialSize
|
|
48
|
-
) {
|
|
33
|
+
if (this.editor.isShapeOfType(hitShape, 'frame') && erasing.size > initialSize) {
|
|
49
34
|
break
|
|
50
35
|
}
|
|
51
36
|
|
|
@@ -82,7 +67,7 @@ export class Pointing extends StateNode {
|
|
|
82
67
|
override onPointerMove(info: TLPointerEventInfo) {
|
|
83
68
|
if (this._isHoldingAccelKey) return
|
|
84
69
|
|
|
85
|
-
if (this.editor.inputs.
|
|
70
|
+
if (this.editor.inputs.getIsDragging()) {
|
|
86
71
|
this.startErasing(info)
|
|
87
72
|
}
|
|
88
73
|
}
|
|
@@ -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
|
|
17
|
+
const currentScreenPoint = this.editor.inputs.getCurrentScreenPoint()
|
|
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
|
|
26
|
+
const currentScreenPoint = this.editor.inputs.getCurrentScreenPoint()
|
|
27
27
|
this.editor.zoomOut(currentScreenPoint, {
|
|
28
28
|
animation: { duration: 320, easing: EASINGS.easeOutQuint },
|
|
29
29
|
})
|
|
@@ -33,9 +33,7 @@ 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
|
|
37
|
-
inputs: { currentScreenPoint },
|
|
38
|
-
} = this.editor
|
|
36
|
+
const currentScreenPoint = this.editor.inputs.getCurrentScreenPoint()
|
|
39
37
|
|
|
40
38
|
if (zoomLevel === 1) {
|
|
41
39
|
this.editor.zoomToFit({ animation: { duration: 400, easing: EASINGS.easeOutQuint } })
|
|
@@ -28,7 +28,8 @@ export class Dragging extends StateNode {
|
|
|
28
28
|
|
|
29
29
|
private update() {
|
|
30
30
|
const { initialCamera, editor } = this
|
|
31
|
-
const
|
|
31
|
+
const currentScreenPoint = editor.inputs.getCurrentScreenPoint()
|
|
32
|
+
const originScreenPoint = editor.inputs.getOriginScreenPoint()
|
|
32
33
|
|
|
33
34
|
const delta = Vec.Sub(currentScreenPoint, originScreenPoint).div(editor.getZoomLevel())
|
|
34
35
|
if (delta.len2() === 0) return
|
|
@@ -37,7 +38,7 @@ export class Dragging extends StateNode {
|
|
|
37
38
|
|
|
38
39
|
private complete() {
|
|
39
40
|
const { editor } = this
|
|
40
|
-
const
|
|
41
|
+
const pointerVelocity = editor.inputs.getPointerVelocity()
|
|
41
42
|
|
|
42
43
|
const velocityAtPointerUp = Math.min(pointerVelocity.len(), 2)
|
|
43
44
|
|
|
@@ -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.getCurrentPagePoint()
|
|
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
|
|
47
|
+
if (parent && editor.isShapeOfType(parent, 'group')) {
|
|
48
48
|
if (!movingGroups.has(parent)) {
|
|
49
49
|
movingGroups.add(parent)
|
|
50
50
|
}
|
|
@@ -70,9 +70,7 @@ export class DragAndDropManager {
|
|
|
70
70
|
}
|
|
71
71
|
this.initialIndices.set(shape.id, shape.index)
|
|
72
72
|
|
|
73
|
-
const group = editor.findShapeAncestor(shape, (s) =>
|
|
74
|
-
editor.isShapeOfType<TLGroupShape>(s, 'group')
|
|
75
|
-
)
|
|
73
|
+
const group = editor.findShapeAncestor(shape, (s) => editor.isShapeOfType(s, 'group'))
|
|
76
74
|
if (group) {
|
|
77
75
|
this.initialGroupIds.set(shape.id, group.id)
|
|
78
76
|
}
|
|
@@ -94,10 +92,13 @@ export class DragAndDropManager {
|
|
|
94
92
|
this.intervalTimerId = this.editor.timers.setInterval(
|
|
95
93
|
() => {
|
|
96
94
|
skip2of3FramesWhileMovingFast++
|
|
97
|
-
if (
|
|
95
|
+
if (
|
|
96
|
+
skip2of3FramesWhileMovingFast % 3 &&
|
|
97
|
+
this.editor.inputs.getPointerVelocity().len() > 0.5
|
|
98
|
+
) {
|
|
98
99
|
return
|
|
99
100
|
}
|
|
100
|
-
this.updateDraggingShapes(editor.inputs.
|
|
101
|
+
this.updateDraggingShapes(editor.inputs.getCurrentPagePoint(), cb)
|
|
101
102
|
},
|
|
102
103
|
movingShapes.length > 10 ? SLOW_POINTER_LAG_DURATION : FAST_POINTER_LAG_DURATION
|
|
103
104
|
)
|
|
@@ -105,9 +106,10 @@ export class DragAndDropManager {
|
|
|
105
106
|
|
|
106
107
|
dropShapes(shapes: TLShape[]) {
|
|
107
108
|
const { editor } = this
|
|
108
|
-
|
|
109
|
+
const currentPagePoint = editor.inputs.getCurrentPagePoint()
|
|
110
|
+
this.updateDraggingShapes(currentPagePoint)
|
|
109
111
|
|
|
110
|
-
const draggingOverShape = editor.getDraggingOverShape(
|
|
112
|
+
const draggingOverShape = editor.getDraggingOverShape(currentPagePoint, shapes)
|
|
111
113
|
|
|
112
114
|
if (draggingOverShape) {
|
|
113
115
|
const util = editor.getShapeUtil(draggingOverShape)
|
|
@@ -149,8 +151,9 @@ export class DragAndDropManager {
|
|
|
149
151
|
// This is the shape under the pointer that can handle at least one of the dragging shapes
|
|
150
152
|
const nextDraggingOverShape = editor.getDraggingOverShape(point, this.shapesToActuallyMove)
|
|
151
153
|
|
|
152
|
-
const
|
|
153
|
-
this.prevPagePoint.
|
|
154
|
+
const currentPagePoint = editor.inputs.getCurrentPagePoint()
|
|
155
|
+
const cursorDidMove = !this.prevPagePoint.equals(currentPagePoint)
|
|
156
|
+
this.prevPagePoint.setTo(currentPagePoint)
|
|
154
157
|
|
|
155
158
|
editor.run(() => {
|
|
156
159
|
if (this.prevDraggingOverShape?.id === nextDraggingOverShape?.id) {
|
|
@@ -158,7 +161,7 @@ export class DragAndDropManager {
|
|
|
158
161
|
cursorDidMove &&
|
|
159
162
|
nextDraggingOverShape &&
|
|
160
163
|
isShapeId(nextDraggingOverShape.id) &&
|
|
161
|
-
!editor.inputs.
|
|
164
|
+
!editor.inputs.getPreviousPagePoint().equals(currentPagePoint)
|
|
162
165
|
) {
|
|
163
166
|
// If the cursor moved, call onDragShapesOver for the previous dragging over shape
|
|
164
167
|
const util = editor.getShapeUtil(nextDraggingOverShape)
|