From f6bc4b9931a35344b71a06be92ff19e1c7969db1 Mon Sep 17 00:00:00 2001 From: d3oxy Date: Tue, 7 Apr 2026 13:59:32 +0530 Subject: [PATCH 1/2] fix(web): prevent number-key shortcuts from hijacking input in focused editor Closes #1794 --- apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx b/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx index 2a1efb4b20..f5f8032c5e 100644 --- a/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx +++ b/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx @@ -98,7 +98,7 @@ const ComposerPendingUserInputCard = memo(function ComposerPendingUserInputCard( if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) { return; } - if (target instanceof HTMLElement && target.isContentEditable) { + if (target instanceof HTMLElement && target.closest('[contenteditable="true"]')) { return; } const digit = Number.parseInt(event.key, 10); From 0b5494e34e883c42edc9fb1d2daf7c2a6d0f069d Mon Sep 17 00:00:00 2001 From: d3oxy Date: Tue, 7 Apr 2026 14:06:07 +0530 Subject: [PATCH 2/2] fix: broaden contenteditable selector to cover all editable states MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses review feedback — the previous selector only matched contenteditable="true" exactly, missing "" and "plaintext-only". Use :not([contenteditable="false"]) to catch all valid editable states while still walking past Lexical's contenteditable="false" mention nodes. --- .../src/components/chat/ComposerPendingUserInputPanel.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx b/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx index f5f8032c5e..acb5c040ca 100644 --- a/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx +++ b/apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx @@ -98,7 +98,10 @@ const ComposerPendingUserInputCard = memo(function ComposerPendingUserInputCard( if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) { return; } - if (target instanceof HTMLElement && target.closest('[contenteditable="true"]')) { + if ( + target instanceof HTMLElement && + target.closest('[contenteditable]:not([contenteditable="false"])') + ) { return; } const digit = Number.parseInt(event.key, 10);