tldraw 3.15.0-canary.d3401abd19b9 → 3.15.0-canary.db14db4f5395

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.
Files changed (92) hide show
  1. package/dist-cjs/index.d.ts +84 -79
  2. package/dist-cjs/index.js +30 -31
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +5 -5
  5. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  6. package/dist-cjs/lib/shapes/shared/PathBuilder.js +3 -21
  7. package/dist-cjs/lib/shapes/shared/PathBuilder.js.map +2 -2
  8. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +11 -5
  9. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  10. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +1 -11
  11. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +2 -2
  12. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +0 -1
  13. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  14. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +1 -2
  15. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  16. package/dist-cjs/lib/ui/components/menu-items.js +0 -16
  17. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  18. package/dist-cjs/lib/ui/components/primitives/TldrawUiDialog.js +1 -1
  19. package/dist-cjs/lib/ui/components/primitives/TldrawUiDialog.js.map +2 -2
  20. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +2 -5
  21. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  22. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +0 -1
  23. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  24. package/dist-cjs/lib/ui/context/actions.js +1 -28
  25. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  26. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  27. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +7 -24
  28. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
  29. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +2 -2
  30. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
  31. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  32. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +0 -4
  33. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  34. package/dist-cjs/lib/ui/version.js +3 -3
  35. package/dist-cjs/lib/ui/version.js.map +1 -1
  36. package/dist-esm/index.d.mts +84 -79
  37. package/dist-esm/index.mjs +132 -134
  38. package/dist-esm/index.mjs.map +2 -2
  39. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +5 -5
  40. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  41. package/dist-esm/lib/shapes/shared/PathBuilder.mjs +3 -22
  42. package/dist-esm/lib/shapes/shared/PathBuilder.mjs.map +2 -2
  43. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +11 -5
  44. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  45. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +1 -11
  46. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +2 -2
  47. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +0 -2
  48. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  49. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +1 -2
  50. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  51. package/dist-esm/lib/ui/components/menu-items.mjs +0 -16
  52. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  53. package/dist-esm/lib/ui/components/primitives/TldrawUiDialog.mjs +1 -1
  54. package/dist-esm/lib/ui/components/primitives/TldrawUiDialog.mjs.map +2 -2
  55. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +2 -5
  56. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  57. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +0 -1
  58. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  59. package/dist-esm/lib/ui/context/actions.mjs +1 -28
  60. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  61. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  62. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +7 -24
  63. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
  64. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +2 -2
  65. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
  66. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +0 -4
  67. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  68. package/dist-esm/lib/ui/version.mjs +3 -3
  69. package/dist-esm/lib/ui/version.mjs.map +1 -1
  70. package/package.json +3 -3
  71. package/src/index.ts +158 -159
  72. package/src/lib/shapes/frame/FrameShapeUtil.tsx +7 -5
  73. package/src/lib/shapes/shared/PathBuilder.test.tsx +1 -1
  74. package/src/lib/shapes/shared/PathBuilder.tsx +1 -35
  75. package/src/lib/shapes/text/TextShapeUtil.tsx +12 -5
  76. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +0 -8
  77. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +0 -2
  78. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +0 -1
  79. package/src/lib/ui/components/menu-items.tsx +0 -17
  80. package/src/lib/ui/components/primitives/TldrawUiDialog.tsx +1 -1
  81. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +1 -5
  82. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +0 -4
  83. package/src/lib/ui/context/actions.tsx +1 -29
  84. package/src/lib/ui/context/events.tsx +0 -2
  85. package/src/lib/ui/hooks/useClipboardEvents.ts +10 -31
  86. package/src/lib/ui/hooks/useKeyboardShortcuts.ts +2 -3
  87. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +0 -4
  88. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +0 -4
  89. package/src/lib/ui/version.ts +3 -3
  90. package/src/test/Editor.test.tsx +1 -68
  91. package/src/test/commands/clipboard.test.ts +1 -1
  92. package/src/test/editor.test.ts +77 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx"],
