From b13d22338bdac87d7019cec1708cfcdcf2ad2b3e Mon Sep 17 00:00:00 2001 From: lucaronin Date: Fri, 10 Apr 2026 11:37:52 +0200 Subject: [PATCH] fix: support localized ai panel shortcut --- src/hooks/appKeyboardShortcuts.ts | 3 ++- src/hooks/useAppKeyboard.test.ts | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/hooks/appKeyboardShortcuts.ts b/src/hooks/appKeyboardShortcuts.ts index 5cfd1543..60a0ac21 100644 --- a/src/hooks/appKeyboardShortcuts.ts +++ b/src/hooks/appKeyboardShortcuts.ts @@ -121,7 +121,8 @@ export function handleCommandKey(e: KeyboardEvent, keyMap: ShortcutMap): boolean } export function handleAiPanelKey(e: KeyboardEvent, onToggleAIChat?: () => void): boolean { - if (isCommandShiftOnly(e) === false || e.key.toLowerCase() !== 'l' || onToggleAIChat === undefined) return false + const matchesAiPanelShortcut = e.code === 'KeyL' || e.key.toLowerCase() === 'l' + if (isCommandShiftOnly(e) === false || matchesAiPanelShortcut === false || onToggleAIChat === undefined) return false e.preventDefault() onToggleAIChat() return true diff --git a/src/hooks/useAppKeyboard.test.ts b/src/hooks/useAppKeyboard.test.ts index 125e21c4..ecf701eb 100644 --- a/src/hooks/useAppKeyboard.test.ts +++ b/src/hooks/useAppKeyboard.test.ts @@ -2,17 +2,21 @@ import { describe, it, expect, vi, afterEach } from 'vitest' import { renderHook } from '@testing-library/react' import { useAppKeyboard } from './useAppKeyboard' -function fireKey(key: string, mods: { altKey?: boolean; metaKey?: boolean; ctrlKey?: boolean; shiftKey?: boolean } = {}) { +function fireKey( + key: string, + mods: { altKey?: boolean; metaKey?: boolean; ctrlKey?: boolean; shiftKey?: boolean; code?: string } = {}, +) { fireKeyOnTarget(window, key, mods) } function fireKeyOnTarget( target: EventTarget, key: string, - mods: { altKey?: boolean; metaKey?: boolean; ctrlKey?: boolean; shiftKey?: boolean } = {}, + mods: { altKey?: boolean; metaKey?: boolean; ctrlKey?: boolean; shiftKey?: boolean; code?: string } = {}, ) { const event = new KeyboardEvent('keydown', { key, + code: mods.code, altKey: mods.altKey ?? false, metaKey: mods.metaKey ?? false, ctrlKey: mods.ctrlKey ?? false, @@ -237,6 +241,14 @@ describe('useAppKeyboard', () => { }) }) + it('Cmd+Shift+L matches by physical key code when the localized key differs', () => { + const actions = makeActions() + const onToggleAIChat = vi.fn() + renderHook(() => useAppKeyboard({ ...actions, onToggleAIChat })) + fireKey('¬', { code: 'KeyL', metaKey: true, shiftKey: true }) + expect(onToggleAIChat).toHaveBeenCalled() + }) + it('Ctrl+Shift+L does not trigger toggle AI chat', () => { const actions = makeActions() const onToggleAIChat = vi.fn()