tldraw 3.16.0-internal.a478398270c6 → 3.16.0-next.15f085081fd5
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 +316 -23
- package/dist-cjs/index.js +34 -2
- 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/TldrawImage.js +5 -2
- package/dist-cjs/lib/TldrawImage.js.map +3 -3
- package/dist-cjs/lib/canvas/TldrawCropHandles.js +1 -1
- package/dist-cjs/lib/canvas/TldrawCropHandles.js.map +2 -2
- package/dist-cjs/lib/canvas/TldrawHandles.js +1 -1
- package/dist-cjs/lib/canvas/TldrawHandles.js.map +2 -2
- package/dist-cjs/lib/canvas/TldrawOverlays.js +1 -1
- package/dist-cjs/lib/canvas/TldrawOverlays.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/canvas/TldrawSelectionForeground.js +279 -271
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
- package/dist-cjs/lib/defaultExternalContentHandlers.js +6 -4
- package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +27 -44
- 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 -6
- 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 +20 -17
- 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 -4
- 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 +20 -5
- package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +6 -5
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/PathBuilder.js +21 -3
- package/dist-cjs/lib/shapes/shared/PathBuilder.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -0
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js +5 -2
- package/dist-cjs/lib/shapes/shared/RichTextLabel.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/SvgTextLabel.js +4 -3
- package/dist-cjs/lib/shapes/shared/SvgTextLabel.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 +7 -13
- 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/styles.js.map +2 -2
- 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/Crop/children/PointingCrop.js +7 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.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 +27 -12
- package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
- package/dist-cjs/lib/ui/components/A11y.js +14 -12
- package/dist-cjs/lib/ui/components/A11y.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 +57 -7
- package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -2
- 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 +4 -5
- 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/Spinner.js +2 -25
- package/dist-cjs/lib/ui/components/Spinner.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 -139
- 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/DefaultImageToolbar.js +21 -7
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.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 +22 -0
- package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/Button/TldrawUiButtonIcon.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +7 -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/TldrawUiDialog.js +1 -1
- package/dist-cjs/lib/ui/components/primitives/TldrawUiDialog.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.js +35 -1
- package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.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 +6 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +31 -7
- package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +262 -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/TldrawUiMenuCheckboxItem.js.map +2 -2
- 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 -22
- 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 +72 -9
- 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/menu-hooks.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTools.js +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 +12 -0
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
- package/dist-cjs/lib/ui/kbd-utils.js +11 -4
- 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 +316 -23
- package/dist-esm/index.mjs +57 -5
- 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/TldrawImage.mjs +5 -2
- package/dist-esm/lib/TldrawImage.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawCropHandles.mjs +1 -1
- package/dist-esm/lib/canvas/TldrawCropHandles.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawHandles.mjs +1 -1
- package/dist-esm/lib/canvas/TldrawHandles.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawOverlays.mjs +1 -1
- package/dist-esm/lib/canvas/TldrawOverlays.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/canvas/TldrawSelectionForeground.mjs +279 -271
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
- package/dist-esm/lib/defaultExternalContentHandlers.mjs +6 -4
- package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +30 -44
- 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 -6
- 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 +21 -17
- 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 -4
- 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 +21 -5
- package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +7 -5
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/PathBuilder.mjs +22 -3
- package/dist-esm/lib/shapes/shared/PathBuilder.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +1 -0
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +5 -2
- package/dist-esm/lib/shapes/shared/RichTextLabel.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/SvgTextLabel.mjs +4 -3
- package/dist-esm/lib/shapes/shared/SvgTextLabel.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 +8 -13
- 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/styles.mjs.map +2 -2
- 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/Crop/children/PointingCrop.mjs +7 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.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 +29 -14
- package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
- package/dist-esm/lib/ui/components/A11y.mjs +14 -12
- package/dist-esm/lib/ui/components/A11y.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 +57 -7
- package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -3
- 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 +4 -5
- 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/Spinner.mjs +3 -26
- package/dist-esm/lib/ui/components/Spinner.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 -139
- 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/DefaultImageToolbar.mjs +23 -9
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs.map +3 -3
- 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 +22 -0
- package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/Button/TldrawUiButtonIcon.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +8 -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/TldrawUiDialog.mjs +1 -1
- package/dist-esm/lib/ui/components/primitives/TldrawUiDialog.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiIcon.mjs +36 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiIcon.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 +6 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +31 -7
- package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +239 -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/TldrawUiMenuCheckboxItem.mjs.map +2 -2
- 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 -24
- 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 +72 -9
- 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/menu-hooks.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTools.mjs +102 -10
- package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +12 -0
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
- package/dist-esm/lib/ui/kbd-utils.mjs +11 -4
- 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 +12 -34
- package/src/index.ts +42 -3
- package/src/lib/Tldraw.tsx +15 -2
- package/src/lib/TldrawImage.tsx +6 -2
- package/src/lib/canvas/TldrawCropHandles.tsx +3 -1
- package/src/lib/canvas/TldrawHandles.tsx +5 -1
- package/src/lib/canvas/TldrawOverlays.tsx +1 -1
- package/src/lib/canvas/TldrawScribble.tsx +1 -1
- package/src/lib/canvas/TldrawSelectionForeground.tsx +5 -1
- package/src/lib/defaultExternalContentHandlers.ts +14 -5
- 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 +30 -46
- 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 -7
- package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +30 -21
- 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 -4
- 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 +25 -6
- package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
- package/src/lib/shapes/note/NoteShapeUtil.tsx +10 -4
- package/src/lib/shapes/shared/PathBuilder.test.tsx +1 -1
- package/src/lib/shapes/shared/PathBuilder.tsx +35 -1
- package/src/lib/shapes/shared/PlainTextLabel.tsx +1 -0
- package/src/lib/shapes/shared/RichTextLabel.tsx +4 -0
- package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
- package/src/lib/shapes/shared/SvgTextLabel.tsx +4 -2
- 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 +8 -14
- package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
- package/src/lib/styles.tsx +3 -1
- 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/Crop/children/PointingCrop.ts +8 -1
- 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 +33 -12
- package/src/lib/ui/components/A11y.tsx +15 -13
- 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 +46 -6
- package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -2
- 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 +4 -5
- 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/Spinner.tsx +2 -24
- package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
- package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +146 -106
- 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/DefaultImageToolbar.tsx +25 -9
- 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 +25 -0
- package/src/lib/ui/components/primitives/Button/TldrawUiButtonIcon.tsx +2 -2
- package/src/lib/ui/components/primitives/TldrawUiButtonPicker.tsx +40 -35
- package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -1
- package/src/lib/ui/components/primitives/TldrawUiDialog.tsx +1 -1
- package/src/lib/ui/components/primitives/TldrawUiIcon.tsx +41 -3
- package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
- package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +6 -1
- package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +56 -12
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +325 -0
- package/src/lib/ui/components/primitives/layout.tsx +107 -0
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.tsx +2 -2
- 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 +224 -23
- package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
- package/src/lib/ui/context/actions.tsx +74 -10
- package/src/lib/ui/context/components.tsx +3 -0
- package/src/lib/ui/context/events.tsx +6 -2
- package/src/lib/ui/hooks/menu-hooks.ts +1 -0
- package/src/lib/ui/hooks/useKeyboardShortcuts.ts +3 -2
- package/src/lib/ui/hooks/useTools.tsx +142 -11
- package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +12 -0
- package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +12 -0
- package/src/lib/ui/kbd-utils.ts +12 -4
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +417 -314
- 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 +21 -20
- 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 +2 -2
- 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 +264 -9
- 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 +10 -9
- package/tldraw.css +737 -627
- package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
- package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/ui/hooks/menu-hooks.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\tEditor,\n\tTLArrowShape,\n\tTLDrawShape,\n\tTLGroupShape,\n\tTLImageShape,\n\tTLLineShape,\n\tTLTextShape,\n\tuseEditor,\n\tuseValue,\n} from '@tldraw/editor'\nimport { getArrowBindings } from '../../shapes/arrow/shared'\n\nfunction shapesWithUnboundArrows(editor: Editor) {\n\tconst selectedShapeIds = editor.getSelectedShapeIds()\n\tconst selectedShapes = selectedShapeIds.map((id) => {\n\t\treturn editor.getShape(id)\n\t})\n\n\treturn selectedShapes.filter((shape) => {\n\t\tif (!shape) return false\n\t\tif (editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) {\n\t\t\tconst bindings = getArrowBindings(editor, shape)\n\t\t\tif (bindings.start || bindings.end) return false\n\t\t}\n\t\treturn true\n\t})\n}\n\n/** @internal */\nexport const useThreeStackableItems = () => {\n\tconst editor = useEditor()\n\treturn useValue('threeStackableItems', () => shapesWithUnboundArrows(editor).length > 2, [editor])\n}\n\n/** @internal */\nexport const useIsInSelectState = () => {\n\tconst editor = useEditor()\n\treturn useValue('isInSelectState', () => editor.isIn('select'), [editor])\n}\n\n/** @internal */\nexport const useAllowGroup = () => {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'allow group',\n\t\t() => {\n\t\t\t// We can't group arrows that are bound to shapes that aren't selected\n\t\t\t// if more than one shape has an arrow bound to it, allow group\n\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\n\t\t\tif (selectedShapes.length < 2) return false\n\n\t\t\tfor (const shape of selectedShapes) {\n\t\t\t\tif (editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) {\n\t\t\t\t\tconst bindings = getArrowBindings(editor, shape)\n\t\t\t\t\tif (bindings.start) {\n\t\t\t\t\t\t// if the other shape is not among the selected shapes...\n\t\t\t\t\t\tif (!selectedShapes.some((s) => s.id === bindings.start!.toId)) {\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (bindings.end) {\n\t\t\t\t\t\t// if the other shape is not among the selected shapes...\n\t\t\t\t\t\tif (!selectedShapes.some((s) => s.id === bindings.end!.toId)) {\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t[editor]\n\t)\n}\n\n/** @internal */\nexport const useAllowUngroup = () => {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'allowUngroup',\n\t\t() => editor.getSelectedShapeIds().some((id) => editor.getShape(id)?.type === 'group'),\n\t\t[editor]\n\t)\n}\n\nexport const showMenuPaste =\n\ttypeof window !== 'undefined' &&\n\t'navigator' in window &&\n\tBoolean(navigator.clipboard) &&\n\tBoolean(navigator.clipboard.read)\n\n/**\n * Returns true if the number of LOCKED OR UNLOCKED selected shapes is at least min or at most max.\n */\nexport function useAnySelectedShapesCount(min?: number, max?: number) {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'selectedShapes',\n\t\t() => {\n\t\t\tconst len = editor.getSelectedShapes().length\n\t\t\tif (min === undefined) {\n\t\t\t\tif (max === undefined) {\n\t\t\t\t\t// just length\n\t\t\t\t\treturn len\n\t\t\t\t} else {\n\t\t\t\t\t// max but no min\n\t\t\t\t\treturn len <= max\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (max === undefined) {\n\t\t\t\t\t// min but no max\n\t\t\t\t\treturn len >= min\n\t\t\t\t} else {\n\t\t\t\t\t// max and min\n\t\t\t\t\treturn len >= min && len <= max\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editor, min, max]\n\t)\n}\n\n/**\n * Returns true if the number of UNLOCKED selected shapes is at least min or at most max.\n */\nexport function useUnlockedSelectedShapesCount(min?: number, max?: number) {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'selectedShapes',\n\t\t() => {\n\t\t\tconst len = editor\n\t\t\t\t.getSelectedShapes()\n\t\t\t\t.filter((s) => !editor.isShapeOrAncestorLocked(s)).length\n\t\t\tif (min === undefined) {\n\t\t\t\tif (max === undefined) {\n\t\t\t\t\t// just length\n\t\t\t\t\treturn len\n\t\t\t\t} else {\n\t\t\t\t\t// max but no min\n\t\t\t\t\treturn len <= max\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (max === undefined) {\n\t\t\t\t\t// min but no max\n\t\t\t\t\treturn len >= min\n\t\t\t\t} else {\n\t\t\t\t\t// max and min\n\t\t\t\t\treturn len >= min && len <= max\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editor]\n\t)\n}\n\nexport function useShowAutoSizeToggle() {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'showAutoSizeToggle',\n\t\t() => {\n\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\treturn (\n\t\t\t\tselectedShapes.length === 1 &&\n\t\t\t\teditor.isShapeOfType<TLTextShape>(selectedShapes[0], 'text') &&\n\t\t\t\tselectedShapes[0].props.autoSize === false\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n}\n\nexport function useHasLinkShapeSelected() {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'hasLinkShapeSelected',\n\t\t() => {\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\treturn !!(\n\t\t\t\tonlySelectedShape &&\n\t\t\t\tonlySelectedShape.type !== 'embed' &&\n\t\t\t\t'url' in onlySelectedShape.props &&\n\t\t\t\t!onlySelectedShape.isLocked\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n}\n\nexport function useOnlyFlippableShape() {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'onlyFlippableShape',\n\t\t() => {\n\t\t\tconst shape = editor.getOnlySelectedShape()\n\t\t\treturn (\n\t\t\t\tshape &&\n\t\t\t\t(editor.isShapeOfType<TLGroupShape>(shape, 'group') ||\n\t\t\t\t\teditor.isShapeOfType<TLImageShape>(shape, 'image') ||\n\t\t\t\t\teditor.isShapeOfType<TLArrowShape>(shape, 'arrow') ||\n\t\t\t\t\teditor.isShapeOfType<TLLineShape>(shape, 'line') ||\n\t\t\t\t\teditor.isShapeOfType<TLDrawShape>(shape, 'draw'))\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n}\n\n/** @public */\nexport function useCanRedo() {\n\tconst editor = useEditor()\n\treturn useValue('useCanRedo', () => editor.getCanRedo(), [editor])\n}\n\n/** @public */\nexport function useCanUndo() {\n\tconst editor = useEditor()\n\treturn useValue('useCanUndo', () => editor.getCanUndo(), [editor])\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAUO;AACP,oBAAiC;AAEjC,SAAS,wBAAwB,QAAgB;AAChD,QAAM,mBAAmB,OAAO,oBAAoB;AACpD,QAAM,iBAAiB,iBAAiB,IAAI,CAAC,OAAO;AACnD,WAAO,OAAO,SAAS,EAAE;AAAA,EAC1B,CAAC;AAED,SAAO,eAAe,OAAO,CAAC,UAAU;AACvC,QAAI,CAAC,MAAO,QAAO;AACnB,QAAI,OAAO,cAA4B,OAAO,OAAO,GAAG;AACvD,YAAM,eAAW,gCAAiB,QAAQ,KAAK;AAC/C,UAAI,SAAS,SAAS,SAAS,IAAK,QAAO;AAAA,IAC5C;AACA,WAAO;AAAA,EACR,CAAC;AACF;AAGO,MAAM,yBAAyB,MAAM;AAC3C,QAAM,aAAS,yBAAU;AACzB,aAAO,wBAAS,uBAAuB,MAAM,wBAAwB,MAAM,EAAE,SAAS,GAAG,CAAC,MAAM,CAAC;AAClG;AAGO,MAAM,qBAAqB,MAAM;AACvC,QAAM,aAAS,yBAAU;AACzB,aAAO,wBAAS,mBAAmB,MAAM,OAAO,KAAK,QAAQ,GAAG,CAAC,MAAM,CAAC;AACzE;AAGO,MAAM,gBAAgB,MAAM;AAClC,QAAM,aAAS,yBAAU;AACzB,aAAO;AAAA,IACN;AAAA,IACA,MAAM;AAGL,YAAM,iBAAiB,OAAO,kBAAkB;AAEhD,UAAI,eAAe,SAAS,EAAG,QAAO;AAEtC,iBAAW,SAAS,gBAAgB;AACnC,YAAI,OAAO,cAA4B,OAAO,OAAO,GAAG;AACvD,gBAAM,eAAW,gCAAiB,QAAQ,KAAK;AAC/C,cAAI,SAAS,OAAO;AAEnB,gBAAI,CAAC,eAAe,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,MAAO,IAAI,GAAG;AAC/D,qBAAO;AAAA,YACR;AAAA,UACD;AACA,cAAI,SAAS,KAAK;AAEjB,gBAAI,CAAC,eAAe,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,IAAK,IAAI,GAAG;AAC7D,qBAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,MACD;AACA,aAAO;AAAA,IACR;AAAA,IACA,CAAC,MAAM;AAAA,EACR;AACD;AAGO,MAAM,kBAAkB,MAAM;AACpC,QAAM,aAAS,yBAAU;AACzB,aAAO;AAAA,IACN;AAAA,IACA,MAAM,OAAO,oBAAoB,EAAE,KAAK,CAAC,OAAO,OAAO,SAAS,EAAE,GAAG,SAAS,OAAO;AAAA,IACrF,CAAC,MAAM;AAAA,EACR;AACD;AAEO,MAAM,gBACZ,OAAO,WAAW,eAClB,eAAe,UACf,QAAQ,UAAU,SAAS,KAC3B,QAAQ,UAAU,UAAU,IAAI;AAK1B,SAAS,0BAA0B,KAAc,KAAc;AACrE,QAAM,aAAS,yBAAU;AACzB,aAAO;AAAA,IACN;AAAA,IACA,MAAM;AACL,YAAM,MAAM,OAAO,kBAAkB,EAAE;AACvC,UAAI,QAAQ,QAAW;AACtB,YAAI,QAAQ,QAAW;AAEtB,iBAAO;AAAA,QACR,OAAO;AAEN,iBAAO,OAAO;AAAA,QACf;AAAA,MACD,OAAO;AACN,YAAI,QAAQ,QAAW;AAEtB,iBAAO,OAAO;AAAA,QACf,OAAO;AAEN,iBAAO,OAAO,OAAO,OAAO;AAAA,QAC7B;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAC,QAAQ,KAAK,GAAG;AAAA,EAClB;AACD;
|
|
4
|
+
"sourcesContent": ["import {\n\tEditor,\n\tTLArrowShape,\n\tTLDrawShape,\n\tTLGroupShape,\n\tTLImageShape,\n\tTLLineShape,\n\tTLTextShape,\n\tuseEditor,\n\tuseValue,\n} from '@tldraw/editor'\nimport { getArrowBindings } from '../../shapes/arrow/shared'\n\nfunction shapesWithUnboundArrows(editor: Editor) {\n\tconst selectedShapeIds = editor.getSelectedShapeIds()\n\tconst selectedShapes = selectedShapeIds.map((id) => {\n\t\treturn editor.getShape(id)\n\t})\n\n\treturn selectedShapes.filter((shape) => {\n\t\tif (!shape) return false\n\t\tif (editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) {\n\t\t\tconst bindings = getArrowBindings(editor, shape)\n\t\t\tif (bindings.start || bindings.end) return false\n\t\t}\n\t\treturn true\n\t})\n}\n\n/** @internal */\nexport const useThreeStackableItems = () => {\n\tconst editor = useEditor()\n\treturn useValue('threeStackableItems', () => shapesWithUnboundArrows(editor).length > 2, [editor])\n}\n\n/** @internal */\nexport const useIsInSelectState = () => {\n\tconst editor = useEditor()\n\treturn useValue('isInSelectState', () => editor.isIn('select'), [editor])\n}\n\n/** @internal */\nexport const useAllowGroup = () => {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'allow group',\n\t\t() => {\n\t\t\t// We can't group arrows that are bound to shapes that aren't selected\n\t\t\t// if more than one shape has an arrow bound to it, allow group\n\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\n\t\t\tif (selectedShapes.length < 2) return false\n\n\t\t\tfor (const shape of selectedShapes) {\n\t\t\t\tif (editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) {\n\t\t\t\t\tconst bindings = getArrowBindings(editor, shape)\n\t\t\t\t\tif (bindings.start) {\n\t\t\t\t\t\t// if the other shape is not among the selected shapes...\n\t\t\t\t\t\tif (!selectedShapes.some((s) => s.id === bindings.start!.toId)) {\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (bindings.end) {\n\t\t\t\t\t\t// if the other shape is not among the selected shapes...\n\t\t\t\t\t\tif (!selectedShapes.some((s) => s.id === bindings.end!.toId)) {\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t[editor]\n\t)\n}\n\n/** @internal */\nexport const useAllowUngroup = () => {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'allowUngroup',\n\t\t() => editor.getSelectedShapeIds().some((id) => editor.getShape(id)?.type === 'group'),\n\t\t[editor]\n\t)\n}\n\nexport const showMenuPaste =\n\ttypeof window !== 'undefined' &&\n\t'navigator' in window &&\n\tBoolean(navigator.clipboard) &&\n\tBoolean(navigator.clipboard.read)\n\n/**\n * Returns true if the number of LOCKED OR UNLOCKED selected shapes is at least min or at most max.\n */\nexport function useAnySelectedShapesCount(min?: number, max?: number) {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'selectedShapes',\n\t\t() => {\n\t\t\tconst len = editor.getSelectedShapes().length\n\t\t\tif (min === undefined) {\n\t\t\t\tif (max === undefined) {\n\t\t\t\t\t// just length\n\t\t\t\t\treturn len\n\t\t\t\t} else {\n\t\t\t\t\t// max but no min\n\t\t\t\t\treturn len <= max\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (max === undefined) {\n\t\t\t\t\t// min but no max\n\t\t\t\t\treturn len >= min\n\t\t\t\t} else {\n\t\t\t\t\t// max and min\n\t\t\t\t\treturn len >= min && len <= max\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editor, min, max]\n\t)\n}\n\n/**\n * Returns true if the number of UNLOCKED selected shapes is at least min or at most max.\n * @public\n */\nexport function useUnlockedSelectedShapesCount(min?: number, max?: number) {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'selectedShapes',\n\t\t() => {\n\t\t\tconst len = editor\n\t\t\t\t.getSelectedShapes()\n\t\t\t\t.filter((s) => !editor.isShapeOrAncestorLocked(s)).length\n\t\t\tif (min === undefined) {\n\t\t\t\tif (max === undefined) {\n\t\t\t\t\t// just length\n\t\t\t\t\treturn len\n\t\t\t\t} else {\n\t\t\t\t\t// max but no min\n\t\t\t\t\treturn len <= max\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (max === undefined) {\n\t\t\t\t\t// min but no max\n\t\t\t\t\treturn len >= min\n\t\t\t\t} else {\n\t\t\t\t\t// max and min\n\t\t\t\t\treturn len >= min && len <= max\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editor]\n\t)\n}\n\nexport function useShowAutoSizeToggle() {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'showAutoSizeToggle',\n\t\t() => {\n\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\treturn (\n\t\t\t\tselectedShapes.length === 1 &&\n\t\t\t\teditor.isShapeOfType<TLTextShape>(selectedShapes[0], 'text') &&\n\t\t\t\tselectedShapes[0].props.autoSize === false\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n}\n\nexport function useHasLinkShapeSelected() {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'hasLinkShapeSelected',\n\t\t() => {\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\treturn !!(\n\t\t\t\tonlySelectedShape &&\n\t\t\t\tonlySelectedShape.type !== 'embed' &&\n\t\t\t\t'url' in onlySelectedShape.props &&\n\t\t\t\t!onlySelectedShape.isLocked\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n}\n\nexport function useOnlyFlippableShape() {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'onlyFlippableShape',\n\t\t() => {\n\t\t\tconst shape = editor.getOnlySelectedShape()\n\t\t\treturn (\n\t\t\t\tshape &&\n\t\t\t\t(editor.isShapeOfType<TLGroupShape>(shape, 'group') ||\n\t\t\t\t\teditor.isShapeOfType<TLImageShape>(shape, 'image') ||\n\t\t\t\t\teditor.isShapeOfType<TLArrowShape>(shape, 'arrow') ||\n\t\t\t\t\teditor.isShapeOfType<TLLineShape>(shape, 'line') ||\n\t\t\t\t\teditor.isShapeOfType<TLDrawShape>(shape, 'draw'))\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n}\n\n/** @public */\nexport function useCanRedo() {\n\tconst editor = useEditor()\n\treturn useValue('useCanRedo', () => editor.getCanRedo(), [editor])\n}\n\n/** @public */\nexport function useCanUndo() {\n\tconst editor = useEditor()\n\treturn useValue('useCanUndo', () => editor.getCanUndo(), [editor])\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -77,7 +77,7 @@ function useKeyboardShortcuts() {
|
|
|
77
77
|
if (isReadonlyMode && !action.readonlyOk) continue;
|
|
78
78
|
if (SKIP_KBDS.includes(action.id)) continue;
|
|
79
79
|
hot(getHotkeysStringFromKbd(action.kbd), (event) => {
|
|
80
|
-
if (areShortcutsDisabled(editor)) return;
|
|
80
|
+
if (areShortcutsDisabled(editor) && !action.isRequiredA11yAction) return;
|
|
81
81
|
(0, import_editor.preventDefault)(event);
|
|
82
82
|
action.onSelect("kbd");
|
|
83
83
|
});
|
|
@@ -144,7 +144,7 @@ function useKeyboardShortcuts() {
|
|
|
144
144
|
}, [actions, tools, isReadonlyMode, editor, isFocused]);
|
|
145
145
|
}
|
|
146
146
|
function areShortcutsDisabled(editor) {
|
|
147
|
-
return editor.menus.hasAnyOpenMenus() || editor.getEditingShapeId() !== null || editor.getCrashingError();
|
|
147
|
+
return editor.menus.hasAnyOpenMenus() || editor.getEditingShapeId() !== null || editor.getCrashingError() || !editor.user.getAreKeyboardShortcutsEnabled();
|
|
148
148
|
}
|
|
149
149
|
function getHotkeysStringFromKbd(kbd) {
|
|
150
150
|
return getKeys(kbd).map((kbd2) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/ui/hooks/useKeyboardShortcuts.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\tEditor,\n\tTLPointerEventInfo,\n\tisAccelKey,\n\tpreventDefault,\n\tuseEditor,\n\tuseValue,\n} from '@tldraw/editor'\nimport hotkeys from 'hotkeys-js'\nimport { useEffect } from 'react'\nimport { useActions } from '../context/actions'\nimport { useReadonly } from './useReadonly'\nimport { useTools } from './useTools'\n\nconst SKIP_KBDS = [\n\t// we set these in useNativeClipboardEvents instead\n\t'copy',\n\t'cut',\n\t'paste',\n\t// There's also an upload asset action, so we don't want to set the kbd twice\n\t'asset',\n]\n\n/** @public */\nexport function useKeyboardShortcuts() {\n\tconst editor = useEditor()\n\n\tconst isReadonlyMode = useReadonly()\n\tconst actions = useActions()\n\tconst tools = useTools()\n\tconst isFocused = useValue('is focused', () => editor.getInstanceState().isFocused, [editor])\n\tuseEffect(() => {\n\t\tif (!isFocused) return\n\n\t\tconst disposables = new Array<() => void>()\n\t\tconst container = editor.getContainer()\n\n\t\tconst hot = (keys: string, callback: (event: KeyboardEvent) => void) => {\n\t\t\thotkeys(keys, { element: container.ownerDocument.body }, callback)\n\t\t\tdisposables.push(() => {\n\t\t\t\thotkeys.unbind(keys, callback)\n\t\t\t})\n\t\t}\n\n\t\tconst hotUp = (keys: string, callback: (event: KeyboardEvent) => void) => {\n\t\t\thotkeys(\n\t\t\t\tkeys,\n\t\t\t\t{ element: container.ownerDocument.body, keyup: true, keydown: false },\n\t\t\t\tcallback\n\t\t\t)\n\t\t\tdisposables.push(() => {\n\t\t\t\thotkeys.unbind(keys, callback)\n\t\t\t})\n\t\t}\n\n\t\t// Add hotkeys for actions and tools.\n\t\t// Except those that in SKIP_KBDS!\n\t\tfor (const action of Object.values(actions)) {\n\t\t\tif (!action.kbd) continue\n\t\t\tif (isReadonlyMode && !action.readonlyOk) continue\n\t\t\tif (SKIP_KBDS.includes(action.id)) continue\n\n\t\t\thot(getHotkeysStringFromKbd(action.kbd), (event) => {\n\t\t\t\tif (areShortcutsDisabled(editor)) return\n\t\t\t\tpreventDefault(event)\n\t\t\t\taction.onSelect('kbd')\n\t\t\t})\n\t\t}\n\n\t\tfor (const tool of Object.values(tools)) {\n\t\t\tif (!tool.kbd || (!tool.readonlyOk && editor.getIsReadonly())) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (SKIP_KBDS.includes(tool.id)) continue\n\n\t\t\thot(getHotkeysStringFromKbd(tool.kbd), (event) => {\n\t\t\t\tif (areShortcutsDisabled(editor)) return\n\t\t\t\tpreventDefault(event)\n\t\t\t\ttool.onSelect('kbd')\n\t\t\t})\n\t\t}\n\n\t\thot(',', (e) => {\n\t\t\t// Skip if shortcuts are disabled\n\t\t\tif (areShortcutsDisabled(editor)) return\n\n\t\t\t// Don't press again if already pressed\n\t\t\tif (editor.inputs.keys.has('Comma')) return\n\n\t\t\tpreventDefault(e) // prevent whatever would normally happen\n\t\t\teditor.focus() // Focus if not already focused\n\n\t\t\teditor.inputs.keys.add('Comma')\n\n\t\t\tconst { x, y, z } = editor.inputs.currentPagePoint\n\t\t\tconst screenpoints = editor.pageToScreen({ x, y })\n\n\t\t\tconst info: TLPointerEventInfo = {\n\t\t\t\ttype: 'pointer',\n\t\t\t\tname: 'pointer_down',\n\t\t\t\tpoint: { x: screenpoints.x, y: screenpoints.y, z },\n\t\t\t\tshiftKey: e.shiftKey,\n\t\t\t\taltKey: e.altKey,\n\t\t\t\tctrlKey: e.metaKey || e.ctrlKey,\n\t\t\t\tmetaKey: e.metaKey,\n\t\t\t\taccelKey: isAccelKey(e),\n\t\t\t\tpointerId: 0,\n\t\t\t\tbutton: 0,\n\t\t\t\tisPen: editor.getInstanceState().isPenMode,\n\t\t\t\ttarget: 'canvas',\n\t\t\t}\n\n\t\t\teditor.dispatch(info)\n\t\t})\n\n\t\thotUp(',', (e) => {\n\t\t\tif (areShortcutsDisabled(editor)) return\n\t\t\tif (!editor.inputs.keys.has('Comma')) return\n\n\t\t\teditor.inputs.keys.delete('Comma')\n\n\t\t\tconst { x, y, z } = editor.inputs.currentScreenPoint\n\t\t\tconst info: TLPointerEventInfo = {\n\t\t\t\ttype: 'pointer',\n\t\t\t\tname: 'pointer_up',\n\t\t\t\tpoint: { x, y, z },\n\t\t\t\tshiftKey: e.shiftKey,\n\t\t\t\taltKey: e.altKey,\n\t\t\t\tctrlKey: e.metaKey || e.ctrlKey,\n\t\t\t\tmetaKey: e.metaKey,\n\t\t\t\taccelKey: isAccelKey(e),\n\t\t\t\tpointerId: 0,\n\t\t\t\tbutton: 0,\n\t\t\t\tisPen: editor.getInstanceState().isPenMode,\n\t\t\t\ttarget: 'canvas',\n\t\t\t}\n\n\t\t\teditor.dispatch(info)\n\t\t})\n\n\t\treturn () => {\n\t\t\tdisposables.forEach((d) => d())\n\t\t}\n\t}, [actions, tools, isReadonlyMode, editor, isFocused])\n}\n\nexport function areShortcutsDisabled(editor: Editor) {\n\treturn (\n\t\teditor.menus.hasAnyOpenMenus() ||\n\t\teditor.getEditingShapeId() !== null ||\n\t\teditor.getCrashingError()\n\t)\n}\n\n// The \"raw\" kbd here will look something like \"a\" or a combination of keys \"del,backspace\".\n// We need to first split them up by comma, then parse each key to ensure backwards compatibility\n// with the old kbd format. We used to have symbols to denote cmd/alt/shift,\n// using ! for shift, $ for cmd, and ? for alt.\nfunction getHotkeysStringFromKbd(kbd: string) {\n\treturn getKeys(kbd)\n\t\t.map((kbd) => {\n\t\t\tlet str = ''\n\n\t\t\tconst shift = kbd.includes('!')\n\t\t\tconst alt = kbd.includes('?')\n\t\t\tconst cmd = kbd.includes('$')\n\n\t\t\t// remove the modifiers; the remaining string are the actual key\n\t\t\tconst k = kbd.replace(/[!?$]/g, '')\n\n\t\t\tif (shift && alt && cmd) {\n\t\t\t\tstr = `cmd+shift+alt+${k},ctrl+shift+alt+${k}`\n\t\t\t} else if (shift && cmd) {\n\t\t\t\tstr = `cmd+shift+${k},ctrl+shift+${k}`\n\t\t\t} else if (alt && cmd) {\n\t\t\t\tstr = `cmd+alt+${k},ctrl+alt+${k}`\n\t\t\t} else if (alt && shift) {\n\t\t\t\tstr = `shift+alt+${k}`\n\t\t\t} else if (shift) {\n\t\t\t\tstr = `shift+${k}`\n\t\t\t} else if (alt) {\n\t\t\t\tstr = `alt+${k}`\n\t\t\t} else if (cmd) {\n\t\t\t\tstr = `cmd+${k},ctrl+${k}`\n\t\t\t} else {\n\t\t\t\tstr = k\n\t\t\t}\n\n\t\t\treturn str\n\t\t})\n\t\t.join(',')\n}\n\n// Logic to split kbd string from hotkeys-js util.\nfunction getKeys(key: string) {\n\tif (typeof key !== 'string') key = ''\n\tkey = key.replace(/\\s/g, '')\n\tconst keys = key.split(',')\n\tlet index = keys.lastIndexOf('')\n\n\tfor (; index >= 0; ) {\n\t\tkeys[index - 1] += ','\n\t\tkeys.splice(index, 1)\n\t\tindex = keys.lastIndexOf('')\n\t}\n\n\treturn keys\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAOO;AACP,wBAAoB;AACpB,mBAA0B;AAC1B,qBAA2B;AAC3B,yBAA4B;AAC5B,sBAAyB;AAEzB,MAAM,YAAY;AAAA;AAAA,EAEjB;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACD;AAGO,SAAS,uBAAuB;AACtC,QAAM,aAAS,yBAAU;AAEzB,QAAM,qBAAiB,gCAAY;AACnC,QAAM,cAAU,2BAAW;AAC3B,QAAM,YAAQ,0BAAS;AACvB,QAAM,gBAAY,wBAAS,cAAc,MAAM,OAAO,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC;AAC5F,8BAAU,MAAM;AACf,QAAI,CAAC,UAAW;AAEhB,UAAM,cAAc,IAAI,MAAkB;AAC1C,UAAM,YAAY,OAAO,aAAa;AAEtC,UAAM,MAAM,CAAC,MAAc,aAA6C;AACvE,4BAAAA,SAAQ,MAAM,EAAE,SAAS,UAAU,cAAc,KAAK,GAAG,QAAQ;AACjE,kBAAY,KAAK,MAAM;AACtB,0BAAAA,QAAQ,OAAO,MAAM,QAAQ;AAAA,MAC9B,CAAC;AAAA,IACF;AAEA,UAAM,QAAQ,CAAC,MAAc,aAA6C;AACzE,4BAAAA;AAAA,QACC;AAAA,QACA,EAAE,SAAS,UAAU,cAAc,MAAM,OAAO,MAAM,SAAS,MAAM;AAAA,QACrE;AAAA,MACD;AACA,kBAAY,KAAK,MAAM;AACtB,0BAAAA,QAAQ,OAAO,MAAM,QAAQ;AAAA,MAC9B,CAAC;AAAA,IACF;AAIA,eAAW,UAAU,OAAO,OAAO,OAAO,GAAG;AAC5C,UAAI,CAAC,OAAO,IAAK;AACjB,UAAI,kBAAkB,CAAC,OAAO,WAAY;AAC1C,UAAI,UAAU,SAAS,OAAO,EAAE,EAAG;AAEnC,UAAI,wBAAwB,OAAO,GAAG,GAAG,CAAC,UAAU;AACnD,YAAI,qBAAqB,MAAM,
|
|
4
|
+
"sourcesContent": ["import {\n\tEditor,\n\tTLPointerEventInfo,\n\tisAccelKey,\n\tpreventDefault,\n\tuseEditor,\n\tuseValue,\n} from '@tldraw/editor'\nimport hotkeys from 'hotkeys-js'\nimport { useEffect } from 'react'\nimport { useActions } from '../context/actions'\nimport { useReadonly } from './useReadonly'\nimport { useTools } from './useTools'\n\nconst SKIP_KBDS = [\n\t// we set these in useNativeClipboardEvents instead\n\t'copy',\n\t'cut',\n\t'paste',\n\t// There's also an upload asset action, so we don't want to set the kbd twice\n\t'asset',\n]\n\n/** @public */\nexport function useKeyboardShortcuts() {\n\tconst editor = useEditor()\n\n\tconst isReadonlyMode = useReadonly()\n\tconst actions = useActions()\n\tconst tools = useTools()\n\tconst isFocused = useValue('is focused', () => editor.getInstanceState().isFocused, [editor])\n\tuseEffect(() => {\n\t\tif (!isFocused) return\n\n\t\tconst disposables = new Array<() => void>()\n\t\tconst container = editor.getContainer()\n\n\t\tconst hot = (keys: string, callback: (event: KeyboardEvent) => void) => {\n\t\t\thotkeys(keys, { element: container.ownerDocument.body }, callback)\n\t\t\tdisposables.push(() => {\n\t\t\t\thotkeys.unbind(keys, callback)\n\t\t\t})\n\t\t}\n\n\t\tconst hotUp = (keys: string, callback: (event: KeyboardEvent) => void) => {\n\t\t\thotkeys(\n\t\t\t\tkeys,\n\t\t\t\t{ element: container.ownerDocument.body, keyup: true, keydown: false },\n\t\t\t\tcallback\n\t\t\t)\n\t\t\tdisposables.push(() => {\n\t\t\t\thotkeys.unbind(keys, callback)\n\t\t\t})\n\t\t}\n\n\t\t// Add hotkeys for actions and tools.\n\t\t// Except those that in SKIP_KBDS!\n\t\tfor (const action of Object.values(actions)) {\n\t\t\tif (!action.kbd) continue\n\t\t\tif (isReadonlyMode && !action.readonlyOk) continue\n\t\t\tif (SKIP_KBDS.includes(action.id)) continue\n\n\t\t\thot(getHotkeysStringFromKbd(action.kbd), (event) => {\n\t\t\t\tif (areShortcutsDisabled(editor) && !action.isRequiredA11yAction) return\n\t\t\t\tpreventDefault(event)\n\t\t\t\taction.onSelect('kbd')\n\t\t\t})\n\t\t}\n\n\t\tfor (const tool of Object.values(tools)) {\n\t\t\tif (!tool.kbd || (!tool.readonlyOk && editor.getIsReadonly())) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (SKIP_KBDS.includes(tool.id)) continue\n\n\t\t\thot(getHotkeysStringFromKbd(tool.kbd), (event) => {\n\t\t\t\tif (areShortcutsDisabled(editor)) return\n\t\t\t\tpreventDefault(event)\n\t\t\t\ttool.onSelect('kbd')\n\t\t\t})\n\t\t}\n\n\t\thot(',', (e) => {\n\t\t\t// Skip if shortcuts are disabled\n\t\t\tif (areShortcutsDisabled(editor)) return\n\n\t\t\t// Don't press again if already pressed\n\t\t\tif (editor.inputs.keys.has('Comma')) return\n\n\t\t\tpreventDefault(e) // prevent whatever would normally happen\n\t\t\teditor.focus() // Focus if not already focused\n\n\t\t\teditor.inputs.keys.add('Comma')\n\n\t\t\tconst { x, y, z } = editor.inputs.currentPagePoint\n\t\t\tconst screenpoints = editor.pageToScreen({ x, y })\n\n\t\t\tconst info: TLPointerEventInfo = {\n\t\t\t\ttype: 'pointer',\n\t\t\t\tname: 'pointer_down',\n\t\t\t\tpoint: { x: screenpoints.x, y: screenpoints.y, z },\n\t\t\t\tshiftKey: e.shiftKey,\n\t\t\t\taltKey: e.altKey,\n\t\t\t\tctrlKey: e.metaKey || e.ctrlKey,\n\t\t\t\tmetaKey: e.metaKey,\n\t\t\t\taccelKey: isAccelKey(e),\n\t\t\t\tpointerId: 0,\n\t\t\t\tbutton: 0,\n\t\t\t\tisPen: editor.getInstanceState().isPenMode,\n\t\t\t\ttarget: 'canvas',\n\t\t\t}\n\n\t\t\teditor.dispatch(info)\n\t\t})\n\n\t\thotUp(',', (e) => {\n\t\t\tif (areShortcutsDisabled(editor)) return\n\t\t\tif (!editor.inputs.keys.has('Comma')) return\n\n\t\t\teditor.inputs.keys.delete('Comma')\n\n\t\t\tconst { x, y, z } = editor.inputs.currentScreenPoint\n\t\t\tconst info: TLPointerEventInfo = {\n\t\t\t\ttype: 'pointer',\n\t\t\t\tname: 'pointer_up',\n\t\t\t\tpoint: { x, y, z },\n\t\t\t\tshiftKey: e.shiftKey,\n\t\t\t\taltKey: e.altKey,\n\t\t\t\tctrlKey: e.metaKey || e.ctrlKey,\n\t\t\t\tmetaKey: e.metaKey,\n\t\t\t\taccelKey: isAccelKey(e),\n\t\t\t\tpointerId: 0,\n\t\t\t\tbutton: 0,\n\t\t\t\tisPen: editor.getInstanceState().isPenMode,\n\t\t\t\ttarget: 'canvas',\n\t\t\t}\n\n\t\t\teditor.dispatch(info)\n\t\t})\n\n\t\treturn () => {\n\t\t\tdisposables.forEach((d) => d())\n\t\t}\n\t}, [actions, tools, isReadonlyMode, editor, isFocused])\n}\n\nexport function areShortcutsDisabled(editor: Editor) {\n\treturn (\n\t\teditor.menus.hasAnyOpenMenus() ||\n\t\teditor.getEditingShapeId() !== null ||\n\t\teditor.getCrashingError() ||\n\t\t!editor.user.getAreKeyboardShortcutsEnabled()\n\t)\n}\n\n// The \"raw\" kbd here will look something like \"a\" or a combination of keys \"del,backspace\".\n// We need to first split them up by comma, then parse each key to ensure backwards compatibility\n// with the old kbd format. We used to have symbols to denote cmd/alt/shift,\n// using ! for shift, $ for cmd, and ? for alt.\nfunction getHotkeysStringFromKbd(kbd: string) {\n\treturn getKeys(kbd)\n\t\t.map((kbd) => {\n\t\t\tlet str = ''\n\n\t\t\tconst shift = kbd.includes('!')\n\t\t\tconst alt = kbd.includes('?')\n\t\t\tconst cmd = kbd.includes('$')\n\n\t\t\t// remove the modifiers; the remaining string are the actual key\n\t\t\tconst k = kbd.replace(/[!?$]/g, '')\n\n\t\t\tif (shift && alt && cmd) {\n\t\t\t\tstr = `cmd+shift+alt+${k},ctrl+shift+alt+${k}`\n\t\t\t} else if (shift && cmd) {\n\t\t\t\tstr = `cmd+shift+${k},ctrl+shift+${k}`\n\t\t\t} else if (alt && cmd) {\n\t\t\t\tstr = `cmd+alt+${k},ctrl+alt+${k}`\n\t\t\t} else if (alt && shift) {\n\t\t\t\tstr = `shift+alt+${k}`\n\t\t\t} else if (shift) {\n\t\t\t\tstr = `shift+${k}`\n\t\t\t} else if (alt) {\n\t\t\t\tstr = `alt+${k}`\n\t\t\t} else if (cmd) {\n\t\t\t\tstr = `cmd+${k},ctrl+${k}`\n\t\t\t} else {\n\t\t\t\tstr = k\n\t\t\t}\n\n\t\t\treturn str\n\t\t})\n\t\t.join(',')\n}\n\n// Logic to split kbd string from hotkeys-js util.\nfunction getKeys(key: string) {\n\tif (typeof key !== 'string') key = ''\n\tkey = key.replace(/\\s/g, '')\n\tconst keys = key.split(',')\n\tlet index = keys.lastIndexOf('')\n\n\tfor (; index >= 0; ) {\n\t\tkeys[index - 1] += ','\n\t\tkeys.splice(index, 1)\n\t\tindex = keys.lastIndexOf('')\n\t}\n\n\treturn keys\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["hotkeys", "kbd"]
|
|
7
7
|
}
|
|
@@ -30,6 +30,7 @@ var useTools_exports = {};
|
|
|
30
30
|
__export(useTools_exports, {
|
|
31
31
|
ToolsContext: () => ToolsContext,
|
|
32
32
|
ToolsProvider: () => ToolsProvider,
|
|
33
|
+
onDragFromToolbarToCreateShape: () => onDragFromToolbarToCreateShape,
|
|
33
34
|
useTools: () => useTools
|
|
34
35
|
});
|
|
35
36
|
module.exports = __toCommonJS(useTools_exports);
|
|
@@ -105,20 +106,26 @@ function ToolsProvider({ overrides, children }) {
|
|
|
105
106
|
onToolSelect(source, this);
|
|
106
107
|
}
|
|
107
108
|
},
|
|
108
|
-
...[...import_editor.GeoShapeGeoStyle.values].map((
|
|
109
|
-
id,
|
|
110
|
-
label: `tool.${
|
|
109
|
+
...[...import_editor.GeoShapeGeoStyle.values].map((geo) => ({
|
|
110
|
+
id: geo,
|
|
111
|
+
label: `tool.${geo}`,
|
|
111
112
|
meta: {
|
|
112
|
-
geo
|
|
113
|
+
geo
|
|
113
114
|
},
|
|
114
|
-
kbd:
|
|
115
|
-
icon: "geo-" +
|
|
115
|
+
kbd: geo === "rectangle" ? "r" : geo === "ellipse" ? "o" : void 0,
|
|
116
|
+
icon: "geo-" + geo,
|
|
116
117
|
onSelect(source) {
|
|
117
118
|
editor.run(() => {
|
|
118
|
-
editor.setStyleForNextShapes(import_editor.GeoShapeGeoStyle,
|
|
119
|
+
editor.setStyleForNextShapes(import_editor.GeoShapeGeoStyle, geo);
|
|
119
120
|
editor.setCurrentTool("geo");
|
|
120
|
-
onToolSelect(source, this, `geo-${
|
|
121
|
+
onToolSelect(source, this, `geo-${geo}`);
|
|
121
122
|
});
|
|
123
|
+
},
|
|
124
|
+
onDragStart(source, info) {
|
|
125
|
+
onDragFromToolbarToCreateShape(editor, info, {
|
|
126
|
+
createShape: (id) => editor.createShape({ id, type: "geo", props: { w: 200, h: 200, geo } })
|
|
127
|
+
});
|
|
128
|
+
trackEvent("drag-tool", { source, id: "geo" });
|
|
122
129
|
}
|
|
123
130
|
})),
|
|
124
131
|
{
|
|
@@ -129,6 +136,16 @@ function ToolsProvider({ overrides, children }) {
|
|
|
129
136
|
onSelect(source) {
|
|
130
137
|
editor.setCurrentTool("arrow");
|
|
131
138
|
onToolSelect(source, this);
|
|
139
|
+
},
|
|
140
|
+
onDragStart(source, info) {
|
|
141
|
+
onDragFromToolbarToCreateShape(editor, info, {
|
|
142
|
+
createShape: (id) => editor.createShape({
|
|
143
|
+
id,
|
|
144
|
+
type: "arrow",
|
|
145
|
+
props: { start: { x: 0, y: 0 }, end: { x: 200, y: 0 } }
|
|
146
|
+
})
|
|
147
|
+
});
|
|
148
|
+
trackEvent("drag-tool", { source, id: "arrow" });
|
|
132
149
|
}
|
|
133
150
|
},
|
|
134
151
|
{
|
|
@@ -139,6 +156,24 @@ function ToolsProvider({ overrides, children }) {
|
|
|
139
156
|
onSelect(source) {
|
|
140
157
|
editor.setCurrentTool("line");
|
|
141
158
|
onToolSelect(source, this);
|
|
159
|
+
},
|
|
160
|
+
onDragStart(source, info) {
|
|
161
|
+
onDragFromToolbarToCreateShape(editor, info, {
|
|
162
|
+
createShape: (id) => {
|
|
163
|
+
const [start, end] = (0, import_editor.getIndicesBetween)(null, null, 2);
|
|
164
|
+
editor.createShape({
|
|
165
|
+
id,
|
|
166
|
+
type: "line",
|
|
167
|
+
props: {
|
|
168
|
+
points: {
|
|
169
|
+
[start]: { id: start, index: start, x: 0, y: 200 },
|
|
170
|
+
[end]: { id: end, index: end, x: 200, y: 0 }
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
trackEvent("drag-tool", { source, id: "line" });
|
|
142
177
|
}
|
|
143
178
|
},
|
|
144
179
|
{
|
|
@@ -149,6 +184,12 @@ function ToolsProvider({ overrides, children }) {
|
|
|
149
184
|
onSelect(source) {
|
|
150
185
|
editor.setCurrentTool("frame");
|
|
151
186
|
onToolSelect(source, this);
|
|
187
|
+
},
|
|
188
|
+
onDragStart(source, info) {
|
|
189
|
+
onDragFromToolbarToCreateShape(editor, info, {
|
|
190
|
+
createShape: (id) => editor.createShape({ id, type: "frame" })
|
|
191
|
+
});
|
|
192
|
+
trackEvent("drag-tool", { source, id: "frame" });
|
|
152
193
|
}
|
|
153
194
|
},
|
|
154
195
|
{
|
|
@@ -159,6 +200,16 @@ function ToolsProvider({ overrides, children }) {
|
|
|
159
200
|
onSelect(source) {
|
|
160
201
|
editor.setCurrentTool("text");
|
|
161
202
|
onToolSelect(source, this);
|
|
203
|
+
},
|
|
204
|
+
onDragStart(source, info) {
|
|
205
|
+
onDragFromToolbarToCreateShape(editor, info, {
|
|
206
|
+
createShape: (id) => editor.createShape({ id, type: "text", props: { richText: (0, import_editor.toRichText)("Text") } }),
|
|
207
|
+
onDragEnd: (id) => {
|
|
208
|
+
editor.setEditingShape(id);
|
|
209
|
+
editor.emit("select-all-text", { shapeId: id });
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
trackEvent("drag-tool", { source, id: "text" });
|
|
162
213
|
}
|
|
163
214
|
},
|
|
164
215
|
{
|
|
@@ -179,6 +230,16 @@ function ToolsProvider({ overrides, children }) {
|
|
|
179
230
|
onSelect(source) {
|
|
180
231
|
editor.setCurrentTool("note");
|
|
181
232
|
onToolSelect(source, this);
|
|
233
|
+
},
|
|
234
|
+
onDragStart(source, info) {
|
|
235
|
+
onDragFromToolbarToCreateShape(editor, info, {
|
|
236
|
+
createShape: (id) => editor.createShape({ id, type: "note" }),
|
|
237
|
+
onDragEnd: (id) => {
|
|
238
|
+
editor.setEditingShape(id);
|
|
239
|
+
editor.emit("select-all-text", { shapeId: id });
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
trackEvent("drag-tool", { source, id: "note" });
|
|
182
243
|
}
|
|
183
244
|
},
|
|
184
245
|
{
|
|
@@ -219,7 +280,7 @@ function ToolsProvider({ overrides, children }) {
|
|
|
219
280
|
return overrides(editor, tools2, helpers);
|
|
220
281
|
}
|
|
221
282
|
return tools2;
|
|
222
|
-
}, [overrides, editor, helpers, onToolSelect]);
|
|
283
|
+
}, [overrides, editor, helpers, onToolSelect, trackEvent]);
|
|
223
284
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ToolsContext.Provider, { value: tools, children });
|
|
224
285
|
}
|
|
225
286
|
function useTools() {
|
|
@@ -229,4 +290,28 @@ function useTools() {
|
|
|
229
290
|
}
|
|
230
291
|
return ctx;
|
|
231
292
|
}
|
|
293
|
+
function onDragFromToolbarToCreateShape(editor, info, opts) {
|
|
294
|
+
const { x, y } = editor.inputs.currentPagePoint;
|
|
295
|
+
const stoppingPoint = editor.markHistoryStoppingPoint("drag shape tool");
|
|
296
|
+
editor.setCurrentTool("select.translating");
|
|
297
|
+
const id = (0, import_editor.createShapeId)();
|
|
298
|
+
opts.createShape(id);
|
|
299
|
+
const shape = (0, import_editor.assertExists)(editor.getShape(id), "Shape not found");
|
|
300
|
+
const { w, h } = editor.getShapePageBounds(id);
|
|
301
|
+
editor.updateShape({ id, type: shape.type, x: x - w / 2, y: y - h / 2 });
|
|
302
|
+
editor.select(id);
|
|
303
|
+
editor.setCurrentTool("select.translating", {
|
|
304
|
+
...info,
|
|
305
|
+
target: "shape",
|
|
306
|
+
shape: editor.getShape(id),
|
|
307
|
+
isCreating: true,
|
|
308
|
+
creatingMarkId: stoppingPoint,
|
|
309
|
+
onCreate() {
|
|
310
|
+
editor.setCurrentTool("select.idle");
|
|
311
|
+
editor.select(id);
|
|
312
|
+
opts.onDragEnd?.(id);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
editor.getCurrentTool().setCurrentToolIdMask(shape.type);
|
|
316
|
+
}
|
|
232
317
|
//# sourceMappingURL=useTools.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/ui/hooks/useTools.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Editor, GeoShapeGeoStyle, useMaybeEditor } from '@tldraw/editor'\nimport * as React from 'react'\nimport { EmbedDialog } from '../components/EmbedDialog'\nimport { useA11y } from '../context/a11y'\nimport { TLUiEventSource, useUiEvents } from '../context/events'\nimport { TLUiIconType } from '../icon-types'\nimport { TLUiOverrideHelpers, useDefaultHelpers } from '../overrides'\nimport { TLUiTranslationKey } from './useTranslation/TLUiTranslationKey'\nimport { useTranslation } from './useTranslation/useTranslation'\n\n/** @public */\nexport interface TLUiToolItem<\n\tTranslationKey extends string = string,\n\tIconType extends string = string,\n> {\n\tid: string\n\tlabel: TranslationKey\n\tshortcutsLabel?: TranslationKey\n\ticon: IconType\n\tonSelect(source: TLUiEventSource): void\n\t/**\n\t * The keyboard shortcut for this tool. This is a string that can be a single key,\n\t * or a combination of keys.\n\t * For example, `cmd+z` or `cmd+shift+z` or `cmd+u,ctrl+u`, or just `v` or `a`.\n\t * We have backwards compatibility with the old system, where we used to use\n\t * symbols to denote cmd/alt/shift, using `!` for shift, `$` for cmd, and `?` for alt.\n\t */\n\tkbd?: string\n\treadonlyOk?: boolean\n\tmeta?: {\n\t\t[key: string]: any\n\t}\n}\n\n/** @public */\nexport type TLUiToolsContextType = Record<string, TLUiToolItem>\n\n/** @internal */\nexport const ToolsContext = React.createContext<null | TLUiToolsContextType>(null)\n\n/** @public */\nexport interface TLUiToolsProviderProps {\n\toverrides?(\n\t\teditor: Editor,\n\t\ttools: TLUiToolsContextType,\n\t\thelpers: Partial<TLUiOverrideHelpers>\n\t): TLUiToolsContextType\n\tchildren: React.ReactNode\n}\n\n/** @internal */\nexport function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {\n\tconst editor = useMaybeEditor()\n\tconst trackEvent = useUiEvents()\n\n\tconst a11y = useA11y()\n\tconst msg = useTranslation()\n\tconst helpers = useDefaultHelpers()\n\n\tconst onToolSelect = React.useCallback(\n\t\t(\n\t\t\tsource: TLUiEventSource,\n\t\t\ttool: TLUiToolItem<TLUiTranslationKey, TLUiIconType>,\n\t\t\tid?: string\n\t\t) => {\n\t\t\ta11y.announce({ msg: msg(tool.label) })\n\t\t\ttrackEvent('select-tool', { source, id: id ?? tool.id })\n\t\t},\n\t\t[a11y, msg, trackEvent]\n\t)\n\n\tconst tools = React.useMemo<TLUiToolsContextType>(() => {\n\t\tif (!editor) return {}\n\t\tconst toolsArray: TLUiToolItem<TLUiTranslationKey, TLUiIconType>[] = [\n\t\t\t{\n\t\t\t\tid: 'select',\n\t\t\t\tlabel: 'tool.select',\n\t\t\t\ticon: 'tool-pointer',\n\t\t\t\tkbd: 'v',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\t\t// There's a quirk of select mode, where editing a shape is a sub-state of select.\n\t\t\t\t\t\t// Because the text tool can be locked/sticky, we need to make sure we exit the\n\t\t\t\t\t\t// text tool.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// psst, if you're changing this code, also change the code\n\t\t\t\t\t\t// in strange-tools.test.ts! Sadly it's duplicated there.\n\t\t\t\t\t\tconst currentNode = editor.root.getCurrent()!\n\t\t\t\t\t\tcurrentNode.exit({}, currentNode.id)\n\t\t\t\t\t\tcurrentNode.enter({}, currentNode.id)\n\t\t\t\t\t}\n\t\t\t\t\teditor.setCurrentTool('select')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'hand',\n\t\t\t\tlabel: 'tool.hand',\n\t\t\t\ticon: 'tool-hand',\n\t\t\t\tkbd: 'h',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('hand')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'eraser',\n\t\t\t\tlabel: 'tool.eraser',\n\t\t\t\ticon: 'tool-eraser',\n\t\t\t\tkbd: 'e',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('eraser')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'draw',\n\t\t\t\tlabel: 'tool.draw',\n\t\t\t\ticon: 'tool-pencil',\n\t\t\t\tkbd: 'd,b,x',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('draw')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t...[...GeoShapeGeoStyle.values].map((id) => ({\n\t\t\t\tid,\n\t\t\t\tlabel: `tool.${id}` as TLUiTranslationKey,\n\t\t\t\tmeta: {\n\t\t\t\t\tgeo: id,\n\t\t\t\t},\n\t\t\t\tkbd: id === 'rectangle' ? 'r' : id === 'ellipse' ? 'o' : undefined,\n\t\t\t\ticon: ('geo-' + id) as TLUiIconType,\n\t\t\t\tonSelect(source: TLUiEventSource) {\n\t\t\t\t\teditor.run(() => {\n\t\t\t\t\t\teditor.setStyleForNextShapes(GeoShapeGeoStyle, id)\n\t\t\t\t\t\teditor.setCurrentTool('geo')\n\t\t\t\t\t\tonToolSelect(source, this, `geo-${id}`)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t})),\n\t\t\t{\n\t\t\t\tid: 'arrow',\n\t\t\t\tlabel: 'tool.arrow',\n\t\t\t\ticon: 'tool-arrow',\n\t\t\t\tkbd: 'a',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('arrow')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'line',\n\t\t\t\tlabel: 'tool.line',\n\t\t\t\ticon: 'tool-line',\n\t\t\t\tkbd: 'l',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('line')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'frame',\n\t\t\t\tlabel: 'tool.frame',\n\t\t\t\ticon: 'tool-frame',\n\t\t\t\tkbd: 'f',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('frame')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'text',\n\t\t\t\tlabel: 'tool.text',\n\t\t\t\ticon: 'tool-text',\n\t\t\t\tkbd: 't',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('text')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'asset',\n\t\t\t\tlabel: 'tool.media',\n\t\t\t\ticon: 'tool-media',\n\t\t\t\tkbd: 'cmd+u,ctrl+u',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\thelpers.insertMedia()\n\t\t\t\t\tonToolSelect(source, this, 'media')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'note',\n\t\t\t\tlabel: 'tool.note',\n\t\t\t\ticon: 'tool-note',\n\t\t\t\tkbd: 'n',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('note')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'laser',\n\t\t\t\tlabel: 'tool.laser',\n\t\t\t\treadonlyOk: true,\n\t\t\t\ticon: 'tool-laser',\n\t\t\t\tkbd: 'k',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('laser')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'embed',\n\t\t\t\tlabel: 'tool.embed',\n\t\t\t\ticon: 'dot',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\thelpers.addDialog({ component: EmbedDialog })\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'highlight',\n\t\t\t\tlabel: 'tool.highlight',\n\t\t\t\ticon: 'tool-highlight',\n\t\t\t\t// TODO: pick a better shortcut\n\t\t\t\tkbd: 'shift+d',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('highlight')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\n\t\ttoolsArray.forEach((t) => (t.onSelect = t.onSelect.bind(t)))\n\n\t\tconst tools = Object.fromEntries(toolsArray.map((t) => [t.id, t]))\n\n\t\tif (overrides) {\n\t\t\treturn overrides(editor, tools, helpers)\n\t\t}\n\n\t\treturn tools\n\t}, [overrides, editor, helpers, onToolSelect])\n\n\treturn <ToolsContext.Provider value={tools}>{children}</ToolsContext.Provider>\n}\n\n/** @public */\nexport function useTools() {\n\tconst ctx = React.useContext(ToolsContext)\n\n\tif (!ctx) {\n\t\tthrow new Error('useTools must be used within a ToolProvider')\n\t}\n\n\treturn ctx\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import {\n\tassertExists,\n\tcreateShapeId,\n\tEditor,\n\tGeoShapeGeoStyle,\n\tgetIndicesBetween,\n\tTLLineShape,\n\tTLPointerEventInfo,\n\tTLShapeId,\n\ttoRichText,\n\tuseMaybeEditor,\n} from '@tldraw/editor'\nimport * as React from 'react'\nimport { EmbedDialog } from '../components/EmbedDialog'\nimport { TLUiIconJsx } from '../components/primitives/TldrawUiIcon'\nimport { useA11y } from '../context/a11y'\nimport { TLUiEventSource, useUiEvents } from '../context/events'\nimport { TLUiIconType } from '../icon-types'\nimport { TLUiOverrideHelpers, useDefaultHelpers } from '../overrides'\nimport { TLUiTranslationKey } from './useTranslation/TLUiTranslationKey'\nimport { useTranslation } from './useTranslation/useTranslation'\n\n/** @public */\nexport interface TLUiToolItem<\n\tTranslationKey extends string = string,\n\tIconType extends string = string,\n> {\n\tid: string\n\tlabel: TranslationKey\n\tshortcutsLabel?: TranslationKey\n\ticon: IconType | TLUiIconJsx\n\tonSelect(source: TLUiEventSource): void\n\tonDragStart?(source: TLUiEventSource, info: TLPointerEventInfo): void\n\t/**\n\t * The keyboard shortcut for this tool. This is a string that can be a single key,\n\t * or a combination of keys.\n\t * For example, `cmd+z` or `cmd+shift+z` or `cmd+u,ctrl+u`, or just `v` or `a`.\n\t * We have backwards compatibility with the old system, where we used to use\n\t * symbols to denote cmd/alt/shift, using `!` for shift, `$` for cmd, and `?` for alt.\n\t */\n\tkbd?: string\n\treadonlyOk?: boolean\n\tmeta?: {\n\t\t[key: string]: any\n\t}\n}\n\n/** @public */\nexport type TLUiToolsContextType = Record<string, TLUiToolItem>\n\n/** @internal */\nexport const ToolsContext = React.createContext<null | TLUiToolsContextType>(null)\n\n/** @public */\nexport interface TLUiToolsProviderProps {\n\toverrides?(\n\t\teditor: Editor,\n\t\ttools: TLUiToolsContextType,\n\t\thelpers: Partial<TLUiOverrideHelpers>\n\t): TLUiToolsContextType\n\tchildren: React.ReactNode\n}\n\n/** @internal */\nexport function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {\n\tconst editor = useMaybeEditor()\n\tconst trackEvent = useUiEvents()\n\n\tconst a11y = useA11y()\n\tconst msg = useTranslation()\n\tconst helpers = useDefaultHelpers()\n\n\tconst onToolSelect = React.useCallback(\n\t\t(\n\t\t\tsource: TLUiEventSource,\n\t\t\ttool: TLUiToolItem<TLUiTranslationKey, TLUiIconType>,\n\t\t\tid?: string\n\t\t) => {\n\t\t\ta11y.announce({ msg: msg(tool.label) })\n\t\t\ttrackEvent('select-tool', { source, id: id ?? tool.id })\n\t\t},\n\t\t[a11y, msg, trackEvent]\n\t)\n\n\tconst tools = React.useMemo<TLUiToolsContextType>(() => {\n\t\tif (!editor) return {}\n\t\tconst toolsArray: TLUiToolItem<TLUiTranslationKey, TLUiIconType>[] = [\n\t\t\t{\n\t\t\t\tid: 'select',\n\t\t\t\tlabel: 'tool.select',\n\t\t\t\ticon: 'tool-pointer',\n\t\t\t\tkbd: 'v',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\t\t// There's a quirk of select mode, where editing a shape is a sub-state of select.\n\t\t\t\t\t\t// Because the text tool can be locked/sticky, we need to make sure we exit the\n\t\t\t\t\t\t// text tool.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// psst, if you're changing this code, also change the code\n\t\t\t\t\t\t// in strange-tools.test.ts! Sadly it's duplicated there.\n\t\t\t\t\t\tconst currentNode = editor.root.getCurrent()!\n\t\t\t\t\t\tcurrentNode.exit({}, currentNode.id)\n\t\t\t\t\t\tcurrentNode.enter({}, currentNode.id)\n\t\t\t\t\t}\n\t\t\t\t\teditor.setCurrentTool('select')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'hand',\n\t\t\t\tlabel: 'tool.hand',\n\t\t\t\ticon: 'tool-hand',\n\t\t\t\tkbd: 'h',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('hand')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'eraser',\n\t\t\t\tlabel: 'tool.eraser',\n\t\t\t\ticon: 'tool-eraser',\n\t\t\t\tkbd: 'e',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('eraser')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'draw',\n\t\t\t\tlabel: 'tool.draw',\n\t\t\t\ticon: 'tool-pencil',\n\t\t\t\tkbd: 'd,b,x',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('draw')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t...[...GeoShapeGeoStyle.values].map((geo) => ({\n\t\t\t\tid: geo,\n\t\t\t\tlabel: `tool.${geo}` as TLUiTranslationKey,\n\t\t\t\tmeta: {\n\t\t\t\t\tgeo,\n\t\t\t\t},\n\t\t\t\tkbd: geo === 'rectangle' ? 'r' : geo === 'ellipse' ? 'o' : undefined,\n\t\t\t\ticon: ('geo-' + geo) as TLUiIconType,\n\t\t\t\tonSelect(source: TLUiEventSource) {\n\t\t\t\t\teditor.run(() => {\n\t\t\t\t\t\teditor.setStyleForNextShapes(GeoShapeGeoStyle, geo)\n\t\t\t\t\t\teditor.setCurrentTool('geo')\n\t\t\t\t\t\tonToolSelect(source, this, `geo-${geo}`)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tonDragStart(source: TLUiEventSource, info: TLPointerEventInfo) {\n\t\t\t\t\tonDragFromToolbarToCreateShape(editor, info, {\n\t\t\t\t\t\tcreateShape: (id) =>\n\t\t\t\t\t\t\teditor.createShape({ id, type: 'geo', props: { w: 200, h: 200, geo } }),\n\t\t\t\t\t})\n\t\t\t\t\ttrackEvent('drag-tool', { source, id: 'geo' })\n\t\t\t\t},\n\t\t\t})),\n\t\t\t{\n\t\t\t\tid: 'arrow',\n\t\t\t\tlabel: 'tool.arrow',\n\t\t\t\ticon: 'tool-arrow',\n\t\t\t\tkbd: 'a',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('arrow')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t\tonDragStart(source: TLUiEventSource, info: TLPointerEventInfo) {\n\t\t\t\t\tonDragFromToolbarToCreateShape(editor, info, {\n\t\t\t\t\t\tcreateShape: (id) =>\n\t\t\t\t\t\t\teditor.createShape({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\t\t\t\tprops: { start: { x: 0, y: 0 }, end: { x: 200, y: 0 } },\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\t\t\t\t\ttrackEvent('drag-tool', { source, id: 'arrow' })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'line',\n\t\t\t\tlabel: 'tool.line',\n\t\t\t\ticon: 'tool-line',\n\t\t\t\tkbd: 'l',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('line')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t\tonDragStart(source, info) {\n\t\t\t\t\tonDragFromToolbarToCreateShape(editor, info, {\n\t\t\t\t\t\tcreateShape: (id) => {\n\t\t\t\t\t\t\tconst [start, end] = getIndicesBetween(null, null, 2)\n\t\t\t\t\t\t\teditor.createShape<TLLineShape>({\n\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\ttype: 'line',\n\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\tpoints: {\n\t\t\t\t\t\t\t\t\t\t[start]: { id: start, index: start, x: 0, y: 200 },\n\t\t\t\t\t\t\t\t\t\t[end]: { id: end, index: end, x: 200, y: 0 },\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\ttrackEvent('drag-tool', { source, id: 'line' })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'frame',\n\t\t\t\tlabel: 'tool.frame',\n\t\t\t\ticon: 'tool-frame',\n\t\t\t\tkbd: 'f',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('frame')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t\tonDragStart(source, info) {\n\t\t\t\t\tonDragFromToolbarToCreateShape(editor, info, {\n\t\t\t\t\t\tcreateShape: (id) => editor.createShape({ id, type: 'frame' }),\n\t\t\t\t\t})\n\t\t\t\t\ttrackEvent('drag-tool', { source, id: 'frame' })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'text',\n\t\t\t\tlabel: 'tool.text',\n\t\t\t\ticon: 'tool-text',\n\t\t\t\tkbd: 't',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('text')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t\tonDragStart(source, info) {\n\t\t\t\t\tonDragFromToolbarToCreateShape(editor, info, {\n\t\t\t\t\t\tcreateShape: (id) =>\n\t\t\t\t\t\t\teditor.createShape({ id, type: 'text', props: { richText: toRichText('Text') } }),\n\t\t\t\t\t\tonDragEnd: (id) => {\n\t\t\t\t\t\t\teditor.setEditingShape(id)\n\t\t\t\t\t\t\teditor.emit('select-all-text', { shapeId: id })\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\ttrackEvent('drag-tool', { source, id: 'text' })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'asset',\n\t\t\t\tlabel: 'tool.media',\n\t\t\t\ticon: 'tool-media',\n\t\t\t\tkbd: 'cmd+u,ctrl+u',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\thelpers.insertMedia()\n\t\t\t\t\tonToolSelect(source, this, 'media')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'note',\n\t\t\t\tlabel: 'tool.note',\n\t\t\t\ticon: 'tool-note',\n\t\t\t\tkbd: 'n',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('note')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t\tonDragStart(source, info) {\n\t\t\t\t\tonDragFromToolbarToCreateShape(editor, info, {\n\t\t\t\t\t\tcreateShape: (id) => editor.createShape({ id, type: 'note' }),\n\t\t\t\t\t\tonDragEnd: (id) => {\n\t\t\t\t\t\t\teditor.setEditingShape(id)\n\t\t\t\t\t\t\teditor.emit('select-all-text', { shapeId: id })\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\ttrackEvent('drag-tool', { source, id: 'note' })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'laser',\n\t\t\t\tlabel: 'tool.laser',\n\t\t\t\treadonlyOk: true,\n\t\t\t\ticon: 'tool-laser',\n\t\t\t\tkbd: 'k',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('laser')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'embed',\n\t\t\t\tlabel: 'tool.embed',\n\t\t\t\ticon: 'dot',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\thelpers.addDialog({ component: EmbedDialog })\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'highlight',\n\t\t\t\tlabel: 'tool.highlight',\n\t\t\t\ticon: 'tool-highlight',\n\t\t\t\t// TODO: pick a better shortcut\n\t\t\t\tkbd: 'shift+d',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.setCurrentTool('highlight')\n\t\t\t\t\tonToolSelect(source, this)\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\n\t\ttoolsArray.forEach((t) => (t.onSelect = t.onSelect.bind(t)))\n\n\t\tconst tools = Object.fromEntries(toolsArray.map((t) => [t.id, t]))\n\n\t\tif (overrides) {\n\t\t\treturn overrides(editor, tools, helpers)\n\t\t}\n\n\t\treturn tools\n\t}, [overrides, editor, helpers, onToolSelect, trackEvent])\n\n\treturn <ToolsContext.Provider value={tools}>{children}</ToolsContext.Provider>\n}\n\n/** @public */\nexport function useTools() {\n\tconst ctx = React.useContext(ToolsContext)\n\n\tif (!ctx) {\n\t\tthrow new Error('useTools must be used within a ToolProvider')\n\t}\n\n\treturn ctx\n}\n\n/**\n * Options for {@link onDragFromToolbarToCreateShape}.\n * @public\n */\nexport interface OnDragFromToolbarToCreateShapesOpts {\n\t/**\n\t * Create the shape being dragged. You don't need to worry about positioning it, as it'll be\n\t * immediately updated with the correct position.\n\t */\n\tcreateShape(id: TLShapeId): void\n\t/**\n\t * Called once the drag interaction has finished.\n\t */\n\tonDragEnd?(id: TLShapeId): void\n}\n\n/**\n * A helper method to use in {@link TLUiToolItem#onDragStart} to create a shape by dragging it from\n * the toolbar.\n * @public\n */\nexport function onDragFromToolbarToCreateShape(\n\teditor: Editor,\n\tinfo: TLPointerEventInfo,\n\topts: OnDragFromToolbarToCreateShapesOpts\n) {\n\tconst { x, y } = editor.inputs.currentPagePoint\n\n\tconst stoppingPoint = editor.markHistoryStoppingPoint('drag shape tool')\n\teditor.setCurrentTool('select.translating')\n\n\tconst id = createShapeId()\n\topts.createShape(id)\n\tconst shape = assertExists(editor.getShape(id), 'Shape not found')\n\n\tconst { w, h } = editor.getShapePageBounds(id)!\n\teditor.updateShape({ id, type: shape.type, x: x - w / 2, y: y - h / 2 })\n\teditor.select(id)\n\n\teditor.setCurrentTool('select.translating', {\n\t\t...info,\n\t\ttarget: 'shape',\n\t\tshape: editor.getShape(id),\n\t\tisCreating: true,\n\t\tcreatingMarkId: stoppingPoint,\n\t\tonCreate() {\n\t\t\teditor.setCurrentTool('select.idle')\n\t\t\teditor.select(id)\n\t\t\topts.onDragEnd?.(id)\n\t\t},\n\t})\n\n\teditor.getCurrentTool().setCurrentToolIdMask(shape.type)\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["tools"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts"],
|
|
4
|
-
"sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\n/** @public */\nexport type TLUiTranslationKey =\n\t| 'action.convert-to-bookmark'\n\t| 'action.convert-to-embed'\n\t| 'action.open-embed-link'\n\t| 'action.align-bottom'\n\t| 'action.align-center-horizontal'\n\t| 'action.align-center-vertical'\n\t| 'action.align-center-horizontal.short'\n\t| 'action.align-center-vertical.short'\n\t| 'action.align-left'\n\t| 'action.align-right'\n\t| 'action.align-top'\n\t| 'action.back-to-content'\n\t| 'action.bring-forward'\n\t| 'action.bring-to-front'\n\t| 'action.copy-as-png.short'\n\t| 'action.copy-as-png'\n\t| 'action.copy-as-svg.short'\n\t| 'action.copy-as-svg'\n\t| 'action.copy'\n\t| 'action.cut'\n\t| 'action.delete'\n\t| 'action.unlock-all'\n\t| 'action.distribute-horizontal'\n\t| 'action.distribute-vertical'\n\t| 'action.distribute-horizontal.short'\n\t| 'action.distribute-vertical.short'\n\t| 'action.download-original'\n\t| 'action.duplicate'\n\t| 'action.edit-link'\n\t| 'action.exit-pen-mode'\n\t| 'action.export-as-png.short'\n\t| 'action.export-as-png'\n\t| 'action.export-as-svg.short'\n\t| 'action.export-as-svg'\n\t| 'action.export-all-as-png.short'\n\t| 'action.export-all-as-png'\n\t| 'action.export-all-as-svg.short'\n\t| 'action.export-all-as-svg'\n\t| 'action.fit-frame-to-content'\n\t| 'action.flip-horizontal'\n\t| 'action.flip-vertical'\n\t| 'action.flip-horizontal.short'\n\t| 'action.flip-vertical.short'\n\t| 'action.fork-project'\n\t| 'action.fork-project-on-tldraw'\n\t| 'action.group'\n\t| 'action.insert-embed'\n\t| 'action.insert-media'\n\t| 'action.leave-shared-project'\n\t| 'action.new-project'\n\t| 'action.new-shared-project'\n\t| 'action.open-cursor-chat'\n\t| 'action.open-file'\n\t| 'action.pack'\n\t| 'action.paste'\n\t| 'action.paste-error-title'\n\t| 'action.paste-error-description'\n\t| 'action.print'\n\t| 'action.redo'\n\t| 'action.remove-frame'\n\t| 'action.rename'\n\t| 'action.rotate-ccw'\n\t| 'action.rotate-cw'\n\t| 'action.save-copy'\n\t| 'action.select-all'\n\t| 'action.select-none'\n\t| 'action.send-backward'\n\t| 'action.send-to-back'\n\t| 'action.share-project'\n\t| 'action.stack-horizontal'\n\t| 'action.stack-vertical'\n\t| 'action.stack-horizontal.short'\n\t| 'action.stack-vertical.short'\n\t| 'action.stop-following'\n\t| 'action.stretch-horizontal'\n\t| 'action.stretch-vertical'\n\t| 'action.stretch-horizontal.short'\n\t| 'action.stretch-vertical.short'\n\t| 'action.toggle-auto-size'\n\t| 'action.toggle-dark-mode.menu'\n\t| 'action.toggle-dark-mode'\n\t| 'action.toggle-paste-at-cursor.menu'\n\t| 'action.toggle-paste-at-cursor'\n\t| 'action.toggle-wrap-mode.menu'\n\t| 'action.toggle-wrap-mode'\n\t| 'action.toggle-reduce-motion.menu'\n\t| 'action.toggle-reduce-motion'\n\t| 'action.toggle-edge-scrolling.menu'\n\t| 'action.toggle-edge-scrolling'\n\t| 'action.toggle-debug-mode.menu'\n\t| 'action.toggle-debug-mode'\n\t| 'action.toggle-focus-mode.menu'\n\t| 'action.toggle-focus-mode'\n\t| 'action.toggle-dynamic-size-mode.menu'\n\t| 'action.toggle-dynamic-size-mode'\n\t| 'action.toggle-grid.menu'\n\t| 'action.toggle-grid'\n\t| 'action.toggle-lock'\n\t| 'action.flatten-to-image'\n\t| 'action.toggle-snap-mode.menu'\n\t| 'action.toggle-snap-mode'\n\t| 'action.toggle-tool-lock.menu'\n\t| 'action.toggle-tool-lock'\n\t| 'action.toggle-transparent.context-menu'\n\t| 'action.toggle-transparent.menu'\n\t| 'action.toggle-transparent'\n\t| 'action.undo'\n\t| 'action.ungroup'\n\t| 'action.zoom-in'\n\t| 'action.zoom-out'\n\t| 'action.zoom-to-100'\n\t| 'action.zoom-to-fit'\n\t| 'action.zoom-to-selection'\n\t| 'assets.files.size-too-big'\n\t| 'assets.files.type-not-allowed'\n\t| 'assets.files.upload-failed'\n\t| 'assets.files.amount-too-many'\n\t| 'assets.url.failed'\n\t| 'theme.dark'\n\t| 'theme.light'\n\t| 'theme.system'\n\t| 'color-style.white'\n\t| 'color-style.black'\n\t| 'color-style.blue'\n\t| 'color-style.green'\n\t| 'color-style.grey'\n\t| 'color-style.light-blue'\n\t| 'color-style.light-green'\n\t| 'color-style.light-red'\n\t| 'color-style.light-violet'\n\t| 'color-style.orange'\n\t| 'color-style.red'\n\t| 'color-style.violet'\n\t| 'color-style.yellow'\n\t| 'fill-style.none'\n\t| 'document.default-name'\n\t| 'fill-style.semi'\n\t| 'fill-style.solid'\n\t| 'fill-style.pattern'\n\t| 'fill-style.fill'\n\t| 'dash-style.dashed'\n\t| 'dash-style.dotted'\n\t| 'dash-style.draw'\n\t| 'dash-style.solid'\n\t| 'size-style.s'\n\t| 'size-style.m'\n\t| 'size-style.l'\n\t| 'size-style.xl'\n\t| 'opacity-style.0.1'\n\t| 'opacity-style.0.25'\n\t| 'opacity-style.0.5'\n\t| 'opacity-style.0.75'\n\t| 'opacity-style.1'\n\t| 'font-style.draw'\n\t| 'font-style.sans'\n\t| 'font-style.serif'\n\t| 'font-style.mono'\n\t| 'align-style.start'\n\t| 'align-style.middle'\n\t| 'align-style.end'\n\t| 'align-style.justify'\n\t| 'verticalAlign-style.start'\n\t| 'verticalAlign-style.middle'\n\t| 'verticalAlign-style.end'\n\t| 'geo-style.arrow-down'\n\t| 'geo-style.arrow-left'\n\t| 'geo-style.arrow-right'\n\t| 'geo-style.arrow-up'\n\t| 'geo-style.cloud'\n\t| 'geo-style.diamond'\n\t| 'geo-style.ellipse'\n\t| 'geo-style.heart'\n\t| 'geo-style.hexagon'\n\t| 'geo-style.octagon'\n\t| 'geo-style.oval'\n\t| 'geo-style.pentagon'\n\t| 'geo-style.rectangle'\n\t| 'geo-style.rhombus'\n\t| 'geo-style.star'\n\t| 'geo-style.trapezoid'\n\t| 'geo-style.triangle'\n\t| 'geo-style.x-box'\n\t| 'geo-style.check-box'\n\t| 'arrowheadStart-style.none'\n\t| 'arrowheadStart-style.arrow'\n\t| 'arrowheadStart-style.bar'\n\t| 'arrowheadStart-style.diamond'\n\t| 'arrowheadStart-style.dot'\n\t| 'arrowheadStart-style.inverted'\n\t| 'arrowheadStart-style.pipe'\n\t| 'arrowheadStart-style.square'\n\t| 'arrowheadStart-style.triangle'\n\t| 'arrowheadEnd-style.none'\n\t| 'arrowheadEnd-style.arrow'\n\t| 'arrowheadEnd-style.bar'\n\t| 'arrowheadEnd-style.diamond'\n\t| 'arrowheadEnd-style.dot'\n\t| 'arrowheadEnd-style.inverted'\n\t| 'arrowheadEnd-style.pipe'\n\t| 'arrowheadEnd-style.square'\n\t| 'arrowheadEnd-style.triangle'\n\t| 'spline-style.line'\n\t| 'spline-style.cubic'\n\t| 'arrow-kind-style.arc'\n\t| 'arrow-kind-style.elbow'\n\t| 'tool.select'\n\t| 'tool.hand'\n\t| 'tool.draw'\n\t| 'tool.eraser'\n\t| 'tool.arrow-down'\n\t| 'tool.arrow-left'\n\t| 'tool.arrow-right'\n\t| 'tool.arrow-up'\n\t| 'tool.arrow'\n\t| 'tool.cloud'\n\t| 'tool.diamond'\n\t| 'tool.ellipse'\n\t| 'tool.heart'\n\t| 'tool.hexagon'\n\t| 'tool.highlight'\n\t| 'tool.line'\n\t| 'tool.octagon'\n\t| 'tool.oval'\n\t| 'tool.pentagon'\n\t| 'tool.rectangle'\n\t| 'tool.rhombus'\n\t| 'tool.star'\n\t| 'tool.trapezoid'\n\t| 'tool.triangle'\n\t| 'tool.x-box'\n\t| 'tool.check-box'\n\t| 'tool.media'\n\t| 'tool.frame'\n\t| 'tool.note'\n\t| 'tool.laser'\n\t| 'tool.embed'\n\t| 'tool.text'\n\t| 'tool.pointer-down'\n\t| 'tool.image-zoom'\n\t| 'tool.replace-media'\n\t| 'tool.flip-horz'\n\t| 'tool.flip-vert'\n\t| 'tool.rotate-cw'\n\t| 'tool.aspect-ratio'\n\t| 'tool.aspect-ratio.original'\n\t| 'tool.aspect-ratio.square'\n\t| 'tool.aspect-ratio.circle'\n\t| 'tool.aspect-ratio.landscape'\n\t| 'tool.aspect-ratio.portrait'\n\t| 'tool.aspect-ratio.wide'\n\t| 'tool.image-toolbar-title'\n\t| 'tool.image-crop'\n\t| 'tool.media-alt-text'\n\t| 'tool.media-alt-text-desc'\n\t| 'tool.media-alt-text-confirm'\n\t| 'tool.rich-text-bold'\n\t| 'tool.rich-text-italic'\n\t| 'tool.rich-text-code'\n\t| 'tool.rich-text-highlight'\n\t| 'tool.rich-text-strikethrough'\n\t| 'tool.rich-text-link'\n\t| 'tool.rich-text-link-visit'\n\t| 'tool.rich-text-link-remove'\n\t| 'tool.rich-text-header'\n\t| 'tool.rich-text-bulletList'\n\t| 'tool.rich-text-toolbar-title'\n\t| 'tool.rich-text-orderedList'\n\t| 'tool.bookmark'\n\t| 'a11y.status'\n\t| 'a11y.skip-to-main-content'\n\t| 'a11y.shape-index'\n\t| 'a11y.shape-image'\n\t| 'a11y.shape-video'\n\t| 'a11y.multiple-shapes'\n\t| 'a11y.select-shape'\n\t| 'a11y.select-shape-direction'\n\t| 'a11y.enter-leave-container'\n\t| 'a11y.repeat-shape'\n\t| 'a11y.move-shape'\n\t| 'a11y.move-shape-faster'\n\t| 'a11y.enlarge-shape'\n\t| 'a11y.shrink-shape'\n\t| 'a11y.pan-camera'\n\t| 'a11y.adjust-shape-styles'\n\t| 'a11y.open-context-menu'\n\t| 'menu.title'\n\t| 'menu.theme'\n\t| 'menu.copy-as'\n\t| 'menu.edit'\n\t| 'menu.export-as'\n\t| 'menu.file'\n\t| 'menu.language'\n\t| 'menu.preferences'\n\t| 'menu.view'\n\t| 'context-menu.title'\n\t| 'context-menu.edit'\n\t| 'context-menu.arrange'\n\t| 'context-menu.copy-as'\n\t| 'context-menu.export-as'\n\t| 'context-menu.export-all-as'\n\t| 'context-menu.move-to-page'\n\t| 'context-menu.reorder'\n\t| 'page-menu.title'\n\t| 'page-menu.create-new-page'\n\t| 'page-menu.max-page-count-reached'\n\t| 'page-menu.new-page-initial-name'\n\t| 'page-menu.edit-start'\n\t| 'page-menu.edit-done'\n\t| 'page-menu.go-to-page'\n\t| 'page-menu.submenu.rename'\n\t| 'page-menu.submenu.duplicate-page'\n\t| 'page-menu.submenu.title'\n\t| 'page-menu.submenu.move-down'\n\t| 'page-menu.submenu.move-up'\n\t| 'page-menu.submenu.delete'\n\t| 'share-menu.title'\n\t| 'share-menu.save-note'\n\t| 'share-menu.fork-note'\n\t| 'share-menu.share-project'\n\t| 'share-menu.copy-link'\n\t| 'share-menu.create-snapshot-link'\n\t| 'share-menu.snapshot-link-note'\n\t| 'share-menu.copy-readonly-link'\n\t| 'share-menu.offline-note'\n\t| 'share-menu.copy-link-note'\n\t| 'share-menu.copy-readonly-link-note'\n\t| 'share-menu.project-too-large'\n\t| 'share-menu.upload-failed'\n\t| 'share-menu.creating-project'\n\t| 'share-menu.copied'\n\t| 'document-name-menu.copy-link'\n\t| 'status.offline'\n\t| 'people-menu.title'\n\t| 'people-menu.change-name'\n\t| 'people-menu.avatar-color'\n\t| 'people-menu.change-color'\n\t| 'people-menu.follow'\n\t| 'people-menu.following'\n\t| 'people-menu.leading'\n\t| 'people-menu.user'\n\t| 'people-menu.invite'\n\t| 'people-menu.anonymous-user'\n\t| 'help-menu.import-tldr-file'\n\t| 'help-menu.title'\n\t| 'help-menu.about'\n\t| 'help-menu.discord'\n\t| 'help-menu.github'\n\t| 'help-menu.keyboard-shortcuts'\n\t| 'help-menu.twitter'\n\t| 'help-menu.terms'\n\t| 'help-menu.privacy'\n\t| 'actions-menu.title'\n\t| 'edit-link-dialog.title'\n\t| 'edit-link-dialog.invalid-url'\n\t| 'edit-link-dialog.detail'\n\t| 'edit-link-dialog.url'\n\t| 'edit-link-dialog.clear'\n\t| 'edit-link-dialog.save'\n\t| 'edit-link-dialog.cancel'\n\t| 'edit-link-dialog.external-link'\n\t| 'embed-dialog.title'\n\t| 'embed-dialog.back'\n\t| 'embed-dialog.create'\n\t| 'embed-dialog.cancel'\n\t| 'embed-dialog.url'\n\t| 'embed-dialog.instruction'\n\t| 'embed-dialog.invalid-url'\n\t| 'shortcuts-dialog.title'\n\t| 'shortcuts-dialog.edit'\n\t| 'shortcuts-dialog.file'\n\t| 'shortcuts-dialog.preferences'\n\t| 'shortcuts-dialog.tools'\n\t| 'shortcuts-dialog.transform'\n\t| 'shortcuts-dialog.view'\n\t| 'shortcuts-dialog.collaboration'\n\t| 'shortcuts-dialog.a11y'\n\t| 'shortcuts-dialog.text-formatting'\n\t| 'style-panel.title'\n\t| 'style-panel.align'\n\t| 'style-panel.label-align'\n\t| 'style-panel.vertical-align'\n\t| 'style-panel.position'\n\t| 'style-panel.arrowheads'\n\t| 'style-panel.arrowhead-start'\n\t| 'style-panel.arrowhead-end'\n\t| 'style-panel.arrow-kind'\n\t| 'style-panel.color'\n\t| 'style-panel.dash'\n\t| 'style-panel.fill'\n\t| 'style-panel.font'\n\t| 'style-panel.geo'\n\t| 'style-panel.mixed'\n\t| 'style-panel.opacity'\n\t| 'style-panel.size'\n\t| 'style-panel.spline'\n\t| 'tool-panel.title'\n\t| 'tool-panel.more'\n\t| 'navigation-zone.title'\n\t| 'navigation-zone.minimap'\n\t| 'navigation-zone.toggle-minimap'\n\t| 'navigation-zone.zoom'\n\t| 'focus-mode.toggle-focus-mode'\n\t| 'toast.close'\n\t| 'toast.success'\n\t| 'toast.error'\n\t| 'toast.info'\n\t| 'toast.warning'\n\t| 'file-system.file-open-error.title'\n\t| 'file-system.file-open-error.not-a-tldraw-file'\n\t| 'file-system.file-open-error.file-format-version-too-new'\n\t| 'file-system.file-open-error.generic-corrupted-file'\n\t| 'file-system.confirm-open.title'\n\t| 'file-system.confirm-open.description'\n\t| 'file-system.confirm-open.cancel'\n\t| 'file-system.confirm-open.open'\n\t| 'file-system.confirm-open.dont-show-again'\n\t| 'file-system.confirm-clear.title'\n\t| 'file-system.confirm-clear.description'\n\t| 'file-system.confirm-clear.cancel'\n\t| 'file-system.confirm-clear.continue'\n\t| 'file-system.confirm-clear.dont-show-again'\n\t| 'file-system.shared-document-file-open-error.title'\n\t| 'file-system.shared-document-file-open-error.description'\n\t| 'sharing.confirm-leave.title'\n\t| 'sharing.confirm-leave.description'\n\t| 'sharing.confirm-leave.cancel'\n\t| 'sharing.confirm-leave.leave'\n\t| 'sharing.confirm-leave.dont-show-again'\n\t| 'toast.error.export-fail.title'\n\t| 'toast.error.export-fail.desc'\n\t| 'toast.error.copy-fail.title'\n\t| 'toast.error.copy-fail.desc'\n\t| 'context.pages.new-page'\n\t| 'vscode.file-open.desc'\n\t| 'vscode.file-open.open'\n\t| 'vscode.file-open.backup'\n\t| 'vscode.file-open.backup-saved'\n\t| 'vscode.file-open.backup-failed'\n\t| 'vscode.file-open.dont-show-again'\n\t| 'cursor-chat.type-to-chat'\n\t| 'app.loading'\n\t| 'handle.resize-top'\n\t| 'handle.resize-bottom'\n\t| 'handle.resize-left'\n\t| 'handle.resize-right'\n\t| 'handle.resize-top-left'\n\t| 'handle.resize-top-right'\n\t| 'handle.resize-bottom-left'\n\t| 'handle.resize-bottom-right'\n\t| 'handle.rotate.top_left_rotate'\n\t| 'handle.rotate.top_right_rotate'\n\t| 'handle.rotate.bottom_left_rotate'\n\t| 'handle.rotate.bottom_right_rotate'\n\t| 'handle.rotate.mobile_rotate'\n\t| 'handle.crop.top'\n\t| 'handle.crop.bottom'\n\t| 'handle.crop.left'\n\t| 'handle.crop.right'\n\t| 'handle.crop.top-left'\n\t| 'handle.crop.top-right'\n\t| 'handle.crop.bottom-left'\n\t| 'handle.crop.bottom-right'\n\t| 'ui.close'\n\t| 'ui.checked'\n\t| 'ui.unchecked'\n"],
|
|
4
|
+
"sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\n/** @public */\nexport type TLUiTranslationKey =\n\t| 'action.convert-to-bookmark'\n\t| 'action.convert-to-embed'\n\t| 'action.open-embed-link'\n\t| 'action.align-bottom'\n\t| 'action.align-center-horizontal'\n\t| 'action.align-center-vertical'\n\t| 'action.align-center-horizontal.short'\n\t| 'action.align-center-vertical.short'\n\t| 'action.align-left'\n\t| 'action.align-right'\n\t| 'action.align-top'\n\t| 'action.back-to-content'\n\t| 'action.bring-forward'\n\t| 'action.bring-to-front'\n\t| 'action.copy-as-png.short'\n\t| 'action.copy-as-png'\n\t| 'action.copy-as-svg.short'\n\t| 'action.copy-as-svg'\n\t| 'action.copy'\n\t| 'action.cut'\n\t| 'action.delete'\n\t| 'action.unlock-all'\n\t| 'action.distribute-horizontal'\n\t| 'action.distribute-vertical'\n\t| 'action.distribute-horizontal.short'\n\t| 'action.distribute-vertical.short'\n\t| 'action.download-original'\n\t| 'action.duplicate'\n\t| 'action.edit-link'\n\t| 'action.exit-pen-mode'\n\t| 'action.export-as-png.short'\n\t| 'action.export-as-png'\n\t| 'action.export-as-svg.short'\n\t| 'action.export-as-svg'\n\t| 'action.export-all-as-png.short'\n\t| 'action.export-all-as-png'\n\t| 'action.export-all-as-svg.short'\n\t| 'action.export-all-as-svg'\n\t| 'action.fit-frame-to-content'\n\t| 'action.flip-horizontal'\n\t| 'action.flip-vertical'\n\t| 'action.flip-horizontal.short'\n\t| 'action.flip-vertical.short'\n\t| 'action.fork-project'\n\t| 'action.fork-project-on-tldraw'\n\t| 'action.group'\n\t| 'action.insert-embed'\n\t| 'action.insert-media'\n\t| 'action.leave-shared-project'\n\t| 'action.new-project'\n\t| 'action.new-shared-project'\n\t| 'action.open-cursor-chat'\n\t| 'action.open-kbd-shortcuts'\n\t| 'action.open-file'\n\t| 'action.pack'\n\t| 'action.paste'\n\t| 'action.paste-error-title'\n\t| 'action.paste-error-description'\n\t| 'action.print'\n\t| 'action.redo'\n\t| 'action.remove-frame'\n\t| 'action.rename'\n\t| 'action.rotate-ccw'\n\t| 'action.rotate-cw'\n\t| 'action.save-copy'\n\t| 'action.select-all'\n\t| 'action.select-none'\n\t| 'action.send-backward'\n\t| 'action.send-to-back'\n\t| 'action.share-project'\n\t| 'action.stack-horizontal'\n\t| 'action.stack-vertical'\n\t| 'action.stack-horizontal.short'\n\t| 'action.stack-vertical.short'\n\t| 'action.stop-following'\n\t| 'action.stretch-horizontal'\n\t| 'action.stretch-vertical'\n\t| 'action.stretch-horizontal.short'\n\t| 'action.stretch-vertical.short'\n\t| 'action.toggle-auto-size'\n\t| 'action.toggle-dark-mode.menu'\n\t| 'action.toggle-dark-mode'\n\t| 'action.toggle-paste-at-cursor.menu'\n\t| 'action.toggle-paste-at-cursor'\n\t| 'action.toggle-wrap-mode.menu'\n\t| 'action.toggle-wrap-mode'\n\t| 'action.toggle-reduce-motion.menu'\n\t| 'action.toggle-reduce-motion'\n\t| 'action.toggle-keyboard-shortcuts.menu'\n\t| 'action.toggle-keyboard-shortcuts'\n\t| 'action.toggle-ui-labels.menu'\n\t| 'action.toggle-ui-labels'\n\t| 'action.toggle-edge-scrolling.menu'\n\t| 'action.toggle-edge-scrolling'\n\t| 'action.toggle-debug-mode.menu'\n\t| 'action.toggle-debug-mode'\n\t| 'action.toggle-focus-mode.menu'\n\t| 'action.toggle-focus-mode'\n\t| 'action.toggle-dynamic-size-mode.menu'\n\t| 'action.toggle-dynamic-size-mode'\n\t| 'action.toggle-grid.menu'\n\t| 'action.toggle-grid'\n\t| 'action.toggle-lock'\n\t| 'action.flatten-to-image'\n\t| 'action.toggle-snap-mode.menu'\n\t| 'action.toggle-snap-mode'\n\t| 'action.toggle-tool-lock.menu'\n\t| 'action.toggle-tool-lock'\n\t| 'action.toggle-transparent.context-menu'\n\t| 'action.toggle-transparent.menu'\n\t| 'action.toggle-transparent'\n\t| 'action.undo'\n\t| 'action.ungroup'\n\t| 'action.zoom-in'\n\t| 'action.zoom-out'\n\t| 'action.zoom-to-100'\n\t| 'action.zoom-to-fit'\n\t| 'action.zoom-to-selection'\n\t| 'assets.files.size-too-big'\n\t| 'assets.files.type-not-allowed'\n\t| 'assets.files.upload-failed'\n\t| 'assets.files.amount-too-many'\n\t| 'assets.url.failed'\n\t| 'theme.dark'\n\t| 'theme.light'\n\t| 'theme.system'\n\t| 'color-style.white'\n\t| 'color-style.black'\n\t| 'color-style.blue'\n\t| 'color-style.green'\n\t| 'color-style.grey'\n\t| 'color-style.light-blue'\n\t| 'color-style.light-green'\n\t| 'color-style.light-red'\n\t| 'color-style.light-violet'\n\t| 'color-style.orange'\n\t| 'color-style.red'\n\t| 'color-style.violet'\n\t| 'color-style.yellow'\n\t| 'fill-style.none'\n\t| 'document.default-name'\n\t| 'fill-style.semi'\n\t| 'fill-style.solid'\n\t| 'fill-style.pattern'\n\t| 'fill-style.fill'\n\t| 'dash-style.dashed'\n\t| 'dash-style.dotted'\n\t| 'dash-style.draw'\n\t| 'dash-style.solid'\n\t| 'size-style.s'\n\t| 'size-style.m'\n\t| 'size-style.l'\n\t| 'size-style.xl'\n\t| 'opacity-style.0.1'\n\t| 'opacity-style.0.25'\n\t| 'opacity-style.0.5'\n\t| 'opacity-style.0.75'\n\t| 'opacity-style.1'\n\t| 'font-style.draw'\n\t| 'font-style.sans'\n\t| 'font-style.serif'\n\t| 'font-style.mono'\n\t| 'align-style.start'\n\t| 'align-style.middle'\n\t| 'align-style.end'\n\t| 'align-style.justify'\n\t| 'verticalAlign-style.start'\n\t| 'verticalAlign-style.middle'\n\t| 'verticalAlign-style.end'\n\t| 'geo-style.arrow-down'\n\t| 'geo-style.arrow-left'\n\t| 'geo-style.arrow-right'\n\t| 'geo-style.arrow-up'\n\t| 'geo-style.cloud'\n\t| 'geo-style.diamond'\n\t| 'geo-style.ellipse'\n\t| 'geo-style.heart'\n\t| 'geo-style.hexagon'\n\t| 'geo-style.octagon'\n\t| 'geo-style.oval'\n\t| 'geo-style.pentagon'\n\t| 'geo-style.rectangle'\n\t| 'geo-style.rhombus'\n\t| 'geo-style.rhombus-2'\n\t| 'geo-style.star'\n\t| 'geo-style.trapezoid'\n\t| 'geo-style.triangle'\n\t| 'geo-style.x-box'\n\t| 'geo-style.check-box'\n\t| 'arrowheadStart-style.none'\n\t| 'arrowheadStart-style.arrow'\n\t| 'arrowheadStart-style.bar'\n\t| 'arrowheadStart-style.diamond'\n\t| 'arrowheadStart-style.dot'\n\t| 'arrowheadStart-style.inverted'\n\t| 'arrowheadStart-style.pipe'\n\t| 'arrowheadStart-style.square'\n\t| 'arrowheadStart-style.triangle'\n\t| 'arrowheadEnd-style.none'\n\t| 'arrowheadEnd-style.arrow'\n\t| 'arrowheadEnd-style.bar'\n\t| 'arrowheadEnd-style.diamond'\n\t| 'arrowheadEnd-style.dot'\n\t| 'arrowheadEnd-style.inverted'\n\t| 'arrowheadEnd-style.pipe'\n\t| 'arrowheadEnd-style.square'\n\t| 'arrowheadEnd-style.triangle'\n\t| 'spline-style.line'\n\t| 'spline-style.cubic'\n\t| 'arrow-kind-style.arc'\n\t| 'arrow-kind-style.elbow'\n\t| 'tool.select'\n\t| 'tool.hand'\n\t| 'tool.draw'\n\t| 'tool.eraser'\n\t| 'tool.arrow-down'\n\t| 'tool.arrow-left'\n\t| 'tool.arrow-right'\n\t| 'tool.arrow-up'\n\t| 'tool.arrow'\n\t| 'tool.cloud'\n\t| 'tool.diamond'\n\t| 'tool.ellipse'\n\t| 'tool.heart'\n\t| 'tool.hexagon'\n\t| 'tool.highlight'\n\t| 'tool.line'\n\t| 'tool.octagon'\n\t| 'tool.oval'\n\t| 'tool.pentagon'\n\t| 'tool.rectangle'\n\t| 'tool.rhombus'\n\t| 'tool.star'\n\t| 'tool.trapezoid'\n\t| 'tool.triangle'\n\t| 'tool.x-box'\n\t| 'tool.check-box'\n\t| 'tool.media'\n\t| 'tool.frame'\n\t| 'tool.note'\n\t| 'tool.laser'\n\t| 'tool.embed'\n\t| 'tool.text'\n\t| 'tool.pointer-down'\n\t| 'tool.image-zoom'\n\t| 'tool.replace-media'\n\t| 'tool.flip-horz'\n\t| 'tool.flip-vert'\n\t| 'tool.rotate-cw'\n\t| 'tool.aspect-ratio'\n\t| 'tool.aspect-ratio.original'\n\t| 'tool.aspect-ratio.square'\n\t| 'tool.aspect-ratio.circle'\n\t| 'tool.aspect-ratio.landscape'\n\t| 'tool.aspect-ratio.portrait'\n\t| 'tool.aspect-ratio.wide'\n\t| 'tool.image-toolbar-title'\n\t| 'tool.image-crop'\n\t| 'tool.media-alt-text'\n\t| 'tool.media-alt-text-desc'\n\t| 'tool.media-alt-text-confirm'\n\t| 'tool.rich-text-bold'\n\t| 'tool.rich-text-italic'\n\t| 'tool.rich-text-code'\n\t| 'tool.rich-text-highlight'\n\t| 'tool.rich-text-strikethrough'\n\t| 'tool.rich-text-link'\n\t| 'tool.rich-text-link-visit'\n\t| 'tool.rich-text-link-remove'\n\t| 'tool.rich-text-header'\n\t| 'tool.rich-text-bulletList'\n\t| 'tool.rich-text-toolbar-title'\n\t| 'tool.rich-text-orderedList'\n\t| 'tool.bookmark'\n\t| 'a11y.status'\n\t| 'a11y.skip-to-main-content'\n\t| 'a11y.shape-index'\n\t| 'a11y.shape-image'\n\t| 'a11y.shape-video'\n\t| 'a11y.multiple-shapes'\n\t| 'a11y.select-shape'\n\t| 'a11y.select-shape-direction'\n\t| 'a11y.enter-leave-container'\n\t| 'a11y.repeat-shape'\n\t| 'a11y.move-shape'\n\t| 'a11y.move-shape-faster'\n\t| 'a11y.rotate-shape-cw'\n\t| 'a11y.rotate-shape-ccw'\n\t| 'a11y.rotate-shape-cw-fine'\n\t| 'a11y.rotate-shape-ccw-fine'\n\t| 'a11y.enlarge-shape'\n\t| 'a11y.shrink-shape'\n\t| 'a11y.pan-camera'\n\t| 'a11y.adjust-shape-styles'\n\t| 'a11y.open-context-menu'\n\t| 'a11y.open-keyboard-shortcuts'\n\t| 'menu.title'\n\t| 'menu.theme'\n\t| 'menu.accessibility'\n\t| 'menu.copy-as'\n\t| 'menu.edit'\n\t| 'menu.export-as'\n\t| 'menu.file'\n\t| 'menu.language'\n\t| 'menu.preferences'\n\t| 'menu.view'\n\t| 'context-menu.title'\n\t| 'context-menu.edit'\n\t| 'context-menu.arrange'\n\t| 'context-menu.copy-as'\n\t| 'context-menu.export-as'\n\t| 'context-menu.export-all-as'\n\t| 'context-menu.move-to-page'\n\t| 'context-menu.reorder'\n\t| 'page-menu.title'\n\t| 'page-menu.create-new-page'\n\t| 'page-menu.max-page-count-reached'\n\t| 'page-menu.new-page-initial-name'\n\t| 'page-menu.edit-start'\n\t| 'page-menu.edit-done'\n\t| 'page-menu.go-to-page'\n\t| 'page-menu.submenu.rename'\n\t| 'page-menu.submenu.duplicate-page'\n\t| 'page-menu.submenu.title'\n\t| 'page-menu.submenu.move-down'\n\t| 'page-menu.submenu.move-up'\n\t| 'page-menu.submenu.delete'\n\t| 'share-menu.title'\n\t| 'share-menu.save-note'\n\t| 'share-menu.fork-note'\n\t| 'share-menu.share-project'\n\t| 'share-menu.copy-link'\n\t| 'share-menu.create-snapshot-link'\n\t| 'share-menu.snapshot-link-note'\n\t| 'share-menu.copy-readonly-link'\n\t| 'share-menu.offline-note'\n\t| 'share-menu.copy-link-note'\n\t| 'share-menu.copy-readonly-link-note'\n\t| 'share-menu.project-too-large'\n\t| 'share-menu.upload-failed'\n\t| 'share-menu.creating-project'\n\t| 'share-menu.copied'\n\t| 'document-name-menu.copy-link'\n\t| 'status.offline'\n\t| 'people-menu.title'\n\t| 'people-menu.change-name'\n\t| 'people-menu.avatar-color'\n\t| 'people-menu.change-color'\n\t| 'people-menu.follow'\n\t| 'people-menu.following'\n\t| 'people-menu.leading'\n\t| 'people-menu.user'\n\t| 'people-menu.invite'\n\t| 'people-menu.anonymous-user'\n\t| 'help-menu.import-tldr-file'\n\t| 'help-menu.title'\n\t| 'help-menu.about'\n\t| 'help-menu.discord'\n\t| 'help-menu.github'\n\t| 'help-menu.keyboard-shortcuts'\n\t| 'help-menu.twitter'\n\t| 'help-menu.terms'\n\t| 'help-menu.privacy'\n\t| 'actions-menu.title'\n\t| 'edit-link-dialog.title'\n\t| 'edit-link-dialog.invalid-url'\n\t| 'edit-link-dialog.detail'\n\t| 'edit-link-dialog.url'\n\t| 'edit-link-dialog.clear'\n\t| 'edit-link-dialog.save'\n\t| 'edit-link-dialog.cancel'\n\t| 'edit-link-dialog.external-link'\n\t| 'embed-dialog.title'\n\t| 'embed-dialog.back'\n\t| 'embed-dialog.create'\n\t| 'embed-dialog.cancel'\n\t| 'embed-dialog.url'\n\t| 'embed-dialog.instruction'\n\t| 'embed-dialog.invalid-url'\n\t| 'shortcuts-dialog.title'\n\t| 'shortcuts-dialog.edit'\n\t| 'shortcuts-dialog.file'\n\t| 'shortcuts-dialog.preferences'\n\t| 'shortcuts-dialog.tools'\n\t| 'shortcuts-dialog.transform'\n\t| 'shortcuts-dialog.view'\n\t| 'shortcuts-dialog.collaboration'\n\t| 'shortcuts-dialog.a11y'\n\t| 'shortcuts-dialog.text-formatting'\n\t| 'style-panel.title'\n\t| 'style-panel.align'\n\t| 'style-panel.label-align'\n\t| 'style-panel.vertical-align'\n\t| 'style-panel.position'\n\t| 'style-panel.arrowheads'\n\t| 'style-panel.arrowhead-start'\n\t| 'style-panel.arrowhead-end'\n\t| 'style-panel.arrow-kind'\n\t| 'style-panel.color'\n\t| 'style-panel.dash'\n\t| 'style-panel.fill'\n\t| 'style-panel.font'\n\t| 'style-panel.geo'\n\t| 'style-panel.mixed'\n\t| 'style-panel.opacity'\n\t| 'style-panel.size'\n\t| 'style-panel.spline'\n\t| 'tool-panel.title'\n\t| 'tool-panel.more'\n\t| 'navigation-zone.title'\n\t| 'navigation-zone.minimap'\n\t| 'navigation-zone.toggle-minimap'\n\t| 'navigation-zone.zoom'\n\t| 'focus-mode.toggle-focus-mode'\n\t| 'toast.close'\n\t| 'toast.success'\n\t| 'toast.error'\n\t| 'toast.info'\n\t| 'toast.warning'\n\t| 'file-system.file-open-error.title'\n\t| 'file-system.file-open-error.not-a-tldraw-file'\n\t| 'file-system.file-open-error.file-format-version-too-new'\n\t| 'file-system.file-open-error.generic-corrupted-file'\n\t| 'file-system.confirm-open.title'\n\t| 'file-system.confirm-open.description'\n\t| 'file-system.confirm-open.cancel'\n\t| 'file-system.confirm-open.open'\n\t| 'file-system.confirm-open.dont-show-again'\n\t| 'file-system.confirm-clear.title'\n\t| 'file-system.confirm-clear.description'\n\t| 'file-system.confirm-clear.cancel'\n\t| 'file-system.confirm-clear.continue'\n\t| 'file-system.confirm-clear.dont-show-again'\n\t| 'file-system.shared-document-file-open-error.title'\n\t| 'file-system.shared-document-file-open-error.description'\n\t| 'sharing.confirm-leave.title'\n\t| 'sharing.confirm-leave.description'\n\t| 'sharing.confirm-leave.cancel'\n\t| 'sharing.confirm-leave.leave'\n\t| 'sharing.confirm-leave.dont-show-again'\n\t| 'toast.error.export-fail.title'\n\t| 'toast.error.export-fail.desc'\n\t| 'toast.error.copy-fail.title'\n\t| 'toast.error.copy-fail.desc'\n\t| 'context.pages.new-page'\n\t| 'vscode.file-open.desc'\n\t| 'vscode.file-open.open'\n\t| 'vscode.file-open.backup'\n\t| 'vscode.file-open.backup-saved'\n\t| 'vscode.file-open.backup-failed'\n\t| 'vscode.file-open.dont-show-again'\n\t| 'cursor-chat.type-to-chat'\n\t| 'app.loading'\n\t| 'handle.resize-top'\n\t| 'handle.resize-bottom'\n\t| 'handle.resize-left'\n\t| 'handle.resize-right'\n\t| 'handle.resize-top-left'\n\t| 'handle.resize-top-right'\n\t| 'handle.resize-bottom-left'\n\t| 'handle.resize-bottom-right'\n\t| 'handle.rotate.top_left_rotate'\n\t| 'handle.rotate.top_right_rotate'\n\t| 'handle.rotate.bottom_left_rotate'\n\t| 'handle.rotate.bottom_right_rotate'\n\t| 'handle.rotate.mobile_rotate'\n\t| 'handle.crop.top'\n\t| 'handle.crop.bottom'\n\t| 'handle.crop.left'\n\t| 'handle.crop.right'\n\t| 'handle.crop.top-left'\n\t| 'handle.crop.top-right'\n\t| 'handle.crop.bottom-left'\n\t| 'handle.crop.bottom-right'\n\t| 'ui.close'\n\t| 'ui.checked'\n\t| 'ui.unchecked'\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -74,6 +74,7 @@ const DEFAULT_TRANSLATION = {
|
|
|
74
74
|
"action.new-project": "New project",
|
|
75
75
|
"action.new-shared-project": "New shared project",
|
|
76
76
|
"action.open-cursor-chat": "Cursor chat",
|
|
77
|
+
"action.open-kbd-shortcuts": "Open keyboard shortcuts",
|
|
77
78
|
"action.open-file": "Open file",
|
|
78
79
|
"action.pack": "Pack",
|
|
79
80
|
"action.paste": "Paste",
|
|
@@ -109,6 +110,10 @@ const DEFAULT_TRANSLATION = {
|
|
|
109
110
|
"action.toggle-wrap-mode": "Toggle Select on wrap",
|
|
110
111
|
"action.toggle-reduce-motion.menu": "Reduce motion",
|
|
111
112
|
"action.toggle-reduce-motion": "Toggle reduce motion",
|
|
113
|
+
"action.toggle-keyboard-shortcuts.menu": "Keyboard shortcuts",
|
|
114
|
+
"action.toggle-keyboard-shortcuts": "Toggle keyboard shortcuts",
|
|
115
|
+
"action.toggle-ui-labels.menu": "UI labels",
|
|
116
|
+
"action.toggle-ui-labels": "Toggle UI labels",
|
|
112
117
|
"action.toggle-edge-scrolling.menu": "Edge scrolling",
|
|
113
118
|
"action.toggle-edge-scrolling": "Toggle edge scrolling",
|
|
114
119
|
"action.toggle-debug-mode.menu": "Debug mode",
|
|
@@ -200,6 +205,7 @@ const DEFAULT_TRANSLATION = {
|
|
|
200
205
|
"geo-style.pentagon": "Pentagon",
|
|
201
206
|
"geo-style.rectangle": "Rectangle",
|
|
202
207
|
"geo-style.rhombus": "Rhombus",
|
|
208
|
+
"geo-style.rhombus-2": "Rhombus left",
|
|
203
209
|
"geo-style.star": "Star",
|
|
204
210
|
"geo-style.trapezoid": "Trapezoid",
|
|
205
211
|
"geo-style.triangle": "Triangle",
|
|
@@ -302,13 +308,19 @@ const DEFAULT_TRANSLATION = {
|
|
|
302
308
|
"a11y.repeat-shape": "Repeat shape",
|
|
303
309
|
"a11y.move-shape": "Move shape",
|
|
304
310
|
"a11y.move-shape-faster": "Move shape faster",
|
|
311
|
+
"a11y.rotate-shape-cw": "Rotate shape clockwise",
|
|
312
|
+
"a11y.rotate-shape-ccw": "Rotate shape counterclockwise",
|
|
313
|
+
"a11y.rotate-shape-cw-fine": "Rotate shape clockwise (fine)",
|
|
314
|
+
"a11y.rotate-shape-ccw-fine": "Rotate shape counterclockwise (fine)",
|
|
305
315
|
"a11y.enlarge-shape": "Enlarge shape",
|
|
306
316
|
"a11y.shrink-shape": "Shrink shape",
|
|
307
317
|
"a11y.pan-camera": "Pan camera",
|
|
308
318
|
"a11y.adjust-shape-styles": "Adjust shape styles",
|
|
309
319
|
"a11y.open-context-menu": "Open context menu",
|
|
320
|
+
"a11y.open-keyboard-shortcuts": "Open keyboard shortcuts",
|
|
310
321
|
"menu.title": "Menu",
|
|
311
322
|
"menu.theme": "Theme",
|
|
323
|
+
"menu.accessibility": "Accessibility",
|
|
312
324
|
"menu.copy-as": "Copy as",
|
|
313
325
|
"menu.edit": "Edit",
|
|
314
326
|
"menu.export-as": "Export as",
|