From a66c3107b9fbace897476765cf8f44cba375f045 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 22 May 2026 20:41:45 +0800 Subject: [PATCH] fix: support Chinese input in local edit prompts --- components/canvas/nodes/ImageNode.tsx | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/components/canvas/nodes/ImageNode.tsx b/components/canvas/nodes/ImageNode.tsx index 2354958fe..cedb82195 100644 --- a/components/canvas/nodes/ImageNode.tsx +++ b/components/canvas/nodes/ImageNode.tsx @@ -2046,6 +2046,7 @@ export function ImageNode({ Record >({}); const localEditPromptDraftRefs = useRef>({}); + const localEditPromptComposingRefs = useRef>({}); const localEditRegionsRef = useRef(localEditRegions); const updateNode = useCanvasStore((state) => state.updateNode); @@ -3653,6 +3654,7 @@ export function ImageNode({ const deleteLocalEditRegion = useCallback( (regionId: string) => { delete localEditPromptDraftRefs.current[regionId]; + delete localEditPromptComposingRefs.current[regionId]; commitLocalEditRegions( localEditRegionsRef.current.filter((region) => region.id !== regionId) ); @@ -7990,6 +7992,8 @@ export function ImageNode({ localEditPromptDraftRefs.current[region.id] ?? region.prompt } + autoComplete="off" + inputMode="text" onBlur={(event) => { const nextPrompt = event.currentTarget.value; localEditPromptDraftRefs.current[region.id] = @@ -8017,6 +8021,28 @@ export function ImageNode({ event.stopPropagation(); event.currentTarget.focus({ preventScroll: true }); }} + onBeforeInput={(event) => { + event.nativeEvent.stopImmediatePropagation?.(); + event.stopPropagation(); + }} + onCompositionEnd={(event) => { + event.nativeEvent.stopImmediatePropagation?.(); + event.stopPropagation(); + localEditPromptComposingRefs.current[region.id] = + false; + localEditPromptDraftRefs.current[region.id] = + event.currentTarget.value; + }} + onCompositionStart={(event) => { + event.nativeEvent.stopImmediatePropagation?.(); + event.stopPropagation(); + localEditPromptComposingRefs.current[region.id] = + true; + }} + onCompositionUpdate={(event) => { + event.nativeEvent.stopImmediatePropagation?.(); + event.stopPropagation(); + }} onFocus={(event) => { event.stopPropagation(); setEditingLocalEditRegionId((current) => @@ -8034,6 +8060,13 @@ export function ImageNode({ onKeyDown={(event) => { event.nativeEvent.stopImmediatePropagation?.(); event.stopPropagation(); + const isComposing = + event.nativeEvent.isComposing || + event.key === "Process" || + localEditPromptComposingRefs.current[region.id]; + if (isComposing) { + return; + } if (event.key === "Enter") { event.preventDefault(); persistLocalEditRegionPrompt( @@ -8077,6 +8110,7 @@ export function ImageNode({ ref={(input) => { localEditPromptInputRefs.current[region.id] = input; }} + type="text" /> ) : (