tldraw 3.16.0-canary.fa3749606e52 → 3.16.0-canary.ffc5da6dc09f
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 +322 -105
- package/dist-cjs/index.js +45 -14
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/Tldraw.js +12 -2
- package/dist-cjs/lib/Tldraw.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 +5 -4
- package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +3 -3
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js +6 -0
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +3 -3
- 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/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 +18 -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 +6 -3
- package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/line/LineShapeUtil.js +5 -1
- 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/PlainTextLabel.js +1 -3
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.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/useEditablePlainText.js +0 -2
- package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +0 -2
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.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/ui/TldrawUi.js +27 -12
- package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
- package/dist-cjs/lib/ui/assetUrls.js +13 -10
- package/dist-cjs/lib/ui/assetUrls.js.map +2 -2
- 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/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
- package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
- 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 +6 -6
- package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +1 -1
- 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 +11 -4
- package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +249 -279
- package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/{primitives/TldrawUiButtonPicker.js → StylePanel/StylePanelButtonPicker.js} +52 -56
- package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +7 -0
- package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js +68 -0
- package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js.map +7 -0
- package/dist-cjs/lib/ui/components/StylePanel/{DoubleDropdownPicker.js → StylePanelDoubleDropdownPicker.js} +26 -25
- package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js.map +7 -0
- package/dist-cjs/lib/ui/components/StylePanel/{DropdownPicker.js → StylePanelDropdownPicker.js} +47 -43
- package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js.map +7 -0
- package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js +28 -0
- package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js.map +7 -0
- package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js +3 -2
- package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +39 -10
- 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/DefaultVideoToolbarContent.js +15 -3
- package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +3 -3
- package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
- 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/TldrawUiContextualToolbar.js +10 -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 +17 -4
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +32 -7
- package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +269 -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 +12 -26
- 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 +38 -10
- package/dist-cjs/lib/ui/context/actions.js.map +2 -2
- package/dist-cjs/lib/ui/context/components.js +2 -0
- package/dist-cjs/lib/ui/context/components.js.map +2 -2
- package/dist-cjs/lib/ui/context/events.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useExportAs.js +3 -2
- package/dist-cjs/lib/ui/hooks/useExportAs.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTools.js +22 -4
- 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 +5 -0
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
- package/dist-cjs/lib/ui/kbd-utils.js +9 -3
- 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/export/copyAs.js +1 -2
- package/dist-cjs/lib/utils/export/copyAs.js.map +2 -2
- package/dist-cjs/lib/utils/export/export.js +0 -20
- package/dist-cjs/lib/utils/export/export.js.map +2 -2
- package/dist-cjs/lib/utils/export/exportAs.js +1 -2
- package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
- package/dist-esm/index.d.mts +322 -105
- package/dist-esm/index.mjs +83 -29
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/Tldraw.mjs +14 -4
- package/dist-esm/lib/Tldraw.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 +5 -4
- package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +4 -3
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +6 -0
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +3 -3
- 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/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 +19 -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 +6 -3
- package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +6 -1
- 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/PlainTextLabel.mjs +1 -3
- package/dist-esm/lib/shapes/shared/PlainTextLabel.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/useEditablePlainText.mjs +0 -2
- package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +0 -2
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.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/ui/TldrawUi.mjs +29 -14
- package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
- package/dist-esm/lib/ui/assetUrls.mjs +13 -10
- package/dist-esm/lib/ui/assetUrls.mjs.map +2 -2
- 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/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
- package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
- 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 +6 -6
- package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +1 -1
- 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 +16 -5
- package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +251 -283
- package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +126 -0
- package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +7 -0
- package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs +48 -0
- package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs.map +7 -0
- package/dist-esm/lib/ui/components/StylePanel/{DoubleDropdownPicker.mjs → StylePanelDoubleDropdownPicker.mjs} +23 -22
- package/dist-esm/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.mjs.map +7 -0
- package/dist-esm/lib/ui/components/StylePanel/{DropdownPicker.mjs → StylePanelDropdownPicker.mjs} +44 -40
- package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs.map +7 -0
- package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs +8 -0
- package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs.map +7 -0
- package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs +3 -2
- package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +39 -10
- 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/DefaultVideoToolbarContent.mjs +15 -3
- package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +3 -3
- package/dist-esm/lib/ui/components/Toolbar/LinkEditor.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/TldrawUiContextualToolbar.mjs +10 -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 +17 -4
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +32 -7
- package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +246 -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 +12 -26
- 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 +38 -10
- package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
- package/dist-esm/lib/ui/context/components.mjs +2 -0
- package/dist-esm/lib/ui/context/components.mjs.map +2 -2
- package/dist-esm/lib/ui/context/events.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useExportAs.mjs +3 -2
- package/dist-esm/lib/ui/hooks/useExportAs.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTools.mjs +23 -4
- package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +5 -0
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
- package/dist-esm/lib/ui/kbd-utils.mjs +9 -3
- 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/export/copyAs.mjs +1 -2
- package/dist-esm/lib/utils/export/copyAs.mjs.map +2 -2
- package/dist-esm/lib/utils/export/export.mjs +0 -20
- package/dist-esm/lib/utils/export/export.mjs.map +2 -2
- package/dist-esm/lib/utils/export/exportAs.mjs +1 -2
- package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
- package/package.json +11 -34
- package/src/index.ts +62 -22
- package/src/lib/Tldraw.tsx +15 -2
- package/src/lib/canvas/TldrawScribble.tsx +1 -1
- package/src/lib/defaultExternalContentHandlers.ts +12 -4
- 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 +7 -6
- package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +4 -3
- package/src/lib/shapes/arrow/arrowLabel.ts +8 -0
- package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
- package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
- 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 +29 -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 +6 -3
- package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
- package/src/lib/shapes/line/LineShapeUtil.tsx +6 -1
- 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/PlainTextLabel.tsx +0 -6
- package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
- package/src/lib/shapes/shared/freehand/svg.ts +2 -0
- package/src/lib/shapes/shared/useEditablePlainText.ts +0 -6
- package/src/lib/shapes/shared/useImageOrVideoAsset.ts +0 -7
- 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/ui/TldrawUi.tsx +33 -12
- package/src/lib/ui/assetUrls.ts +13 -10
- package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
- package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
- package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
- package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
- package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +6 -6
- 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 +28 -12
- package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +261 -343
- package/src/lib/ui/components/{primitives/TldrawUiButtonPicker.tsx → StylePanel/StylePanelButtonPicker.tsx} +66 -50
- package/src/lib/ui/components/StylePanel/StylePanelContext.tsx +63 -0
- package/src/lib/ui/components/StylePanel/{DoubleDropdownPicker.tsx → StylePanelDoubleDropdownPicker.tsx} +31 -22
- package/src/lib/ui/components/StylePanel/StylePanelDropdownPicker.tsx +119 -0
- package/src/lib/ui/components/StylePanel/StylePanelSubheading.tsx +9 -0
- package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +4 -3
- package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +33 -16
- package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
- package/src/lib/ui/components/Toolbar/DefaultVideoToolbarContent.tsx +12 -4
- package/src/lib/ui/components/Toolbar/LinkEditor.tsx +5 -5
- package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
- package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +14 -11
- package/src/lib/ui/components/menu-items.tsx +8 -0
- package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +6 -1
- package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
- package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +50 -30
- package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +54 -12
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +335 -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 +18 -27
- package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
- package/src/lib/ui/context/actions.tsx +38 -10
- package/src/lib/ui/context/components.tsx +3 -0
- package/src/lib/ui/context/events.tsx +2 -1
- package/src/lib/ui/hooks/useExportAs.ts +3 -2
- package/src/lib/ui/hooks/useTools.tsx +26 -4
- package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +5 -0
- package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +5 -0
- package/src/lib/ui/kbd-utils.ts +10 -3
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +424 -293
- package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +5 -5
- package/src/lib/utils/export/copyAs.ts +1 -24
- package/src/lib/utils/export/export.ts +0 -36
- package/src/lib/utils/export/exportAs.ts +1 -32
- package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +4 -4
- 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 +3 -2
- 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/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/custom-clipping.test.ts +436 -0
- 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 +4 -3
- package/src/test/translating.test.ts +9 -8
- package/tldraw.css +732 -583
- package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
- package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +0 -7
- package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +0 -7
- package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +0 -7
- package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
- package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +0 -7
- package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +0 -7
- package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +0 -115
- package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +0 -7
- package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +0 -109
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { vi } from 'vitest'
|
|
1
2
|
import { HandTool } from '../lib/tools/HandTool/HandTool'
|
|
2
3
|
import { TestEditor, createDefaultShapes } from './TestEditor'
|
|
3
4
|
|
|
@@ -14,7 +15,7 @@ afterEach(() => {
|
|
|
14
15
|
editor?.dispose()
|
|
15
16
|
})
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
vi.useFakeTimers()
|
|
18
19
|
|
|
19
20
|
describe(HandTool, () => {
|
|
20
21
|
it('Double taps to zoom in', () => {
|
|
@@ -22,9 +23,9 @@ describe(HandTool, () => {
|
|
|
22
23
|
expect(editor.getZoomLevel()).toBe(1)
|
|
23
24
|
editor.click()
|
|
24
25
|
editor.click() // double click!
|
|
25
|
-
|
|
26
|
+
vi.advanceTimersByTime(300)
|
|
26
27
|
expect(editor.getZoomLevel()).not.toBe(1) // animating
|
|
27
|
-
|
|
28
|
+
vi.advanceTimersByTime(300)
|
|
28
29
|
expect(editor.getZoomLevel()).toBe(2) // all done
|
|
29
30
|
})
|
|
30
31
|
|
|
@@ -34,9 +35,9 @@ describe(HandTool, () => {
|
|
|
34
35
|
editor.click()
|
|
35
36
|
editor.click()
|
|
36
37
|
editor.click() // triple click!
|
|
37
|
-
|
|
38
|
+
vi.advanceTimersByTime(300)
|
|
38
39
|
expect(editor.getZoomLevel()).not.toBe(1) // animating
|
|
39
|
-
|
|
40
|
+
vi.advanceTimersByTime(300)
|
|
40
41
|
expect(editor.getZoomLevel()).toBe(0.5) // all done
|
|
41
42
|
})
|
|
42
43
|
|
|
@@ -48,9 +49,9 @@ describe(HandTool, () => {
|
|
|
48
49
|
editor.click()
|
|
49
50
|
editor.click()
|
|
50
51
|
editor.click() // quad click!
|
|
51
|
-
|
|
52
|
+
vi.advanceTimersByTime(300)
|
|
52
53
|
expect(editor.getZoomLevel()).not.toBe(2) // animating
|
|
53
|
-
|
|
54
|
+
vi.advanceTimersByTime(300)
|
|
54
55
|
expect(editor.getZoomLevel()).toBe(1) // all done
|
|
55
56
|
})
|
|
56
57
|
|
|
@@ -62,9 +63,9 @@ describe(HandTool, () => {
|
|
|
62
63
|
editor.click()
|
|
63
64
|
editor.click()
|
|
64
65
|
editor.click() // quad click!
|
|
65
|
-
|
|
66
|
+
vi.advanceTimersByTime(300)
|
|
66
67
|
expect(editor.getZoomLevel()).not.toBe(1) // animating
|
|
67
|
-
|
|
68
|
+
vi.advanceTimersByTime(300)
|
|
68
69
|
const z = editor.getZoomLevel()
|
|
69
70
|
editor.zoomToFit() // call zoom to fit manually to compare
|
|
70
71
|
expect(editor.getZoomLevel()).toBe(z) // zoom should not have changed
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
createShapeId,
|
|
8
8
|
toRichText,
|
|
9
9
|
} from '@tldraw/editor'
|
|
10
|
+
import { vi } from 'vitest'
|
|
10
11
|
import { TestEditor } from './TestEditor'
|
|
11
12
|
|
|
12
13
|
let editor: TestEditor
|
|
@@ -18,7 +19,7 @@ const ids = {
|
|
|
18
19
|
arrow1: createShapeId('arrow1'),
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
vi.useFakeTimers()
|
|
22
23
|
|
|
23
24
|
beforeEach(() => {
|
|
24
25
|
editor = new TestEditor()
|
|
@@ -160,7 +161,7 @@ describe('TLSelectTool.Translating', () => {
|
|
|
160
161
|
// There's a timer here! We shouldn't end the clone until the timer is done
|
|
161
162
|
expect(editor.getCurrentPageShapes().length).toBe(2)
|
|
162
163
|
|
|
163
|
-
|
|
164
|
+
vi.advanceTimersByTime(250) // tick tock
|
|
164
165
|
|
|
165
166
|
// Timer is done! We should have ended the clone.
|
|
166
167
|
expect(editor.getCurrentPageShapes().length).toBe(1)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TLUserPreferences, atom, createTLUser } from '@tldraw/editor'
|
|
2
|
+
import { vi } from 'vitest'
|
|
2
3
|
import { TestEditor } from './TestEditor'
|
|
3
4
|
|
|
4
5
|
let editor: TestEditor
|
|
@@ -59,7 +60,7 @@ describe('TLUserPreferences', () => {
|
|
|
59
60
|
locale: null,
|
|
60
61
|
name: null,
|
|
61
62
|
})
|
|
62
|
-
const setUserPreferences =
|
|
63
|
+
const setUserPreferences = vi.fn((preferences) => userPreferences.set(preferences))
|
|
63
64
|
|
|
64
65
|
editor = new TestEditor({
|
|
65
66
|
user: createTLUser({
|
|
@@ -80,7 +81,7 @@ describe('TLUserPreferences', () => {
|
|
|
80
81
|
id: '123',
|
|
81
82
|
name: 'blah',
|
|
82
83
|
})
|
|
83
|
-
const setUserPreferences =
|
|
84
|
+
const setUserPreferences = vi.fn((preferences) => userPreferences.set(preferences))
|
|
84
85
|
|
|
85
86
|
editor = new TestEditor({
|
|
86
87
|
user: createTLUser({
|
|
@@ -101,7 +102,7 @@ describe('TLUserPreferences', () => {
|
|
|
101
102
|
id: '123',
|
|
102
103
|
name: 'blah',
|
|
103
104
|
})
|
|
104
|
-
const setUserPreferences =
|
|
105
|
+
const setUserPreferences = vi.fn((preferences) => userPreferences.set(preferences))
|
|
105
106
|
|
|
106
107
|
editor = new TestEditor({
|
|
107
108
|
user: createTLUser({
|
package/src/test/TestEditor.ts
CHANGED
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
rotateSelectionHandle,
|
|
35
35
|
tlenv,
|
|
36
36
|
} from '@tldraw/editor'
|
|
37
|
+
import { vi } from 'vitest'
|
|
37
38
|
import { defaultBindingUtils } from '../lib/defaultBindingUtils'
|
|
38
39
|
import { defaultShapeTools } from '../lib/defaultShapeTools'
|
|
39
40
|
import { defaultShapeUtils } from '../lib/defaultShapeUtils'
|
|
@@ -42,7 +43,14 @@ import { defaultTools } from '../lib/defaultTools'
|
|
|
42
43
|
import { defaultAddFontsFromNode, tipTapDefaultExtensions } from '../lib/utils/text/richText'
|
|
43
44
|
import { shapesFromJsx } from './test-jsx'
|
|
44
45
|
|
|
45
|
-
|
|
46
|
+
declare module 'vitest' {
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
48
|
+
interface Matchers<T = any> {
|
|
49
|
+
toCloselyMatchObject(expected: any, roundToNearest?: number): void
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
vi.useFakeTimers()
|
|
46
54
|
|
|
47
55
|
Object.assign(navigator, {
|
|
48
56
|
clipboard: {
|
|
@@ -55,16 +63,6 @@ Object.assign(navigator, {
|
|
|
55
63
|
// @ts-expect-error
|
|
56
64
|
window.ClipboardItem = class {}
|
|
57
65
|
|
|
58
|
-
declare global {
|
|
59
|
-
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
60
|
-
namespace jest {
|
|
61
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
62
|
-
interface Matchers<R> {
|
|
63
|
-
toCloselyMatchObject(value: any, precision?: number): void
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
66
|
export class TestEditor extends Editor {
|
|
69
67
|
constructor(
|
|
70
68
|
options: Partial<Omit<TLEditorOptions, 'store'>> = {},
|
|
@@ -82,8 +80,8 @@ export class TestEditor extends Editor {
|
|
|
82
80
|
right: 1080,
|
|
83
81
|
}
|
|
84
82
|
// make the app full screen for the sake of the insets property
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
vi.spyOn(document.body, 'scrollWidth', 'get').mockImplementation(() => bounds.width)
|
|
84
|
+
vi.spyOn(document.body, 'scrollHeight', 'get').mockImplementation(() => bounds.height)
|
|
87
85
|
|
|
88
86
|
elm.tabIndex = 0
|
|
89
87
|
elm.getBoundingClientRect = () => bounds as DOMRect
|
|
@@ -272,12 +270,12 @@ export class TestEditor extends Editor {
|
|
|
272
270
|
* methods, or call mockRestore() to restore the actual implementation (e.g.
|
|
273
271
|
* _transformPointerDownSpy.mockRestore())
|
|
274
272
|
*/
|
|
275
|
-
_transformPointerDownSpy =
|
|
273
|
+
_transformPointerDownSpy = vi
|
|
276
274
|
.spyOn(this._clickManager, 'handlePointerEvent')
|
|
277
275
|
.mockImplementation((info) => {
|
|
278
276
|
return info
|
|
279
277
|
})
|
|
280
|
-
_transformPointerUpSpy =
|
|
278
|
+
_transformPointerUpSpy = vi
|
|
281
279
|
.spyOn(this._clickManager, 'handlePointerEvent')
|
|
282
280
|
.mockImplementation((info) => {
|
|
283
281
|
return info
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
noop,
|
|
13
13
|
} from '@tldraw/editor'
|
|
14
14
|
import { StrictMode } from 'react'
|
|
15
|
+
import { vi } from 'vitest'
|
|
15
16
|
import { defaultShapeUtils } from '../lib/defaultShapeUtils'
|
|
16
17
|
import { defaultTools } from '../lib/defaultTools'
|
|
17
18
|
import { GeoShapeUtil } from '../lib/shapes/geo/GeoShapeUtil'
|
|
@@ -89,7 +90,7 @@ describe('<TldrawEditor />', () => {
|
|
|
89
90
|
})
|
|
90
91
|
|
|
91
92
|
it('throws if the store has different shapes to the ones passed in', async () => {
|
|
92
|
-
const spy =
|
|
93
|
+
const spy = vi.spyOn(console, 'error').mockImplementation(noop)
|
|
93
94
|
// expect(() =>
|
|
94
95
|
// render(
|
|
95
96
|
// <TldrawEditor
|
|
@@ -129,7 +130,7 @@ describe('<TldrawEditor />', () => {
|
|
|
129
130
|
|
|
130
131
|
it('Accepts fresh versions of store and calls `onMount` for each one', async () => {
|
|
131
132
|
const initialStore = createTLStore({ shapeUtils: [], bindingUtils: [] })
|
|
132
|
-
const onMount =
|
|
133
|
+
const onMount = vi.fn()
|
|
133
134
|
const rendered = await renderTldrawComponent(
|
|
134
135
|
<TldrawEditor
|
|
135
136
|
initialState="select"
|
|
@@ -139,8 +140,8 @@ describe('<TldrawEditor />', () => {
|
|
|
139
140
|
/>,
|
|
140
141
|
{ waitForPatterns: false }
|
|
141
142
|
)
|
|
142
|
-
const initialEditor = onMount.mock.lastCall[0]
|
|
143
|
-
|
|
143
|
+
const initialEditor = onMount.mock.lastCall![0]
|
|
144
|
+
vi.spyOn(initialEditor, 'dispose')
|
|
144
145
|
expect(initialEditor.store).toBe(initialStore)
|
|
145
146
|
// re-render with the same store:
|
|
146
147
|
rendered.rerender(
|
|
@@ -161,7 +162,7 @@ describe('<TldrawEditor />', () => {
|
|
|
161
162
|
await rendered.findAllByTestId('canvas')
|
|
162
163
|
expect(initialEditor.dispose).toHaveBeenCalledTimes(1)
|
|
163
164
|
expect(onMount).toHaveBeenCalledTimes(2)
|
|
164
|
-
expect(onMount.mock.lastCall[0].store).toBe(newStore)
|
|
165
|
+
expect(onMount.mock.lastCall![0].store).toBe(newStore)
|
|
165
166
|
})
|
|
166
167
|
|
|
167
168
|
it('Renders the canvas and shapes', async () => {
|
|
@@ -227,7 +228,7 @@ describe('<TldrawEditor />', () => {
|
|
|
227
228
|
|
|
228
229
|
it('renders correctly in strict mode', async () => {
|
|
229
230
|
const editorInstances = new Set<Editor>()
|
|
230
|
-
const onMount =
|
|
231
|
+
const onMount = vi.fn((editor: Editor) => {
|
|
231
232
|
editorInstances.add(editor)
|
|
232
233
|
})
|
|
233
234
|
await renderTldrawComponent(
|
|
@@ -245,7 +246,7 @@ describe('<TldrawEditor />', () => {
|
|
|
245
246
|
|
|
246
247
|
it('allows updating camera options without re-creating the editor', async () => {
|
|
247
248
|
const editors: Editor[] = []
|
|
248
|
-
const onMount =
|
|
249
|
+
const onMount = vi.fn((editor: Editor) => {
|
|
249
250
|
if (!editors.includes(editor)) editors.push(editor)
|
|
250
251
|
})
|
|
251
252
|
|
|
@@ -361,7 +362,7 @@ describe('<TldrawEditor />', () => {
|
|
|
361
362
|
})
|
|
362
363
|
|
|
363
364
|
it('passes through the `assets` prop when creating its own in-memory store', async () => {
|
|
364
|
-
const myUploadFn =
|
|
365
|
+
const myUploadFn = vi.fn()
|
|
365
366
|
const assetStore: TLAssetStore = { upload: myUploadFn }
|
|
366
367
|
|
|
367
368
|
const { editor } = await renderTldrawComponentWithEditor(
|
|
@@ -375,7 +376,7 @@ describe('<TldrawEditor />', () => {
|
|
|
375
376
|
})
|
|
376
377
|
|
|
377
378
|
it('passes through the `assets` prop when using `persistenceKey`', async () => {
|
|
378
|
-
const myUploadFn =
|
|
379
|
+
const myUploadFn = vi.fn()
|
|
379
380
|
const assetStore: TLAssetStore = { upload: myUploadFn }
|
|
380
381
|
|
|
381
382
|
const { editor } = await renderTldrawComponentWithEditor(
|
|
@@ -394,7 +395,7 @@ describe('<TldrawEditor />', () => {
|
|
|
394
395
|
})
|
|
395
396
|
|
|
396
397
|
it('will not re-create the editor if re-rendered with identical options', async () => {
|
|
397
|
-
const onMount =
|
|
398
|
+
const onMount = vi.fn()
|
|
398
399
|
|
|
399
400
|
const renderer = await renderTldrawComponent(
|
|
400
401
|
<TldrawEditor onMount={onMount} options={{ maxPages: 1 }} />,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createShapeId } from '@tldraw/editor'
|
|
2
|
+
import { vi } from 'vitest'
|
|
2
3
|
import { TestEditor } from './TestEditor'
|
|
3
4
|
|
|
4
5
|
let editor: TestEditor
|
|
@@ -7,7 +8,7 @@ const ids = {
|
|
|
7
8
|
box1: createShapeId('box1'),
|
|
8
9
|
}
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
vi.useFakeTimers()
|
|
11
12
|
|
|
12
13
|
beforeEach(() => {
|
|
13
14
|
editor = new TestEditor()
|
|
@@ -44,7 +45,7 @@ describe('TLSelectTool.Zooming', () => {
|
|
|
44
45
|
expect(editor.getViewportPageCenter()).toMatchObject({ x: 540, y: 360 })
|
|
45
46
|
editor.click()
|
|
46
47
|
editor.expectToBeIn('zoom.idle')
|
|
47
|
-
|
|
48
|
+
vi.advanceTimersByTime(300)
|
|
48
49
|
expect(editor.getZoomLevel()).toBe(2)
|
|
49
50
|
})
|
|
50
51
|
|
|
@@ -55,7 +56,7 @@ describe('TLSelectTool.Zooming', () => {
|
|
|
55
56
|
expect(editor.getViewportPageBounds()).toMatchObject({ x: -0, y: -0, w: 1080, h: 720 })
|
|
56
57
|
expect(editor.getViewportPageCenter()).toMatchObject({ x: 540, y: 360 })
|
|
57
58
|
editor.click()
|
|
58
|
-
|
|
59
|
+
vi.advanceTimersByTime(300)
|
|
59
60
|
expect(editor.getZoomLevel()).toBe(0.5)
|
|
60
61
|
})
|
|
61
62
|
|
|
@@ -122,7 +123,7 @@ describe('TLSelectTool.Zooming', () => {
|
|
|
122
123
|
editor.expectToBeIn('zoom.zoom_brushing')
|
|
123
124
|
editor.pointerUp(change, change)
|
|
124
125
|
editor.expectToBeIn('zoom.idle')
|
|
125
|
-
|
|
126
|
+
vi.advanceTimersByTime(300)
|
|
126
127
|
expect(editor.getZoomLevel()).toBe(2)
|
|
127
128
|
expect(editor.getViewportPageBounds()).toMatchObject({
|
|
128
129
|
x: change / 2,
|
|
@@ -156,7 +157,7 @@ describe('TLSelectTool.Zooming', () => {
|
|
|
156
157
|
h: newBoundsHeight,
|
|
157
158
|
})
|
|
158
159
|
editor.pointerUp(newBoundsX + newBoundsWidth, newBoundsY + newBoundsHeight)
|
|
159
|
-
|
|
160
|
+
vi.advanceTimersByTime(300)
|
|
160
161
|
expect(editor.getZoomLevel()).toBeCloseTo(1.64)
|
|
161
162
|
expect(editor.getViewportPageBounds()).toMatchInlineSnapshot(`
|
|
162
163
|
Box {
|
|
@@ -195,7 +196,7 @@ describe('TLSelectTool.Zooming', () => {
|
|
|
195
196
|
h: newBoundsHeight,
|
|
196
197
|
})
|
|
197
198
|
editor.pointerUp()
|
|
198
|
-
|
|
199
|
+
vi.advanceTimersByTime(500)
|
|
199
200
|
expect(editor.getZoomLevel()).toBeCloseTo(originalZoomLevel / 2)
|
|
200
201
|
expect(editor.getViewportPageBounds()).toMatchObject({
|
|
201
202
|
x: -440,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
|
-
exports[`creating new shapes pencil lines will reisze the group appropriately if the new shape changes the group bounds
|
|
3
|
+
exports[`creating new shapes > pencil > lines > will reisze the group appropriately if the new shape changes the group bounds > box shape after second resize 1`] = `
|
|
4
4
|
{
|
|
5
5
|
"h": 40,
|
|
6
6
|
"w": 40,
|
|
@@ -9,7 +9,7 @@ exports[`creating new shapes pencil lines will reisze the group appropriately if
|
|
|
9
9
|
}
|
|
10
10
|
`;
|
|
11
11
|
|
|
12
|
-
exports[`creating new shapes pencil lines will reisze the group appropriately if the new shape changes the group bounds
|
|
12
|
+
exports[`creating new shapes > pencil > lines > will reisze the group appropriately if the new shape changes the group bounds > group shape after second resize 1`] = `
|
|
13
13
|
{
|
|
14
14
|
"h": 120,
|
|
15
15
|
"w": 120,
|
|
@@ -18,7 +18,7 @@ exports[`creating new shapes pencil lines will reisze the group appropriately if
|
|
|
18
18
|
}
|
|
19
19
|
`;
|
|
20
20
|
|
|
21
|
-
exports[`creating new shapes pencil lines will reisze the group appropriately if the new shape changes the group bounds
|
|
21
|
+
exports[`creating new shapes > pencil > lines > will reisze the group appropriately if the new shape changes the group bounds > group with line shape 1`] = `
|
|
22
22
|
Box {
|
|
23
23
|
"h": 110,
|
|
24
24
|
"w": 110,
|
|
@@ -27,7 +27,7 @@ Box {
|
|
|
27
27
|
}
|
|
28
28
|
`;
|
|
29
29
|
|
|
30
|
-
exports[`creating new shapes pencil lines works if the shape drawing begins outside of the current group bounds
|
|
30
|
+
exports[`creating new shapes > pencil > lines > works if the shape drawing begins outside of the current group bounds > box shape after resize 1`] = `
|
|
31
31
|
{
|
|
32
32
|
"h": 50,
|
|
33
33
|
"w": 50,
|
|
@@ -36,7 +36,7 @@ exports[`creating new shapes pencil lines works if the shape drawing begins outs
|
|
|
36
36
|
}
|
|
37
37
|
`;
|
|
38
38
|
|
|
39
|
-
exports[`creating new shapes pencil lines works if the shape drawing begins outside of the current group bounds
|
|
39
|
+
exports[`creating new shapes > pencil > lines > works if the shape drawing begins outside of the current group bounds > group with line 1`] = `
|
|
40
40
|
{
|
|
41
41
|
"h": 200,
|
|
42
42
|
"w": 200,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
|
-
exports[`When resizing a shape with children Resizes a rotated draw shape
|
|
3
|
+
exports[`When resizing a shape with children > Resizes a rotated draw shape > draw shape after rotating 1`] = `
|
|
4
4
|
{
|
|
5
5
|
"id": "shape:lineA",
|
|
6
6
|
"index": "a3",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TLArrowShape, TLShapeId, Vec, createShapeId } from '@tldraw/editor'
|
|
2
|
+
import { vi } from 'vitest'
|
|
2
3
|
import { getArrowBindings } from '../lib/shapes/arrow/shared'
|
|
3
4
|
import { TestEditor } from './TestEditor'
|
|
4
5
|
import { TL } from './test-jsx'
|
|
@@ -208,7 +209,7 @@ describe('When binding an arrow to a shape', () => {
|
|
|
208
209
|
|
|
209
210
|
editor.keyUp('Control')
|
|
210
211
|
expect(bindings().end).toBeUndefined() // there's a short delay here, it should still be a point
|
|
211
|
-
|
|
212
|
+
vi.advanceTimersByTime(1000) // once the timer runs out...
|
|
212
213
|
expect(bindings().end).toBeDefined()
|
|
213
214
|
|
|
214
215
|
editor.keyDown('Control') // no delay when pressing control again though
|
|
@@ -216,7 +217,7 @@ describe('When binding an arrow to a shape', () => {
|
|
|
216
217
|
|
|
217
218
|
editor.keyUp('Control')
|
|
218
219
|
editor.pointerUp()
|
|
219
|
-
|
|
220
|
+
vi.advanceTimersByTime(1000) // once the timer runs out...
|
|
220
221
|
expect(bindings().end).toBeUndefined() // still a point because interaction ended before timer ended
|
|
221
222
|
})
|
|
222
223
|
|
|
@@ -237,7 +238,7 @@ describe('When binding an arrow to a shape', () => {
|
|
|
237
238
|
// Releasing ctrl should restore binding (after timer)
|
|
238
239
|
editor.keyUp('Control')
|
|
239
240
|
expect(bindings().end).toBeUndefined() // Still no binding immediately
|
|
240
|
-
|
|
241
|
+
vi.advanceTimersByTime(1000)
|
|
241
242
|
expect(bindings().end).toBeDefined()
|
|
242
243
|
})
|
|
243
244
|
})
|
|
@@ -288,11 +289,13 @@ describe('When shapes are overlapping', () => {
|
|
|
288
289
|
editor.pointerDown(0, 50) // over nothing
|
|
289
290
|
editor.pointerMove(125, 50) // over box1 only
|
|
290
291
|
expect(bindings().end).toMatchObject({ toId: ids.box1 })
|
|
291
|
-
editor.pointerMove(175, 50) // box2 is higher but box1 is filled
|
|
292
|
+
editor.pointerMove(175, 50) // box2 is higher but box1 is filled, but we're on the edge ofd box 2
|
|
293
|
+
expect(bindings().end).toMatchObject({ toId: ids.box2 })
|
|
294
|
+
editor.pointerMove(175, 70) // box2 is higher but box1 is filled, and we're inside of box2
|
|
292
295
|
expect(bindings().end).toMatchObject({ toId: ids.box1 })
|
|
293
|
-
editor.pointerMove(225,
|
|
296
|
+
editor.pointerMove(225, 70) // box3 is higher
|
|
294
297
|
expect(bindings().end).toMatchObject({ toId: ids.box3 })
|
|
295
|
-
editor.pointerMove(275,
|
|
298
|
+
editor.pointerMove(275, 70) // box4 is higher but box 3 is filled
|
|
296
299
|
expect(bindings().end).toMatchObject({ toId: ids.box3 })
|
|
297
300
|
})
|
|
298
301
|
|
|
@@ -304,14 +307,18 @@ describe('When shapes are overlapping', () => {
|
|
|
304
307
|
])
|
|
305
308
|
editor.setCurrentTool('arrow')
|
|
306
309
|
editor.pointerDown(0, 50)
|
|
307
|
-
editor.pointerMove(175, 50) // box1 is smaller even though it's behind box2
|
|
310
|
+
editor.pointerMove(175, 50) // box1 is smaller even though it's behind box2, but we're on the edge of box 2
|
|
311
|
+
expect(bindings().end).toMatchObject({ toId: ids.box2 })
|
|
312
|
+
editor.pointerMove(175, 70) // box1 is smaller even though it's behind box2
|
|
308
313
|
expect(bindings().end).toMatchObject({ toId: ids.box1 })
|
|
309
|
-
editor.pointerMove(150, 90) // box3 is smaller and at the front
|
|
314
|
+
editor.pointerMove(150, 90) // box3 is smaller and at the front but we're on the edge of box 2
|
|
315
|
+
expect(bindings().end).toMatchObject({ toId: ids.box2 })
|
|
316
|
+
editor.pointerMove(160, 90) // box3 is smaller and at the front and we're in box1 and box 3 and box 2
|
|
310
317
|
expect(bindings().end).toMatchObject({ toId: ids.box3 })
|
|
311
318
|
editor.sendToBack([ids.box3])
|
|
312
319
|
editor.pointerMove(149, 90) // box3 is smaller, even when at the back
|
|
313
320
|
expect(bindings().end).toMatchObject({ toId: ids.box3 })
|
|
314
|
-
editor.pointerMove(175,
|
|
321
|
+
editor.pointerMove(175, 60) // inside of box1 and box 2, but box 1 is smaller
|
|
315
322
|
expect(bindings().end).toMatchObject({ toId: ids.box1 })
|
|
316
323
|
})
|
|
317
324
|
})
|
|
@@ -403,7 +410,7 @@ describe('When starting an arrow inside of multiple shapes', () => {
|
|
|
403
410
|
editor.pointerDown(20, 20) // upper left
|
|
404
411
|
expect(editor.getCurrentPageShapes().length).toBe(1)
|
|
405
412
|
expect(arrow()).toBe(null)
|
|
406
|
-
|
|
413
|
+
vi.advanceTimersByTime(1000)
|
|
407
414
|
editor.pointerMove(25, 20)
|
|
408
415
|
expect(editor.getCurrentPageShapes().length).toBe(2)
|
|
409
416
|
expect(arrow()).toMatchObject({ x: 20, y: 20 })
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
createBindingId,
|
|
12
12
|
createShapeId,
|
|
13
13
|
} from '@tldraw/editor'
|
|
14
|
+
import { vi } from 'vitest'
|
|
14
15
|
import { TestEditor } from './TestEditor'
|
|
15
16
|
import { TL } from './test-jsx'
|
|
16
17
|
|
|
@@ -23,37 +24,19 @@ const ids = {
|
|
|
23
24
|
box4: createShapeId('box4'),
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
const mockOnOperationComplete =
|
|
27
|
-
const mockOnBeforeDelete =
|
|
28
|
-
const mockOnAfterDelete =
|
|
29
|
-
const mockOnBeforeFromShapeDelete =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
[BindingOnShapeIsolateOptions<TLUnknownBinding>]
|
|
40
|
-
>
|
|
41
|
-
const mockOnBeforeToShapeIsolate = jest.fn() as jest.Mock<
|
|
42
|
-
void,
|
|
43
|
-
[BindingOnShapeIsolateOptions<TLUnknownBinding>]
|
|
44
|
-
>
|
|
45
|
-
const mockOnBeforeCreate = jest.fn() as jest.Mock<void, [BindingOnCreateOptions<TLUnknownBinding>]>
|
|
46
|
-
const mockOnAfterCreate = jest.fn() as jest.Mock<void, [BindingOnCreateOptions<TLUnknownBinding>]>
|
|
47
|
-
const mockOnBeforeChange = jest.fn() as jest.Mock<void, [BindingOnChangeOptions<TLUnknownBinding>]>
|
|
48
|
-
const mockOnAfterChange = jest.fn() as jest.Mock<void, [BindingOnChangeOptions<TLUnknownBinding>]>
|
|
49
|
-
const mockOnAfterChangeFromShape = jest.fn() as jest.Mock<
|
|
50
|
-
void,
|
|
51
|
-
[BindingOnShapeChangeOptions<TLUnknownBinding>]
|
|
52
|
-
>
|
|
53
|
-
const mockOnAfterChangeToShape = jest.fn() as jest.Mock<
|
|
54
|
-
void,
|
|
55
|
-
[BindingOnShapeChangeOptions<TLUnknownBinding>]
|
|
56
|
-
>
|
|
27
|
+
const mockOnOperationComplete = vi.fn()
|
|
28
|
+
const mockOnBeforeDelete = vi.fn()
|
|
29
|
+
const mockOnAfterDelete = vi.fn()
|
|
30
|
+
const mockOnBeforeFromShapeDelete = vi.fn()
|
|
31
|
+
const mockOnBeforeToShapeDelete = vi.fn()
|
|
32
|
+
const mockOnBeforeFromShapeIsolate = vi.fn()
|
|
33
|
+
const mockOnBeforeToShapeIsolate = vi.fn()
|
|
34
|
+
const mockOnBeforeCreate = vi.fn()
|
|
35
|
+
const mockOnAfterCreate = vi.fn()
|
|
36
|
+
const mockOnBeforeChange = vi.fn()
|
|
37
|
+
const mockOnAfterChange = vi.fn()
|
|
38
|
+
const mockOnAfterChangeFromShape = vi.fn()
|
|
39
|
+
const mockOnAfterChangeToShape = vi.fn()
|
|
57
40
|
|
|
58
41
|
const calls: string[] = []
|
|
59
42
|
|
|
@@ -273,9 +256,11 @@ test('copying the to shape on its own does trigger the unbind operation', () =>
|
|
|
273
256
|
})
|
|
274
257
|
|
|
275
258
|
test('cascading deletes in beforeFromShapeDelete are handled correctly', () => {
|
|
276
|
-
mockOnBeforeFromShapeDelete.mockImplementation(
|
|
277
|
-
|
|
278
|
-
|
|
259
|
+
mockOnBeforeFromShapeDelete.mockImplementation(
|
|
260
|
+
(options: BindingOnShapeDeleteOptions<TLUnknownBinding>) => {
|
|
261
|
+
editor.deleteShape(options.binding.toId)
|
|
262
|
+
}
|
|
263
|
+
)
|
|
279
264
|
|
|
280
265
|
bindShapes(ids.box1, ids.box2)
|
|
281
266
|
bindShapes(ids.box2, ids.box3)
|
|
@@ -316,9 +301,11 @@ test('cascading deletes in beforeFromShapeDelete are handled correctly', () => {
|
|
|
316
301
|
})
|
|
317
302
|
|
|
318
303
|
test('cascading deletes in beforeToShapeDelete are handled correctly', () => {
|
|
319
|
-
mockOnBeforeToShapeDelete.mockImplementation(
|
|
320
|
-
|
|
321
|
-
|
|
304
|
+
mockOnBeforeToShapeDelete.mockImplementation(
|
|
305
|
+
(options: BindingOnShapeDeleteOptions<TLUnknownBinding>) => {
|
|
306
|
+
editor.deleteShape(options.binding.fromId)
|
|
307
|
+
}
|
|
308
|
+
)
|
|
322
309
|
|
|
323
310
|
bindShapes(ids.box1, ids.box2)
|
|
324
311
|
bindShapes(ids.box2, ids.box3)
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { TLBookmarkShape, createShapeId } from '@tldraw/editor'
|
|
2
|
-
import {
|
|
3
|
-
BookmarkShapeUtil,
|
|
4
|
-
getHumanReadableAddress,
|
|
5
|
-
} from '../lib/shapes/bookmark/BookmarkShapeUtil'
|
|
2
|
+
import { getHumanReadableAddress } from '../lib/shapes/bookmark/BookmarkShapeUtil'
|
|
6
3
|
import { TestEditor } from './TestEditor'
|
|
7
4
|
|
|
8
5
|
let editor: TestEditor
|
|
@@ -14,10 +11,6 @@ afterEach(() => {
|
|
|
14
11
|
editor?.dispose()
|
|
15
12
|
})
|
|
16
13
|
|
|
17
|
-
describe(BookmarkShapeUtil, () => {
|
|
18
|
-
return
|
|
19
|
-
})
|
|
20
|
-
|
|
21
14
|
describe('The URL formatter', () => {
|
|
22
15
|
it('Formats URLs as human-readable', () => {
|
|
23
16
|
const ids = {
|