diff --git a/desktop/generated/menu.json b/desktop/generated/menu.json index 3f394aeaf..a59854eff 100644 --- a/desktop/generated/menu.json +++ b/desktop/generated/menu.json @@ -175,7 +175,8 @@ }, { "id": "dev-tools", - "label": "Developer Tools" + "label": "Developer Tools", + "accelerator": "CmdOrCtrl+Alt+I" } ] }, diff --git a/src/app/shell/menu/schema.ts b/src/app/shell/menu/schema.ts index 17d69ee07..23345675f 100644 --- a/src/app/shell/menu/schema.ts +++ b/src/app/shell/menu/schema.ts @@ -132,6 +132,7 @@ export const APP_MENU_SCHEMA = [ { id: 'dev-tools', label: 'Developer Tools', + accelerator: 'CmdOrCtrl+Alt+I', target: 'native' } ] diff --git a/tests/engine/app/shell/menu/shortcut.test.ts b/tests/engine/app/shell/menu/shortcut.test.ts new file mode 100644 index 000000000..1c6439cc1 --- /dev/null +++ b/tests/engine/app/shell/menu/shortcut.test.ts @@ -0,0 +1,32 @@ +import { describe, expect, test } from 'bun:test' + +import { + appMenuAccelerator, + appMenuShortcut, + shortcutTokenToAccelerator, + shortcutTokenToTinykeys +} from '@/app/shell/menu/shortcut' + +describe('app menu shortcut conversion', () => { + test('looks up canonical shortcut tokens from the menu schema', () => { + expect(appMenuShortcut('save-as')).toBe('MOD+SHIFT+S') + expect(appMenuShortcut('selection.createComponent')).toBe('MOD+ALT+K') + }) + + test('converts shortcut tokens to tinykeys bindings', () => { + expect(shortcutTokenToTinykeys('MOD+SHIFT+S')).toBe('$mod+Shift+S') + expect(shortcutTokenToTinykeys('ALT+Delete')).toBe('Alt+Delete') + expect(shortcutTokenToTinykeys('⌫')).toBe('Backspace') + }) + + test('converts shortcut tokens to native accelerators', () => { + expect(shortcutTokenToAccelerator('MOD+SHIFT+S')).toBe('CmdOrCtrl+Shift+S') + expect(shortcutTokenToAccelerator('ALT+A')).toBe('Alt+A') + expect(shortcutTokenToAccelerator('⌫')).toBe('Backspace') + }) + + test('derives native accelerators from menu ids', () => { + expect(appMenuAccelerator('save-as')).toBe('CmdOrCtrl+Shift+S') + expect(appMenuAccelerator('selection.delete')).toBe('Backspace') + }) +})