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
|
@@ -16,11 +16,20 @@ exports[`When resizing a shape with children > Resizes a rotated draw shape > dr
|
|
|
16
16
|
"isComplete": false,
|
|
17
17
|
"isPen": false,
|
|
18
18
|
"scale": 1,
|
|
19
|
-
"scaleX": 1.1,
|
|
20
|
-
"scaleY": 1.1,
|
|
21
19
|
"segments": [
|
|
22
20
|
{
|
|
23
|
-
"points":
|
|
21
|
+
"points": [
|
|
22
|
+
{
|
|
23
|
+
"x": 0,
|
|
24
|
+
"y": 0,
|
|
25
|
+
"z": 0.5,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"x": 110,
|
|
29
|
+
"y": 110,
|
|
30
|
+
"z": 0.5,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
24
33
|
"type": "free",
|
|
25
34
|
},
|
|
26
35
|
],
|
|
@@ -33,7 +33,7 @@ it('requires a move to begin drawing', () => {
|
|
|
33
33
|
editor.pointerDown()
|
|
34
34
|
editor.pointerMove(2, 0)
|
|
35
35
|
|
|
36
|
-
expect(editor.inputs.
|
|
36
|
+
expect(editor.inputs.isDragging).toBe(false)
|
|
37
37
|
})
|
|
38
38
|
|
|
39
39
|
describe('Making an arrow on the page', () => {
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
BindingOnShapeDeleteOptions,
|
|
7
7
|
BindingOnShapeIsolateOptions,
|
|
8
8
|
BindingUtil,
|
|
9
|
-
TLBinding,
|
|
10
9
|
TLShapeId,
|
|
10
|
+
TLUnknownBinding,
|
|
11
11
|
createBindingId,
|
|
12
12
|
createShapeId,
|
|
13
13
|
} from '@tldraw/editor'
|
|
@@ -40,7 +40,7 @@ const mockOnAfterChangeToShape = vi.fn()
|
|
|
40
40
|
|
|
41
41
|
const calls: string[] = []
|
|
42
42
|
|
|
43
|
-
const registerCall = (method: string, binding:
|
|
43
|
+
const registerCall = (method: string, binding: TLUnknownBinding) => {
|
|
44
44
|
calls.push(
|
|
45
45
|
`${method}: ${binding.fromId.slice('shape:'.length)}->${binding.toId.slice('shape:'.length)}`
|
|
46
46
|
)
|
|
@@ -60,62 +60,62 @@ class TestBindingUtil extends BindingUtil {
|
|
|
60
60
|
mockOnOperationComplete()
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
override onBeforeDelete(options: BindingOnDeleteOptions): void {
|
|
63
|
+
override onBeforeDelete(options: BindingOnDeleteOptions<TLUnknownBinding>): void {
|
|
64
64
|
registerCall('onBeforeDelete', options.binding)
|
|
65
65
|
mockOnBeforeDelete(options)
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
override onAfterDelete(options: BindingOnDeleteOptions): void {
|
|
68
|
+
override onAfterDelete(options: BindingOnDeleteOptions<TLUnknownBinding>): void {
|
|
69
69
|
registerCall('onAfterDelete', options.binding)
|
|
70
70
|
mockOnAfterDelete(options)
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
override onBeforeDeleteFromShape(options: BindingOnShapeDeleteOptions): void {
|
|
73
|
+
override onBeforeDeleteFromShape(options: BindingOnShapeDeleteOptions<TLUnknownBinding>): void {
|
|
74
74
|
registerCall('onBeforeDeleteFromShape', options.binding)
|
|
75
75
|
mockOnBeforeFromShapeDelete(options)
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
override onBeforeDeleteToShape(options: BindingOnShapeDeleteOptions): void {
|
|
78
|
+
override onBeforeDeleteToShape(options: BindingOnShapeDeleteOptions<TLUnknownBinding>): void {
|
|
79
79
|
registerCall('onBeforeDeleteToShape', options.binding)
|
|
80
80
|
mockOnBeforeToShapeDelete(options)
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
override onBeforeIsolateFromShape(options: BindingOnShapeIsolateOptions): void {
|
|
83
|
+
override onBeforeIsolateFromShape(options: BindingOnShapeIsolateOptions<TLUnknownBinding>): void {
|
|
84
84
|
registerCall('onBeforeIsolateFromShape', options.binding)
|
|
85
85
|
mockOnBeforeFromShapeIsolate(options)
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
override onBeforeIsolateToShape(options: BindingOnShapeIsolateOptions): void {
|
|
88
|
+
override onBeforeIsolateToShape(options: BindingOnShapeIsolateOptions<TLUnknownBinding>): void {
|
|
89
89
|
registerCall('onBeforeIsolateToShape', options.binding)
|
|
90
90
|
mockOnBeforeToShapeIsolate(options)
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
override onBeforeCreate(options: BindingOnCreateOptions): void {
|
|
93
|
+
override onBeforeCreate(options: BindingOnCreateOptions<TLUnknownBinding>): void {
|
|
94
94
|
registerCall('onBeforeCreate', options.binding)
|
|
95
95
|
mockOnBeforeCreate(options)
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
override onAfterCreate(options: BindingOnCreateOptions): void {
|
|
98
|
+
override onAfterCreate(options: BindingOnCreateOptions<TLUnknownBinding>): void {
|
|
99
99
|
registerCall('onAfterCreate', options.binding)
|
|
100
100
|
mockOnAfterCreate(options)
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
override onBeforeChange(options: BindingOnChangeOptions): void {
|
|
103
|
+
override onBeforeChange(options: BindingOnChangeOptions<TLUnknownBinding>): void {
|
|
104
104
|
registerCall('onBeforeChange', options.bindingAfter)
|
|
105
105
|
mockOnBeforeChange(options)
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
override onAfterChange(options: BindingOnChangeOptions): void {
|
|
108
|
+
override onAfterChange(options: BindingOnChangeOptions<TLUnknownBinding>): void {
|
|
109
109
|
registerCall('onAfterChange', options.bindingAfter)
|
|
110
110
|
mockOnAfterChange(options)
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
override onAfterChangeFromShape(options: BindingOnShapeChangeOptions): void {
|
|
113
|
+
override onAfterChangeFromShape(options: BindingOnShapeChangeOptions<TLUnknownBinding>): void {
|
|
114
114
|
registerCall('onAfterChangeFromShape', options.binding)
|
|
115
115
|
mockOnAfterChangeFromShape(options)
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
override onAfterChangeToShape(options: BindingOnShapeChangeOptions): void {
|
|
118
|
+
override onAfterChangeToShape(options: BindingOnShapeChangeOptions<TLUnknownBinding>): void {
|
|
119
119
|
registerCall('onAfterChangeToShape', options.binding)
|
|
120
120
|
mockOnAfterChangeToShape(options)
|
|
121
121
|
}
|
|
@@ -146,19 +146,11 @@ beforeEach(() => {
|
|
|
146
146
|
mockOnAfterChangeToShape.mockReset()
|
|
147
147
|
})
|
|
148
148
|
|
|
149
|
-
const TEST_TYPE = 'test'
|
|
150
|
-
|
|
151
|
-
declare module '@tldraw/tlschema' {
|
|
152
|
-
export interface TLGlobalBindingPropsMap {
|
|
153
|
-
[TEST_TYPE]: Record<string, never>
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
149
|
function bindShapes(fromId: TLShapeId, toId: TLShapeId) {
|
|
158
150
|
const bindingId = createBindingId()
|
|
159
151
|
editor.createBinding({
|
|
160
152
|
id: bindingId,
|
|
161
|
-
type:
|
|
153
|
+
type: 'test',
|
|
162
154
|
fromId,
|
|
163
155
|
toId,
|
|
164
156
|
})
|
|
@@ -264,9 +256,11 @@ test('copying the to shape on its own does trigger the unbind operation', () =>
|
|
|
264
256
|
})
|
|
265
257
|
|
|
266
258
|
test('cascading deletes in beforeFromShapeDelete are handled correctly', () => {
|
|
267
|
-
mockOnBeforeFromShapeDelete.mockImplementation(
|
|
268
|
-
|
|
269
|
-
|
|
259
|
+
mockOnBeforeFromShapeDelete.mockImplementation(
|
|
260
|
+
(options: BindingOnShapeDeleteOptions<TLUnknownBinding>) => {
|
|
261
|
+
editor.deleteShape(options.binding.toId)
|
|
262
|
+
}
|
|
263
|
+
)
|
|
270
264
|
|
|
271
265
|
bindShapes(ids.box1, ids.box2)
|
|
272
266
|
bindShapes(ids.box2, ids.box3)
|
|
@@ -307,9 +301,11 @@ test('cascading deletes in beforeFromShapeDelete are handled correctly', () => {
|
|
|
307
301
|
})
|
|
308
302
|
|
|
309
303
|
test('cascading deletes in beforeToShapeDelete are handled correctly', () => {
|
|
310
|
-
mockOnBeforeToShapeDelete.mockImplementation(
|
|
311
|
-
|
|
312
|
-
|
|
304
|
+
mockOnBeforeToShapeDelete.mockImplementation(
|
|
305
|
+
(options: BindingOnShapeDeleteOptions<TLUnknownBinding>) => {
|
|
306
|
+
editor.deleteShape(options.binding.fromId)
|
|
307
|
+
}
|
|
308
|
+
)
|
|
313
309
|
|
|
314
310
|
bindShapes(ids.box1, ids.box2)
|
|
315
311
|
bindShapes(ids.box2, ids.box3)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TLShapeId, createShapeId } from '@tldraw/editor'
|
|
1
|
+
import { TLArrowBinding, TLGeoShape, TLShapeId, createShapeId } from '@tldraw/editor'
|
|
2
2
|
import { TestEditor } from './TestEditor'
|
|
3
3
|
import { TL } from './test-jsx'
|
|
4
4
|
|
|
@@ -219,7 +219,7 @@ describe('bindingsIndex', () => {
|
|
|
219
219
|
|
|
220
220
|
const [box1Clone, box2Clone] = editor
|
|
221
221
|
.getSelectedShapes()
|
|
222
|
-
.filter((shape) => editor.isShapeOfType(shape, 'geo'))
|
|
222
|
+
.filter((shape) => editor.isShapeOfType<TLGeoShape>(shape, 'geo'))
|
|
223
223
|
.sort((a, b) => a.x - b.x)
|
|
224
224
|
|
|
225
225
|
expect(editor.getArrowsBoundTo(box2Clone.id)).toHaveLength(3)
|
|
@@ -248,9 +248,9 @@ describe('bindingsIndex', () => {
|
|
|
248
248
|
|
|
249
249
|
// move arrowA end from box2 to box3
|
|
250
250
|
const binding = editor
|
|
251
|
-
.getBindingsInvolvingShape(ids.box2, 'arrow')
|
|
251
|
+
.getBindingsInvolvingShape<TLArrowBinding>(ids.box2, 'arrow')
|
|
252
252
|
.find((b) => b.props.terminal === 'end')!
|
|
253
|
-
editor.updateBinding({ ...binding, toId: box3 })
|
|
253
|
+
editor.updateBinding({ ...binding, toId: box3 } satisfies TLArrowBinding)
|
|
254
254
|
|
|
255
255
|
expect(editor.getArrowsBoundTo(ids.box2)).toHaveLength(2)
|
|
256
256
|
expect(editor.getArrowsBoundTo(ids.box1)).toHaveLength(3)
|
|
@@ -16,7 +16,7 @@ exports[`Matches a snapshot > Basic SVG 1`] = `
|
|
|
16
16
|
>
|
|
17
17
|
<defs>
|
|
18
18
|
<mask
|
|
19
|
-
id="
|
|
19
|
+
id="_export_4_rb_"
|
|
20
20
|
>
|
|
21
21
|
<rect
|
|
22
22
|
fill="white"
|
|
@@ -51,14 +51,14 @@ exports[`Matches a snapshot > Basic SVG 1`] = `
|
|
|
51
51
|
</mask>
|
|
52
52
|
<pattern
|
|
53
53
|
height="8"
|
|
54
|
-
id="
|
|
54
|
+
id="_export_4_ra__hash_pattern_light_0"
|
|
55
55
|
patternUnits="userSpaceOnUse"
|
|
56
56
|
width="8"
|
|
57
57
|
>
|
|
58
58
|
<rect
|
|
59
59
|
fill="#fcfffe"
|
|
60
60
|
height="8"
|
|
61
|
-
mask="url(#
|
|
61
|
+
mask="url(#_export_4_rb_)"
|
|
62
62
|
width="8"
|
|
63
63
|
x="0"
|
|
64
64
|
y="0"
|
|
@@ -83,7 +83,7 @@ exports[`Matches a snapshot > Basic SVG 1`] = `
|
|
|
83
83
|
stroke-width="3.5"
|
|
84
84
|
/>
|
|
85
85
|
<foreignobject
|
|
86
|
-
class="tl-export-embed-styles tl-rich-text tl-rich-text-svg
|
|
86
|
+
class="tl-export-embed-styles tl-rich-text tl-rich-text-svg"
|
|
87
87
|
height="100"
|
|
88
88
|
width="100"
|
|
89
89
|
x="0"
|
|
@@ -127,7 +127,7 @@ exports[`Matches a snapshot > Basic SVG 1`] = `
|
|
|
127
127
|
/>
|
|
128
128
|
<path
|
|
129
129
|
d="M 0 0 L 100 0 L 100 100 L 0 100 Z"
|
|
130
|
-
fill="url(#
|
|
130
|
+
fill="url(#_export_4_ra__hash_pattern_light_0)"
|
|
131
131
|
/>
|
|
132
132
|
<path
|
|
133
133
|
d="M 0 0 L 100 0 L 100 100 L 0 100 Z"
|
|
@@ -156,7 +156,7 @@ exports[`Returns all shapes when no ids are provided > All shapes 1`] = `
|
|
|
156
156
|
>
|
|
157
157
|
<defs>
|
|
158
158
|
<mask
|
|
159
|
-
id="
|
|
159
|
+
id="_export_2_r5_"
|
|
160
160
|
>
|
|
161
161
|
<rect
|
|
162
162
|
fill="white"
|
|
@@ -191,14 +191,14 @@ exports[`Returns all shapes when no ids are provided > All shapes 1`] = `
|
|
|
191
191
|
</mask>
|
|
192
192
|
<pattern
|
|
193
193
|
height="8"
|
|
194
|
-
id="
|
|
194
|
+
id="_export_2_r4__hash_pattern_light_0"
|
|
195
195
|
patternUnits="userSpaceOnUse"
|
|
196
196
|
width="8"
|
|
197
197
|
>
|
|
198
198
|
<rect
|
|
199
199
|
fill="#fcfffe"
|
|
200
200
|
height="8"
|
|
201
|
-
mask="url(#
|
|
201
|
+
mask="url(#_export_2_r5_)"
|
|
202
202
|
width="8"
|
|
203
203
|
x="0"
|
|
204
204
|
y="0"
|
|
@@ -223,7 +223,7 @@ exports[`Returns all shapes when no ids are provided > All shapes 1`] = `
|
|
|
223
223
|
stroke-width="3.5"
|
|
224
224
|
/>
|
|
225
225
|
<foreignobject
|
|
226
|
-
class="tl-export-embed-styles tl-rich-text tl-rich-text-svg
|
|
226
|
+
class="tl-export-embed-styles tl-rich-text tl-rich-text-svg"
|
|
227
227
|
height="100"
|
|
228
228
|
width="100"
|
|
229
229
|
x="0"
|
|
@@ -267,7 +267,7 @@ exports[`Returns all shapes when no ids are provided > All shapes 1`] = `
|
|
|
267
267
|
/>
|
|
268
268
|
<path
|
|
269
269
|
d="M 0 0 L 100 0 L 100 100 L 0 100 Z"
|
|
270
|
-
fill="url(#
|
|
270
|
+
fill="url(#_export_2_r4__hash_pattern_light_0)"
|
|
271
271
|
/>
|
|
272
272
|
<path
|
|
273
273
|
d="M 0 0 L 100 0 L 100 100 L 0 100 Z"
|
|
@@ -19,28 +19,14 @@ beforeEach(() => {
|
|
|
19
19
|
|
|
20
20
|
it('Uses typescript generics', () => {
|
|
21
21
|
expect(() => {
|
|
22
|
-
//
|
|
22
|
+
// No error here because no generic, the editor doesn't know what this guy is
|
|
23
23
|
editor.createShapes([
|
|
24
|
-
//@ts-expect-error
|
|
25
24
|
{
|
|
26
25
|
id: ids.box1,
|
|
27
26
|
type: 'geo',
|
|
28
27
|
props: { w: 'OH NO' },
|
|
29
28
|
},
|
|
30
29
|
])
|
|
31
|
-
|
|
32
|
-
// Errors when creating shapes with unknown props
|
|
33
|
-
editor.createShapes([
|
|
34
|
-
{
|
|
35
|
-
id: ids.box1,
|
|
36
|
-
type: 'geo',
|
|
37
|
-
props: {
|
|
38
|
-
// @ts-expect-error
|
|
39
|
-
foo: 'bar',
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
])
|
|
43
|
-
|
|
44
30
|
// Yep error here because we are giving the wrong props to the shape
|
|
45
31
|
editor.createShapes<TLGeoShape>([
|
|
46
32
|
{
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DefaultDashStyle, createShapeId, toRichText } from '@tldraw/editor'
|
|
1
|
+
import { DefaultDashStyle, TLGeoShape, createShapeId, toRichText } from '@tldraw/editor'
|
|
2
2
|
import { vi } from 'vitest'
|
|
3
3
|
import { TestEditor } from '../TestEditor'
|
|
4
4
|
|
|
@@ -21,7 +21,7 @@ beforeEach(() => {
|
|
|
21
21
|
editor = new TestEditor()
|
|
22
22
|
editor.setStyleForNextShapes(DefaultDashStyle, 'solid')
|
|
23
23
|
editor.setStyleForSelectedShapes(DefaultDashStyle, 'solid')
|
|
24
|
-
editor.createShapes([
|
|
24
|
+
editor.createShapes<TLGeoShape>([
|
|
25
25
|
{
|
|
26
26
|
id: ids.boxA,
|
|
27
27
|
type: 'geo',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TLContent,
|
|
1
|
+
import { TLContent, structuredClone } from '@tldraw/editor'
|
|
2
2
|
import { TestEditor } from '../TestEditor'
|
|
3
3
|
|
|
4
4
|
let editor: TestEditor
|
|
@@ -25,7 +25,6 @@ describe('Migrations', () => {
|
|
|
25
25
|
|
|
26
26
|
it('Throws error if any shape is invalid due to wrong type', () => {
|
|
27
27
|
const withInvalidShapeType = structuredClone(clipboardContent)
|
|
28
|
-
// @ts-expect-error
|
|
29
28
|
withInvalidShapeType.shapes[0].type = 'invalid'
|
|
30
29
|
expect(() => editor.putContentOntoCurrentPage(withInvalidShapeType)).toThrow()
|
|
31
30
|
})
|
|
@@ -38,81 +37,3 @@ describe('Migrations', () => {
|
|
|
38
37
|
expect(() => editor.putContentOntoCurrentPage(withInvalidShapeModel)).toThrow()
|
|
39
38
|
})
|
|
40
39
|
})
|
|
41
|
-
|
|
42
|
-
describe('Paste parent selection with explicit point', () => {
|
|
43
|
-
it('falls back to the page when the cursor is outside the original parent', () => {
|
|
44
|
-
const frameId = createShapeId('frame')
|
|
45
|
-
const childId = createShapeId('child')
|
|
46
|
-
|
|
47
|
-
editor.createShapes([
|
|
48
|
-
{
|
|
49
|
-
id: frameId,
|
|
50
|
-
type: 'frame',
|
|
51
|
-
x: 0,
|
|
52
|
-
y: 0,
|
|
53
|
-
props: { w: 200, h: 200 },
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
id: childId,
|
|
57
|
-
type: 'geo',
|
|
58
|
-
parentId: frameId,
|
|
59
|
-
x: 40,
|
|
60
|
-
y: 40,
|
|
61
|
-
props: { w: 60, h: 60 },
|
|
62
|
-
},
|
|
63
|
-
])
|
|
64
|
-
|
|
65
|
-
editor.select(childId)
|
|
66
|
-
editor.copy()
|
|
67
|
-
|
|
68
|
-
editor.putContentOntoCurrentPage(editor.clipboard!, {
|
|
69
|
-
point: { x: 500, y: 500 },
|
|
70
|
-
select: true,
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
const [pastedId] = editor.getSelectedShapeIds()
|
|
74
|
-
expect(editor.getShape(pastedId)?.parentId).toBe(editor.getCurrentPageId())
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
it('uses the parent under the cursor when it can accept the pasted shapes', () => {
|
|
78
|
-
const frameAId = createShapeId('frameA')
|
|
79
|
-
const frameBId = createShapeId('frameB')
|
|
80
|
-
const childId = createShapeId('child')
|
|
81
|
-
|
|
82
|
-
editor.createShapes([
|
|
83
|
-
{
|
|
84
|
-
id: frameAId,
|
|
85
|
-
type: 'frame',
|
|
86
|
-
x: 0,
|
|
87
|
-
y: 0,
|
|
88
|
-
props: { w: 200, h: 200 },
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
id: frameBId,
|
|
92
|
-
type: 'frame',
|
|
93
|
-
x: 400,
|
|
94
|
-
y: 0,
|
|
95
|
-
props: { w: 200, h: 200 },
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
id: childId,
|
|
99
|
-
type: 'geo',
|
|
100
|
-
parentId: frameAId,
|
|
101
|
-
x: 40,
|
|
102
|
-
y: 40,
|
|
103
|
-
props: { w: 60, h: 60 },
|
|
104
|
-
},
|
|
105
|
-
])
|
|
106
|
-
|
|
107
|
-
editor.select(childId)
|
|
108
|
-
editor.copy()
|
|
109
|
-
|
|
110
|
-
editor.putContentOntoCurrentPage(editor.clipboard!, {
|
|
111
|
-
point: { x: 450, y: 50 },
|
|
112
|
-
select: true,
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
const [pastedId] = editor.getSelectedShapeIds()
|
|
116
|
-
expect(editor.getShape(pastedId)?.parentId).toBe(frameBId)
|
|
117
|
-
})
|
|
118
|
-
})
|
|
@@ -13,8 +13,6 @@ beforeEach(() => {
|
|
|
13
13
|
})
|
|
14
14
|
editor.updateViewportScreenBounds(new Box(0, 0, 1600, 900))
|
|
15
15
|
editor.user.updateUserPreferences({ inputMode: null })
|
|
16
|
-
editor._transformPointerDownSpy.mockRestore()
|
|
17
|
-
editor._transformPointerUpSpy.mockRestore()
|
|
18
16
|
})
|
|
19
17
|
|
|
20
18
|
const wheelEvent = {
|
|
@@ -257,8 +255,8 @@ describe('CameraOptions.panSpeed', () => {
|
|
|
257
255
|
|
|
258
256
|
it('Does not affect hand tool panning', () => {
|
|
259
257
|
editor.setCameraOptions({ ...DEFAULT_CAMERA_OPTIONS, panSpeed: 2 })
|
|
260
|
-
editor.setCurrentTool('hand').pointerDown(0, 0).pointerMove(
|
|
261
|
-
expect(editor.getCamera()).toMatchObject({ x:
|
|
258
|
+
editor.setCurrentTool('hand').pointerDown(0, 0).pointerMove(5, 10).forceTick()
|
|
259
|
+
expect(editor.getCamera()).toMatchObject({ x: 5, y: 10, z: 1 })
|
|
262
260
|
})
|
|
263
261
|
|
|
264
262
|
it('Does not affect spacebar panning (2x)', () => {
|
|
@@ -290,12 +288,12 @@ describe('CameraOptions.panSpeed', () => {
|
|
|
290
288
|
.createShape({ id: shapeId, type: 'geo', x: 10, y: 10 })
|
|
291
289
|
.select(shapeId)
|
|
292
290
|
const shape = editor.getSelectedShapes()[0]
|
|
291
|
+
editor.selectNone()
|
|
293
292
|
// Move shape far beyond bounds to trigger edge scrolling at maximum speed
|
|
294
293
|
expect(editor.getCamera()).toMatchObject({ x: 0, y: 0, z: 1 })
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
//
|
|
298
|
-
// is wider than 1000 pixels, or by 25 * 0.612px if it is smaller.
|
|
294
|
+
editor.pointerDown(shape.x, shape.y).pointerMove(-5000, -5000)
|
|
295
|
+
// At maximum speed and a zoom level of 1, the camera should move by 40px per tick if the screen
|
|
296
|
+
// is wider than 1000 pixels, or by 40 * 0.612px if it is smaller.
|
|
299
297
|
const newX = viewportScreenBounds.w < 1000 ? 25 * 0.612 : 25
|
|
300
298
|
const newY = viewportScreenBounds.h < 1000 ? 25 * 0.612 : 25
|
|
301
299
|
expect(editor.getCamera()).toMatchObject({ x: newX, y: newY, z: 1 })
|
|
@@ -559,11 +557,11 @@ describe('When constraints are free', () => {
|
|
|
559
557
|
|
|
560
558
|
it('zooms onto mouse position', () => {
|
|
561
559
|
editor.pointerMove(100, 100)
|
|
562
|
-
expect(editor.inputs.
|
|
563
|
-
editor.zoomIn(editor.inputs.
|
|
564
|
-
expect(editor.inputs.
|
|
565
|
-
editor.zoomOut(editor.inputs.
|
|
566
|
-
expect(editor.inputs.
|
|
560
|
+
expect(editor.inputs.currentPagePoint).toMatchObject({ x: 100, y: 100 })
|
|
561
|
+
editor.zoomIn(editor.inputs.currentScreenPoint, { immediate: true })
|
|
562
|
+
expect(editor.inputs.currentPagePoint).toMatchObject({ x: 100, y: 100 })
|
|
563
|
+
editor.zoomOut(editor.inputs.currentScreenPoint, { immediate: true })
|
|
564
|
+
expect(editor.inputs.currentPagePoint).toMatchObject({ x: 100, y: 100 })
|
|
567
565
|
})
|
|
568
566
|
})
|
|
569
567
|
|
|
@@ -62,54 +62,28 @@ describe('distributeShapes command', () => {
|
|
|
62
62
|
|
|
63
63
|
describe('when stacking horizontally', () => {
|
|
64
64
|
it('stacks the shapes based on the editors adjacentShapeMargin', () => {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
id: ids.boxA,
|
|
70
|
-
type: 'geo',
|
|
71
|
-
x: 0,
|
|
72
|
-
y: 0,
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
id: ids.boxB,
|
|
76
|
-
type: 'geo',
|
|
77
|
-
x: 100,
|
|
78
|
-
y: 100,
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
id: ids.boxC,
|
|
82
|
-
type: 'geo',
|
|
83
|
-
x: 400,
|
|
84
|
-
y: 400,
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
id: ids.boxD,
|
|
88
|
-
type: 'geo',
|
|
89
|
-
x: 700,
|
|
90
|
-
y: 700,
|
|
91
|
-
},
|
|
92
|
-
])
|
|
93
|
-
customEditor.setSelectedShapes([ids.boxA, ids.boxB, ids.boxC, ids.boxD])
|
|
94
|
-
customEditor.stackShapes(customEditor.getSelectedShapeIds(), 'horizontal')
|
|
65
|
+
editor.setSelectedShapes([ids.boxA, ids.boxB, ids.boxC, ids.boxD])
|
|
66
|
+
// @ts-expect-error
|
|
67
|
+
editor.options.adjacentShapeMargin = 1
|
|
68
|
+
editor.stackShapes(editor.getSelectedShapeIds(), 'horizontal')
|
|
95
69
|
vi.advanceTimersByTime(1000)
|
|
96
70
|
// 200 distance gap between c and d
|
|
97
|
-
|
|
71
|
+
editor.expectShapeToMatch({
|
|
98
72
|
id: ids.boxA,
|
|
99
73
|
x: 0,
|
|
100
74
|
y: 0,
|
|
101
75
|
})
|
|
102
|
-
|
|
76
|
+
editor.expectShapeToMatch({
|
|
103
77
|
id: ids.boxB,
|
|
104
78
|
x: 101,
|
|
105
79
|
y: 100,
|
|
106
80
|
})
|
|
107
|
-
|
|
81
|
+
editor.expectShapeToMatch({
|
|
108
82
|
id: ids.boxC,
|
|
109
83
|
x: 202,
|
|
110
84
|
y: 400,
|
|
111
85
|
})
|
|
112
|
-
|
|
86
|
+
editor.expectShapeToMatch({
|
|
113
87
|
id: ids.boxD,
|
|
114
88
|
x: 303,
|
|
115
89
|
y: 700,
|
|
@@ -15,38 +15,22 @@ beforeEach(() => {
|
|
|
15
15
|
|
|
16
16
|
it('Uses typescript generics', () => {
|
|
17
17
|
expect(() => {
|
|
18
|
+
// No error here because no generic, the editor doesn't know what this guy is
|
|
18
19
|
editor.updateShapes([
|
|
19
20
|
{
|
|
20
21
|
id: ids.box1,
|
|
21
22
|
type: 'geo',
|
|
22
|
-
props: {
|
|
23
|
-
// @ts-expect-error
|
|
24
|
-
w: 'OH NO',
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
])
|
|
28
|
-
|
|
29
|
-
// Errors when updating shapes with unknown props
|
|
30
|
-
editor.updateShapes([
|
|
31
|
-
{
|
|
32
|
-
id: ids.box1,
|
|
33
|
-
type: 'geo',
|
|
34
|
-
props: {
|
|
35
|
-
// @ts-expect-error
|
|
36
|
-
foo: 'bar',
|
|
37
|
-
},
|
|
23
|
+
props: { w: 'OH NO' },
|
|
38
24
|
},
|
|
39
25
|
])
|
|
40
26
|
|
|
41
|
-
// error here because we are giving the wrong props to the shape
|
|
27
|
+
// Yep error here because we are giving the wrong props to the shape
|
|
42
28
|
editor.updateShapes<TLGeoShape>([
|
|
43
29
|
{
|
|
44
30
|
id: ids.box1,
|
|
45
31
|
type: 'geo',
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
w: 'OH NO',
|
|
49
|
-
},
|
|
32
|
+
//@ts-expect-error
|
|
33
|
+
props: { w: 'OH NO' },
|
|
50
34
|
},
|
|
51
35
|
])
|
|
52
36
|
|
|
@@ -24,16 +24,10 @@ describe('When zooming to bounds', () => {
|
|
|
24
24
|
h: 1000,
|
|
25
25
|
})
|
|
26
26
|
|
|
27
|
-
const padding = editor.options.zoomToFitPadding
|
|
28
|
-
|
|
29
27
|
editor.zoomToBounds(new Box(200, 300, 300, 300))
|
|
30
|
-
expect(editor.getCamera().z).toCloselyMatchObject((1000 -
|
|
31
|
-
expect(editor.getViewportPageBounds().width).toCloselyMatchObject(
|
|
32
|
-
|
|
33
|
-
)
|
|
34
|
-
expect(editor.getViewportPageBounds().height).toCloselyMatchObject(
|
|
35
|
-
1000 / ((1000 - padding) / 300)
|
|
36
|
-
)
|
|
28
|
+
expect(editor.getCamera().z).toCloselyMatchObject((1000 - 128) / 300)
|
|
29
|
+
expect(editor.getViewportPageBounds().width).toCloselyMatchObject(1000 / ((1000 - 128) / 300))
|
|
30
|
+
expect(editor.getViewportPageBounds().height).toCloselyMatchObject(1000 / ((1000 - 128) / 300))
|
|
37
31
|
})
|
|
38
32
|
})
|
|
39
33
|
|
|
@@ -61,13 +55,3 @@ it('is ignored by undo/redo', () => {
|
|
|
61
55
|
editor.undo()
|
|
62
56
|
expect(editor.getViewportPageCenter().toJson()).toCloselyMatchObject({ x: 350, y: 450 })
|
|
63
57
|
})
|
|
64
|
-
|
|
65
|
-
it('respects custom zoomToFitPadding option', () => {
|
|
66
|
-
const customPadding = 64
|
|
67
|
-
editor = new TestEditor({ options: { zoomToFitPadding: customPadding } })
|
|
68
|
-
editor.setScreenBounds({ x: 0, y: 0, w: 1000, h: 1000 })
|
|
69
|
-
editor.setCamera({ x: 0, y: 0, z: 1 })
|
|
70
|
-
|
|
71
|
-
editor.zoomToBounds(new Box(200, 300, 300, 300))
|
|
72
|
-
expect(editor.getCamera().z).toCloselyMatchObject((1000 - customPadding) / 300)
|
|
73
|
-
})
|
|
@@ -13,28 +13,17 @@ beforeEach(() => {
|
|
|
13
13
|
editor.createShapes(createDefaultShapes())
|
|
14
14
|
})
|
|
15
15
|
|
|
16
|
-
it('zooms to
|
|
17
|
-
editor.zoomIn() // zoom to something other than 100%
|
|
16
|
+
it('zooms to selection bounds', () => {
|
|
18
17
|
editor.setSelectedShapes([ids.box1, ids.box2])
|
|
19
18
|
editor.zoomToSelection()
|
|
20
|
-
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
it('zooms to fit selection when already at 100%', () => {
|
|
24
|
-
// Editor starts at 100%, so first call zooms to fit
|
|
25
|
-
editor.setSelectedShapes([ids.box1, ids.box2])
|
|
26
|
-
editor.zoomToSelection()
|
|
27
|
-
// Should now be zoomed to fit the selection bounds (greater than 100% for small selection)
|
|
28
|
-
expect(editor.getZoomLevel()).toBeGreaterThan(1)
|
|
19
|
+
editor.expectCameraToBe(354.64, 139.29, 1)
|
|
29
20
|
})
|
|
30
21
|
|
|
31
22
|
it('does not zoom past max', () => {
|
|
32
23
|
editor.updateShapes([{ id: ids.box1, type: 'geo', props: { w: 1, h: 1 } }])
|
|
33
24
|
editor.select(ids.box1)
|
|
34
25
|
editor.zoomToSelection()
|
|
35
|
-
//
|
|
36
|
-
const { zoomSteps } = editor.getCameraOptions()
|
|
37
|
-
expect(editor.getZoomLevel()).toBe(zoomSteps[zoomSteps.length - 1])
|
|
26
|
+
expect(editor.getZoomLevel()).toBe(1) // double check again when we're zooming in hard
|
|
38
27
|
})
|
|
39
28
|
|
|
40
29
|
it('does not zoom past min', () => {
|