tldraw 4.3.0-canary.3b56c8d3ecee → 4.3.0-canary.3b8500f7cfdc
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 +297 -237
- package/dist-cjs/index.js +13 -5
- package/dist-cjs/index.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/getElbowArrowInfo.js +1 -1
- package/dist-cjs/lib/shapes/arrow/elbow/getElbowArrowInfo.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/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/FrameShapeUtil.js +7 -13
- 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/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/interpolate-props.js +3 -3
- package/dist-cjs/lib/shapes/shared/interpolate-props.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 +12 -6
- 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 +9 -7
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js +20 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +3 -3
- 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 +7 -5
- 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 +22 -8
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js.map +3 -3
- 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 +2 -22
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.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/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 +6 -6
- 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/useClipboardEvents.js +2 -2
- package/dist-cjs/lib/ui/hooks/useClipboardEvents.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 +8 -6
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.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 +297 -237
- package/dist-esm/index.mjs +14 -5
- package/dist-esm/index.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/getElbowArrowInfo.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/elbow/getElbowArrowInfo.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/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/FrameShapeUtil.mjs +7 -13
- 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/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/interpolate-props.mjs +4 -4
- package/dist-esm/lib/shapes/shared/interpolate-props.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 +13 -6
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +2 -4
- 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 +9 -7
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs +20 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +3 -3
- 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 +7 -5
- 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 +5 -15
- 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 +23 -8
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs.map +3 -3
- 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 +4 -31
- package/dist-esm/lib/ui/components/DefaultDebugPanel.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/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 +3 -1
- 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 +6 -6
- 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/useClipboardEvents.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useClipboardEvents.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 +9 -6
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.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/canvas/TldrawSelectionForeground.tsx +2 -2
- package/src/lib/defaultEmbedDefinitions.ts +2 -1
- package/src/lib/defaultExternalContentHandlers.ts +10 -10
- 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.tsx +15 -15
- package/src/lib/shapes/arrow/arrow-types.ts +2 -0
- package/src/lib/shapes/arrow/arrowLabel.ts +1 -1
- package/src/lib/shapes/arrow/arrowTargetState.ts +1 -1
- 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/toolStates/Idle.tsx +4 -14
- package/src/lib/shapes/arrow/toolStates/Pointing.tsx +7 -4
- package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +1 -1
- package/src/lib/shapes/draw/DrawShapeUtil.test.ts +146 -0
- package/src/lib/shapes/draw/DrawShapeUtil.tsx +31 -27
- package/src/lib/shapes/draw/getPath.ts +31 -10
- package/src/lib/shapes/draw/toolStates/Drawing.ts +96 -86
- package/src/lib/shapes/embed/EmbedShapeUtil.tsx +7 -0
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +11 -11
- 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 +3 -3
- package/src/lib/shapes/highlight/HighlightShapeUtil.test.ts +146 -0
- package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +25 -24
- package/src/lib/shapes/line/toolStates/Pointing.ts +3 -3
- package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -10
- package/src/lib/shapes/note/noteCloning.test.ts +3 -1
- 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 +10 -1
- package/src/lib/shapes/shared/RichTextLabel.tsx +12 -3
- package/src/lib/shapes/shared/ShapeFill.tsx +2 -2
- package/src/lib/shapes/shared/interpolate-props.ts +4 -4
- 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/TextShapeUtil.tsx +5 -0
- package/src/lib/shapes/text/toolStates/Idle.ts +4 -14
- package/src/lib/shapes/text/toolStates/Pointing.ts +7 -7
- package/src/lib/shapes/video/VideoShapeUtil.tsx +2 -1
- package/src/lib/tools/EraserTool/childStates/Erasing.ts +18 -6
- package/src/lib/tools/EraserTool/childStates/Pointing.ts +2 -4
- 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 +12 -7
- package/src/lib/tools/SelectTool/childStates/Brushing.ts +28 -8
- package/src/lib/tools/SelectTool/childStates/Crop/children/Cropping.ts +7 -6
- package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +1 -1
- 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 +7 -5
- package/src/lib/tools/SelectTool/childStates/EditingShape.ts +55 -12
- package/src/lib/tools/SelectTool/childStates/Idle.ts +58 -71
- package/src/lib/tools/SelectTool/childStates/PointingArrowLabel.ts +6 -7
- package/src/lib/tools/SelectTool/childStates/PointingCanvas.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingHandle.ts +5 -5
- 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 +2 -2
- package/src/lib/tools/SelectTool/childStates/PointingShape.ts +4 -14
- package/src/lib/tools/SelectTool/childStates/Resizing.ts +6 -6
- package/src/lib/tools/SelectTool/childStates/Rotating.ts +2 -3
- package/src/lib/tools/SelectTool/childStates/ScribbleBrushing.ts +32 -10
- package/src/lib/tools/SelectTool/childStates/Translating.ts +15 -12
- 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 +4 -43
- 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/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 +3 -1
- 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 +6 -6
- package/src/lib/ui/context/components.tsx +1 -2
- package/src/lib/ui/hooks/useClipboardEvents.ts +2 -2
- package/src/lib/ui/hooks/useKeyboardShortcuts.ts +2 -2
- package/src/lib/ui/hooks/useTools.tsx +4 -5
- 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 +11 -6
- package/src/lib/utils/test-helpers.ts +60 -0
- package/src/lib/utils/text/richText.ts +13 -8
- package/src/lib/utils/tldr/buildFromV1Document.ts +9 -2
- package/src/test/Editor.test.tsx +40 -29
- package/src/test/EraserTool.test.ts +10 -12
- package/src/test/TestEditor.ts +48 -47
- package/src/test/TldrawEditor.test.tsx +6 -4
- 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/commands/__snapshots__/getSvgString.test.ts.snap +10 -10
- package/src/test/commands/cameraState.test.ts +299 -0
- package/src/test/commands/putContent.test.ts +79 -1
- package/src/test/commands/setCamera.test.ts +13 -11
- package/src/test/commands/stackShapes.test.ts +34 -8
- 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 +16 -9
- package/src/test/drawing.test.ts +17 -10
- package/src/test/flipShapes.test.ts +33 -0
- package/src/test/frames.test.ts +92 -0
- package/src/test/groups.test.tsx +1 -1
- package/src/test/modifiers.test.ts +6 -6
- package/src/test/notVisibleShapes.test.ts +698 -0
- package/src/test/resizing.test.ts +7 -9
- package/src/test/selection-omnibus.test.ts +2 -2
- package/src/test/spacebarPanning.test.ts +28 -10
- package/src/test/test-jsx.tsx +3 -0
- 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
|
@@ -92,7 +92,7 @@ export class Translating extends StateNode {
|
|
|
92
92
|
|
|
93
93
|
// Don't clone on create; otherwise clone on altKey
|
|
94
94
|
if (!this.isCreating) {
|
|
95
|
-
if (this.editor.inputs.
|
|
95
|
+
if (this.editor.inputs.getAltKey()) {
|
|
96
96
|
this.startCloning()
|
|
97
97
|
if (this.isCloning) return
|
|
98
98
|
}
|
|
@@ -122,7 +122,7 @@ export class Translating extends StateNode {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
override onKeyDown() {
|
|
125
|
-
if (this.editor.inputs.
|
|
125
|
+
if (this.editor.inputs.getAltKey() && !this.isCloning) {
|
|
126
126
|
this.startCloning()
|
|
127
127
|
if (this.isCloning) return
|
|
128
128
|
}
|
|
@@ -132,7 +132,7 @@ export class Translating extends StateNode {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
override onKeyUp() {
|
|
135
|
-
if (!this.editor.inputs.
|
|
135
|
+
if (!this.editor.inputs.getAltKey() && this.isCloning) {
|
|
136
136
|
this.stopCloning()
|
|
137
137
|
return
|
|
138
138
|
}
|
|
@@ -258,7 +258,7 @@ export class Translating extends StateNode {
|
|
|
258
258
|
// Get fresh shapes from the snapshot, in case onTranslateStart mutates the shape
|
|
259
259
|
compact(this.snapshot.movingShapes.map((s) => this.editor.getShape(s.id))),
|
|
260
260
|
// Start from the place where the user started dragging
|
|
261
|
-
this.editor.inputs.
|
|
261
|
+
this.editor.inputs.getOriginPagePoint(),
|
|
262
262
|
this.updateParentTransforms
|
|
263
263
|
)
|
|
264
264
|
|
|
@@ -305,7 +305,7 @@ export class Translating extends StateNode {
|
|
|
305
305
|
// We should have started already, but hey
|
|
306
306
|
this.dragAndDropManager.startDraggingShapes(
|
|
307
307
|
snapshot.movingShapes,
|
|
308
|
-
this.editor.inputs.
|
|
308
|
+
this.editor.inputs.getOriginPagePoint(),
|
|
309
309
|
this.updateParentTransforms
|
|
310
310
|
)
|
|
311
311
|
|
|
@@ -404,7 +404,7 @@ function getTranslatingSnapshot(editor: Editor) {
|
|
|
404
404
|
let noteAdjacentPositions: Vec[] | undefined
|
|
405
405
|
let noteSnapshot: (MovingShapeSnapshot & { shape: TLNoteShape }) | undefined
|
|
406
406
|
|
|
407
|
-
const
|
|
407
|
+
const originPagePoint = editor.inputs.getOriginPagePoint()
|
|
408
408
|
|
|
409
409
|
const allHoveredNotes = shapeSnapshots.filter(
|
|
410
410
|
(s) => editor.isShapeOfType(s.shape, 'note') && editor.isPointInShape(s.shape, originPagePoint)
|
|
@@ -473,13 +473,16 @@ export function moveShapesToPoint({
|
|
|
473
473
|
averagePagePoint,
|
|
474
474
|
} = snapshot
|
|
475
475
|
|
|
476
|
+
const shiftKey = editor.inputs.getShiftKey()
|
|
477
|
+
const accelKey = editor.inputs.getAccelKey()
|
|
478
|
+
|
|
476
479
|
const isGridMode = editor.getInstanceState().isGridMode
|
|
477
480
|
|
|
478
481
|
const gridSize = editor.getDocumentSettings().gridSize
|
|
479
482
|
|
|
480
|
-
const delta = Vec.Sub(inputs.
|
|
483
|
+
const delta = Vec.Sub(inputs.getCurrentPagePoint(), inputs.getOriginPagePoint())
|
|
481
484
|
|
|
482
|
-
const flatten: 'x' | 'y' | null =
|
|
485
|
+
const flatten: 'x' | 'y' | null = shiftKey
|
|
483
486
|
? Math.abs(delta.x) < Math.abs(delta.y)
|
|
484
487
|
? 'x'
|
|
485
488
|
: 'y'
|
|
@@ -495,9 +498,9 @@ export function moveShapesToPoint({
|
|
|
495
498
|
editor.snaps.clearIndicators()
|
|
496
499
|
|
|
497
500
|
// If the user isn't moving super quick
|
|
498
|
-
const isSnapping = editor.user.getIsSnapMode() ? !
|
|
501
|
+
const isSnapping = editor.user.getIsSnapMode() ? !accelKey : accelKey
|
|
499
502
|
let snappedToPit = false
|
|
500
|
-
if (isSnapping && editor.inputs.
|
|
503
|
+
if (isSnapping && editor.inputs.getPointerVelocity().len() < 0.5) {
|
|
501
504
|
// snapping
|
|
502
505
|
const { nudge } = editor.snaps.shapeBounds.snapTranslateShapes({
|
|
503
506
|
dragDelta: delta,
|
|
@@ -537,9 +540,9 @@ export function moveShapesToPoint({
|
|
|
537
540
|
|
|
538
541
|
const averageSnappedPoint = Vec.Add(averagePagePoint, delta)
|
|
539
542
|
|
|
540
|
-
// we don't want to snap to the grid if we're holding the
|
|
543
|
+
// we don't want to snap to the grid if we're holding the accel key, if we've already snapped into a pit, or if we're showing snapping indicators
|
|
541
544
|
const snapIndicators = editor.snaps.getIndicators()
|
|
542
|
-
if (isGridMode && !
|
|
545
|
+
if (isGridMode && !accelKey && !snappedToPit && snapIndicators.length === 0) {
|
|
543
546
|
averageSnappedPoint.snapToGrid(gridSize)
|
|
544
547
|
}
|
|
545
548
|
|
|
@@ -1,15 +1,50 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Editor,
|
|
3
|
+
ExtractShapeByProps,
|
|
4
|
+
richTextValidator,
|
|
5
|
+
TLEventInfo,
|
|
6
|
+
TLRichText,
|
|
7
|
+
TLShape,
|
|
8
|
+
TLShapeId,
|
|
9
|
+
} from '@tldraw/editor'
|
|
2
10
|
|
|
3
11
|
/** @internal */
|
|
4
|
-
export function
|
|
12
|
+
export function hasRichText(
|
|
13
|
+
shape: TLShape
|
|
14
|
+
): shape is ExtractShapeByProps<{ richText: TLRichText }> {
|
|
15
|
+
return 'richText' in shape.props && richTextValidator.isValid(shape.props.richText)
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Start editing a shape that has rich text, such as text, note, geo, or arrow shapes.
|
|
19
|
+
* This will enter the editing state for the shape and optionally select all the text.
|
|
20
|
+
*
|
|
21
|
+
* @param editor - The editor instance.
|
|
22
|
+
* @param shapeOrId - The shape to start editing. This shape must have a richText property with a TLRichText value.
|
|
23
|
+
* @param options - Options: selectAll or info (TLEventInfo)
|
|
24
|
+
*
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export function startEditingShapeWithRichText(
|
|
28
|
+
editor: Editor,
|
|
29
|
+
shapeOrId: TLShape | TLShapeId,
|
|
30
|
+
options: { selectAll?: boolean; info?: TLEventInfo } = {}
|
|
31
|
+
) {
|
|
32
|
+
const shape = typeof shapeOrId === 'string' ? editor.getShape(shapeOrId) : shapeOrId
|
|
33
|
+
if (!shape) return
|
|
34
|
+
|
|
35
|
+
if (!editor.canEditShape(shape)) return
|
|
36
|
+
|
|
37
|
+
if (!hasRichText(shape)) {
|
|
38
|
+
throw new Error('Shape does not have rich text')
|
|
39
|
+
}
|
|
5
40
|
// Finish this shape and start editing the next one
|
|
6
|
-
editor.select(shape)
|
|
7
41
|
editor.setEditingShape(shape)
|
|
8
42
|
editor.setCurrentTool('select.editing_shape', {
|
|
43
|
+
...options.info,
|
|
9
44
|
target: 'shape',
|
|
10
45
|
shape: shape,
|
|
11
46
|
})
|
|
12
|
-
if (selectAll) {
|
|
47
|
+
if (options.selectAll) {
|
|
13
48
|
editor.emit('select-all-text', { shapeId: shape.id })
|
|
14
49
|
}
|
|
15
50
|
}
|
|
@@ -57,7 +57,7 @@ export class ZoomTool extends StateNode {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
private updateCursor() {
|
|
60
|
-
if (this.editor.inputs.
|
|
60
|
+
if (this.editor.inputs.getAltKey()) {
|
|
61
61
|
this.editor.setCursor({ type: 'zoom-out', rotation: 0 })
|
|
62
62
|
} else {
|
|
63
63
|
this.editor.setCursor({ type: 'zoom-in', rotation: 0 })
|
|
@@ -14,7 +14,7 @@ export class Pointing extends StateNode {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
override onPointerMove() {
|
|
17
|
-
if (this.editor.inputs.
|
|
17
|
+
if (this.editor.inputs.getIsDragging()) {
|
|
18
18
|
this.parent.transition('zoom_brushing', this.info)
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -24,8 +24,8 @@ export class Pointing extends StateNode {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
private complete() {
|
|
27
|
-
const
|
|
28
|
-
if (this.editor.inputs.
|
|
27
|
+
const currentScreenPoint = this.editor.inputs.getCurrentScreenPoint()
|
|
28
|
+
if (this.editor.inputs.getAltKey()) {
|
|
29
29
|
this.editor.zoomOut(currentScreenPoint, { animation: { duration: 220 } })
|
|
30
30
|
} else {
|
|
31
31
|
this.editor.zoomIn(currentScreenPoint, { animation: { duration: 220 } })
|
|
@@ -29,9 +29,8 @@ export class ZoomBrushing extends StateNode {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
private update() {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
} = this.editor
|
|
32
|
+
const originPagePoint = this.editor.inputs.getOriginPagePoint()
|
|
33
|
+
const currentPagePoint = this.editor.inputs.getCurrentPagePoint()
|
|
35
34
|
|
|
36
35
|
this.zoomBrush.setTo(Box.FromPoints([originPagePoint, currentPagePoint]))
|
|
37
36
|
this.editor.updateInstanceState({ zoomBrush: this.zoomBrush.toJson() })
|
|
@@ -46,14 +45,14 @@ export class ZoomBrushing extends StateNode {
|
|
|
46
45
|
const threshold = 8 / this.editor.getZoomLevel()
|
|
47
46
|
// If the selected area is small then treat it as a click
|
|
48
47
|
if (zoomBrush.width < threshold && zoomBrush.height < threshold) {
|
|
49
|
-
const point = this.editor.inputs.
|
|
50
|
-
if (this.editor.inputs.
|
|
48
|
+
const point = this.editor.inputs.getCurrentScreenPoint()
|
|
49
|
+
if (this.editor.inputs.getAltKey()) {
|
|
51
50
|
this.editor.zoomOut(point, { animation: { duration: 220 } })
|
|
52
51
|
} else {
|
|
53
52
|
this.editor.zoomIn(point, { animation: { duration: 220 } })
|
|
54
53
|
}
|
|
55
54
|
} else {
|
|
56
|
-
const targetZoom = this.editor.inputs.
|
|
55
|
+
const targetZoom = this.editor.inputs.getAltKey() ? this.editor.getZoomLevel() / 2 : undefined
|
|
57
56
|
this.editor.zoomToBounds(zoomBrush, { targetZoom, animation: { duration: 220 } })
|
|
58
57
|
}
|
|
59
58
|
|
|
@@ -6,9 +6,7 @@ export function getHitShapeOnCanvasPointerDown(
|
|
|
6
6
|
hitLabels = false
|
|
7
7
|
): TLShape | undefined {
|
|
8
8
|
const zoomLevel = editor.getZoomLevel()
|
|
9
|
-
const
|
|
10
|
-
inputs: { currentPagePoint },
|
|
11
|
-
} = editor
|
|
9
|
+
const currentPagePoint = editor.inputs.getCurrentPagePoint()
|
|
12
10
|
|
|
13
11
|
return (
|
|
14
12
|
// hovered shape at point
|
|
@@ -5,7 +5,7 @@ export function selectOnCanvasPointerUp(
|
|
|
5
5
|
info: TLPointerEventInfo | TLClickEventInfo
|
|
6
6
|
) {
|
|
7
7
|
const selectedShapeIds = editor.getSelectedShapeIds()
|
|
8
|
-
const
|
|
8
|
+
const currentPagePoint = editor.inputs.getCurrentPagePoint()
|
|
9
9
|
const { shiftKey, altKey, accelKey } = info
|
|
10
10
|
const additiveSelectionKey = shiftKey || accelKey
|
|
11
11
|
|
|
@@ -2,7 +2,7 @@ import { Editor, TLShape, throttle } from '@tldraw/editor'
|
|
|
2
2
|
|
|
3
3
|
function _updateHoveredShapeId(editor: Editor) {
|
|
4
4
|
// todo: consider replacing `get hoveredShapeId` with this; it would mean keeping hoveredShapeId in memory rather than in the store and possibly re-computing it more often than necessary
|
|
5
|
-
const hitShape = editor.getShapeAtPoint(editor.inputs.
|
|
5
|
+
const hitShape = editor.getShapeAtPoint(editor.inputs.getCurrentPagePoint(), {
|
|
6
6
|
hitInside: false,
|
|
7
7
|
hitLabels: false,
|
|
8
8
|
margin: editor.options.hitTestMargin / editor.getZoomLevel(),
|
package/src/lib/ui/TldrawUi.tsx
CHANGED
|
@@ -81,6 +81,11 @@ const TldrawUiInner = React.memo(function TldrawUiInner({
|
|
|
81
81
|
// If we ever need want the UI to mount and preserve state, then
|
|
82
82
|
// we should change this behavior and hide the UI via CSS instead.
|
|
83
83
|
|
|
84
|
+
// Keyboard shortcuts and clipboard events should always be mounted,
|
|
85
|
+
// even when the UI is hidden.
|
|
86
|
+
useKeyboardShortcuts()
|
|
87
|
+
useNativeClipboardEvents()
|
|
88
|
+
|
|
84
89
|
return (
|
|
85
90
|
<>
|
|
86
91
|
{children}
|
|
@@ -112,8 +117,6 @@ const TldrawUiContent = React.memo(function TldrawUI() {
|
|
|
112
117
|
A11y,
|
|
113
118
|
} = useTldrawUiComponents()
|
|
114
119
|
|
|
115
|
-
useKeyboardShortcuts()
|
|
116
|
-
useNativeClipboardEvents()
|
|
117
120
|
useEditorEvents()
|
|
118
121
|
|
|
119
122
|
const rIsEditingAnything = useRef(false)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { useEditor, useValue } from '@tldraw/editor'
|
|
2
1
|
import { PORTRAIT_BREAKPOINT } from '../../constants'
|
|
3
2
|
import { useBreakpoint } from '../../context/breakpoints'
|
|
4
3
|
import {
|
|
@@ -9,6 +8,7 @@ import {
|
|
|
9
8
|
useThreeStackableItems,
|
|
10
9
|
useUnlockedSelectedShapesCount,
|
|
11
10
|
} from '../../hooks/menu-hooks'
|
|
11
|
+
import { ZoomTo100MenuItem } from '../menu-items'
|
|
12
12
|
import { TldrawUiMenuActionItem } from '../primitives/menus/TldrawUiMenuActionItem'
|
|
13
13
|
|
|
14
14
|
/** @public @react */
|
|
@@ -99,14 +99,6 @@ export function ZoomOrRotateMenuItem() {
|
|
|
99
99
|
}
|
|
100
100
|
/** @public @react */
|
|
101
101
|
|
|
102
|
-
export function ZoomTo100MenuItem() {
|
|
103
|
-
const editor = useEditor()
|
|
104
|
-
const isZoomedTo100 = useValue('zoom is 1', () => editor.getZoomLevel() === 1, [editor])
|
|
105
|
-
|
|
106
|
-
return <TldrawUiMenuActionItem actionId="zoom-to-100" disabled={isZoomedTo100} />
|
|
107
|
-
}
|
|
108
|
-
/** @public @react */
|
|
109
|
-
|
|
110
102
|
export function RotateCCWMenuItem() {
|
|
111
103
|
const oneSelected = useUnlockedSelectedShapesCount(1)
|
|
112
104
|
const isInSelectState = useIsInSelectState()
|
|
@@ -66,9 +66,7 @@ export const DefaultContextMenu = memo(function DefaultContextMenu({
|
|
|
66
66
|
// Weird route: selecting locked shapes on long press
|
|
67
67
|
if (editor.getInstanceState().isCoarsePointer) {
|
|
68
68
|
const selectedShapes = editor.getSelectedShapes()
|
|
69
|
-
const
|
|
70
|
-
inputs: { currentPagePoint },
|
|
71
|
-
} = editor
|
|
69
|
+
const currentPagePoint = editor.inputs.getCurrentPagePoint()
|
|
72
70
|
|
|
73
71
|
// get all of the shapes under the current pointer
|
|
74
72
|
const shapesAtPoint = editor.getShapesAtPoint(currentPagePoint)
|
|
@@ -46,14 +46,14 @@ export const CursorChatBubble = track(function CursorChatBubble() {
|
|
|
46
46
|
return chatMessage.trim() ? <NotEditingChatMessage chatMessage={chatMessage} /> : null
|
|
47
47
|
})
|
|
48
48
|
|
|
49
|
-
function usePositionBubble(ref: RefObject<HTMLInputElement>) {
|
|
49
|
+
function usePositionBubble(ref: RefObject<HTMLInputElement | null>) {
|
|
50
50
|
const editor = useEditor()
|
|
51
51
|
|
|
52
52
|
useLayoutEffect(() => {
|
|
53
53
|
const elm = ref.current
|
|
54
54
|
if (!elm) return
|
|
55
55
|
|
|
56
|
-
const { x, y } = editor.inputs.
|
|
56
|
+
const { x, y } = editor.inputs.getCurrentScreenPoint()
|
|
57
57
|
ref.current?.style.setProperty('transform', `translate(${x}px, ${y}px)`)
|
|
58
58
|
|
|
59
59
|
// Positioning the chat bubble
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
track,
|
|
4
|
-
useEditor,
|
|
5
|
-
usePassThroughWheelEvents,
|
|
6
|
-
useValue,
|
|
7
|
-
Vec,
|
|
8
|
-
} from '@tldraw/editor'
|
|
9
|
-
import { memo, useEffect, useRef, useState } from 'react'
|
|
1
|
+
import { debugFlags, track, useEditor, usePassThroughWheelEvents, useValue } from '@tldraw/editor'
|
|
2
|
+
import { memo, useEffect, useRef } from 'react'
|
|
10
3
|
import { useTldrawUiComponents } from '../context/components'
|
|
11
4
|
|
|
12
5
|
/** @internal */
|
|
@@ -25,42 +18,10 @@ export const DefaultDebugPanel = memo(function DefaultDebugPanel() {
|
|
|
25
18
|
)
|
|
26
19
|
})
|
|
27
20
|
|
|
28
|
-
function useTick(isEnabled = true) {
|
|
29
|
-
const [_, setTick] = useState(0)
|
|
30
|
-
const editor = useEditor()
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
if (!isEnabled) return
|
|
33
|
-
const update = () => setTick((tick) => tick + 1)
|
|
34
|
-
editor.on('tick', update)
|
|
35
|
-
return () => {
|
|
36
|
-
editor.off('tick', update)
|
|
37
|
-
}
|
|
38
|
-
}, [editor, isEnabled])
|
|
39
|
-
}
|
|
40
|
-
|
|
41
21
|
const CurrentState = track(function CurrentState() {
|
|
42
|
-
useTick()
|
|
43
|
-
|
|
44
22
|
const editor = useEditor()
|
|
45
|
-
|
|
46
23
|
const path = editor.getPath()
|
|
47
|
-
|
|
48
|
-
const selectedShape = editor.getOnlySelectedShape()
|
|
49
|
-
const shape = path === 'select.idle' || !path.includes('select.') ? hoverShape : selectedShape
|
|
50
|
-
const shapeInfo =
|
|
51
|
-
shape && path.includes('select.')
|
|
52
|
-
? ` / ${shape.type || ''}${
|
|
53
|
-
'geo' in shape.props ? ' / ' + shape.props.geo : ''
|
|
54
|
-
} / [${Vec.ToInt(editor.getPointInShapeSpace(shape, editor.inputs.currentPagePoint))}]`
|
|
55
|
-
: ''
|
|
56
|
-
const ruler =
|
|
57
|
-
path.startsWith('select.') && !path.includes('.idle')
|
|
58
|
-
? ` / [${Vec.ToInt(editor.inputs.originPagePoint)}] → [${Vec.ToInt(
|
|
59
|
-
editor.inputs.currentPagePoint
|
|
60
|
-
)}] = ${Vec.Dist(editor.inputs.originPagePoint, editor.inputs.currentPagePoint).toFixed(0)}`
|
|
61
|
-
: ''
|
|
62
|
-
|
|
63
|
-
return <div className="tlui-debug-panel__current-state">{`${path}${shapeInfo}${ruler}`}</div>
|
|
24
|
+
return <div className="tlui-debug-panel__current-state">{`${path}`}</div>
|
|
64
25
|
})
|
|
65
26
|
|
|
66
27
|
function FPS() {
|
|
@@ -110,7 +71,7 @@ function FPS() {
|
|
|
110
71
|
isSlow = !isSlow
|
|
111
72
|
}
|
|
112
73
|
|
|
113
|
-
fpsRef.current!.innerHTML = `FPS ${fps.toString()}`
|
|
74
|
+
fpsRef.current!.innerHTML = `FPS ${fps.toString()} (max: ${maxKnownFps})`
|
|
114
75
|
fpsRef.current!.className =
|
|
115
76
|
`tlui-debug-panel__fps` + (isSlow ? ` tlui-debug-panel__fps__slow` : ``)
|
|
116
77
|
|
|
@@ -18,7 +18,7 @@ export function BackToContent() {
|
|
|
18
18
|
const shapeIds = editor.getCurrentPageShapeIds()
|
|
19
19
|
let showBackToContentNow = false
|
|
20
20
|
if (shapeIds.size) {
|
|
21
|
-
showBackToContentNow = shapeIds.size === editor.
|
|
21
|
+
showBackToContentNow = shapeIds.size === editor.getNotVisibleShapes().size
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
if (showBackToContentPrev !== showBackToContentNow) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEditor, useValue } from '@tldraw/editor'
|
|
2
2
|
import { useActions } from '../../context/actions'
|
|
3
|
-
import { TldrawUiMenuItem } from '../primitives/menus/TldrawUiMenuItem'
|
|
3
|
+
import { TldrawUiMenuItem, type TLUiMenuItemProps } from '../primitives/menus/TldrawUiMenuItem'
|
|
4
4
|
|
|
5
5
|
export function StopFollowing() {
|
|
6
6
|
const editor = useEditor()
|
|
@@ -13,5 +13,5 @@ export function StopFollowing() {
|
|
|
13
13
|
)
|
|
14
14
|
if (!followingUser) return null
|
|
15
15
|
|
|
16
|
-
return <TldrawUiMenuItem {...actions['stop-following']} />
|
|
16
|
+
return <TldrawUiMenuItem {...(actions['stop-following'] as TLUiMenuItemProps)} />
|
|
17
17
|
}
|
|
@@ -24,7 +24,7 @@ export function DefaultMinimap() {
|
|
|
24
24
|
const rCanvas = React.useRef<HTMLCanvasElement>(null!)
|
|
25
25
|
const rPointing = React.useRef(false)
|
|
26
26
|
|
|
27
|
-
const minimapRef = React.useRef<MinimapManager>()
|
|
27
|
+
const minimapRef = React.useRef<MinimapManager | undefined>(undefined)
|
|
28
28
|
|
|
29
29
|
React.useEffect(() => {
|
|
30
30
|
try {
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import classNames from 'classnames'
|
|
2
1
|
import { useTranslation } from '../../hooks/useTranslation/useTranslation'
|
|
3
2
|
import { TldrawUiIcon } from '../primitives/TldrawUiIcon'
|
|
3
|
+
import { TldrawUiTooltip } from '../primitives/TldrawUiTooltip'
|
|
4
4
|
|
|
5
5
|
/** @public @react */
|
|
6
6
|
export function OfflineIndicator() {
|
|
7
7
|
const msg = useTranslation()
|
|
8
8
|
|
|
9
9
|
return (
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
<TldrawUiTooltip content={msg('status.offline')}>
|
|
11
|
+
<div className="tlui-offline-indicator">
|
|
12
|
+
<TldrawUiIcon icon="status-offline" label={msg('status.offline')} small />
|
|
13
|
+
</div>
|
|
14
|
+
</TldrawUiTooltip>
|
|
14
15
|
)
|
|
15
16
|
}
|
|
@@ -48,7 +48,9 @@ export const PageItemInput = function PageItemInput({
|
|
|
48
48
|
return (
|
|
49
49
|
<TldrawUiInput
|
|
50
50
|
className="tlui-page-menu__item__input"
|
|
51
|
-
ref={(el) =>
|
|
51
|
+
ref={(el) => {
|
|
52
|
+
rInput.current = el
|
|
53
|
+
}}
|
|
52
54
|
defaultValue={name}
|
|
53
55
|
onValueChange={handleChange}
|
|
54
56
|
onComplete={onComplete}
|
|
@@ -3,8 +3,10 @@ import { Popover as _Popover } from 'radix-ui'
|
|
|
3
3
|
import { ReactNode } from 'react'
|
|
4
4
|
import { PORTRAIT_BREAKPOINT } from '../../constants'
|
|
5
5
|
import { useBreakpoint } from '../../context/breakpoints'
|
|
6
|
+
import { useCollaborationStatus } from '../../hooks/useCollaborationStatus'
|
|
6
7
|
import { useMenuIsOpen } from '../../hooks/useMenuIsOpen'
|
|
7
8
|
import { useTranslation } from '../../hooks/useTranslation/useTranslation'
|
|
9
|
+
import { OfflineIndicator } from '../OfflineIndicator/OfflineIndicator'
|
|
8
10
|
import { PeopleMenuAvatar } from './PeopleMenuAvatar'
|
|
9
11
|
import { PeopleMenuItem } from './PeopleMenuItem'
|
|
10
12
|
import { PeopleMenuMore } from './PeopleMenuMore'
|
|
@@ -30,6 +32,12 @@ export function PeopleMenu({ children }: PeopleMenuProps) {
|
|
|
30
32
|
const breakpoint = useBreakpoint()
|
|
31
33
|
const maxAvatars = breakpoint <= PORTRAIT_BREAKPOINT.MOBILE_XS ? 1 : 5
|
|
32
34
|
|
|
35
|
+
const collaborationStatus = useCollaborationStatus()
|
|
36
|
+
|
|
37
|
+
if (collaborationStatus === 'offline') {
|
|
38
|
+
return <OfflineIndicator />
|
|
39
|
+
}
|
|
40
|
+
|
|
33
41
|
if (!userIds.length) return null
|
|
34
42
|
|
|
35
43
|
return (
|
|
@@ -63,7 +63,7 @@ function ContextualToolbarInner({
|
|
|
63
63
|
)
|
|
64
64
|
const camera = useValue('camera', () => editor.getCamera(), [editor])
|
|
65
65
|
const isInCropTool = useValue('editor path', () => editor.isIn('select.crop.'), [editor])
|
|
66
|
-
const previousSelectionBounds = useRef<Box | undefined>()
|
|
66
|
+
const previousSelectionBounds = useRef<Box | undefined>(undefined)
|
|
67
67
|
const handleManipulatingEnd = useCallback(() => {
|
|
68
68
|
editor.setCroppingShape(null)
|
|
69
69
|
editor.setCurrentTool('select.idle')
|
|
@@ -38,7 +38,7 @@ function ContextualToolbarInner({
|
|
|
38
38
|
}) {
|
|
39
39
|
const { isEditingLink, onEditLinkStart, onEditLinkClose } = useEditingLinkBehavior(textEditor)
|
|
40
40
|
const [currentSelection, setCurrentSelection] = useState<Range | null>(null)
|
|
41
|
-
const previousSelectionBounds = useRef<Box | undefined>()
|
|
41
|
+
const previousSelectionBounds = useRef<Box | undefined>(undefined)
|
|
42
42
|
const isMousingDown = useIsMousingDownOnTextEditor(textEditor)
|
|
43
43
|
const msg = useTranslation()
|
|
44
44
|
|
|
@@ -182,7 +182,9 @@ export function UnlockAllMenuItem() {
|
|
|
182
182
|
/** @public @react */
|
|
183
183
|
export function ZoomTo100MenuItem() {
|
|
184
184
|
const editor = useEditor()
|
|
185
|
-
const isZoomedTo100 = useValue('zoomed to 100', () => editor.
|
|
185
|
+
const isZoomedTo100 = useValue('zoomed to 100', () => editor.getEfficientZoomLevel() === 1, [
|
|
186
|
+
editor,
|
|
187
|
+
])
|
|
186
188
|
|
|
187
189
|
return <TldrawUiMenuActionItem actionId="zoom-to-100" noClose disabled={isZoomedTo100} />
|
|
188
190
|
}
|
|
@@ -52,8 +52,8 @@ export const TldrawUiContextualToolbar = ({
|
|
|
52
52
|
const editor = useEditor()
|
|
53
53
|
const toolbarRef = useRef<HTMLDivElement>(null)
|
|
54
54
|
|
|
55
|
-
usePassThroughWheelEvents(toolbarRef as RefObject<HTMLDivElement>)
|
|
56
|
-
usePassThroughMouseOverEvents(toolbarRef as RefObject<HTMLDivElement>)
|
|
55
|
+
usePassThroughWheelEvents(toolbarRef as RefObject<HTMLDivElement | null>)
|
|
56
|
+
usePassThroughMouseOverEvents(toolbarRef as RefObject<HTMLDivElement | null>)
|
|
57
57
|
|
|
58
58
|
const { isVisible, isInteractive, hide, show, position, move } =
|
|
59
59
|
useToolbarVisibilityStateMachine(changeOnlyWhenYChanges)
|
|
@@ -105,7 +105,9 @@ export const TldrawUiContextualToolbar = ({
|
|
|
105
105
|
// to have the last updated position in page space, so that we could convert
|
|
106
106
|
// it to screen space and update it here
|
|
107
107
|
const elm = toolbarRef.current
|
|
108
|
-
|
|
108
|
+
if (elm) {
|
|
109
|
+
elm.style.setProperty('transform', `translate(${position.x}px, ${position.y}px)`)
|
|
110
|
+
}
|
|
109
111
|
} else {
|
|
110
112
|
const moveImmediately = lastContentSizeUpdateCounter !== nextContentSizeUpdateCounter
|
|
111
113
|
// Schedule a move to its next location
|
|
@@ -3,7 +3,7 @@ import { Slider as _Slider } from 'radix-ui'
|
|
|
3
3
|
import React, { useCallback, useEffect, useState } from 'react'
|
|
4
4
|
import { TLUiTranslationKey } from '../../hooks/useTranslation/TLUiTranslationKey'
|
|
5
5
|
import { useTranslation } from '../../hooks/useTranslation/useTranslation'
|
|
6
|
-
import {
|
|
6
|
+
import { hideAllTooltips, TldrawUiTooltip } from './TldrawUiTooltip'
|
|
7
7
|
|
|
8
8
|
/** @public */
|
|
9
9
|
export interface TLUiSliderProps {
|
|
@@ -52,7 +52,7 @@ export const TldrawUiSlider = React.forwardRef<HTMLDivElement, TLUiSliderProps>(
|
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
const handlePointerDown = useCallback(() => {
|
|
55
|
-
|
|
55
|
+
hideAllTooltips()
|
|
56
56
|
onHistoryMark?.('click slider')
|
|
57
57
|
}, [onHistoryMark])
|
|
58
58
|
|