UNPKG

tldraw

Version:

A tiny little drawing editor.

611 lines (610 loc) • 31.9 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var menu_items_exports = {}; __export(menu_items_exports, { ArrangeMenuSubmenu: () => ArrangeMenuSubmenu, ClipboardMenuGroup: () => ClipboardMenuGroup, ConversionsMenuGroup: () => ConversionsMenuGroup, ConvertToBookmarkMenuItem: () => ConvertToBookmarkMenuItem, ConvertToEmbedMenuItem: () => ConvertToEmbedMenuItem, CopyAsMenuGroup: () => CopyAsMenuGroup, CopyMenuItem: () => CopyMenuItem, CursorChatItem: () => CursorChatItem, CutMenuItem: () => CutMenuItem, DeleteMenuItem: () => DeleteMenuItem, DownloadOriginalMenuItem: () => DownloadOriginalMenuItem, DuplicateMenuItem: () => DuplicateMenuItem, EditLinkMenuItem: () => EditLinkMenuItem, EditMenuSubmenu: () => EditMenuSubmenu, FitFrameToContentMenuItem: () => FitFrameToContentMenuItem, FlattenMenuItem: () => FlattenMenuItem, GroupMenuItem: () => GroupMenuItem, MoveToPageMenu: () => MoveToPageMenu, PasteMenuItem: () => PasteMenuItem, PrintItem: () => PrintItem, RemoveFrameMenuItem: () => RemoveFrameMenuItem, ReorderMenuSubmenu: () => ReorderMenuSubmenu, SelectAllMenuItem: () => SelectAllMenuItem, ToggleAutoSizeMenuItem: () => ToggleAutoSizeMenuItem, ToggleDarkModeItem: () => ToggleDarkModeItem, ToggleDebugModeItem: () => ToggleDebugModeItem, ToggleDynamicSizeModeItem: () => ToggleDynamicSizeModeItem, ToggleEdgeScrollingItem: () => ToggleEdgeScrollingItem, ToggleEnhancedA11yModeItem: () => ToggleEnhancedA11yModeItem, ToggleFocusModeItem: () => ToggleFocusModeItem, ToggleGridItem: () => ToggleGridItem, ToggleInvertZoomItem: () => ToggleInvertZoomItem, ToggleKeyboardShortcutsItem: () => ToggleKeyboardShortcutsItem, ToggleLockMenuItem: () => ToggleLockMenuItem, TogglePasteAtCursorItem: () => TogglePasteAtCursorItem, ToggleReduceMotionItem: () => ToggleReduceMotionItem, ToggleSnapModeItem: () => ToggleSnapModeItem, ToggleToolLockItem: () => ToggleToolLockItem, ToggleTransparentBgMenuItem: () => ToggleTransparentBgMenuItem, ToggleWrapModeItem: () => ToggleWrapModeItem, UngroupMenuItem: () => UngroupMenuItem, UnlockAllMenuItem: () => UnlockAllMenuItem, ZoomTo100MenuItem: () => ZoomTo100MenuItem, ZoomToFitMenuItem: () => ZoomToFitMenuItem, ZoomToSelectionMenuItem: () => ZoomToSelectionMenuItem }); module.exports = __toCommonJS(menu_items_exports); var import_jsx_runtime = require("react/jsx-runtime"); var import_editor = require("@tldraw/editor"); var import_actions = require("../context/actions"); var import_events = require("../context/events"); var import_toasts = require("../context/toasts"); var import_menu_hooks = require("../hooks/menu-hooks"); var import_useGetEmbedDefinition = require("../hooks/useGetEmbedDefinition"); var import_useReadonly = require("../hooks/useReadonly"); var import_TldrawUiMenuActionCheckboxItem = require("./primitives/menus/TldrawUiMenuActionCheckboxItem"); var import_TldrawUiMenuActionItem = require("./primitives/menus/TldrawUiMenuActionItem"); var import_TldrawUiMenuGroup = require("./primitives/menus/TldrawUiMenuGroup"); var import_TldrawUiMenuItem = require("./primitives/menus/TldrawUiMenuItem"); var import_TldrawUiMenuSubmenu = require("./primitives/menus/TldrawUiMenuSubmenu"); function ToggleAutoSizeMenuItem() { const shouldDisplay = (0, import_menu_hooks.useShowAutoSizeToggle)(); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "toggle-auto-size" }); } function EditLinkMenuItem() { const shouldDisplay = (0, import_menu_hooks.useHasLinkShapeSelected)(); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "edit-link" }); } function DuplicateMenuItem() { const shouldDisplay = (0, import_menu_hooks.useUnlockedSelectedShapesCount)(1); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "duplicate" }); } function FlattenMenuItem() { const editor = (0, import_editor.useEditor)(); const shouldDisplay = (0, import_editor.useValue)( "should display flatten option", () => { const selectedShapeIds = editor.getSelectedShapeIds(); if (selectedShapeIds.length === 0) return false; const onlySelectedShape = editor.getOnlySelectedShape(); if (onlySelectedShape && editor.isShapeOfType(onlySelectedShape, "image")) { return false; } return true; }, [editor] ); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "flatten-to-image" }); } function DownloadOriginalMenuItem() { const editor = (0, import_editor.useEditor)(); const shouldDisplay = (0, import_editor.useValue)( "should display download original option", () => { const selectedShapes = editor.getSelectedShapes(); if (selectedShapes.length === 0) return false; return selectedShapes.some((shape) => (0, import_actions.supportsDownloadingOriginal)(shape, editor)); }, [editor] ); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "download-original" }); } function GroupMenuItem() { const shouldDisplay = (0, import_menu_hooks.useAllowGroup)(); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "group" }); } function UngroupMenuItem() { const shouldDisplay = (0, import_menu_hooks.useAllowUngroup)(); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "ungroup" }); } function RemoveFrameMenuItem() { const editor = (0, import_editor.useEditor)(); const shouldDisplay = (0, import_editor.useValue)( "allow unframe", () => { const selectedShapes = editor.getSelectedShapes(); if (selectedShapes.length === 0) return false; return selectedShapes.every((shape) => editor.isShapeOfType(shape, "frame")); }, [editor] ); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "remove-frame" }); } function FitFrameToContentMenuItem() { const editor = (0, import_editor.useEditor)(); const shouldDisplay = (0, import_editor.useValue)( "allow fit frame to content", () => { const onlySelectedShape = editor.getOnlySelectedShape(); if (!onlySelectedShape) return false; return editor.isShapeOfType(onlySelectedShape, "frame") && editor.getSortedChildIdsForParent(onlySelectedShape).length > 0; }, [editor] ); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "fit-frame-to-content" }); } function ToggleLockMenuItem() { const editor = (0, import_editor.useEditor)(); const shouldDisplay = (0, import_editor.useValue)("selected shapes", () => editor.getSelectedShapes().length > 0, [ editor ]); if (!shouldDisplay) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "toggle-lock" }); } function ToggleTransparentBgMenuItem() { const editor = (0, import_editor.useEditor)(); const isTransparentBg = (0, import_editor.useValue)( "isTransparentBg", () => !editor.getInstanceState().exportBackground, [editor] ); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-transparent", checked: isTransparentBg, toggle: true } ); } function UnlockAllMenuItem() { const editor = (0, import_editor.useEditor)(); const shouldDisplay = (0, import_editor.useValue)("any shapes", () => editor.getCurrentPageShapeIds().size > 0, [ editor ]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "unlock-all", disabled: !shouldDisplay }); } function ZoomTo100MenuItem() { const editor = (0, import_editor.useEditor)(); const isZoomedTo100 = (0, import_editor.useValue)("zoomed to 100", () => editor.getEfficientZoomLevel() === 1, [ editor ]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "zoom-to-100", noClose: true, disabled: isZoomedTo100 }); } function ZoomToFitMenuItem() { const editor = (0, import_editor.useEditor)(); const hasShapes = (0, import_editor.useValue)("has shapes", () => editor.getCurrentPageShapeIds().size > 0, [editor]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "zoom-to-fit", disabled: !hasShapes, "data-testid": "minimap.zoom-menu.zoom-to-fit", noClose: true } ); } function ZoomToSelectionMenuItem() { const canApplySelectionAction = (0, import_menu_hooks.useCanApplySelectionAction)(); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "zoom-to-selection", disabled: !canApplySelectionAction, "data-testid": "minimap.zoom-menu.zoom-to-selection", noClose: true } ); } function ClipboardMenuGroup() { return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "clipboard", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CutMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CopyMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PasteMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DuplicateMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DeleteMenuItem, {}) ] }); } function CopyAsMenuGroup() { const editor = (0, import_editor.useEditor)(); const atLeastOneShapeOnPage = (0, import_editor.useValue)( "atLeastOneShapeOnPage", () => editor.getCurrentPageShapeIds().size > 0, [editor] ); return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)( import_TldrawUiMenuSubmenu.TldrawUiMenuSubmenu, { id: "copy-as", label: "context-menu.copy-as", size: "small", disabled: !atLeastOneShapeOnPage, children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "copy-as-group", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "copy-as-svg" }), Boolean(window.navigator.clipboard?.write) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "copy-as-png" }) ] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "copy-as-bg", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ToggleTransparentBgMenuItem, {}) }) ] } ); } function CutMenuItem() { const canApplySelectionAction = (0, import_menu_hooks.useCanApplySelectionAction)(); const hasUnlockedShapes = (0, import_menu_hooks.useUnlockedSelectedShapesCount)(1); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "cut", disabled: !canApplySelectionAction || !hasUnlockedShapes } ); } function CopyMenuItem() { const canApplySelectionAction = (0, import_menu_hooks.useCanApplySelectionAction)(); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "copy", disabled: !canApplySelectionAction }); } function PasteMenuItem() { const shouldDisplay = import_menu_hooks.showMenuPaste; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "paste", disabled: !shouldDisplay }); } function ConversionsMenuGroup() { const editor = (0, import_editor.useEditor)(); const atLeastOneShapeOnPage = (0, import_editor.useValue)( "atLeastOneShapeOnPage", () => editor.getCurrentPageShapeIds().size > 0, [editor] ); if (!atLeastOneShapeOnPage) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "conversions", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CopyAsMenuGroup, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuSubmenu.TldrawUiMenuSubmenu, { id: "export-as", label: "context-menu.export-as", size: "small", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "export-as-group", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "export-as-svg" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "export-as-png" }) ] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "export-as-bg", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ToggleTransparentBgMenuItem, {}) }) ] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DownloadOriginalMenuItem, {}) ] }); } function SelectAllMenuItem() { const editor = (0, import_editor.useEditor)(); const atLeastOneShapeOnPage = (0, import_editor.useValue)( "atLeastOneShapeOnPage", () => editor.getCurrentPageShapeIds().size > 0, [editor] ); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "select-all", disabled: !atLeastOneShapeOnPage }); } function DeleteMenuItem() { const canApplySelectionAction = (0, import_menu_hooks.useCanApplySelectionAction)(); const hasUnlockedShapes = (0, import_menu_hooks.useUnlockedSelectedShapesCount)(1); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "delete", disabled: !canApplySelectionAction || !hasUnlockedShapes } ); } function EditMenuSubmenu() { const isReadonlyMode = (0, import_useReadonly.useReadonly)(); if (!(0, import_menu_hooks.useAnySelectedShapesCount)(1)) return null; if (isReadonlyMode) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuSubmenu.TldrawUiMenuSubmenu, { id: "edit", label: "context-menu.edit", size: "small", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GroupMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UngroupMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FlattenMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EditLinkMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FitFrameToContentMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RemoveFrameMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConvertToEmbedMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConvertToBookmarkMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ToggleAutoSizeMenuItem, {}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ToggleLockMenuItem, {}) ] }); } function ArrangeMenuSubmenu() { const twoSelected = (0, import_menu_hooks.useUnlockedSelectedShapesCount)(2); const onlyFlippableShapeSelected = (0, import_menu_hooks.useOnlyFlippableShape)(); const isReadonlyMode = (0, import_useReadonly.useReadonly)(); if (isReadonlyMode) return null; if (!(twoSelected || onlyFlippableShapeSelected)) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuSubmenu.TldrawUiMenuSubmenu, { id: "arrange", label: "context-menu.arrange", size: "small", children: [ twoSelected && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "align", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "align-left" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "align-center-horizontal" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "align-right" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "align-top" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "align-center-vertical" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "align-bottom" }) ] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DistributeMenuGroup, {}), twoSelected && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "stretch", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "stretch-horizontal" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "stretch-vertical" }) ] }), (twoSelected || onlyFlippableShapeSelected) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "flip", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "flip-horizontal" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "flip-vertical" }) ] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(OrderMenuGroup, {}) ] }); } function DistributeMenuGroup() { const threeSelected = (0, import_menu_hooks.useUnlockedSelectedShapesCount)(3); if (!threeSelected) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "distribute", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "distribute-horizontal" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "distribute-vertical" }) ] }); } function OrderMenuGroup() { const twoSelected = (0, import_menu_hooks.useUnlockedSelectedShapesCount)(2); const threeStackableItems = (0, import_menu_hooks.useThreeStackableItems)(); if (!twoSelected) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "order", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "pack" }), threeStackableItems && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "stack-horizontal" }), threeStackableItems && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "stack-vertical" }) ] }); } function ReorderMenuSubmenu() { const isReadonlyMode = (0, import_useReadonly.useReadonly)(); const oneSelected = (0, import_menu_hooks.useUnlockedSelectedShapesCount)(1); if (isReadonlyMode) return null; if (!oneSelected) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuSubmenu.TldrawUiMenuSubmenu, { id: "reorder", label: "context-menu.reorder", size: "small", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "reorder", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "bring-to-front" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "bring-forward" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "send-backward" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "send-to-back" }) ] }) }); } function MoveToPageMenu() { const editor = (0, import_editor.useEditor)(); const pages = (0, import_editor.useValue)("pages", () => editor.getPages(), [editor]); const currentPageId = (0, import_editor.useValue)("current page id", () => editor.getCurrentPageId(), [editor]); const { addToast } = (0, import_toasts.useToasts)(); const trackEvent = (0, import_events.useUiEvents)(); const isReadonlyMode = (0, import_useReadonly.useReadonly)(); const oneSelected = (0, import_menu_hooks.useUnlockedSelectedShapesCount)(1); if (!oneSelected) return null; if (isReadonlyMode) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_TldrawUiMenuSubmenu.TldrawUiMenuSubmenu, { id: "move-to-page", label: "context-menu.move-to-page", size: "small", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "pages", children: pages.map((page) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuItem.TldrawUiMenuItem, { id: page.id, disabled: currentPageId === page.id, label: page.name.length > 30 ? `${page.name.slice(0, 30)}\u2026` : page.name, onSelect: () => { editor.markHistoryStoppingPoint("move_shapes_to_page"); editor.moveShapesToPage(editor.getSelectedShapeIds(), page.id); const toPage = editor.getPage(page.id); if (toPage) { addToast({ title: "Changed page", description: `Moved to ${toPage.name}.`, actions: [ { label: "Go back", type: "primary", onClick: () => { editor.markHistoryStoppingPoint("change-page"); editor.setCurrentPage(currentPageId); } } ] }); } trackEvent("move-to-page", { source: "context-menu" }); } }, page.id )) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuGroup.TldrawUiMenuGroup, { id: "new-page", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "move-to-new-page" }) }) ] }); } function ConvertToBookmarkMenuItem() { const editor = (0, import_editor.useEditor)(); const oneEmbedSelected = (0, import_editor.useValue)( "oneEmbedSelected", () => { const onlySelectedShape = editor.getOnlySelectedShape(); if (!onlySelectedShape) return false; return !!(editor.isShapeOfType(onlySelectedShape, "embed") && onlySelectedShape.props.url && !editor.isShapeOrAncestorLocked(onlySelectedShape)); }, [editor] ); if (!oneEmbedSelected) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "convert-to-bookmark" }); } function ConvertToEmbedMenuItem() { const editor = (0, import_editor.useEditor)(); const getEmbedDefinition = (0, import_useGetEmbedDefinition.useGetEmbedDefinition)(); const oneEmbeddableBookmarkSelected = (0, import_editor.useValue)( "oneEmbeddableBookmarkSelected", () => { const onlySelectedShape = editor.getOnlySelectedShape(); if (!onlySelectedShape) return false; return !!(editor.isShapeOfType(onlySelectedShape, "bookmark") && onlySelectedShape.props.url && getEmbedDefinition(onlySelectedShape.props.url) && !editor.isShapeOrAncestorLocked(onlySelectedShape)); }, [editor] ); if (!oneEmbeddableBookmarkSelected) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "convert-to-embed" }); } function ToggleSnapModeItem() { const editor = (0, import_editor.useEditor)(); const isSnapMode = (0, import_editor.useValue)("isSnapMode", () => editor.user.getIsSnapMode(), [editor]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-snap-mode", checked: isSnapMode }); } function ToggleToolLockItem() { const editor = (0, import_editor.useEditor)(); const isToolLock = (0, import_editor.useValue)("isToolLock", () => editor.getInstanceState().isToolLocked, [editor]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-tool-lock", checked: isToolLock }); } function ToggleGridItem() { const editor = (0, import_editor.useEditor)(); const isGridMode = (0, import_editor.useValue)("isGridMode", () => editor.getInstanceState().isGridMode, [editor]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-grid", checked: isGridMode }); } function ToggleWrapModeItem() { const editor = (0, import_editor.useEditor)(); const isWrapMode = (0, import_editor.useValue)("isWrapMode", () => editor.user.getIsWrapMode(), [editor]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-wrap-mode", checked: isWrapMode }); } function ToggleDarkModeItem() { const editor = (0, import_editor.useEditor)(); const isDarkMode = (0, import_editor.useValue)("isDarkMode", () => editor.user.getIsDarkMode(), [editor]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-dark-mode", checked: isDarkMode }); } function ToggleFocusModeItem() { const editor = (0, import_editor.useEditor)(); const isFocusMode = (0, import_editor.useValue)("isFocusMode", () => editor.getInstanceState().isFocusMode, [editor]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-focus-mode", checked: isFocusMode }); } function ToggleEdgeScrollingItem() { const editor = (0, import_editor.useEditor)(); const edgeScrollSpeed = (0, import_editor.useValue)("edgeScrollSpeed", () => editor.user.getEdgeScrollSpeed(), [ editor ]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-edge-scrolling", checked: edgeScrollSpeed === 1 } ); } function ToggleInvertZoomItem() { const editor = (0, import_editor.useEditor)(); const isMouseInputMode = (0, import_editor.useValue)( "inputMode", () => editor.user.getUserPreferences().inputMode === "mouse", [editor] ); const isZoomDirectionInverted = (0, import_editor.useValue)( "isZoomDirectionInverted", () => editor.user.getIsZoomDirectionInverted(), [editor] ); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-invert-zoom", checked: isZoomDirectionInverted, disabled: !isMouseInputMode } ); } function ToggleReduceMotionItem() { const editor = (0, import_editor.useEditor)(); const animationSpeed = (0, import_editor.useValue)("animationSpeed", () => editor.user.getAnimationSpeed(), [editor]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-reduce-motion", checked: animationSpeed === 0 } ); } function ToggleKeyboardShortcutsItem() { const editor = (0, import_editor.useEditor)(); const keyboardShortcuts = (0, import_editor.useValue)( "keyboardShortcuts", () => editor.user.getAreKeyboardShortcutsEnabled(), [editor] ); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-keyboard-shortcuts", checked: keyboardShortcuts } ); } function ToggleEnhancedA11yModeItem() { const editor = (0, import_editor.useEditor)(); const enhancedA11yMode = (0, import_editor.useValue)("enhancedA11yMode", () => editor.user.getEnhancedA11yMode(), [ editor ]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "enhanced-a11y-mode", checked: enhancedA11yMode }); } function ToggleDebugModeItem() { const editor = (0, import_editor.useEditor)(); const isDebugMode = (0, import_editor.useValue)("isDebugMode", () => editor.getInstanceState().isDebugMode, [editor]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-debug-mode", checked: isDebugMode }); } function ToggleDynamicSizeModeItem() { const editor = (0, import_editor.useEditor)(); const isDynamicResizeMode = (0, import_editor.useValue)( "dynamic resize", () => editor.user.getIsDynamicResizeMode(), [editor] ); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-dynamic-size-mode", checked: isDynamicResizeMode } ); } function TogglePasteAtCursorItem() { const editor = (0, import_editor.useEditor)(); const pasteAtCursor = (0, import_editor.useValue)("paste at cursor", () => editor.user.getIsPasteAtCursorMode(), [ editor ]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionCheckboxItem.TldrawUiMenuActionCheckboxItem, { actionId: "toggle-paste-at-cursor", checked: pasteAtCursor }); } function PrintItem() { const editor = (0, import_editor.useEditor)(); const emptyPage = (0, import_editor.useValue)("emptyPage", () => editor.getCurrentPageShapeIds().size === 0, [ editor ]); return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "print", disabled: emptyPage }); } function CursorChatItem() { const editor = (0, import_editor.useEditor)(); const shouldShow = (0, import_editor.useValue)( "show cursor chat", () => editor.getCurrentToolId() === "select" && !editor.getInstanceState().isCoarsePointer, [editor] ); if (!shouldShow) return null; return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiMenuActionItem.TldrawUiMenuActionItem, { actionId: "open-cursor-chat" }); } //# sourceMappingURL=menu-items.js.map