diff --git a/packages/web-ui/src/components/MessageEditor.ts b/packages/web-ui/src/components/MessageEditor.ts index f0987c4d..9a12f1d0 100644 --- a/packages/web-ui/src/components/MessageEditor.ts +++ b/packages/web-ui/src/components/MessageEditor.ts @@ -60,6 +60,9 @@ export class MessageEditor extends LitElement { }; private handleKeyDown = (e: KeyboardEvent) => { + // Ignore key events during IME composition (e.g. CJK input) + if (e.isComposing || e.key === "Process") return; + if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); if (!this.isStreaming && !this.processingFiles && (this.value.trim() || this.attachments.length > 0)) { diff --git a/packages/web-ui/src/dialogs/ModelSelector.ts b/packages/web-ui/src/dialogs/ModelSelector.ts index 192c3c53..8c864459 100644 --- a/packages/web-ui/src/dialogs/ModelSelector.ts +++ b/packages/web-ui/src/dialogs/ModelSelector.ts @@ -113,6 +113,9 @@ export class ModelSelector extends DialogBase { // Add global keyboard handler for the dialog this.addEventListener("keydown", (e: KeyboardEvent) => { + // Ignore key events during IME composition (e.g. CJK input) + if (e.isComposing || e.key === "Process") return; + // Get filtered models to know the bounds const filteredModels = this.getFilteredModels();