{ "version": 3, "sources": ["../../../../src/lib/ui/hooks/useActions.tsx"], "sourcesContent": ["import {\n\tANIMATION_MEDIUM_MS,\n\tBox2d,\n\tEditor,\n\tTAU,\n\tTLBookmarkShape,\n\tTLEmbedShape,\n\tTLGroupShape,\n\tTLShapeId,\n\tTLShapePartial,\n\tTLTextShape,\n\tVec2d,\n\tapproximately,\n\tcompact,\n\tcreateShapeId,\n\topenWindow,\n\tuseEditor,\n} from '@tldraw/editor'\nimport * as React from 'react'\nimport { getEmbedInfo } from '../../utils/embeds'\nimport { EditLinkDialog } from '../components/EditLinkDialog'\nimport { EmbedDialog } from '../components/EmbedDialog'\nimport { TLUiIconType } from '../icon-types'\nimport { useMenuClipboardEvents } from './useClipboardEvents'\nimport { useCopyAs } from './useCopyAs'\nimport { useDialogs } from './useDialogsProvider'\nimport { TLUiEventSource, useUiEvents } from './useEventsProvider'\nimport { useExportAs } from './useExportAs'\nimport { useInsertMedia } from './useInsertMedia'\nimport { usePrint } from './usePrint'\nimport { useToasts } from './useToastsProvider'\nimport { TLUiTranslationKey } from './useTranslation/TLUiTranslationKey'\n\n/** @public */\nexport interface TLUiActionItem {\n\ticon?: TLUiIconType\n\tid: string\n\tkbd?: string\n\ttitle?: string\n\tlabel?: TLUiTranslationKey\n\tmenuLabel?: TLUiTranslationKey\n\tshortcutsLabel?: TLUiTranslationKey\n\tcontextMenuLabel?: TLUiTranslationKey\n\treadonlyOk: boolean\n\tcheckbox?: boolean\n\tonSelect: (source: TLUiEventSource) => Promise | void\n}\n\n/** @public */\nexport type TLUiActionsContextType = Record\n\n/** @internal */\nexport const ActionsContext = React.createContext({})\n\n/** @public */\nexport type ActionsProviderProps = {\n\toverrides?: (\n\t\teditor: Editor,\n\t\tactions: TLUiActionsContextType,\n\t\thelpers: undefined\n\t) => TLUiActionsContextType\n\tchildren: any\n}\n\nfunction makeActions(actions: TLUiActionItem[]) {\n\treturn Object.fromEntries(actions.map((action) => [action.id, action])) as TLUiActionsContextType\n}\n\n/** @internal */\nexport function ActionsProvider({ overrides, children }: ActionsProviderProps) {\n\tconst editor = useEditor()\n\n\tconst { addDialog, clearDialogs } = useDialogs()\n\tconst { clearToasts } = useToasts()\n\n\tconst insertMedia = useInsertMedia()\n\tconst printSelectionOrPages = usePrint()\n\tconst { cut, copy, paste } = useMenuClipboardEvents()\n\tconst copyAs = useCopyAs()\n\tconst exportAs = useExportAs()\n\n\tconst trackEvent = useUiEvents()\n\n\t// should this be a useMemo? looks like it doesn't actually deref any reactive values\n\tconst actions = React.useMemo(() => {\n\t\tfunction mustGoBackToSelectToolFirst() {\n\t\t\tif (!editor.isIn('select')) {\n\t\t\t\teditor.complete()\n\t\t\t\teditor.setCurrentTool('select')\n\t\t\t\treturn false // false will still let the action happen, true will stop it\n\t\t\t\t// todo: remove this return value once we're suuuuure\n\t\t\t}\n\n\t\t\treturn false\n\t\t}\n\n\t\tfunction hasSelectedShapes() {\n\t\t\treturn editor.selectedShapeIds.length > 0\n\t\t}\n\n\t\tconst actions = makeActions([\n\t\t\t{\n\t\t\t\tid: 'edit-link',\n\t\t\t\tlabel: 'action.edit-link',\n\t\t\t\ticon: 'link',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('edit-link', { source })\n\t\t\t\t\teditor.mark('edit-link')\n\t\t\t\t\taddDialog({ component: EditLinkDialog })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'insert-embed',\n\t\t\t\tlabel: 'action.insert-embed',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tkbd: '$i',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('insert-embed', { source })\n\t\t\t\t\taddDialog({ component: EmbedDialog })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'insert-media',\n\t\t\t\tlabel: 'action.insert-media',\n\t\t\t\tkbd: '$u',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('insert-media', { source })\n\t\t\t\t\tinsertMedia()\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'undo',\n\t\t\t\tlabel: 'action.undo',\n\t\t\t\ticon: 'undo',\n\t\t\t\tkbd: '$z',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('undo', { source })\n\t\t\t\t\teditor.undo()\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'redo',\n\t\t\t\tlabel: 'action.redo',\n\t\t\t\ticon: 'redo',\n\t\t\t\tkbd: '$!z',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('redo', { source })\n\t\t\t\t\teditor.redo()\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'export-as-svg',\n\t\t\t\tlabel: 'action.export-as-svg',\n\t\t\t\tmenuLabel: 'action.export-as-svg.short',\n\t\t\t\tcontextMenuLabel: 'action.export-as-svg.short',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('export-as', { format: 'svg', source })\n\t\t\t\t\texportAs(editor.selectedShapeIds, 'svg')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'export-as-png',\n\t\t\t\tlabel: 'action.export-as-png',\n\t\t\t\tmenuLabel: 'action.export-as-png.short',\n\t\t\t\tcontextMenuLabel: 'action.export-as-png.short',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('export-as', { format: 'png', source })\n\t\t\t\t\texportAs(editor.selectedShapeIds, 'png')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'export-as-json',\n\t\t\t\tlabel: 'action.export-as-json',\n\t\t\t\tmenuLabel: 'action.export-as-json.short',\n\t\t\t\tcontextMenuLabel: 'action.export-as-json.short',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('export-as', { format: 'json', source })\n\t\t\t\t\texportAs(editor.selectedShapeIds, 'json')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'copy-as-svg',\n\t\t\t\tlabel: 'action.copy-as-svg',\n\t\t\t\tmenuLabel: 'action.copy-as-svg.short',\n\t\t\t\tcontextMenuLabel: 'action.copy-as-svg.short',\n\t\t\t\tkbd: '$!c',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('copy-as', { format: 'svg', source })\n\t\t\t\t\tcopyAs(editor.selectedShapeIds, 'svg')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'copy-as-png',\n\t\t\t\tlabel: 'action.copy-as-png',\n\t\t\t\tmenuLabel: 'action.copy-as-png.short',\n\t\t\t\tcontextMenuLabel: 'action.copy-as-png.short',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('copy-as', { format: 'png', source })\n\t\t\t\t\tcopyAs(editor.selectedShapeIds, 'png')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'copy-as-json',\n\t\t\t\tlabel: 'action.copy-as-json',\n\t\t\t\tmenuLabel: 'action.copy-as-json.short',\n\t\t\t\tcontextMenuLabel: 'action.copy-as-json.short',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('copy-as', { format: 'json', source })\n\t\t\t\t\tcopyAs(editor.selectedShapeIds, 'json')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-auto-size',\n\t\t\t\tlabel: 'action.toggle-auto-size',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('toggle-auto-size', { source })\n\t\t\t\t\teditor.mark('toggling auto size')\n\t\t\t\t\teditor.updateShapes(\n\t\t\t\t\t\teditor.selectedShapes\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(shape): shape is TLTextShape =>\n\t\t\t\t\t\t\t\t\teditor.isShapeOfType(shape, 'text') && shape.props.autoSize === false\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map((shape) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tid: shape.id,\n\t\t\t\t\t\t\t\t\ttype: shape.type,\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t...shape.props,\n\t\t\t\t\t\t\t\t\t\tw: 8,\n\t\t\t\t\t\t\t\t\t\tautoSize: true,\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)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'open-embed-link',\n\t\t\t\tlabel: 'action.open-embed-link',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('open-embed-link', { source })\n\t\t\t\t\tconst ids = editor.selectedShapeIds\n\t\t\t\t\tconst warnMsg = 'No embed shapes selected'\n\t\t\t\t\tif (ids.length !== 1) {\n\t\t\t\t\t\tconsole.error(warnMsg)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tconst shape = editor.getShape(ids[0])\n\t\t\t\t\tif (!shape || !editor.isShapeOfType(shape, 'embed')) {\n\t\t\t\t\t\tconsole.error(warnMsg)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\topenWindow(shape.props.url, '_blank')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'select-zoom-tool',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tkbd: 'z',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (editor.root.current.value?.id === 'zoom') return\n\n\t\t\t\t\ttrackEvent('zoom-tool', { source })\n\t\t\t\t\tif (!(editor.inputs.shiftKey || editor.inputs.ctrlKey)) {\n\t\t\t\t\t\tconst currentTool = editor.root.current.value\n\t\t\t\t\t\tif (currentTool && currentTool.current.value?.id === 'idle') {\n\t\t\t\t\t\t\teditor.setCurrentTool('zoom', { onInteractionEnd: currentTool.id, maskAs: 'zoom' })\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'convert-to-bookmark',\n\t\t\t\tlabel: 'action.convert-to-bookmark',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\teditor.batch(() => {\n\t\t\t\t\t\ttrackEvent('convert-to-bookmark', { source })\n\t\t\t\t\t\tconst shapes = editor.selectedShapes\n\n\t\t\t\t\t\tconst createList: TLShapePartial[] = []\n\t\t\t\t\t\tconst deleteList: TLShapeId[] = []\n\t\t\t\t\t\tfor (const shape of shapes) {\n\t\t\t\t\t\t\tif (!shape || !editor.isShapeOfType(shape, 'embed') || !shape.props.url)\n\t\t\t\t\t\t\t\tcontinue\n\n\t\t\t\t\t\t\tconst newPos = new Vec2d(shape.x, shape.y)\n\t\t\t\t\t\t\tnewPos.rot(-shape.rotation)\n\t\t\t\t\t\t\tnewPos.add(new Vec2d(shape.props.w / 2 - 300 / 2, shape.props.h / 2 - 320 / 2)) // see bookmark shape util\n\t\t\t\t\t\t\tnewPos.rot(shape.rotation)\n\t\t\t\t\t\t\tconst partial: TLShapePartial = {\n\t\t\t\t\t\t\t\tid: createShapeId(),\n\t\t\t\t\t\t\t\ttype: 'bookmark',\n\t\t\t\t\t\t\t\trotation: shape.rotation,\n\t\t\t\t\t\t\t\tx: newPos.x,\n\t\t\t\t\t\t\t\ty: newPos.y,\n\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\turl: shape.props.url,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcreateList.push(partial)\n\t\t\t\t\t\t\tdeleteList.push(shape.id)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\teditor.mark('convert shapes to bookmark')\n\t\t\t\t\t\teditor.deleteShapes(deleteList)\n\t\t\t\t\t\teditor.createShapes(createList)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'convert-to-embed',\n\t\t\t\tlabel: 'action.convert-to-embed',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('convert-to-embed', { source })\n\n\t\t\t\t\teditor.batch(() => {\n\t\t\t\t\t\tconst ids = editor.selectedShapeIds\n\t\t\t\t\t\tconst shapes = compact(ids.map((id) => editor.getShape(id)))\n\n\t\t\t\t\t\tconst createList: TLShapePartial[] = []\n\t\t\t\t\t\tconst deleteList: TLShapeId[] = []\n\t\t\t\t\t\tfor (const shape of shapes) {\n\t\t\t\t\t\t\tif (!editor.isShapeOfType(shape, 'bookmark')) continue\n\n\t\t\t\t\t\t\tconst { url } = shape.props\n\n\t\t\t\t\t\t\tconst embedInfo = getEmbedInfo(shape.props.url)\n\n\t\t\t\t\t\t\tif (!embedInfo) continue\n\t\t\t\t\t\t\tif (!embedInfo.definition) continue\n\n\t\t\t\t\t\t\tconst { width, height } = embedInfo.definition\n\n\t\t\t\t\t\t\tconst newPos = new Vec2d(shape.x, shape.y)\n\t\t\t\t\t\t\tnewPos.rot(-shape.rotation)\n\t\t\t\t\t\t\tnewPos.add(new Vec2d(shape.props.w / 2 - width / 2, shape.props.h / 2 - height / 2))\n\t\t\t\t\t\t\tnewPos.rot(shape.rotation)\n\n\t\t\t\t\t\t\tconst shapeToCreate: TLShapePartial = {\n\t\t\t\t\t\t\t\tid: createShapeId(),\n\t\t\t\t\t\t\t\ttype: 'embed',\n\t\t\t\t\t\t\t\tx: newPos.x,\n\t\t\t\t\t\t\t\ty: newPos.y,\n\t\t\t\t\t\t\t\trotation: shape.rotation,\n\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\turl: url,\n\t\t\t\t\t\t\t\t\tw: width,\n\t\t\t\t\t\t\t\t\th: height,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcreateList.push(shapeToCreate)\n\t\t\t\t\t\t\tdeleteList.push(shape.id)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\teditor.mark('convert shapes to embed')\n\t\t\t\t\t\teditor.deleteShapes(deleteList)\n\t\t\t\t\t\teditor.createShapes(createList)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'duplicate',\n\t\t\t\tkbd: '$d',\n\t\t\t\tlabel: 'action.duplicate',\n\t\t\t\ticon: 'duplicate',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('duplicate-shapes', { source })\n\t\t\t\t\tconst ids = editor.selectedShapeIds\n\t\t\t\t\tconst commonBounds = Box2d.Common(compact(ids.map((id) => editor.getShapePageBounds(id))))\n\t\t\t\t\tconst offset = editor.instanceState.canMoveCamera\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tx: commonBounds.width + 10,\n\t\t\t\t\t\t\t\ty: 0,\n\t\t\t\t\t\t }\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tx: 16 / editor.zoomLevel,\n\t\t\t\t\t\t\t\ty: 16 / editor.zoomLevel,\n\t\t\t\t\t\t }\n\t\t\t\t\teditor.mark('duplicate shapes')\n\t\t\t\t\teditor.duplicateShapes(ids, offset)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'ungroup',\n\t\t\t\tlabel: 'action.ungroup',\n\t\t\t\tkbd: '$!g',\n\t\t\t\ticon: 'ungroup',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('ungroup-shapes', { source })\n\t\t\t\t\teditor.mark('ungroup')\n\t\t\t\t\teditor.ungroupShapes(editor.selectedShapeIds)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'group',\n\t\t\t\tlabel: 'action.group',\n\t\t\t\tkbd: '$g',\n\t\t\t\ticon: 'group',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('group-shapes', { source })\n\t\t\t\t\tconst { onlySelectedShape } = editor\n\t\t\t\t\tif (onlySelectedShape && editor.isShapeOfType(onlySelectedShape, 'group')) {\n\t\t\t\t\t\teditor.mark('ungroup')\n\t\t\t\t\t\teditor.ungroupShapes(editor.selectedShapeIds)\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor.mark('group')\n\t\t\t\t\t\teditor.groupShapes(editor.selectedShapeIds)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'align-left',\n\t\t\t\tlabel: 'action.align-left',\n\t\t\t\tkbd: '?A',\n\t\t\t\ticon: 'align-left',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('align-shapes', { operation: 'left', source })\n\t\t\t\t\teditor.mark('align left')\n\t\t\t\t\teditor.alignShapes(editor.selectedShapeIds, 'left')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'align-center-horizontal',\n\t\t\t\tlabel: 'action.align-center-horizontal',\n\t\t\t\tcontextMenuLabel: 'action.align-center-horizontal.short',\n\t\t\t\tkbd: '?H',\n\t\t\t\ticon: 'align-center-horizontal',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('align-shapes', { operation: 'center-horizontal', source })\n\t\t\t\t\teditor.mark('align center horizontal')\n\t\t\t\t\teditor.alignShapes(editor.selectedShapeIds, 'center-horizontal')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'align-right',\n\t\t\t\tlabel: 'action.align-right',\n\t\t\t\tkbd: '?D',\n\t\t\t\ticon: 'align-right',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('align-shapes', { operation: 'right', source })\n\t\t\t\t\teditor.mark('align right')\n\t\t\t\t\teditor.alignShapes(editor.selectedShapeIds, 'right')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'align-center-vertical',\n\t\t\t\tlabel: 'action.align-center-vertical',\n\t\t\t\tcontextMenuLabel: 'action.align-center-vertical.short',\n\t\t\t\tkbd: '?V',\n\t\t\t\ticon: 'align-center-vertical',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('align-shapes', { operation: 'center-vertical', source })\n\t\t\t\t\teditor.mark('align center vertical')\n\t\t\t\t\teditor.alignShapes(editor.selectedShapeIds, 'center-vertical')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'align-top',\n\t\t\t\tlabel: 'action.align-top',\n\t\t\t\ticon: 'align-top',\n\t\t\t\tkbd: '?W',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('align-shapes', { operation: 'top', source })\n\t\t\t\t\teditor.mark('align top')\n\t\t\t\t\teditor.alignShapes(editor.selectedShapeIds, 'top')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'align-bottom',\n\t\t\t\tlabel: 'action.align-bottom',\n\t\t\t\ticon: 'align-bottom',\n\t\t\t\tkbd: '?S',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('align-shapes', { operation: 'bottom', source })\n\t\t\t\t\teditor.mark('align bottom')\n\t\t\t\t\teditor.alignShapes(editor.selectedShapeIds, 'bottom')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'distribute-horizontal',\n\t\t\t\tlabel: 'action.distribute-horizontal',\n\t\t\t\tcontextMenuLabel: 'action.distribute-horizontal.short',\n\t\t\t\ticon: 'distribute-horizontal',\n\t\t\t\tkbd: '?!h',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('distribute-shapes', { operation: 'horizontal', source })\n\t\t\t\t\teditor.mark('distribute horizontal')\n\t\t\t\t\teditor.distributeShapes(editor.selectedShapeIds, 'horizontal')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'distribute-vertical',\n\t\t\t\tlabel: 'action.distribute-vertical',\n\t\t\t\tcontextMenuLabel: 'action.distribute-vertical.short',\n\t\t\t\ticon: 'distribute-vertical',\n\t\t\t\tkbd: '?!V',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('distribute-shapes', { operation: 'vertical', source })\n\t\t\t\t\teditor.mark('distribute vertical')\n\t\t\t\t\teditor.distributeShapes(editor.selectedShapeIds, 'vertical')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'stretch-horizontal',\n\t\t\t\tlabel: 'action.stretch-horizontal',\n\t\t\t\tcontextMenuLabel: 'action.stretch-horizontal.short',\n\t\t\t\ticon: 'stretch-horizontal',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('stretch-shapes', { operation: 'horizontal', source })\n\t\t\t\t\teditor.mark('stretch horizontal')\n\t\t\t\t\teditor.stretchShapes(editor.selectedShapeIds, 'horizontal')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'stretch-vertical',\n\t\t\t\tlabel: 'action.stretch-vertical',\n\t\t\t\tcontextMenuLabel: 'action.stretch-vertical.short',\n\t\t\t\ticon: 'stretch-vertical',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('stretch-shapes', { operation: 'vertical', source })\n\t\t\t\t\teditor.mark('stretch vertical')\n\t\t\t\t\teditor.stretchShapes(editor.selectedShapeIds, 'vertical')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'flip-horizontal',\n\t\t\t\tlabel: 'action.flip-horizontal',\n\t\t\t\tcontextMenuLabel: 'action.flip-horizontal.short',\n\t\t\t\tkbd: '!h',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('flip-shapes', { operation: 'horizontal', source })\n\t\t\t\t\teditor.mark('flip horizontal')\n\t\t\t\t\teditor.flipShapes(editor.selectedShapeIds, 'horizontal')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'flip-vertical',\n\t\t\t\tlabel: 'action.flip-vertical',\n\t\t\t\tcontextMenuLabel: 'action.flip-vertical.short',\n\t\t\t\tkbd: '!v',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('flip-shapes', { operation: 'vertical', source })\n\t\t\t\t\teditor.mark('flip vertical')\n\t\t\t\t\teditor.flipShapes(editor.selectedShapeIds, 'vertical')\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'pack',\n\t\t\t\tlabel: 'action.pack',\n\t\t\t\ticon: 'pack',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('pack-shapes', { source })\n\t\t\t\t\teditor.mark('pack')\n\t\t\t\t\teditor.packShapes(editor.selectedShapeIds, 16)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'stack-vertical',\n\t\t\t\tlabel: 'action.stack-vertical',\n\t\t\t\tcontextMenuLabel: 'action.stack-vertical.short',\n\t\t\t\ticon: 'stack-vertical',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('stack-shapes', { operation: 'vertical', source })\n\t\t\t\t\teditor.mark('stack-vertical')\n\t\t\t\t\teditor.stackShapes(editor.selectedShapeIds, 'vertical', 16)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'stack-horizontal',\n\t\t\t\tlabel: 'action.stack-horizontal',\n\t\t\t\tcontextMenuLabel: 'action.stack-horizontal.short',\n\t\t\t\ticon: 'stack-horizontal',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('stack-shapes', { operation: 'horizontal', source })\n\t\t\t\t\teditor.mark('stack-horizontal')\n\t\t\t\t\teditor.stackShapes(editor.selectedShapeIds, 'horizontal', 16)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'bring-to-front',\n\t\t\t\tlabel: 'action.bring-to-front',\n\t\t\t\tkbd: ']',\n\t\t\t\ticon: 'bring-to-front',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('reorder-shapes', { operation: 'toFront', source })\n\t\t\t\t\teditor.mark('bring to front')\n\t\t\t\t\teditor.bringToFront(editor.selectedShapeIds)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'bring-forward',\n\t\t\t\tlabel: 'action.bring-forward',\n\t\t\t\ticon: 'bring-forward',\n\t\t\t\tkbd: '?]',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('reorder-shapes', { operation: 'forward', source })\n\t\t\t\t\teditor.mark('bring forward')\n\t\t\t\t\teditor.bringForward(editor.selectedShapeIds)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'send-backward',\n\t\t\t\tlabel: 'action.send-backward',\n\t\t\t\ticon: 'send-backward',\n\t\t\t\tkbd: '?[',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('reorder-shapes', { operation: 'backward', source })\n\t\t\t\t\teditor.mark('send backward')\n\t\t\t\t\teditor.sendBackward(editor.selectedShapeIds)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'send-to-back',\n\t\t\t\tlabel: 'action.send-to-back',\n\t\t\t\ticon: 'send-to-back',\n\t\t\t\tkbd: '[',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('reorder-shapes', { operation: 'toBack', source })\n\t\t\t\t\teditor.mark('send to back')\n\t\t\t\t\teditor.sendToBack(editor.selectedShapeIds)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'cut',\n\t\t\t\tlabel: 'action.cut',\n\t\t\t\tkbd: '$x',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\teditor.mark('cut')\n\t\t\t\t\tcut(source)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'copy',\n\t\t\t\tlabel: 'action.copy',\n\t\t\t\tkbd: '$c',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\tcopy(source)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'paste',\n\t\t\t\tlabel: 'action.paste',\n\t\t\t\tkbd: '$v',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tnavigator.clipboard?.read().then((clipboardItems) => {\n\t\t\t\t\t\tpaste(\n\t\t\t\t\t\t\tclipboardItems,\n\t\t\t\t\t\t\tsource,\n\t\t\t\t\t\t\tsource === 'context-menu' ? editor.inputs.currentPagePoint : undefined\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'select-all',\n\t\t\t\tlabel: 'action.select-all',\n\t\t\t\tkbd: '$a',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.batch(() => {\n\t\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\t\ttrackEvent('select-all-shapes', { source })\n\n\t\t\t\t\t\teditor.mark('select all kbd')\n\t\t\t\t\t\teditor.selectAll()\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'select-none',\n\t\t\t\tlabel: 'action.select-none',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('select-none-shapes', { source })\n\t\t\t\t\teditor.mark('select none')\n\t\t\t\t\teditor.selectNone()\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'delete',\n\t\t\t\tlabel: 'action.delete',\n\t\t\t\tkbd: '\u232B,del,backspace',\n\t\t\t\ticon: 'trash',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('delete-shapes', { source })\n\t\t\t\t\teditor.mark('delete')\n\t\t\t\t\teditor.deleteShapes(editor.selectedShapeIds)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'rotate-cw',\n\t\t\t\tlabel: 'action.rotate-cw',\n\t\t\t\ticon: 'rotate-cw',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('rotate-cw', { source })\n\t\t\t\t\teditor.mark('rotate-cw')\n\t\t\t\t\tconst offset = editor.selectionRotation % (TAU / 2)\n\t\t\t\t\tconst dontUseOffset = approximately(offset, 0) || approximately(offset, TAU / 2)\n\t\t\t\t\teditor.rotateShapesBy(editor.selectedShapeIds, TAU / 2 - (dontUseOffset ? 0 : offset))\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'rotate-ccw',\n\t\t\t\tlabel: 'action.rotate-ccw',\n\t\t\t\ticon: 'rotate-ccw',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('rotate-ccw', { source })\n\t\t\t\t\teditor.mark('rotate-ccw')\n\t\t\t\t\tconst offset = editor.selectionRotation % (TAU / 2)\n\t\t\t\t\tconst offsetCloseToZero = approximately(offset, 0)\n\t\t\t\t\teditor.rotateShapesBy(editor.selectedShapeIds, offsetCloseToZero ? -(TAU / 2) : -offset)\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'zoom-in',\n\t\t\t\tlabel: 'action.zoom-in',\n\t\t\t\tkbd: '$=,=',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('zoom-in', { source })\n\t\t\t\t\teditor.zoomIn(editor.viewportScreenCenter, { duration: ANIMATION_MEDIUM_MS })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'zoom-out',\n\t\t\t\tlabel: 'action.zoom-out',\n\t\t\t\tkbd: '$-,-',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('zoom-out', { source })\n\t\t\t\t\teditor.zoomOut(editor.viewportScreenCenter, { duration: ANIMATION_MEDIUM_MS })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'zoom-to-100',\n\t\t\t\tlabel: 'action.zoom-to-100',\n\t\t\t\ticon: 'reset-zoom',\n\t\t\t\tkbd: '!0',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('reset-zoom', { source })\n\t\t\t\t\teditor.resetZoom(editor.viewportScreenCenter, { duration: ANIMATION_MEDIUM_MS })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'zoom-to-fit',\n\t\t\t\tlabel: 'action.zoom-to-fit',\n\t\t\t\tkbd: '!1',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('zoom-to-fit', { source })\n\t\t\t\t\teditor.zoomToFit({ duration: ANIMATION_MEDIUM_MS })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'zoom-to-selection',\n\t\t\t\tlabel: 'action.zoom-to-selection',\n\t\t\t\tkbd: '!2',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\tif (!hasSelectedShapes()) return\n\t\t\t\t\tif (mustGoBackToSelectToolFirst()) return\n\n\t\t\t\t\ttrackEvent('zoom-to-selection', { source })\n\t\t\t\t\teditor.zoomToSelection({ duration: ANIMATION_MEDIUM_MS })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-snap-mode',\n\t\t\t\tlabel: 'action.toggle-snap-mode',\n\t\t\t\tmenuLabel: 'action.toggle-snap-mode.menu',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('toggle-snap-mode', { source })\n\t\t\t\t\teditor.user.updateUserPreferences({ isSnapMode: !editor.user.isSnapMode })\n\t\t\t\t},\n\t\t\t\tcheckbox: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-dark-mode',\n\t\t\t\tlabel: 'action.toggle-dark-mode',\n\t\t\t\tmenuLabel: 'action.toggle-dark-mode.menu',\n\t\t\t\tkbd: '$/',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('toggle-dark-mode', { source })\n\t\t\t\t\teditor.user.updateUserPreferences({ isDarkMode: !editor.user.isDarkMode })\n\t\t\t\t},\n\t\t\t\tcheckbox: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-reduce-motion',\n\t\t\t\tlabel: 'action.toggle-reduce-motion',\n\t\t\t\tmenuLabel: 'action.toggle-reduce-motion.menu',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('toggle-reduce-motion', { source })\n\t\t\t\t\teditor.user.updateUserPreferences({\n\t\t\t\t\t\tanimationSpeed: editor.user.animationSpeed === 0 ? 1 : 0,\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tcheckbox: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-transparent',\n\t\t\t\tlabel: 'action.toggle-transparent',\n\t\t\t\tmenuLabel: 'action.toggle-transparent.menu',\n\t\t\t\tcontextMenuLabel: 'action.toggle-transparent.context-menu',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('toggle-transparent', { source })\n\t\t\t\t\teditor.updateInstanceState(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\texportBackground: !editor.instanceState.exportBackground,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ ephemeral: true }\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\tcheckbox: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-tool-lock',\n\t\t\t\tlabel: 'action.toggle-tool-lock',\n\t\t\t\tmenuLabel: 'action.toggle-tool-lock.menu',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tkbd: 'q',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('toggle-tool-lock', { source })\n\t\t\t\t\teditor.updateInstanceState({ isToolLocked: !editor.instanceState.isToolLocked })\n\t\t\t\t},\n\t\t\t\tcheckbox: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'unlock-all',\n\t\t\t\tlabel: 'action.unlock-all',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('unlock-all', { source })\n\t\t\t\t\tconst updates = [] as TLShapePartial[]\n\t\t\t\t\tfor (const shape of editor.currentPageShapes) {\n\t\t\t\t\t\tif (shape.isLocked) {\n\t\t\t\t\t\t\tupdates.push({ id: shape.id, type: shape.type, isLocked: false })\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (updates.length > 0) {\n\t\t\t\t\t\teditor.updateShapes(updates)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-focus-mode',\n\t\t\t\tlabel: 'action.toggle-focus-mode',\n\t\t\t\tmenuLabel: 'action.toggle-focus-mode.menu',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tkbd: '$.',\n\t\t\t\tcheckbox: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\t// this needs to be deferred because it causes the menu\n\t\t\t\t\t// UI to unmount which puts us in a dodgy state\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\teditor.batch(() => {\n\t\t\t\t\t\t\ttrackEvent('toggle-focus-mode', { source })\n\t\t\t\t\t\t\tclearDialogs()\n\t\t\t\t\t\t\tclearToasts()\n\t\t\t\t\t\t\teditor.updateInstanceState({ isFocusMode: !editor.instanceState.isFocusMode })\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-grid',\n\t\t\t\tlabel: 'action.toggle-grid',\n\t\t\t\tmenuLabel: 'action.toggle-grid.menu',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tkbd: \"$'\",\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('toggle-grid-mode', { source })\n\t\t\t\t\teditor.updateInstanceState({ isGridMode: !editor.instanceState.isGridMode })\n\t\t\t\t},\n\t\t\t\tcheckbox: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-debug-mode',\n\t\t\t\tlabel: 'action.toggle-debug-mode',\n\t\t\t\tmenuLabel: 'action.toggle-debug-mode.menu',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('toggle-debug-mode', { source })\n\t\t\t\t\teditor.updateInstanceState({\n\t\t\t\t\t\tisDebugMode: !editor.instanceState.isDebugMode,\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tcheckbox: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'print',\n\t\t\t\tlabel: 'action.print',\n\t\t\t\tkbd: '$p',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('print', { source })\n\t\t\t\t\tprintSelectionOrPages()\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'exit-pen-mode',\n\t\t\t\tlabel: 'action.exit-pen-mode',\n\t\t\t\ticon: 'cross-2',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('exit-pen-mode', { source })\n\t\t\t\t\teditor.updateInstanceState({ isPenMode: false })\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'stop-following',\n\t\t\t\tlabel: 'action.stop-following',\n\t\t\t\ticon: 'cross-2',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('stop-following', { source })\n\t\t\t\t\teditor.stopFollowingUser()\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'back-to-content',\n\t\t\t\tlabel: 'action.back-to-content',\n\t\t\t\ticon: 'arrow-left',\n\t\t\t\treadonlyOk: true,\n\t\t\t\tonSelect(source) {\n\t\t\t\t\ttrackEvent('zoom-to-content', { source })\n\t\t\t\t\teditor.zoomToContent()\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: 'toggle-lock',\n\t\t\t\tlabel: 'action.toggle-lock',\n\t\t\t\treadonlyOk: false,\n\t\t\t\tkbd: '!l',\n\t\t\t\tonSelect(source) {\n\t\t\t\t\teditor.mark('locking')\n\t\t\t\t\ttrackEvent('toggle-lock', { source })\n\t\t\t\t\teditor.toggleLock(editor.selectedShapeIds)\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\n\t\tif (overrides) {\n\t\t\treturn overrides(editor, actions, undefined)\n\t\t}\n\n\t\treturn actions\n\t}, [\n\t\ttrackEvent,\n\t\toverrides,\n\t\teditor,\n\t\taddDialog,\n\t\tinsertMedia,\n\t\texportAs,\n\t\tcopyAs,\n\t\tcut,\n\t\tcopy,\n\t\tpaste,\n\t\tclearDialogs,\n\t\tclearToasts,\n\t\tprintSelectionOrPages,\n\t])\n\n\treturn {children}\n}\n\n/** @public */\nexport function useActions() {\n\tconst ctx = React.useContext(ActionsContext)\n\n\tif (!ctx) {\n\t\tthrow new Error('useTools must be used within a ToolProvider')\n\t}\n\n\treturn ctx\n}\n\nfunction asActions>(actions: T) {\n\treturn actions as Record\n}\n"], "mappings": "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", "names": ["actions"] }