fix: support Chinese input in local edit prompts
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-22 20:41:45 +08:00
parent 1fc37c4a8f
commit a66c3107b9

View File

@ -2046,6 +2046,7 @@ export function ImageNode({
Record<string, HTMLInputElement | null>
>({});
const localEditPromptDraftRefs = useRef<Record<string, string>>({});
const localEditPromptComposingRefs = useRef<Record<string, boolean>>({});
const localEditRegionsRef = useRef<LocalEditRegion[]>(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"
/>
) : (
<button