From 7f7c97d6a991b21c219dd1304fd8da550ee2b646 Mon Sep 17 00:00:00 2001 From: "@daniel-lxs" <57051444+daniel-lxs@users.noreply.github.com> Date: Thu, 15 Oct 2026 05:36:48 +0000 Subject: [PATCH] fix: ignore keyless events in the new session shortcut --- .../layout/side-nav/SideNav.client.test.tsx | 33 +++++++++++++++---- .../components/layout/side-nav/SideNav.tsx | 2 +- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/apps/web/src/components/layout/side-nav/SideNav.client.test.tsx b/apps/web/src/components/layout/side-nav/SideNav.client.test.tsx index 3a0794701a..54ca20ff45 100644 --- a/apps/web/src/components/layout/side-nav/SideNav.client.test.tsx +++ b/apps/web/src/components/layout/side-nav/SideNav.client.test.tsx @@ -493,15 +493,34 @@ describe('SideNav recent sessions', () => { ); }); - it('opens the new session dialog with the desktop N shortcut', () => { - render(); + it.each(['n', 'N'])( + 'opens the new session dialog with the desktop %s shortcut', + (key) => { + render(); - fireEvent.keyDown(document, { key: 'n' }); + fireEvent.keyDown(document, { key }); - expect(screen.getByTestId('new-task-dialog')).toHaveAttribute( - 'data-open', - 'true', - ); + expect(screen.getByTestId('new-task-dialog')).toHaveAttribute( + 'data-open', + 'true', + ); + }, + ); + + it('ignores compatibility keydown events that do not carry a key', () => { + render(); + const onError = vi.fn((event: ErrorEvent) => event.preventDefault()); + window.addEventListener('error', onError); + try { + fireEvent(document, new Event('keydown', { bubbles: true })); + expect(onError).not.toHaveBeenCalled(); + expect(screen.getByTestId('new-task-dialog')).toHaveAttribute( + 'data-open', + 'false', + ); + } finally { + window.removeEventListener('error', onError); + } }); it('does not handle the N shortcut while a text field is focused', () => { diff --git a/apps/web/src/components/layout/side-nav/SideNav.tsx b/apps/web/src/components/layout/side-nav/SideNav.tsx index f6f8338513..49d410374a 100644 --- a/apps/web/src/components/layout/side-nav/SideNav.tsx +++ b/apps/web/src/components/layout/side-nav/SideNav.tsx @@ -125,7 +125,7 @@ export const SideNav = () => { event.metaKey || event.ctrlKey || event.altKey || - event.key.toLowerCase() !== 'n' || + (event.key !== 'n' && event.key !== 'N') || !window.matchMedia('(min-width: 768px)').matches || isEditingText ) {