4
- "sourcesContent": ["import {\n\tArrowShapeArrowheadEndStyle,\n\tArrowShapeArrowheadStartStyle,\n\tArrowShapeKindStyle,\n\tDefaultColorStyle,\n\tDefaultDashStyle,\n\tDefaultFillStyle,\n\tDefaultFontStyle,\n\tDefaultHorizontalAlignStyle,\n\tDefaultSizeStyle,\n\tDefaultTextAlignStyle,\n\tDefaultVerticalAlignStyle,\n\tGeoShapeGeoStyle,\n\tLineShapeSplineStyle,\n\tReadonlySharedStyleMap,\n\tStyleProp,\n\tTLArrowShapeArrowheadStyle,\n\tTLDefaultColorTheme,\n\tgetDefaultColorTheme,\n\tkickoutOccludedShapes,\n\tminBy,\n\tuseEditor,\n\tuseIsDarkMode,\n\tuseValue,\n} from '@tldraw/editor'\nimport React, { useCallback } from 'react'\nimport { STYLES } from '../../../styles'\nimport { useUiEvents } from '../../context/events'\nimport { useRelevantStyles } from '../../hooks/useRelevantStyles'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon'\nimport { TldrawUiButtonPicker } from '../primitives/TldrawUiButtonPicker'\nimport { TldrawUiSlider } from '../primitives/TldrawUiSlider'\nimport { TldrawUiToolbar, TldrawUiToolbarButton } from '../primitives/TldrawUiToolbar'\nimport { DoubleDropdownPicker } from './DoubleDropdownPicker'\nimport { DropdownPicker } from './DropdownPicker'\n\n/** @public */\nexport interface TLUiStylePanelContentProps {\n\tstyles: ReturnType<typeof useRelevantStyles>\n}\n\n/** @public @react */\nexport function DefaultStylePanelContent({ styles }: TLUiStylePanelContentProps) {\n\tconst isDarkMode = useIsDarkMode()\n\n\tif (!styles) return null\n\n\tconst geo = styles.get(GeoShapeGeoStyle)\n\tconst arrowheadEnd = styles.get(ArrowShapeArrowheadEndStyle)\n\tconst arrowheadStart = styles.get(ArrowShapeArrowheadStartStyle)\n\tconst arrowKind = styles.get(ArrowShapeKindStyle)\n\tconst spline = styles.get(LineShapeSplineStyle)\n\tconst font = styles.get(DefaultFontStyle)\n\n\tconst hideGeo = geo === undefined\n\tconst hideArrowHeads = arrowheadEnd === undefined && arrowheadStart === undefined\n\tconst hideSpline = spline === undefined\n\tconst hideArrowKind = arrowKind === undefined\n\tconst hideText = font === undefined\n\n\tconst theme = getDefaultColorTheme({ isDarkMode: isDarkMode })\n\n\treturn (\n\t\t<>\n\t\t\t<CommonStylePickerSet theme={theme} styles={styles} />\n\t\t\t{!hideText && <TextStylePickerSet theme={theme} styles={styles} />}\n\t\t\t{!(hideGeo && hideArrowHeads && hideSpline && hideArrowKind) && (\n\t\t\t\t<div className=\"tlui-style-panel__section\">\n\t\t\t\t\t<GeoStylePickerSet styles={styles} />\n\t\t\t\t\t<ArrowStylePickerSet styles={styles} />\n\t\t\t\t\t<ArrowheadStylePickerSet styles={styles} />\n\t\t\t\t\t<SplineStylePickerSet styles={styles} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t)\n}\n\nfunction useStyleChangeCallback() {\n\tconst editor = useEditor()\n\tconst trackEvent = useUiEvents()\n\n\treturn React.useMemo(\n\t\t() =>\n\t\t\tfunction handleStyleChange<T>(style: StyleProp<T>, value: T) {\n\t\t\t\teditor.run(() => {\n\t\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\t\teditor.setStyleForSelectedShapes(style, value)\n\t\t\t\t\t}\n\t\t\t\t\teditor.setStyleForNextShapes(style, value)\n\t\t\t\t\teditor.updateInstanceState({ isChangingStyle: true })\n\t\t\t\t})\n\n\t\t\t\ttrackEvent('set-style', { source: 'style-panel', id: style.id, value: value as string })\n\t\t\t},\n\t\t[editor, trackEvent]\n\t)\n}\n\n/** @public */\nexport interface ThemeStylePickerSetProps {\n\tstyles: ReadonlySharedStyleMap\n\ttheme: TLDefaultColorTheme\n}\n\n/** @public */\nexport interface StylePickerSetProps {\n\tstyles: ReadonlySharedStyleMap\n}\n\n/** @public @react */\nexport function CommonStylePickerSet({ styles, theme }: ThemeStylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst editor = useEditor()\n\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst color = styles.get(DefaultColorStyle)\n\tconst fill = styles.get(DefaultFillStyle)\n\tconst dash = styles.get(DefaultDashStyle)\n\tconst size = styles.get(DefaultSizeStyle)\n\n\tconst showPickers = fill !== undefined || dash !== undefined || size !== undefined\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\"tlui-style-panel__section__common\" data-testid=\"style.panel\">\n\t\t\t\t{color === undefined ? null : (\n\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.color')}>\n\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\ttitle={msg('style-panel.color')}\n\t\t\t\t\t\t\tuiType=\"color\"\n\t\t\t\t\t\t\tstyle={DefaultColorStyle}\n\t\t\t\t\t\t\titems={STYLES.color}\n\t\t\t\t\t\t\tvalue={color}\n\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t)}\n\t\t\t\t<OpacitySlider />\n\t\t\t</div>\n\t\t\t{showPickers && (\n\t\t\t\t<div className=\"tlui-style-panel__section\">\n\t\t\t\t\t{fill === undefined ? null : (\n\t\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.fill')}>\n\t\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.fill')}\n\t\t\t\t\t\t\t\tuiType=\"fill\"\n\t\t\t\t\t\t\t\tstyle={DefaultFillStyle}\n\t\t\t\t\t\t\t\titems={STYLES.fill}\n\t\t\t\t\t\t\t\tvalue={fill}\n\t\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t)}\n\t\t\t\t\t{dash === undefined ? null : (\n\t\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.dash')}>\n\t\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.dash')}\n\t\t\t\t\t\t\t\tuiType=\"dash\"\n\t\t\t\t\t\t\t\tstyle={DefaultDashStyle}\n\t\t\t\t\t\t\t\titems={STYLES.dash}\n\t\t\t\t\t\t\t\tvalue={dash}\n\t\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t)}\n\t\t\t\t\t{size === undefined ? null : (\n\t\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.size')}>\n\t\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.size')}\n\t\t\t\t\t\t\t\tuiType=\"size\"\n\t\t\t\t\t\t\t\tstyle={DefaultSizeStyle}\n\t\t\t\t\t\t\t\titems={STYLES.size}\n\t\t\t\t\t\t\t\tvalue={size}\n\t\t\t\t\t\t\t\tonValueChange={(style, value) => {\n\t\t\t\t\t\t\t\t\thandleValueChange(style, value)\n\t\t\t\t\t\t\t\t\tconst selectedShapeIds = editor.getSelectedShapeIds()\n\t\t\t\t\t\t\t\t\tif (selectedShapeIds.length > 0) {\n\t\t\t\t\t\t\t\t\t\tkickoutOccludedShapes(editor, selectedShapeIds)\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\ttheme={theme}\n\t\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t)\n}\n\n/** @public @react */\nexport function TextStylePickerSet({ theme, styles }: ThemeStylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst editor = useEditor()\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\n\tconst font = styles.get(DefaultFontStyle)\n\tconst textAlign = styles.get(DefaultTextAlignStyle)\n\tconst labelAlign = styles.get(DefaultHorizontalAlignStyle)\n\tconst verticalLabelAlign = styles.get(DefaultVerticalAlignStyle)\n\tif (font === undefined && labelAlign === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<div className=\"tlui-style-panel__section\">\n\t\t\t{font === undefined ? null : (\n\t\t\t\t<TldrawUiToolbar label={msg('style-panel.font')}>\n\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\ttitle={msg('style-panel.font')}\n\t\t\t\t\t\tuiType=\"font\"\n\t\t\t\t\t\tstyle={DefaultFontStyle}\n\t\t\t\t\t\titems={STYLES.font}\n\t\t\t\t\t\tvalue={font}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t/>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t)}\n\n\t\t\t{textAlign === undefined ? null : (\n\t\t\t\t<TldrawUiToolbar label={msg('style-panel.align')} className=\"tlui-style-panel__row\">\n\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\ttitle={msg('style-panel.align')}\n\t\t\t\t\t\tuiType=\"align\"\n\t\t\t\t\t\tstyle={DefaultTextAlignStyle}\n\t\t\t\t\t\titems={STYLES.textAlign}\n\t\t\t\t\t\tvalue={textAlign}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"tlui-style-panel__row__extra-button\">\n\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\ttitle={msg('style-panel.vertical-align')}\n\t\t\t\t\t\t\tdata-testid=\"vertical-align\"\n\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TldrawUiButtonIcon icon=\"vertical-align-middle\" />\n\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t</div>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t)}\n\n\t\t\t{labelAlign === undefined ? null : (\n\t\t\t\t<TldrawUiToolbar label={msg('style-panel.label-align')} className=\"tlui-style-panel__row\">\n\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\ttitle={msg('style-panel.label-align')}\n\t\t\t\t\t\tuiType=\"align\"\n\t\t\t\t\t\tstyle={DefaultHorizontalAlignStyle}\n\t\t\t\t\t\titems={STYLES.horizontalAlign}\n\t\t\t\t\t\tvalue={labelAlign}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"tlui-style-panel__row__extra-button\">\n\t\t\t\t\t\t{verticalLabelAlign === undefined ? (\n\t\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.vertical-align')}\n\t\t\t\t\t\t\t\tdata-testid=\"vertical-align\"\n\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<TldrawUiButtonIcon icon=\"vertical-align-middle\" />\n\t\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<DropdownPicker\n\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\tid=\"geo-vertical-alignment\"\n\t\t\t\t\t\t\t\tuiType=\"verticalAlign\"\n\t\t\t\t\t\t\t\tstylePanelType=\"vertical-align\"\n\t\t\t\t\t\t\t\tstyle={DefaultVerticalAlignStyle}\n\t\t\t\t\t\t\t\titems={STYLES.verticalAlign}\n\t\t\t\t\t\t\t\tvalue={verticalLabelAlign}\n\t\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n/** @public @react */\nexport function GeoStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst geo = styles.get(GeoShapeGeoStyle)\n\tif (geo === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbar label={msg('style-panel.geo')}>\n\t\t\t<DropdownPicker\n\t\t\t\tid=\"geo\"\n\t\t\t\ttype=\"menu\"\n\t\t\t\tlabel={'style-panel.geo'}\n\t\t\t\tuiType=\"geo\"\n\t\t\t\tstylePanelType=\"geo\"\n\t\t\t\tstyle={GeoShapeGeoStyle}\n\t\t\t\titems={STYLES.geo}\n\t\t\t\tvalue={geo}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t/>\n\t\t</TldrawUiToolbar>\n\t)\n}\n/** @public @react */\nexport function SplineStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst spline = styles.get(LineShapeSplineStyle)\n\tif (spline === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbar label={msg('style-panel.spline')}>\n\t\t\t<DropdownPicker\n\t\t\t\tid=\"spline\"\n\t\t\t\ttype=\"menu\"\n\t\t\t\tlabel={'style-panel.spline'}\n\t\t\t\tuiType=\"spline\"\n\t\t\t\tstylePanelType=\"spline\"\n\t\t\t\tstyle={LineShapeSplineStyle}\n\t\t\t\titems={STYLES.spline}\n\t\t\t\tvalue={spline}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t/>\n\t\t</TldrawUiToolbar>\n\t)\n}\n/** @public @react */\nexport function ArrowStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst arrowKind = styles.get(ArrowShapeKindStyle)\n\tif (arrowKind === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbar label={msg('style-panel.arrow-kind')}>\n\t\t\t<DropdownPicker\n\t\t\t\tid=\"arrow-kind\"\n\t\t\t\ttype=\"menu\"\n\t\t\t\tlabel={'style-panel.arrow-kind'}\n\t\t\t\tuiType=\"arrow-kind\"\n\t\t\t\tstylePanelType=\"arrow-kind\"\n\t\t\t\tstyle={ArrowShapeKindStyle}\n\t\t\t\titems={STYLES.arrowKind}\n\t\t\t\tvalue={arrowKind}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t/>\n\t\t</TldrawUiToolbar>\n\t)\n}\n/** @public @react */\nexport function ArrowheadStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst arrowheadEnd = styles.get(ArrowShapeArrowheadEndStyle)\n\tconst arrowheadStart = styles.get(ArrowShapeArrowheadStartStyle)\n\tif (!arrowheadEnd || !arrowheadStart) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<DoubleDropdownPicker<TLArrowShapeArrowheadStyle>\n\t\t\tlabel={'style-panel.arrowheads'}\n\t\t\tuiTypeA=\"arrowheadStart\"\n\t\t\tstyleA={ArrowShapeArrowheadStartStyle}\n\t\t\titemsA={STYLES.arrowheadStart}\n\t\t\tvalueA={arrowheadStart}\n\t\t\tuiTypeB=\"arrowheadEnd\"\n\t\t\tstyleB={ArrowShapeArrowheadEndStyle}\n\t\t\titemsB={STYLES.arrowheadEnd}\n\t\t\tvalueB={arrowheadEnd}\n\t\t\tonValueChange={handleValueChange}\n\t\t\tlabelA=\"style-panel.arrowhead-start\"\n\t\t\tlabelB=\"style-panel.arrowhead-end\"\n\t\t/>\n\t)\n}\n\nconst tldrawSupportedOpacities = [0.1, 0.25, 0.5, 0.75, 1] as const\n/** @public @react */\nexport function OpacitySlider() {\n\tconst editor = useEditor()\n\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\n\tconst opacity = useValue('opacity', () => editor.getSharedOpacity(), [editor])\n\tconst trackEvent = useUiEvents()\n\tconst msg = useTranslation()\n\n\tconst handleOpacityValueChange = React.useCallback(\n\t\t(value: number) => {\n\t\t\tconst item = tldrawSupportedOpacities[value]\n\t\t\teditor.run(() => {\n\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\teditor.setOpacityForSelectedShapes(item)\n\t\t\t\t}\n\t\t\t\teditor.setOpacityForNextShapes(item)\n\t\t\t\teditor.updateInstanceState({ isChangingStyle: true })\n\t\t\t})\n\n\t\t\ttrackEvent('set-style', { source: 'style-panel', id: 'opacity', value })\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\tif (opacity === undefined) return null\n\n\tconst opacityIndex =\n\t\topacity.type === 'mixed'\n\t\t\t? -1\n\t\t\t: tldrawSupportedOpacities.indexOf(\n\t\t\t\t\tminBy(tldrawSupportedOpacities, (supportedOpacity) =>\n\t\t\t\t\t\tMath.abs(supportedOpacity - opacity.value)\n\t\t\t\t\t)!\n\t\t\t\t)\n\n\treturn (\n\t\t<TldrawUiSlider\n\t\t\tdata-testid=\"style.opacity\"\n\t\t\tvalue={opacityIndex >= 0 ? opacityIndex : tldrawSupportedOpacities.length - 1}\n\t\t\tlabel={opacity.type === 'mixed' ? 'style-panel.mixed' : `opacity-style.${opacity.value}`}\n\t\t\tonValueChange={handleOpacityValueChange}\n\t\t\tsteps={tldrawSupportedOpacities.length - 1}\n\t\t\ttitle={msg('style-panel.opacity')}\n\t\t\tonHistoryMark={onHistoryMark}\n\t\t\tariaValueModifier={25}\n\t\t/>\n\t)\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n\tArrowShapeArrowheadEndStyle,\n\tArrowShapeArrowheadStartStyle,\n\tArrowShapeKindStyle,\n\tDefaultColorStyle,\n\tDefaultDashStyle,\n\tDefaultFillStyle,\n\tDefaultFontStyle,\n\tDefaultHorizontalAlignStyle,\n\tDefaultSizeStyle,\n\tDefaultTextAlignStyle,\n\tDefaultVerticalAlignStyle,\n\tGeoShapeGeoStyle,\n\tLineShapeSplineStyle,\n\tReadonlySharedStyleMap,\n\tStyleProp,\n\tTLArrowShapeArrowheadStyle,\n\tTLDefaultColorTheme,\n\tgetDefaultColorTheme,\n\tkickoutOccludedShapes,\n\tminBy,\n\tuseEditor,\n\tuseIsDarkMode,\n\tuseValue,\n} from '@tldraw/editor'\nimport React, { useCallback } from 'react'\nimport { STYLES } from '../../../styles'\nimport { useUiEvents } from '../../context/events'\nimport { useRelevantStyles } from '../../hooks/useRelevantStyles'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon'\nimport { TldrawUiButtonPicker } from '../primitives/TldrawUiButtonPicker'\nimport { TldrawUiSlider } from '../primitives/TldrawUiSlider'\nimport { TldrawUiToolbar, TldrawUiToolbarButton } from '../primitives/TldrawUiToolbar'\nimport { DoubleDropdownPicker } from './DoubleDropdownPicker'\nimport { DropdownPicker } from './DropdownPicker'\n\n/** @public */\nexport interface TLUiStylePanelContentProps {\n\tstyles: ReturnType<typeof useRelevantStyles>\n}\n\n/** @public @react */\nexport function DefaultStylePanelContent({ styles }: TLUiStylePanelContentProps) {\n\tconst isDarkMode = useIsDarkMode()\n\n\tif (!styles) return null\n\n\tconst geo = styles.get(GeoShapeGeoStyle)\n\tconst arrowheadEnd = styles.get(ArrowShapeArrowheadEndStyle)\n\tconst arrowheadStart = styles.get(ArrowShapeArrowheadStartStyle)\n\tconst arrowKind = styles.get(ArrowShapeKindStyle)\n\tconst spline = styles.get(LineShapeSplineStyle)\n\tconst font = styles.get(DefaultFontStyle)\n\n\tconst hideGeo = geo === undefined\n\tconst hideArrowHeads = arrowheadEnd === undefined && arrowheadStart === undefined\n\tconst hideSpline = spline === undefined\n\tconst hideArrowKind = arrowKind === undefined\n\tconst hideText = font === undefined\n\n\tconst theme = getDefaultColorTheme({ isDarkMode: isDarkMode })\n\n\treturn (\n\t\t<>\n\t\t\t<CommonStylePickerSet theme={theme} styles={styles} />\n\t\t\t{!hideText && <TextStylePickerSet theme={theme} styles={styles} />}\n\t\t\t{!(hideGeo && hideArrowHeads && hideSpline && hideArrowKind) && (\n\t\t\t\t<div className=\"tlui-style-panel__section\">\n\t\t\t\t\t<GeoStylePickerSet styles={styles} />\n\t\t\t\t\t<ArrowStylePickerSet styles={styles} />\n\t\t\t\t\t<ArrowheadStylePickerSet styles={styles} />\n\t\t\t\t\t<SplineStylePickerSet styles={styles} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t)\n}\n\nfunction useStyleChangeCallback() {\n\tconst editor = useEditor()\n\tconst trackEvent = useUiEvents()\n\n\treturn React.useMemo(\n\t\t() =>\n\t\t\tfunction handleStyleChange<T>(style: StyleProp<T>, value: T) {\n\t\t\t\teditor.run(() => {\n\t\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\t\teditor.setStyleForSelectedShapes(style, value)\n\t\t\t\t\t}\n\t\t\t\t\teditor.setStyleForNextShapes(style, value)\n\t\t\t\t\teditor.updateInstanceState({ isChangingStyle: true })\n\t\t\t\t})\n\n\t\t\t\ttrackEvent('set-style', { source: 'style-panel', id: style.id, value: value as string })\n\t\t\t},\n\t\t[editor, trackEvent]\n\t)\n}\n\n/** @public */\nexport interface ThemeStylePickerSetProps {\n\tstyles: ReadonlySharedStyleMap\n\ttheme: TLDefaultColorTheme\n}\n\n/** @public */\nexport interface StylePickerSetProps {\n\tstyles: ReadonlySharedStyleMap\n}\n\n/** @public @react */\nexport function CommonStylePickerSet({ styles, theme }: ThemeStylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst editor = useEditor()\n\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst color = styles.get(DefaultColorStyle)\n\tconst fill = styles.get(DefaultFillStyle)\n\tconst dash = styles.get(DefaultDashStyle)\n\tconst size = styles.get(DefaultSizeStyle)\n\n\tconst showPickers = fill !== undefined || dash !== undefined || size !== undefined\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\"tlui-style-panel__section__common\" data-testid=\"style.panel\">\n\t\t\t\t{color === undefined ? null : (\n\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.color')}>\n\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\ttitle={msg('style-panel.color')}\n\t\t\t\t\t\t\tuiType=\"color\"\n\t\t\t\t\t\t\tstyle={DefaultColorStyle}\n\t\t\t\t\t\t\titems={STYLES.color}\n\t\t\t\t\t\t\tvalue={color}\n\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t)}\n\t\t\t\t<OpacitySlider />\n\t\t\t</div>\n\t\t\t{showPickers && (\n\t\t\t\t<div className=\"tlui-style-panel__section\">\n\t\t\t\t\t{fill === undefined ? null : (\n\t\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.fill')}>\n\t\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.fill')}\n\t\t\t\t\t\t\t\tuiType=\"fill\"\n\t\t\t\t\t\t\t\tstyle={DefaultFillStyle}\n\t\t\t\t\t\t\t\titems={STYLES.fill}\n\t\t\t\t\t\t\t\tvalue={fill}\n\t\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t)}\n\t\t\t\t\t{dash === undefined ? null : (\n\t\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.dash')}>\n\t\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.dash')}\n\t\t\t\t\t\t\t\tuiType=\"dash\"\n\t\t\t\t\t\t\t\tstyle={DefaultDashStyle}\n\t\t\t\t\t\t\t\titems={STYLES.dash}\n\t\t\t\t\t\t\t\tvalue={dash}\n\t\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t)}\n\t\t\t\t\t{size === undefined ? null : (\n\t\t\t\t\t\t<TldrawUiToolbar label={msg('style-panel.size')}>\n\t\t\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.size')}\n\t\t\t\t\t\t\t\tuiType=\"size\"\n\t\t\t\t\t\t\t\tstyle={DefaultSizeStyle}\n\t\t\t\t\t\t\t\titems={STYLES.size}\n\t\t\t\t\t\t\t\tvalue={size}\n\t\t\t\t\t\t\t\tonValueChange={(style, value) => {\n\t\t\t\t\t\t\t\t\thandleValueChange(style, value)\n\t\t\t\t\t\t\t\t\tconst selectedShapeIds = editor.getSelectedShapeIds()\n\t\t\t\t\t\t\t\t\tif (selectedShapeIds.length > 0) {\n\t\t\t\t\t\t\t\t\t\tkickoutOccludedShapes(editor, selectedShapeIds)\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\ttheme={theme}\n\t\t\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</TldrawUiToolbar>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t)\n}\n\n/** @public @react */\nexport function TextStylePickerSet({ theme, styles }: ThemeStylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst editor = useEditor()\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\n\tconst font = styles.get(DefaultFontStyle)\n\tconst textAlign = styles.get(DefaultTextAlignStyle)\n\tconst labelAlign = styles.get(DefaultHorizontalAlignStyle)\n\tconst verticalLabelAlign = styles.get(DefaultVerticalAlignStyle)\n\tif (font === undefined && labelAlign === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<div className=\"tlui-style-panel__section\">\n\t\t\t{font === undefined ? null : (\n\t\t\t\t<TldrawUiToolbar label={msg('style-panel.font')}>\n\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\ttitle={msg('style-panel.font')}\n\t\t\t\t\t\tuiType=\"font\"\n\t\t\t\t\t\tstyle={DefaultFontStyle}\n\t\t\t\t\t\titems={STYLES.font}\n\t\t\t\t\t\tvalue={font}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t/>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t)}\n\n\t\t\t{textAlign === undefined ? null : (\n\t\t\t\t<TldrawUiToolbar label={msg('style-panel.align')} className=\"tlui-style-panel__row\">\n\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\ttitle={msg('style-panel.align')}\n\t\t\t\t\t\tuiType=\"align\"\n\t\t\t\t\t\tstyle={DefaultTextAlignStyle}\n\t\t\t\t\t\titems={STYLES.textAlign}\n\t\t\t\t\t\tvalue={textAlign}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"tlui-style-panel__row__extra-button\">\n\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\ttitle={msg('style-panel.vertical-align')}\n\t\t\t\t\t\t\tdata-testid=\"vertical-align\"\n\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TldrawUiButtonIcon icon=\"vertical-align-middle\" />\n\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t</div>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t)}\n\n\t\t\t{labelAlign === undefined ? null : (\n\t\t\t\t<TldrawUiToolbar label={msg('style-panel.label-align')} className=\"tlui-style-panel__row\">\n\t\t\t\t\t<TldrawUiButtonPicker\n\t\t\t\t\t\ttitle={msg('style-panel.label-align')}\n\t\t\t\t\t\tuiType=\"align\"\n\t\t\t\t\t\tstyle={DefaultHorizontalAlignStyle}\n\t\t\t\t\t\titems={STYLES.horizontalAlign}\n\t\t\t\t\t\tvalue={labelAlign}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\ttheme={theme}\n\t\t\t\t\t\tonHistoryMark={onHistoryMark}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"tlui-style-panel__row__extra-button\">\n\t\t\t\t\t\t{verticalLabelAlign === undefined ? (\n\t\t\t\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\ttitle={msg('style-panel.vertical-align')}\n\t\t\t\t\t\t\t\tdata-testid=\"vertical-align\"\n\t\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<TldrawUiButtonIcon icon=\"vertical-align-middle\" />\n\t\t\t\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<DropdownPicker\n\t\t\t\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\t\t\t\tid=\"geo-vertical-alignment\"\n\t\t\t\t\t\t\t\tuiType=\"verticalAlign\"\n\t\t\t\t\t\t\t\tstylePanelType=\"vertical-align\"\n\t\t\t\t\t\t\t\tstyle={DefaultVerticalAlignStyle}\n\t\t\t\t\t\t\t\titems={STYLES.verticalAlign}\n\t\t\t\t\t\t\t\tvalue={verticalLabelAlign}\n\t\t\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</TldrawUiToolbar>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n/** @public @react */\nexport function GeoStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst geo = styles.get(GeoShapeGeoStyle)\n\tif (geo === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbar label={msg('style-panel.geo')}>\n\t\t\t<DropdownPicker\n\t\t\t\tid=\"geo\"\n\t\t\t\ttype=\"menu\"\n\t\t\t\tlabel={'style-panel.geo'}\n\t\t\t\tuiType=\"geo\"\n\t\t\t\tstylePanelType=\"geo\"\n\t\t\t\tstyle={GeoShapeGeoStyle}\n\t\t\t\titems={STYLES.geo}\n\t\t\t\tvalue={geo}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t/>\n\t\t</TldrawUiToolbar>\n\t)\n}\n/** @public @react */\nexport function SplineStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst spline = styles.get(LineShapeSplineStyle)\n\tif (spline === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbar label={msg('style-panel.spline')}>\n\t\t\t<DropdownPicker\n\t\t\t\tid=\"spline\"\n\t\t\t\ttype=\"menu\"\n\t\t\t\tlabel={'style-panel.spline'}\n\t\t\t\tuiType=\"spline\"\n\t\t\t\tstylePanelType=\"spline\"\n\t\t\t\tstyle={LineShapeSplineStyle}\n\t\t\t\titems={STYLES.spline}\n\t\t\t\tvalue={spline}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t/>\n\t\t</TldrawUiToolbar>\n\t)\n}\n/** @public @react */\nexport function ArrowStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst msg = useTranslation()\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst arrowKind = styles.get(ArrowShapeKindStyle)\n\tif (arrowKind === undefined) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbar label={msg('style-panel.arrow-kind')}>\n\t\t\t<DropdownPicker\n\t\t\t\tid=\"arrow-kind\"\n\t\t\t\ttype=\"menu\"\n\t\t\t\tlabel={'style-panel.arrow-kind'}\n\t\t\t\tuiType=\"arrow-kind\"\n\t\t\t\tstylePanelType=\"arrow-kind\"\n\t\t\t\tstyle={ArrowShapeKindStyle}\n\t\t\t\titems={STYLES.arrowKind}\n\t\t\t\tvalue={arrowKind}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t/>\n\t\t</TldrawUiToolbar>\n\t)\n}\n/** @public @react */\nexport function ArrowheadStylePickerSet({ styles }: StylePickerSetProps) {\n\tconst handleValueChange = useStyleChangeCallback()\n\n\tconst arrowheadEnd = styles.get(ArrowShapeArrowheadEndStyle)\n\tconst arrowheadStart = styles.get(ArrowShapeArrowheadStartStyle)\n\tif (!arrowheadEnd || !arrowheadStart) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<DoubleDropdownPicker<TLArrowShapeArrowheadStyle>\n\t\t\tlabel={'style-panel.arrowheads'}\n\t\t\tuiTypeA=\"arrowheadStart\"\n\t\t\tstyleA={ArrowShapeArrowheadStartStyle}\n\t\t\titemsA={STYLES.arrowheadStart}\n\t\t\tvalueA={arrowheadStart}\n\t\t\tuiTypeB=\"arrowheadEnd\"\n\t\t\tstyleB={ArrowShapeArrowheadEndStyle}\n\t\t\titemsB={STYLES.arrowheadEnd}\n\t\t\tvalueB={arrowheadEnd}\n\t\t\tonValueChange={handleValueChange}\n\t\t\tlabelA=\"style-panel.arrowhead-start\"\n\t\t\tlabelB=\"style-panel.arrowhead-end\"\n\t\t/>\n\t)\n}\n\nconst tldrawSupportedOpacities = [0.1, 0.25, 0.5, 0.75, 1] as const\n/** @public @react */\nexport function OpacitySlider() {\n\tconst editor = useEditor()\n\n\tconst onHistoryMark = useCallback((id: string) => editor.markHistoryStoppingPoint(id), [editor])\n\n\tconst opacity = useValue('opacity', () => editor.getSharedOpacity(), [editor])\n\tconst trackEvent = useUiEvents()\n\tconst msg = useTranslation()\n\n\tconst handleOpacityValueChange = React.useCallback(\n\t\t(value: number) => {\n\t\t\tconst item = tldrawSupportedOpacities[value]\n\t\t\teditor.run(() => {\n\t\t\t\tif (editor.isIn('select')) {\n\t\t\t\t\teditor.setOpacityForSelectedShapes(item)\n\t\t\t\t}\n\t\t\t\teditor.setOpacityForNextShapes(item)\n\t\t\t\teditor.updateInstanceState({ isChangingStyle: true })\n\t\t\t})\n\n\t\t\ttrackEvent('set-style', { source: 'style-panel', id: 'opacity', value })\n\t\t},\n\t\t[editor, trackEvent]\n\t)\n\n\tif (opacity === undefined) return null\n\n\tconst opacityIndex =\n\t\topacity.type === 'mixed'\n\t\t\t? -1\n\t\t\t: tldrawSupportedOpacities.indexOf(\n\t\t\t\t\tminBy(tldrawSupportedOpacities, (supportedOpacity) =>\n\t\t\t\t\t\tMath.abs(supportedOpacity - opacity.value)\n\t\t\t\t\t)!\n\t\t\t\t)\n\n\treturn (\n\t\t<TldrawUiSlider\n\t\t\tdata-testid=\"style.opacity\"\n\t\t\tvalue={opacityIndex >= 0 ? opacityIndex : tldrawSupportedOpacities.length - 1}\n\t\t\tlabel={opacity.type === 'mixed' ? 'style-panel.mixed' : `opacity-style.${opacity.value}`}\n\t\t\tonValueChange={handleOpacityValueChange}\n\t\t\tsteps={tldrawSupportedOpacities.length - 1}\n\t\t\ttitle={msg('style-panel.opacity')}\n\t\t\tonHistoryMark={onHistoryMark}\n\t\t/>\n\t)\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgEE;AAhEF,oBAwBO;AACP,mBAAmC;AACnC,oBAAuB;AACvB,oBAA4B;AAE5B,4BAA+B;AAC/B,gCAAmC;AACnC,kCAAqC;AACrC,4BAA+B;AAC/B,6BAAuD;AACvD,kCAAqC;AACrC,4BAA+B;AAQxB,SAAS,yBAAyB,EAAE,OAAO,GAA+B;AAChF,QAAM,iBAAa,6BAAc;AAEjC,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,MAAM,OAAO,IAAI,8BAAgB;AACvC,QAAM,eAAe,OAAO,IAAI,yCAA2B;AAC3D,QAAM,iBAAiB,OAAO,IAAI,2CAA6B;AAC/D,QAAM,YAAY,OAAO,IAAI,iCAAmB;AAChD,QAAM,SAAS,OAAO,IAAI,kCAAoB;AAC9C,QAAM,OAAO,OAAO,IAAI,8BAAgB;AAExC,QAAM,UAAU,QAAQ;AACxB,QAAM,iBAAiB,iBAAiB,UAAa,mBAAmB;AACxE,QAAM,aAAa,WAAW;AAC9B,QAAM,gBAAgB,cAAc;AACpC,QAAM,WAAW,SAAS;AAE1B,QAAM,YAAQ,oCAAqB,EAAE,WAAuB,CAAC;AAE7D,SACC,4EACC;AAAA,gDAAC,wBAAqB,OAAc,QAAgB;AAAA,IACnD,CAAC,YAAY,4CAAC,sBAAmB,OAAc,QAAgB;AAAA,IAC/D,EAAE,WAAW,kBAAkB,cAAc,kBAC7C,6CAAC,SAAI,WAAU,6BACd;AAAA,kDAAC,qBAAkB,QAAgB;AAAA,MACnC,4CAAC,uBAAoB,QAAgB;AAAA,MACrC,4CAAC,2BAAwB,QAAgB;AAAA,MACzC,4CAAC,wBAAqB,QAAgB;AAAA,OACvC;AAAA,KAEF;AAEF;AAEA,SAAS,yBAAyB;AACjC,QAAM,aAAS,yBAAU;AACzB,QAAM,iBAAa,2BAAY;AAE/B,SAAO,aAAAA,QAAM;AAAA,IACZ,MACC,SAAS,kBAAqB,OAAqB,OAAU;AAC5D,aAAO,IAAI,MAAM;AAChB,YAAI,OAAO,KAAK,QAAQ,GAAG;AAC1B,iBAAO,0BAA0B,OAAO,KAAK;AAAA,QAC9C;AACA,eAAO,sBAAsB,OAAO,KAAK;AACzC,eAAO,oBAAoB,EAAE,iBAAiB,KAAK,CAAC;AAAA,MACrD,CAAC;AAED,iBAAW,aAAa,EAAE,QAAQ,eAAe,IAAI,MAAM,IAAI,MAAuB,CAAC;AAAA,IACxF;AAAA,IACD,CAAC,QAAQ,UAAU;AAAA,EACpB;AACD;AAcO,SAAS,qBAAqB,EAAE,QAAQ,MAAM,GAA6B;AACjF,QAAM,UAAM,sCAAe;AAC3B,QAAM,aAAS,yBAAU;AAEzB,QAAM,oBAAgB,0BAAY,CAAC,OAAe,OAAO,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC;AAE/F,QAAM,oBAAoB,uBAAuB;AAEjD,QAAM,QAAQ,OAAO,IAAI,+BAAiB;AAC1C,QAAM,OAAO,OAAO,IAAI,8BAAgB;AACxC,QAAM,OAAO,OAAO,IAAI,8BAAgB;AACxC,QAAM,OAAO,OAAO,IAAI,8BAAgB;AAExC,QAAM,cAAc,SAAS,UAAa,SAAS,UAAa,SAAS;AAEzE,SACC,4EACC;AAAA,iDAAC,SAAI,WAAU,qCAAoC,eAAY,eAC7D;AAAA,gBAAU,SAAY,OACtB,4CAAC,0CAAgB,OAAO,IAAI,mBAAmB,GAC9C;AAAA,QAAC;AAAA;AAAA,UACA,OAAO,IAAI,mBAAmB;AAAA,UAC9B,QAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO,qBAAO;AAAA,UACd,OAAO;AAAA,UACP,eAAe;AAAA,UACf;AAAA,UACA;AAAA;AAAA,MACD,GACD;AAAA,MAED,4CAAC,iBAAc;AAAA,OAChB;AAAA,IACC,eACA,6CAAC,SAAI,WAAU,6BACb;AAAA,eAAS,SAAY,OACrB,4CAAC,0CAAgB,OAAO,IAAI,kBAAkB,GAC7C;AAAA,QAAC;AAAA;AAAA,UACA,OAAO,IAAI,kBAAkB;AAAA,UAC7B,QAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO,qBAAO;AAAA,UACd,OAAO;AAAA,UACP,eAAe;AAAA,UACf;AAAA,UACA;AAAA;AAAA,MACD,GACD;AAAA,MAEA,SAAS,SAAY,OACrB,4CAAC,0CAAgB,OAAO,IAAI,kBAAkB,GAC7C;AAAA,QAAC;AAAA;AAAA,UACA,OAAO,IAAI,kBAAkB;AAAA,UAC7B,QAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO,qBAAO;AAAA,UACd,OAAO;AAAA,UACP,eAAe;AAAA,UACf;AAAA,UACA;AAAA;AAAA,MACD,GACD;AAAA,MAEA,SAAS,SAAY,OACrB,4CAAC,0CAAgB,OAAO,IAAI,kBAAkB,GAC7C;AAAA,QAAC;AAAA;AAAA,UACA,OAAO,IAAI,kBAAkB;AAAA,UAC7B,QAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO,qBAAO;AAAA,UACd,OAAO;AAAA,UACP,eAAe,CAAC,OAAO,UAAU;AAChC,8BAAkB,OAAO,KAAK;AAC9B,kBAAM,mBAAmB,OAAO,oBAAoB;AACpD,gBAAI,iBAAiB,SAAS,GAAG;AAChC,uDAAsB,QAAQ,gBAAgB;AAAA,YAC/C;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACD,GACD;AAAA,OAEF;AAAA,KAEF;AAEF;AAGO,SAAS,mBAAmB,EAAE,OAAO,OAAO,GAA6B;AAC/E,QAAM,UAAM,sCAAe;AAC3B,QAAM,oBAAoB,uBAAuB;AAEjD,QAAM,aAAS,yBAAU;AACzB,QAAM,oBAAgB,0BAAY,CAAC,OAAe,OAAO,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC;AAE/F,QAAM,OAAO,OAAO,IAAI,8BAAgB;AACxC,QAAM,YAAY,OAAO,IAAI,mCAAqB;AAClD,QAAM,aAAa,OAAO,IAAI,yCAA2B;AACzD,QAAM,qBAAqB,OAAO,IAAI,uCAAyB;AAC/D,MAAI,SAAS,UAAa,eAAe,QAAW;AACnD,WAAO;AAAA,EACR;AAEA,SACC,6CAAC,SAAI,WAAU,6BACb;AAAA,aAAS,SAAY,OACrB,4CAAC,0CAAgB,OAAO,IAAI,kBAAkB,GAC7C;AAAA,MAAC;AAAA;AAAA,QACA,OAAO,IAAI,kBAAkB;AAAA,QAC7B,QAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO,qBAAO;AAAA,QACd,OAAO;AAAA,QACP,eAAe;AAAA,QACf;AAAA,QACA;AAAA;AAAA,IACD,GACD;AAAA,IAGA,cAAc,SAAY,OAC1B,6CAAC,0CAAgB,OAAO,IAAI,mBAAmB,GAAG,WAAU,yBAC3D;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,OAAO,IAAI,mBAAmB;AAAA,UAC9B,QAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO,qBAAO;AAAA,UACd,OAAO;AAAA,UACP,eAAe;AAAA,UACf;AAAA,UACA;AAAA;AAAA,MACD;AAAA,MACA,4CAAC,SAAI,WAAU,uCACd;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,OAAO,IAAI,4BAA4B;AAAA,UACvC,eAAY;AAAA,UACZ,UAAQ;AAAA,UAER,sDAAC,gDAAmB,MAAK,yBAAwB;AAAA;AAAA,MAClD,GACD;AAAA,OACD;AAAA,IAGA,eAAe,SAAY,OAC3B,6CAAC,0CAAgB,OAAO,IAAI,yBAAyB,GAAG,WAAU,yBACjE;AAAA;AAAA,QAAC;AAAA;AAAA,UACA,OAAO,IAAI,yBAAyB;AAAA,UACpC,QAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO,qBAAO;AAAA,UACd,OAAO;AAAA,UACP,eAAe;AAAA,UACf;AAAA,UACA;AAAA;AAAA,MACD;AAAA,MACA,4CAAC,SAAI,WAAU,uCACb,iCAAuB,SACvB;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,OAAO,IAAI,4BAA4B;AAAA,UACvC,eAAY;AAAA,UACZ,UAAQ;AAAA,UAER,sDAAC,gDAAmB,MAAK,yBAAwB;AAAA;AAAA,MAClD,IAEA;AAAA,QAAC;AAAA;AAAA,UACA,MAAK;AAAA,UACL,IAAG;AAAA,UACH,QAAO;AAAA,UACP,gBAAe;AAAA,UACf,OAAO;AAAA,UACP,OAAO,qBAAO;AAAA,UACd,OAAO;AAAA,UACP,eAAe;AAAA;AAAA,MAChB,GAEF;AAAA,OACD;AAAA,KAEF;AAEF;AAEO,SAAS,kBAAkB,EAAE,OAAO,GAAwB;AAClE,QAAM,UAAM,sCAAe;AAC3B,QAAM,oBAAoB,uBAAuB;AAEjD,QAAM,MAAM,OAAO,IAAI,8BAAgB;AACvC,MAAI,QAAQ,QAAW;AACtB,WAAO;AAAA,EACR;AAEA,SACC,4CAAC,0CAAgB,OAAO,IAAI,iBAAiB,GAC5C;AAAA,IAAC;AAAA;AAAA,MACA,IAAG;AAAA,MACH,MAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAO;AAAA,MACP,gBAAe;AAAA,MACf,OAAO;AAAA,MACP,OAAO,qBAAO;AAAA,MACd,OAAO;AAAA,MACP,eAAe;AAAA;AAAA,EAChB,GACD;AAEF;AAEO,SAAS,qBAAqB,EAAE,OAAO,GAAwB;AACrE,QAAM,UAAM,sCAAe;AAC3B,QAAM,oBAAoB,uBAAuB;AAEjD,QAAM,SAAS,OAAO,IAAI,kCAAoB;AAC9C,MAAI,WAAW,QAAW;AACzB,WAAO;AAAA,EACR;AAEA,SACC,4CAAC,0CAAgB,OAAO,IAAI,oBAAoB,GAC/C;AAAA,IAAC;AAAA;AAAA,MACA,IAAG;AAAA,MACH,MAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAO;AAAA,MACP,gBAAe;AAAA,MACf,OAAO;AAAA,MACP,OAAO,qBAAO;AAAA,MACd,OAAO;AAAA,MACP,eAAe;AAAA;AAAA,EAChB,GACD;AAEF;AAEO,SAAS,oBAAoB,EAAE,OAAO,GAAwB;AACpE,QAAM,UAAM,sCAAe;AAC3B,QAAM,oBAAoB,uBAAuB;AAEjD,QAAM,YAAY,OAAO,IAAI,iCAAmB;AAChD,MAAI,cAAc,QAAW;AAC5B,WAAO;AAAA,EACR;AAEA,SACC,4CAAC,0CAAgB,OAAO,IAAI,wBAAwB,GACnD;AAAA,IAAC;AAAA;AAAA,MACA,IAAG;AAAA,MACH,MAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAO;AAAA,MACP,gBAAe;AAAA,MACf,OAAO;AAAA,MACP,OAAO,qBAAO;AAAA,MACd,OAAO;AAAA,MACP,eAAe;AAAA;AAAA,EAChB,GACD;AAEF;AAEO,SAAS,wBAAwB,EAAE,OAAO,GAAwB;AACxE,QAAM,oBAAoB,uBAAuB;AAEjD,QAAM,eAAe,OAAO,IAAI,yCAA2B;AAC3D,QAAM,iBAAiB,OAAO,IAAI,2CAA6B;AAC/D,MAAI,CAAC,gBAAgB,CAAC,gBAAgB;AACrC,WAAO;AAAA,EACR;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAO;AAAA,MACP,SAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ,qBAAO;AAAA,MACf,QAAQ;AAAA,MACR,SAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ,qBAAO;AAAA,MACf,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,QAAO;AAAA,MACP,QAAO;AAAA;AAAA,EACR;AAEF;AAEA,MAAM,2BAA2B,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC;AAElD,SAAS,gBAAgB;AAC/B,QAAM,aAAS,yBAAU;AAEzB,QAAM,oBAAgB,0BAAY,CAAC,OAAe,OAAO,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC;AAE/F,QAAM,cAAU,wBAAS,WAAW,MAAM,OAAO,iBAAiB,GAAG,CAAC,MAAM,CAAC;AAC7E,QAAM,iBAAa,2BAAY;AAC/B,QAAM,UAAM,sCAAe;AAE3B,QAAM,2BAA2B,aAAAA,QAAM;AAAA,IACtC,CAAC,UAAkB;AAClB,YAAM,OAAO,yBAAyB,KAAK;AAC3C,aAAO,IAAI,MAAM;AAChB,YAAI,OAAO,KAAK,QAAQ,GAAG;AAC1B,iBAAO,4BAA4B,IAAI;AAAA,QACxC;AACA,eAAO,wBAAwB,IAAI;AACnC,eAAO,oBAAoB,EAAE,iBAAiB,KAAK,CAAC;AAAA,MACrD,CAAC;AAED,iBAAW,aAAa,EAAE,QAAQ,eAAe,IAAI,WAAW,MAAM,CAAC;AAAA,IACxE;AAAA,IACA,CAAC,QAAQ,UAAU;AAAA,EACpB;AAEA,MAAI,YAAY,OAAW,QAAO;AAElC,QAAM,eACL,QAAQ,SAAS,UACd,KACA,yBAAyB;AAAA,QACzB;AAAA,MAAM;AAAA,MAA0B,CAAC,qBAChC,KAAK,IAAI,mBAAmB,QAAQ,KAAK;AAAA,IAC1C;AAAA,EACD;AAEH,SACC;AAAA,IAAC;AAAA;AAAA,MACA,eAAY;AAAA,MACZ,OAAO,gBAAgB,IAAI,eAAe,yBAAyB,SAAS;AAAA,MAC5E,OAAO,QAAQ,SAAS,UAAU,sBAAsB,iBAAiB,QAAQ,KAAK;AAAA,MACtF,eAAe;AAAA,MACf,OAAO,yBAAyB,SAAS;AAAA,MACzC,OAAO,IAAI,qBAAqB;AAAA,MAChC;AAAA;AAAA,EACD;AAEF;",
6
6
  "names": ["React"]
7
7
  }
