From 7792d1a740b9c722b0d0fa1de24268f68710b2b2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 19 May 2026 14:55:37 +0800 Subject: [PATCH] fix: stabilize local edit prompt input --- components/canvas/nodes/ImageNode.tsx | 32 ++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/components/canvas/nodes/ImageNode.tsx b/components/canvas/nodes/ImageNode.tsx index d9d0a7003..d8a79e892 100644 --- a/components/canvas/nodes/ImageNode.tsx +++ b/components/canvas/nodes/ImageNode.tsx @@ -3361,6 +3361,19 @@ export function ImageNode({ ); const updateLocalEditRegionPrompt = useCallback( + (regionId: string, prompt: string) => { + setLocalEditRegions((prevRegions) => + reindexLocalEditRegions( + prevRegions.map((region) => + region.id === regionId ? { ...region, prompt } : region + ) + ) + ); + }, + [] + ); + + const persistLocalEditRegionPrompt = useCallback( (regionId: string, prompt: string) => { commitLocalEditRegions( localEditRegions.map((region) => @@ -7526,25 +7539,38 @@ export function ImageNode({ {isEditing ? ( { - if (region.prompt.trim()) { + className="h-9 min-w-0 flex-1 rounded-full border border-slate-300 bg-white/95 px-3 text-[12px] font-medium text-slate-950 shadow-[0_10px_24px_rgba(15,23,42,0.14)] outline-none ring-2 ring-transparent transition placeholder:text-slate-400 focus:border-slate-950 focus:ring-slate-950/15 dark:border-white/20 dark:bg-slate-950/88 dark:text-white dark:placeholder:text-white/42 dark:focus:border-white/40 dark:focus:ring-white/18" + onBlur={(event) => { + const nextPrompt = event.currentTarget.value; + persistLocalEditRegionPrompt(region.id, nextPrompt); + if (nextPrompt.trim()) { setEditingLocalEditRegionId(null); } }} onChange={(event) => updateLocalEditRegionPrompt(region.id, event.target.value) } + onFocus={() => setEditingLocalEditRegionId(region.id)} onKeyDown={(event) => { + event.stopPropagation(); if (event.key === "Enter") { event.preventDefault(); + persistLocalEditRegionPrompt( + region.id, + event.currentTarget.value + ); setEditingLocalEditRegionId(null); } if (event.key === "Escape") { event.preventDefault(); + persistLocalEditRegionPrompt( + region.id, + event.currentTarget.value + ); setEditingLocalEditRegionId(null); } }} + onKeyUp={(event) => event.stopPropagation()} placeholder={`区域 ${region.index} 提示词`} value={region.prompt} />