From b5e26923b46a29864dc41a4b65ce6e18751ece98 Mon Sep 17 00:00:00 2001 From: MogamiTsuchikawa Date: Mon, 5 Jan 2026 23:58:00 +0900 Subject: [PATCH] fix(app): avoid unintended submits during IME composition --- packages/app/src/components/prompt-input.tsx | 22 +++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 02f584b99c6..4a3a96d6757 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1,5 +1,17 @@ import { useFilteredList } from "@opencode-ai/ui/hooks" -import { createEffect, on, Component, Show, For, onMount, onCleanup, Switch, Match, createMemo } from "solid-js" +import { + createEffect, + on, + Component, + Show, + For, + onMount, + onCleanup, + Switch, + Match, + createMemo, + createSignal, +} from "solid-js" import { createStore, produce } from "solid-js/store" import { createFocusSignal } from "@solid-primitives/active-element" import { useLocal } from "@/context/local" @@ -246,6 +258,8 @@ export const PromptInput: Component = (props) => { }) const isFocused = createFocusSignal(() => editorRef) + const [composing, setComposing] = createSignal(false) + const isImeComposing = (event: KeyboardEvent) => event.isComposing || composing() || event.keyCode === 229 const addImageAttachment = async (file: File) => { if (!ACCEPTED_FILE_TYPES.includes(file.type)) return @@ -868,6 +882,10 @@ export const PromptInput: Component = (props) => { } } + if (event.key === "Enter" && isImeComposing(event)) { + return + } + if (store.popover && (event.key === "ArrowUp" || event.key === "ArrowDown" || event.key === "Enter")) { if (store.popover === "at") { atOnKeyDown(event) @@ -1489,6 +1507,8 @@ export const PromptInput: Component = (props) => { }} contenteditable="true" onInput={handleInput} + onCompositionStart={() => setComposing(true)} + onCompositionEnd={() => setComposing(false)} onKeyDown={handleKeyDown} classList={{ "select-text": true,