tldraw 3.15.1 → 3.16.0-canary.01f62b6d4455
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-cjs/index.d.ts +271 -9
- package/dist-cjs/index.js +28 -2
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/canvas/TldrawCropHandles.js.map +2 -2
- package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
- package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
- package/dist-cjs/lib/defaultExternalContentHandlers.js +1 -0
- package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +25 -39
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js +16 -4
- 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/ElbowArrowDebug.js +3 -3
- package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +3 -0
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -3
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +12 -12
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
- package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +2 -2
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
- package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -1
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +3 -3
- package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +1 -1
- package/dist-cjs/lib/shapes/line/LineShapeUtil.js +20 -2
- package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +4 -4
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
- package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
- package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +43 -22
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +2 -15
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +5 -0
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +8 -0
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +8 -0
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +8 -0
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js +14 -0
- package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
- package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
- package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
- package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +40 -0
- package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
- package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
- package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
- package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
- package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
- package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
- package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
- package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
- package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
- package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +2 -0
- package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +171 -140
- package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js +3 -3
- package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +2 -2
- package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js +26 -25
- package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +3 -3
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
- package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
- package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
- package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
- package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
- package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
- package/dist-cjs/lib/ui/components/menu-items.js +6 -0
- package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +5 -16
- package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +3 -3
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -0
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +30 -7
- package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +268 -0
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
- package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
- package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +154 -20
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
- package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
- package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
- package/dist-cjs/lib/ui/context/actions.js +29 -7
- package/dist-cjs/lib/ui/context/actions.js.map +2 -2
- package/dist-cjs/lib/ui/context/events.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTools.js +94 -9
- package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +7 -0
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
- package/dist-cjs/lib/ui/kbd-utils.js +2 -1
- package/dist-cjs/lib/ui/kbd-utils.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 +1 -1
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +3 -2
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
- package/dist-esm/index.d.mts +271 -9
- package/dist-esm/index.mjs +44 -3
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawCropHandles.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
- package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
- package/dist-esm/lib/defaultExternalContentHandlers.mjs +1 -0
- package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +28 -39
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +19 -5
- 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/ElbowArrowDebug.mjs +3 -3
- package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +3 -0
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +13 -12
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
- package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
- package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +3 -3
- package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +1 -1
- package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +21 -2
- package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +5 -4
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
- package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +43 -22
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +2 -15
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +5 -0
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +8 -0
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +8 -0
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +8 -0
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs +16 -2
- package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
- package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
- package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
- package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +40 -0
- package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
- package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
- package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
- package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
- package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
- package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
- package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
- package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
- package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
- package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +3 -1
- package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +171 -140
- package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs +3 -3
- package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +2 -2
- package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs +26 -25
- package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
- package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
- package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
- package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
- package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
- package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
- package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +6 -6
- package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -1
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +1 -0
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +30 -7
- package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +245 -0
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
- package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
- package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +162 -22
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
- package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
- package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
- package/dist-esm/lib/ui/context/actions.mjs +29 -7
- package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
- package/dist-esm/lib/ui/context/events.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTools.mjs +102 -10
- package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +7 -0
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
- package/dist-esm/lib/ui/kbd-utils.mjs +2 -1
- package/dist-esm/lib/ui/kbd-utils.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 +1 -1
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +3 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
- package/package.json +9 -33
- package/src/index.ts +32 -1
- package/src/lib/canvas/TldrawCropHandles.tsx +2 -0
- package/src/lib/canvas/TldrawScribble.tsx +1 -1
- package/src/lib/defaultExternalContentHandlers.ts +2 -1
- package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
- package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +4 -3
- package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +12 -11
- package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +29 -42
- package/src/lib/shapes/arrow/arrowLabel.ts +23 -3
- package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
- package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
- package/src/lib/shapes/arrow/toolStates/Pointing.tsx +3 -0
- package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
- package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
- package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +21 -14
- package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
- package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
- package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
- package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
- package/src/lib/shapes/image/ImageShapeUtil.tsx +3 -3
- package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
- package/src/lib/shapes/line/LineShapeUtil.tsx +25 -3
- package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
- package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -4
- package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
- package/src/lib/shapes/shared/freehand/svg.ts +2 -0
- package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
- package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
- package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
- package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
- package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
- package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
- package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +54 -30
- package/src/lib/tools/SelectTool/childStates/Idle.ts +2 -24
- package/src/lib/tools/SelectTool/childStates/PointingShape.ts +7 -0
- package/src/lib/tools/SelectTool/childStates/Resizing.ts +12 -1
- package/src/lib/tools/SelectTool/childStates/Rotating.ts +11 -0
- package/src/lib/tools/SelectTool/childStates/Translating.ts +11 -1
- package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +1 -0
- package/src/lib/ui/TldrawUi.tsx +17 -2
- package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
- package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
- package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
- package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +32 -0
- package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
- package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
- package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
- package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
- package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
- package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
- package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
- package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
- package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +146 -107
- package/src/lib/ui/components/StylePanel/DoubleDropdownPicker.tsx +3 -3
- package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +7 -6
- package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +1 -1
- package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
- package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
- package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +17 -12
- package/src/lib/ui/components/menu-items.tsx +8 -0
- package/src/lib/ui/components/primitives/TldrawUiButtonPicker.tsx +40 -37
- package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -1
- package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
- package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +1 -0
- package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +51 -12
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +327 -0
- package/src/lib/ui/components/primitives/layout.tsx +107 -0
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +221 -19
- package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
- package/src/lib/ui/context/actions.tsx +29 -7
- package/src/lib/ui/context/events.tsx +4 -2
- package/src/lib/ui/hooks/menu-hooks.ts +1 -0
- package/src/lib/ui/hooks/useTools.tsx +140 -10
- package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +7 -0
- package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +7 -0
- package/src/lib/ui/kbd-utils.ts +2 -1
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +406 -292
- package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +21 -7
- package/src/lib/utils/excalidraw/putExcalidrawContent.ts +1 -1
- package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +28 -7
- package/src/lib/utils/tldr/buildFromV1Document.ts +2 -1
- package/src/test/A11y.test.tsx +3 -2
- package/src/test/ClickManager.test.ts +7 -6
- package/src/test/Editor.test.tsx +20 -19
- package/src/test/EraserTool.test.ts +184 -13
- package/src/test/HandTool.test.ts +10 -9
- package/src/test/HighlightShape.test.ts +2 -1
- package/src/test/SelectTool.test.ts +40 -13
- package/src/test/TLUserPreferences.test.ts +4 -3
- package/src/test/TestEditor.ts +13 -15
- package/src/test/TldrawEditor.test.tsx +11 -10
- package/src/test/ZoomTool.test.ts +7 -6
- package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
- package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
- package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
- package/src/test/arrows-megabus.test.tsx +17 -10
- package/src/test/bindings.test.tsx +24 -37
- package/src/test/bookmark-shapes.test.ts +1 -8
- package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
- package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
- package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
- package/src/test/commands/alignShapes.test.tsx +25 -24
- package/src/test/commands/animationSpeed.test.ts +2 -1
- package/src/test/commands/centerOnPoint.test.ts +3 -2
- package/src/test/commands/clipboard.test.ts +3 -2
- package/src/test/commands/createShapes.test.ts +2 -1
- package/src/test/commands/deletePage.test.ts +84 -1
- package/src/test/commands/deleteShapes.test.ts +2 -1
- package/src/test/commands/distributeShapes.test.tsx +11 -10
- package/src/test/commands/getSvgString.test.ts +2 -1
- package/src/test/commands/packShapes.test.ts +5 -4
- package/src/test/commands/resizeShape.test.ts +2 -1
- package/src/test/commands/rotateShapes.test.ts +7 -6
- package/src/test/commands/setCamera.test.ts +4 -3
- package/src/test/commands/setCurrentPage.test.ts +3 -2
- package/src/test/commands/stackShapes.test.ts +11 -10
- package/src/test/commands/stretch.test.tsx +13 -12
- package/src/test/createDeepLink.test.tsx +2 -1
- package/src/test/cropping.test.ts +3 -2
- package/src/test/drawing.test.ts +2 -1
- package/src/test/flipShapes.test.ts +4 -3
- package/src/test/frames.test.ts +25 -24
- package/src/test/getCulledShapes.test.tsx +3 -2
- package/src/test/groups.test.tsx +1 -1
- package/src/test/handleDeepLink.test.tsx +2 -1
- package/src/test/inner-outer-margin.test.ts +315 -0
- package/src/test/maxShapes.test.ts +3 -2
- package/src/test/modifiers.test.ts +5 -4
- package/src/test/navigation.test.ts +12 -11
- package/src/test/panning.test.ts +2 -1
- package/src/test/perf/perf.test.ts +2 -1
- package/src/test/registerDeepLinkListener.test.tsx +10 -9
- package/src/test/resizing.test.ts +39 -38
- package/src/test/select.test.tsx +4 -3
- package/src/test/selection-omnibus.test.ts +11 -10
- package/src/test/shapeutils.test.ts +398 -48
- package/src/test/translating.test.ts +9 -8
- package/tldraw.css +703 -603
package/src/index.ts
CHANGED
|
@@ -22,8 +22,19 @@ export {
|
|
|
22
22
|
} from './lib/shapes/shared/PathBuilder'
|
|
23
23
|
export { usePrefersReducedMotion } from './lib/shapes/shared/usePrefersReducedMotion'
|
|
24
24
|
export { DefaultA11yAnnouncer, useSelectedShapesAnnouncer } from './lib/ui/components/A11y'
|
|
25
|
+
export { AccessibilityMenu } from './lib/ui/components/AccessibilityMenu'
|
|
25
26
|
export { ColorSchemeMenu } from './lib/ui/components/ColorSchemeMenu'
|
|
26
27
|
export { DefaultDialogs } from './lib/ui/components/Dialogs'
|
|
28
|
+
export {
|
|
29
|
+
TldrawUiColumn,
|
|
30
|
+
TldrawUiGrid,
|
|
31
|
+
TldrawUiOrientationProvider,
|
|
32
|
+
TldrawUiRow,
|
|
33
|
+
useTldrawUiOrientation,
|
|
34
|
+
type TldrawUiOrientationContext,
|
|
35
|
+
type TldrawUiOrientationProviderProps,
|
|
36
|
+
type TLUiLayoutProps,
|
|
37
|
+
} from './lib/ui/components/primitives/layout'
|
|
27
38
|
export {
|
|
28
39
|
TldrawUiMenuActionCheckboxItem,
|
|
29
40
|
type TLUiMenuActionCheckboxItemProps,
|
|
@@ -41,6 +52,7 @@ export { TldrawUiTranslationProvider } from './lib/ui/hooks/useTranslation/useTr
|
|
|
41
52
|
// eslint-disable-next-line local/no-export-star
|
|
42
53
|
export * from '@tldraw/editor'
|
|
43
54
|
export { ArrowBindingUtil } from './lib/bindings/arrow/ArrowBindingUtil'
|
|
55
|
+
export { TldrawCropHandles, type TldrawCropHandlesProps } from './lib/canvas/TldrawCropHandles'
|
|
44
56
|
export { TldrawHandles } from './lib/canvas/TldrawHandles'
|
|
45
57
|
export { TldrawArrowHints, TldrawOverlays } from './lib/canvas/TldrawOverlays'
|
|
46
58
|
export { TldrawScribble } from './lib/canvas/TldrawScribble'
|
|
@@ -71,6 +83,7 @@ export {
|
|
|
71
83
|
defaultHandleExternalTldrawContent,
|
|
72
84
|
defaultHandleExternalUrlAsset,
|
|
73
85
|
defaultHandleExternalUrlContent,
|
|
86
|
+
getAssetInfo,
|
|
74
87
|
getMediaAssetInfoPartial,
|
|
75
88
|
registerDefaultExternalContentHandlers,
|
|
76
89
|
type TLDefaultExternalContentHandlerOpts,
|
|
@@ -153,6 +166,9 @@ export {
|
|
|
153
166
|
type TLDefaultFont,
|
|
154
167
|
type TLDefaultFonts,
|
|
155
168
|
} from './lib/shapes/shared/defaultFonts'
|
|
169
|
+
export { getStrokePoints } from './lib/shapes/shared/freehand/getStrokePoints'
|
|
170
|
+
export { getSvgPathFromStrokePoints } from './lib/shapes/shared/freehand/svg'
|
|
171
|
+
export { type StrokeOptions, type StrokePoint } from './lib/shapes/shared/freehand/types'
|
|
156
172
|
export {
|
|
157
173
|
PlainTextLabel,
|
|
158
174
|
TextLabel,
|
|
@@ -183,6 +199,7 @@ export { TldrawImage, type TldrawImageProps } from './lib/TldrawImage'
|
|
|
183
199
|
export { EraserTool } from './lib/tools/EraserTool/EraserTool'
|
|
184
200
|
export { HandTool } from './lib/tools/HandTool/HandTool'
|
|
185
201
|
export { LaserTool } from './lib/tools/LaserTool/LaserTool'
|
|
202
|
+
export { getHitShapeOnCanvasPointerDown } from './lib/tools/selection-logic/getHitShapeOnCanvasPointerDown'
|
|
186
203
|
export { SelectTool } from './lib/tools/SelectTool/SelectTool'
|
|
187
204
|
export { ZoomTool } from './lib/tools/ZoomTool/ZoomTool'
|
|
188
205
|
export {
|
|
@@ -250,6 +267,7 @@ export {
|
|
|
250
267
|
EditSubmenu,
|
|
251
268
|
ExportFileContentSubMenu,
|
|
252
269
|
ExtrasGroup,
|
|
270
|
+
LockGroup,
|
|
253
271
|
MiscMenuGroup,
|
|
254
272
|
PreferencesGroup,
|
|
255
273
|
UndoRedoGroup,
|
|
@@ -290,6 +308,7 @@ export {
|
|
|
290
308
|
ToggleSnapModeItem,
|
|
291
309
|
ToggleToolLockItem,
|
|
292
310
|
ToggleTransparentBgMenuItem,
|
|
311
|
+
ToggleUiLabelsItem,
|
|
293
312
|
ToggleWrapModeItem,
|
|
294
313
|
UngroupMenuItem,
|
|
295
314
|
UnlockAllMenuItem,
|
|
@@ -408,6 +427,12 @@ export {
|
|
|
408
427
|
type TLUiToolbarToggleGroupProps,
|
|
409
428
|
type TLUiToolbarToggleItemProps,
|
|
410
429
|
} from './lib/ui/components/primitives/TldrawUiToolbar'
|
|
430
|
+
export {
|
|
431
|
+
TldrawUiTooltip,
|
|
432
|
+
TldrawUiTooltipProvider,
|
|
433
|
+
type TldrawUiTooltipProps,
|
|
434
|
+
type TldrawUiTooltipProviderProps,
|
|
435
|
+
} from './lib/ui/components/primitives/TldrawUiTooltip'
|
|
411
436
|
export {
|
|
412
437
|
DefaultQuickActions,
|
|
413
438
|
type TLUiQuickActionsProps,
|
|
@@ -499,6 +524,10 @@ export {
|
|
|
499
524
|
OverflowingToolbar,
|
|
500
525
|
type OverflowingToolbarProps,
|
|
501
526
|
} from './lib/ui/components/Toolbar/OverflowingToolbar'
|
|
527
|
+
export {
|
|
528
|
+
ToggleToolLockedButton,
|
|
529
|
+
type ToggleToolLockedButtonProps,
|
|
530
|
+
} from './lib/ui/components/Toolbar/ToggleToolLockedButton'
|
|
502
531
|
export {
|
|
503
532
|
CenteredTopPanelContainer,
|
|
504
533
|
type CenteredTopPanelContainerProps,
|
|
@@ -568,7 +597,7 @@ export {
|
|
|
568
597
|
type TLUiToastsContextType,
|
|
569
598
|
type TLUiToastsProviderProps,
|
|
570
599
|
} from './lib/ui/context/toasts'
|
|
571
|
-
export { useCanRedo, useCanUndo } from './lib/ui/hooks/menu-hooks'
|
|
600
|
+
export { useCanRedo, useCanUndo, useUnlockedSelectedShapesCount } from './lib/ui/hooks/menu-hooks'
|
|
572
601
|
export { useMenuClipboardEvents, useNativeClipboardEvents } from './lib/ui/hooks/useClipboardEvents'
|
|
573
602
|
export {
|
|
574
603
|
useCollaborationStatus,
|
|
@@ -582,7 +611,9 @@ export { useMenuIsOpen } from './lib/ui/hooks/useMenuIsOpen'
|
|
|
582
611
|
export { useReadonly } from './lib/ui/hooks/useReadonly'
|
|
583
612
|
export { useRelevantStyles } from './lib/ui/hooks/useRelevantStyles'
|
|
584
613
|
export {
|
|
614
|
+
onDragFromToolbarToCreateShape,
|
|
585
615
|
useTools,
|
|
616
|
+
type OnDragFromToolbarToCreateShapesOpts,
|
|
586
617
|
type TLUiToolItem,
|
|
587
618
|
type TLUiToolsContextType,
|
|
588
619
|
type TLUiToolsProviderProps,
|
|
@@ -2,6 +2,7 @@ import { toDomPrecision } from '@tldraw/editor'
|
|
|
2
2
|
import classNames from 'classnames'
|
|
3
3
|
import { useTranslation } from '../ui/hooks/useTranslation/useTranslation'
|
|
4
4
|
|
|
5
|
+
/** @public */
|
|
5
6
|
export interface TldrawCropHandlesProps {
|
|
6
7
|
size: number
|
|
7
8
|
width: number
|
|
@@ -9,6 +10,7 @@ export interface TldrawCropHandlesProps {
|
|
|
9
10
|
hideAlternateHandles: boolean
|
|
10
11
|
}
|
|
11
12
|
|
|
13
|
+
/** @public @react */
|
|
12
14
|
export function TldrawCropHandles({
|
|
13
15
|
size,
|
|
14
16
|
width,
|
|
@@ -31,7 +31,7 @@ export function TldrawScribble({ scribble, zoom, color, opacity, className }: TL
|
|
|
31
31
|
<path
|
|
32
32
|
className="tl-scribble"
|
|
33
33
|
d={d}
|
|
34
|
-
fill={color ?? `var(--color-${scribble.color})`}
|
|
34
|
+
fill={color ?? `var(--tl-color-${scribble.color})`}
|
|
35
35
|
opacity={opacity ?? scribble.opacity}
|
|
36
36
|
/>
|
|
37
37
|
</svg>
|
|
@@ -915,7 +915,8 @@ function runFileChecks(file: File, options: TLDefaultExternalContentHandlerOpts)
|
|
|
915
915
|
return true
|
|
916
916
|
}
|
|
917
917
|
|
|
918
|
-
|
|
918
|
+
/** @public */
|
|
919
|
+
export async function getAssetInfo(
|
|
919
920
|
file: File,
|
|
920
921
|
options: TLDefaultExternalContentHandlerOpts,
|
|
921
922
|
assetId?: TLAssetId
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TLArrowShape, createShapeId } from '@tldraw/editor'
|
|
2
|
+
import { vi } from 'vitest'
|
|
2
3
|
import { TestEditor } from '../../../test/TestEditor'
|
|
3
4
|
import { ArrowShapeUtil } from './ArrowShapeUtil'
|
|
4
5
|
import { updateArrowTargetState } from './arrowTargetState'
|
|
@@ -12,7 +13,7 @@ const ids = {
|
|
|
12
13
|
arrow1: createShapeId('arrow1'),
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
vi.useFakeTimers()
|
|
16
17
|
|
|
17
18
|
window.requestAnimationFrame = function requestAnimationFrame(cb) {
|
|
18
19
|
return setTimeout(cb, 1000 / 60)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { IndexKey, TLArrowShape, TLShapeId, Vec, createShapeId } from '@tldraw/editor'
|
|
2
|
+
import { vi } from 'vitest'
|
|
2
3
|
import { TestEditor } from '../../../test/TestEditor'
|
|
3
4
|
import { getArrowTargetState } from './arrowTargetState'
|
|
4
5
|
import { getArrowBindings } from './shared'
|
|
@@ -13,7 +14,7 @@ global.cancelAnimationFrame = function cancelAnimationFrame(id) {
|
|
|
13
14
|
clearTimeout(id)
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
vi.useFakeTimers()
|
|
17
18
|
|
|
18
19
|
const ids = {
|
|
19
20
|
box1: createShapeId('box1'),
|
|
@@ -242,7 +243,7 @@ describe('When pointing an end shape', () => {
|
|
|
242
243
|
},
|
|
243
244
|
})
|
|
244
245
|
|
|
245
|
-
|
|
246
|
+
vi.advanceTimersByTime(1000)
|
|
246
247
|
|
|
247
248
|
arrow = editor.getCurrentPageShapes()[editor.getCurrentPageShapes().length - 1]
|
|
248
249
|
|
|
@@ -306,7 +307,7 @@ describe('When pointing an end shape', () => {
|
|
|
306
307
|
})
|
|
307
308
|
|
|
308
309
|
// Give time for the velocity to die down
|
|
309
|
-
|
|
310
|
+
vi.advanceTimersByTime(1000)
|
|
310
311
|
|
|
311
312
|
arrow = editor.getCurrentPageShapes()[editor.getCurrentPageShapes().length - 1]
|
|
312
313
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { HALF_PI, TLArrowShape, TLShapeId, createShapeId } from '@tldraw/editor'
|
|
1
|
+
import { HALF_PI, TLArrowShape, TLShapeId, createShapeId, toRichText } from '@tldraw/editor'
|
|
2
|
+
import { vi } from 'vitest'
|
|
2
3
|
import { TestEditor } from '../../../test/TestEditor'
|
|
3
4
|
import { createOrUpdateArrowBinding, getArrowBindings } from './shared'
|
|
4
5
|
|
|
@@ -12,7 +13,7 @@ const ids = {
|
|
|
12
13
|
arrow1: createShapeId('arrow1'),
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
vi.useFakeTimers()
|
|
16
17
|
|
|
17
18
|
window.requestAnimationFrame = function requestAnimationFrame(cb) {
|
|
18
19
|
return setTimeout(cb, 1000 / 60)
|
|
@@ -217,7 +218,7 @@ describe('Other cases when arrow are moved', () => {
|
|
|
217
218
|
// When box one is not selected, unbinds box1 and keeps binding to box2
|
|
218
219
|
editor.select(ids.arrow1, ids.box2, ids.box3)
|
|
219
220
|
editor.alignShapes(editor.getSelectedShapeIds(), 'right')
|
|
220
|
-
|
|
221
|
+
vi.advanceTimersByTime(1000)
|
|
221
222
|
|
|
222
223
|
expect(bindings()).toMatchObject({
|
|
223
224
|
start: { toId: ids.box1, props: { isPrecise: false } },
|
|
@@ -227,7 +228,7 @@ describe('Other cases when arrow are moved', () => {
|
|
|
227
228
|
// maintains bindings if they would still be over the same shape (but makes them precise), but unbinds others
|
|
228
229
|
editor.select(ids.arrow1, ids.box3)
|
|
229
230
|
editor.alignShapes(editor.getSelectedShapeIds(), 'top')
|
|
230
|
-
|
|
231
|
+
vi.advanceTimersByTime(1000)
|
|
231
232
|
|
|
232
233
|
expect(bindings()).toMatchObject({
|
|
233
234
|
start: { toId: ids.box1, props: { isPrecise: true } },
|
|
@@ -244,7 +245,7 @@ describe('Other cases when arrow are moved', () => {
|
|
|
244
245
|
// When box one is not selected, unbinds box1 and keeps binding to box2
|
|
245
246
|
editor.select(ids.arrow1, ids.box2, ids.box3)
|
|
246
247
|
editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal')
|
|
247
|
-
|
|
248
|
+
vi.advanceTimersByTime(1000)
|
|
248
249
|
|
|
249
250
|
expect(bindings()).toMatchObject({
|
|
250
251
|
start: { toId: ids.box1, props: { isPrecise: false } },
|
|
@@ -254,7 +255,7 @@ describe('Other cases when arrow are moved', () => {
|
|
|
254
255
|
// unbinds when only the arrow is selected (not its bound shapes) if the arrow itself has moved
|
|
255
256
|
editor.select(ids.arrow1, ids.box3, ids.box4)
|
|
256
257
|
editor.distributeShapes(editor.getSelectedShapeIds(), 'vertical')
|
|
257
|
-
|
|
258
|
+
vi.advanceTimersByTime(1000)
|
|
258
259
|
|
|
259
260
|
// The arrow didn't actually move
|
|
260
261
|
expect(bindings()).toMatchObject({
|
|
@@ -265,7 +266,7 @@ describe('Other cases when arrow are moved', () => {
|
|
|
265
266
|
// The arrow will not move because it is still bound to another shape
|
|
266
267
|
editor.updateShapes([{ id: ids.box4, type: 'geo', y: -600 }])
|
|
267
268
|
editor.distributeShapes(editor.getSelectedShapeIds(), 'vertical')
|
|
268
|
-
|
|
269
|
+
vi.advanceTimersByTime(1000)
|
|
269
270
|
|
|
270
271
|
expect(bindings()).toMatchObject({
|
|
271
272
|
start: undefined,
|
|
@@ -333,7 +334,7 @@ describe('Arrow labels', () => {
|
|
|
333
334
|
editor.setCurrentTool('arrow').pointerDown(10, 10).pointerMove(100, 100).pointerUp()
|
|
334
335
|
const arrowId = editor.getOnlySelectedShape()!.id
|
|
335
336
|
editor.updateShapes<TLArrowShape>([
|
|
336
|
-
{ id: arrowId, type: 'arrow', props: {
|
|
337
|
+
{ id: arrowId, type: 'arrow', props: { richText: toRichText('Test Label') } },
|
|
337
338
|
])
|
|
338
339
|
})
|
|
339
340
|
|
|
@@ -341,7 +342,7 @@ describe('Arrow labels', () => {
|
|
|
341
342
|
const arrowId = editor.getOnlySelectedShape()!.id
|
|
342
343
|
expect(arrow(arrowId)).toMatchObject({
|
|
343
344
|
props: {
|
|
344
|
-
|
|
345
|
+
richText: toRichText('Test Label'),
|
|
345
346
|
},
|
|
346
347
|
})
|
|
347
348
|
})
|
|
@@ -349,11 +350,11 @@ describe('Arrow labels', () => {
|
|
|
349
350
|
it('should update the label of an arrow', () => {
|
|
350
351
|
const arrowId = editor.getOnlySelectedShape()!.id
|
|
351
352
|
editor.updateShapes<TLArrowShape>([
|
|
352
|
-
{ id: arrowId, type: 'arrow', props: {
|
|
353
|
+
{ id: arrowId, type: 'arrow', props: { richText: toRichText('New Label') } },
|
|
353
354
|
])
|
|
354
355
|
expect(arrow(arrowId)).toMatchObject({
|
|
355
356
|
props: {
|
|
356
|
-
|
|
357
|
+
richText: toRichText('New Label'),
|
|
357
358
|
},
|
|
358
359
|
})
|
|
359
360
|
})
|
|
@@ -31,13 +31,16 @@ import {
|
|
|
31
31
|
clamp,
|
|
32
32
|
debugFlags,
|
|
33
33
|
exhaustiveSwitchError,
|
|
34
|
+
getColorValue,
|
|
34
35
|
getDefaultColorTheme,
|
|
36
|
+
getFontsFromRichText,
|
|
35
37
|
invLerp,
|
|
36
38
|
lerp,
|
|
37
39
|
mapObjectMapValues,
|
|
38
40
|
maybeSnapToGrid,
|
|
39
41
|
structuredClone,
|
|
40
42
|
toDomPrecision,
|
|
43
|
+
toRichText,
|
|
41
44
|
track,
|
|
42
45
|
useEditor,
|
|
43
46
|
useIsEditing,
|
|
@@ -46,12 +49,11 @@ import {
|
|
|
46
49
|
} from '@tldraw/editor'
|
|
47
50
|
import React, { useMemo } from 'react'
|
|
48
51
|
import { updateArrowTerminal } from '../../bindings/arrow/ArrowBindingUtil'
|
|
52
|
+
import { isEmptyRichText, renderPlaintextFromRichText } from '../../utils/text/richText'
|
|
49
53
|
import { PathBuilder } from '../shared/PathBuilder'
|
|
50
|
-
import {
|
|
54
|
+
import { RichTextLabel, RichTextSVG } from '../shared/RichTextLabel'
|
|
51
55
|
import { ShapeFill } from '../shared/ShapeFill'
|
|
52
|
-
import { SvgTextLabel } from '../shared/SvgTextLabel'
|
|
53
56
|
import { ARROW_LABEL_PADDING, STROKE_SIZES, TEXT_PROPS } from '../shared/default-shape-constants'
|
|
54
|
-
import { DefaultFontFaces } from '../shared/defaultFonts'
|
|
55
57
|
import { getFillDefForCanvas, getFillDefForExport } from '../shared/defaultStyleDefs'
|
|
56
58
|
import { useDefaultColorTheme } from '../shared/useDefaultColorTheme'
|
|
57
59
|
import { getArrowBodyPath, getArrowHandlePath } from './ArrowPath'
|
|
@@ -156,8 +158,13 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
156
158
|
}
|
|
157
159
|
|
|
158
160
|
override getFontFaces(shape: TLArrowShape) {
|
|
159
|
-
if (
|
|
160
|
-
|
|
161
|
+
if (isEmptyRichText(shape.props.richText)) return EMPTY_ARRAY
|
|
162
|
+
|
|
163
|
+
return getFontsFromRichText(this.editor, shape.props.richText, {
|
|
164
|
+
family: `tldraw_${shape.props.font}`,
|
|
165
|
+
weight: 'normal',
|
|
166
|
+
style: 'normal',
|
|
167
|
+
})
|
|
161
168
|
}
|
|
162
169
|
|
|
163
170
|
override getDefaultProps(): TLArrowShape['props'] {
|
|
@@ -174,7 +181,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
174
181
|
end: { x: 2, y: 0 },
|
|
175
182
|
arrowheadStart: 'none',
|
|
176
183
|
arrowheadEnd: 'arrow',
|
|
177
|
-
|
|
184
|
+
richText: toRichText(''),
|
|
178
185
|
labelPosition: 0.5,
|
|
179
186
|
font: 'draw',
|
|
180
187
|
scale: 1,
|
|
@@ -204,7 +211,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
204
211
|
: new Polyline2d({ points: info.route.points })
|
|
205
212
|
|
|
206
213
|
let labelGeom
|
|
207
|
-
if (isEditing || shape.props.
|
|
214
|
+
if (isEditing || !isEmptyRichText(shape.props.richText)) {
|
|
208
215
|
const labelPosition = getArrowLabelPosition(this.editor, shape)
|
|
209
216
|
if (debugFlags.debugGeometry.get()) {
|
|
210
217
|
debugGeom.push(...labelPosition.debugGeom)
|
|
@@ -276,7 +283,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
276
283
|
}
|
|
277
284
|
|
|
278
285
|
override getText(shape: TLArrowShape) {
|
|
279
|
-
return shape.props.
|
|
286
|
+
return renderPlaintextFromRichText(this.editor, shape.props.richText)
|
|
280
287
|
}
|
|
281
288
|
|
|
282
289
|
override onHandleDrag(shape: TLArrowShape, info: TLHandleDragInfo<TLArrowShape>) {
|
|
@@ -757,7 +764,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
757
764
|
const labelPosition = getArrowLabelPosition(this.editor, shape)
|
|
758
765
|
const isSelected = shape.id === this.editor.getOnlySelectedShapeId()
|
|
759
766
|
const isEditing = this.editor.getEditingShapeId() === shape.id
|
|
760
|
-
const showArrowLabel = isEditing || shape.props.
|
|
767
|
+
const showArrowLabel = isEditing || !isEmptyRichText(shape.props.richText)
|
|
761
768
|
|
|
762
769
|
return (
|
|
763
770
|
<>
|
|
@@ -771,17 +778,16 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
771
778
|
)}
|
|
772
779
|
</SVGContainer>
|
|
773
780
|
{showArrowLabel && (
|
|
774
|
-
<
|
|
781
|
+
<RichTextLabel
|
|
775
782
|
shapeId={shape.id}
|
|
776
|
-
classNamePrefix="tl-arrow"
|
|
777
783
|
type="arrow"
|
|
778
784
|
font={shape.props.font}
|
|
779
785
|
fontSize={getArrowLabelFontSize(shape)}
|
|
780
786
|
lineHeight={TEXT_PROPS.lineHeight}
|
|
781
787
|
align="middle"
|
|
782
788
|
verticalAlign="middle"
|
|
783
|
-
|
|
784
|
-
|
|
789
|
+
labelColor={getColorValue(theme, shape.props.labelColor, 'solid')}
|
|
790
|
+
richText={shape.props.richText}
|
|
785
791
|
textWidth={labelPosition.box.w - ARROW_LABEL_PADDING * 2 * shape.props.scale}
|
|
786
792
|
isSelected={isSelected}
|
|
787
793
|
padding={0}
|
|
@@ -806,9 +812,9 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
806
812
|
const { start, end } = getArrowTerminalsInArrowSpace(this.editor, shape, info?.bindings)
|
|
807
813
|
const geometry = this.editor.getShapeGeometry<Group2d>(shape)
|
|
808
814
|
const bounds = geometry.bounds
|
|
815
|
+
const isEmpty = isEmptyRichText(shape.props.richText)
|
|
809
816
|
|
|
810
|
-
const labelGeometry =
|
|
811
|
-
isEditing || shape.props.text.trim() ? (geometry.children[1] as Rectangle2d) : null
|
|
817
|
+
const labelGeometry = isEditing || !isEmpty ? (geometry.children[1] as Rectangle2d) : null
|
|
812
818
|
|
|
813
819
|
if (Vec.Equals(start, end)) return null
|
|
814
820
|
|
|
@@ -847,7 +853,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
847
853
|
<defs>
|
|
848
854
|
<ArrowClipPath
|
|
849
855
|
radius={3.5 * shape.props.scale}
|
|
850
|
-
hasText={
|
|
856
|
+
hasText={!isEmpty}
|
|
851
857
|
bounds={bounds}
|
|
852
858
|
labelBounds={labelBounds}
|
|
853
859
|
as={clipStartArrowhead && as ? as : ''}
|
|
@@ -905,7 +911,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
905
911
|
}
|
|
906
912
|
|
|
907
913
|
override onEditStart(shape: TLArrowShape) {
|
|
908
|
-
if (shape.props.
|
|
914
|
+
if (isEmptyRichText(shape.props.richText)) {
|
|
909
915
|
// editing text for the first time, so set the position to the default:
|
|
910
916
|
const labelPosition = getArrowLabelDefaultPosition(this.editor, shape)
|
|
911
917
|
this.editor.updateShape<TLArrowShape>({
|
|
@@ -916,26 +922,6 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
916
922
|
}
|
|
917
923
|
}
|
|
918
924
|
|
|
919
|
-
override onEditEnd(shape: TLArrowShape) {
|
|
920
|
-
const {
|
|
921
|
-
id,
|
|
922
|
-
type,
|
|
923
|
-
props: { text },
|
|
924
|
-
} = shape
|
|
925
|
-
|
|
926
|
-
if (text.trimEnd() !== shape.props.text) {
|
|
927
|
-
this.editor.updateShapes<TLArrowShape>([
|
|
928
|
-
{
|
|
929
|
-
id,
|
|
930
|
-
type,
|
|
931
|
-
props: {
|
|
932
|
-
text: text.trimEnd(),
|
|
933
|
-
},
|
|
934
|
-
},
|
|
935
|
-
])
|
|
936
|
-
}
|
|
937
|
-
}
|
|
938
|
-
|
|
939
925
|
override toSvg(shape: TLArrowShape, ctx: SvgExportContext) {
|
|
940
926
|
ctx.addExportDef(getFillDefForExport(shape.props.fill))
|
|
941
927
|
const theme = getDefaultColorTheme(ctx)
|
|
@@ -944,13 +930,13 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
944
930
|
return (
|
|
945
931
|
<g transform={`scale(${scaleFactor})`}>
|
|
946
932
|
<ArrowSvg shape={shape} shouldDisplayHandles={false} />
|
|
947
|
-
<
|
|
933
|
+
<RichTextSVG
|
|
948
934
|
fontSize={getArrowLabelFontSize(shape)}
|
|
949
935
|
font={shape.props.font}
|
|
950
936
|
align="middle"
|
|
951
937
|
verticalAlign="middle"
|
|
952
|
-
|
|
953
|
-
|
|
938
|
+
labelColor={getColorValue(theme, shape.props.labelColor, 'solid')}
|
|
939
|
+
richText={shape.props.richText}
|
|
954
940
|
bounds={getArrowLabelPosition(this.editor, shape)
|
|
955
941
|
.box.clone()
|
|
956
942
|
.expandBy(-ARROW_LABEL_PADDING * shape.props.scale)}
|
|
@@ -1031,6 +1017,7 @@ const ArrowSvg = track(function ArrowSvg({
|
|
|
1031
1017
|
if (!geometry) return null
|
|
1032
1018
|
const bounds = Box.ZeroFix(geometry.bounds)
|
|
1033
1019
|
const bindings = getArrowBindings(editor, shape)
|
|
1020
|
+
const isEmpty = isEmptyRichText(shape.props.richText)
|
|
1034
1021
|
|
|
1035
1022
|
if (!info?.isValid) return null
|
|
1036
1023
|
|
|
@@ -1081,7 +1068,7 @@ const ArrowSvg = track(function ArrowSvg({
|
|
|
1081
1068
|
<clipPath id={clipPathId}>
|
|
1082
1069
|
<ArrowClipPath
|
|
1083
1070
|
radius={3.5 * shape.props.scale}
|
|
1084
|
-
hasText={isEditing ||
|
|
1071
|
+
hasText={isEditing || !isEmpty}
|
|
1085
1072
|
bounds={bounds}
|
|
1086
1073
|
labelBounds={labelPosition.box}
|
|
1087
1074
|
as={clipStartArrowhead && as ? as : ''}
|
|
@@ -1091,7 +1078,7 @@ const ArrowSvg = track(function ArrowSvg({
|
|
|
1091
1078
|
</defs>
|
|
1092
1079
|
<g
|
|
1093
1080
|
fill="none"
|
|
1094
|
-
stroke={theme
|
|
1081
|
+
stroke={getColorValue(theme, shape.props.color, 'solid')}
|
|
1095
1082
|
strokeWidth={strokeWidth}
|
|
1096
1083
|
strokeLinejoin="round"
|
|
1097
1084
|
strokeLinecap="round"
|
|
@@ -9,13 +9,17 @@ import {
|
|
|
9
9
|
Polygon2d,
|
|
10
10
|
Polyline2d,
|
|
11
11
|
TLArrowShape,
|
|
12
|
+
TLShape,
|
|
12
13
|
Vec,
|
|
13
14
|
VecLike,
|
|
14
15
|
clamp,
|
|
15
16
|
createComputedCache,
|
|
16
17
|
exhaustiveSwitchError,
|
|
17
18
|
getChangedKeys,
|
|
19
|
+
pointInPolygon,
|
|
20
|
+
toRichText,
|
|
18
21
|
} from '@tldraw/editor'
|
|
22
|
+
import { isEmptyRichText, renderHtmlFromRichTextForMeasurement } from '../../utils/text/richText'
|
|
19
23
|
import {
|
|
20
24
|
ARROW_LABEL_FONT_SIZES,
|
|
21
25
|
ARROW_LABEL_PADDING,
|
|
@@ -59,14 +63,18 @@ const labelSizeCache = createComputedCache(
|
|
|
59
63
|
|
|
60
64
|
const bodyGeom = getArrowBodyGeometry(editor, shape)
|
|
61
65
|
// We use 'i' as a default label to measure against as a minimum width.
|
|
62
|
-
const
|
|
66
|
+
const isEmpty = isEmptyRichText(shape.props.richText)
|
|
67
|
+
const html = renderHtmlFromRichTextForMeasurement(
|
|
68
|
+
editor,
|
|
69
|
+
isEmpty ? toRichText('i') : shape.props.richText
|
|
70
|
+
)
|
|
63
71
|
|
|
64
72
|
const bodyBounds = bodyGeom.bounds
|
|
65
73
|
|
|
66
74
|
const fontSize = getArrowLabelFontSize(shape)
|
|
67
75
|
|
|
68
76
|
// First we measure the text with no constraints
|
|
69
|
-
const { w, h } = editor.textMeasure.
|
|
77
|
+
const { w, h } = editor.textMeasure.measureHtml(html, {
|
|
70
78
|
...TEXT_PROPS,
|
|
71
79
|
fontFamily: FONT_FAMILIES[shape.props.font],
|
|
72
80
|
fontSize,
|
|
@@ -96,7 +104,7 @@ const labelSizeCache = createComputedCache(
|
|
|
96
104
|
}
|
|
97
105
|
|
|
98
106
|
if (shouldSquish) {
|
|
99
|
-
const { w: squishedWidth, h: squishedHeight } = editor.textMeasure.
|
|
107
|
+
const { w: squishedWidth, h: squishedHeight } = editor.textMeasure.measureHtml(html, {
|
|
100
108
|
...TEXT_PROPS,
|
|
101
109
|
fontFamily: FONT_FAMILIES[shape.props.font],
|
|
102
110
|
fontSize,
|
|
@@ -292,3 +300,15 @@ export function getArrowLabelDefaultPosition(editor: Editor, shape: TLArrowShape
|
|
|
292
300
|
exhaustiveSwitchError(info, 'type')
|
|
293
301
|
}
|
|
294
302
|
}
|
|
303
|
+
|
|
304
|
+
/** @internal */
|
|
305
|
+
export function isOverArrowLabel(editor: Editor, shape: TLShape) {
|
|
306
|
+
if (!editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) return false
|
|
307
|
+
|
|
308
|
+
const pointInShapeSpace = editor.getPointInShapeSpace(shape, editor.inputs.currentPagePoint)
|
|
309
|
+
// How should we handle multiple labels? Do shapes ever have multiple labels?
|
|
310
|
+
const labelGeometry = editor.getShapeGeometry<Group2d>(shape).children[1]
|
|
311
|
+
// Knowing what we know about arrows... if the shape has no text in its label,
|
|
312
|
+
// then the label geometry should not be there.
|
|
313
|
+
return labelGeometry && pointInPolygon(pointInShapeSpace, labelGeometry.vertices)
|
|
314
|
+
}
|
|
@@ -94,7 +94,7 @@ export function updateArrowTargetState({
|
|
|
94
94
|
const target = editor.getShapeAtPoint(pointInPageSpace, {
|
|
95
95
|
hitInside: true,
|
|
96
96
|
hitFrameInside: true,
|
|
97
|
-
margin: arrowKind === 'elbow' ? 8 : 0,
|
|
97
|
+
margin: arrowKind === 'elbow' ? 8 : [8, 0],
|
|
98
98
|
filter: (targetShape) => {
|
|
99
99
|
return (
|
|
100
100
|
!targetShape.isLocked &&
|
|
@@ -187,6 +187,7 @@ export function updateArrowTargetState({
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
const shouldSnapCenter = !isExact && precise && targetGeometryInTargetSpace.isClosed
|
|
190
|
+
// const shouldSnapEdges = !isExact && (precise || !targetGeometryInTargetSpace.isClosed)
|
|
190
191
|
const shouldSnapEdges =
|
|
191
192
|
!isExact && ((precise && arrowKind === 'elbow') || !targetGeometryInTargetSpace.isClosed)
|
|
192
193
|
const shouldSnapEdgePoints =
|
|
@@ -98,7 +98,7 @@ export function ElbowArrowDebug({ arrow }: { arrow: TLArrowShape }) {
|
|
|
98
98
|
y={fullBox.minY - 3}
|
|
99
99
|
fontSize={10}
|
|
100
100
|
fill="black"
|
|
101
|
-
stroke="var(--color-background)"
|
|
101
|
+
stroke="var(--tl-color-background)"
|
|
102
102
|
strokeWidth={2}
|
|
103
103
|
paintOrder="stroke"
|
|
104
104
|
>
|
|
@@ -109,7 +109,7 @@ export function ElbowArrowDebug({ arrow }: { arrow: TLArrowShape }) {
|
|
|
109
109
|
y={info.A.expanded.y}
|
|
110
110
|
fontSize={10}
|
|
111
111
|
fill="black"
|
|
112
|
-
stroke="var(--color-background)"
|
|
112
|
+
stroke="var(--tl-color-background)"
|
|
113
113
|
strokeWidth={2}
|
|
114
114
|
paintOrder="stroke"
|
|
115
115
|
>
|
|
@@ -121,7 +121,7 @@ export function ElbowArrowDebug({ arrow }: { arrow: TLArrowShape }) {
|
|
|
121
121
|
y={info.B.expanded.y}
|
|
122
122
|
fontSize={10}
|
|
123
123
|
fill="black"
|
|
124
|
-
stroke="var(--color-background)"
|
|
124
|
+
stroke="var(--tl-color-background)"
|
|
125
125
|
strokeWidth={2}
|
|
126
126
|
paintOrder="stroke"
|
|
127
127
|
>
|
|
@@ -118,6 +118,7 @@ export class Pointing extends StateNode {
|
|
|
118
118
|
const change = util.onHandleDrag?.(shape, {
|
|
119
119
|
handle: { ...startHandle, x: 0, y: 0 },
|
|
120
120
|
isPrecise: true,
|
|
121
|
+
isCreatingShape: true,
|
|
121
122
|
initial: initial,
|
|
122
123
|
})
|
|
123
124
|
|
|
@@ -145,6 +146,7 @@ export class Pointing extends StateNode {
|
|
|
145
146
|
const change = util.onHandleDrag?.(shape, {
|
|
146
147
|
handle: { ...startHandle, x: 0, y: 0 },
|
|
147
148
|
isPrecise: this.isPrecise,
|
|
149
|
+
isCreatingShape: true,
|
|
148
150
|
initial: initial,
|
|
149
151
|
})
|
|
150
152
|
|
|
@@ -162,6 +164,7 @@ export class Pointing extends StateNode {
|
|
|
162
164
|
const change = util.onHandleDrag?.(this.editor.getShape(shape)!, {
|
|
163
165
|
handle: { ...endHandle, x: point.x, y: point.y },
|
|
164
166
|
isPrecise: false,
|
|
167
|
+
isCreatingShape: true,
|
|
165
168
|
initial: initial,
|
|
166
169
|
})
|
|
167
170
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { TestEditor } from '../../../test/TestEditor'
|
|
2
|
-
import { DrawShapeTool } from './DrawShapeTool'
|
|
3
2
|
|
|
4
3
|
let editor: TestEditor
|
|
5
4
|
|
|
@@ -10,10 +9,6 @@ afterEach(() => {
|
|
|
10
9
|
editor?.dispose()
|
|
11
10
|
})
|
|
12
11
|
|
|
13
|
-
describe(DrawShapeTool, () => {
|
|
14
|
-
return
|
|
15
|
-
})
|
|
16
|
-
|
|
17
12
|
describe('When in the idle state', () => {
|
|
18
13
|
it('Returns to select on cancel', () => {
|
|
19
14
|
editor.setCurrentTool('draw')
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
VecLike,
|
|
15
15
|
drawShapeMigrations,
|
|
16
16
|
drawShapeProps,
|
|
17
|
+
getColorValue,
|
|
17
18
|
last,
|
|
18
19
|
lerp,
|
|
19
20
|
rng,
|
|
@@ -289,7 +290,7 @@ function DrawShapeSvg({ shape, zoomOverride }: { shape: TLDrawShape; zoomOverrid
|
|
|
289
290
|
<path
|
|
290
291
|
d={svgInk(allPointsFromSegments, options)}
|
|
291
292
|
strokeLinecap="round"
|
|
292
|
-
fill={theme
|
|
293
|
+
fill={getColorValue(theme, shape.props.color, 'solid')}
|
|
293
294
|
/>
|
|
294
295
|
</>
|
|
295
296
|
)
|
|
@@ -313,8 +314,8 @@ function DrawShapeSvg({ shape, zoomOverride }: { shape: TLDrawShape; zoomOverrid
|
|
|
313
314
|
<path
|
|
314
315
|
d={solidStrokePath}
|
|
315
316
|
strokeLinecap="round"
|
|
316
|
-
fill={isDot ? theme
|
|
317
|
-
stroke={theme
|
|
317
|
+
fill={isDot ? getColorValue(theme, shape.props.color, 'solid') : 'none'}
|
|
318
|
+
stroke={getColorValue(theme, shape.props.color, 'solid')}
|
|
318
319
|
strokeWidth={sw}
|
|
319
320
|
strokeDasharray={isDot ? 'none' : getDrawShapeStrokeDashArray(shape, sw, dotAdjustment)}
|
|
320
321
|
strokeDashoffset="0"
|
|
@@ -144,7 +144,7 @@ export class EmbedShapeUtil extends BaseBoxShapeUtil<TLEmbedShape> {
|
|
|
144
144
|
border: 0,
|
|
145
145
|
boxShadow: getRotatedBoxShadow(pageRotation),
|
|
146
146
|
borderRadius: embedInfo?.definition.overrideOutlineRadius ?? 8,
|
|
147
|
-
background: embedInfo?.definition.backgroundColor ?? 'var(--color-background)',
|
|
147
|
+
background: embedInfo?.definition.backgroundColor ?? 'var(--tl-color-background)',
|
|
148
148
|
width: w,
|
|
149
149
|
height: h,
|
|
150
150
|
}}
|