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
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
TLShapePartial,
|
|
11
11
|
Vec,
|
|
12
12
|
VecModel,
|
|
13
|
-
b64Vecs,
|
|
14
13
|
createShapeId,
|
|
15
14
|
last,
|
|
16
15
|
snapAngle,
|
|
@@ -50,23 +49,19 @@ export class Drawing extends StateNode {
|
|
|
50
49
|
mergeNextPoint = false
|
|
51
50
|
currentLineLength = 0
|
|
52
51
|
|
|
53
|
-
// Cache for current segment's points to avoid repeated b64 decode/encode
|
|
54
|
-
currentSegmentPoints: Vec[] = []
|
|
55
|
-
|
|
56
52
|
markId = null as null | string
|
|
57
53
|
|
|
58
54
|
override onEnter(info: TLPointerEventInfo) {
|
|
59
55
|
this.markId = null
|
|
60
56
|
this.info = info
|
|
61
|
-
this.lastRecordedPoint = this.editor.inputs.
|
|
57
|
+
this.lastRecordedPoint = this.editor.inputs.currentPagePoint.clone()
|
|
62
58
|
this.startShape()
|
|
63
59
|
}
|
|
64
60
|
|
|
65
61
|
override onPointerMove() {
|
|
66
62
|
const { inputs } = this.editor
|
|
67
|
-
const isPen = inputs.getIsPen()
|
|
68
63
|
|
|
69
|
-
if (this.isPen && !isPen) {
|
|
64
|
+
if (this.isPen && !inputs.isPen) {
|
|
70
65
|
// The user made a palm gesture before starting a pen gesture;
|
|
71
66
|
// ideally we'd start the new shape here but we could also just bail
|
|
72
67
|
// as the next interaction will work correctly
|
|
@@ -79,9 +74,11 @@ export class Drawing extends StateNode {
|
|
|
79
74
|
|
|
80
75
|
if (this.isPenOrStylus) {
|
|
81
76
|
// Don't update the shape if we haven't moved far enough from the last time we recorded a point
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
77
|
+
if (
|
|
78
|
+
Vec.Dist(inputs.currentPagePoint, this.lastRecordedPoint) >=
|
|
79
|
+
1 / this.editor.getZoomLevel()
|
|
80
|
+
) {
|
|
81
|
+
this.lastRecordedPoint = inputs.currentPagePoint.clone()
|
|
85
82
|
this.mergeNextPoint = false
|
|
86
83
|
} else {
|
|
87
84
|
this.mergeNextPoint = true
|
|
@@ -99,7 +96,7 @@ export class Drawing extends StateNode {
|
|
|
99
96
|
case 'free': {
|
|
100
97
|
// We've just entered straight mode, go to straight mode
|
|
101
98
|
this.segmentMode = 'starting_straight'
|
|
102
|
-
this.pagePointWhereNextSegmentChanged = this.editor.inputs.
|
|
99
|
+
this.pagePointWhereNextSegmentChanged = this.editor.inputs.currentPagePoint.clone()
|
|
103
100
|
break
|
|
104
101
|
}
|
|
105
102
|
case 'starting_free': {
|
|
@@ -118,7 +115,7 @@ export class Drawing extends StateNode {
|
|
|
118
115
|
case 'straight': {
|
|
119
116
|
// We've just exited straight mode, go back to free mode
|
|
120
117
|
this.segmentMode = 'starting_free'
|
|
121
|
-
this.pagePointWhereNextSegmentChanged = this.editor.inputs.
|
|
118
|
+
this.pagePointWhereNextSegmentChanged = this.editor.inputs.currentPagePoint.clone()
|
|
122
119
|
break
|
|
123
120
|
}
|
|
124
121
|
case 'starting_straight': {
|
|
@@ -134,7 +131,7 @@ export class Drawing extends StateNode {
|
|
|
134
131
|
|
|
135
132
|
override onExit() {
|
|
136
133
|
this.editor.snaps.clearIndicators()
|
|
137
|
-
this.pagePointWhereCurrentSegmentChanged = this.editor.inputs.
|
|
134
|
+
this.pagePointWhereCurrentSegmentChanged = this.editor.inputs.currentPagePoint.clone()
|
|
138
135
|
}
|
|
139
136
|
|
|
140
137
|
canClose() {
|
|
@@ -145,13 +142,11 @@ export class Drawing extends StateNode {
|
|
|
145
142
|
if (!this.canClose()) return false
|
|
146
143
|
|
|
147
144
|
const strokeWidth = STROKE_SIZES[size]
|
|
148
|
-
const firstPoint =
|
|
145
|
+
const firstPoint = segments[0].points[0]
|
|
149
146
|
const lastSegment = segments[segments.length - 1]
|
|
150
|
-
const lastPoint =
|
|
147
|
+
const lastPoint = lastSegment.points[lastSegment.points.length - 1]
|
|
151
148
|
|
|
152
149
|
return (
|
|
153
|
-
firstPoint !== null &&
|
|
154
|
-
lastPoint !== null &&
|
|
155
150
|
firstPoint !== lastPoint &&
|
|
156
151
|
this.currentLineLength > strokeWidth * 4 * scale &&
|
|
157
152
|
Vec.DistMin(firstPoint, lastPoint, strokeWidth * 2 * scale)
|
|
@@ -159,9 +154,9 @@ export class Drawing extends StateNode {
|
|
|
159
154
|
}
|
|
160
155
|
|
|
161
156
|
private startShape() {
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
157
|
+
const {
|
|
158
|
+
inputs: { originPagePoint, isPen },
|
|
159
|
+
} = this.editor
|
|
165
160
|
|
|
166
161
|
this.markId = this.editor.markHistoryStoppingPoint('draw start')
|
|
167
162
|
|
|
@@ -177,7 +172,7 @@ export class Drawing extends StateNode {
|
|
|
177
172
|
|
|
178
173
|
const pressure = this.isPenOrStylus ? z * 1.25 : 0.5
|
|
179
174
|
|
|
180
|
-
this.segmentMode = this.editor.inputs.
|
|
175
|
+
this.segmentMode = this.editor.inputs.shiftKey ? 'straight' : 'free'
|
|
181
176
|
|
|
182
177
|
this.didJustShiftClickToExtendPreviousShapeLine = false
|
|
183
178
|
|
|
@@ -193,17 +188,25 @@ export class Drawing extends StateNode {
|
|
|
193
188
|
|
|
194
189
|
const prevSegment = last(shape.props.segments)
|
|
195
190
|
if (!prevSegment) throw Error('Expected a previous segment!')
|
|
196
|
-
const prevPoint =
|
|
191
|
+
const prevPoint = last(prevSegment.points)
|
|
197
192
|
if (!prevPoint) throw Error('Expected a previous point!')
|
|
198
193
|
|
|
199
194
|
const { x, y } = this.editor.getPointInShapeSpace(shape, originPagePoint).toFixed()
|
|
200
195
|
|
|
201
196
|
const newSegment: TLDrawShapeSegment = {
|
|
202
197
|
type: this.segmentMode,
|
|
203
|
-
points:
|
|
204
|
-
{
|
|
205
|
-
|
|
206
|
-
|
|
198
|
+
points: [
|
|
199
|
+
{
|
|
200
|
+
x: prevPoint.x,
|
|
201
|
+
y: prevPoint.y,
|
|
202
|
+
z: +pressure.toFixed(2),
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
x,
|
|
206
|
+
y,
|
|
207
|
+
z: +pressure.toFixed(2),
|
|
208
|
+
},
|
|
209
|
+
],
|
|
207
210
|
}
|
|
208
211
|
|
|
209
212
|
// Convert prevPoint to page space
|
|
@@ -235,7 +238,7 @@ export class Drawing extends StateNode {
|
|
|
235
238
|
)
|
|
236
239
|
}
|
|
237
240
|
|
|
238
|
-
this.editor.updateShapes([shapePartial])
|
|
241
|
+
this.editor.updateShapes<TLDrawShape | TLHighlightShape>([shapePartial])
|
|
239
242
|
|
|
240
243
|
return
|
|
241
244
|
}
|
|
@@ -246,12 +249,8 @@ export class Drawing extends StateNode {
|
|
|
246
249
|
this.pagePointWhereCurrentSegmentChanged = originPagePoint.clone()
|
|
247
250
|
const id = createShapeId()
|
|
248
251
|
|
|
249
|
-
// Initialize the segment points cache
|
|
250
|
-
const initialPoint = new Vec(0, 0, +pressure.toFixed(2))
|
|
251
|
-
this.currentSegmentPoints = [initialPoint]
|
|
252
|
-
|
|
253
252
|
// Allow this to trigger the max shapes reached alert
|
|
254
|
-
this.editor.createShape({
|
|
253
|
+
this.editor.createShape<DrawableShape>({
|
|
255
254
|
id,
|
|
256
255
|
type: this.shapeType,
|
|
257
256
|
x: originPagePoint.x,
|
|
@@ -262,7 +261,13 @@ export class Drawing extends StateNode {
|
|
|
262
261
|
segments: [
|
|
263
262
|
{
|
|
264
263
|
type: this.segmentMode,
|
|
265
|
-
points:
|
|
264
|
+
points: [
|
|
265
|
+
{
|
|
266
|
+
x: 0,
|
|
267
|
+
y: 0,
|
|
268
|
+
z: +pressure.toFixed(2),
|
|
269
|
+
},
|
|
270
|
+
],
|
|
266
271
|
},
|
|
267
272
|
],
|
|
268
273
|
},
|
|
@@ -293,9 +298,8 @@ export class Drawing extends StateNode {
|
|
|
293
298
|
|
|
294
299
|
const { segments } = shape.props
|
|
295
300
|
|
|
296
|
-
const
|
|
297
|
-
const
|
|
298
|
-
const pressure = this.isPenOrStylus ? +(currentPagePoint.z! * 1.25).toFixed(2) : 0.5
|
|
301
|
+
const { x, y, z } = this.editor.getPointInShapeSpace(shape, inputs.currentPagePoint).toFixed()
|
|
302
|
+
const pressure = this.isPenOrStylus ? +(inputs.currentPagePoint.z! * 1.25).toFixed(2) : 0.5
|
|
299
303
|
const newPoint = { x, y, z: pressure }
|
|
300
304
|
|
|
301
305
|
switch (this.segmentMode) {
|
|
@@ -307,7 +311,7 @@ export class Drawing extends StateNode {
|
|
|
307
311
|
}
|
|
308
312
|
|
|
309
313
|
const hasMovedFarEnough =
|
|
310
|
-
Vec.Dist2(pagePointWhereNextSegmentChanged, inputs.
|
|
314
|
+
Vec.Dist2(pagePointWhereNextSegmentChanged, inputs.currentPagePoint) >
|
|
311
315
|
this.editor.options.dragDistanceSquared
|
|
312
316
|
|
|
313
317
|
// Find the distance from where the pointer was when shift was released and
|
|
@@ -324,7 +328,7 @@ export class Drawing extends StateNode {
|
|
|
324
328
|
const prevSegment = last(segments)
|
|
325
329
|
if (!prevSegment) throw Error('Expected a previous segment!')
|
|
326
330
|
|
|
327
|
-
const prevLastPoint =
|
|
331
|
+
const prevLastPoint = last(prevSegment.points)
|
|
328
332
|
if (!prevLastPoint) throw Error('Expected a previous last point!')
|
|
329
333
|
|
|
330
334
|
let newSegment: TLDrawShapeSegment
|
|
@@ -339,7 +343,7 @@ export class Drawing extends StateNode {
|
|
|
339
343
|
|
|
340
344
|
newSegment = {
|
|
341
345
|
type: 'straight',
|
|
342
|
-
points:
|
|
346
|
+
points: [{ ...prevLastPoint }, newLastPoint],
|
|
343
347
|
}
|
|
344
348
|
|
|
345
349
|
const transform = this.editor.getShapePageTransform(shape)!
|
|
@@ -348,7 +352,7 @@ export class Drawing extends StateNode {
|
|
|
348
352
|
} else {
|
|
349
353
|
newSegment = {
|
|
350
354
|
type: 'straight',
|
|
351
|
-
points:
|
|
355
|
+
points: [newLastPoint, newPoint],
|
|
352
356
|
}
|
|
353
357
|
}
|
|
354
358
|
|
|
@@ -368,7 +372,7 @@ export class Drawing extends StateNode {
|
|
|
368
372
|
)
|
|
369
373
|
}
|
|
370
374
|
|
|
371
|
-
this.editor.updateShapes([shapePartial])
|
|
375
|
+
this.editor.updateShapes<TLDrawShape | TLHighlightShape>([shapePartial])
|
|
372
376
|
}
|
|
373
377
|
break
|
|
374
378
|
}
|
|
@@ -380,7 +384,7 @@ export class Drawing extends StateNode {
|
|
|
380
384
|
}
|
|
381
385
|
|
|
382
386
|
const hasMovedFarEnough =
|
|
383
|
-
Vec.Dist2(pagePointWhereNextSegmentChanged, inputs.
|
|
387
|
+
Vec.Dist2(pagePointWhereNextSegmentChanged, inputs.currentPagePoint) >
|
|
384
388
|
this.editor.options.dragDistanceSquared
|
|
385
389
|
|
|
386
390
|
// Find the distance from where the pointer was when shift was released and
|
|
@@ -396,7 +400,7 @@ export class Drawing extends StateNode {
|
|
|
396
400
|
|
|
397
401
|
const newSegments = segments.slice()
|
|
398
402
|
const prevStraightSegment = newSegments[newSegments.length - 1]
|
|
399
|
-
const prevPoint =
|
|
403
|
+
const prevPoint = last(prevStraightSegment.points)
|
|
400
404
|
|
|
401
405
|
if (!prevPoint) {
|
|
402
406
|
throw Error('No previous point!')
|
|
@@ -404,15 +408,15 @@ export class Drawing extends StateNode {
|
|
|
404
408
|
|
|
405
409
|
// Create the new free segment and interpolate the points between where the last line
|
|
406
410
|
// ended and where the pointer is now
|
|
407
|
-
const interpolatedPoints = Vec.PointsBetween(prevPoint, newPoint, 6).map(
|
|
408
|
-
(p) => new Vec(toFixed(p.x), toFixed(p.y), toFixed(p.z))
|
|
409
|
-
)
|
|
410
|
-
// Initialize cache for the new free segment
|
|
411
|
-
this.currentSegmentPoints = interpolatedPoints
|
|
412
|
-
|
|
413
411
|
const newFreeSegment: TLDrawShapeSegment = {
|
|
414
412
|
type: 'free',
|
|
415
|
-
points:
|
|
413
|
+
points: [
|
|
414
|
+
...Vec.PointsBetween(prevPoint, newPoint, 6).map((p) => ({
|
|
415
|
+
x: toFixed(p.x),
|
|
416
|
+
y: toFixed(p.y),
|
|
417
|
+
z: toFixed(p.z),
|
|
418
|
+
})),
|
|
419
|
+
],
|
|
416
420
|
}
|
|
417
421
|
|
|
418
422
|
const finalSegments = [...newSegments, newFreeSegment]
|
|
@@ -447,9 +451,7 @@ export class Drawing extends StateNode {
|
|
|
447
451
|
const newSegment = newSegments[newSegments.length - 1]
|
|
448
452
|
|
|
449
453
|
const { pagePointWhereCurrentSegmentChanged } = this
|
|
450
|
-
const
|
|
451
|
-
const ctrlKey = inputs.getCtrlKey()
|
|
452
|
-
const currentPagePoint = inputs.getCurrentPagePoint()
|
|
454
|
+
const { ctrlKey, currentPagePoint } = this.editor.inputs
|
|
453
455
|
|
|
454
456
|
if (!pagePointWhereCurrentSegmentChanged)
|
|
455
457
|
throw Error('We should have a point where the segment changed')
|
|
@@ -458,7 +460,7 @@ export class Drawing extends StateNode {
|
|
|
458
460
|
let shouldSnapToAngle = false
|
|
459
461
|
|
|
460
462
|
if (this.didJustShiftClickToExtendPreviousShapeLine) {
|
|
461
|
-
if (this.editor.inputs.
|
|
463
|
+
if (this.editor.inputs.isDragging) {
|
|
462
464
|
// If we've just shift clicked to extend a line, only snap once we've started dragging
|
|
463
465
|
shouldSnapToAngle = !ctrlKey
|
|
464
466
|
this.didJustShiftClickToExtendPreviousShapeLine = false
|
|
@@ -487,8 +489,8 @@ export class Drawing extends StateNode {
|
|
|
487
489
|
if (!segment) break
|
|
488
490
|
if (segment.type === 'free') continue
|
|
489
491
|
|
|
490
|
-
const first =
|
|
491
|
-
const lastPoint =
|
|
492
|
+
const first = segment.points[0]
|
|
493
|
+
const lastPoint = last(segment.points)
|
|
492
494
|
if (!(first && lastPoint)) continue
|
|
493
495
|
|
|
494
496
|
// Snap to the nearest point on the segment, if it's closer than the previous snapped point
|
|
@@ -515,9 +517,9 @@ export class Drawing extends StateNode {
|
|
|
515
517
|
|
|
516
518
|
if (didSnap && snapSegment) {
|
|
517
519
|
const transform = this.editor.getShapePageTransform(shape)!
|
|
518
|
-
const first =
|
|
519
|
-
const lastPoint =
|
|
520
|
-
if (!
|
|
520
|
+
const first = snapSegment.points[0]
|
|
521
|
+
const lastPoint = last(snapSegment.points)
|
|
522
|
+
if (!lastPoint) throw Error('Expected a last point!')
|
|
521
523
|
|
|
522
524
|
const A = Mat.applyToPoint(transform, first)
|
|
523
525
|
|
|
@@ -547,7 +549,7 @@ export class Drawing extends StateNode {
|
|
|
547
549
|
angleDiff
|
|
548
550
|
)
|
|
549
551
|
} else {
|
|
550
|
-
pagePoint = currentPagePoint
|
|
552
|
+
pagePoint = currentPagePoint
|
|
551
553
|
}
|
|
552
554
|
|
|
553
555
|
newPoint = this.editor.getPointInShapeSpace(shape, pagePoint).toFixed().toJson()
|
|
@@ -557,18 +559,12 @@ export class Drawing extends StateNode {
|
|
|
557
559
|
// then the user just did a click-and-immediately-press-shift to create a new straight line
|
|
558
560
|
// without continuing the previous line. In this case, we want to remove the previous segment.
|
|
559
561
|
|
|
560
|
-
this.currentLineLength +=
|
|
561
|
-
newSegments.length && b64Vecs.decodeFirstPoint(newSegment.points)
|
|
562
|
-
? Vec.Dist(b64Vecs.decodeFirstPoint(newSegment.points)!, Vec.From(newPoint))
|
|
563
|
-
: 0
|
|
562
|
+
this.currentLineLength += Vec.Dist(newSegment.points[0], newPoint)
|
|
564
563
|
|
|
565
564
|
newSegments[newSegments.length - 1] = {
|
|
566
565
|
...newSegment,
|
|
567
566
|
type: 'straight',
|
|
568
|
-
points:
|
|
569
|
-
b64Vecs.decodeFirstPoint(newSegment.points)!,
|
|
570
|
-
Vec.From(newPoint),
|
|
571
|
-
]),
|
|
567
|
+
points: [newSegment.points[0], newPoint],
|
|
572
568
|
}
|
|
573
569
|
|
|
574
570
|
const shapePartial: TLShapePartial<DrawableShape> = {
|
|
@@ -592,28 +588,27 @@ export class Drawing extends StateNode {
|
|
|
592
588
|
break
|
|
593
589
|
}
|
|
594
590
|
case 'free': {
|
|
595
|
-
|
|
596
|
-
const
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
591
|
+
const newSegments = segments.slice()
|
|
592
|
+
const newSegment = newSegments[newSegments.length - 1]
|
|
593
|
+
const newPoints = [...newSegment.points]
|
|
594
|
+
|
|
595
|
+
if (newPoints.length && this.mergeNextPoint) {
|
|
596
|
+
const { z } = newPoints[newPoints.length - 1]
|
|
597
|
+
newPoints[newPoints.length - 1] = {
|
|
598
|
+
x: newPoint.x,
|
|
599
|
+
y: newPoint.y,
|
|
600
|
+
z: z ? Math.max(z, newPoint.z) : newPoint.z,
|
|
601
|
+
}
|
|
603
602
|
// Note: we could recompute the line length here, but it's not really necessary
|
|
604
603
|
// this.currentLineLength = this.getLineLength(newSegments)
|
|
605
604
|
} else {
|
|
606
|
-
this.currentLineLength +=
|
|
607
|
-
|
|
608
|
-
: 0
|
|
609
|
-
cachedPoints.push(new Vec(newPoint.x, newPoint.y, newPoint.z))
|
|
605
|
+
this.currentLineLength += Vec.Dist(newPoints[newPoints.length - 1], newPoint)
|
|
606
|
+
newPoints.push(newPoint)
|
|
610
607
|
}
|
|
611
608
|
|
|
612
|
-
const newSegments = segments.slice()
|
|
613
|
-
const newSegment = newSegments[newSegments.length - 1]
|
|
614
609
|
newSegments[newSegments.length - 1] = {
|
|
615
610
|
...newSegment,
|
|
616
|
-
points:
|
|
611
|
+
points: newPoints,
|
|
617
612
|
}
|
|
618
613
|
|
|
619
614
|
if (this.currentLineLength < STROKE_SIZES[shape.props.size] * 4) {
|
|
@@ -639,7 +634,7 @@ export class Drawing extends StateNode {
|
|
|
639
634
|
this.editor.updateShapes([shapePartial])
|
|
640
635
|
|
|
641
636
|
// Set a maximum length for the lines array; after 200 points, complete the line.
|
|
642
|
-
if (
|
|
637
|
+
if (newPoints.length > this.util.options.maxPointsPerShape) {
|
|
643
638
|
this.editor.updateShapes([{ id, type: this.shapeType, props: { isComplete: true } }])
|
|
644
639
|
|
|
645
640
|
const newShapeId = createShapeId()
|
|
@@ -647,24 +642,18 @@ export class Drawing extends StateNode {
|
|
|
647
642
|
const props = this.editor.getShape<DrawableShape>(id)!.props
|
|
648
643
|
|
|
649
644
|
if (!this.editor.canCreateShapes([newShapeId])) return this.cancel()
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
// Reset cache for the new shape's segment
|
|
653
|
-
const initialPoint = new Vec(0, 0, this.isPenOrStylus ? +(z! * 1.25).toFixed() : 0.5)
|
|
654
|
-
this.currentSegmentPoints = [initialPoint]
|
|
655
|
-
|
|
656
|
-
this.editor.createShape({
|
|
645
|
+
this.editor.createShape<DrawableShape>({
|
|
657
646
|
id: newShapeId,
|
|
658
647
|
type: this.shapeType,
|
|
659
|
-
x: toFixed(currentPagePoint.x),
|
|
660
|
-
y: toFixed(currentPagePoint.y),
|
|
648
|
+
x: toFixed(inputs.currentPagePoint.x),
|
|
649
|
+
y: toFixed(inputs.currentPagePoint.y),
|
|
661
650
|
props: {
|
|
662
651
|
isPen: this.isPenOrStylus,
|
|
663
652
|
scale: props.scale,
|
|
664
653
|
segments: [
|
|
665
654
|
{
|
|
666
655
|
type: 'free',
|
|
667
|
-
points:
|
|
656
|
+
points: [{ x: 0, y: 0, z: this.isPenOrStylus ? +(z! * 1.25).toFixed() : 0.5 }],
|
|
668
657
|
},
|
|
669
658
|
],
|
|
670
659
|
},
|
|
@@ -680,7 +669,7 @@ export class Drawing extends StateNode {
|
|
|
680
669
|
|
|
681
670
|
this.initialShape = structuredClone(shape)
|
|
682
671
|
this.mergeNextPoint = false
|
|
683
|
-
this.lastRecordedPoint = currentPagePoint.clone()
|
|
672
|
+
this.lastRecordedPoint = inputs.currentPagePoint.clone()
|
|
684
673
|
this.currentLineLength = 0
|
|
685
674
|
}
|
|
686
675
|
|
|
@@ -692,10 +681,11 @@ export class Drawing extends StateNode {
|
|
|
692
681
|
private getLineLength(segments: TLDrawShapeSegment[]) {
|
|
693
682
|
let length = 0
|
|
694
683
|
|
|
695
|
-
for (
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
684
|
+
for (const segment of segments) {
|
|
685
|
+
for (let i = 0; i < segment.points.length - 1; i++) {
|
|
686
|
+
const A = segment.points[i]
|
|
687
|
+
const B = segment.points[i + 1]
|
|
688
|
+
length += Vec.Dist2(B, A)
|
|
699
689
|
}
|
|
700
690
|
}
|
|
701
691
|
|
|
@@ -715,7 +705,7 @@ export class Drawing extends StateNode {
|
|
|
715
705
|
}
|
|
716
706
|
|
|
717
707
|
override onInterrupt() {
|
|
718
|
-
if (this.editor.inputs.
|
|
708
|
+
if (this.editor.inputs.isDragging) {
|
|
719
709
|
return
|
|
720
710
|
}
|
|
721
711
|
|
|
@@ -43,12 +43,6 @@ export class EmbedShapeUtil extends BaseBoxShapeUtil<TLEmbedShape> {
|
|
|
43
43
|
static override migrations = embedShapeMigrations
|
|
44
44
|
private static embedDefinitions: readonly EmbedDefinition[] = DEFAULT_EMBED_DEFINITIONS
|
|
45
45
|
|
|
46
|
-
override canEditWhileLocked(shape: TLEmbedShape) {
|
|
47
|
-
const result = this.getEmbedDefinition(shape.props.url)
|
|
48
|
-
if (!result) return true
|
|
49
|
-
return result.definition.canEditWhileLocked ?? true
|
|
50
|
-
}
|
|
51
|
-
|
|
52
46
|
static setEmbedDefinitions(embedDefinitions: readonly TLEmbedDefinition[]) {
|
|
53
47
|
EmbedShapeUtil.embedDefinitions = embedDefinitions
|
|
54
48
|
}
|
|
@@ -143,7 +137,7 @@ export class EmbedShapeUtil extends BaseBoxShapeUtil<TLEmbedShape> {
|
|
|
143
137
|
|
|
144
138
|
if (editingShapeId && hoveredShapeId !== editingShapeId) {
|
|
145
139
|
const editingShape = this.editor.getShape(editingShapeId)
|
|
146
|
-
if (editingShape && this.editor.isShapeOfType(editingShape, 'embed')) {
|
|
140
|
+
if (editingShape && this.editor.isShapeOfType<TLEmbedShape>(editingShape, 'embed')) {
|
|
147
141
|
return true
|
|
148
142
|
}
|
|
149
143
|
}
|
|
@@ -217,7 +211,6 @@ export class EmbedShapeUtil extends BaseBoxShapeUtil<TLEmbedShape> {
|
|
|
217
211
|
frameBorder="0"
|
|
218
212
|
referrerPolicy="no-referrer-when-downgrade"
|
|
219
213
|
tabIndex={isEditing ? 0 : -1}
|
|
220
|
-
allowFullScreen
|
|
221
214
|
style={{
|
|
222
215
|
border: 0,
|
|
223
216
|
pointerEvents: isInteractive ? 'auto' : 'none',
|
|
@@ -4,7 +4,7 @@ import { BaseBoxShapeTool, TLShape, TLShapeId } from '@tldraw/editor'
|
|
|
4
4
|
export class FrameShapeTool extends BaseBoxShapeTool {
|
|
5
5
|
static override id = 'frame'
|
|
6
6
|
static override initial = 'idle'
|
|
7
|
-
override shapeType = 'frame'
|
|
7
|
+
override shapeType = 'frame'
|
|
8
8
|
|
|
9
9
|
override onCreate(shape: TLShape | null): void {
|
|
10
10
|
if (!shape) return
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
TLClickEventInfo,
|
|
10
10
|
TLDragShapesOutInfo,
|
|
11
11
|
TLDragShapesOverInfo,
|
|
12
|
-
TLEditStartInfo,
|
|
13
12
|
TLFrameShape,
|
|
14
13
|
TLFrameShapeProps,
|
|
15
14
|
TLResizeInfo,
|
|
@@ -54,10 +53,6 @@ export interface FrameShapeOptions {
|
|
|
54
53
|
* When true, the frame will display colors for the shape's headings and background.
|
|
55
54
|
*/
|
|
56
55
|
showColors: boolean
|
|
57
|
-
/**
|
|
58
|
-
* When true, the frame will resize its children when the frame itself is resized.
|
|
59
|
-
*/
|
|
60
|
-
resizeChildren: boolean
|
|
61
56
|
}
|
|
62
57
|
|
|
63
58
|
export function defaultEmptyAs(str: string, dflt: string) {
|
|
@@ -75,7 +70,6 @@ export class FrameShapeUtil extends BaseBoxShapeUtil<TLFrameShape> {
|
|
|
75
70
|
|
|
76
71
|
override options: FrameShapeOptions = {
|
|
77
72
|
showColors: false,
|
|
78
|
-
resizeChildren: false,
|
|
79
73
|
}
|
|
80
74
|
|
|
81
75
|
// evil crimes :)
|
|
@@ -94,8 +88,8 @@ export class FrameShapeUtil extends BaseBoxShapeUtil<TLFrameShape> {
|
|
|
94
88
|
return withOptions
|
|
95
89
|
}
|
|
96
90
|
|
|
97
|
-
override canEdit(
|
|
98
|
-
return
|
|
91
|
+
override canEdit() {
|
|
92
|
+
return true
|
|
99
93
|
}
|
|
100
94
|
|
|
101
95
|
override canResize() {
|
|
@@ -103,7 +97,7 @@ export class FrameShapeUtil extends BaseBoxShapeUtil<TLFrameShape> {
|
|
|
103
97
|
}
|
|
104
98
|
|
|
105
99
|
override canResizeChildren() {
|
|
106
|
-
return
|
|
100
|
+
return false
|
|
107
101
|
}
|
|
108
102
|
|
|
109
103
|
override isExportBoundsContainer(): boolean {
|
|
@@ -121,7 +115,7 @@ export class FrameShapeUtil extends BaseBoxShapeUtil<TLFrameShape> {
|
|
|
121
115
|
override getGeometry(shape: TLFrameShape): Geometry2d {
|
|
122
116
|
const { editor } = this
|
|
123
117
|
|
|
124
|
-
const z = editor.
|
|
118
|
+
const z = editor.getZoomLevel()
|
|
125
119
|
|
|
126
120
|
// Which dimension measures the top edge after rotation?
|
|
127
121
|
const labelSide = getFrameHeadingSide(editor, shape)
|
|
@@ -27,16 +27,8 @@ describe('Handle snapping', () => {
|
|
|
27
27
|
)
|
|
28
28
|
})
|
|
29
29
|
|
|
30
|
-
const geoShape = () =>
|
|
31
|
-
|
|
32
|
-
assert(editor.isShapeOfType(shape, 'geo'))
|
|
33
|
-
return shape
|
|
34
|
-
}
|
|
35
|
-
const lineShape = () => {
|
|
36
|
-
const shape = editor.getShape(ids.line)!
|
|
37
|
-
assert(editor.isShapeOfType(shape, 'line'))
|
|
38
|
-
return shape
|
|
39
|
-
}
|
|
30
|
+
const geoShape = () => editor.getShape(ids.geo)!
|
|
31
|
+
const lineShape = () => editor.getShape(ids.line)!
|
|
40
32
|
const lineHandles = () => editor.getShapeUtil('line').getHandles!(lineShape())!
|
|
41
33
|
|
|
42
34
|
function startDraggingHandle() {
|