fix: protect local edit prompt input
This commit is contained in:
parent
fc73057935
commit
dce4e6c68a
@ -287,6 +287,21 @@ const LOCAL_EDIT_COLORS = [
|
|||||||
const isLocalEditControlTarget = (target: EventTarget | null) =>
|
const isLocalEditControlTarget = (target: EventTarget | null) =>
|
||||||
target instanceof HTMLElement &&
|
target instanceof HTMLElement &&
|
||||||
Boolean(target.closest('[data-local-edit-control="true"]'));
|
Boolean(target.closest('[data-local-edit-control="true"]'));
|
||||||
|
const stopLocalEditPromptTextEvent = (
|
||||||
|
event: React.SyntheticEvent<HTMLElement>
|
||||||
|
) => {
|
||||||
|
event.stopPropagation();
|
||||||
|
stopLocalEditPromptNativeEvent(event);
|
||||||
|
};
|
||||||
|
const stopLocalEditPromptNativeEvent = (
|
||||||
|
event: React.SyntheticEvent<HTMLElement>
|
||||||
|
) => {
|
||||||
|
const nativeEvent = event.nativeEvent as Event & {
|
||||||
|
stopImmediatePropagation?: () => void;
|
||||||
|
};
|
||||||
|
nativeEvent.stopPropagation?.();
|
||||||
|
nativeEvent.stopImmediatePropagation?.();
|
||||||
|
};
|
||||||
const FLOATING_TOOLBAR_SCALE = 0.8;
|
const FLOATING_TOOLBAR_SCALE = 0.8;
|
||||||
const IMAGE_EDIT_PANEL_SCALE = 0.5;
|
const IMAGE_EDIT_PANEL_SCALE = 0.5;
|
||||||
const ANGLE_PANEL_SCALE = 0.65;
|
const ANGLE_PANEL_SCALE = 0.65;
|
||||||
@ -7995,6 +8010,7 @@ export function ImageNode({
|
|||||||
autoComplete="off"
|
autoComplete="off"
|
||||||
enterKeyHint="done"
|
enterKeyHint="done"
|
||||||
lang="zh-CN"
|
lang="zh-CN"
|
||||||
|
onBeforeInputCapture={stopLocalEditPromptNativeEvent}
|
||||||
onBlur={(event) => {
|
onBlur={(event) => {
|
||||||
const nextPrompt = event.currentTarget.value;
|
const nextPrompt = event.currentTarget.value;
|
||||||
localEditPromptDraftRefs.current[region.id] =
|
localEditPromptDraftRefs.current[region.id] =
|
||||||
@ -8021,20 +8037,23 @@ export function ImageNode({
|
|||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.currentTarget.focus({ preventScroll: true });
|
event.currentTarget.focus({ preventScroll: true });
|
||||||
}}
|
}}
|
||||||
|
onCompositionEndCapture={stopLocalEditPromptNativeEvent}
|
||||||
onCompositionEnd={(event) => {
|
onCompositionEnd={(event) => {
|
||||||
event.stopPropagation();
|
stopLocalEditPromptTextEvent(event);
|
||||||
localEditPromptComposingRefs.current[region.id] =
|
localEditPromptComposingRefs.current[region.id] =
|
||||||
false;
|
false;
|
||||||
localEditPromptDraftRefs.current[region.id] =
|
localEditPromptDraftRefs.current[region.id] =
|
||||||
event.currentTarget.value;
|
event.currentTarget.value;
|
||||||
}}
|
}}
|
||||||
|
onCompositionStartCapture={stopLocalEditPromptNativeEvent}
|
||||||
onCompositionStart={(event) => {
|
onCompositionStart={(event) => {
|
||||||
event.stopPropagation();
|
stopLocalEditPromptTextEvent(event);
|
||||||
localEditPromptComposingRefs.current[region.id] =
|
localEditPromptComposingRefs.current[region.id] =
|
||||||
true;
|
true;
|
||||||
}}
|
}}
|
||||||
|
onCompositionUpdateCapture={stopLocalEditPromptNativeEvent}
|
||||||
onCompositionUpdate={(event) => {
|
onCompositionUpdate={(event) => {
|
||||||
event.stopPropagation();
|
stopLocalEditPromptTextEvent(event);
|
||||||
}}
|
}}
|
||||||
onFocus={(event) => {
|
onFocus={(event) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
@ -8042,16 +8061,20 @@ export function ImageNode({
|
|||||||
current === region.id ? current : region.id
|
current === region.id ? current : region.id
|
||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
|
onInputCapture={stopLocalEditPromptNativeEvent}
|
||||||
onInput={(event) => {
|
onInput={(event) => {
|
||||||
|
stopLocalEditPromptTextEvent(event);
|
||||||
localEditPromptDraftRefs.current[region.id] =
|
localEditPromptDraftRefs.current[region.id] =
|
||||||
event.currentTarget.value;
|
event.currentTarget.value;
|
||||||
}}
|
}}
|
||||||
onChange={(event) => {
|
onChange={(event) => {
|
||||||
|
stopLocalEditPromptTextEvent(event);
|
||||||
localEditPromptDraftRefs.current[region.id] =
|
localEditPromptDraftRefs.current[region.id] =
|
||||||
event.currentTarget.value;
|
event.currentTarget.value;
|
||||||
}}
|
}}
|
||||||
|
onKeyDownCapture={stopLocalEditPromptNativeEvent}
|
||||||
onKeyDown={(event) => {
|
onKeyDown={(event) => {
|
||||||
event.stopPropagation();
|
stopLocalEditPromptTextEvent(event);
|
||||||
const isComposing =
|
const isComposing =
|
||||||
event.nativeEvent.isComposing ||
|
event.nativeEvent.isComposing ||
|
||||||
event.key === "Process" ||
|
event.key === "Process" ||
|
||||||
@ -8059,7 +8082,10 @@ export function ImageNode({
|
|||||||
if (isComposing) {
|
if (isComposing) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (event.key === "Enter") {
|
if (
|
||||||
|
event.key === "Enter" &&
|
||||||
|
(event.metaKey || event.ctrlKey)
|
||||||
|
) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
persistLocalEditRegionPrompt(
|
persistLocalEditRegionPrompt(
|
||||||
region.id,
|
region.id,
|
||||||
@ -8076,8 +8102,9 @@ export function ImageNode({
|
|||||||
setEditingLocalEditRegionId(null);
|
setEditingLocalEditRegionId(null);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
onKeyUpCapture={stopLocalEditPromptNativeEvent}
|
||||||
onKeyUp={(event) => {
|
onKeyUp={(event) => {
|
||||||
event.stopPropagation();
|
stopLocalEditPromptTextEvent(event);
|
||||||
}}
|
}}
|
||||||
onMouseDown={(event) => {
|
onMouseDown={(event) => {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
@ -8093,6 +8120,7 @@ export function ImageNode({
|
|||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.currentTarget.focus({ preventScroll: true });
|
event.currentTarget.focus({ preventScroll: true });
|
||||||
}}
|
}}
|
||||||
|
onPasteCapture={stopLocalEditPromptNativeEvent}
|
||||||
placeholder={`区域 ${region.index} 提示词`}
|
placeholder={`区域 ${region.index} 提示词`}
|
||||||
ref={(input) => {
|
ref={(input) => {
|
||||||
localEditPromptInputRefs.current[region.id] = input;
|
localEditPromptInputRefs.current[region.id] = input;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user