From 3596ab459508361a1a63d9953fe98dd19228b2f2 Mon Sep 17 00:00:00 2001 From: Robin Date: Fri, 30 Oct 2026 12:52:32 +0000 Subject: [PATCH 1/2] fix(hub-ui): dont throw on browser autocomplete --- .../hub-ui/src/client/state/keybindings.test.ts | 14 ++++++++++++++ packages/hub-ui/src/client/state/keybindings.ts | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/hub-ui/src/client/state/keybindings.test.ts b/packages/hub-ui/src/client/state/keybindings.test.ts index d57e2422..3702edf5 100644 --- a/packages/hub-ui/src/client/state/keybindings.test.ts +++ b/packages/hub-ui/src/client/state/keybindings.test.ts @@ -259,3 +259,17 @@ describe('filterCommandsByWhen', () => { expect(filterCommandsByWhen(withWhen, whenContext)).toEqual([]) }) }) + +describe('normalizeKeyEvent', () => { + // Chrome's native autofill dispatches `keydown` events without `key` + it('ignores key events without a key, like Chrome autofill', () => { + const event = { ctrlKey: false, metaKey: false, altKey: false, shiftKey: false } as KeyboardEvent + expect(() => normalizeKeyEvent(event)).not.toThrow() + expect(normalizeKeyEvent(event)).toBe('') + }) + + it('normalizes a regular shortcut', () => { + const event = { key: 'k', ctrlKey: false, metaKey: false, altKey: false, shiftKey: true } as KeyboardEvent + expect(normalizeKeyEvent(event)).toBe('Shift+K') + }) +}) diff --git a/packages/hub-ui/src/client/state/keybindings.ts b/packages/hub-ui/src/client/state/keybindings.ts index 29472c1d..9c73cdb2 100644 --- a/packages/hub-ui/src/client/state/keybindings.ts +++ b/packages/hub-ui/src/client/state/keybindings.ts @@ -30,7 +30,7 @@ export function normalizeKeyEvent(e: KeyboardEvent): string { parts.push('Shift') // Normalize key name - let key = e.key + let key = e.key ?? '' if (key.length === 1) key = key.toUpperCase() From 0b1a6099e90fa7c73ceb7d78c216ecc37cc024d3 Mon Sep 17 00:00:00 2001 From: Robin Date: Fri, 30 Oct 2026 12:56:09 +0000 Subject: [PATCH 2/2] test: add missing import --- packages/hub-ui/src/client/state/keybindings.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hub-ui/src/client/state/keybindings.test.ts b/packages/hub-ui/src/client/state/keybindings.test.ts index 3702edf5..a1e9e28e 100644 --- a/packages/hub-ui/src/client/state/keybindings.test.ts +++ b/packages/hub-ui/src/client/state/keybindings.test.ts @@ -1,7 +1,7 @@ import type { DevframeCommandEntry, DevframeCommandKeybinding } from '@devframes/hub' import type { WhenContext } from 'devframe/utils/when' import { describe, expect, it } from 'vitest' -import { collectAllKeybindings, filterCommandsByWhen, findCommandDeep, findKeybindingConflict, getShortcutRows, walkCommands } from './keybindings' +import { collectAllKeybindings, filterCommandsByWhen, findCommandDeep, findKeybindingConflict, getShortcutRows, normalizeKeyEvent, walkCommands } from './keybindings' describe('findKeybindingConflict', () => { const commands: DevframeCommandEntry[] = [