From 526ae6a4647230177c368fd7aee9b73ed9c159c7 Mon Sep 17 00:00:00 2001 From: Matt Toohey Date: Wed, 15 Apr 2026 09:34:55 +1000 Subject: [PATCH] fix(staged): prevent keyboard shortcuts from capturing input in diff commit textbox The commit textbox uses contentEditable, but keyboard shortcut handlers only checked for INPUT/TEXTAREA elements. Added contentEditable checks so 'a' and 'i' keys (and other shortcuts) don't fire while typing. Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/staged/src/lib/features/diff/DiffModal.svelte | 12 ++++++++++-- packages/diff-viewer/src/lib/utils/diffKeyboard.ts | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/staged/src/lib/features/diff/DiffModal.svelte b/apps/staged/src/lib/features/diff/DiffModal.svelte index 38fa91016..371068803 100644 --- a/apps/staged/src/lib/features/diff/DiffModal.svelte +++ b/apps/staged/src/lib/features/diff/DiffModal.svelte @@ -447,7 +447,11 @@ } // Hold A to reveal AI annotations if (event.key === 'a' || event.key === 'A') { - if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) + if ( + event.target instanceof HTMLInputElement || + event.target instanceof HTMLTextAreaElement || + (event.target instanceof HTMLElement && event.target.isContentEditable) + ) return; if (!event.repeat) { annotationsRevealed = true; @@ -457,7 +461,11 @@ function handleKeyup(event: KeyboardEvent) { if (event.key === 'a' || event.key === 'A') { - if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) + if ( + event.target instanceof HTMLInputElement || + event.target instanceof HTMLTextAreaElement || + (event.target instanceof HTMLElement && event.target.isContentEditable) + ) return; annotationsRevealed = false; } diff --git a/packages/diff-viewer/src/lib/utils/diffKeyboard.ts b/packages/diff-viewer/src/lib/utils/diffKeyboard.ts index df5eed3cf..b256b699c 100644 --- a/packages/diff-viewer/src/lib/utils/diffKeyboard.ts +++ b/packages/diff-viewer/src/lib/utils/diffKeyboard.ts @@ -161,7 +161,8 @@ export function setupDiffKeyboardNav(config: Partial = {}): () => function handleKeydown(event: KeyboardEvent): void { const target = event.target as HTMLElement; - const inInput = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA'; + const inInput = + target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable; const key = event.key.toLowerCase(); const ctrl = event.ctrlKey;