@@ -48,7 +48,6 @@ __export(menu_items_exports, {
48
48
  ToggleEdgeScrollingItem: () => ToggleEdgeScrollingItem,
49
49
  ToggleFocusModeItem: () => ToggleFocusModeItem,
50
50
  ToggleGridItem: () => ToggleGridItem,
51
- ToggleKeyboardShortcutsItem: () => ToggleKeyboardShortcutsItem,
52
51
  ToggleLockMenuItem: () => ToggleLockMenuItem,
53
52
  TogglePasteAtCursorItem: () => TogglePasteAtCursorItem,
54
53
  ToggleReduceMotionItem: () => ToggleReduceMotionItem,
@@ -505,21 +504,6 @@ function ToggleReduceMotionItem() {
505
504
  }
506
505
  );
507
506
  }
508
- function ToggleKeyboardShortcutsItem() {
509
- const editor = (0, import_editor.useEditor)();
510
- const keyboardShortcuts = (0, import_editor.useValue)(
511
- "keyboardShortcuts",
512
- () => editor.user.getAreKeyboardShortcutsEnabled(),
513
- [editor]
514
- );
515
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
516
- import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem,
517
- {
518
- actionId: "toggle-keyboard-shortcuts",
519
- checked: keyboardShortcuts
520
- }
521
- );
522
- }
523
507
  function ToggleDebugModeItem() {
524
508
  const editor = (0, import_editor.useEditor)();
525
509
  const isDebugMode = (0, import_editor.useValue)("isDebugMode", () => editor.getInstanceState().isDebugMode, [editor]);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/components/menu-items.tsx"],
4
- "sourcesContent": ["import {\n\tTLBookmarkShape,\n\tTLEmbedShape,\n\tTLFrameShape,\n\tTLImageShape,\n\tTLPageId,\n\tuseEditor,\n\tuseValue,\n} from '@tldraw/editor'\nimport { supportsDownloadingOriginal } from '../context/actions'\nimport { useUiEvents } from '../context/events'\nimport { useToasts } from '../context/toasts'\nimport {\n\tshowMenuPaste,\n\tuseAllowGroup,\n\tuseAllowUngroup,\n\tuseAnySelectedShapesCount,\n\tuseHasLinkShapeSelected,\n\tuseOnlyFlippableShape,\n\tuseShowAutoSizeToggle,\n\tuseThreeStackableItems,\n\tuseUnlockedSelectedShapesCount,\n} from '../hooks/menu-hooks'\nimport { useGetEmbedDefinition } from '../hooks/useGetEmbedDefinition'\nimport { useReadonly } from '../hooks/useReadonly'\nimport { TldrawUiMenuActionCheckboxItem } from './primitives/menus/TldrawUiMenuActionCheckboxItem'\nimport { TldrawUiMenuActionItem } from './primitives/menus/TldrawUiMenuActionItem'\nimport { TldrawUiMenuGroup } from './primitives/menus/TldrawUiMenuGroup'\nimport { TldrawUiMenuItem } from './primitives/menus/TldrawUiMenuItem'\nimport { TldrawUiMenuSubmenu } from './primitives/menus/TldrawUiMenuSubmenu'\n\n/* -------------------- Selection ------------------- */\n\n/** @public @react */\nexport function ToggleAutoSizeMenuItem() {\n\tconst shouldDisplay = useShowAutoSizeToggle()\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"toggle-auto-size\" />\n}\n\n/** @public @react */\nexport function EditLinkMenuItem() {\n\tconst shouldDisplay = useHasLinkShapeSelected()\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"edit-link\" />\n}\n\n/** @public @react */\nexport function DuplicateMenuItem() {\n\tconst shouldDisplay = useUnlockedSelectedShapesCount(1)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"duplicate\" />\n}\n\n/** @public @react */\nexport function FlattenMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue(\n\t\t'should display flatten option',\n\t\t() => {\n\t\t\tconst selectedShapeIds = editor.getSelectedShapeIds()\n\t\t\tif (selectedShapeIds.length === 0) return false\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\tif (onlySelectedShape && editor.isShapeOfType<TLImageShape>(onlySelectedShape, 'image')) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t[editor]\n\t)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"flatten-to-image\" />\n}\n\n/** @public @react */\nexport function DownloadOriginalMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue(\n\t\t'should display download original option',\n\t\t() => {\n\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\tif (selectedShapes.length === 0) return false\n\t\t\treturn selectedShapes.some((shape) => supportsDownloadingOriginal(shape, editor))\n\t\t},\n\t\t[editor]\n\t)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"download-original\" />\n}\n\n/** @public @react */\nexport function GroupMenuItem() {\n\tconst shouldDisplay = useAllowGroup()\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"group\" />\n}\n\n/** @public @react */\nexport function UngroupMenuItem() {\n\tconst shouldDisplay = useAllowUngroup()\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"ungroup\" />\n}\n\n/** @public @react */\nexport function RemoveFrameMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue(\n\t\t'allow unframe',\n\t\t() => {\n\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\tif (selectedShapes.length === 0) return false\n\t\t\treturn selectedShapes.every((shape) => editor.isShapeOfType<TLFrameShape>(shape, 'frame'))\n\t\t},\n\t\t[editor]\n\t)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"remove-frame\" />\n}\n\n/** @public @react */\nexport function FitFrameToContentMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue(\n\t\t'allow fit frame to content',\n\t\t() => {\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\tif (!onlySelectedShape) return false\n\t\t\treturn (\n\t\t\t\teditor.isShapeOfType<TLFrameShape>(onlySelectedShape, 'frame') &&\n\t\t\t\teditor.getSortedChildIdsForParent(onlySelectedShape).length > 0\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"fit-frame-to-content\" />\n}\n\n/** @public @react */\nexport function ToggleLockMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue('selected shapes', () => editor.getSelectedShapes().length > 0, [\n\t\teditor,\n\t])\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"toggle-lock\" />\n}\n\n/** @public @react */\nexport function ToggleTransparentBgMenuItem() {\n\tconst editor = useEditor()\n\tconst isTransparentBg = useValue(\n\t\t'isTransparentBg',\n\t\t() => !editor.getInstanceState().exportBackground,\n\t\t[editor]\n\t)\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem\n\t\t\tactionId=\"toggle-transparent\"\n\t\t\tchecked={isTransparentBg}\n\t\t\ttoggle\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function UnlockAllMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue('any shapes', () => editor.getCurrentPageShapeIds().size > 0, [\n\t\teditor,\n\t])\n\n\treturn <TldrawUiMenuActionItem actionId=\"unlock-all\" disabled={!shouldDisplay} />\n}\n\n/* ---------------------- Zoom ---------------------- */\n\n/** @public @react */\nexport function ZoomTo100MenuItem() {\n\tconst editor = useEditor()\n\tconst isZoomedTo100 = useValue('zoomed to 100', () => editor.getZoomLevel() === 1, [editor])\n\n\treturn <TldrawUiMenuActionItem actionId=\"zoom-to-100\" noClose disabled={isZoomedTo100} />\n}\n\n/** @public @react */\nexport function ZoomToFitMenuItem() {\n\tconst editor = useEditor()\n\tconst hasShapes = useValue('has shapes', () => editor.getCurrentPageShapeIds().size > 0, [editor])\n\n\treturn (\n\t\t<TldrawUiMenuActionItem\n\t\t\tactionId=\"zoom-to-fit\"\n\t\t\tdisabled={!hasShapes}\n\t\t\tdata-testid=\"minimap.zoom-menu.zoom-to-fit\"\n\t\t\tnoClose\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function ZoomToSelectionMenuItem() {\n\tconst editor = useEditor()\n\tconst hasSelected = useValue('has shapes', () => editor.getSelectedShapeIds().length > 0, [\n\t\teditor,\n\t])\n\n\treturn (\n\t\t<TldrawUiMenuActionItem\n\t\t\tactionId=\"zoom-to-selection\"\n\t\t\tdisabled={!hasSelected}\n\t\t\tdata-testid=\"minimap.zoom-menu.zoom-to-selection\"\n\t\t\tnoClose\n\t\t/>\n\t)\n}\n\n/* -------------------- Clipboard ------------------- */\n\n/** @public @react */\nexport function ClipboardMenuGroup() {\n\treturn (\n\t\t<TldrawUiMenuGroup id=\"clipboard\">\n\t\t\t<CutMenuItem />\n\t\t\t<CopyMenuItem />\n\t\t\t<PasteMenuItem />\n\t\t\t<DuplicateMenuItem />\n\t\t\t<DeleteMenuItem />\n\t\t</TldrawUiMenuGroup>\n\t)\n}\n\n/** @public @react */\nexport function CopyAsMenuGroup() {\n\tconst editor = useEditor()\n\tconst atLeastOneShapeOnPage = useValue(\n\t\t'atLeastOneShapeOnPage',\n\t\t() => editor.getCurrentPageShapeIds().size > 0,\n\t\t[editor]\n\t)\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu\n\t\t\tid=\"copy-as\"\n\t\t\tlabel=\"context-menu.copy-as\"\n\t\t\tsize=\"small\"\n\t\t\tdisabled={!atLeastOneShapeOnPage}\n\t\t>\n\t\t\t<TldrawUiMenuGroup id=\"copy-as-group\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"copy-as-svg\" />\n\t\t\t\t{Boolean(window.navigator.clipboard?.write) && (\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"copy-as-png\" />\n\t\t\t\t)}\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup id=\"copy-as-bg\">\n\t\t\t\t<ToggleTransparentBgMenuItem />\n\t\t\t</TldrawUiMenuGroup>\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\n/** @public @react */\nexport function CutMenuItem() {\n\tconst shouldDisplay = useUnlockedSelectedShapesCount(1)\n\n\treturn <TldrawUiMenuActionItem actionId=\"cut\" disabled={!shouldDisplay} />\n}\n\n/** @public @react */\nexport function CopyMenuItem() {\n\tconst shouldDisplay = useAnySelectedShapesCount(1)\n\n\treturn <TldrawUiMenuActionItem actionId=\"copy\" disabled={!shouldDisplay} />\n}\n\n/** @public @react */\nexport function PasteMenuItem() {\n\tconst shouldDisplay = showMenuPaste\n\n\treturn <TldrawUiMenuActionItem actionId=\"paste\" disabled={!shouldDisplay} />\n}\n\n/* ------------------- Conversions ------------------ */\n\n/** @public @react */\nexport function ConversionsMenuGroup() {\n\tconst editor = useEditor()\n\tconst atLeastOneShapeOnPage = useValue(\n\t\t'atLeastOneShapeOnPage',\n\t\t() => editor.getCurrentPageShapeIds().size > 0,\n\t\t[editor]\n\t)\n\n\tif (!atLeastOneShapeOnPage) return null\n\n\treturn (\n\t\t<TldrawUiMenuGroup id=\"conversions\">\n\t\t\t<CopyAsMenuGroup />\n\t\t\t<TldrawUiMenuSubmenu id=\"export-as\" label=\"context-menu.export-as\" size=\"small\">\n\t\t\t\t<TldrawUiMenuGroup id=\"export-as-group\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"export-as-svg\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"export-as-png\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t\t<TldrawUiMenuGroup id=\"export-as-bg\">\n\t\t\t\t\t<ToggleTransparentBgMenuItem />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t</TldrawUiMenuSubmenu>\n\t\t\t<DownloadOriginalMenuItem />\n\t\t</TldrawUiMenuGroup>\n\t)\n}\n\n/* ------------------ Set Selection ----------------- */\n/** @public @react */\nexport function SelectAllMenuItem() {\n\tconst editor = useEditor()\n\tconst atLeastOneShapeOnPage = useValue(\n\t\t'atLeastOneShapeOnPage',\n\t\t() => editor.getCurrentPageShapeIds().size > 0,\n\t\t[editor]\n\t)\n\n\treturn <TldrawUiMenuActionItem actionId=\"select-all\" disabled={!atLeastOneShapeOnPage} />\n}\n\n/* ------------------ Delete Group ------------------ */\n\n/** @public @react */\nexport function DeleteMenuItem() {\n\tconst oneSelected = useUnlockedSelectedShapesCount(1)\n\n\treturn <TldrawUiMenuActionItem actionId=\"delete\" disabled={!oneSelected} />\n}\n\n/* --------------------- Modify --------------------- */\n\n/** @public @react */\nexport function EditMenuSubmenu() {\n\tconst isReadonlyMode = useReadonly()\n\tif (!useAnySelectedShapesCount(1)) return null\n\tif (isReadonlyMode) return null\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu id=\"edit\" label=\"context-menu.edit\" size=\"small\">\n\t\t\t<GroupMenuItem />\n\t\t\t<UngroupMenuItem />\n\t\t\t<FlattenMenuItem />\n\t\t\t<EditLinkMenuItem />\n\t\t\t<FitFrameToContentMenuItem />\n\t\t\t<RemoveFrameMenuItem />\n\t\t\t<ConvertToEmbedMenuItem />\n\t\t\t<ConvertToBookmarkMenuItem />\n\t\t\t<ToggleAutoSizeMenuItem />\n\t\t\t<ToggleLockMenuItem />\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\n/** @public @react */\nexport function ArrangeMenuSubmenu() {\n\tconst twoSelected = useUnlockedSelectedShapesCount(2)\n\tconst onlyFlippableShapeSelected = useOnlyFlippableShape()\n\tconst isReadonlyMode = useReadonly()\n\n\tif (isReadonlyMode) return null\n\tif (!(twoSelected || onlyFlippableShapeSelected)) return null\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu id=\"arrange\" label=\"context-menu.arrange\" size=\"small\">\n\t\t\t{twoSelected && (\n\t\t\t\t<TldrawUiMenuGroup id=\"align\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-left\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-center-horizontal\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-right\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-top\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-center-vertical\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-bottom\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t)}\n\t\t\t<DistributeMenuGroup />\n\t\t\t{twoSelected && (\n\t\t\t\t<TldrawUiMenuGroup id=\"stretch\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"stretch-horizontal\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"stretch-vertical\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t)}\n\t\t\t{(twoSelected || onlyFlippableShapeSelected) && (\n\t\t\t\t<TldrawUiMenuGroup id=\"flip\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"flip-horizontal\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"flip-vertical\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t)}\n\t\t\t<OrderMenuGroup />\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\nfunction DistributeMenuGroup() {\n\tconst threeSelected = useUnlockedSelectedShapesCount(3)\n\tif (!threeSelected) return null\n\n\treturn (\n\t\t<TldrawUiMenuGroup id=\"distribute\">\n\t\t\t<TldrawUiMenuActionItem actionId=\"distribute-horizontal\" />\n\t\t\t<TldrawUiMenuActionItem actionId=\"distribute-vertical\" />\n\t\t</TldrawUiMenuGroup>\n\t)\n}\n\nfunction OrderMenuGroup() {\n\tconst twoSelected = useUnlockedSelectedShapesCount(2)\n\tconst threeStackableItems = useThreeStackableItems()\n\tif (!twoSelected) return null\n\n\treturn (\n\t\t<TldrawUiMenuGroup id=\"order\">\n\t\t\t<TldrawUiMenuActionItem actionId=\"pack\" />\n\t\t\t{threeStackableItems && <TldrawUiMenuActionItem actionId=\"stack-horizontal\" />}\n\t\t\t{threeStackableItems && <TldrawUiMenuActionItem actionId=\"stack-vertical\" />}\n\t\t</TldrawUiMenuGroup>\n\t)\n}\n\n/** @public @react */\nexport function ReorderMenuSubmenu() {\n\tconst isReadonlyMode = useReadonly()\n\tconst oneSelected = useUnlockedSelectedShapesCount(1)\n\tif (isReadonlyMode) return null\n\tif (!oneSelected) return null\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu id=\"reorder\" label=\"context-menu.reorder\" size=\"small\">\n\t\t\t<TldrawUiMenuGroup id=\"reorder\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"bring-to-front\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"bring-forward\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"send-backward\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"send-to-back\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\n/** @public @react */\nexport function MoveToPageMenu() {\n\tconst editor = useEditor()\n\tconst pages = useValue('pages', () => editor.getPages(), [editor])\n\tconst currentPageId = useValue('current page id', () => editor.getCurrentPageId(), [editor])\n\tconst { addToast } = useToasts()\n\tconst trackEvent = useUiEvents()\n\tconst isReadonlyMode = useReadonly()\n\tconst oneSelected = useUnlockedSelectedShapesCount(1)\n\n\tif (!oneSelected) return null\n\tif (isReadonlyMode) return null\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu id=\"move-to-page\" label=\"context-menu.move-to-page\" size=\"small\">\n\t\t\t<TldrawUiMenuGroup id=\"pages\">\n\t\t\t\t{pages.map((page) => (\n\t\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\t\tid={page.id}\n\t\t\t\t\t\tkey={page.id}\n\t\t\t\t\t\tdisabled={currentPageId === page.id}\n\t\t\t\t\t\tlabel={page.name.length > 30 ? `${page.name.slice(0, 30)}\u2026` : page.name}\n\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\teditor.markHistoryStoppingPoint('move_shapes_to_page')\n\t\t\t\t\t\t\teditor.moveShapesToPage(editor.getSelectedShapeIds(), page.id as TLPageId)\n\n\t\t\t\t\t\t\tconst toPage = editor.getPage(page.id)\n\n\t\t\t\t\t\t\tif (toPage) {\n\t\t\t\t\t\t\t\taddToast({\n\t\t\t\t\t\t\t\t\ttitle: 'Changed Page',\n\t\t\t\t\t\t\t\t\tdescription: `Moved to ${toPage.name}.`,\n\t\t\t\t\t\t\t\t\tactions: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tlabel: 'Go Back',\n\t\t\t\t\t\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\t\t\t\t\teditor.markHistoryStoppingPoint('change-page')\n\t\t\t\t\t\t\t\t\t\t\t\teditor.setCurrentPage(currentPageId)\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\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\ttrackEvent('move-to-page', { source: 'context-menu' })\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup id=\"new-page\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"move-to-new-page\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\n/** @public @react */\nexport function ConvertToBookmarkMenuItem() {\n\tconst editor = useEditor()\n\n\tconst oneEmbedSelected = useValue(\n\t\t'oneEmbedSelected',\n\t\t() => {\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\tif (!onlySelectedShape) return false\n\t\t\treturn !!(\n\t\t\t\teditor.isShapeOfType<TLEmbedShape>(onlySelectedShape, 'embed') &&\n\t\t\t\tonlySelectedShape.props.url &&\n\t\t\t\t!editor.isShapeOrAncestorLocked(onlySelectedShape)\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n\n\tif (!oneEmbedSelected) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"convert-to-bookmark\" />\n}\n\n/** @public @react */\nexport function ConvertToEmbedMenuItem() {\n\tconst editor = useEditor()\n\tconst getEmbedDefinition = useGetEmbedDefinition()\n\n\tconst oneEmbeddableBookmarkSelected = useValue(\n\t\t'oneEmbeddableBookmarkSelected',\n\t\t() => {\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\tif (!onlySelectedShape) return false\n\t\t\treturn !!(\n\t\t\t\teditor.isShapeOfType<TLBookmarkShape>(onlySelectedShape, 'bookmark') &&\n\t\t\t\tonlySelectedShape.props.url &&\n\t\t\t\tgetEmbedDefinition(onlySelectedShape.props.url) &&\n\t\t\t\t!editor.isShapeOrAncestorLocked(onlySelectedShape)\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n\n\tif (!oneEmbeddableBookmarkSelected) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"convert-to-embed\" />\n}\n\n/* ------------------- Preferences ------------------ */\n\n/** @public @react */\nexport function ToggleSnapModeItem() {\n\tconst editor = useEditor()\n\tconst isSnapMode = useValue('isSnapMode', () => editor.user.getIsSnapMode(), [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-snap-mode\" checked={isSnapMode} />\n}\n\n/** @public @react */\nexport function ToggleToolLockItem() {\n\tconst editor = useEditor()\n\tconst isToolLock = useValue('isToolLock', () => editor.getInstanceState().isToolLocked, [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-tool-lock\" checked={isToolLock} />\n}\n\n/** @public @react */\nexport function ToggleGridItem() {\n\tconst editor = useEditor()\n\tconst isGridMode = useValue('isGridMode', () => editor.getInstanceState().isGridMode, [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-grid\" checked={isGridMode} />\n}\n\n/** @public @react */\nexport function ToggleWrapModeItem() {\n\tconst editor = useEditor()\n\tconst isWrapMode = useValue('isWrapMode', () => editor.user.getIsWrapMode(), [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-wrap-mode\" checked={isWrapMode} />\n}\n\n/** @public @react */\nexport function ToggleDarkModeItem() {\n\tconst editor = useEditor()\n\tconst isDarkMode = useValue('isDarkMode', () => editor.user.getIsDarkMode(), [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-dark-mode\" checked={isDarkMode} />\n}\n\n/** @public @react */\nexport function ToggleFocusModeItem() {\n\tconst editor = useEditor()\n\tconst isFocusMode = useValue('isFocusMode', () => editor.getInstanceState().isFocusMode, [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-focus-mode\" checked={isFocusMode} />\n}\n\n/** @public @react */\nexport function ToggleEdgeScrollingItem() {\n\tconst editor = useEditor()\n\tconst edgeScrollSpeed = useValue('edgeScrollSpeed', () => editor.user.getEdgeScrollSpeed(), [\n\t\teditor,\n\t])\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem\n\t\t\tactionId=\"toggle-edge-scrolling\"\n\t\t\tchecked={edgeScrollSpeed === 1}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function ToggleReduceMotionItem() {\n\tconst editor = useEditor()\n\tconst animationSpeed = useValue('animationSpeed', () => editor.user.getAnimationSpeed(), [editor])\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem\n\t\t\tactionId=\"toggle-reduce-motion\"\n\t\t\tchecked={animationSpeed === 0}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function ToggleKeyboardShortcutsItem() {\n\tconst editor = useEditor()\n\tconst keyboardShortcuts = useValue(\n\t\t'keyboardShortcuts',\n\t\t() => editor.user.getAreKeyboardShortcutsEnabled(),\n\t\t[editor]\n\t)\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem\n\t\t\tactionId=\"toggle-keyboard-shortcuts\"\n\t\t\tchecked={keyboardShortcuts}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function ToggleDebugModeItem() {\n\tconst editor = useEditor()\n\tconst isDebugMode = useValue('isDebugMode', () => editor.getInstanceState().isDebugMode, [editor])\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-debug-mode\" checked={isDebugMode} />\n}\n\n/** @public @react */\nexport function ToggleDynamicSizeModeItem() {\n\tconst editor = useEditor()\n\tconst isDynamicResizeMode = useValue(\n\t\t'dynamic resize',\n\t\t() => editor.user.getIsDynamicResizeMode(),\n\t\t[editor]\n\t)\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem\n\t\t\tactionId=\"toggle-dynamic-size-mode\"\n\t\t\tchecked={isDynamicResizeMode}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function TogglePasteAtCursorItem() {\n\tconst editor = useEditor()\n\tconst pasteAtCursor = useValue('paste at cursor', () => editor.user.getIsPasteAtCursorMode(), [\n\t\teditor,\n\t])\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem actionId=\"toggle-paste-at-cursor\" checked={pasteAtCursor} />\n\t)\n}\n\n/* ---------------------- Print --------------------- */\n\n/** @public @react */\nexport function PrintItem() {\n\tconst editor = useEditor()\n\tconst emptyPage = useValue('emptyPage', () => editor.getCurrentPageShapeIds().size === 0, [\n\t\teditor,\n\t])\n\n\treturn <TldrawUiMenuActionItem actionId=\"print\" disabled={emptyPage} />\n}\n\n/* ---------------------- Multiplayer --------------------- */\n\n/** @public @react */\nexport function CursorChatItem() {\n\tconst editor = useEditor()\n\tconst shouldShow = useValue(\n\t\t'show cursor chat',\n\t\t() => editor.getCurrentToolId() === 'select' && !editor.getInstanceState().isCoarsePointer,\n\t\t[editor]\n\t)\n\n\tif (!shouldShow) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"open-cursor-chat\" />\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n\tTLBookmarkShape,\n\tTLEmbedShape,\n\tTLFrameShape,\n\tTLImageShape,\n\tTLPageId,\n\tuseEditor,\n\tuseValue,\n} from '@tldraw/editor'\nimport { supportsDownloadingOriginal } from '../context/actions'\nimport { useUiEvents } from '../context/events'\nimport { useToasts } from '../context/toasts'\nimport {\n\tshowMenuPaste,\n\tuseAllowGroup,\n\tuseAllowUngroup,\n\tuseAnySelectedShapesCount,\n\tuseHasLinkShapeSelected,\n\tuseOnlyFlippableShape,\n\tuseShowAutoSizeToggle,\n\tuseThreeStackableItems,\n\tuseUnlockedSelectedShapesCount,\n} from '../hooks/menu-hooks'\nimport { useGetEmbedDefinition } from '../hooks/useGetEmbedDefinition'\nimport { useReadonly } from '../hooks/useReadonly'\nimport { TldrawUiMenuActionCheckboxItem } from './primitives/menus/TldrawUiMenuActionCheckboxItem'\nimport { TldrawUiMenuActionItem } from './primitives/menus/TldrawUiMenuActionItem'\nimport { TldrawUiMenuGroup } from './primitives/menus/TldrawUiMenuGroup'\nimport { TldrawUiMenuItem } from './primitives/menus/TldrawUiMenuItem'\nimport { TldrawUiMenuSubmenu } from './primitives/menus/TldrawUiMenuSubmenu'\n\n/* -------------------- Selection ------------------- */\n\n/** @public @react */\nexport function ToggleAutoSizeMenuItem() {\n\tconst shouldDisplay = useShowAutoSizeToggle()\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"toggle-auto-size\" />\n}\n\n/** @public @react */\nexport function EditLinkMenuItem() {\n\tconst shouldDisplay = useHasLinkShapeSelected()\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"edit-link\" />\n}\n\n/** @public @react */\nexport function DuplicateMenuItem() {\n\tconst shouldDisplay = useUnlockedSelectedShapesCount(1)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"duplicate\" />\n}\n\n/** @public @react */\nexport function FlattenMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue(\n\t\t'should display flatten option',\n\t\t() => {\n\t\t\tconst selectedShapeIds = editor.getSelectedShapeIds()\n\t\t\tif (selectedShapeIds.length === 0) return false\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\tif (onlySelectedShape && editor.isShapeOfType<TLImageShape>(onlySelectedShape, 'image')) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t[editor]\n\t)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"flatten-to-image\" />\n}\n\n/** @public @react */\nexport function DownloadOriginalMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue(\n\t\t'should display download original option',\n\t\t() => {\n\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\tif (selectedShapes.length === 0) return false\n\t\t\treturn selectedShapes.some((shape) => supportsDownloadingOriginal(shape, editor))\n\t\t},\n\t\t[editor]\n\t)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"download-original\" />\n}\n\n/** @public @react */\nexport function GroupMenuItem() {\n\tconst shouldDisplay = useAllowGroup()\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"group\" />\n}\n\n/** @public @react */\nexport function UngroupMenuItem() {\n\tconst shouldDisplay = useAllowUngroup()\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"ungroup\" />\n}\n\n/** @public @react */\nexport function RemoveFrameMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue(\n\t\t'allow unframe',\n\t\t() => {\n\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\tif (selectedShapes.length === 0) return false\n\t\t\treturn selectedShapes.every((shape) => editor.isShapeOfType<TLFrameShape>(shape, 'frame'))\n\t\t},\n\t\t[editor]\n\t)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"remove-frame\" />\n}\n\n/** @public @react */\nexport function FitFrameToContentMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue(\n\t\t'allow fit frame to content',\n\t\t() => {\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\tif (!onlySelectedShape) return false\n\t\t\treturn (\n\t\t\t\teditor.isShapeOfType<TLFrameShape>(onlySelectedShape, 'frame') &&\n\t\t\t\teditor.getSortedChildIdsForParent(onlySelectedShape).length > 0\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"fit-frame-to-content\" />\n}\n\n/** @public @react */\nexport function ToggleLockMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue('selected shapes', () => editor.getSelectedShapes().length > 0, [\n\t\teditor,\n\t])\n\tif (!shouldDisplay) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"toggle-lock\" />\n}\n\n/** @public @react */\nexport function ToggleTransparentBgMenuItem() {\n\tconst editor = useEditor()\n\tconst isTransparentBg = useValue(\n\t\t'isTransparentBg',\n\t\t() => !editor.getInstanceState().exportBackground,\n\t\t[editor]\n\t)\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem\n\t\t\tactionId=\"toggle-transparent\"\n\t\t\tchecked={isTransparentBg}\n\t\t\ttoggle\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function UnlockAllMenuItem() {\n\tconst editor = useEditor()\n\tconst shouldDisplay = useValue('any shapes', () => editor.getCurrentPageShapeIds().size > 0, [\n\t\teditor,\n\t])\n\n\treturn <TldrawUiMenuActionItem actionId=\"unlock-all\" disabled={!shouldDisplay} />\n}\n\n/* ---------------------- Zoom ---------------------- */\n\n/** @public @react */\nexport function ZoomTo100MenuItem() {\n\tconst editor = useEditor()\n\tconst isZoomedTo100 = useValue('zoomed to 100', () => editor.getZoomLevel() === 1, [editor])\n\n\treturn <TldrawUiMenuActionItem actionId=\"zoom-to-100\" noClose disabled={isZoomedTo100} />\n}\n\n/** @public @react */\nexport function ZoomToFitMenuItem() {\n\tconst editor = useEditor()\n\tconst hasShapes = useValue('has shapes', () => editor.getCurrentPageShapeIds().size > 0, [editor])\n\n\treturn (\n\t\t<TldrawUiMenuActionItem\n\t\t\tactionId=\"zoom-to-fit\"\n\t\t\tdisabled={!hasShapes}\n\t\t\tdata-testid=\"minimap.zoom-menu.zoom-to-fit\"\n\t\t\tnoClose\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function ZoomToSelectionMenuItem() {\n\tconst editor = useEditor()\n\tconst hasSelected = useValue('has shapes', () => editor.getSelectedShapeIds().length > 0, [\n\t\teditor,\n\t])\n\n\treturn (\n\t\t<TldrawUiMenuActionItem\n\t\t\tactionId=\"zoom-to-selection\"\n\t\t\tdisabled={!hasSelected}\n\t\t\tdata-testid=\"minimap.zoom-menu.zoom-to-selection\"\n\t\t\tnoClose\n\t\t/>\n\t)\n}\n\n/* -------------------- Clipboard ------------------- */\n\n/** @public @react */\nexport function ClipboardMenuGroup() {\n\treturn (\n\t\t<TldrawUiMenuGroup id=\"clipboard\">\n\t\t\t<CutMenuItem />\n\t\t\t<CopyMenuItem />\n\t\t\t<PasteMenuItem />\n\t\t\t<DuplicateMenuItem />\n\t\t\t<DeleteMenuItem />\n\t\t</TldrawUiMenuGroup>\n\t)\n}\n\n/** @public @react */\nexport function CopyAsMenuGroup() {\n\tconst editor = useEditor()\n\tconst atLeastOneShapeOnPage = useValue(\n\t\t'atLeastOneShapeOnPage',\n\t\t() => editor.getCurrentPageShapeIds().size > 0,\n\t\t[editor]\n\t)\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu\n\t\t\tid=\"copy-as\"\n\t\t\tlabel=\"context-menu.copy-as\"\n\t\t\tsize=\"small\"\n\t\t\tdisabled={!atLeastOneShapeOnPage}\n\t\t>\n\t\t\t<TldrawUiMenuGroup id=\"copy-as-group\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"copy-as-svg\" />\n\t\t\t\t{Boolean(window.navigator.clipboard?.write) && (\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"copy-as-png\" />\n\t\t\t\t)}\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup id=\"copy-as-bg\">\n\t\t\t\t<ToggleTransparentBgMenuItem />\n\t\t\t</TldrawUiMenuGroup>\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\n/** @public @react */\nexport function CutMenuItem() {\n\tconst shouldDisplay = useUnlockedSelectedShapesCount(1)\n\n\treturn <TldrawUiMenuActionItem actionId=\"cut\" disabled={!shouldDisplay} />\n}\n\n/** @public @react */\nexport function CopyMenuItem() {\n\tconst shouldDisplay = useAnySelectedShapesCount(1)\n\n\treturn <TldrawUiMenuActionItem actionId=\"copy\" disabled={!shouldDisplay} />\n}\n\n/** @public @react */\nexport function PasteMenuItem() {\n\tconst shouldDisplay = showMenuPaste\n\n\treturn <TldrawUiMenuActionItem actionId=\"paste\" disabled={!shouldDisplay} />\n}\n\n/* ------------------- Conversions ------------------ */\n\n/** @public @react */\nexport function ConversionsMenuGroup() {\n\tconst editor = useEditor()\n\tconst atLeastOneShapeOnPage = useValue(\n\t\t'atLeastOneShapeOnPage',\n\t\t() => editor.getCurrentPageShapeIds().size > 0,\n\t\t[editor]\n\t)\n\n\tif (!atLeastOneShapeOnPage) return null\n\n\treturn (\n\t\t<TldrawUiMenuGroup id=\"conversions\">\n\t\t\t<CopyAsMenuGroup />\n\t\t\t<TldrawUiMenuSubmenu id=\"export-as\" label=\"context-menu.export-as\" size=\"small\">\n\t\t\t\t<TldrawUiMenuGroup id=\"export-as-group\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"export-as-svg\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"export-as-png\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t\t<TldrawUiMenuGroup id=\"export-as-bg\">\n\t\t\t\t\t<ToggleTransparentBgMenuItem />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t</TldrawUiMenuSubmenu>\n\t\t\t<DownloadOriginalMenuItem />\n\t\t</TldrawUiMenuGroup>\n\t)\n}\n\n/* ------------------ Set Selection ----------------- */\n/** @public @react */\nexport function SelectAllMenuItem() {\n\tconst editor = useEditor()\n\tconst atLeastOneShapeOnPage = useValue(\n\t\t'atLeastOneShapeOnPage',\n\t\t() => editor.getCurrentPageShapeIds().size > 0,\n\t\t[editor]\n\t)\n\n\treturn <TldrawUiMenuActionItem actionId=\"select-all\" disabled={!atLeastOneShapeOnPage} />\n}\n\n/* ------------------ Delete Group ------------------ */\n\n/** @public @react */\nexport function DeleteMenuItem() {\n\tconst oneSelected = useUnlockedSelectedShapesCount(1)\n\n\treturn <TldrawUiMenuActionItem actionId=\"delete\" disabled={!oneSelected} />\n}\n\n/* --------------------- Modify --------------------- */\n\n/** @public @react */\nexport function EditMenuSubmenu() {\n\tconst isReadonlyMode = useReadonly()\n\tif (!useAnySelectedShapesCount(1)) return null\n\tif (isReadonlyMode) return null\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu id=\"edit\" label=\"context-menu.edit\" size=\"small\">\n\t\t\t<GroupMenuItem />\n\t\t\t<UngroupMenuItem />\n\t\t\t<FlattenMenuItem />\n\t\t\t<EditLinkMenuItem />\n\t\t\t<FitFrameToContentMenuItem />\n\t\t\t<RemoveFrameMenuItem />\n\t\t\t<ConvertToEmbedMenuItem />\n\t\t\t<ConvertToBookmarkMenuItem />\n\t\t\t<ToggleAutoSizeMenuItem />\n\t\t\t<ToggleLockMenuItem />\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\n/** @public @react */\nexport function ArrangeMenuSubmenu() {\n\tconst twoSelected = useUnlockedSelectedShapesCount(2)\n\tconst onlyFlippableShapeSelected = useOnlyFlippableShape()\n\tconst isReadonlyMode = useReadonly()\n\n\tif (isReadonlyMode) return null\n\tif (!(twoSelected || onlyFlippableShapeSelected)) return null\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu id=\"arrange\" label=\"context-menu.arrange\" size=\"small\">\n\t\t\t{twoSelected && (\n\t\t\t\t<TldrawUiMenuGroup id=\"align\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-left\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-center-horizontal\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-right\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-top\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-center-vertical\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-bottom\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t)}\n\t\t\t<DistributeMenuGroup />\n\t\t\t{twoSelected && (\n\t\t\t\t<TldrawUiMenuGroup id=\"stretch\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"stretch-horizontal\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"stretch-vertical\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t)}\n\t\t\t{(twoSelected || onlyFlippableShapeSelected) && (\n\t\t\t\t<TldrawUiMenuGroup id=\"flip\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"flip-horizontal\" />\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"flip-vertical\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t)}\n\t\t\t<OrderMenuGroup />\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\nfunction DistributeMenuGroup() {\n\tconst threeSelected = useUnlockedSelectedShapesCount(3)\n\tif (!threeSelected) return null\n\n\treturn (\n\t\t<TldrawUiMenuGroup id=\"distribute\">\n\t\t\t<TldrawUiMenuActionItem actionId=\"distribute-horizontal\" />\n\t\t\t<TldrawUiMenuActionItem actionId=\"distribute-vertical\" />\n\t\t</TldrawUiMenuGroup>\n\t)\n}\n\nfunction OrderMenuGroup() {\n\tconst twoSelected = useUnlockedSelectedShapesCount(2)\n\tconst threeStackableItems = useThreeStackableItems()\n\tif (!twoSelected) return null\n\n\treturn (\n\t\t<TldrawUiMenuGroup id=\"order\">\n\t\t\t<TldrawUiMenuActionItem actionId=\"pack\" />\n\t\t\t{threeStackableItems && <TldrawUiMenuActionItem actionId=\"stack-horizontal\" />}\n\t\t\t{threeStackableItems && <TldrawUiMenuActionItem actionId=\"stack-vertical\" />}\n\t\t</TldrawUiMenuGroup>\n\t)\n}\n\n/** @public @react */\nexport function ReorderMenuSubmenu() {\n\tconst isReadonlyMode = useReadonly()\n\tconst oneSelected = useUnlockedSelectedShapesCount(1)\n\tif (isReadonlyMode) return null\n\tif (!oneSelected) return null\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu id=\"reorder\" label=\"context-menu.reorder\" size=\"small\">\n\t\t\t<TldrawUiMenuGroup id=\"reorder\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"bring-to-front\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"bring-forward\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"send-backward\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"send-to-back\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\n/** @public @react */\nexport function MoveToPageMenu() {\n\tconst editor = useEditor()\n\tconst pages = useValue('pages', () => editor.getPages(), [editor])\n\tconst currentPageId = useValue('current page id', () => editor.getCurrentPageId(), [editor])\n\tconst { addToast } = useToasts()\n\tconst trackEvent = useUiEvents()\n\tconst isReadonlyMode = useReadonly()\n\tconst oneSelected = useUnlockedSelectedShapesCount(1)\n\n\tif (!oneSelected) return null\n\tif (isReadonlyMode) return null\n\n\treturn (\n\t\t<TldrawUiMenuSubmenu id=\"move-to-page\" label=\"context-menu.move-to-page\" size=\"small\">\n\t\t\t<TldrawUiMenuGroup id=\"pages\">\n\t\t\t\t{pages.map((page) => (\n\t\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\t\tid={page.id}\n\t\t\t\t\t\tkey={page.id}\n\t\t\t\t\t\tdisabled={currentPageId === page.id}\n\t\t\t\t\t\tlabel={page.name.length > 30 ? `${page.name.slice(0, 30)}\u2026` : page.name}\n\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\teditor.markHistoryStoppingPoint('move_shapes_to_page')\n\t\t\t\t\t\t\teditor.moveShapesToPage(editor.getSelectedShapeIds(), page.id as TLPageId)\n\n\t\t\t\t\t\t\tconst toPage = editor.getPage(page.id)\n\n\t\t\t\t\t\t\tif (toPage) {\n\t\t\t\t\t\t\t\taddToast({\n\t\t\t\t\t\t\t\t\ttitle: 'Changed Page',\n\t\t\t\t\t\t\t\t\tdescription: `Moved to ${toPage.name}.`,\n\t\t\t\t\t\t\t\t\tactions: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tlabel: 'Go Back',\n\t\t\t\t\t\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\t\t\t\t\t\teditor.markHistoryStoppingPoint('change-page')\n\t\t\t\t\t\t\t\t\t\t\t\teditor.setCurrentPage(currentPageId)\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\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\ttrackEvent('move-to-page', { source: 'context-menu' })\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup id=\"new-page\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"move-to-new-page\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t</TldrawUiMenuSubmenu>\n\t)\n}\n\n/** @public @react */\nexport function ConvertToBookmarkMenuItem() {\n\tconst editor = useEditor()\n\n\tconst oneEmbedSelected = useValue(\n\t\t'oneEmbedSelected',\n\t\t() => {\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\tif (!onlySelectedShape) return false\n\t\t\treturn !!(\n\t\t\t\teditor.isShapeOfType<TLEmbedShape>(onlySelectedShape, 'embed') &&\n\t\t\t\tonlySelectedShape.props.url &&\n\t\t\t\t!editor.isShapeOrAncestorLocked(onlySelectedShape)\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n\n\tif (!oneEmbedSelected) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"convert-to-bookmark\" />\n}\n\n/** @public @react */\nexport function ConvertToEmbedMenuItem() {\n\tconst editor = useEditor()\n\tconst getEmbedDefinition = useGetEmbedDefinition()\n\n\tconst oneEmbeddableBookmarkSelected = useValue(\n\t\t'oneEmbeddableBookmarkSelected',\n\t\t() => {\n\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\t\t\tif (!onlySelectedShape) return false\n\t\t\treturn !!(\n\t\t\t\teditor.isShapeOfType<TLBookmarkShape>(onlySelectedShape, 'bookmark') &&\n\t\t\t\tonlySelectedShape.props.url &&\n\t\t\t\tgetEmbedDefinition(onlySelectedShape.props.url) &&\n\t\t\t\t!editor.isShapeOrAncestorLocked(onlySelectedShape)\n\t\t\t)\n\t\t},\n\t\t[editor]\n\t)\n\n\tif (!oneEmbeddableBookmarkSelected) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"convert-to-embed\" />\n}\n\n/* ------------------- Preferences ------------------ */\n\n/** @public @react */\nexport function ToggleSnapModeItem() {\n\tconst editor = useEditor()\n\tconst isSnapMode = useValue('isSnapMode', () => editor.user.getIsSnapMode(), [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-snap-mode\" checked={isSnapMode} />\n}\n\n/** @public @react */\nexport function ToggleToolLockItem() {\n\tconst editor = useEditor()\n\tconst isToolLock = useValue('isToolLock', () => editor.getInstanceState().isToolLocked, [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-tool-lock\" checked={isToolLock} />\n}\n\n/** @public @react */\nexport function ToggleGridItem() {\n\tconst editor = useEditor()\n\tconst isGridMode = useValue('isGridMode', () => editor.getInstanceState().isGridMode, [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-grid\" checked={isGridMode} />\n}\n\n/** @public @react */\nexport function ToggleWrapModeItem() {\n\tconst editor = useEditor()\n\tconst isWrapMode = useValue('isWrapMode', () => editor.user.getIsWrapMode(), [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-wrap-mode\" checked={isWrapMode} />\n}\n\n/** @public @react */\nexport function ToggleDarkModeItem() {\n\tconst editor = useEditor()\n\tconst isDarkMode = useValue('isDarkMode', () => editor.user.getIsDarkMode(), [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-dark-mode\" checked={isDarkMode} />\n}\n\n/** @public @react */\nexport function ToggleFocusModeItem() {\n\tconst editor = useEditor()\n\tconst isFocusMode = useValue('isFocusMode', () => editor.getInstanceState().isFocusMode, [editor])\n\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-focus-mode\" checked={isFocusMode} />\n}\n\n/** @public @react */\nexport function ToggleEdgeScrollingItem() {\n\tconst editor = useEditor()\n\tconst edgeScrollSpeed = useValue('edgeScrollSpeed', () => editor.user.getEdgeScrollSpeed(), [\n\t\teditor,\n\t])\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem\n\t\t\tactionId=\"toggle-edge-scrolling\"\n\t\t\tchecked={edgeScrollSpeed === 1}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function ToggleReduceMotionItem() {\n\tconst editor = useEditor()\n\tconst animationSpeed = useValue('animationSpeed', () => editor.user.getAnimationSpeed(), [editor])\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem\n\t\t\tactionId=\"toggle-reduce-motion\"\n\t\t\tchecked={animationSpeed === 0}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function ToggleDebugModeItem() {\n\tconst editor = useEditor()\n\tconst isDebugMode = useValue('isDebugMode', () => editor.getInstanceState().isDebugMode, [editor])\n\treturn <TldrawUiMenuActionCheckboxItem actionId=\"toggle-debug-mode\" checked={isDebugMode} />\n}\n\n/** @public @react */\nexport function ToggleDynamicSizeModeItem() {\n\tconst editor = useEditor()\n\tconst isDynamicResizeMode = useValue(\n\t\t'dynamic resize',\n\t\t() => editor.user.getIsDynamicResizeMode(),\n\t\t[editor]\n\t)\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem\n\t\t\tactionId=\"toggle-dynamic-size-mode\"\n\t\t\tchecked={isDynamicResizeMode}\n\t\t/>\n\t)\n}\n\n/** @public @react */\nexport function TogglePasteAtCursorItem() {\n\tconst editor = useEditor()\n\tconst pasteAtCursor = useValue('paste at cursor', () => editor.user.getIsPasteAtCursorMode(), [\n\t\teditor,\n\t])\n\n\treturn (\n\t\t<TldrawUiMenuActionCheckboxItem actionId=\"toggle-paste-at-cursor\" checked={pasteAtCursor} />\n\t)\n}\n\n/* ---------------------- Print --------------------- */\n\n/** @public @react */\nexport function PrintItem() {\n\tconst editor = useEditor()\n\tconst emptyPage = useValue('emptyPage', () => editor.getCurrentPageShapeIds().size === 0, [\n\t\teditor,\n\t])\n\n\treturn <TldrawUiMenuActionItem actionId=\"print\" disabled={emptyPage} />\n}\n\n/* ---------------------- Multiplayer --------------------- */\n\n/** @public @react */\nexport function CursorChatItem() {\n\tconst editor = useEditor()\n\tconst shouldShow = useValue(\n\t\t'show cursor chat',\n\t\t() => editor.getCurrentToolId() === 'select' && !editor.getInstanceState().isCoarsePointer,\n\t\t[editor]\n\t)\n\n\tif (!shouldShow) return null\n\n\treturn <TldrawUiMenuActionItem actionId=\"open-cursor-chat\" />\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -68,7 +68,7 @@ function TldrawUiDialogCloseButton() {
68
68
  ) }) });
69
69
  }
70
70
  function TldrawUiDialogBody({ className, children, style }) {
71
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_classnames.default)("tlui-dialog__body", className), style, tabIndex: 0, children });
71
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_classnames.default)("tlui-dialog__body", className), style, children });
72
72
  }
