tldraw 4.3.0-next.f4772c19540d → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/dist-cjs/index.d.ts +311 -242
- package/dist-cjs/index.js +13 -5
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/bindings/arrow/ArrowBindingUtil.js.map +2 -2
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +2 -2
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
- package/dist-cjs/lib/defaultEmbedDefinitions.js +1 -1
- package/dist-cjs/lib/defaultEmbedDefinitions.js.map +2 -2
- package/dist-cjs/lib/defaultExternalContentHandlers.js +5 -5
- package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
- package/dist-cjs/lib/defaultSideEffects.js +6 -1
- package/dist-cjs/lib/defaultSideEffects.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +14 -13
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrow-types.js.map +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/elbow/elbowArrowSnapLines.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/elbow/getElbowArrowInfo.js +1 -1
- package/dist-cjs/lib/shapes/arrow/elbow/getElbowArrowInfo.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/shared.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js +4 -10
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +7 -4
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/bookmark/bookmarks.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +25 -23
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/getPath.js +20 -11
- package/dist-cjs/lib/shapes/draw/getPath.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +82 -86
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +3 -3
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +6 -0
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/frame/FrameShapeTool.js.map +1 -1
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +6 -5
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +146 -142
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/toolStates/Idle.js +5 -10
- package/dist-cjs/lib/shapes/geo/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js +3 -3
- package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +23 -21
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/line/toolStates/Pointing.js +3 -3
- package/dist-cjs/lib/shapes/line/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +6 -11
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/note/noteHelpers.js.map +2 -2
- package/dist-cjs/lib/shapes/note/toolStates/Pointing.js +5 -10
- package/dist-cjs/lib/shapes/note/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +3 -2
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +14 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +3 -3
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js +12 -4
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +3 -3
- package/dist-cjs/lib/shapes/shared/ShapeFill.js +2 -2
- package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/crop.js +1 -0
- package/dist-cjs/lib/shapes/shared/crop.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/interpolate-props.js +3 -3
- package/dist-cjs/lib/shapes/shared/interpolate-props.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/useEditableRichText.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/{useForceSolid.js → useEfficientZoomThreshold.js} +10 -7
- package/dist-cjs/lib/shapes/shared/useEfficientZoomThreshold.js.map +7 -0
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +1 -1
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
- package/dist-cjs/lib/shapes/text/RichTextArea.js +5 -0
- package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js +5 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js +4 -10
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Pointing.js +7 -5
- package/dist-cjs/lib/shapes/text/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +4 -5
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +2 -4
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/HandTool.js +3 -5
- package/dist-cjs/lib/tools/HandTool/HandTool.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js +3 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js +1 -1
- package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js +1 -1
- package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js +10 -11
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js +6 -5
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js +4 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js +2 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +8 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js +38 -11
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +42 -50
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js +6 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js +4 -14
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +4 -13
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +5 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +2 -3
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js +7 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +13 -11
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/selectHelpers.js +15 -4
- package/dist-cjs/lib/tools/SelectTool/selectHelpers.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js +1 -1
- package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js +3 -3
- package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js +5 -6
- package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js +1 -3
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js +1 -1
- package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js +1 -1
- package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js.map +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js.map +2 -2
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js +3 -9
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js +1 -3
- package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/CursorChatBubble.js +1 -1
- package/dist-cjs/lib/ui/components/CursorChatBubble.js.map +2 -2
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.js +1 -21
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/EditLinkDialog.js +11 -1
- package/dist-cjs/lib/ui/components/EditLinkDialog.js.map +2 -2
- package/dist-cjs/lib/ui/components/HelperButtons/BackToContent.js +1 -1
- package/dist-cjs/lib/ui/components/HelperButtons/BackToContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/HelperButtons/StopFollowing.js.map +2 -2
- package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +1 -1
- package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
- package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js +2 -15
- package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js.map +3 -3
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js +3 -1
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js.map +2 -2
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js +6 -0
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/TopPanel/CenteredTopPanelContainer.js.map +1 -1
- package/dist-cjs/lib/ui/components/menu-items.js +3 -1
- package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +3 -1
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -1
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +149 -93
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +14 -7
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
- package/dist-cjs/lib/ui/context/actions.js +7 -8
- package/dist-cjs/lib/ui/context/actions.js.map +2 -2
- package/dist-cjs/lib/ui/context/components.js +1 -2
- package/dist-cjs/lib/ui/context/components.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +2 -2
- package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useFlatten.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTools.js +4 -5
- package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
- package/dist-cjs/lib/ui/version.js +3 -3
- package/dist-cjs/lib/ui/version.js.map +1 -1
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +16 -6
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
- package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
- package/dist-cjs/lib/utils/frames/frames.js.map +2 -2
- package/dist-cjs/lib/{tools/selection-logic/getShouldEnterCropModeOnPointerDown.js → utils/test-helpers.js} +21 -8
- package/dist-cjs/lib/utils/test-helpers.js.map +7 -0
- package/dist-cjs/lib/utils/text/richText.js +15 -19
- package/dist-cjs/lib/utils/text/richText.js.map +3 -3
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +7 -2
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
- package/dist-esm/index.d.mts +311 -242
- package/dist-esm/index.mjs +14 -5
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/bindings/arrow/ArrowBindingUtil.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs +2 -2
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
- package/dist-esm/lib/defaultEmbedDefinitions.mjs +1 -1
- package/dist-esm/lib/defaultEmbedDefinitions.mjs.map +2 -2
- package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -5
- package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
- package/dist-esm/lib/defaultSideEffects.mjs +6 -1
- package/dist-esm/lib/defaultSideEffects.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +15 -15
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/elbow/elbowArrowSnapLines.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/elbow/getElbowArrowInfo.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/elbow/getElbowArrowInfo.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/shared.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs +4 -10
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +7 -4
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/bookmark/bookmarks.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +30 -25
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/getPath.mjs +21 -11
- package/dist-esm/lib/shapes/draw/getPath.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +83 -86
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +3 -3
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +6 -0
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/frame/FrameShapeTool.mjs.map +1 -1
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +6 -5
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +147 -142
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs +5 -10
- package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs +3 -3
- package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +24 -22
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs +3 -3
- package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +7 -12
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/noteHelpers.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs +5 -10
- package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +4 -3
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +14 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +12 -4
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs +2 -2
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/crop.mjs +1 -0
- package/dist-esm/lib/shapes/shared/crop.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs +4 -4
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useEditableRichText.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs +12 -0
- package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs.map +7 -0
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +1 -1
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/RichTextArea.mjs +5 -0
- package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +5 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs +4 -10
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs +7 -5
- package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +4 -5
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +3 -8
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/HandTool.mjs +3 -5
- package/dist-esm/lib/tools/HandTool/HandTool.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs +3 -2
- package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs +1 -1
- package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs +1 -1
- package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs +10 -11
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs +6 -5
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs +4 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs +2 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +8 -6
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs +38 -11
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +43 -51
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs +6 -6
- package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs +6 -19
- package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +4 -13
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +5 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +2 -3
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs +7 -6
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +13 -11
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs +17 -4
- package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs +1 -1
- package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs +3 -3
- package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs +5 -6
- package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs +1 -3
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs +1 -1
- package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs +1 -1
- package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs.map +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs +2 -8
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs +1 -3
- package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/CursorChatBubble.mjs +1 -1
- package/dist-esm/lib/ui/components/CursorChatBubble.mjs.map +2 -2
- package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs +3 -30
- package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/EditLinkDialog.mjs +11 -1
- package/dist-esm/lib/ui/components/EditLinkDialog.mjs.map +2 -2
- package/dist-esm/lib/ui/components/HelperButtons/BackToContent.mjs +1 -1
- package/dist-esm/lib/ui/components/HelperButtons/BackToContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/HelperButtons/StopFollowing.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +1 -1
- package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
- package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs +3 -6
- package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs.map +2 -2
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs +3 -1
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs.map +2 -2
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs +6 -0
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/TopPanel/CenteredTopPanelContainer.mjs.map +1 -1
- package/dist-esm/lib/ui/components/menu-items.mjs +4 -5
- package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +3 -1
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +157 -95
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +15 -8
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
- package/dist-esm/lib/ui/context/actions.mjs +7 -8
- package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
- package/dist-esm/lib/ui/context/components.mjs +1 -2
- package/dist-esm/lib/ui/context/components.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/menu-hooks.mjs +1 -4
- package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useFlatten.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTools.mjs +4 -5
- package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
- package/dist-esm/lib/ui/version.mjs +3 -3
- package/dist-esm/lib/ui/version.mjs.map +1 -1
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +17 -6
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
- package/dist-esm/lib/utils/export/exportAs.mjs +1 -3
- package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
- package/dist-esm/lib/utils/frames/frames.mjs.map +2 -2
- package/dist-esm/lib/utils/test-helpers.mjs +21 -0
- package/dist-esm/lib/utils/test-helpers.mjs.map +7 -0
- package/dist-esm/lib/utils/text/richText.mjs +12 -5
- package/dist-esm/lib/utils/text/richText.mjs.map +2 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +8 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
- package/package.json +18 -16
- package/src/index.ts +6 -2
- package/src/lib/Tldraw.test.tsx +46 -1
- package/src/lib/bindings/arrow/ArrowBindingUtil.ts +1 -1
- package/src/lib/canvas/TldrawSelectionForeground.tsx +6 -11
- package/src/lib/defaultEmbedDefinitions.ts +2 -1
- package/src/lib/defaultExternalContentHandlers.ts +13 -14
- package/src/lib/defaultSideEffects.ts +6 -1
- package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +40 -133
- package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +8 -8
- package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +2 -2
- package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +16 -16
- package/src/lib/shapes/arrow/arrow-types.ts +2 -0
- package/src/lib/shapes/arrow/arrowLabel.ts +2 -2
- package/src/lib/shapes/arrow/arrowTargetState.ts +2 -2
- package/src/lib/shapes/arrow/elbow/elbowArrowSnapLines.tsx +3 -3
- package/src/lib/shapes/arrow/elbow/getElbowArrowInfo.test.ts +80 -0
- package/src/lib/shapes/arrow/elbow/getElbowArrowInfo.tsx +1 -1
- package/src/lib/shapes/arrow/shared.ts +4 -4
- package/src/lib/shapes/arrow/toolStates/Idle.tsx +4 -14
- package/src/lib/shapes/arrow/toolStates/Pointing.tsx +8 -5
- package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +1 -1
- package/src/lib/shapes/bookmark/bookmarks.ts +3 -3
- package/src/lib/shapes/draw/DrawShapeUtil.test.ts +146 -0
- package/src/lib/shapes/draw/DrawShapeUtil.tsx +33 -27
- package/src/lib/shapes/draw/getPath.ts +31 -10
- package/src/lib/shapes/draw/toolStates/Drawing.ts +100 -90
- package/src/lib/shapes/embed/EmbedShapeUtil.tsx +8 -1
- package/src/lib/shapes/frame/FrameShapeTool.ts +1 -1
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +10 -4
- package/src/lib/shapes/geo/GeoShapeUtil.test.tsx +10 -2
- package/src/lib/shapes/geo/GeoShapeUtil.tsx +228 -176
- package/src/lib/shapes/geo/toolStates/Idle.ts +5 -15
- package/src/lib/shapes/geo/toolStates/Pointing.ts +6 -6
- package/src/lib/shapes/highlight/HighlightShapeUtil.test.ts +146 -0
- package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +27 -24
- package/src/lib/shapes/line/LineShapeTool.test.ts +6 -6
- package/src/lib/shapes/line/LineShapeUtil.test.tsx +5 -5
- package/src/lib/shapes/line/toolStates/Pointing.ts +4 -4
- package/src/lib/shapes/note/NoteShapeTool.test.ts +2 -1
- package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -10
- package/src/lib/shapes/note/noteCloning.test.ts +3 -1
- package/src/lib/shapes/note/noteHelpers.ts +2 -2
- package/src/lib/shapes/note/toolStates/Pointing.ts +5 -10
- package/src/lib/shapes/shared/HyperlinkButton.tsx +4 -3
- package/src/lib/shapes/shared/PlainTextLabel.tsx +12 -2
- package/src/lib/shapes/shared/RichTextLabel.tsx +14 -4
- package/src/lib/shapes/shared/ShapeFill.tsx +2 -2
- package/src/lib/shapes/shared/crop.ts +1 -0
- package/src/lib/shapes/shared/interpolate-props.ts +4 -4
- package/src/lib/shapes/shared/useEditablePlainText.ts +7 -3
- package/src/lib/shapes/shared/useEditableRichText.ts +7 -3
- package/src/lib/shapes/shared/useEfficientZoomThreshold.ts +10 -0
- package/src/lib/shapes/shared/useImageOrVideoAsset.ts +1 -1
- package/src/lib/shapes/text/RichTextArea.tsx +5 -0
- package/src/lib/shapes/text/TextShapeTool.test.ts +4 -4
- package/src/lib/shapes/text/TextShapeUtil.tsx +5 -0
- package/src/lib/shapes/text/toolStates/Idle.ts +4 -14
- package/src/lib/shapes/text/toolStates/Pointing.ts +8 -8
- package/src/lib/shapes/video/VideoShapeUtil.tsx +2 -1
- package/src/lib/tools/EraserTool/childStates/Erasing.ts +7 -10
- package/src/lib/tools/EraserTool/childStates/Pointing.ts +5 -20
- package/src/lib/tools/HandTool/HandTool.ts +3 -5
- package/src/lib/tools/HandTool/childStates/Dragging.ts +3 -2
- package/src/lib/tools/HandTool/childStates/Pointing.ts +1 -1
- package/src/lib/tools/LaserTool/childStates/Lasering.ts +1 -1
- package/src/lib/tools/SelectTool/DragAndDropManager.ts +14 -11
- package/src/lib/tools/SelectTool/childStates/Brushing.ts +8 -11
- package/src/lib/tools/SelectTool/childStates/Crop/children/Cropping.ts +7 -6
- package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +3 -4
- package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.ts +2 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +11 -12
- package/src/lib/tools/SelectTool/childStates/EditingShape.ts +57 -16
- package/src/lib/tools/SelectTool/childStates/Idle.ts +64 -81
- package/src/lib/tools/SelectTool/childStates/PointingArrowLabel.ts +7 -8
- package/src/lib/tools/SelectTool/childStates/PointingCanvas.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingHandle.ts +9 -17
- package/src/lib/tools/SelectTool/childStates/PointingResizeHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingRotateHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingSelection.ts +4 -4
- package/src/lib/tools/SelectTool/childStates/PointingShape.ts +4 -14
- package/src/lib/tools/SelectTool/childStates/Resizing.ts +8 -10
- package/src/lib/tools/SelectTool/childStates/Rotating.ts +2 -3
- package/src/lib/tools/SelectTool/childStates/ScribbleBrushing.ts +9 -10
- package/src/lib/tools/SelectTool/childStates/Translating.ts +16 -15
- package/src/lib/tools/SelectTool/selectHelpers.ts +39 -4
- package/src/lib/tools/ZoomTool/ZoomTool.ts +1 -1
- package/src/lib/tools/ZoomTool/childStates/Pointing.ts +3 -3
- package/src/lib/tools/ZoomTool/childStates/ZoomBrushing.ts +5 -6
- package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +1 -3
- package/src/lib/tools/selection-logic/selectOnCanvasPointerUp.ts +1 -1
- package/src/lib/tools/selection-logic/updateHoveredShapeId.ts +1 -1
- package/src/lib/ui/TldrawUi.tsx +5 -2
- package/src/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.tsx +1 -9
- package/src/lib/ui/components/ContextMenu/DefaultContextMenu.tsx +1 -3
- package/src/lib/ui/components/CursorChatBubble.tsx +2 -2
- package/src/lib/ui/components/DefaultDebugPanel.tsx +3 -42
- package/src/lib/ui/components/EditLinkDialog.tsx +16 -6
- package/src/lib/ui/components/HelperButtons/BackToContent.tsx +1 -1
- package/src/lib/ui/components/HelperButtons/StopFollowing.tsx +2 -2
- package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +1 -1
- package/src/lib/ui/components/OfflineIndicator/OfflineIndicator.tsx +6 -5
- package/src/lib/ui/components/PageMenu/PageItemInput.tsx +3 -1
- package/src/lib/ui/components/SharePanel/PeopleMenu.tsx +8 -0
- package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +2 -2
- package/src/lib/ui/components/Toolbar/DefaultImageToolbar.tsx +1 -1
- package/src/lib/ui/components/Toolbar/DefaultRichTextToolbar.tsx +1 -1
- package/src/lib/ui/components/TopPanel/CenteredTopPanelContainer.tsx +1 -1
- package/src/lib/ui/components/menu-items.tsx +9 -15
- package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +5 -3
- package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +2 -2
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +208 -113
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.tsx +1 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.tsx +1 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +7 -4
- package/src/lib/ui/context/actions.tsx +15 -19
- package/src/lib/ui/context/components.tsx +1 -2
- package/src/lib/ui/hooks/menu-hooks.ts +9 -19
- package/src/lib/ui/hooks/useClipboardEvents.ts +2 -2
- package/src/lib/ui/hooks/useFlatten.ts +1 -2
- package/src/lib/ui/hooks/useKeyboardShortcuts.ts +2 -2
- package/src/lib/ui/hooks/useTools.tsx +5 -7
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +27 -23
- package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +12 -48
- package/src/lib/utils/excalidraw/putExcalidrawContent.ts +19 -6
- package/src/lib/utils/export/exportAs.ts +2 -9
- package/src/lib/utils/frames/frames.ts +1 -1
- package/src/lib/utils/test-helpers.ts +62 -0
- package/src/lib/utils/text/richText.ts +13 -8
- package/src/lib/utils/tldr/buildFromV1Document.ts +21 -19
- package/src/test/Editor.test.tsx +78 -41
- package/src/test/EraserTool.test.ts +10 -12
- package/src/test/SelectTool.test.ts +11 -19
- package/src/test/TestEditor.ts +49 -51
- package/src/test/TldrawEditor.test.tsx +24 -20
- package/src/test/__snapshots__/drawing.test.ts.snap +3 -1257
- package/src/test/__snapshots__/resizing.test.ts.snap +3 -12
- package/src/test/arrows-megabus.test.tsx +1 -1
- package/src/test/bindings.test.tsx +29 -25
- package/src/test/bindingsIndex.test.tsx +4 -4
- package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +10 -10
- package/src/test/commands/cameraState.test.ts +299 -0
- package/src/test/commands/createShape.test.ts +64 -0
- package/src/test/commands/createShapes.test.ts +15 -1
- package/src/test/commands/getSvgString.test.ts +2 -2
- package/src/test/commands/isShapeOfType.test.ts +44 -0
- package/src/test/commands/putContent.test.ts +80 -1
- package/src/test/commands/setCamera.test.ts +13 -11
- package/src/test/commands/stackShapes.test.ts +34 -8
- package/src/test/commands/updateShape.test.ts +67 -0
- package/src/test/commands/updateShapes.test.ts +21 -5
- package/src/test/commands/zoomToBounds.test.ts +19 -3
- package/src/test/commands/zoomToSelection.test.ts +14 -3
- package/src/test/custom-clipping.test.ts +52 -44
- package/src/test/customSnapping.test.tsx +77 -62
- package/src/test/drawing.test.ts +17 -10
- package/src/test/duplicate.test.ts +1 -1
- package/src/test/flipShapes.test.ts +33 -0
- package/src/test/frames.test.ts +94 -2
- package/src/test/getCulledShapes.test.tsx +11 -3
- package/src/test/getShapeAtPoint.test.ts +2 -2
- package/src/test/groups.test.tsx +7 -4
- package/src/test/modifiers.test.ts +6 -6
- package/src/test/resizing.test.ts +16 -22
- package/src/test/selection-omnibus.test.ts +13 -13
- package/src/test/shapeutils.test.ts +1 -1
- package/src/test/spacebarPanning.test.ts +28 -10
- package/src/test/styles2.test.tsx +1 -1
- package/src/test/styles3.test.ts +5 -5
- package/src/test/test-jsx.tsx +72 -57
- package/src/test/text.test.ts +15 -17
- package/src/test/translating.test.ts +6 -8
- package/src/test/ui/BackToContent.test.tsx +111 -0
- package/tldraw.css +41 -35
- package/dist-cjs/lib/shapes/shared/useForceSolid.js.map +0 -7
- package/dist-cjs/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.js.map +0 -7
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js +0 -32
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js.map +0 -7
- package/dist-cjs/lib/utils/text/textDirection.js +0 -51
- package/dist-cjs/lib/utils/text/textDirection.js.map +0 -7
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs +0 -9
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs.map +0 -7
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs +0 -8
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs.map +0 -7
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs +0 -12
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs.map +0 -7
- package/dist-esm/lib/utils/text/textDirection.mjs +0 -31
- package/dist-esm/lib/utils/text/textDirection.mjs.map +0 -7
- package/src/lib/shapes/shared/useForceSolid.ts +0 -6
- package/src/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.ts +0 -10
- package/src/lib/ui/components/TopPanel/DefaultTopPanel.tsx +0 -10
- package/src/lib/utils/text/textDirection.ts +0 -32
|
@@ -637,3 +637,36 @@ it('Updates the image shape flip properties when flipped', () => {
|
|
|
637
637
|
editor.flipShapes(editor.getSelectedShapeIds(), 'vertical')
|
|
638
638
|
expect(editor.getLastCreatedShape<TLImageShape>().props.flipY).toBe(true)
|
|
639
639
|
})
|
|
640
|
+
|
|
641
|
+
it('Restores flipped shape positions when shape is rotated', () => {
|
|
642
|
+
editor.selectAll().rotateSelection(PI / 2.5)
|
|
643
|
+
const before = editor.getSelectedShapes()
|
|
644
|
+
editor.flipShapes(editor.getSelectedShapeIds(), 'horizontal')
|
|
645
|
+
editor.flipShapes(editor.getSelectedShapeIds(), 'horizontal')
|
|
646
|
+
const after = editor.getSelectedShapes()
|
|
647
|
+
expect(after.length).toBe(before.length)
|
|
648
|
+
for (let i = 0; i < before.length; i++) {
|
|
649
|
+
expect(after[i]).toCloselyMatchObject(before[i])
|
|
650
|
+
}
|
|
651
|
+
})
|
|
652
|
+
|
|
653
|
+
it('Restores flipped shape positions with draw shapes when shape is rotated', () => {
|
|
654
|
+
editor
|
|
655
|
+
.cancel()
|
|
656
|
+
.setCurrentTool('draw')
|
|
657
|
+
.pointerDown(0, 0)
|
|
658
|
+
.pointerMove(-100, -100)
|
|
659
|
+
.pointerMove(0, -100)
|
|
660
|
+
.pointerMove(100, 100)
|
|
661
|
+
.pointerUp()
|
|
662
|
+
|
|
663
|
+
editor.selectAll().rotateSelection(PI / 2.5)
|
|
664
|
+
const before = editor.getSelectedShapes()
|
|
665
|
+
editor.flipShapes(editor.getSelectedShapeIds(), 'horizontal')
|
|
666
|
+
editor.flipShapes(editor.getSelectedShapeIds(), 'horizontal')
|
|
667
|
+
const after = editor.getSelectedShapes()
|
|
668
|
+
expect(after.length).toBe(before.length)
|
|
669
|
+
for (let i = 0; i < before.length; i++) {
|
|
670
|
+
expect(after[i]).toCloselyMatchObject(before[i])
|
|
671
|
+
}
|
|
672
|
+
})
|
package/src/test/frames.test.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
} from '@tldraw/editor'
|
|
11
11
|
import { vi } from 'vitest'
|
|
12
12
|
import { getArrowBindings } from '../lib/shapes/arrow/shared'
|
|
13
|
+
import { FrameShapeUtil } from '../lib/shapes/frame/FrameShapeUtil'
|
|
13
14
|
import { DEFAULT_FRAME_PADDING, fitFrameToContent, removeFrame } from '../lib/utils/frames/frames'
|
|
14
15
|
import { TestEditor } from './TestEditor'
|
|
15
16
|
|
|
@@ -639,9 +640,13 @@ describe('frame shapes', () => {
|
|
|
639
640
|
|
|
640
641
|
editor.setCurrentTool('select')
|
|
641
642
|
|
|
643
|
+
// Not with enter key
|
|
642
644
|
editor.keyDown('Enter')
|
|
643
645
|
editor.keyUp('Enter')
|
|
646
|
+
expect(editor.getCurrentPageState().editingShapeId).toBe(null)
|
|
644
647
|
|
|
648
|
+
// Just with header click (tests against header's geometry)
|
|
649
|
+
editor.click(105, 95)
|
|
645
650
|
expect(editor.getCurrentPageState().editingShapeId).toBe(frameId)
|
|
646
651
|
})
|
|
647
652
|
|
|
@@ -850,6 +855,93 @@ describe('frame shapes', () => {
|
|
|
850
855
|
expect(editor.getSortedChildIdsForParent(insideFrameId)).toStrictEqual([rectAId, rectBId])
|
|
851
856
|
expect(editor.getSortedChildIdsForParent(outsideFrameId)).toStrictEqual([insideFrameId])
|
|
852
857
|
})
|
|
858
|
+
|
|
859
|
+
describe('resizeChildren configuration option', () => {
|
|
860
|
+
it('has default canResizeChildren behavior as false', () => {
|
|
861
|
+
const frameUtil = editor.getShapeUtil<TLFrameShape>('frame') as FrameShapeUtil
|
|
862
|
+
expect(frameUtil.options.resizeChildren).toBe(false)
|
|
863
|
+
expect(frameUtil.canResizeChildren()).toBe(false)
|
|
864
|
+
})
|
|
865
|
+
|
|
866
|
+
it('can be configured to allow resizing children', () => {
|
|
867
|
+
const ConfiguredFrameShapeUtil = FrameShapeUtil.configure({ resizeChildren: true })
|
|
868
|
+
const configuredFrameUtil = new ConfiguredFrameShapeUtil(editor)
|
|
869
|
+
expect(configuredFrameUtil.options.resizeChildren).toBe(true)
|
|
870
|
+
expect(configuredFrameUtil.canResizeChildren()).toBe(true)
|
|
871
|
+
})
|
|
872
|
+
|
|
873
|
+
it('can be configured to disallow resizing children', () => {
|
|
874
|
+
const ConfiguredFrameShapeUtil = FrameShapeUtil.configure({ resizeChildren: false })
|
|
875
|
+
const configuredFrameUtil = new ConfiguredFrameShapeUtil(editor)
|
|
876
|
+
expect(configuredFrameUtil.options.resizeChildren).toBe(false)
|
|
877
|
+
expect(configuredFrameUtil.canResizeChildren()).toBe(false)
|
|
878
|
+
})
|
|
879
|
+
|
|
880
|
+
it('maintains other options when configuring resizeChildren', () => {
|
|
881
|
+
const ConfiguredFrameShapeUtil = FrameShapeUtil.configure({
|
|
882
|
+
resizeChildren: true,
|
|
883
|
+
showColors: true,
|
|
884
|
+
})
|
|
885
|
+
const configuredFrameUtil = new ConfiguredFrameShapeUtil(editor)
|
|
886
|
+
expect(configuredFrameUtil.options.resizeChildren).toBe(true)
|
|
887
|
+
expect(configuredFrameUtil.options.showColors).toBe(true)
|
|
888
|
+
})
|
|
889
|
+
|
|
890
|
+
it('resizes children when configured with resizeChildren: true', () => {
|
|
891
|
+
// Create a frame with a child shape using a configured frame util
|
|
892
|
+
editor.setCurrentTool('frame')
|
|
893
|
+
editor.pointerDown(100, 100).pointerMove(200, 200).pointerUp(200, 200)
|
|
894
|
+
|
|
895
|
+
const frameId = editor.getOnlySelectedShape()!.id
|
|
896
|
+
|
|
897
|
+
// Add a child shape
|
|
898
|
+
editor.setCurrentTool('geo')
|
|
899
|
+
editor.pointerDown(125, 125).pointerMove(175, 175).pointerUp(175, 175)
|
|
900
|
+
|
|
901
|
+
const childId = editor.getOnlySelectedShape()!.id
|
|
902
|
+
|
|
903
|
+
// Get initial bounds
|
|
904
|
+
const initialChildBounds = editor.getShapePageBounds(childId)!
|
|
905
|
+
|
|
906
|
+
// Create a new editor with configured frame util that allows resizing children
|
|
907
|
+
const configuredEditor = new TestEditor({
|
|
908
|
+
shapeUtils: [FrameShapeUtil.configure({ resizeChildren: true })],
|
|
909
|
+
})
|
|
910
|
+
|
|
911
|
+
// Create the same frame and child in the new editor
|
|
912
|
+
configuredEditor.createShapes([
|
|
913
|
+
{ id: frameId, type: 'frame', x: 100, y: 100, props: { w: 100, h: 100 } },
|
|
914
|
+
{
|
|
915
|
+
id: childId,
|
|
916
|
+
type: 'geo',
|
|
917
|
+
parentId: frameId,
|
|
918
|
+
x: 125,
|
|
919
|
+
y: 125,
|
|
920
|
+
props: { w: 50, h: 50 },
|
|
921
|
+
},
|
|
922
|
+
])
|
|
923
|
+
|
|
924
|
+
// Resize the frame to half size
|
|
925
|
+
configuredEditor.select(frameId)
|
|
926
|
+
configuredEditor.resizeSelection({ scaleX: 0.5, scaleY: 0.5 }, 'bottom_right')
|
|
927
|
+
|
|
928
|
+
// Verify the frame was resized
|
|
929
|
+
const resizedFrameBounds = configuredEditor.getShapePageBounds(frameId)!
|
|
930
|
+
expect(resizedFrameBounds).toCloselyMatchObject({
|
|
931
|
+
x: 100,
|
|
932
|
+
y: 100,
|
|
933
|
+
w: 50,
|
|
934
|
+
h: 50,
|
|
935
|
+
})
|
|
936
|
+
|
|
937
|
+
// Verify the child was also resized
|
|
938
|
+
const resizedChildBounds = configuredEditor.getShapePageBounds(childId)!
|
|
939
|
+
expect(resizedChildBounds.w).toBeCloseTo(initialChildBounds.w * 0.5)
|
|
940
|
+
expect(resizedChildBounds.h).toBeCloseTo(initialChildBounds.h * 0.5)
|
|
941
|
+
|
|
942
|
+
configuredEditor.dispose()
|
|
943
|
+
})
|
|
944
|
+
})
|
|
853
945
|
})
|
|
854
946
|
|
|
855
947
|
test('arrows bound to a shape within a group within a frame are reparented if the group is moved outside of the frame', () => {
|
|
@@ -1363,13 +1455,13 @@ describe('Unparenting behavior', () => {
|
|
|
1363
1455
|
|
|
1364
1456
|
// When the shape has a fill, it should not fall out of the frame
|
|
1365
1457
|
editor.undo()
|
|
1366
|
-
editor.updateShape
|
|
1458
|
+
editor.updateShape({ ...largeRect, props: { fill: 'solid' } })
|
|
1367
1459
|
dragOntoFrame()
|
|
1368
1460
|
expect(editor.getShape(largeRect.id)!.parentId).toBe(frameId)
|
|
1369
1461
|
|
|
1370
1462
|
// When the shape has a label and that label is on top of the frame, it should not fall out of the frame
|
|
1371
1463
|
editor.undo()
|
|
1372
|
-
editor.updateShape
|
|
1464
|
+
editor.updateShape({
|
|
1373
1465
|
...largeRect,
|
|
1374
1466
|
props: { fill: 'none', richText: toRichText('hello') },
|
|
1375
1467
|
})
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
Box,
|
|
4
4
|
RecordProps,
|
|
5
5
|
T,
|
|
6
|
-
|
|
6
|
+
TLShape,
|
|
7
7
|
TLShapeId,
|
|
8
8
|
createShapeId,
|
|
9
9
|
} from '@tldraw/editor'
|
|
@@ -11,11 +11,19 @@ import { vi } from 'vitest'
|
|
|
11
11
|
import { TestEditor } from './TestEditor'
|
|
12
12
|
import { TL } from './test-jsx'
|
|
13
13
|
|
|
14
|
+
const UNCULLABLE_TYPE = 'uncullable'
|
|
15
|
+
|
|
16
|
+
declare module '@tldraw/tlschema' {
|
|
17
|
+
export interface TLGlobalShapePropsMap {
|
|
18
|
+
[UNCULLABLE_TYPE]: { w: number; h: number }
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
14
22
|
// Custom uncullable shape type for testing canCull override
|
|
15
|
-
type UncullableShape =
|
|
23
|
+
type UncullableShape = TLShape<typeof UNCULLABLE_TYPE>
|
|
16
24
|
|
|
17
25
|
class UncullableShapeUtil extends BaseBoxShapeUtil<UncullableShape> {
|
|
18
|
-
static override type =
|
|
26
|
+
static override type = UNCULLABLE_TYPE
|
|
19
27
|
static override props: RecordProps<UncullableShape> = {
|
|
20
28
|
w: T.number,
|
|
21
29
|
h: T.number,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TLShape, createShapeId, toRichText } from '@tldraw/editor'
|
|
2
2
|
import { TestEditor } from './TestEditor'
|
|
3
3
|
|
|
4
4
|
let editor: TestEditor
|
|
@@ -146,7 +146,7 @@ describe('with hitLabels=true', () => {
|
|
|
146
146
|
it('hits geo shape label behind overlapping hollow shape', () => {
|
|
147
147
|
// label is empty
|
|
148
148
|
expect(editor.getShapeAtPoint({ x: 350, y: 350 }, opts)?.id).toBe(ids.box3)
|
|
149
|
-
editor.updateShape
|
|
149
|
+
editor.updateShape({
|
|
150
150
|
id: ids.box2,
|
|
151
151
|
type: 'geo',
|
|
152
152
|
props: { richText: toRichText('hello') },
|
package/src/test/groups.test.tsx
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Box,
|
|
3
|
+
ExtractShapeByProps,
|
|
3
4
|
GroupShapeUtil,
|
|
4
5
|
TLArrowShape,
|
|
5
6
|
TLGroupShape,
|
|
@@ -35,14 +36,16 @@ const ids = {
|
|
|
35
36
|
groupA: createShapeId('groupA'),
|
|
36
37
|
}
|
|
37
38
|
|
|
39
|
+
type BoxShape = ExtractShapeByProps<{ fill: string }>
|
|
40
|
+
|
|
38
41
|
const box = (
|
|
39
42
|
id: TLShapeId,
|
|
40
43
|
x: number,
|
|
41
44
|
y: number,
|
|
42
45
|
w = 10,
|
|
43
46
|
h = 10,
|
|
44
|
-
fill = 'solid'
|
|
45
|
-
): TLShapePartial => ({
|
|
47
|
+
fill: BoxShape['props']['fill'] = 'solid'
|
|
48
|
+
): TLShapePartial<BoxShape> => ({
|
|
46
49
|
type: 'geo',
|
|
47
50
|
id,
|
|
48
51
|
x,
|
|
@@ -1557,7 +1560,7 @@ describe('erasing', () => {
|
|
|
1557
1560
|
// move to group B
|
|
1558
1561
|
editor.pointerMove(65, 5)
|
|
1559
1562
|
|
|
1560
|
-
expect(editor.getErasingShapeIds().length).toBe(
|
|
1563
|
+
expect(editor.getErasingShapeIds().length).toBe(3)
|
|
1561
1564
|
})
|
|
1562
1565
|
})
|
|
1563
1566
|
|
|
@@ -1980,7 +1983,7 @@ describe('Group opacity', () => {
|
|
|
1980
1983
|
editor.setOpacityForNextShapes(0.5)
|
|
1981
1984
|
editor.groupShapes(editor.getSelectedShapeIds())
|
|
1982
1985
|
const group = editor.getShape(onlySelectedId())!
|
|
1983
|
-
assert(editor.isShapeOfType
|
|
1986
|
+
assert(editor.isShapeOfType(group, 'group'))
|
|
1984
1987
|
expect(group.opacity).toBe(1)
|
|
1985
1988
|
})
|
|
1986
1989
|
})
|
|
@@ -13,25 +13,25 @@ it('Shift Key', () => {
|
|
|
13
13
|
editor.pointerDown(0, 0)
|
|
14
14
|
editor.pointerMove(100, 100, { shiftKey: true })
|
|
15
15
|
editor.pointerMove(100, 100, { shiftKey: false })
|
|
16
|
-
expect(editor.inputs.
|
|
16
|
+
expect(editor.inputs.getShiftKey()).toBe(true)
|
|
17
17
|
vi.advanceTimersByTime(200)
|
|
18
|
-
expect(editor.inputs.
|
|
18
|
+
expect(editor.inputs.getShiftKey()).toBe(false)
|
|
19
19
|
})
|
|
20
20
|
|
|
21
21
|
it('Alt Key', () => {
|
|
22
22
|
editor.pointerDown(0, 0)
|
|
23
23
|
editor.pointerMove(100, 100, { altKey: true })
|
|
24
24
|
editor.pointerMove(100, 100, { altKey: false })
|
|
25
|
-
expect(editor.inputs.
|
|
25
|
+
expect(editor.inputs.getAltKey()).toBe(true)
|
|
26
26
|
vi.advanceTimersByTime(200)
|
|
27
|
-
expect(editor.inputs.
|
|
27
|
+
expect(editor.inputs.getAltKey()).toBe(false)
|
|
28
28
|
})
|
|
29
29
|
|
|
30
30
|
it('Ctrl Key', () => {
|
|
31
31
|
editor.pointerDown(0, 0)
|
|
32
32
|
editor.pointerMove(100, 100, { ctrlKey: true })
|
|
33
33
|
editor.pointerMove(100, 100, { ctrlKey: false })
|
|
34
|
-
expect(editor.inputs.
|
|
34
|
+
expect(editor.inputs.getCtrlKey()).toBe(true)
|
|
35
35
|
vi.advanceTimersByTime(200)
|
|
36
|
-
expect(editor.inputs.
|
|
36
|
+
expect(editor.inputs.getCtrlKey()).toBe(false)
|
|
37
37
|
})
|
|
@@ -20,6 +20,7 @@ import { NoteShapeUtil } from '../lib/shapes/note/NoteShapeUtil'
|
|
|
20
20
|
import { TestEditor } from './TestEditor'
|
|
21
21
|
import { getSnapLines } from './getSnapLines'
|
|
22
22
|
import { roundedBox } from './roundedBox'
|
|
23
|
+
import { createDrawSegments } from './test-jsx'
|
|
23
24
|
|
|
24
25
|
vi.useFakeTimers()
|
|
25
26
|
|
|
@@ -904,15 +905,12 @@ describe('When resizing a shape with children', () => {
|
|
|
904
905
|
x: 100,
|
|
905
906
|
y: 100,
|
|
906
907
|
props: {
|
|
907
|
-
segments: [
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
],
|
|
914
|
-
},
|
|
915
|
-
],
|
|
908
|
+
segments: createDrawSegments([
|
|
909
|
+
[
|
|
910
|
+
{ x: 0, y: 0, z: 0.5 },
|
|
911
|
+
{ x: 100, y: 100, z: 0.5 },
|
|
912
|
+
],
|
|
913
|
+
]),
|
|
916
914
|
},
|
|
917
915
|
},
|
|
918
916
|
])
|
|
@@ -3876,10 +3874,8 @@ it('uses the cross cursor when create resizing', () => {
|
|
|
3876
3874
|
describe('Resizing text from the right edge', () => {
|
|
3877
3875
|
it('Resizes text from the right edge', () => {
|
|
3878
3876
|
const id = createShapeId()
|
|
3879
|
-
editor.createShapes
|
|
3880
|
-
editor.updateShapes
|
|
3881
|
-
{ id, type: 'text', props: { richText: toRichText('Hello World') } },
|
|
3882
|
-
]) // auto size
|
|
3877
|
+
editor.createShapes([{ id, type: 'text', props: { richText: toRichText('H') } }])
|
|
3878
|
+
editor.updateShapes([{ id, type: 'text', props: { richText: toRichText('Hello World') } }]) // auto size
|
|
3883
3879
|
|
|
3884
3880
|
editor.select(id)
|
|
3885
3881
|
|
|
@@ -3905,10 +3901,8 @@ describe('Resizing text from the right edge', () => {
|
|
|
3905
3901
|
editor.updateInstanceState({ isCoarsePointer: true })
|
|
3906
3902
|
|
|
3907
3903
|
const id = createShapeId()
|
|
3908
|
-
editor.createShapes
|
|
3909
|
-
editor.updateShapes
|
|
3910
|
-
{ id, type: 'text', props: { richText: toRichText('Hello World') } },
|
|
3911
|
-
]) // auto size
|
|
3904
|
+
editor.createShapes([{ id, type: 'text', props: { richText: toRichText('H') } }])
|
|
3905
|
+
editor.updateShapes([{ id, type: 'text', props: { richText: toRichText('Hello World') } }]) // auto size
|
|
3912
3906
|
|
|
3913
3907
|
editor.select(id)
|
|
3914
3908
|
|
|
@@ -3954,7 +3948,7 @@ describe('When resizing near the edges of the screen', () => {
|
|
|
3954
3948
|
|
|
3955
3949
|
describe('resizing text with autosize true', () => {
|
|
3956
3950
|
it('resizes text from the right side', () => {
|
|
3957
|
-
editor.createShape
|
|
3951
|
+
editor.createShape({
|
|
3958
3952
|
type: 'text',
|
|
3959
3953
|
x: 0,
|
|
3960
3954
|
y: 0,
|
|
@@ -3980,7 +3974,7 @@ describe('resizing text with autosize true', () => {
|
|
|
3980
3974
|
})
|
|
3981
3975
|
|
|
3982
3976
|
it('resizes text from the right side when alt key is pressed', () => {
|
|
3983
|
-
editor.createShape
|
|
3977
|
+
editor.createShape({
|
|
3984
3978
|
type: 'text',
|
|
3985
3979
|
x: 0,
|
|
3986
3980
|
y: 0,
|
|
@@ -4007,7 +4001,7 @@ describe('resizing text with autosize true', () => {
|
|
|
4007
4001
|
})
|
|
4008
4002
|
|
|
4009
4003
|
it('resizes text from the left side', () => {
|
|
4010
|
-
editor.createShape
|
|
4004
|
+
editor.createShape({
|
|
4011
4005
|
type: 'text',
|
|
4012
4006
|
x: 0,
|
|
4013
4007
|
y: 0,
|
|
@@ -4033,7 +4027,7 @@ describe('resizing text with autosize true', () => {
|
|
|
4033
4027
|
})
|
|
4034
4028
|
|
|
4035
4029
|
it('resizes text from the left side when alt is pressed', () => {
|
|
4036
|
-
editor.createShape
|
|
4030
|
+
editor.createShape({
|
|
4037
4031
|
type: 'text',
|
|
4038
4032
|
x: 0,
|
|
4039
4033
|
y: 0,
|
|
@@ -4062,7 +4056,7 @@ describe('resizing text with autosize true', () => {
|
|
|
4062
4056
|
|
|
4063
4057
|
describe('cancelling a resize operation', () => {
|
|
4064
4058
|
it('undoes any changes since the start of the resize operation', () => {
|
|
4065
|
-
editor.createShape
|
|
4059
|
+
editor.createShape({
|
|
4066
4060
|
type: 'geo',
|
|
4067
4061
|
x: 0,
|
|
4068
4062
|
y: 0,
|
|
@@ -76,7 +76,7 @@ describe('Hovering shapes', () => {
|
|
|
76
76
|
editor.pointerMove(50, 50)
|
|
77
77
|
expect(editor.getHoveredShapeId()).toBe(null)
|
|
78
78
|
|
|
79
|
-
editor.updateShape
|
|
79
|
+
editor.updateShape({
|
|
80
80
|
id: ids.box1,
|
|
81
81
|
type: 'geo',
|
|
82
82
|
props: { richText: toRichText('hello') },
|
|
@@ -88,7 +88,7 @@ describe('Hovering shapes', () => {
|
|
|
88
88
|
})
|
|
89
89
|
|
|
90
90
|
it('selects a shape with a full label on pointer down', () => {
|
|
91
|
-
editor.updateShape
|
|
91
|
+
editor.updateShape({
|
|
92
92
|
id: ids.box1,
|
|
93
93
|
type: 'geo',
|
|
94
94
|
props: { richText: toRichText('hello') },
|
|
@@ -462,7 +462,7 @@ describe('when shape is hollow', () => {
|
|
|
462
462
|
describe('when shape is a frame', () => {
|
|
463
463
|
let frame1: TLFrameShape
|
|
464
464
|
beforeEach(() => {
|
|
465
|
-
editor.createShape
|
|
465
|
+
editor.createShape({ id: ids.frame1, type: 'frame', props: { w: 100, h: 100 } })
|
|
466
466
|
frame1 = editor.getShape<TLFrameShape>(ids.frame1)!
|
|
467
467
|
})
|
|
468
468
|
|
|
@@ -517,8 +517,8 @@ describe('when shape is a frame', () => {
|
|
|
517
517
|
describe('When a shape is behind a frame', () => {
|
|
518
518
|
beforeEach(() => {
|
|
519
519
|
editor.selectAll().deleteShapes(editor.getSelectedShapeIds())
|
|
520
|
-
editor.createShape
|
|
521
|
-
editor.createShape
|
|
520
|
+
editor.createShape({ id: ids.box1, type: 'geo', x: 25, y: 25 })
|
|
521
|
+
editor.createShape({ id: ids.frame1, type: 'frame', props: { w: 100, h: 100 } })
|
|
522
522
|
})
|
|
523
523
|
|
|
524
524
|
it('does not select the shape when clicked inside', () => {
|
|
@@ -548,8 +548,8 @@ describe('when shape is inside of a frame', () => {
|
|
|
548
548
|
let frame1: TLFrameShape
|
|
549
549
|
let box1: TLGeoShape
|
|
550
550
|
beforeEach(() => {
|
|
551
|
-
editor.createShape
|
|
552
|
-
editor.createShape
|
|
551
|
+
editor.createShape({ id: ids.frame1, type: 'frame', props: { w: 100, h: 100 } })
|
|
552
|
+
editor.createShape({
|
|
553
553
|
id: ids.box1,
|
|
554
554
|
parentId: ids.frame1,
|
|
555
555
|
type: 'geo',
|
|
@@ -703,15 +703,15 @@ describe('when a frame has multiple children', () => {
|
|
|
703
703
|
let box2: TLGeoShape
|
|
704
704
|
beforeEach(() => {
|
|
705
705
|
editor
|
|
706
|
-
.createShape
|
|
707
|
-
.createShape
|
|
706
|
+
.createShape({ id: ids.frame1, type: 'frame', props: { w: 100, h: 100 } })
|
|
707
|
+
.createShape({
|
|
708
708
|
id: ids.box1,
|
|
709
709
|
parentId: ids.frame1,
|
|
710
710
|
type: 'geo',
|
|
711
711
|
x: 25,
|
|
712
712
|
y: 25,
|
|
713
713
|
})
|
|
714
|
-
.createShape
|
|
714
|
+
.createShape({
|
|
715
715
|
id: ids.box2,
|
|
716
716
|
parentId: ids.frame1,
|
|
717
717
|
type: 'geo',
|
|
@@ -849,7 +849,7 @@ describe('When shapes are overlapping', () => {
|
|
|
849
849
|
let box4: TLGeoShape
|
|
850
850
|
let box5: TLGeoShape
|
|
851
851
|
beforeEach(() => {
|
|
852
|
-
editor.createShapes
|
|
852
|
+
editor.createShapes([
|
|
853
853
|
{
|
|
854
854
|
id: ids.box1,
|
|
855
855
|
type: 'geo',
|
|
@@ -2194,7 +2194,7 @@ describe('long press', () => {
|
|
|
2194
2194
|
it('works correctly with screenbounds offset', () => {
|
|
2195
2195
|
editor.updateViewportScreenBounds(new Box(100, 100, 800, 600))
|
|
2196
2196
|
editor.pointerDown(201, 202)
|
|
2197
|
-
expect(editor.inputs.
|
|
2197
|
+
expect(editor.inputs.getCurrentScreenPoint()).toMatchObject({ x: 101, y: 102 })
|
|
2198
2198
|
})
|
|
2199
2199
|
|
|
2200
2200
|
it('works correctly with screenbounds offset', () => {
|
|
@@ -2202,7 +2202,7 @@ describe('long press', () => {
|
|
|
2202
2202
|
editor.pointerDown(201, 202)
|
|
2203
2203
|
vi.advanceTimersByTime(1000)
|
|
2204
2204
|
// without the fix added in this PR, it would have been 1, 2
|
|
2205
|
-
expect(editor.inputs.
|
|
2205
|
+
expect(editor.inputs.getCurrentScreenPoint()).toMatchObject({ x: 101, y: 102 })
|
|
2206
2206
|
})
|
|
2207
2207
|
})
|
|
2208
2208
|
|
|
@@ -470,7 +470,7 @@ describe('When interacting with a shape...', () => {
|
|
|
470
470
|
})
|
|
471
471
|
|
|
472
472
|
it('Fires handle dragging cancel events', () => {
|
|
473
|
-
const util = editor.getShapeUtil
|
|
473
|
+
const util = editor.getShapeUtil('line')
|
|
474
474
|
|
|
475
475
|
const calls: string[] = []
|
|
476
476
|
|
|
@@ -16,16 +16,16 @@ beforeEach(() => {
|
|
|
16
16
|
|
|
17
17
|
it('Sets cursor and state correctly', () => {
|
|
18
18
|
expect(editor.getInstanceState().cursor.type).toBe('default')
|
|
19
|
-
expect(editor.inputs.
|
|
19
|
+
expect(editor.inputs.getIsPanning()).toBe(false)
|
|
20
20
|
editor.keyDown(' ')
|
|
21
|
-
expect(editor.inputs.
|
|
21
|
+
expect(editor.inputs.getIsPanning()).toBe(true)
|
|
22
22
|
expect(editor.getInstanceState().cursor.type).toBe('grab')
|
|
23
23
|
editor.pointerDown(0, 0)
|
|
24
24
|
expect(editor.getInstanceState().cursor.type).toBe('grabbing')
|
|
25
25
|
editor.pointerUp(0, 0)
|
|
26
26
|
expect(editor.getInstanceState().cursor.type).toBe('grab')
|
|
27
27
|
editor.keyUp(' ')
|
|
28
|
-
expect(editor.inputs.
|
|
28
|
+
expect(editor.inputs.getIsPanning()).toBe(false)
|
|
29
29
|
expect(editor.getInstanceState().cursor.type).toBe('default')
|
|
30
30
|
})
|
|
31
31
|
|
|
@@ -37,16 +37,34 @@ it('When holding spacebar and clicking and dragging, it pans the camera', () =>
|
|
|
37
37
|
editor.keyUp(' ')
|
|
38
38
|
})
|
|
39
39
|
|
|
40
|
-
it('When
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
editor.
|
|
40
|
+
it('When spacebar is held during pointer interaction, it activates panning', () => {
|
|
41
|
+
// This test verifies that holding spacebar prevents pointer events from
|
|
42
|
+
// being sent to the state chart, and instead activates panning mode.
|
|
43
|
+
editor.select(ids.box1)
|
|
44
|
+
|
|
45
|
+
// Start with pointer down on the shape
|
|
46
|
+
editor.pointerDown(150, 150, ids.box1)
|
|
44
47
|
|
|
48
|
+
// Hold spacebar before moving - should activate panning
|
|
45
49
|
editor.keyDown(' ')
|
|
46
|
-
editor.
|
|
47
|
-
editor.
|
|
48
|
-
|
|
50
|
+
expect(editor.inputs.getIsPanning()).toBe(true)
|
|
51
|
+
expect(editor.getInstanceState().cursor.type).toBe('grabbing') // 'grabbing' because pointer is down
|
|
52
|
+
|
|
53
|
+
// Moving the pointer should pan the camera, not translate the shape
|
|
54
|
+
const initialCamera = editor.getCamera()
|
|
55
|
+
editor.pointerMove(100, 100)
|
|
56
|
+
|
|
57
|
+
// Camera should have moved (panning)
|
|
58
|
+
const newCamera = editor.getCamera()
|
|
59
|
+
expect(newCamera.x).not.toBe(initialCamera.x)
|
|
60
|
+
expect(newCamera.y).not.toBe(initialCamera.y)
|
|
61
|
+
|
|
62
|
+
// Shape should not have moved (not translating)
|
|
63
|
+
editor.expectShapeToMatch({ id: ids.box1, x: 100, y: 100 })
|
|
64
|
+
|
|
65
|
+
editor.pointerUp()
|
|
49
66
|
editor.keyUp(' ')
|
|
67
|
+
expect(editor.inputs.getIsPanning()).toBe(false)
|
|
50
68
|
})
|
|
51
69
|
|
|
52
70
|
it('When holding spacebar, pressing the arrow keys moves over by one viewport', () => {
|
package/src/test/styles3.test.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createShapeId, toRichText } from '@tldraw/editor'
|
|
2
2
|
import { TestEditor } from './TestEditor'
|
|
3
3
|
|
|
4
4
|
let editor: TestEditor
|
|
@@ -14,7 +14,7 @@ afterEach(() => {
|
|
|
14
14
|
it("When changing the style of a geo shape, if the text label is empty, don't measure it", () => {
|
|
15
15
|
const id = createShapeId()
|
|
16
16
|
|
|
17
|
-
editor.createShapes
|
|
17
|
+
editor.createShapes([
|
|
18
18
|
{
|
|
19
19
|
id,
|
|
20
20
|
type: 'geo',
|
|
@@ -29,7 +29,7 @@ it("When changing the style of a geo shape, if the text label is empty, don't me
|
|
|
29
29
|
|
|
30
30
|
const boundsBefore = editor.getShapeGeometry(id).bounds
|
|
31
31
|
|
|
32
|
-
editor.updateShapes
|
|
32
|
+
editor.updateShapes([
|
|
33
33
|
{
|
|
34
34
|
id,
|
|
35
35
|
type: 'geo',
|
|
@@ -43,7 +43,7 @@ it("When changing the style of a geo shape, if the text label is empty, don't me
|
|
|
43
43
|
it('When changing the style of a geo shape, if the text label has text, measure it and possibly update the size', () => {
|
|
44
44
|
const id = createShapeId()
|
|
45
45
|
|
|
46
|
-
editor.createShapes
|
|
46
|
+
editor.createShapes([
|
|
47
47
|
{
|
|
48
48
|
id,
|
|
49
49
|
type: 'geo',
|
|
@@ -58,7 +58,7 @@ it('When changing the style of a geo shape, if the text label has text, measure
|
|
|
58
58
|
|
|
59
59
|
const boundsBefore = editor.getShapeGeometry(id).bounds!
|
|
60
60
|
|
|
61
|
-
editor.updateShapes
|
|
61
|
+
editor.updateShapes([
|
|
62
62
|
{
|
|
63
63
|
id,
|
|
64
64
|
type: 'geo',
|