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
package/src/test/test-jsx.tsx
CHANGED
|
@@ -5,7 +5,8 @@ import {
|
|
|
5
5
|
TLBinding,
|
|
6
6
|
TLBindingCreate,
|
|
7
7
|
TLBindingId,
|
|
8
|
-
|
|
8
|
+
TLDefaultBinding,
|
|
9
|
+
TLDefaultShape,
|
|
9
10
|
TLShapeId,
|
|
10
11
|
TLShapePartial,
|
|
11
12
|
ZERO_INDEX_KEY,
|
|
@@ -19,13 +20,9 @@ import {
|
|
|
19
20
|
} from '@tldraw/editor'
|
|
20
21
|
import React, { Fragment } from 'react'
|
|
21
22
|
|
|
22
|
-
// Re-export test helpers from their new location
|
|
23
|
-
export { base64ToPoints, createDrawSegments, pointsToBase64 } from '../lib/utils/test-helpers'
|
|
24
|
-
|
|
25
23
|
const shapeTypeSymbol = Symbol('shapeJsx')
|
|
26
24
|
const assetTypeSymbol = Symbol('assetJsx')
|
|
27
25
|
const bindingTypeSymbol = Symbol('bindingJsx')
|
|
28
|
-
|
|
29
26
|
interface CommonShapeProps {
|
|
30
27
|
x?: number
|
|
31
28
|
y?: number
|
|
@@ -37,6 +34,7 @@ interface CommonShapeProps {
|
|
|
37
34
|
opacity?: number
|
|
38
35
|
}
|
|
39
36
|
|
|
37
|
+
type ShapeByType<Type extends TLDefaultShape['type']> = Extract<TLDefaultShape, { type: Type }>
|
|
40
38
|
type FormatShapeProps<Props extends object> = {
|
|
41
39
|
[K in keyof Props]?: Props[K] extends TLAssetId
|
|
42
40
|
? TLAssetId | React.JSX.Element
|
|
@@ -44,39 +42,24 @@ type FormatShapeProps<Props extends object> = {
|
|
|
44
42
|
? TLAssetId | React.JSX.Element | null
|
|
45
43
|
: Props[K]
|
|
46
44
|
}
|
|
47
|
-
type PropsForShape<Type extends
|
|
48
|
-
FormatShapeProps<
|
|
45
|
+
type PropsForShape<Type extends string> = Type extends TLDefaultShape['type']
|
|
46
|
+
? CommonShapeProps & FormatShapeProps<ShapeByType<Type>['props']>
|
|
47
|
+
: CommonShapeProps & Record<string, unknown>
|
|
49
48
|
|
|
50
49
|
type AssetByType<Type extends TLAsset['type']> = Extract<TLAsset, { type: Type }>
|
|
51
50
|
type PropsForAsset<Type extends string> = Type extends TLAsset['type']
|
|
52
51
|
? Partial<AssetByType<Type>['props']>
|
|
53
52
|
: Record<string, unknown>
|
|
54
53
|
|
|
55
|
-
interface
|
|
54
|
+
interface CommonBindingProps {
|
|
56
55
|
from?: string | TLShapeId
|
|
57
56
|
to: string | TLShapeId
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
type ReactPropsForBinding<Type extends TLBinding['type']> = CommonBindingReactProps &
|
|
66
|
-
Partial<TLBinding<Type>['props']>
|
|
67
|
-
|
|
68
|
-
type BindingToCreate = TLBinding extends infer E
|
|
69
|
-
? E extends TLBinding
|
|
70
|
-
? {
|
|
71
|
-
type: E['type']
|
|
72
|
-
props: Partial<TLBinding<E['type']>['props']>
|
|
73
|
-
id: TLBindingId | undefined
|
|
74
|
-
parentId: TLShapeId | undefined
|
|
75
|
-
ref: string | undefined
|
|
76
|
-
connections: BindingReactConnections
|
|
77
|
-
}
|
|
78
|
-
: never
|
|
79
|
-
: never
|
|
59
|
+
type BindingByType<Type extends TLBinding['type']> = Extract<TLBinding, { type: Type }>
|
|
60
|
+
type PropsForBinding<Type extends string> = Type extends TLBinding['type']
|
|
61
|
+
? CommonBindingProps & Partial<BindingByType<Type>['props']>
|
|
62
|
+
: CommonBindingProps & Record<string, unknown>
|
|
80
63
|
|
|
81
64
|
const createElement = (
|
|
82
65
|
type: typeof shapeTypeSymbol | typeof assetTypeSymbol | typeof bindingTypeSymbol,
|
|
@@ -107,9 +90,10 @@ const tlBinding = new Proxy(
|
|
|
107
90
|
return createElement(bindingTypeSymbol, key as string)
|
|
108
91
|
},
|
|
109
92
|
}
|
|
110
|
-
) as {
|
|
111
|
-
|
|
112
|
-
|
|
93
|
+
) as { [K in TLDefaultBinding['type']]: (props: PropsForBinding<K>) => null } & Record<
|
|
94
|
+
string,
|
|
95
|
+
(props: PropsForBinding<string>) => null
|
|
96
|
+
>
|
|
113
97
|
|
|
114
98
|
/**
|
|
115
99
|
* TL - jsx helpers for creating tldraw shapes in test cases
|
|
@@ -128,8 +112,8 @@ export const TL = new Proxy(
|
|
|
128
112
|
},
|
|
129
113
|
}
|
|
130
114
|
) as { asset: typeof tlAsset; binding: typeof tlBinding } & {
|
|
131
|
-
[K in
|
|
132
|
-
}
|
|
115
|
+
[K in TLDefaultShape['type']]: (props: PropsForShape<K>) => null
|
|
116
|
+
} & Record<string, (props: PropsForShape<string>) => null>
|
|
133
117
|
|
|
134
118
|
export function shapesFromJsx(shapes: React.JSX.Element | Array<React.JSX.Element>, idPrefix = '') {
|
|
135
119
|
const ids = { bindings: {} } as Record<string, TLShapeId> & {
|
|
@@ -138,7 +122,12 @@ export function shapesFromJsx(shapes: React.JSX.Element | Array<React.JSX.Elemen
|
|
|
138
122
|
const currentPageShapes: Array<TLShapePartial> = []
|
|
139
123
|
const assets: Array<TLAsset> = []
|
|
140
124
|
|
|
141
|
-
const bindingsToCreate: Array<
|
|
125
|
+
const bindingsToCreate: Array<{
|
|
126
|
+
type: string
|
|
127
|
+
props: Record<string, unknown>
|
|
128
|
+
parentId: TLShapeId | undefined
|
|
129
|
+
ref: string | undefined
|
|
130
|
+
}> = []
|
|
142
131
|
|
|
143
132
|
function addChildren(
|
|
144
133
|
children: React.JSX.Element | Array<React.JSX.Element>,
|
|
@@ -163,21 +152,10 @@ export function shapesFromJsx(shapes: React.JSX.Element | Array<React.JSX.Elemen
|
|
|
163
152
|
}
|
|
164
153
|
|
|
165
154
|
if (el.type[bindingTypeSymbol]) {
|
|
166
|
-
const bindingType = (el.type as any)[bindingTypeSymbol] as
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
bindingRef === undefined || typeof bindingRef === 'string',
|
|
171
|
-
'ref must be string or undefined'
|
|
172
|
-
)
|
|
173
|
-
bindingsToCreate.push({
|
|
174
|
-
type: bindingType,
|
|
175
|
-
props,
|
|
176
|
-
id,
|
|
177
|
-
parentId,
|
|
178
|
-
ref: bindingRef,
|
|
179
|
-
connections: { from, to },
|
|
180
|
-
})
|
|
155
|
+
const bindingType = (el.type as any)[bindingTypeSymbol] as string
|
|
156
|
+
const ref = ((el as any).ref || el.props.ref) as string | undefined
|
|
157
|
+
assert(ref === undefined || typeof ref === 'string', 'ref must be string or undefined')
|
|
158
|
+
bindingsToCreate.push({ type: bindingType, props: el.props, parentId, ref })
|
|
181
159
|
} else {
|
|
182
160
|
const shapeType = (el.type as any)[shapeTypeSymbol] as string
|
|
183
161
|
if (!shapeType) {
|
|
@@ -261,48 +239,55 @@ export function shapesFromJsx(shapes: React.JSX.Element | Array<React.JSX.Elemen
|
|
|
261
239
|
addChildren(shapes)
|
|
262
240
|
|
|
263
241
|
const bindings: TLBindingCreate[] = []
|
|
264
|
-
for (const
|
|
242
|
+
for (const binding of bindingsToCreate) {
|
|
265
243
|
let fromId: TLShapeId, toId: TLShapeId
|
|
266
|
-
if (
|
|
267
|
-
assert(typeof
|
|
268
|
-
if (isShapeId(
|
|
269
|
-
fromId =
|
|
244
|
+
if (binding.props.from) {
|
|
245
|
+
assert(typeof binding.props.from === 'string', 'from must be a ref string or a shape id')
|
|
246
|
+
if (isShapeId(binding.props.from)) {
|
|
247
|
+
fromId = binding.props.from
|
|
270
248
|
} else {
|
|
271
|
-
assert(ids[
|
|
272
|
-
fromId = ids[
|
|
249
|
+
assert(ids[binding.props.from], `Ref not found: ${binding.props.from}`)
|
|
250
|
+
fromId = ids[binding.props.from]
|
|
273
251
|
}
|
|
274
|
-
} else if (parentId) {
|
|
275
|
-
fromId = parentId
|
|
252
|
+
} else if (binding.parentId) {
|
|
253
|
+
fromId = binding.parentId
|
|
276
254
|
} else {
|
|
277
255
|
throw new Error('from must be specified, or binding must be a child of a shape')
|
|
278
256
|
}
|
|
279
257
|
|
|
280
|
-
assert(
|
|
281
|
-
assert(typeof
|
|
282
|
-
if (isShapeId(
|
|
283
|
-
toId =
|
|
258
|
+
assert(binding.props.to, 'to must be specified')
|
|
259
|
+
assert(typeof binding.props.to === 'string', 'to must be a ref string or a shape id')
|
|
260
|
+
if (isShapeId(binding.props.to)) {
|
|
261
|
+
toId = binding.props.to
|
|
284
262
|
} else {
|
|
285
|
-
assert(ids[
|
|
286
|
-
toId = ids[
|
|
263
|
+
assert(ids[binding.props.to], `Ref not found: ${binding.props.to}`)
|
|
264
|
+
toId = ids[binding.props.to]
|
|
287
265
|
}
|
|
288
266
|
|
|
289
|
-
let bindingId = id
|
|
290
|
-
if (ref) {
|
|
291
|
-
assert(typeof ref === 'string', 'binding ref must be string')
|
|
292
|
-
assert(!ids.bindings[ref], `Duplicate ref: ${ref}`)
|
|
293
|
-
assert(!bindingId, `Cannot use both ref and id on binding: ${ref}`)
|
|
294
|
-
bindingId = createBindingId(`${idPrefix}${ref}`)
|
|
295
|
-
ids.bindings[ref] = bindingId
|
|
267
|
+
let bindingId: TLBindingId = binding.props.id as TLBindingId
|
|
268
|
+
if (binding.ref) {
|
|
269
|
+
assert(typeof binding.ref === 'string', 'binding ref must be string')
|
|
270
|
+
assert(!ids.bindings[binding.ref], `Duplicate ref: ${binding.ref}`)
|
|
271
|
+
assert(!bindingId, `Cannot use both ref and id on binding: ${binding.ref}`)
|
|
272
|
+
bindingId = createBindingId(`${idPrefix}${binding.ref}`)
|
|
273
|
+
ids.bindings[binding.ref] = bindingId
|
|
296
274
|
}
|
|
297
275
|
if (!bindingId) {
|
|
298
276
|
bindingId = createBindingId()
|
|
299
277
|
}
|
|
300
278
|
|
|
279
|
+
const props = { ...binding.props }
|
|
280
|
+
delete props.ref
|
|
281
|
+
delete props.id
|
|
282
|
+
delete props.from
|
|
283
|
+
delete props.to
|
|
284
|
+
|
|
301
285
|
bindings.push({
|
|
302
|
-
...binding,
|
|
303
286
|
id: bindingId,
|
|
287
|
+
type: binding.type,
|
|
304
288
|
fromId,
|
|
305
289
|
toId,
|
|
290
|
+
props,
|
|
306
291
|
})
|
|
307
292
|
}
|
|
308
293
|
|
package/src/test/text.test.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createShapeId, toRichText } from '@tldraw/editor'
|
|
1
|
+
import { TLTextShape, createShapeId, toRichText } from '@tldraw/editor'
|
|
2
2
|
import { TestEditor } from './TestEditor'
|
|
3
3
|
|
|
4
4
|
let editor: TestEditor
|
|
@@ -13,7 +13,7 @@ afterEach(() => {
|
|
|
13
13
|
describe('When editing text', () => {
|
|
14
14
|
it('preserves the top center when center aligned', () => {
|
|
15
15
|
const id = createShapeId()
|
|
16
|
-
editor.createShapes([
|
|
16
|
+
editor.createShapes<TLTextShape>([
|
|
17
17
|
{
|
|
18
18
|
id,
|
|
19
19
|
type: 'text',
|
|
@@ -27,7 +27,7 @@ describe('When editing text', () => {
|
|
|
27
27
|
},
|
|
28
28
|
])
|
|
29
29
|
const boundsA = editor.getShapePageBounds(id)
|
|
30
|
-
editor.updateShapes([
|
|
30
|
+
editor.updateShapes<TLTextShape>([
|
|
31
31
|
{
|
|
32
32
|
id,
|
|
33
33
|
type: 'text',
|
|
@@ -47,7 +47,7 @@ describe('When editing text', () => {
|
|
|
47
47
|
|
|
48
48
|
it('preserved the right center when center aligned and rotated 90deg', () => {
|
|
49
49
|
const id = createShapeId()
|
|
50
|
-
editor.createShapes([
|
|
50
|
+
editor.createShapes<TLTextShape>([
|
|
51
51
|
{
|
|
52
52
|
id,
|
|
53
53
|
type: 'text',
|
|
@@ -63,7 +63,9 @@ describe('When editing text', () => {
|
|
|
63
63
|
])
|
|
64
64
|
|
|
65
65
|
const boundsA = editor.getShapePageBounds(id)!
|
|
66
|
-
editor.updateShapes([
|
|
66
|
+
editor.updateShapes<TLTextShape>([
|
|
67
|
+
{ id, type: 'text', props: { richText: toRichText('Hello, world!') } },
|
|
68
|
+
])
|
|
67
69
|
const boundsB = editor.getShapePageBounds(id)!
|
|
68
70
|
expect(boundsA.x).toBeCloseTo(boundsB.x)
|
|
69
71
|
expect(boundsA.y).not.toBeCloseTo(boundsB.y)
|
|
@@ -73,7 +75,7 @@ describe('When editing text', () => {
|
|
|
73
75
|
|
|
74
76
|
it('preserves the top left corner when start aligned', () => {
|
|
75
77
|
const id = createShapeId()
|
|
76
|
-
editor.createShapes([
|
|
78
|
+
editor.createShapes<TLTextShape>([
|
|
77
79
|
{
|
|
78
80
|
id,
|
|
79
81
|
type: 'text',
|
|
@@ -87,7 +89,7 @@ describe('When editing text', () => {
|
|
|
87
89
|
},
|
|
88
90
|
])
|
|
89
91
|
const boundsA = editor.getShapePageBounds(id)
|
|
90
|
-
editor.updateShapes([
|
|
92
|
+
editor.updateShapes<TLTextShape>([
|
|
91
93
|
{
|
|
92
94
|
id,
|
|
93
95
|
type: 'text',
|
|
@@ -107,7 +109,7 @@ describe('When editing text', () => {
|
|
|
107
109
|
|
|
108
110
|
it('preserves the top right edge when end aligned', () => {
|
|
109
111
|
const id = createShapeId()
|
|
110
|
-
editor.createShapes([
|
|
112
|
+
editor.createShapes<TLTextShape>([
|
|
111
113
|
{
|
|
112
114
|
id,
|
|
113
115
|
type: 'text',
|
|
@@ -121,7 +123,7 @@ describe('When editing text', () => {
|
|
|
121
123
|
},
|
|
122
124
|
])
|
|
123
125
|
const boundsA = editor.getShapePageBounds(id)
|
|
124
|
-
editor.updateShapes([
|
|
126
|
+
editor.updateShapes<TLTextShape>([
|
|
125
127
|
{
|
|
126
128
|
id,
|
|
127
129
|
type: 'text',
|
|
@@ -143,7 +145,7 @@ describe('When editing text', () => {
|
|
|
143
145
|
describe('When changing text size', () => {
|
|
144
146
|
it('preserves the center when center aligned', () => {
|
|
145
147
|
const id = createShapeId()
|
|
146
|
-
editor.createShapes([
|
|
148
|
+
editor.createShapes<TLTextShape>([
|
|
147
149
|
{
|
|
148
150
|
id,
|
|
149
151
|
type: 'text',
|
|
@@ -158,7 +160,7 @@ describe('When changing text size', () => {
|
|
|
158
160
|
},
|
|
159
161
|
])
|
|
160
162
|
const boundsA = editor.getShapePageBounds(id)
|
|
161
|
-
editor.updateShapes([
|
|
163
|
+
editor.updateShapes<TLTextShape>([
|
|
162
164
|
{
|
|
163
165
|
id,
|
|
164
166
|
type: 'text',
|
|
@@ -178,7 +180,7 @@ describe('When changing text size', () => {
|
|
|
178
180
|
|
|
179
181
|
it('preserves the center left point when start aligned', () => {
|
|
180
182
|
const id = createShapeId()
|
|
181
|
-
editor.createShapes([
|
|
183
|
+
editor.createShapes<TLTextShape>([
|
|
182
184
|
{
|
|
183
185
|
id,
|
|
184
186
|
type: 'text',
|
|
@@ -193,7 +195,7 @@ describe('When changing text size', () => {
|
|
|
193
195
|
},
|
|
194
196
|
])
|
|
195
197
|
const boundsA = editor.getShapePageBounds(id)
|
|
196
|
-
editor.updateShapes([
|
|
198
|
+
editor.updateShapes<TLTextShape>([
|
|
197
199
|
{
|
|
198
200
|
id,
|
|
199
201
|
type: 'text',
|
|
@@ -213,7 +215,7 @@ describe('When changing text size', () => {
|
|
|
213
215
|
|
|
214
216
|
it('preserves the top right edge when end aligned', () => {
|
|
215
217
|
const id = createShapeId()
|
|
216
|
-
editor.createShapes([
|
|
218
|
+
editor.createShapes<TLTextShape>([
|
|
217
219
|
{
|
|
218
220
|
id,
|
|
219
221
|
type: 'text',
|
|
@@ -228,7 +230,7 @@ describe('When changing text size', () => {
|
|
|
228
230
|
},
|
|
229
231
|
])
|
|
230
232
|
const boundsA = editor.getShapePageBounds(id)
|
|
231
|
-
editor.updateShapes([
|
|
233
|
+
editor.updateShapes<TLTextShape>([
|
|
232
234
|
{
|
|
233
235
|
id,
|
|
234
236
|
type: 'text',
|
|
@@ -1749,7 +1749,9 @@ describe('translating a shape with a bound shape', () => {
|
|
|
1749
1749
|
|
|
1750
1750
|
const newArrow = editor
|
|
1751
1751
|
.getCurrentPageShapes()
|
|
1752
|
-
.find(
|
|
1752
|
+
.find(
|
|
1753
|
+
(s) => editor.isShapeOfType<TLArrowShape>(s, 'arrow') && s.id !== arrow1
|
|
1754
|
+
)! as TLArrowShape
|
|
1753
1755
|
expect(getArrowBindings(editor, newArrow)).toMatchObject({
|
|
1754
1756
|
start: { type: 'arrow' },
|
|
1755
1757
|
end: undefined,
|
|
@@ -2059,7 +2061,7 @@ describe('Note shape grid helper positions / pits', () => {
|
|
|
2059
2061
|
editor
|
|
2060
2062
|
.createShape({ type: 'note' })
|
|
2061
2063
|
.createShape({ type: 'note', x: 500, y: 500 })
|
|
2062
|
-
.updateShape({ ...editor.getLastCreatedShape
|
|
2064
|
+
.updateShape({ ...editor.getLastCreatedShape(), props: { growY: 100 } })
|
|
2063
2065
|
.pointerMove(600, 600)
|
|
2064
2066
|
// start translating
|
|
2065
2067
|
.pointerDown()
|
|
@@ -2078,7 +2080,7 @@ describe('Note shape grid helper positions / pits', () => {
|
|
|
2078
2080
|
it('Snaps correctly to the bottom when the not-translating shape has growY', () => {
|
|
2079
2081
|
editor
|
|
2080
2082
|
.createShape({ type: 'note' })
|
|
2081
|
-
.updateShape({ ...editor.getLastCreatedShape
|
|
2083
|
+
.updateShape({ ...editor.getLastCreatedShape(), props: { growY: 100 } })
|
|
2082
2084
|
.createShape({ type: 'note', x: 500, y: 500 })
|
|
2083
2085
|
.pointerMove(600, 600)
|
|
2084
2086
|
// start translating
|
|
@@ -2181,7 +2183,7 @@ describe('Note shape grid helper positions / pits', () => {
|
|
|
2181
2183
|
|
|
2182
2184
|
describe('cancelling a translate operation', () => {
|
|
2183
2185
|
it('undoes any changes since the start of the translate operation', () => {
|
|
2184
|
-
editor.createShape({
|
|
2186
|
+
editor.createShape<TLGeoShape>({
|
|
2185
2187
|
type: 'geo',
|
|
2186
2188
|
x: 0,
|
|
2187
2189
|
y: 0,
|
|
@@ -2218,7 +2220,7 @@ describe('cancelling a translate operation', () => {
|
|
|
2218
2220
|
const shapeId = createShapeId()
|
|
2219
2221
|
|
|
2220
2222
|
editor
|
|
2221
|
-
.createShape({
|
|
2223
|
+
.createShape<TLGeoShape>({
|
|
2222
2224
|
id: shapeId,
|
|
2223
2225
|
type: 'geo',
|
|
2224
2226
|
x: 0,
|
|
@@ -2266,7 +2268,7 @@ describe('cancelling a translate operation', () => {
|
|
|
2266
2268
|
const shapeId = createShapeId()
|
|
2267
2269
|
|
|
2268
2270
|
editor
|
|
2269
|
-
.createShape({
|
|
2271
|
+
.createShape<TLGeoShape>({
|
|
2270
2272
|
id: shapeId,
|
|
2271
2273
|
type: 'geo',
|
|
2272
2274
|
x: 0,
|
package/tldraw.css
CHANGED
|
@@ -611,6 +611,7 @@ input,
|
|
|
611
611
|
pointer-events: all;
|
|
612
612
|
white-space: pre-wrap;
|
|
613
613
|
overflow-wrap: break-word;
|
|
614
|
+
text-shadow: var(--tl-text-outline);
|
|
614
615
|
}
|
|
615
616
|
|
|
616
617
|
.tl-text-wrapper[data-font='draw'] {
|
|
@@ -712,7 +713,7 @@ input,
|
|
|
712
713
|
resize: none;
|
|
713
714
|
border: none;
|
|
714
715
|
user-select: none;
|
|
715
|
-
contain:
|
|
716
|
+
contain: style paint;
|
|
716
717
|
/* N.B. This property, while discouraged ("intended for Document Type Definition (DTD) designers") is necessary for ensuring correct mixed RTL/LTR behavior when exporting SVGs. */
|
|
717
718
|
unicode-bidi: plaintext;
|
|
718
719
|
-webkit-user-select: none;
|
|
@@ -773,6 +774,7 @@ input,
|
|
|
773
774
|
justify-content: center;
|
|
774
775
|
align-items: center;
|
|
775
776
|
color: var(--tl-color-text);
|
|
777
|
+
text-shadow: var(--tl-text-outline);
|
|
776
778
|
line-height: inherit;
|
|
777
779
|
position: absolute;
|
|
778
780
|
inset: 0px;
|
|
@@ -972,14 +974,6 @@ input,
|
|
|
972
974
|
display: block;
|
|
973
975
|
}
|
|
974
976
|
|
|
975
|
-
.tl-text__outline {
|
|
976
|
-
text-shadow: var(--tl-text-outline);
|
|
977
|
-
}
|
|
978
|
-
|
|
979
|
-
.tl-text__no-outline {
|
|
980
|
-
text-shadow: none;
|
|
981
|
-
}
|
|
982
|
-
|
|
983
977
|
/* --------------------- Loading -------------------- */
|
|
984
978
|
|
|
985
979
|
.tl-loading {
|
|
@@ -1144,12 +1138,14 @@ input,
|
|
|
1144
1138
|
fill: none;
|
|
1145
1139
|
}
|
|
1146
1140
|
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1141
|
+
@media (pointer: coarse) {
|
|
1142
|
+
.tl-handle__bg:active {
|
|
1143
|
+
fill: var(--tl-color-selection-fill);
|
|
1144
|
+
}
|
|
1150
1145
|
|
|
1151
|
-
.tl-
|
|
1152
|
-
|
|
1146
|
+
.tl-handle__create {
|
|
1147
|
+
opacity: 1;
|
|
1148
|
+
}
|
|
1153
1149
|
}
|
|
1154
1150
|
|
|
1155
1151
|
.tl-rotate-corner:not(:hover),
|
|
@@ -1225,6 +1221,7 @@ input,
|
|
|
1225
1221
|
align-items: center;
|
|
1226
1222
|
text-align: center;
|
|
1227
1223
|
color: var(--tl-color-text);
|
|
1224
|
+
text-shadow: var(--tl-text-outline);
|
|
1228
1225
|
}
|
|
1229
1226
|
|
|
1230
1227
|
.tl-shape[data-shape-type='arrow'] .tl-text-label__inner {
|
|
@@ -1453,6 +1450,7 @@ input,
|
|
|
1453
1450
|
}
|
|
1454
1451
|
|
|
1455
1452
|
.tl-note__container > .tl-text-label {
|
|
1453
|
+
text-shadow: none;
|
|
1456
1454
|
color: currentColor;
|
|
1457
1455
|
}
|
|
1458
1456
|
|
|
@@ -2317,10 +2315,12 @@ it from receiving any pointer events or affecting the cursor. */
|
|
|
2317
2315
|
/* If mobile use 16px as font size */
|
|
2318
2316
|
/* On iOS, font size under 16px in an input will make the page zoom into the input 🤦♂️ */
|
|
2319
2317
|
/* https://css-tricks.com/16px-or-larger-text-prevents-ios-form-zoom/ */
|
|
2320
|
-
@
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2318
|
+
@media (max-width: 600px) {
|
|
2319
|
+
@supports (-webkit-touch-callout: none) {
|
|
2320
|
+
/* CSS specific to iOS devices */
|
|
2321
|
+
.tlui-input {
|
|
2322
|
+
font-size: 16px;
|
|
2323
|
+
}
|
|
2324
2324
|
}
|
|
2325
2325
|
}
|
|
2326
2326
|
|
|
@@ -2412,31 +2412,25 @@ it from receiving any pointer events or affecting the cursor. */
|
|
|
2412
2412
|
|
|
2413
2413
|
/* Submenu triggers */
|
|
2414
2414
|
|
|
2415
|
-
.tlui-menu__submenu__trigger {
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
.tlui-menu__submenu__trigger[data-direction='left'] {
|
|
2420
|
-
--gradient-angle: 270deg;
|
|
2415
|
+
.tlui-menu__submenu__trigger[data-state='open']::after {
|
|
2416
|
+
opacity: 1;
|
|
2417
|
+
background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
2421
2418
|
}
|
|
2422
2419
|
|
|
2423
|
-
.tlui-menu__submenu__trigger[data-state='open']::after {
|
|
2420
|
+
.tlui-menu__submenu__trigger[data-direction='left'][data-state='open']::after {
|
|
2424
2421
|
opacity: 1;
|
|
2425
|
-
background: linear-gradient(
|
|
2426
|
-
var(--gradient-angle),
|
|
2427
|
-
rgba(144, 144, 144, 0) 0%,
|
|
2428
|
-
var(--tl-color-muted-2) 100%
|
|
2429
|
-
);
|
|
2422
|
+
background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
2430
2423
|
}
|
|
2431
2424
|
|
|
2432
2425
|
@media (hover: hover) {
|
|
2433
|
-
.tlui-menu__submenu__trigger
|
|
2426
|
+
.tlui-menu__submenu__trigger[data-state='open']:not(:hover)::after {
|
|
2434
2427
|
opacity: 1;
|
|
2435
|
-
background: linear-gradient(
|
|
2436
|
-
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
|
|
2428
|
+
background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
2429
|
+
}
|
|
2430
|
+
|
|
2431
|
+
.tlui-menu__submenu__trigger[data-direction='left'][data-state='open']:not(:hover)::after {
|
|
2432
|
+
opacity: 1;
|
|
2433
|
+
background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
2440
2434
|
}
|
|
2441
2435
|
}
|
|
2442
2436
|
|
|
@@ -2715,8 +2709,10 @@ it from receiving any pointer events or affecting the cursor. */
|
|
|
2715
2709
|
}
|
|
2716
2710
|
}
|
|
2717
2711
|
|
|
2718
|
-
|
|
2719
|
-
|
|
2712
|
+
@media (any-pointer: coarse) {
|
|
2713
|
+
.tlui-page_menu__item__submenu > .tlui-button {
|
|
2714
|
+
opacity: 1;
|
|
2715
|
+
}
|
|
2720
2716
|
}
|
|
2721
2717
|
|
|
2722
2718
|
.tlui-button__icon {
|
|
@@ -2755,15 +2751,16 @@ it from receiving any pointer events or affecting the cursor. */
|
|
|
2755
2751
|
|
|
2756
2752
|
.tlui-offline-indicator {
|
|
2757
2753
|
display: flex;
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2754
|
+
flex-direction: row;
|
|
2755
|
+
gap: var(--tl-space-3);
|
|
2756
|
+
color: var(--tl-color-text);
|
|
2757
|
+
background-color: var(--tl-color-low);
|
|
2758
|
+
border: 3px solid var(--tl-color-background);
|
|
2759
|
+
padding: 0px var(--tl-space-5);
|
|
2760
|
+
height: 42px;
|
|
2763
2761
|
align-items: center;
|
|
2764
2762
|
justify-content: center;
|
|
2765
2763
|
border-radius: 99px;
|
|
2766
|
-
cursor: default;
|
|
2767
2764
|
opacity: 0;
|
|
2768
2765
|
animation: tl-fade-in;
|
|
2769
2766
|
animation-duration: 0.12s;
|
|
@@ -3081,7 +3078,6 @@ tldraw? probably.
|
|
|
3081
3078
|
position: relative;
|
|
3082
3079
|
background: var(--tl-color-panel);
|
|
3083
3080
|
box-shadow: var(--tl-shadow-2);
|
|
3084
|
-
contain: layout style paint;
|
|
3085
3081
|
}
|
|
3086
3082
|
|
|
3087
3083
|
.tlui-main-toolbar--horizontal .tlui-main-toolbar__mobile-style-panel {
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/lib/shapes/shared/useEfficientZoomThreshold.ts"],
|
|
4
|
-
"sourcesContent": ["import { useEditor, useValue } from '@tldraw/editor'\n\n/** Returns true when zoomed out far enough that shapes should render in a simplified \"solid\" style. */\nexport function useEfficientZoomThreshold(threshold = 0.25) {\n\tconst editor = useEditor()\n\treturn useValue('efficient zoom threshold', () => editor.getEfficientZoomLevel() < threshold, [\n\t\teditor,\n\t\tthreshold,\n\t])\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAoC;AAG7B,SAAS,0BAA0B,YAAY,MAAM;AAC3D,QAAM,aAAS,yBAAU;AACzB,aAAO,wBAAS,4BAA4B,MAAM,OAAO,sBAAsB,IAAI,WAAW;AAAA,IAC7F;AAAA,IACA;AAAA,EACD,CAAC;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/lib/utils/test-helpers.ts"],
|
|
4
|
-
"sourcesContent": ["import type { TLDrawShapeSegment, VecModel } from '@tldraw/editor'\nimport { b64Vecs, compressLegacySegments } from '@tldraw/editor'\n\n/**\n * Helper function to convert draw shape points from VecModel[] to base64 string.\n * This is useful for tests that create draw shapes with the legacy array format.\n *\n * @example\n * ```ts\n * const segments = [{ type: 'free', points: pointsToBase64([{x: 0, y: 0, z: 0.5}]) }]\n * ```\n *\n * @public\n */\nexport function pointsToBase64(points: VecModel[]): string {\n\treturn b64Vecs.encodePoints(points)\n}\n\n/**\n * Helper function to convert base64 string back to VecModel[] points.\n * This is useful for tests that need to inspect draw shape points.\n *\n * @example\n * ```ts\n * const points = base64ToPoints(shape.props.segments[0].points)\n * expect(points[0].x).toBe(0)\n * ```\n *\n * @public\n */\nexport function base64ToPoints(base64: string): VecModel[] {\n\treturn b64Vecs.decodePoints(base64)\n}\n\n/**\n * Helper function to create draw shape segments from legacy array format.\n * This allows tests to use the old format while the shape uses the new base64 format.\n *\n * @example\n * ```ts\n * editor.createShapes([{\n * type: 'draw',\n * props: {\n * segments: createDrawSegments([[{x: 0, y: 0}, {x: 10, y: 10}]])\n * }\n * }])\n * ```\n * @public\n */\nexport function createDrawSegments(\n\tpointArrays: VecModel[][],\n\ttype: 'free' | 'straight' = 'free'\n): TLDrawShapeSegment[] {\n\treturn compressLegacySegments(\n\t\tpointArrays.map((points) => ({\n\t\t\ttype,\n\t\t\tpoints,\n\t\t}))\n\t)\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAgD;AAazC,SAAS,eAAe,QAA4B;AAC1D,SAAO,sBAAQ,aAAa,MAAM;AACnC;AAcO,SAAS,eAAe,QAA4B;AAC1D,SAAO,sBAAQ,aAAa,MAAM;AACnC;AAiBO,SAAS,mBACf,aACA,OAA4B,QACL;AACvB,aAAO;AAAA,IACN,YAAY,IAAI,CAAC,YAAY;AAAA,MAC5B;AAAA,MACA;AAAA,IACD,EAAE;AAAA,EACH;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { useEditor, useValue } from "@tldraw/editor";
|
|
2
|
-
function useEfficientZoomThreshold(threshold = 0.25) {
|
|
3
|
-
const editor = useEditor();
|
|
4
|
-
return useValue("efficient zoom threshold", () => editor.getEfficientZoomLevel() < threshold, [
|
|
5
|
-
editor,
|
|
6
|
-
threshold
|
|
7
|
-
]);
|
|
8
|
-
}
|
|
9
|
-
export {
|
|
10
|
-
useEfficientZoomThreshold
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=useEfficientZoomThreshold.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/lib/shapes/shared/useEfficientZoomThreshold.ts"],
|
|
4
|
-
"sourcesContent": ["import { useEditor, useValue } from '@tldraw/editor'\n\n/** Returns true when zoomed out far enough that shapes should render in a simplified \"solid\" style. */\nexport function useEfficientZoomThreshold(threshold = 0.25) {\n\tconst editor = useEditor()\n\treturn useValue('efficient zoom threshold', () => editor.getEfficientZoomLevel() < threshold, [\n\t\teditor,\n\t\tthreshold,\n\t])\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,WAAW,gBAAgB;AAG7B,SAAS,0BAA0B,YAAY,MAAM;AAC3D,QAAM,SAAS,UAAU;AACzB,SAAO,SAAS,4BAA4B,MAAM,OAAO,sBAAsB,IAAI,WAAW;AAAA,IAC7F;AAAA,IACA;AAAA,EACD,CAAC;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { b64Vecs, compressLegacySegments } from "@tldraw/editor";
|
|
2
|
-
function pointsToBase64(points) {
|
|
3
|
-
return b64Vecs.encodePoints(points);
|
|
4
|
-
}
|
|
5
|
-
function base64ToPoints(base64) {
|
|
6
|
-
return b64Vecs.decodePoints(base64);
|
|
7
|
-
}
|
|
8
|
-
function createDrawSegments(pointArrays, type = "free") {
|
|
9
|
-
return compressLegacySegments(
|
|
10
|
-
pointArrays.map((points) => ({
|
|
11
|
-
type,
|
|
12
|
-
points
|
|
13
|
-
}))
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
export {
|
|
17
|
-
base64ToPoints,
|
|
18
|
-
createDrawSegments,
|
|
19
|
-
pointsToBase64
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=test-helpers.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/lib/utils/test-helpers.ts"],
|
|
4
|
-
"sourcesContent": ["import type { TLDrawShapeSegment, VecModel } from '@tldraw/editor'\nimport { b64Vecs, compressLegacySegments } from '@tldraw/editor'\n\n/**\n * Helper function to convert draw shape points from VecModel[] to base64 string.\n * This is useful for tests that create draw shapes with the legacy array format.\n *\n * @example\n * ```ts\n * const segments = [{ type: 'free', points: pointsToBase64([{x: 0, y: 0, z: 0.5}]) }]\n * ```\n *\n * @public\n */\nexport function pointsToBase64(points: VecModel[]): string {\n\treturn b64Vecs.encodePoints(points)\n}\n\n/**\n * Helper function to convert base64 string back to VecModel[] points.\n * This is useful for tests that need to inspect draw shape points.\n *\n * @example\n * ```ts\n * const points = base64ToPoints(shape.props.segments[0].points)\n * expect(points[0].x).toBe(0)\n * ```\n *\n * @public\n */\nexport function base64ToPoints(base64: string): VecModel[] {\n\treturn b64Vecs.decodePoints(base64)\n}\n\n/**\n * Helper function to create draw shape segments from legacy array format.\n * This allows tests to use the old format while the shape uses the new base64 format.\n *\n * @example\n * ```ts\n * editor.createShapes([{\n * type: 'draw',\n * props: {\n * segments: createDrawSegments([[{x: 0, y: 0}, {x: 10, y: 10}]])\n * }\n * }])\n * ```\n * @public\n */\nexport function createDrawSegments(\n\tpointArrays: VecModel[][],\n\ttype: 'free' | 'straight' = 'free'\n): TLDrawShapeSegment[] {\n\treturn compressLegacySegments(\n\t\tpointArrays.map((points) => ({\n\t\t\ttype,\n\t\t\tpoints,\n\t\t}))\n\t)\n}\n"],
|
|
5
|
-
"mappings": "AACA,SAAS,SAAS,8BAA8B;AAazC,SAAS,eAAe,QAA4B;AAC1D,SAAO,QAAQ,aAAa,MAAM;AACnC;AAcO,SAAS,eAAe,QAA4B;AAC1D,SAAO,QAAQ,aAAa,MAAM;AACnC;AAiBO,SAAS,mBACf,aACA,OAA4B,QACL;AACvB,SAAO;AAAA,IACN,YAAY,IAAI,CAAC,YAAY;AAAA,MAC5B;AAAA,MACA;AAAA,IACD,EAAE;AAAA,EACH;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|