diff options
Diffstat (limited to 'packages/excalidraw/actions/actionMenu.tsx')
| -rw-r--r-- | packages/excalidraw/actions/actionMenu.tsx | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/packages/excalidraw/actions/actionMenu.tsx b/packages/excalidraw/actions/actionMenu.tsx new file mode 100644 index 0000000..9e71fe2 --- /dev/null +++ b/packages/excalidraw/actions/actionMenu.tsx @@ -0,0 +1,81 @@ +import { HamburgerMenuIcon, HelpIconThin, palette } from "../components/icons"; +import { ToolButton } from "../components/ToolButton"; +import { t } from "../i18n"; +import { showSelectedShapeActions, getNonDeletedElements } from "../element"; +import { register } from "./register"; +import { KEYS } from "../keys"; +import { CaptureUpdateAction } from "../store"; + +export const actionToggleCanvasMenu = register({ + name: "toggleCanvasMenu", + label: "buttons.menu", + trackEvent: { category: "menu" }, + perform: (_, appState) => ({ + appState: { + ...appState, + openMenu: appState.openMenu === "canvas" ? null : "canvas", + }, + captureUpdate: CaptureUpdateAction.EVENTUALLY, + }), + PanelComponent: ({ appState, updateData }) => ( + <ToolButton + type="button" + icon={HamburgerMenuIcon} + aria-label={t("buttons.menu")} + onClick={updateData} + selected={appState.openMenu === "canvas"} + /> + ), +}); + +export const actionToggleEditMenu = register({ + name: "toggleEditMenu", + label: "buttons.edit", + trackEvent: { category: "menu" }, + perform: (_elements, appState) => ({ + appState: { + ...appState, + openMenu: appState.openMenu === "shape" ? null : "shape", + }, + captureUpdate: CaptureUpdateAction.EVENTUALLY, + }), + PanelComponent: ({ elements, appState, updateData }) => ( + <ToolButton + visible={showSelectedShapeActions( + appState, + getNonDeletedElements(elements), + )} + type="button" + icon={palette} + aria-label={t("buttons.edit")} + onClick={updateData} + selected={appState.openMenu === "shape"} + /> + ), +}); + +export const actionShortcuts = register({ + name: "toggleShortcuts", + label: "welcomeScreen.defaults.helpHint", + icon: HelpIconThin, + viewMode: true, + trackEvent: { category: "menu", action: "toggleHelpDialog" }, + perform: (_elements, appState, _, { focusContainer }) => { + if (appState.openDialog?.name === "help") { + focusContainer(); + } + return { + appState: { + ...appState, + openDialog: + appState.openDialog?.name === "help" + ? null + : { + name: "help", + }, + }, + captureUpdate: CaptureUpdateAction.EVENTUALLY, + }; + }, + keyTest: (event) => event.key === KEYS.QUESTION_MARK, +}); |
