fix: stabilize local edit prompt input
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-05-19 14:55:37 +08:00
parent a5b3e35df9
commit 7792d1a740

View File

@ -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 ? (
<input
autoFocus={editingLocalEditRegionId === region.id}
className="h-9 min-w-0 flex-1 rounded-full border border-slate-200 bg-white/95 px-3 text-[12px] font-medium text-slate-900 shadow-[0_10px_24px_rgba(15,23,42,0.14)] outline-none ring-2 ring-transparent transition placeholder:text-slate-400 focus:border-emerald-400 focus:ring-emerald-300/35 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={() => {
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}
/>