fix(canvas): 模型选择 - 画布拖拽前关闭悬浮菜单

Fixes #138
This commit is contained in:
ddCat
2026-08-05 10:29:45 +08:00
parent 2bf047b8ad
commit 3d00fd3b93

View File

@@ -62,6 +62,19 @@ export function ModelPicker({ config, value, onChange, capability, className, fu
return () => window.removeEventListener("model-picker-open", closeOtherPicker);
}, [pickerId]);
useEffect(() => {
if (!open) return;
// 画布拖拽从 pointerdown 开始,须在捕获阶段关闭 Portal 菜单,避免菜单与触发器分离。
const closeOnOutsidePointer = (event: PointerEvent) => {
const target = event.target;
if (!(target instanceof Node)) return;
if (triggerRef.current?.contains(target) || menuRef.current?.contains(target)) return;
setOpen(false);
};
window.addEventListener("pointerdown", closeOnOutsidePointer, true);
return () => window.removeEventListener("pointerdown", closeOnOutsidePointer, true);
}, [open]);
const setPickerOpen = (nextOpen: boolean) => {
if (nextOpen && !options.length && config.channelMode === "local") onMissingConfig?.();
if (nextOpen) window.dispatchEvent(new CustomEvent("model-picker-open", { detail: pickerId }));