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
|
@@ -24,7 +24,7 @@ import { TldrawUiDropdownMenuItem } from '../TldrawUiDropdownMenu'
|
|
|
24
24
|
import { TLUiIconJsx } from '../TldrawUiIcon'
|
|
25
25
|
import { TldrawUiKbd } from '../TldrawUiKbd'
|
|
26
26
|
import { TldrawUiToolbarButton } from '../TldrawUiToolbar'
|
|
27
|
-
import {
|
|
27
|
+
import { tooltipManager } from '../TldrawUiTooltip'
|
|
28
28
|
import { useTldrawUiMenuContext } from './TldrawUiMenuContext'
|
|
29
29
|
|
|
30
30
|
/** @public */
|
|
@@ -349,7 +349,7 @@ function useDraggableEvents(
|
|
|
349
349
|
point: screenSpaceStart,
|
|
350
350
|
})
|
|
351
351
|
|
|
352
|
-
hideAllTooltips()
|
|
352
|
+
tooltipManager.hideAllTooltips()
|
|
353
353
|
editor.getContainer().focus()
|
|
354
354
|
})
|
|
355
355
|
}
|
|
@@ -6,7 +6,10 @@ import {
|
|
|
6
6
|
HALF_PI,
|
|
7
7
|
PageRecordType,
|
|
8
8
|
Result,
|
|
9
|
+
TLBookmarkShape,
|
|
9
10
|
TLEmbedShape,
|
|
11
|
+
TLFrameShape,
|
|
12
|
+
TLGroupShape,
|
|
10
13
|
TLImageShape,
|
|
11
14
|
TLShape,
|
|
12
15
|
TLShapeId,
|
|
@@ -324,7 +327,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
324
327
|
.getSelectedShapes()
|
|
325
328
|
.filter(
|
|
326
329
|
(shape): shape is TLTextShape =>
|
|
327
|
-
editor.isShapeOfType(shape, 'text') && shape.props.autoSize === false
|
|
330
|
+
editor.isShapeOfType<TLTextShape>(shape, 'text') && shape.props.autoSize === false
|
|
328
331
|
)
|
|
329
332
|
editor.updateShapes(
|
|
330
333
|
shapes.map((shape) => {
|
|
@@ -359,7 +362,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
359
362
|
return
|
|
360
363
|
}
|
|
361
364
|
const shape = editor.getShape(ids[0])
|
|
362
|
-
if (!shape || !editor.isShapeOfType(shape, 'embed')) {
|
|
365
|
+
if (!shape || !editor.isShapeOfType<TLEmbedShape>(shape, 'embed')) {
|
|
363
366
|
console.error(warnMsg)
|
|
364
367
|
return
|
|
365
368
|
}
|
|
@@ -375,7 +378,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
375
378
|
if (editor.root.getCurrent()?.id === 'zoom') return
|
|
376
379
|
|
|
377
380
|
trackEvent('zoom-tool', { source })
|
|
378
|
-
if (!(editor.inputs.
|
|
381
|
+
if (!(editor.inputs.shiftKey || editor.inputs.ctrlKey)) {
|
|
379
382
|
const currentTool = editor.root.getCurrent()
|
|
380
383
|
if (currentTool && currentTool.getCurrent()?.id === 'idle') {
|
|
381
384
|
editor.setCurrentTool('zoom', { onInteractionEnd: currentTool.id, maskAs: 'zoom' })
|
|
@@ -398,7 +401,8 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
398
401
|
const creationPromises: Promise<Result<any, any>>[] = []
|
|
399
402
|
|
|
400
403
|
for (const shape of shapes) {
|
|
401
|
-
if (!shape || !editor.isShapeOfType(shape, 'embed') || !shape.props.url)
|
|
404
|
+
if (!shape || !editor.isShapeOfType<TLEmbedShape>(shape, 'embed') || !shape.props.url)
|
|
405
|
+
continue
|
|
402
406
|
|
|
403
407
|
const center = editor.getShapePageBounds(shape)?.center
|
|
404
408
|
|
|
@@ -437,7 +441,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
437
441
|
const createList: TLShapePartial[] = []
|
|
438
442
|
const deleteList: TLShapeId[] = []
|
|
439
443
|
for (const shape of shapes) {
|
|
440
|
-
if (!editor.isShapeOfType(shape, 'bookmark')) continue
|
|
444
|
+
if (!editor.isShapeOfType<TLBookmarkShape>(shape, 'bookmark')) continue
|
|
441
445
|
|
|
442
446
|
const { url } = shape.props
|
|
443
447
|
|
|
@@ -548,7 +552,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
548
552
|
|
|
549
553
|
trackEvent('group-shapes', { source })
|
|
550
554
|
const onlySelectedShape = editor.getOnlySelectedShape()
|
|
551
|
-
if (onlySelectedShape && editor.isShapeOfType(onlySelectedShape, 'group')) {
|
|
555
|
+
if (onlySelectedShape && editor.isShapeOfType<TLGroupShape>(onlySelectedShape, 'group')) {
|
|
552
556
|
editor.markHistoryStoppingPoint('ungroup')
|
|
553
557
|
editor.ungroupShapes(editor.getSelectedShapeIds())
|
|
554
558
|
} else {
|
|
@@ -568,7 +572,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
568
572
|
const selectedShapes = editor.getSelectedShapes()
|
|
569
573
|
if (
|
|
570
574
|
selectedShapes.length > 0 &&
|
|
571
|
-
selectedShapes.every((shape) => editor.isShapeOfType(shape, 'frame'))
|
|
575
|
+
selectedShapes.every((shape) => editor.isShapeOfType<TLFrameShape>(shape, 'frame'))
|
|
572
576
|
) {
|
|
573
577
|
editor.markHistoryStoppingPoint('remove-frame')
|
|
574
578
|
removeFrame(
|
|
@@ -586,7 +590,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
586
590
|
|
|
587
591
|
trackEvent('fit-frame-to-content', { source })
|
|
588
592
|
const onlySelectedShape = editor.getOnlySelectedShape()
|
|
589
|
-
if (onlySelectedShape && editor.isShapeOfType(onlySelectedShape, 'frame')) {
|
|
593
|
+
if (onlySelectedShape && editor.isShapeOfType<TLFrameShape>(onlySelectedShape, 'frame')) {
|
|
590
594
|
editor.markHistoryStoppingPoint('fit-frame-to-content')
|
|
591
595
|
fitFrameToContent(editor, onlySelectedShape.id)
|
|
592
596
|
}
|
|
@@ -973,7 +977,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
973
977
|
helpers.paste(
|
|
974
978
|
clipboardItems,
|
|
975
979
|
source,
|
|
976
|
-
source === 'context-menu' ? editor.inputs.
|
|
980
|
+
source === 'context-menu' ? editor.inputs.currentPagePoint : undefined
|
|
977
981
|
)
|
|
978
982
|
})
|
|
979
983
|
.catch(() => {
|
|
@@ -1037,7 +1041,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1037
1041
|
if (!canApplySelectionAction()) return
|
|
1038
1042
|
if (mustGoBackToSelectToolFirst()) return
|
|
1039
1043
|
|
|
1040
|
-
const isFine = editor.inputs.
|
|
1044
|
+
const isFine = editor.inputs.altKey
|
|
1041
1045
|
trackEvent('rotate-cw', { source, fine: isFine })
|
|
1042
1046
|
editor.markHistoryStoppingPoint('rotate-cw')
|
|
1043
1047
|
editor.run(() => {
|
|
@@ -1060,7 +1064,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1060
1064
|
if (!canApplySelectionAction()) return
|
|
1061
1065
|
if (mustGoBackToSelectToolFirst()) return
|
|
1062
1066
|
|
|
1063
|
-
const isFine = editor.inputs.
|
|
1067
|
+
const isFine = editor.inputs.altKey
|
|
1064
1068
|
trackEvent('rotate-ccw', { source, fine: isFine })
|
|
1065
1069
|
editor.markHistoryStoppingPoint('rotate-ccw')
|
|
1066
1070
|
editor.run(() => {
|
|
@@ -1092,7 +1096,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1092
1096
|
readonlyOk: true,
|
|
1093
1097
|
onSelect(source) {
|
|
1094
1098
|
trackEvent('zoom-in', { source, towardsCursor: true })
|
|
1095
|
-
editor.zoomIn(editor.inputs.
|
|
1099
|
+
editor.zoomIn(editor.inputs.currentScreenPoint, {
|
|
1096
1100
|
animation: { duration: editor.options.animationMediumMs },
|
|
1097
1101
|
})
|
|
1098
1102
|
},
|
|
@@ -1116,7 +1120,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1116
1120
|
readonlyOk: true,
|
|
1117
1121
|
onSelect(source) {
|
|
1118
1122
|
trackEvent('zoom-out', { source, towardsCursor: true })
|
|
1119
|
-
editor.zoomOut(editor.inputs.
|
|
1123
|
+
editor.zoomOut(editor.inputs.currentScreenPoint, {
|
|
1120
1124
|
animation: { duration: editor.options.animationMediumMs },
|
|
1121
1125
|
})
|
|
1122
1126
|
},
|
|
@@ -1595,8 +1599,8 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1595
1599
|
const onlySelectedShape = editor.getOnlySelectedShape()
|
|
1596
1600
|
if (
|
|
1597
1601
|
onlySelectedShape &&
|
|
1598
|
-
(editor.isShapeOfType(onlySelectedShape, 'image') ||
|
|
1599
|
-
editor.isShapeOfType(onlySelectedShape, 'video'))
|
|
1602
|
+
(editor.isShapeOfType<TLImageShape>(onlySelectedShape, 'image') ||
|
|
1603
|
+
editor.isShapeOfType<TLVideoShape>(onlySelectedShape, 'video'))
|
|
1600
1604
|
) {
|
|
1601
1605
|
const firstToolbarButton = editor
|
|
1602
1606
|
.getContainer()
|
|
@@ -42,6 +42,7 @@ import {
|
|
|
42
42
|
} from '../components/Toolbar/DefaultRichTextToolbar'
|
|
43
43
|
import { DefaultToolbar } from '../components/Toolbar/DefaultToolbar'
|
|
44
44
|
import { DefaultVideoToolbar } from '../components/Toolbar/DefaultVideoToolbar'
|
|
45
|
+
import { DefaultTopPanel } from '../components/TopPanel/DefaultTopPanel'
|
|
45
46
|
import { DefaultZoomMenu, TLUiZoomMenuProps } from '../components/ZoomMenu/DefaultZoomMenu'
|
|
46
47
|
import { useShowCollaborationUi } from '../hooks/useCollaborationStatus'
|
|
47
48
|
|
|
@@ -116,7 +117,7 @@ export function TldrawUiComponentsProvider({
|
|
|
116
117
|
MenuPanel: DefaultMenuPanel,
|
|
117
118
|
SharePanel: showCollaborationUi ? DefaultSharePanel : null,
|
|
118
119
|
CursorChatBubble: showCollaborationUi ? CursorChatBubble : null,
|
|
119
|
-
TopPanel: null,
|
|
120
|
+
TopPanel: showCollaborationUi ? DefaultTopPanel : null,
|
|
120
121
|
Dialogs: DefaultDialogs,
|
|
121
122
|
Toasts: DefaultToasts,
|
|
122
123
|
A11y: DefaultA11yAnnouncer,
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Editor,
|
|
3
|
+
TLArrowShape,
|
|
4
|
+
TLDrawShape,
|
|
5
|
+
TLGroupShape,
|
|
6
|
+
TLImageShape,
|
|
7
|
+
TLLineShape,
|
|
8
|
+
TLTextShape,
|
|
9
|
+
useEditor,
|
|
10
|
+
useValue,
|
|
11
|
+
} from '@tldraw/editor'
|
|
2
12
|
import { getArrowBindings } from '../../shapes/arrow/shared'
|
|
3
13
|
|
|
4
14
|
function shapesWithUnboundArrows(editor: Editor) {
|
|
@@ -9,7 +19,7 @@ function shapesWithUnboundArrows(editor: Editor) {
|
|
|
9
19
|
|
|
10
20
|
return selectedShapes.filter((shape) => {
|
|
11
21
|
if (!shape) return false
|
|
12
|
-
if (editor.isShapeOfType(shape, 'arrow')) {
|
|
22
|
+
if (editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) {
|
|
13
23
|
const bindings = getArrowBindings(editor, shape)
|
|
14
24
|
if (bindings.start || bindings.end) return false
|
|
15
25
|
}
|
|
@@ -42,7 +52,7 @@ export const useAllowGroup = () => {
|
|
|
42
52
|
if (selectedShapes.length < 2) return false
|
|
43
53
|
|
|
44
54
|
for (const shape of selectedShapes) {
|
|
45
|
-
if (editor.isShapeOfType(shape, 'arrow')) {
|
|
55
|
+
if (editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) {
|
|
46
56
|
const bindings = getArrowBindings(editor, shape)
|
|
47
57
|
if (bindings.start) {
|
|
48
58
|
// if the other shape is not among the selected shapes...
|
|
@@ -153,7 +163,7 @@ export function useShowAutoSizeToggle() {
|
|
|
153
163
|
const selectedShapes = editor.getSelectedShapes()
|
|
154
164
|
return (
|
|
155
165
|
selectedShapes.length === 1 &&
|
|
156
|
-
editor.isShapeOfType(selectedShapes[0], 'text') &&
|
|
166
|
+
editor.isShapeOfType<TLTextShape>(selectedShapes[0], 'text') &&
|
|
157
167
|
selectedShapes[0].props.autoSize === false
|
|
158
168
|
)
|
|
159
169
|
},
|
|
@@ -186,11 +196,11 @@ export function useOnlyFlippableShape() {
|
|
|
186
196
|
const shape = editor.getOnlySelectedShape()
|
|
187
197
|
return (
|
|
188
198
|
shape &&
|
|
189
|
-
(editor.isShapeOfType(shape, 'group') ||
|
|
190
|
-
editor.isShapeOfType(shape, 'image') ||
|
|
191
|
-
editor.isShapeOfType(shape, 'arrow') ||
|
|
192
|
-
editor.isShapeOfType(shape, 'line') ||
|
|
193
|
-
editor.isShapeOfType(shape, 'draw'))
|
|
199
|
+
(editor.isShapeOfType<TLGroupShape>(shape, 'group') ||
|
|
200
|
+
editor.isShapeOfType<TLImageShape>(shape, 'image') ||
|
|
201
|
+
editor.isShapeOfType<TLArrowShape>(shape, 'arrow') ||
|
|
202
|
+
editor.isShapeOfType<TLLineShape>(shape, 'line') ||
|
|
203
|
+
editor.isShapeOfType<TLDrawShape>(shape, 'draw'))
|
|
194
204
|
)
|
|
195
205
|
},
|
|
196
206
|
[editor]
|
|
@@ -783,9 +783,9 @@ export function useNativeClipboardEvents() {
|
|
|
783
783
|
// | Y | N | Y |
|
|
784
784
|
// | N | Y | Y |
|
|
785
785
|
// | Y | Y | N |
|
|
786
|
-
if (editor.inputs.
|
|
786
|
+
if (editor.inputs.shiftKey) pasteAtCursor = true
|
|
787
787
|
if (editor.user.getIsPasteAtCursorMode()) pasteAtCursor = !pasteAtCursor
|
|
788
|
-
if (pasteAtCursor) point = editor.inputs.
|
|
788
|
+
if (pasteAtCursor) point = editor.inputs.currentPagePoint
|
|
789
789
|
|
|
790
790
|
const pasteFromEvent = () => {
|
|
791
791
|
if (e.clipboardData) {
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
Editor,
|
|
4
4
|
IndexKey,
|
|
5
5
|
TLImageAsset,
|
|
6
|
+
TLImageShape,
|
|
6
7
|
TLShape,
|
|
7
8
|
TLShapeId,
|
|
8
9
|
Vec,
|
|
@@ -165,7 +166,7 @@ export async function flattenShapesToImages(
|
|
|
165
166
|
const shapeId = createShapeId()
|
|
166
167
|
|
|
167
168
|
// create an image shape in the same place as the shapes
|
|
168
|
-
editor.createShape({
|
|
169
|
+
editor.createShape<TLImageShape>({
|
|
169
170
|
id: shapeId,
|
|
170
171
|
type: 'image',
|
|
171
172
|
index,
|
|
@@ -93,7 +93,7 @@ export function useKeyboardShortcuts() {
|
|
|
93
93
|
|
|
94
94
|
editor.inputs.keys.add('Comma')
|
|
95
95
|
|
|
96
|
-
const { x, y, z } = editor.inputs.
|
|
96
|
+
const { x, y, z } = editor.inputs.currentPagePoint
|
|
97
97
|
const screenpoints = editor.pageToScreen({ x, y })
|
|
98
98
|
|
|
99
99
|
const info: TLPointerEventInfo = {
|
|
@@ -120,7 +120,7 @@ export function useKeyboardShortcuts() {
|
|
|
120
120
|
|
|
121
121
|
editor.inputs.keys.delete('Comma')
|
|
122
122
|
|
|
123
|
-
const { x, y, z } = editor.inputs.
|
|
123
|
+
const { x, y, z } = editor.inputs.currentScreenPoint
|
|
124
124
|
const info: TLPointerEventInfo = {
|
|
125
125
|
type: 'pointer',
|
|
126
126
|
name: 'pointer_up',
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
Editor,
|
|
5
5
|
GeoShapeGeoStyle,
|
|
6
6
|
getIndicesBetween,
|
|
7
|
+
TLLineShape,
|
|
7
8
|
TLPointerEventInfo,
|
|
8
9
|
TLShapeId,
|
|
9
10
|
toRichText,
|
|
10
11
|
useMaybeEditor,
|
|
11
12
|
} from '@tldraw/editor'
|
|
12
13
|
import * as React from 'react'
|
|
13
|
-
import { startEditingShapeWithRichText } from '../../tools/SelectTool/selectHelpers'
|
|
14
14
|
import { EmbedDialog } from '../components/EmbedDialog'
|
|
15
15
|
import { TLUiIconJsx } from '../components/primitives/TldrawUiIcon'
|
|
16
16
|
import { useA11y } from '../context/a11y'
|
|
@@ -195,7 +195,7 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
|
|
|
195
195
|
onDragFromToolbarToCreateShape(editor, info, {
|
|
196
196
|
createShape: (id) => {
|
|
197
197
|
const [start, end] = getIndicesBetween(null, null, 2)
|
|
198
|
-
editor.createShape({
|
|
198
|
+
editor.createShape<TLLineShape>({
|
|
199
199
|
id,
|
|
200
200
|
type: 'line',
|
|
201
201
|
props: {
|
|
@@ -240,7 +240,8 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
|
|
|
240
240
|
createShape: (id) =>
|
|
241
241
|
editor.createShape({ id, type: 'text', props: { richText: toRichText('Text') } }),
|
|
242
242
|
onDragEnd: (id) => {
|
|
243
|
-
|
|
243
|
+
editor.setEditingShape(id)
|
|
244
|
+
editor.emit('select-all-text', { shapeId: id })
|
|
244
245
|
},
|
|
245
246
|
})
|
|
246
247
|
trackEvent('drag-tool', { source, id: 'text' })
|
|
@@ -269,7 +270,8 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
|
|
|
269
270
|
onDragFromToolbarToCreateShape(editor, info, {
|
|
270
271
|
createShape: (id) => editor.createShape({ id, type: 'note' }),
|
|
271
272
|
onDragEnd: (id) => {
|
|
272
|
-
|
|
273
|
+
editor.setEditingShape(id)
|
|
274
|
+
editor.emit('select-all-text', { shapeId: id })
|
|
273
275
|
},
|
|
274
276
|
})
|
|
275
277
|
trackEvent('drag-tool', { source, id: 'note' })
|
|
@@ -359,7 +361,7 @@ export function onDragFromToolbarToCreateShape(
|
|
|
359
361
|
info: TLPointerEventInfo,
|
|
360
362
|
opts: OnDragFromToolbarToCreateShapesOpts
|
|
361
363
|
) {
|
|
362
|
-
const { x, y } = editor.inputs.
|
|
364
|
+
const { x, y } = editor.inputs.currentPagePoint
|
|
363
365
|
|
|
364
366
|
const stoppingPoint = editor.markHistoryStoppingPoint('drag shape tool')
|
|
365
367
|
editor.setCurrentTool('select.translating')
|
package/src/lib/ui/version.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// This file is automatically generated by internal/scripts/refresh-assets.ts.
|
|
2
2
|
// Do not edit manually. Or do, I'm a comment, not a cop.
|
|
3
3
|
|
|
4
|
-
export const version = '4.2.
|
|
4
|
+
export const version = '4.2.3'
|
|
5
5
|
export const publishDates = {
|
|
6
6
|
major: '2025-09-18T14:39:22.803Z',
|
|
7
|
-
minor: '2025-11-19T11:
|
|
8
|
-
patch: '2026-01-
|
|
7
|
+
minor: '2025-11-19T11:47:45.748Z',
|
|
8
|
+
patch: '2026-01-08T10:11:20.530Z',
|
|
9
9
|
}
|
package/src/lib/ui.css
CHANGED
|
@@ -514,10 +514,12 @@
|
|
|
514
514
|
/* If mobile use 16px as font size */
|
|
515
515
|
/* On iOS, font size under 16px in an input will make the page zoom into the input 🤦♂️ */
|
|
516
516
|
/* https://css-tricks.com/16px-or-larger-text-prevents-ios-form-zoom/ */
|
|
517
|
-
@
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
517
|
+
@media (max-width: 600px) {
|
|
518
|
+
@supports (-webkit-touch-callout: none) {
|
|
519
|
+
/* CSS specific to iOS devices */
|
|
520
|
+
.tlui-input {
|
|
521
|
+
font-size: 16px;
|
|
522
|
+
}
|
|
521
523
|
}
|
|
522
524
|
}
|
|
523
525
|
|
|
@@ -609,31 +611,25 @@
|
|
|
609
611
|
|
|
610
612
|
/* Submenu triggers */
|
|
611
613
|
|
|
612
|
-
.tlui-menu__submenu__trigger {
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
.tlui-menu__submenu__trigger[data-direction='left'] {
|
|
617
|
-
--gradient-angle: 270deg;
|
|
614
|
+
.tlui-menu__submenu__trigger[data-state='open']::after {
|
|
615
|
+
opacity: 1;
|
|
616
|
+
background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
618
617
|
}
|
|
619
618
|
|
|
620
|
-
.tlui-menu__submenu__trigger[data-state='open']::after {
|
|
619
|
+
.tlui-menu__submenu__trigger[data-direction='left'][data-state='open']::after {
|
|
621
620
|
opacity: 1;
|
|
622
|
-
background: linear-gradient(
|
|
623
|
-
var(--gradient-angle),
|
|
624
|
-
rgba(144, 144, 144, 0) 0%,
|
|
625
|
-
var(--tl-color-muted-2) 100%
|
|
626
|
-
);
|
|
621
|
+
background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
627
622
|
}
|
|
628
623
|
|
|
629
624
|
@media (hover: hover) {
|
|
630
|
-
.tlui-menu__submenu__trigger
|
|
625
|
+
.tlui-menu__submenu__trigger[data-state='open']:not(:hover)::after {
|
|
631
626
|
opacity: 1;
|
|
632
|
-
background: linear-gradient(
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
627
|
+
background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
.tlui-menu__submenu__trigger[data-direction='left'][data-state='open']:not(:hover)::after {
|
|
631
|
+
opacity: 1;
|
|
632
|
+
background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
637
633
|
}
|
|
638
634
|
}
|
|
639
635
|
|
|
@@ -912,8 +908,10 @@
|
|
|
912
908
|
}
|
|
913
909
|
}
|
|
914
910
|
|
|
915
|
-
|
|
916
|
-
|
|
911
|
+
@media (any-pointer: coarse) {
|
|
912
|
+
.tlui-page_menu__item__submenu > .tlui-button {
|
|
913
|
+
opacity: 1;
|
|
914
|
+
}
|
|
917
915
|
}
|
|
918
916
|
|
|
919
917
|
.tlui-button__icon {
|
|
@@ -952,15 +950,16 @@
|
|
|
952
950
|
|
|
953
951
|
.tlui-offline-indicator {
|
|
954
952
|
display: flex;
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
953
|
+
flex-direction: row;
|
|
954
|
+
gap: var(--tl-space-3);
|
|
955
|
+
color: var(--tl-color-text);
|
|
956
|
+
background-color: var(--tl-color-low);
|
|
957
|
+
border: 3px solid var(--tl-color-background);
|
|
958
|
+
padding: 0px var(--tl-space-5);
|
|
959
|
+
height: 42px;
|
|
960
960
|
align-items: center;
|
|
961
961
|
justify-content: center;
|
|
962
962
|
border-radius: 99px;
|
|
963
|
-
cursor: default;
|
|
964
963
|
opacity: 0;
|
|
965
964
|
animation: tl-fade-in;
|
|
966
965
|
animation-duration: 0.12s;
|
|
@@ -1278,7 +1277,6 @@ tldraw? probably.
|
|
|
1278
1277
|
position: relative;
|
|
1279
1278
|
background: var(--tl-color-panel);
|
|
1280
1279
|
box-shadow: var(--tl-shadow-2);
|
|
1281
|
-
contain: layout style paint;
|
|
1282
1280
|
}
|
|
1283
1281
|
|
|
1284
1282
|
.tlui-main-toolbar--horizontal .tlui-main-toolbar__mobile-style-panel {
|
|
@@ -730,11 +730,20 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
730
730
|
"isComplete": false,
|
|
731
731
|
"isPen": false,
|
|
732
732
|
"scale": 1,
|
|
733
|
-
"scaleX": 1,
|
|
734
|
-
"scaleY": 1,
|
|
735
733
|
"segments": [
|
|
736
734
|
{
|
|
737
|
-
"points":
|
|
735
|
+
"points": [
|
|
736
|
+
{
|
|
737
|
+
"x": 0,
|
|
738
|
+
"y": 0,
|
|
739
|
+
"z": 0.5,
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
"x": 0.0001,
|
|
743
|
+
"y": 0.0001,
|
|
744
|
+
"z": 0.5,
|
|
745
|
+
},
|
|
746
|
+
],
|
|
738
747
|
"type": "free",
|
|
739
748
|
},
|
|
740
749
|
],
|
|
@@ -761,11 +770,20 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
761
770
|
"isComplete": false,
|
|
762
771
|
"isPen": false,
|
|
763
772
|
"scale": 1,
|
|
764
|
-
"scaleX": 1,
|
|
765
|
-
"scaleY": 1,
|
|
766
773
|
"segments": [
|
|
767
774
|
{
|
|
768
|
-
"points":
|
|
775
|
+
"points": [
|
|
776
|
+
{
|
|
777
|
+
"x": 0,
|
|
778
|
+
"y": 0,
|
|
779
|
+
"z": 0.5,
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
"x": 0.0001,
|
|
783
|
+
"y": 0.0001,
|
|
784
|
+
"z": 0.5,
|
|
785
|
+
},
|
|
786
|
+
],
|
|
769
787
|
"type": "free",
|
|
770
788
|
},
|
|
771
789
|
],
|
|
@@ -1375,11 +1393,20 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
1375
1393
|
"isComplete": false,
|
|
1376
1394
|
"isPen": false,
|
|
1377
1395
|
"scale": 1,
|
|
1378
|
-
"scaleX": 1,
|
|
1379
|
-
"scaleY": 1,
|
|
1380
1396
|
"segments": [
|
|
1381
1397
|
{
|
|
1382
|
-
"points":
|
|
1398
|
+
"points": [
|
|
1399
|
+
{
|
|
1400
|
+
"x": 0,
|
|
1401
|
+
"y": 0,
|
|
1402
|
+
"z": 0.5,
|
|
1403
|
+
},
|
|
1404
|
+
{
|
|
1405
|
+
"x": 0.0001,
|
|
1406
|
+
"y": 0.0001,
|
|
1407
|
+
"z": 0.5,
|
|
1408
|
+
},
|
|
1409
|
+
],
|
|
1383
1410
|
"type": "free",
|
|
1384
1411
|
},
|
|
1385
1412
|
],
|
|
@@ -1406,11 +1433,20 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
1406
1433
|
"isComplete": false,
|
|
1407
1434
|
"isPen": false,
|
|
1408
1435
|
"scale": 1,
|
|
1409
|
-
"scaleX": 1,
|
|
1410
|
-
"scaleY": 1,
|
|
1411
1436
|
"segments": [
|
|
1412
1437
|
{
|
|
1413
|
-
"points":
|
|
1438
|
+
"points": [
|
|
1439
|
+
{
|
|
1440
|
+
"x": 0,
|
|
1441
|
+
"y": 0,
|
|
1442
|
+
"z": 0.5,
|
|
1443
|
+
},
|
|
1444
|
+
{
|
|
1445
|
+
"x": 0.0001,
|
|
1446
|
+
"y": 0.0001,
|
|
1447
|
+
"z": 0.5,
|
|
1448
|
+
},
|
|
1449
|
+
],
|
|
1414
1450
|
"type": "free",
|
|
1415
1451
|
},
|
|
1416
1452
|
],
|
|
@@ -16,9 +16,7 @@ import {
|
|
|
16
16
|
TLShapeId,
|
|
17
17
|
Vec,
|
|
18
18
|
VecLike,
|
|
19
|
-
VecModel,
|
|
20
19
|
ZERO_INDEX_KEY,
|
|
21
|
-
b64Vecs,
|
|
22
20
|
compact,
|
|
23
21
|
createBindingId,
|
|
24
22
|
createShapeId,
|
|
@@ -135,7 +133,6 @@ export async function putExcalidrawContent(
|
|
|
135
133
|
...base,
|
|
136
134
|
type: 'geo',
|
|
137
135
|
props: {
|
|
138
|
-
...editor.getShapeUtil('geo').getDefaultProps(),
|
|
139
136
|
geo: element.type,
|
|
140
137
|
url: element.link ?? '',
|
|
141
138
|
w: element.width,
|
|
@@ -151,25 +148,21 @@ export async function putExcalidrawContent(
|
|
|
151
148
|
break
|
|
152
149
|
}
|
|
153
150
|
case 'freedraw': {
|
|
154
|
-
const points: VecModel[] = element.points.map(([x, y, z = 0.5]: number[]) => ({
|
|
155
|
-
x,
|
|
156
|
-
y,
|
|
157
|
-
z,
|
|
158
|
-
}))
|
|
159
|
-
const base64Points = b64Vecs.encodePoints(points)
|
|
160
|
-
|
|
161
151
|
tldrawContent.shapes.push({
|
|
162
152
|
...base,
|
|
163
153
|
type: 'draw',
|
|
164
154
|
props: {
|
|
165
|
-
...editor.getShapeUtil('draw').getDefaultProps(),
|
|
166
155
|
dash: getDash(element),
|
|
167
156
|
size: strokeWidthsToSizes[element.strokeWidth],
|
|
168
157
|
color: colorsToColors[element.strokeColor] ?? 'black',
|
|
169
158
|
segments: [
|
|
170
159
|
{
|
|
171
160
|
type: 'free',
|
|
172
|
-
points:
|
|
161
|
+
points: element.points.map(([x, y, z = 0.5]: number[]) => ({
|
|
162
|
+
x,
|
|
163
|
+
y,
|
|
164
|
+
z,
|
|
165
|
+
})),
|
|
173
166
|
},
|
|
174
167
|
],
|
|
175
168
|
},
|
|
@@ -187,7 +180,6 @@ export async function putExcalidrawContent(
|
|
|
187
180
|
...base,
|
|
188
181
|
type: 'line',
|
|
189
182
|
props: {
|
|
190
|
-
...editor.getShapeUtil('line').getDefaultProps(),
|
|
191
183
|
dash: getDash(element),
|
|
192
184
|
size: strokeWidthsToSizes[element.strokeWidth],
|
|
193
185
|
color: colorsToColors[element.strokeColor] ?? 'black',
|
|
@@ -229,7 +221,6 @@ export async function putExcalidrawContent(
|
|
|
229
221
|
...base,
|
|
230
222
|
type: 'arrow',
|
|
231
223
|
props: {
|
|
232
|
-
...editor.getShapeUtil('arrow').getDefaultProps(),
|
|
233
224
|
richText: toRichText(text),
|
|
234
225
|
kind: element.elbowed ? 'elbow' : 'arc',
|
|
235
226
|
bend: getBend(element, start, end),
|
|
@@ -252,7 +243,6 @@ export async function putExcalidrawContent(
|
|
|
252
243
|
toId: startTargetId,
|
|
253
244
|
props: {
|
|
254
245
|
terminal: 'start',
|
|
255
|
-
snap: 'none',
|
|
256
246
|
normalizedAnchor: { x: 0.5, y: 0.5 },
|
|
257
247
|
isPrecise: false,
|
|
258
248
|
isExact: false,
|
|
@@ -269,7 +259,6 @@ export async function putExcalidrawContent(
|
|
|
269
259
|
toId: endTargetId,
|
|
270
260
|
props: {
|
|
271
261
|
terminal: 'end',
|
|
272
|
-
snap: 'none',
|
|
273
262
|
normalizedAnchor: { x: 0.5, y: 0.5 },
|
|
274
263
|
isPrecise: false,
|
|
275
264
|
isExact: false,
|
|
@@ -286,7 +275,6 @@ export async function putExcalidrawContent(
|
|
|
286
275
|
...base,
|
|
287
276
|
type: 'text',
|
|
288
277
|
props: {
|
|
289
|
-
...editor.getShapeUtil('text').getDefaultProps(),
|
|
290
278
|
size,
|
|
291
279
|
scale,
|
|
292
280
|
font: fontFamilyToFontType[element.fontFamily] ?? 'draw',
|
|
@@ -322,7 +310,6 @@ export async function putExcalidrawContent(
|
|
|
322
310
|
...base,
|
|
323
311
|
type: 'image',
|
|
324
312
|
props: {
|
|
325
|
-
...editor.getShapeUtil('image').getDefaultProps(),
|
|
326
313
|
w: element.width,
|
|
327
314
|
h: element.height,
|
|
328
315
|
assetId,
|
|
@@ -334,7 +321,7 @@ export async function putExcalidrawContent(
|
|
|
334
321
|
index = getIndexAbove(index)
|
|
335
322
|
}
|
|
336
323
|
|
|
337
|
-
const p = point ?? (editor.inputs.
|
|
324
|
+
const p = point ?? (editor.inputs.shiftKey ? editor.inputs.currentPagePoint : undefined)
|
|
338
325
|
|
|
339
326
|
editor.putContentOntoCurrentPage(tldrawContent, {
|
|
340
327
|
point: p,
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Editor,
|
|
3
|
+
sanitizeId,
|
|
4
|
+
TLExportType,
|
|
5
|
+
TLFrameShape,
|
|
6
|
+
TLImageExportOptions,
|
|
7
|
+
TLShapeId,
|
|
8
|
+
} from '@tldraw/editor'
|
|
2
9
|
|
|
3
10
|
/** @public */
|
|
4
11
|
export interface ExportAsOptions extends TLImageExportOptions {
|
|
@@ -28,7 +35,7 @@ export async function exportAs(
|
|
|
28
35
|
name = `shapes at ${getTimestamp()}`
|
|
29
36
|
if (ids.length === 1) {
|
|
30
37
|
const first = editor.getShape(ids[0])!
|
|
31
|
-
if (editor.isShapeOfType(first, 'frame')) {
|
|
38
|
+
if (editor.isShapeOfType<TLFrameShape>(first, 'frame')) {
|
|
32
39
|
name = first.props.name || 'frame'
|
|
33
40
|
} else {
|
|
34
41
|
name = `${sanitizeId(first.id)} at ${getTimestamp()}`
|