diff options
Diffstat (limited to 'apps/web/src/actions/keybinding.ts')
| -rw-r--r-- | apps/web/src/actions/keybinding.ts | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/apps/web/src/actions/keybinding.ts b/apps/web/src/actions/keybinding.ts index aeec2fd6..a71b7e98 100644 --- a/apps/web/src/actions/keybinding.ts +++ b/apps/web/src/actions/keybinding.ts @@ -32,6 +32,26 @@ export function isKey(value: string): value is Key { return KEY_SET.has(value); } +const MODIFIER_KEYS: readonly ModifierKeys[] = [ + "ctrl", + "alt", + "shift", + "ctrl+shift", + "alt+shift", + "ctrl+alt", + "ctrl+alt+shift", +]; + +export function isShortcutKey(value: string): value is ShortcutKey { + if (isKey(value)) { + return true; + } + const parts = value.split("+"); + const key = parts.at(-1) ?? ""; + const modifiers = parts.slice(0, -1).join("+"); + return (MODIFIER_KEYS as readonly string[]).includes(modifiers) && isKey(key); +} + export type ModifierBasedShortcutKey = `${ModifierKeys}+${Key}`; // Singular keybindings (these will be disabled when an input-ish area has been focused) export type SingleCharacterShortcutKey = `${Key}`; |