73
73
  function TldrawUiDialogFooter({ className, children }) {
74
74
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: (0, import_classnames.default)("tlui-dialog__footer", className), children });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/primitives/TldrawUiDialog.tsx"],
4
- "sourcesContent": ["import classNames from 'classnames'\nimport { Dialog as _Dialog } from 'radix-ui'\nimport { CSSProperties, ReactNode } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiButton } from './Button/TldrawUiButton'\nimport { TldrawUiButtonIcon } from './Button/TldrawUiButtonIcon'\n\n/** @public */\nexport interface TLUiDialogHeaderProps {\n\tclassName?: string\n\tchildren: ReactNode\n}\n\n/** @public @react */\nexport function TldrawUiDialogHeader({ className, children }: TLUiDialogHeaderProps) {\n\treturn <div className={classNames('tlui-dialog__header', className)}>{children}</div>\n}\n\n/** @public */\nexport interface TLUiDialogTitleProps {\n\tclassName?: string\n\tchildren: ReactNode\n\tstyle?: CSSProperties\n}\n\n/** @public @react */\nexport function TldrawUiDialogTitle({ className, children, style }: TLUiDialogTitleProps) {\n\treturn (\n\t\t<_Dialog.Title\n\t\t\tdir=\"ltr\"\n\t\t\tclassName={classNames('tlui-dialog__header__title', className)}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{children}\n\t\t</_Dialog.Title>\n\t)\n}\n\n/** @public @react */\nexport function TldrawUiDialogCloseButton() {\n\tconst msg = useTranslation()\n\n\treturn (\n\t\t<div className=\"tlui-dialog__header__close\">\n\t\t\t<_Dialog.DialogClose data-testid=\"dialog.close\" dir=\"ltr\" asChild>\n\t\t\t\t<TldrawUiButton\n\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\taria-label={msg('ui.close')}\n\t\t\t\t\tonTouchEnd={(e) => (e.target as HTMLButtonElement).click()}\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonIcon small icon=\"cross-2\" />\n\t\t\t\t</TldrawUiButton>\n\t\t\t</_Dialog.DialogClose>\n\t\t</div>\n\t)\n}\n\n/** @public */\nexport interface TLUiDialogBodyProps {\n\tclassName?: string\n\tchildren: ReactNode\n\tstyle?: CSSProperties\n}\n\n/** @public @react */\nexport function TldrawUiDialogBody({ className, children, style }: TLUiDialogBodyProps) {\n\treturn (\n\t\t<div className={classNames('tlui-dialog__body', className)} style={style} tabIndex={0}>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\n/** @public */\nexport interface TLUiDialogFooterProps {\n\tclassName?: string\n\tchildren?: ReactNode\n}\n\n/** @public @react */\nexport function TldrawUiDialogFooter({ className, children }: TLUiDialogFooterProps) {\n\treturn <div className={classNames('tlui-dialog__footer', className)}>{children}</div>\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeQ;AAfR,wBAAuB;AACvB,sBAAkC;AAElC,4BAA+B;AAC/B,4BAA+B;AAC/B,gCAAmC;AAS5B,SAAS,qBAAqB,EAAE,WAAW,SAAS,GAA0B;AACpF,SAAO,4CAAC,SAAI,eAAW,kBAAAA,SAAW,uBAAuB,SAAS,GAAI,UAAS;AAChF;AAUO,SAAS,oBAAoB,EAAE,WAAW,UAAU,MAAM,GAAyB;AACzF,SACC;AAAA,IAAC,gBAAAC,OAAQ;AAAA,IAAR;AAAA,MACA,KAAI;AAAA,MACJ,eAAW,kBAAAD,SAAW,8BAA8B,SAAS;AAAA,MAC7D;AAAA,MAEC;AAAA;AAAA,EACF;AAEF;AAGO,SAAS,4BAA4B;AAC3C,QAAM,UAAM,sCAAe;AAE3B,SACC,4CAAC,SAAI,WAAU,8BACd,sDAAC,gBAAAC,OAAQ,aAAR,EAAoB,eAAY,gBAAe,KAAI,OAAM,SAAO,MAChE;AAAA,IAAC;AAAA;AAAA,MACA,MAAK;AAAA,MACL,cAAY,IAAI,UAAU;AAAA,MAC1B,YAAY,CAAC,MAAO,EAAE,OAA6B,MAAM;AAAA,MAEzD,sDAAC,gDAAmB,OAAK,MAAC,MAAK,WAAU;AAAA;AAAA,EAC1C,GACD,GACD;AAEF;AAUO,SAAS,mBAAmB,EAAE,WAAW,UAAU,MAAM,GAAwB;AACvF,SACC,4CAAC,SAAI,eAAW,kBAAAD,SAAW,qBAAqB,SAAS,GAAG,OAAc,UAAU,GAClF,UACF;AAEF;AASO,SAAS,qBAAqB,EAAE,WAAW,SAAS,GAA0B;AACpF,SAAO,4CAAC,SAAI,eAAW,kBAAAA,SAAW,uBAAuB,SAAS,GAAI,UAAS;AAChF;",
4
+ "sourcesContent": ["import classNames from 'classnames'\nimport { Dialog as _Dialog } from 'radix-ui'\nimport { CSSProperties, ReactNode } from 'react'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiButton } from './Button/TldrawUiButton'\nimport { TldrawUiButtonIcon } from './Button/TldrawUiButtonIcon'\n\n/** @public */\nexport interface TLUiDialogHeaderProps {\n\tclassName?: string\n\tchildren: ReactNode\n}\n\n/** @public @react */\nexport function TldrawUiDialogHeader({ className, children }: TLUiDialogHeaderProps) {\n\treturn <div className={classNames('tlui-dialog__header', className)}>{children}</div>\n}\n\n/** @public */\nexport interface TLUiDialogTitleProps {\n\tclassName?: string\n\tchildren: ReactNode\n\tstyle?: CSSProperties\n}\n\n/** @public @react */\nexport function TldrawUiDialogTitle({ className, children, style }: TLUiDialogTitleProps) {\n\treturn (\n\t\t<_Dialog.Title\n\t\t\tdir=\"ltr\"\n\t\t\tclassName={classNames('tlui-dialog__header__title', className)}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{children}\n\t\t</_Dialog.Title>\n\t)\n}\n\n/** @public @react */\nexport function TldrawUiDialogCloseButton() {\n\tconst msg = useTranslation()\n\n\treturn (\n\t\t<div className=\"tlui-dialog__header__close\">\n\t\t\t<_Dialog.DialogClose data-testid=\"dialog.close\" dir=\"ltr\" asChild>\n\t\t\t\t<TldrawUiButton\n\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\taria-label={msg('ui.close')}\n\t\t\t\t\tonTouchEnd={(e) => (e.target as HTMLButtonElement).click()}\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonIcon small icon=\"cross-2\" />\n\t\t\t\t</TldrawUiButton>\n\t\t\t</_Dialog.DialogClose>\n\t\t</div>\n\t)\n}\n\n/** @public */\nexport interface TLUiDialogBodyProps {\n\tclassName?: string\n\tchildren: ReactNode\n\tstyle?: CSSProperties\n}\n\n/** @public @react */\nexport function TldrawUiDialogBody({ className, children, style }: TLUiDialogBodyProps) {\n\treturn (\n\t\t<div className={classNames('tlui-dialog__body', className)} style={style}>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\n/** @public */\nexport interface TLUiDialogFooterProps {\n\tclassName?: string\n\tchildren?: ReactNode\n}\n\n/** @public @react */\nexport function TldrawUiDialogFooter({ className, children }: TLUiDialogFooterProps) {\n\treturn <div className={classNames('tlui-dialog__footer', className)}>{children}</div>\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeQ;AAfR,wBAAuB;AACvB,sBAAkC;AAElC,4BAA+B;AAC/B,4BAA+B;AAC/B,gCAAmC;AAS5B,SAAS,qBAAqB,EAAE,WAAW,SAAS,GAA0B;AACpF,SAAO,4CAAC,SAAI,eAAW,kBAAAA,SAAW,uBAAuB,SAAS,GAAI,UAAS;AAChF;AAUO,SAAS,oBAAoB,EAAE,WAAW,UAAU,MAAM,GAAyB;AACzF,SACC;AAAA,IAAC,gBAAAC,OAAQ;AAAA,IAAR;AAAA,MACA,KAAI;AAAA,MACJ,eAAW,kBAAAD,SAAW,8BAA8B,SAAS;AAAA,MAC7D;AAAA,MAEC;AAAA;AAAA,EACF;AAEF;AAGO,SAAS,4BAA4B;AAC3C,QAAM,UAAM,sCAAe;AAE3B,SACC,4CAAC,SAAI,WAAU,8BACd,sDAAC,gBAAAC,OAAQ,aAAR,EAAoB,eAAY,gBAAe,KAAI,OAAM,SAAO,MAChE;AAAA,IAAC;AAAA;AAAA,MACA,MAAK;AAAA,MACL,cAAY,IAAI,UAAU;AAAA,MAC1B,YAAY,CAAC,MAAO,EAAE,OAA6B,MAAM;AAAA,MAEzD,sDAAC,gDAAmB,OAAK,MAAC,MAAK,WAAU;AAAA;AAAA,EAC1C,GACD,GACD;AAEF;AAUO,SAAS,mBAAmB,EAAE,WAAW,UAAU,MAAM,GAAwB;AACvF,SACC,4CAAC,SAAI,eAAW,kBAAAD,SAAW,qBAAqB,SAAS,GAAG,OAC1D,UACF;AAEF;AASO,SAAS,qBAAqB,EAAE,WAAW,SAAS,GAA0B;AACpF,SAAO,4CAAC,SAAI,eAAW,kBAAAA,SAAW,uBAAuB,SAAS,GAAI,UAAS;AAChF;",
6
6
  "names": ["classNames", "_Dialog"]
7
7
  }
@@ -43,8 +43,7 @@ const TldrawUiSlider = import_react.default.forwardRef(function Slider({
43
43
  value,
44
44
  label,
45
45
  onValueChange,
46
- ["data-testid"]: testId,
47
- ariaValueModifier = 1
46
+ ["data-testid"]: testId
48
47
  }, ref) {
49
48
  const msg = (0, import_useTranslation.useTranslation)();
50
49
  const [tabIndex, setTabIndex] = (0, import_react.useState)(-1);
@@ -85,9 +84,7 @@ const TldrawUiSlider = import_react.default.forwardRef(function Slider({
85
84
  value !== null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
86
85
  import_radix_ui.Slider.Thumb,
87
86
  {
88
- "aria-valuemin": (min ?? 0) * ariaValueModifier,
89
- "aria-valuenow": value * ariaValueModifier,
90
- "aria-valuemax": steps * ariaValueModifier,
87
+ "aria-label": msg("style-panel.opacity"),
91
88
  className: "tlui-slider__thumb",
92
89
  dir: "ltr",
93
90
  ref,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/primitives/TldrawUiSlider.tsx"],
4
- "sourcesContent": ["import { Slider as _Slider } from 'radix-ui'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { TLUiTranslationKey } from '../../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\n\n/** @public */\nexport interface TLUiSliderProps {\n\tmin?: number\n\tsteps: number\n\tvalue: number | null\n\tlabel: string\n\ttitle: string\n\tonValueChange(value: number): void\n\tonHistoryMark(id: string): void\n\t'data-testid'?: string\n\tariaValueModifier?: number\n}\n\n/** @public @react */\nexport const TldrawUiSlider = React.forwardRef<HTMLDivElement, TLUiSliderProps>(function Slider(\n\t{\n\t\tonHistoryMark,\n\t\ttitle,\n\t\tmin,\n\t\tsteps,\n\t\tvalue,\n\t\tlabel,\n\t\tonValueChange,\n\t\t['data-testid']: testId,\n\t\tariaValueModifier = 1,\n\t}: TLUiSliderProps,\n\tref\n) {\n\tconst msg = useTranslation()\n\n\t// XXX: Radix starts out our slider with a tabIndex of 0\n\t// This causes some tab focusing issues, most prevelant in MobileStylePanel,\n\t// where it grabs the focus. This works around it.\n\tconst [tabIndex, setTabIndex] = useState(-1)\n\tuseEffect(() => {\n\t\tsetTabIndex(0)\n\t}, [])\n\n\tconst handleValueChange = useCallback(\n\t\t(value: number[]) => {\n\t\t\tonValueChange(value[0])\n\t\t},\n\t\t[onValueChange]\n\t)\n\n\tconst handlePointerDown = useCallback(() => {\n\t\tonHistoryMark('click slider')\n\t}, [onHistoryMark])\n\n\t// N.B. Annoying. For a11y purposes, we need Tab to work.\n\t// For some reason, Radix has some custom behavior here\n\t// that interferes with tabbing past the slider and then\n\t// you get stuck in the slider.\n\tconst handleKeyEvent = useCallback((event: React.KeyboardEvent) => {\n\t\tif (event.key === 'Tab') {\n\t\t\tevent.stopPropagation()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<div className=\"tlui-slider__container\">\n\t\t\t<_Slider.Root\n\t\t\t\tdata-testid={testId}\n\t\t\t\tclassName=\"tlui-slider\"\n\t\t\t\tdir=\"ltr\"\n\t\t\t\tmin={min ?? 0}\n\t\t\t\tmax={steps}\n\t\t\t\tstep={1}\n\t\t\t\tvalue={value !== null ? [value] : undefined}\n\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tonKeyDownCapture={handleKeyEvent}\n\t\t\t\tonKeyUpCapture={handleKeyEvent}\n\t\t\t\ttitle={title + ' \u2014 ' + msg(label as TLUiTranslationKey)}\n\t\t\t>\n\t\t\t\t<_Slider.Track className=\"tlui-slider__track\" dir=\"ltr\">\n\t\t\t\t\t{value !== null && <_Slider.Range className=\"tlui-slider__range\" dir=\"ltr\" />}\n\t\t\t\t</_Slider.Track>\n\t\t\t\t{value !== null && (\n\t\t\t\t\t<_Slider.Thumb\n\t\t\t\t\t\taria-valuemin={(min ?? 0) * ariaValueModifier}\n\t\t\t\t\t\taria-valuenow={value * ariaValueModifier}\n\t\t\t\t\t\taria-valuemax={steps * ariaValueModifier}\n\t\t\t\t\t\tclassName=\"tlui-slider__thumb\"\n\t\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttabIndex={tabIndex}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</_Slider.Root>\n\t\t</div>\n\t)\n})\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkEG;AAlEH,sBAAkC;AAClC,mBAAwD;AAExD,4BAA+B;AAgBxB,MAAM,iBAAiB,aAAAA,QAAM,WAA4C,SAAS,OACxF;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,CAAC,aAAa,GAAG;AAAA,EACjB,oBAAoB;AACrB,GACA,KACC;AACD,QAAM,UAAM,sCAAe;AAK3B,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,EAAE;AAC3C,8BAAU,MAAM;AACf,gBAAY,CAAC;AAAA,EACd,GAAG,CAAC,CAAC;AAEL,QAAM,wBAAoB;AAAA,IACzB,CAACC,WAAoB;AACpB,oBAAcA,OAAM,CAAC,CAAC;AAAA,IACvB;AAAA,IACA,CAAC,aAAa;AAAA,EACf;AAEA,QAAM,wBAAoB,0BAAY,MAAM;AAC3C,kBAAc,cAAc;AAAA,EAC7B,GAAG,CAAC,aAAa,CAAC;AAMlB,QAAM,qBAAiB,0BAAY,CAAC,UAA+B;AAClE,QAAI,MAAM,QAAQ,OAAO;AACxB,YAAM,gBAAgB;AAAA,IACvB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,SACC,4CAAC,SAAI,WAAU,0BACd;AAAA,IAAC,gBAAAC,OAAQ;AAAA,IAAR;AAAA,MACA,eAAa;AAAA,MACb,WAAU;AAAA,MACV,KAAI;AAAA,MACJ,KAAK,OAAO;AAAA,MACZ,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO,UAAU,OAAO,CAAC,KAAK,IAAI;AAAA,MAClC,eAAe;AAAA,MACf,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,OAAO,QAAQ,aAAQ,IAAI,KAA2B;AAAA,MAEtD;AAAA,oDAAC,gBAAAA,OAAQ,OAAR,EAAc,WAAU,sBAAqB,KAAI,OAChD,oBAAU,QAAQ,4CAAC,gBAAAA,OAAQ,OAAR,EAAc,WAAU,sBAAqB,KAAI,OAAM,GAC5E;AAAA,QACC,UAAU,QACV;AAAA,UAAC,gBAAAA,OAAQ;AAAA,UAAR;AAAA,YACA,kBAAgB,OAAO,KAAK;AAAA,YAC5B,iBAAe,QAAQ;AAAA,YACvB,iBAAe,QAAQ;AAAA,YACvB,WAAU;AAAA,YACV,KAAI;AAAA,YACJ;AAAA,YACA;AAAA;AAAA,QACD;AAAA;AAAA;AAAA,EAEF,GACD;AAEF,CAAC;",
4
+ "sourcesContent": ["import { Slider as _Slider } from 'radix-ui'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { TLUiTranslationKey } from '../../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\n\n/** @public */\nexport interface TLUiSliderProps {\n\tmin?: number\n\tsteps: number\n\tvalue: number | null\n\tlabel: string\n\ttitle: string\n\tonValueChange(value: number): void\n\tonHistoryMark(id: string): void\n\t'data-testid'?: string\n}\n\n/** @public @react */\nexport const TldrawUiSlider = React.forwardRef<HTMLDivElement, TLUiSliderProps>(function Slider(\n\t{\n\t\tonHistoryMark,\n\t\ttitle,\n\t\tmin,\n\t\tsteps,\n\t\tvalue,\n\t\tlabel,\n\t\tonValueChange,\n\t\t['data-testid']: testId,\n\t}: TLUiSliderProps,\n\tref\n) {\n\tconst msg = useTranslation()\n\n\t// XXX: Radix starts out our slider with a tabIndex of 0\n\t// This causes some tab focusing issues, most prevelant in MobileStylePanel,\n\t// where it grabs the focus. This works around it.\n\tconst [tabIndex, setTabIndex] = useState(-1)\n\tuseEffect(() => {\n\t\tsetTabIndex(0)\n\t}, [])\n\n\tconst handleValueChange = useCallback(\n\t\t(value: number[]) => {\n\t\t\tonValueChange(value[0])\n\t\t},\n\t\t[onValueChange]\n\t)\n\n\tconst handlePointerDown = useCallback(() => {\n\t\tonHistoryMark('click slider')\n\t}, [onHistoryMark])\n\n\t// N.B. Annoying. For a11y purposes, we need Tab to work.\n\t// For some reason, Radix has some custom behavior here\n\t// that interferes with tabbing past the slider and then\n\t// you get stuck in the slider.\n\tconst handleKeyEvent = useCallback((event: React.KeyboardEvent) => {\n\t\tif (event.key === 'Tab') {\n\t\t\tevent.stopPropagation()\n\t\t}\n\t}, [])\n\n\treturn (\n\t\t<div className=\"tlui-slider__container\">\n\t\t\t<_Slider.Root\n\t\t\t\tdata-testid={testId}\n\t\t\t\tclassName=\"tlui-slider\"\n\t\t\t\tdir=\"ltr\"\n\t\t\t\tmin={min ?? 0}\n\t\t\t\tmax={steps}\n\t\t\t\tstep={1}\n\t\t\t\tvalue={value !== null ? [value] : undefined}\n\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tonKeyDownCapture={handleKeyEvent}\n\t\t\t\tonKeyUpCapture={handleKeyEvent}\n\t\t\t\ttitle={title + ' \u2014 ' + msg(label as TLUiTranslationKey)}\n\t\t\t>\n\t\t\t\t<_Slider.Track className=\"tlui-slider__track\" dir=\"ltr\">\n\t\t\t\t\t{value !== null && <_Slider.Range className=\"tlui-slider__range\" dir=\"ltr\" />}\n\t\t\t\t</_Slider.Track>\n\t\t\t\t{value !== null && (\n\t\t\t\t\t<_Slider.Thumb\n\t\t\t\t\t\taria-label={msg('style-panel.opacity')}\n\t\t\t\t\t\tclassName=\"tlui-slider__thumb\"\n\t\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttabIndex={tabIndex}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</_Slider.Root>\n\t\t</div>\n\t)\n})\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgEG;AAhEH,sBAAkC;AAClC,mBAAwD;AAExD,4BAA+B;AAexB,MAAM,iBAAiB,aAAAA,QAAM,WAA4C,SAAS,OACxF;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,CAAC,aAAa,GAAG;AAClB,GACA,KACC;AACD,QAAM,UAAM,sCAAe;AAK3B,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,EAAE;AAC3C,8BAAU,MAAM;AACf,gBAAY,CAAC;AAAA,EACd,GAAG,CAAC,CAAC;AAEL,QAAM,wBAAoB;AAAA,IACzB,CAACC,WAAoB;AACpB,oBAAcA,OAAM,CAAC,CAAC;AAAA,IACvB;AAAA,IACA,CAAC,aAAa;AAAA,EACf;AAEA,QAAM,wBAAoB,0BAAY,MAAM;AAC3C,kBAAc,cAAc;AAAA,EAC7B,GAAG,CAAC,aAAa,CAAC;AAMlB,QAAM,qBAAiB,0BAAY,CAAC,UAA+B;AAClE,QAAI,MAAM,QAAQ,OAAO;AACxB,YAAM,gBAAgB;AAAA,IACvB;AAAA,EACD,GAAG,CAAC,CAAC;AAEL,SACC,4CAAC,SAAI,WAAU,0BACd;AAAA,IAAC,gBAAAC,OAAQ;AAAA,IAAR;AAAA,MACA,eAAa;AAAA,MACb,WAAU;AAAA,MACV,KAAI;AAAA,MACJ,KAAK,OAAO;AAAA,MACZ,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO,UAAU,OAAO,CAAC,KAAK,IAAI;AAAA,MAClC,eAAe;AAAA,MACf,eAAe;AAAA,MACf,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,OAAO,QAAQ,aAAQ,IAAI,KAA2B;AAAA,MAEtD;AAAA,oDAAC,gBAAAA,OAAQ,OAAR,EAAc,WAAU,sBAAqB,KAAI,OAChD,oBAAU,QAAQ,4CAAC,gBAAAA,OAAQ,OAAR,EAAc,WAAU,sBAAqB,KAAI,OAAM,GAC5E;AAAA,QACC,UAAU,QACV;AAAA,UAAC,gBAAAA,OAAQ;AAAA,UAAR;AAAA,YACA,cAAY,IAAI,qBAAqB;AAAA,YACrC,WAAU;AAAA,YACV,KAAI;AAAA,YACJ;AAAA,YACA;AAAA;AAAA,QACD;AAAA;AAAA;AAAA,EAEF,GACD;AAEF,CAAC;",
6
6
  "names": ["React", "value", "_Slider"]
7
7
  }
@@ -79,7 +79,6 @@ const TldrawUiToolbarToggleGroup = ({
79
79
  {
80
80
  type,
81
81
  ...props,
82
- role: "radiogroup",
83
82
  className: (0, import_classnames.default)("tlui-toolbar-toggle-group", className),
84
83
  children
85
84
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/primitives/TldrawUiToolbar.tsx"],
4
- "sourcesContent": ["import classnames from 'classnames'\nimport { Toolbar as _Toolbar } from 'radix-ui'\nimport React from 'react'\n\n/** @public */\nexport interface TLUiToolbarProps extends React.HTMLAttributes<HTMLDivElement> {\n\tchildren?: React.ReactNode\n\tclassName?: string\n\tdir?: 'ltr' | 'rtl'\n\tlabel: string\n}\n\n/** @public @react */\nexport const TldrawUiToolbar = React.forwardRef<HTMLDivElement, TLUiToolbarProps>(\n\t({ children, className, label, ...props }: TLUiToolbarProps, ref) => {\n\t\treturn (\n\t\t\t<_Toolbar.Root\n\t\t\t\tref={ref}\n\t\t\t\t{...props}\n\t\t\t\tclassName={classnames('tlui-toolbar-container', className)}\n\t\t\t\taria-label={label}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</_Toolbar.Root>\n\t\t)\n\t}\n)\n\n/** @public */\nexport interface TLUiToolbarButtonProps extends React.HTMLAttributes<HTMLButtonElement> {\n\tasChild?: boolean\n\tchildren?: React.ReactNode\n\tclassName?: string\n\tdisabled?: boolean\n\tisActive?: boolean\n\ttype: 'icon' | 'tool' | 'menu'\n}\n\n/** @public @react */\nexport const TldrawUiToolbarButton = React.forwardRef<HTMLButtonElement, TLUiToolbarButtonProps>(\n\t({ asChild, children, type, isActive, ...props }: TLUiToolbarButtonProps, ref) => {\n\t\treturn (\n\t\t\t<_Toolbar.Button\n\t\t\t\tref={ref}\n\t\t\t\tasChild={asChild}\n\t\t\t\tdraggable={false}\n\t\t\t\tdata-isactive={isActive}\n\t\t\t\t{...props}\n\t\t\t\tclassName={classnames('tlui-button', `tlui-button__${type}`, props.className)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</_Toolbar.Button>\n\t\t)\n\t}\n)\n\n/** @public */\nexport interface TLUiToolbarToggleGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n\tchildren?: React.ReactNode\n\tclassName?: string\n\tdir?: 'ltr' | 'rtl'\n\tvalue: any\n\t// TODO: fix up this type later\n\tdefaultValue?: any\n\ttype: 'single' | 'multiple'\n}\n\n/** @public @react */\nexport const TldrawUiToolbarToggleGroup = ({\n\tchildren,\n\tclassName,\n\ttype,\n\t...props\n}: TLUiToolbarToggleGroupProps) => {\n\treturn (\n\t\t<_Toolbar.ToggleGroup\n\t\t\ttype={type}\n\t\t\t{...props}\n\t\t\t// TODO: this fixes a bug in Radix until they fix it.\n\t\t\t// https://github.com/radix-ui/primitives/issues/3188\n\t\t\t// https://github.com/radix-ui/primitives/pull/3189\n\t\t\trole=\"radiogroup\"\n\t\t\tclassName={classnames('tlui-toolbar-toggle-group', className)}\n\t\t>\n\t\t\t{children}\n\t\t</_Toolbar.ToggleGroup>\n\t)\n}\n\n/** @public */\nexport interface TLUiToolbarToggleItemProps extends React.HTMLAttributes<HTMLButtonElement> {\n\tchildren?: React.ReactNode\n\tclassName?: string\n\ttype: 'icon' | 'tool'\n\tvalue: string\n}\n\n/** @public @react */\nexport const TldrawUiToolbarToggleItem = ({\n\tchildren,\n\tclassName,\n\ttype,\n\tvalue,\n\t...props\n}: TLUiToolbarToggleItemProps) => {\n\treturn (\n\t\t<_Toolbar.ToggleItem\n\t\t\t{...props}\n\t\t\tclassName={classnames(\n\t\t\t\t'tlui-button',\n\t\t\t\t`tlui-button__${type}`,\n\t\t\t\t'tlui-toolbar-toggle-group-item',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tvalue={value}\n\t\t>\n\t\t\t{children}\n\t\t</_Toolbar.ToggleItem>\n\t)\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBG;AAhBH,wBAAuB;AACvB,sBAAoC;AACpC,mBAAkB;AAWX,MAAM,kBAAkB,aAAAA,QAAM;AAAA,EACpC,CAAC,EAAE,UAAU,WAAW,OAAO,GAAG,MAAM,GAAqB,QAAQ;AACpE,WACC;AAAA,MAAC,gBAAAC,QAAS;AAAA,MAAT;AAAA,QACA;AAAA,QACC,GAAG;AAAA,QACJ,eAAW,kBAAAC,SAAW,0BAA0B,SAAS;AAAA,QACzD,cAAY;AAAA,QAEX;AAAA;AAAA,IACF;AAAA,EAEF;AACD;AAaO,MAAM,wBAAwB,aAAAF,QAAM;AAAA,EAC1C,CAAC,EAAE,SAAS,UAAU,MAAM,UAAU,GAAG,MAAM,GAA2B,QAAQ;AACjF,WACC;AAAA,MAAC,gBAAAC,QAAS;AAAA,MAAT;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,iBAAe;AAAA,QACd,GAAG;AAAA,QACJ,eAAW,kBAAAC,SAAW,eAAe,gBAAgB,IAAI,IAAI,MAAM,SAAS;AAAA,QAE3E;AAAA;AAAA,IACF;AAAA,EAEF;AACD;AAcO,MAAM,6BAA6B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACJ,MAAmC;AAClC,SACC;AAAA,IAAC,gBAAAD,QAAS;AAAA,IAAT;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAIJ,MAAK;AAAA,MACL,eAAW,kBAAAC,SAAW,6BAA6B,SAAS;AAAA,MAE3D;AAAA;AAAA,EACF;AAEF;AAWO,MAAM,4BAA4B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACJ,MAAkC;AACjC,SACC;AAAA,IAAC,gBAAAD,QAAS;AAAA,IAAT;AAAA,MACC,GAAG;AAAA,MACJ,eAAW,kBAAAC;AAAA,QACV;AAAA,QACA,gBAAgB,IAAI;AAAA,QACpB;AAAA,QACA;AAAA,MACD;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACF;AAEF;",
4
+ "sourcesContent": ["import classnames from 'classnames'\nimport { Toolbar as _Toolbar } from 'radix-ui'\nimport React from 'react'\n\n/** @public */\nexport interface TLUiToolbarProps extends React.HTMLAttributes<HTMLDivElement> {\n\tchildren?: React.ReactNode\n\tclassName?: string\n\tdir?: 'ltr' | 'rtl'\n\tlabel: string\n}\n\n/** @public @react */\nexport const TldrawUiToolbar = React.forwardRef<HTMLDivElement, TLUiToolbarProps>(\n\t({ children, className, label, ...props }: TLUiToolbarProps, ref) => {\n\t\treturn (\n\t\t\t<_Toolbar.Root\n\t\t\t\tref={ref}\n\t\t\t\t{...props}\n\t\t\t\tclassName={classnames('tlui-toolbar-container', className)}\n\t\t\t\taria-label={label}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</_Toolbar.Root>\n\t\t)\n\t}\n)\n\n/** @public */\nexport interface TLUiToolbarButtonProps extends React.HTMLAttributes<HTMLButtonElement> {\n\tasChild?: boolean\n\tchildren?: React.ReactNode\n\tclassName?: string\n\tdisabled?: boolean\n\tisActive?: boolean\n\ttype: 'icon' | 'tool' | 'menu'\n}\n\n/** @public @react */\nexport const TldrawUiToolbarButton = React.forwardRef<HTMLButtonElement, TLUiToolbarButtonProps>(\n\t({ asChild, children, type, isActive, ...props }: TLUiToolbarButtonProps, ref) => {\n\t\treturn (\n\t\t\t<_Toolbar.Button\n\t\t\t\tref={ref}\n\t\t\t\tasChild={asChild}\n\t\t\t\tdraggable={false}\n\t\t\t\tdata-isactive={isActive}\n\t\t\t\t{...props}\n\t\t\t\tclassName={classnames('tlui-button', `tlui-button__${type}`, props.className)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</_Toolbar.Button>\n\t\t)\n\t}\n)\n\n/** @public */\nexport interface TLUiToolbarToggleGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n\tchildren?: React.ReactNode\n\tclassName?: string\n\tdir?: 'ltr' | 'rtl'\n\tvalue: any\n\t// TODO: fix up this type later\n\tdefaultValue?: any\n\ttype: 'single' | 'multiple'\n}\n\n/** @public @react */\nexport const TldrawUiToolbarToggleGroup = ({\n\tchildren,\n\tclassName,\n\ttype,\n\t...props\n}: TLUiToolbarToggleGroupProps) => {\n\treturn (\n\t\t<_Toolbar.ToggleGroup\n\t\t\ttype={type}\n\t\t\t{...props}\n\t\t\tclassName={classnames('tlui-toolbar-toggle-group', className)}\n\t\t>\n\t\t\t{children}\n\t\t</_Toolbar.ToggleGroup>\n\t)\n}\n\n/** @public */\nexport interface TLUiToolbarToggleItemProps extends React.HTMLAttributes<HTMLButtonElement> {\n\tchildren?: React.ReactNode\n\tclassName?: string\n\ttype: 'icon' | 'tool'\n\tvalue: string\n}\n\n/** @public @react */\nexport const TldrawUiToolbarToggleItem = ({\n\tchildren,\n\tclassName,\n\ttype,\n\tvalue,\n\t...props\n}: TLUiToolbarToggleItemProps) => {\n\treturn (\n\t\t<_Toolbar.ToggleItem\n\t\t\t{...props}\n\t\t\tclassName={classnames(\n\t\t\t\t'tlui-button',\n\t\t\t\t`tlui-button__${type}`,\n\t\t\t\t'tlui-toolbar-toggle-group-item',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tvalue={value}\n\t\t>\n\t\t\t{children}\n\t\t</_Toolbar.ToggleItem>\n\t)\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBG;AAhBH,wBAAuB;AACvB,sBAAoC;AACpC,mBAAkB;AAWX,MAAM,kBAAkB,aAAAA,QAAM;AAAA,EACpC,CAAC,EAAE,UAAU,WAAW,OAAO,GAAG,MAAM,GAAqB,QAAQ;AACpE,WACC;AAAA,MAAC,gBAAAC,QAAS;AAAA,MAAT;AAAA,QACA;AAAA,QACC,GAAG;AAAA,QACJ,eAAW,kBAAAC,SAAW,0BAA0B,SAAS;AAAA,QACzD,cAAY;AAAA,QAEX;AAAA;AAAA,IACF;AAAA,EAEF;AACD;AAaO,MAAM,wBAAwB,aAAAF,QAAM;AAAA,EAC1C,CAAC,EAAE,SAAS,UAAU,MAAM,UAAU,GAAG,MAAM,GAA2B,QAAQ;AACjF,WACC;AAAA,MAAC,gBAAAC,QAAS;AAAA,MAAT;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX,iBAAe;AAAA,QACd,GAAG;AAAA,QACJ,eAAW,kBAAAC,SAAW,eAAe,gBAAgB,IAAI,IAAI,MAAM,SAAS;AAAA,QAE3E;AAAA;AAAA,IACF;AAAA,EAEF;AACD;AAcO,MAAM,6BAA6B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACJ,MAAmC;AAClC,SACC;AAAA,IAAC,gBAAAD,QAAS;AAAA,IAAT;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MACJ,eAAW,kBAAAC,SAAW,6BAA6B,SAAS;AAAA,MAE3D;AAAA;AAAA,EACF;AAEF;AAWO,MAAM,4BAA4B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACJ,MAAkC;AACjC,SACC;AAAA,IAAC,gBAAAD,QAAS;AAAA,IAAT;AAAA,MACC,GAAG;AAAA,MACJ,eAAW,kBAAAC;AAAA,QACV;AAAA,QACA,gBAAgB,IAAI;AAAA,QACpB;AAAA,QACA;AAAA,MACD;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACF;AAEF;",
6
6
  "names": ["React", "_Toolbar", "classnames"]
7
7
  }
@@ -42,7 +42,6 @@ var import_frames = require("../../utils/frames/frames");
42
42
  var import_A11y = require("../components/A11y");
43
43
  var import_EditLinkDialog = require("../components/EditLinkDialog");
44
44
  var import_EmbedDialog = require("../components/EmbedDialog");
45
- var import_DefaultKeyboardShortcutsDialog = require("../components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialog");
46
45
  var import_useCollaborationStatus = require("../hooks/useCollaborationStatus");
47
46
  var import_useFlatten = require("../hooks/useFlatten");
48
47
  var import_useTranslation = require("../hooks/useTranslation/useTranslation");
@@ -122,15 +121,6 @@ function ActionsProvider({ overrides, children }) {
122
121
  helpers.addDialog({ component: import_EmbedDialog.EmbedDialog });
123
122
  }
124
123
  },
125
- {
126
- id: "open-kbd-shortcuts",
127
- label: "action.open-kbd-shortcuts",
128
- kbd: "cmd+alt+/,ctrl+alt+/",
129
- onSelect(source) {
130
- trackEvent("open-kbd-shortcuts", { source });
131
- helpers.addDialog({ component: import_DefaultKeyboardShortcutsDialog.DefaultKeyboardShortcutsDialog });
132
- }
133
- },
134
124
  {
135
125
  id: "insert-media",
136
126
  label: "action.insert-media",
@@ -436,6 +426,7 @@ function ActionsProvider({ overrides, children }) {
436
426
  y: 0
437
427
  };
438
428
  }
429
+ if (!editor.canCreateShapes(ids)) return;
439
430
  editor.markHistoryStoppingPoint("duplicate shapes");
440
431
  editor.duplicateShapes(ids, offset);
441
432
  if (instanceState.duplicateProps) {
@@ -1126,21 +1117,6 @@ function ActionsProvider({ overrides, children }) {
1126
1117
  },
1127
1118
  checkbox: true
1128
1119
  },
1129
- {
1130
- id: "toggle-keyboard-shortcuts",
1131
- label: {
1132
- default: "action.toggle-keyboard-shortcuts",
1133
- menu: "action.toggle-keyboard-shortcuts.menu"
1134
- },
1135
- readonlyOk: true,
1136
- onSelect(source) {
1137
- trackEvent("toggle-keyboard-shortcuts", { source });
1138
- editor.user.updateUserPreferences({
1139
- areKeyboardShortcutsEnabled: !editor.user.getAreKeyboardShortcutsEnabled()
1140
- });
1141
- },
1142
- checkbox: true
1143
- },
1144
1120
  {
1145
1121
  id: "toggle-edge-scrolling",
1146
1122
  label: {
@@ -1424,7 +1400,6 @@ function ActionsProvider({ overrides, children }) {
1424
1400
  id: "adjust-shape-styles",
1425
1401
  label: "a11y.adjust-shape-styles",
1426
1402
  kbd: "cmd+Enter,ctrl+Enter",
1427
- isRequiredA11yAction: true,
1428
1403
  onSelect: async (source) => {
1429
1404
  if (!canApplySelectionAction()) return;
1430
1405
  const firstButton = editor.getContainer().querySelector(".tlui-style-panel button");
@@ -1435,7 +1410,6 @@ function ActionsProvider({ overrides, children }) {
1435
1410
  {
1436
1411
  id: "a11y-open-context-menu",
1437
1412
  kbd: "cmd+shift+Enter,ctrl+shift+Enter",
1438
- isRequiredA11yAction: true,
1439
1413
  readonlyOk: true,
1440
1414
  onSelect: async (source) => {
1441
1415
  if (!canApplySelectionAction()) return;
@@ -1476,7 +1450,6 @@ function ActionsProvider({ overrides, children }) {
1476
1450
  id: "a11y-repeat-shape-announce",
1477
1451
  kbd: "alt+r",
1478
1452
  label: "a11y.repeat-shape",
1479
- isRequiredA11yAction: true,
1480
1453
  readonlyOk: true,
1481
1454
  onSelect: async (source) => {
1482
1455
  const selectedShapeIds = editor.getSelectedShapeIds();