tldraw 4.3.0-next.f13438eb7775 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -2
- package/dist-cjs/index.d.ts +311 -242
- package/dist-cjs/index.js +13 -5
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/bindings/arrow/ArrowBindingUtil.js.map +2 -2
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +2 -2
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
- package/dist-cjs/lib/defaultEmbedDefinitions.js +1 -1
- package/dist-cjs/lib/defaultEmbedDefinitions.js.map +2 -2
- package/dist-cjs/lib/defaultExternalContentHandlers.js +5 -5
- package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
- package/dist-cjs/lib/defaultSideEffects.js +6 -1
- package/dist-cjs/lib/defaultSideEffects.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +14 -13
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrow-types.js.map +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/elbow/elbowArrowSnapLines.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/elbow/getElbowArrowInfo.js +1 -1
- package/dist-cjs/lib/shapes/arrow/elbow/getElbowArrowInfo.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/shared.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js +4 -10
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +7 -4
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/bookmark/bookmarks.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +25 -23
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/getPath.js +20 -11
- package/dist-cjs/lib/shapes/draw/getPath.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +82 -86
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +3 -3
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +6 -0
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/frame/FrameShapeTool.js.map +1 -1
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +6 -5
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +146 -142
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/toolStates/Idle.js +5 -10
- package/dist-cjs/lib/shapes/geo/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js +3 -3
- package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +23 -21
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/line/toolStates/Pointing.js +3 -3
- package/dist-cjs/lib/shapes/line/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +6 -11
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/note/noteHelpers.js.map +2 -2
- package/dist-cjs/lib/shapes/note/toolStates/Pointing.js +5 -10
- package/dist-cjs/lib/shapes/note/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +3 -2
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +14 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +3 -3
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js +12 -4
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +3 -3
- package/dist-cjs/lib/shapes/shared/ShapeFill.js +2 -2
- package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/crop.js +1 -0
- package/dist-cjs/lib/shapes/shared/crop.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/interpolate-props.js +3 -3
- package/dist-cjs/lib/shapes/shared/interpolate-props.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/useEditableRichText.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/{useForceSolid.js → useEfficientZoomThreshold.js} +10 -7
- package/dist-cjs/lib/shapes/shared/useEfficientZoomThreshold.js.map +7 -0
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +1 -1
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
- package/dist-cjs/lib/shapes/text/RichTextArea.js +5 -0
- package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js +5 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js +4 -10
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Pointing.js +7 -5
- package/dist-cjs/lib/shapes/text/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +4 -5
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +2 -4
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/HandTool.js +3 -5
- package/dist-cjs/lib/tools/HandTool/HandTool.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js +3 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js +1 -1
- package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js +1 -1
- package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js +10 -11
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js +6 -5
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js +4 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js +2 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +8 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js +38 -11
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +42 -50
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js +6 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js +4 -14
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +4 -13
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +5 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +2 -3
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js +7 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +13 -11
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/selectHelpers.js +15 -4
- package/dist-cjs/lib/tools/SelectTool/selectHelpers.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js +1 -1
- package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js +3 -3
- package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js +5 -6
- package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js +1 -3
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js +1 -1
- package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js +1 -1
- package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js.map +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js.map +2 -2
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js +3 -9
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js +1 -3
- package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/CursorChatBubble.js +1 -1
- package/dist-cjs/lib/ui/components/CursorChatBubble.js.map +2 -2
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.js +1 -21
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/EditLinkDialog.js +11 -1
- package/dist-cjs/lib/ui/components/EditLinkDialog.js.map +2 -2
- package/dist-cjs/lib/ui/components/HelperButtons/BackToContent.js +1 -1
- package/dist-cjs/lib/ui/components/HelperButtons/BackToContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/HelperButtons/StopFollowing.js.map +2 -2
- package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +1 -1
- package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
- package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js +2 -15
- package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js.map +3 -3
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js +3 -1
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js.map +2 -2
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js +6 -0
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/TopPanel/CenteredTopPanelContainer.js.map +1 -1
- package/dist-cjs/lib/ui/components/menu-items.js +3 -1
- package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +3 -1
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -1
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +149 -93
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +14 -7
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
- package/dist-cjs/lib/ui/context/actions.js +7 -8
- package/dist-cjs/lib/ui/context/actions.js.map +2 -2
- package/dist-cjs/lib/ui/context/components.js +1 -2
- package/dist-cjs/lib/ui/context/components.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +2 -2
- package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useFlatten.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTools.js +4 -5
- package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
- package/dist-cjs/lib/ui/version.js +3 -3
- package/dist-cjs/lib/ui/version.js.map +1 -1
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +16 -6
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
- package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
- package/dist-cjs/lib/utils/frames/frames.js.map +2 -2
- package/dist-cjs/lib/{tools/selection-logic/getShouldEnterCropModeOnPointerDown.js → utils/test-helpers.js} +21 -8
- package/dist-cjs/lib/utils/test-helpers.js.map +7 -0
- package/dist-cjs/lib/utils/text/richText.js +15 -19
- package/dist-cjs/lib/utils/text/richText.js.map +3 -3
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +7 -2
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
- package/dist-esm/index.d.mts +311 -242
- package/dist-esm/index.mjs +14 -5
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/bindings/arrow/ArrowBindingUtil.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs +2 -2
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
- package/dist-esm/lib/defaultEmbedDefinitions.mjs +1 -1
- package/dist-esm/lib/defaultEmbedDefinitions.mjs.map +2 -2
- package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -5
- package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
- package/dist-esm/lib/defaultSideEffects.mjs +6 -1
- package/dist-esm/lib/defaultSideEffects.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +15 -15
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/elbow/elbowArrowSnapLines.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/elbow/getElbowArrowInfo.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/elbow/getElbowArrowInfo.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/shared.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs +4 -10
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +7 -4
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/bookmark/bookmarks.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +30 -25
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/getPath.mjs +21 -11
- package/dist-esm/lib/shapes/draw/getPath.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +83 -86
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +3 -3
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +6 -0
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/frame/FrameShapeTool.mjs.map +1 -1
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +6 -5
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +147 -142
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs +5 -10
- package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs +3 -3
- package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +24 -22
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs +3 -3
- package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +7 -12
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/noteHelpers.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs +5 -10
- package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +4 -3
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +14 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +12 -4
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs +2 -2
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/crop.mjs +1 -0
- package/dist-esm/lib/shapes/shared/crop.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs +4 -4
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useEditableRichText.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs +12 -0
- package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs.map +7 -0
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +1 -1
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/RichTextArea.mjs +5 -0
- package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +5 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs +4 -10
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs +7 -5
- package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +4 -5
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +3 -8
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/HandTool.mjs +3 -5
- package/dist-esm/lib/tools/HandTool/HandTool.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs +3 -2
- package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs +1 -1
- package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs +1 -1
- package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs +10 -11
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs +6 -5
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs +4 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs +2 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +8 -6
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs +38 -11
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +43 -51
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs +6 -6
- package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs +6 -19
- package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +4 -13
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +5 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +2 -3
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs +7 -6
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +13 -11
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs +17 -4
- package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs +1 -1
- package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs +3 -3
- package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs +5 -6
- package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs +1 -3
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs +1 -1
- package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs +1 -1
- package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs.map +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs +2 -8
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs +1 -3
- package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/CursorChatBubble.mjs +1 -1
- package/dist-esm/lib/ui/components/CursorChatBubble.mjs.map +2 -2
- package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs +3 -30
- package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/EditLinkDialog.mjs +11 -1
- package/dist-esm/lib/ui/components/EditLinkDialog.mjs.map +2 -2
- package/dist-esm/lib/ui/components/HelperButtons/BackToContent.mjs +1 -1
- package/dist-esm/lib/ui/components/HelperButtons/BackToContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/HelperButtons/StopFollowing.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +1 -1
- package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
- package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs +3 -6
- package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs.map +2 -2
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs +3 -1
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs.map +2 -2
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs +6 -0
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/TopPanel/CenteredTopPanelContainer.mjs.map +1 -1
- package/dist-esm/lib/ui/components/menu-items.mjs +4 -5
- package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +3 -1
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +157 -95
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +15 -8
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
- package/dist-esm/lib/ui/context/actions.mjs +7 -8
- package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
- package/dist-esm/lib/ui/context/components.mjs +1 -2
- package/dist-esm/lib/ui/context/components.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/menu-hooks.mjs +1 -4
- package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useFlatten.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTools.mjs +4 -5
- package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
- package/dist-esm/lib/ui/version.mjs +3 -3
- package/dist-esm/lib/ui/version.mjs.map +1 -1
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +17 -6
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
- package/dist-esm/lib/utils/export/exportAs.mjs +1 -3
- package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
- package/dist-esm/lib/utils/frames/frames.mjs.map +2 -2
- package/dist-esm/lib/utils/test-helpers.mjs +21 -0
- package/dist-esm/lib/utils/test-helpers.mjs.map +7 -0
- package/dist-esm/lib/utils/text/richText.mjs +12 -5
- package/dist-esm/lib/utils/text/richText.mjs.map +2 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +8 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
- package/package.json +18 -16
- package/src/index.ts +6 -2
- package/src/lib/Tldraw.test.tsx +46 -1
- package/src/lib/bindings/arrow/ArrowBindingUtil.ts +1 -1
- package/src/lib/canvas/TldrawSelectionForeground.tsx +6 -11
- package/src/lib/defaultEmbedDefinitions.ts +2 -1
- package/src/lib/defaultExternalContentHandlers.ts +13 -14
- package/src/lib/defaultSideEffects.ts +6 -1
- package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +40 -133
- package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +8 -8
- package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +2 -2
- package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +16 -16
- package/src/lib/shapes/arrow/arrow-types.ts +2 -0
- package/src/lib/shapes/arrow/arrowLabel.ts +2 -2
- package/src/lib/shapes/arrow/arrowTargetState.ts +2 -2
- package/src/lib/shapes/arrow/elbow/elbowArrowSnapLines.tsx +3 -3
- package/src/lib/shapes/arrow/elbow/getElbowArrowInfo.test.ts +80 -0
- package/src/lib/shapes/arrow/elbow/getElbowArrowInfo.tsx +1 -1
- package/src/lib/shapes/arrow/shared.ts +4 -4
- package/src/lib/shapes/arrow/toolStates/Idle.tsx +4 -14
- package/src/lib/shapes/arrow/toolStates/Pointing.tsx +8 -5
- package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +1 -1
- package/src/lib/shapes/bookmark/bookmarks.ts +3 -3
- package/src/lib/shapes/draw/DrawShapeUtil.test.ts +146 -0
- package/src/lib/shapes/draw/DrawShapeUtil.tsx +33 -27
- package/src/lib/shapes/draw/getPath.ts +31 -10
- package/src/lib/shapes/draw/toolStates/Drawing.ts +100 -90
- package/src/lib/shapes/embed/EmbedShapeUtil.tsx +8 -1
- package/src/lib/shapes/frame/FrameShapeTool.ts +1 -1
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +10 -4
- package/src/lib/shapes/geo/GeoShapeUtil.test.tsx +10 -2
- package/src/lib/shapes/geo/GeoShapeUtil.tsx +228 -176
- package/src/lib/shapes/geo/toolStates/Idle.ts +5 -15
- package/src/lib/shapes/geo/toolStates/Pointing.ts +6 -6
- package/src/lib/shapes/highlight/HighlightShapeUtil.test.ts +146 -0
- package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +27 -24
- package/src/lib/shapes/line/LineShapeTool.test.ts +6 -6
- package/src/lib/shapes/line/LineShapeUtil.test.tsx +5 -5
- package/src/lib/shapes/line/toolStates/Pointing.ts +4 -4
- package/src/lib/shapes/note/NoteShapeTool.test.ts +2 -1
- package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -10
- package/src/lib/shapes/note/noteCloning.test.ts +3 -1
- package/src/lib/shapes/note/noteHelpers.ts +2 -2
- package/src/lib/shapes/note/toolStates/Pointing.ts +5 -10
- package/src/lib/shapes/shared/HyperlinkButton.tsx +4 -3
- package/src/lib/shapes/shared/PlainTextLabel.tsx +12 -2
- package/src/lib/shapes/shared/RichTextLabel.tsx +14 -4
- package/src/lib/shapes/shared/ShapeFill.tsx +2 -2
- package/src/lib/shapes/shared/crop.ts +1 -0
- package/src/lib/shapes/shared/interpolate-props.ts +4 -4
- package/src/lib/shapes/shared/useEditablePlainText.ts +7 -3
- package/src/lib/shapes/shared/useEditableRichText.ts +7 -3
- package/src/lib/shapes/shared/useEfficientZoomThreshold.ts +10 -0
- package/src/lib/shapes/shared/useImageOrVideoAsset.ts +1 -1
- package/src/lib/shapes/text/RichTextArea.tsx +5 -0
- package/src/lib/shapes/text/TextShapeTool.test.ts +4 -4
- package/src/lib/shapes/text/TextShapeUtil.tsx +5 -0
- package/src/lib/shapes/text/toolStates/Idle.ts +4 -14
- package/src/lib/shapes/text/toolStates/Pointing.ts +8 -8
- package/src/lib/shapes/video/VideoShapeUtil.tsx +2 -1
- package/src/lib/tools/EraserTool/childStates/Erasing.ts +7 -10
- package/src/lib/tools/EraserTool/childStates/Pointing.ts +5 -20
- package/src/lib/tools/HandTool/HandTool.ts +3 -5
- package/src/lib/tools/HandTool/childStates/Dragging.ts +3 -2
- package/src/lib/tools/HandTool/childStates/Pointing.ts +1 -1
- package/src/lib/tools/LaserTool/childStates/Lasering.ts +1 -1
- package/src/lib/tools/SelectTool/DragAndDropManager.ts +14 -11
- package/src/lib/tools/SelectTool/childStates/Brushing.ts +8 -11
- package/src/lib/tools/SelectTool/childStates/Crop/children/Cropping.ts +7 -6
- package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +3 -4
- package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.ts +2 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +11 -12
- package/src/lib/tools/SelectTool/childStates/EditingShape.ts +57 -16
- package/src/lib/tools/SelectTool/childStates/Idle.ts +64 -81
- package/src/lib/tools/SelectTool/childStates/PointingArrowLabel.ts +7 -8
- package/src/lib/tools/SelectTool/childStates/PointingCanvas.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingHandle.ts +9 -17
- package/src/lib/tools/SelectTool/childStates/PointingResizeHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingRotateHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingSelection.ts +4 -4
- package/src/lib/tools/SelectTool/childStates/PointingShape.ts +4 -14
- package/src/lib/tools/SelectTool/childStates/Resizing.ts +8 -10
- package/src/lib/tools/SelectTool/childStates/Rotating.ts +2 -3
- package/src/lib/tools/SelectTool/childStates/ScribbleBrushing.ts +9 -10
- package/src/lib/tools/SelectTool/childStates/Translating.ts +16 -15
- package/src/lib/tools/SelectTool/selectHelpers.ts +39 -4
- package/src/lib/tools/ZoomTool/ZoomTool.ts +1 -1
- package/src/lib/tools/ZoomTool/childStates/Pointing.ts +3 -3
- package/src/lib/tools/ZoomTool/childStates/ZoomBrushing.ts +5 -6
- package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +1 -3
- package/src/lib/tools/selection-logic/selectOnCanvasPointerUp.ts +1 -1
- package/src/lib/tools/selection-logic/updateHoveredShapeId.ts +1 -1
- package/src/lib/ui/TldrawUi.tsx +5 -2
- package/src/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.tsx +1 -9
- package/src/lib/ui/components/ContextMenu/DefaultContextMenu.tsx +1 -3
- package/src/lib/ui/components/CursorChatBubble.tsx +2 -2
- package/src/lib/ui/components/DefaultDebugPanel.tsx +3 -42
- package/src/lib/ui/components/EditLinkDialog.tsx +16 -6
- package/src/lib/ui/components/HelperButtons/BackToContent.tsx +1 -1
- package/src/lib/ui/components/HelperButtons/StopFollowing.tsx +2 -2
- package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +1 -1
- package/src/lib/ui/components/OfflineIndicator/OfflineIndicator.tsx +6 -5
- package/src/lib/ui/components/PageMenu/PageItemInput.tsx +3 -1
- package/src/lib/ui/components/SharePanel/PeopleMenu.tsx +8 -0
- package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +2 -2
- package/src/lib/ui/components/Toolbar/DefaultImageToolbar.tsx +1 -1
- package/src/lib/ui/components/Toolbar/DefaultRichTextToolbar.tsx +1 -1
- package/src/lib/ui/components/TopPanel/CenteredTopPanelContainer.tsx +1 -1
- package/src/lib/ui/components/menu-items.tsx +9 -15
- package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +5 -3
- package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +2 -2
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +208 -113
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.tsx +1 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.tsx +1 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +7 -4
- package/src/lib/ui/context/actions.tsx +15 -19
- package/src/lib/ui/context/components.tsx +1 -2
- package/src/lib/ui/hooks/menu-hooks.ts +9 -19
- package/src/lib/ui/hooks/useClipboardEvents.ts +2 -2
- package/src/lib/ui/hooks/useFlatten.ts +1 -2
- package/src/lib/ui/hooks/useKeyboardShortcuts.ts +2 -2
- package/src/lib/ui/hooks/useTools.tsx +5 -7
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +27 -23
- package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +12 -48
- package/src/lib/utils/excalidraw/putExcalidrawContent.ts +19 -6
- package/src/lib/utils/export/exportAs.ts +2 -9
- package/src/lib/utils/frames/frames.ts +1 -1
- package/src/lib/utils/test-helpers.ts +62 -0
- package/src/lib/utils/text/richText.ts +13 -8
- package/src/lib/utils/tldr/buildFromV1Document.ts +21 -19
- package/src/test/Editor.test.tsx +78 -41
- package/src/test/EraserTool.test.ts +10 -12
- package/src/test/SelectTool.test.ts +11 -19
- package/src/test/TestEditor.ts +49 -51
- package/src/test/TldrawEditor.test.tsx +24 -20
- package/src/test/__snapshots__/drawing.test.ts.snap +3 -1257
- package/src/test/__snapshots__/resizing.test.ts.snap +3 -12
- package/src/test/arrows-megabus.test.tsx +1 -1
- package/src/test/bindings.test.tsx +29 -25
- package/src/test/bindingsIndex.test.tsx +4 -4
- package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +10 -10
- package/src/test/commands/cameraState.test.ts +299 -0
- package/src/test/commands/createShape.test.ts +64 -0
- package/src/test/commands/createShapes.test.ts +15 -1
- package/src/test/commands/getSvgString.test.ts +2 -2
- package/src/test/commands/isShapeOfType.test.ts +44 -0
- package/src/test/commands/putContent.test.ts +80 -1
- package/src/test/commands/setCamera.test.ts +13 -11
- package/src/test/commands/stackShapes.test.ts +34 -8
- package/src/test/commands/updateShape.test.ts +67 -0
- package/src/test/commands/updateShapes.test.ts +21 -5
- package/src/test/commands/zoomToBounds.test.ts +19 -3
- package/src/test/commands/zoomToSelection.test.ts +14 -3
- package/src/test/custom-clipping.test.ts +52 -44
- package/src/test/customSnapping.test.tsx +77 -62
- package/src/test/drawing.test.ts +17 -10
- package/src/test/duplicate.test.ts +1 -1
- package/src/test/flipShapes.test.ts +33 -0
- package/src/test/frames.test.ts +94 -2
- package/src/test/getCulledShapes.test.tsx +11 -3
- package/src/test/getShapeAtPoint.test.ts +2 -2
- package/src/test/groups.test.tsx +7 -4
- package/src/test/modifiers.test.ts +6 -6
- package/src/test/resizing.test.ts +16 -22
- package/src/test/selection-omnibus.test.ts +13 -13
- package/src/test/shapeutils.test.ts +1 -1
- package/src/test/spacebarPanning.test.ts +28 -10
- package/src/test/styles2.test.tsx +1 -1
- package/src/test/styles3.test.ts +5 -5
- package/src/test/test-jsx.tsx +72 -57
- package/src/test/text.test.ts +15 -17
- package/src/test/translating.test.ts +6 -8
- package/src/test/ui/BackToContent.test.tsx +111 -0
- package/tldraw.css +41 -35
- package/dist-cjs/lib/shapes/shared/useForceSolid.js.map +0 -7
- package/dist-cjs/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.js.map +0 -7
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js +0 -32
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js.map +0 -7
- package/dist-cjs/lib/utils/text/textDirection.js +0 -51
- package/dist-cjs/lib/utils/text/textDirection.js.map +0 -7
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs +0 -9
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs.map +0 -7
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs +0 -8
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs.map +0 -7
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs +0 -12
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs.map +0 -7
- package/dist-esm/lib/utils/text/textDirection.mjs +0 -31
- package/dist-esm/lib/utils/text/textDirection.mjs.map +0 -7
- package/src/lib/shapes/shared/useForceSolid.ts +0 -6
- package/src/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.ts +0 -10
- package/src/lib/ui/components/TopPanel/DefaultTopPanel.tsx +0 -10
- package/src/lib/utils/text/textDirection.ts +0 -32
|
@@ -6,10 +6,7 @@ import {
|
|
|
6
6
|
HALF_PI,
|
|
7
7
|
PageRecordType,
|
|
8
8
|
Result,
|
|
9
|
-
TLBookmarkShape,
|
|
10
9
|
TLEmbedShape,
|
|
11
|
-
TLFrameShape,
|
|
12
|
-
TLGroupShape,
|
|
13
10
|
TLImageShape,
|
|
14
11
|
TLShape,
|
|
15
12
|
TLShapeId,
|
|
@@ -327,7 +324,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
327
324
|
.getSelectedShapes()
|
|
328
325
|
.filter(
|
|
329
326
|
(shape): shape is TLTextShape =>
|
|
330
|
-
editor.isShapeOfType
|
|
327
|
+
editor.isShapeOfType(shape, 'text') && shape.props.autoSize === false
|
|
331
328
|
)
|
|
332
329
|
editor.updateShapes(
|
|
333
330
|
shapes.map((shape) => {
|
|
@@ -362,7 +359,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
362
359
|
return
|
|
363
360
|
}
|
|
364
361
|
const shape = editor.getShape(ids[0])
|
|
365
|
-
if (!shape || !editor.isShapeOfType
|
|
362
|
+
if (!shape || !editor.isShapeOfType(shape, 'embed')) {
|
|
366
363
|
console.error(warnMsg)
|
|
367
364
|
return
|
|
368
365
|
}
|
|
@@ -378,7 +375,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
378
375
|
if (editor.root.getCurrent()?.id === 'zoom') return
|
|
379
376
|
|
|
380
377
|
trackEvent('zoom-tool', { source })
|
|
381
|
-
if (!(editor.inputs.
|
|
378
|
+
if (!(editor.inputs.getShiftKey() || editor.inputs.getCtrlKey())) {
|
|
382
379
|
const currentTool = editor.root.getCurrent()
|
|
383
380
|
if (currentTool && currentTool.getCurrent()?.id === 'idle') {
|
|
384
381
|
editor.setCurrentTool('zoom', { onInteractionEnd: currentTool.id, maskAs: 'zoom' })
|
|
@@ -401,8 +398,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
401
398
|
const creationPromises: Promise<Result<any, any>>[] = []
|
|
402
399
|
|
|
403
400
|
for (const shape of shapes) {
|
|
404
|
-
if (!shape || !editor.isShapeOfType
|
|
405
|
-
continue
|
|
401
|
+
if (!shape || !editor.isShapeOfType(shape, 'embed') || !shape.props.url) continue
|
|
406
402
|
|
|
407
403
|
const center = editor.getShapePageBounds(shape)?.center
|
|
408
404
|
|
|
@@ -441,7 +437,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
441
437
|
const createList: TLShapePartial[] = []
|
|
442
438
|
const deleteList: TLShapeId[] = []
|
|
443
439
|
for (const shape of shapes) {
|
|
444
|
-
if (!editor.isShapeOfType
|
|
440
|
+
if (!editor.isShapeOfType(shape, 'bookmark')) continue
|
|
445
441
|
|
|
446
442
|
const { url } = shape.props
|
|
447
443
|
|
|
@@ -552,7 +548,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
552
548
|
|
|
553
549
|
trackEvent('group-shapes', { source })
|
|
554
550
|
const onlySelectedShape = editor.getOnlySelectedShape()
|
|
555
|
-
if (onlySelectedShape && editor.isShapeOfType
|
|
551
|
+
if (onlySelectedShape && editor.isShapeOfType(onlySelectedShape, 'group')) {
|
|
556
552
|
editor.markHistoryStoppingPoint('ungroup')
|
|
557
553
|
editor.ungroupShapes(editor.getSelectedShapeIds())
|
|
558
554
|
} else {
|
|
@@ -572,7 +568,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
572
568
|
const selectedShapes = editor.getSelectedShapes()
|
|
573
569
|
if (
|
|
574
570
|
selectedShapes.length > 0 &&
|
|
575
|
-
selectedShapes.every((shape) => editor.isShapeOfType
|
|
571
|
+
selectedShapes.every((shape) => editor.isShapeOfType(shape, 'frame'))
|
|
576
572
|
) {
|
|
577
573
|
editor.markHistoryStoppingPoint('remove-frame')
|
|
578
574
|
removeFrame(
|
|
@@ -590,7 +586,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
590
586
|
|
|
591
587
|
trackEvent('fit-frame-to-content', { source })
|
|
592
588
|
const onlySelectedShape = editor.getOnlySelectedShape()
|
|
593
|
-
if (onlySelectedShape && editor.isShapeOfType
|
|
589
|
+
if (onlySelectedShape && editor.isShapeOfType(onlySelectedShape, 'frame')) {
|
|
594
590
|
editor.markHistoryStoppingPoint('fit-frame-to-content')
|
|
595
591
|
fitFrameToContent(editor, onlySelectedShape.id)
|
|
596
592
|
}
|
|
@@ -977,7 +973,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
977
973
|
helpers.paste(
|
|
978
974
|
clipboardItems,
|
|
979
975
|
source,
|
|
980
|
-
source === 'context-menu' ? editor.inputs.
|
|
976
|
+
source === 'context-menu' ? editor.inputs.getCurrentPagePoint() : undefined
|
|
981
977
|
)
|
|
982
978
|
})
|
|
983
979
|
.catch(() => {
|
|
@@ -1041,7 +1037,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1041
1037
|
if (!canApplySelectionAction()) return
|
|
1042
1038
|
if (mustGoBackToSelectToolFirst()) return
|
|
1043
1039
|
|
|
1044
|
-
const isFine = editor.inputs.
|
|
1040
|
+
const isFine = editor.inputs.getAltKey()
|
|
1045
1041
|
trackEvent('rotate-cw', { source, fine: isFine })
|
|
1046
1042
|
editor.markHistoryStoppingPoint('rotate-cw')
|
|
1047
1043
|
editor.run(() => {
|
|
@@ -1064,7 +1060,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1064
1060
|
if (!canApplySelectionAction()) return
|
|
1065
1061
|
if (mustGoBackToSelectToolFirst()) return
|
|
1066
1062
|
|
|
1067
|
-
const isFine = editor.inputs.
|
|
1063
|
+
const isFine = editor.inputs.getAltKey()
|
|
1068
1064
|
trackEvent('rotate-ccw', { source, fine: isFine })
|
|
1069
1065
|
editor.markHistoryStoppingPoint('rotate-ccw')
|
|
1070
1066
|
editor.run(() => {
|
|
@@ -1096,7 +1092,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1096
1092
|
readonlyOk: true,
|
|
1097
1093
|
onSelect(source) {
|
|
1098
1094
|
trackEvent('zoom-in', { source, towardsCursor: true })
|
|
1099
|
-
editor.zoomIn(editor.inputs.
|
|
1095
|
+
editor.zoomIn(editor.inputs.getCurrentScreenPoint(), {
|
|
1100
1096
|
animation: { duration: editor.options.animationMediumMs },
|
|
1101
1097
|
})
|
|
1102
1098
|
},
|
|
@@ -1120,7 +1116,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1120
1116
|
readonlyOk: true,
|
|
1121
1117
|
onSelect(source) {
|
|
1122
1118
|
trackEvent('zoom-out', { source, towardsCursor: true })
|
|
1123
|
-
editor.zoomOut(editor.inputs.
|
|
1119
|
+
editor.zoomOut(editor.inputs.getCurrentScreenPoint(), {
|
|
1124
1120
|
animation: { duration: editor.options.animationMediumMs },
|
|
1125
1121
|
})
|
|
1126
1122
|
},
|
|
@@ -1599,8 +1595,8 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1599
1595
|
const onlySelectedShape = editor.getOnlySelectedShape()
|
|
1600
1596
|
if (
|
|
1601
1597
|
onlySelectedShape &&
|
|
1602
|
-
(editor.isShapeOfType
|
|
1603
|
-
editor.isShapeOfType
|
|
1598
|
+
(editor.isShapeOfType(onlySelectedShape, 'image') ||
|
|
1599
|
+
editor.isShapeOfType(onlySelectedShape, 'video'))
|
|
1604
1600
|
) {
|
|
1605
1601
|
const firstToolbarButton = editor
|
|
1606
1602
|
.getContainer()
|
|
@@ -42,7 +42,6 @@ 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'
|
|
46
45
|
import { DefaultZoomMenu, TLUiZoomMenuProps } from '../components/ZoomMenu/DefaultZoomMenu'
|
|
47
46
|
import { useShowCollaborationUi } from '../hooks/useCollaborationStatus'
|
|
48
47
|
|
|
@@ -117,7 +116,7 @@ export function TldrawUiComponentsProvider({
|
|
|
117
116
|
MenuPanel: DefaultMenuPanel,
|
|
118
117
|
SharePanel: showCollaborationUi ? DefaultSharePanel : null,
|
|
119
118
|
CursorChatBubble: showCollaborationUi ? CursorChatBubble : null,
|
|
120
|
-
TopPanel:
|
|
119
|
+
TopPanel: null,
|
|
121
120
|
Dialogs: DefaultDialogs,
|
|
122
121
|
Toasts: DefaultToasts,
|
|
123
122
|
A11y: DefaultA11yAnnouncer,
|
|
@@ -1,14 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Editor,
|
|
3
|
-
TLArrowShape,
|
|
4
|
-
TLDrawShape,
|
|
5
|
-
TLGroupShape,
|
|
6
|
-
TLImageShape,
|
|
7
|
-
TLLineShape,
|
|
8
|
-
TLTextShape,
|
|
9
|
-
useEditor,
|
|
10
|
-
useValue,
|
|
11
|
-
} from '@tldraw/editor'
|
|
1
|
+
import { Editor, useEditor, useValue } from '@tldraw/editor'
|
|
12
2
|
import { getArrowBindings } from '../../shapes/arrow/shared'
|
|
13
3
|
|
|
14
4
|
function shapesWithUnboundArrows(editor: Editor) {
|
|
@@ -19,7 +9,7 @@ function shapesWithUnboundArrows(editor: Editor) {
|
|
|
19
9
|
|
|
20
10
|
return selectedShapes.filter((shape) => {
|
|
21
11
|
if (!shape) return false
|
|
22
|
-
if (editor.isShapeOfType
|
|
12
|
+
if (editor.isShapeOfType(shape, 'arrow')) {
|
|
23
13
|
const bindings = getArrowBindings(editor, shape)
|
|
24
14
|
if (bindings.start || bindings.end) return false
|
|
25
15
|
}
|
|
@@ -52,7 +42,7 @@ export const useAllowGroup = () => {
|
|
|
52
42
|
if (selectedShapes.length < 2) return false
|
|
53
43
|
|
|
54
44
|
for (const shape of selectedShapes) {
|
|
55
|
-
if (editor.isShapeOfType
|
|
45
|
+
if (editor.isShapeOfType(shape, 'arrow')) {
|
|
56
46
|
const bindings = getArrowBindings(editor, shape)
|
|
57
47
|
if (bindings.start) {
|
|
58
48
|
// if the other shape is not among the selected shapes...
|
|
@@ -163,7 +153,7 @@ export function useShowAutoSizeToggle() {
|
|
|
163
153
|
const selectedShapes = editor.getSelectedShapes()
|
|
164
154
|
return (
|
|
165
155
|
selectedShapes.length === 1 &&
|
|
166
|
-
editor.isShapeOfType
|
|
156
|
+
editor.isShapeOfType(selectedShapes[0], 'text') &&
|
|
167
157
|
selectedShapes[0].props.autoSize === false
|
|
168
158
|
)
|
|
169
159
|
},
|
|
@@ -196,11 +186,11 @@ export function useOnlyFlippableShape() {
|
|
|
196
186
|
const shape = editor.getOnlySelectedShape()
|
|
197
187
|
return (
|
|
198
188
|
shape &&
|
|
199
|
-
(editor.isShapeOfType
|
|
200
|
-
editor.isShapeOfType
|
|
201
|
-
editor.isShapeOfType
|
|
202
|
-
editor.isShapeOfType
|
|
203
|
-
editor.isShapeOfType
|
|
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'))
|
|
204
194
|
)
|
|
205
195
|
},
|
|
206
196
|
[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.getShiftKey()) pasteAtCursor = true
|
|
787
787
|
if (editor.user.getIsPasteAtCursorMode()) pasteAtCursor = !pasteAtCursor
|
|
788
|
-
if (pasteAtCursor) point = editor.inputs.
|
|
788
|
+
if (pasteAtCursor) point = editor.inputs.getCurrentPagePoint()
|
|
789
789
|
|
|
790
790
|
const pasteFromEvent = () => {
|
|
791
791
|
if (e.clipboardData) {
|
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
Editor,
|
|
4
4
|
IndexKey,
|
|
5
5
|
TLImageAsset,
|
|
6
|
-
TLImageShape,
|
|
7
6
|
TLShape,
|
|
8
7
|
TLShapeId,
|
|
9
8
|
Vec,
|
|
@@ -166,7 +165,7 @@ export async function flattenShapesToImages(
|
|
|
166
165
|
const shapeId = createShapeId()
|
|
167
166
|
|
|
168
167
|
// create an image shape in the same place as the shapes
|
|
169
|
-
editor.createShape
|
|
168
|
+
editor.createShape({
|
|
170
169
|
id: shapeId,
|
|
171
170
|
type: 'image',
|
|
172
171
|
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.getCurrentPagePoint()
|
|
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.getCurrentScreenPoint()
|
|
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,
|
|
8
7
|
TLPointerEventInfo,
|
|
9
8
|
TLShapeId,
|
|
10
9
|
toRichText,
|
|
11
10
|
useMaybeEditor,
|
|
12
11
|
} from '@tldraw/editor'
|
|
13
12
|
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({
|
|
199
199
|
id,
|
|
200
200
|
type: 'line',
|
|
201
201
|
props: {
|
|
@@ -240,8 +240,7 @@ 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
|
-
editor
|
|
244
|
-
editor.emit('select-all-text', { shapeId: id })
|
|
243
|
+
startEditingShapeWithRichText(editor, id, { selectAll: true })
|
|
245
244
|
},
|
|
246
245
|
})
|
|
247
246
|
trackEvent('drag-tool', { source, id: 'text' })
|
|
@@ -270,8 +269,7 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
|
|
|
270
269
|
onDragFromToolbarToCreateShape(editor, info, {
|
|
271
270
|
createShape: (id) => editor.createShape({ id, type: 'note' }),
|
|
272
271
|
onDragEnd: (id) => {
|
|
273
|
-
editor
|
|
274
|
-
editor.emit('select-all-text', { shapeId: id })
|
|
272
|
+
startEditingShapeWithRichText(editor, id, { selectAll: true })
|
|
275
273
|
},
|
|
276
274
|
})
|
|
277
275
|
trackEvent('drag-tool', { source, id: 'note' })
|
|
@@ -361,7 +359,7 @@ export function onDragFromToolbarToCreateShape(
|
|
|
361
359
|
info: TLPointerEventInfo,
|
|
362
360
|
opts: OnDragFromToolbarToCreateShapesOpts
|
|
363
361
|
) {
|
|
364
|
-
const { x, y } = editor.inputs.
|
|
362
|
+
const { x, y } = editor.inputs.getCurrentPagePoint()
|
|
365
363
|
|
|
366
364
|
const stoppingPoint = editor.markHistoryStoppingPoint('drag shape tool')
|
|
367
365
|
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.3.0
|
|
4
|
+
export const version = '4.3.0'
|
|
5
5
|
export const publishDates = {
|
|
6
6
|
major: '2025-09-18T14:39:22.803Z',
|
|
7
|
-
minor: '
|
|
8
|
-
patch: '
|
|
7
|
+
minor: '2026-01-21T11:56:39.106Z',
|
|
8
|
+
patch: '2026-01-21T11:56:39.106Z',
|
|
9
9
|
}
|
package/src/lib/ui.css
CHANGED
|
@@ -609,25 +609,31 @@
|
|
|
609
609
|
|
|
610
610
|
/* Submenu triggers */
|
|
611
611
|
|
|
612
|
-
.tlui-menu__submenu__trigger
|
|
613
|
-
|
|
614
|
-
background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
612
|
+
.tlui-menu__submenu__trigger {
|
|
613
|
+
--gradient-angle: 90deg;
|
|
615
614
|
}
|
|
616
615
|
|
|
617
|
-
.tlui-menu__submenu__trigger[data-direction='left']
|
|
616
|
+
.tlui-menu__submenu__trigger[data-direction='left'] {
|
|
617
|
+
--gradient-angle: 270deg;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
.tlui-menu__submenu__trigger[data-state='open']::after {
|
|
618
621
|
opacity: 1;
|
|
619
|
-
background: linear-gradient(
|
|
622
|
+
background: linear-gradient(
|
|
623
|
+
var(--gradient-angle),
|
|
624
|
+
rgba(144, 144, 144, 0) 0%,
|
|
625
|
+
var(--tl-color-muted-2) 100%
|
|
626
|
+
);
|
|
620
627
|
}
|
|
621
628
|
|
|
622
629
|
@media (hover: hover) {
|
|
623
|
-
.tlui-menu__submenu__trigger[data-state='open']
|
|
630
|
+
.tlui-menu__submenu__trigger:is(:hover, [data-state='open'])::after {
|
|
624
631
|
opacity: 1;
|
|
625
|
-
background: linear-gradient(
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
632
|
+
background: linear-gradient(
|
|
633
|
+
var(--gradient-angle),
|
|
634
|
+
rgba(144, 144, 144, 0) 0%,
|
|
635
|
+
var(--tl-color-muted-2) 100%
|
|
636
|
+
);
|
|
631
637
|
}
|
|
632
638
|
}
|
|
633
639
|
|
|
@@ -906,10 +912,8 @@
|
|
|
906
912
|
}
|
|
907
913
|
}
|
|
908
914
|
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
opacity: 1;
|
|
912
|
-
}
|
|
915
|
+
.tl-container[data-coarse='true'] .tlui-page_menu__item__submenu > .tlui-button {
|
|
916
|
+
opacity: 1;
|
|
913
917
|
}
|
|
914
918
|
|
|
915
919
|
.tlui-button__icon {
|
|
@@ -948,16 +952,15 @@
|
|
|
948
952
|
|
|
949
953
|
.tlui-offline-indicator {
|
|
950
954
|
display: flex;
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
padding: 0px var(--tl-space-5);
|
|
957
|
-
height: 42px;
|
|
955
|
+
color: var(--tl-color-background);
|
|
956
|
+
background-color: var(--tl-color-text);
|
|
957
|
+
border: none;
|
|
958
|
+
width: 32px;
|
|
959
|
+
height: 32px;
|
|
958
960
|
align-items: center;
|
|
959
961
|
justify-content: center;
|
|
960
962
|
border-radius: 99px;
|
|
963
|
+
cursor: default;
|
|
961
964
|
opacity: 0;
|
|
962
965
|
animation: tl-fade-in;
|
|
963
966
|
animation-duration: 0.12s;
|
|
@@ -1275,6 +1278,7 @@ tldraw? probably.
|
|
|
1275
1278
|
position: relative;
|
|
1276
1279
|
background: var(--tl-color-panel);
|
|
1277
1280
|
box-shadow: var(--tl-shadow-2);
|
|
1281
|
+
contain: layout style paint;
|
|
1278
1282
|
}
|
|
1279
1283
|
|
|
1280
1284
|
.tlui-main-toolbar--horizontal .tlui-main-toolbar__mobile-style-panel {
|
|
@@ -730,20 +730,11 @@ 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,
|
|
733
735
|
"segments": [
|
|
734
736
|
{
|
|
735
|
-
"
|
|
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
|
-
],
|
|
737
|
+
"path": "AAAAAAAAAAAAAAA/jgaOBgAA",
|
|
747
738
|
"type": "free",
|
|
748
739
|
},
|
|
749
740
|
],
|
|
@@ -770,20 +761,11 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
770
761
|
"isComplete": false,
|
|
771
762
|
"isPen": false,
|
|
772
763
|
"scale": 1,
|
|
764
|
+
"scaleX": 1,
|
|
765
|
+
"scaleY": 1,
|
|
773
766
|
"segments": [
|
|
774
767
|
{
|
|
775
|
-
"
|
|
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
|
-
],
|
|
768
|
+
"path": "AAAAAAAAAAAAAAA/jgaOBgAA",
|
|
787
769
|
"type": "free",
|
|
788
770
|
},
|
|
789
771
|
],
|
|
@@ -1393,20 +1375,11 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
1393
1375
|
"isComplete": false,
|
|
1394
1376
|
"isPen": false,
|
|
1395
1377
|
"scale": 1,
|
|
1378
|
+
"scaleX": 1,
|
|
1379
|
+
"scaleY": 1,
|
|
1396
1380
|
"segments": [
|
|
1397
1381
|
{
|
|
1398
|
-
"
|
|
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
|
-
],
|
|
1382
|
+
"path": "AAAAAAAAAAAAAAA/jgaOBgAA",
|
|
1410
1383
|
"type": "free",
|
|
1411
1384
|
},
|
|
1412
1385
|
],
|
|
@@ -1433,20 +1406,11 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
1433
1406
|
"isComplete": false,
|
|
1434
1407
|
"isPen": false,
|
|
1435
1408
|
"scale": 1,
|
|
1409
|
+
"scaleX": 1,
|
|
1410
|
+
"scaleY": 1,
|
|
1436
1411
|
"segments": [
|
|
1437
1412
|
{
|
|
1438
|
-
"
|
|
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
|
-
],
|
|
1413
|
+
"path": "AAAAAAAAAAAAAAA/jgaOBgAA",
|
|
1450
1414
|
"type": "free",
|
|
1451
1415
|
},
|
|
1452
1416
|
],
|
|
@@ -16,7 +16,9 @@ import {
|
|
|
16
16
|
TLShapeId,
|
|
17
17
|
Vec,
|
|
18
18
|
VecLike,
|
|
19
|
+
VecModel,
|
|
19
20
|
ZERO_INDEX_KEY,
|
|
21
|
+
b64Vecs,
|
|
20
22
|
compact,
|
|
21
23
|
createBindingId,
|
|
22
24
|
createShapeId,
|
|
@@ -133,6 +135,7 @@ export async function putExcalidrawContent(
|
|
|
133
135
|
...base,
|
|
134
136
|
type: 'geo',
|
|
135
137
|
props: {
|
|
138
|
+
...editor.getShapeUtil('geo').getDefaultProps(),
|
|
136
139
|
geo: element.type,
|
|
137
140
|
url: element.link ?? '',
|
|
138
141
|
w: element.width,
|
|
@@ -148,21 +151,25 @@ export async function putExcalidrawContent(
|
|
|
148
151
|
break
|
|
149
152
|
}
|
|
150
153
|
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
|
+
|
|
151
161
|
tldrawContent.shapes.push({
|
|
152
162
|
...base,
|
|
153
163
|
type: 'draw',
|
|
154
164
|
props: {
|
|
165
|
+
...editor.getShapeUtil('draw').getDefaultProps(),
|
|
155
166
|
dash: getDash(element),
|
|
156
167
|
size: strokeWidthsToSizes[element.strokeWidth],
|
|
157
168
|
color: colorsToColors[element.strokeColor] ?? 'black',
|
|
158
169
|
segments: [
|
|
159
170
|
{
|
|
160
171
|
type: 'free',
|
|
161
|
-
|
|
162
|
-
x,
|
|
163
|
-
y,
|
|
164
|
-
z,
|
|
165
|
-
})),
|
|
172
|
+
path: base64Points,
|
|
166
173
|
},
|
|
167
174
|
],
|
|
168
175
|
},
|
|
@@ -180,6 +187,7 @@ export async function putExcalidrawContent(
|
|
|
180
187
|
...base,
|
|
181
188
|
type: 'line',
|
|
182
189
|
props: {
|
|
190
|
+
...editor.getShapeUtil('line').getDefaultProps(),
|
|
183
191
|
dash: getDash(element),
|
|
184
192
|
size: strokeWidthsToSizes[element.strokeWidth],
|
|
185
193
|
color: colorsToColors[element.strokeColor] ?? 'black',
|
|
@@ -221,6 +229,7 @@ export async function putExcalidrawContent(
|
|
|
221
229
|
...base,
|
|
222
230
|
type: 'arrow',
|
|
223
231
|
props: {
|
|
232
|
+
...editor.getShapeUtil('arrow').getDefaultProps(),
|
|
224
233
|
richText: toRichText(text),
|
|
225
234
|
kind: element.elbowed ? 'elbow' : 'arc',
|
|
226
235
|
bend: getBend(element, start, end),
|
|
@@ -243,6 +252,7 @@ export async function putExcalidrawContent(
|
|
|
243
252
|
toId: startTargetId,
|
|
244
253
|
props: {
|
|
245
254
|
terminal: 'start',
|
|
255
|
+
snap: 'none',
|
|
246
256
|
normalizedAnchor: { x: 0.5, y: 0.5 },
|
|
247
257
|
isPrecise: false,
|
|
248
258
|
isExact: false,
|
|
@@ -259,6 +269,7 @@ export async function putExcalidrawContent(
|
|
|
259
269
|
toId: endTargetId,
|
|
260
270
|
props: {
|
|
261
271
|
terminal: 'end',
|
|
272
|
+
snap: 'none',
|
|
262
273
|
normalizedAnchor: { x: 0.5, y: 0.5 },
|
|
263
274
|
isPrecise: false,
|
|
264
275
|
isExact: false,
|
|
@@ -275,6 +286,7 @@ export async function putExcalidrawContent(
|
|
|
275
286
|
...base,
|
|
276
287
|
type: 'text',
|
|
277
288
|
props: {
|
|
289
|
+
...editor.getShapeUtil('text').getDefaultProps(),
|
|
278
290
|
size,
|
|
279
291
|
scale,
|
|
280
292
|
font: fontFamilyToFontType[element.fontFamily] ?? 'draw',
|
|
@@ -310,6 +322,7 @@ export async function putExcalidrawContent(
|
|
|
310
322
|
...base,
|
|
311
323
|
type: 'image',
|
|
312
324
|
props: {
|
|
325
|
+
...editor.getShapeUtil('image').getDefaultProps(),
|
|
313
326
|
w: element.width,
|
|
314
327
|
h: element.height,
|
|
315
328
|
assetId,
|
|
@@ -321,7 +334,7 @@ export async function putExcalidrawContent(
|
|
|
321
334
|
index = getIndexAbove(index)
|
|
322
335
|
}
|
|
323
336
|
|
|
324
|
-
const p = point ?? (editor.inputs.
|
|
337
|
+
const p = point ?? (editor.inputs.getShiftKey() ? editor.inputs.getCurrentPagePoint() : undefined)
|
|
325
338
|
|
|
326
339
|
editor.putContentOntoCurrentPage(tldrawContent, {
|
|
327
340
|
point: p,
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Editor,
|
|
3
|
-
sanitizeId,
|
|
4
|
-
TLExportType,
|
|
5
|
-
TLFrameShape,
|
|
6
|
-
TLImageExportOptions,
|
|
7
|
-
TLShapeId,
|
|
8
|
-
} from '@tldraw/editor'
|
|
1
|
+
import { Editor, sanitizeId, TLExportType, TLImageExportOptions, TLShapeId } from '@tldraw/editor'
|
|
9
2
|
|
|
10
3
|
/** @public */
|
|
11
4
|
export interface ExportAsOptions extends TLImageExportOptions {
|
|
@@ -35,7 +28,7 @@ export async function exportAs(
|
|
|
35
28
|
name = `shapes at ${getTimestamp()}`
|
|
36
29
|
if (ids.length === 1) {
|
|
37
30
|
const first = editor.getShape(ids[0])!
|
|
38
|
-
if (editor.isShapeOfType
|
|
31
|
+
if (editor.isShapeOfType(first, 'frame')) {
|
|
39
32
|
name = first.props.name || 'frame'
|
|
40
33
|
} else {
|
|
41
34
|
name = `${sanitizeId(first.id)} at ${getTimestamp()}`
|
|
@@ -22,7 +22,7 @@ export function removeFrame(editor: Editor, ids: TLShapeId[]) {
|
|
|
22
22
|
const frames = compact(
|
|
23
23
|
ids
|
|
24
24
|
.map((id) => editor.getShape<TLFrameShape>(id))
|
|
25
|
-
.filter((f) => f && editor.isShapeOfType
|
|
25
|
+
.filter((f) => f && editor.isShapeOfType(f, 'frame'))
|
|
26
26
|
)
|
|
27
27
|
if (!frames.length) return
|
|
28
28
|
|