Files
1hew f492675b25 v3.10.0 chore(release): 添加 Image Alpha Join 并修复媒体预览
补充 Image Solid 256x256 预设,并修复 Load Image / Load Video / Load Video to Image 的预览显示、交互与旧工作流兼容问题。
2026-04-16 02:55:21 +08:00

74 lines
2.3 KiB
JavaScript

function setElementPointerEvents(element, pointerEvents) {
if (element?.style) {
element.style.pointerEvents = pointerEvents;
}
}
export function createDomWidgetInteractionManager({
getWidgetElement,
container,
interactiveElements = [],
idlePointerEvents = "none",
dragPointerEvents = "auto",
}) {
const elements = [container, ...interactiveElements];
let dragDepth = 0;
const setDragPassthrough = (active) => {
const pointerEvents = active ? dragPointerEvents : idlePointerEvents;
for (const element of elements) {
setElementPointerEvents(element, pointerEvents);
}
setElementPointerEvents(getWidgetElement?.(), pointerEvents);
};
const resetDragPassthrough = () => {
dragDepth = 0;
setDragPassthrough(false);
};
const handleGlobalDragCleanup = () => {
resetDragPassthrough();
};
const bindGlobalDragCleanup = () => {
window.addEventListener("dragend", handleGlobalDragCleanup, true);
window.addEventListener("drop", handleGlobalDragCleanup, true);
return () => {
window.removeEventListener("dragend", handleGlobalDragCleanup, true);
window.removeEventListener("drop", handleGlobalDragCleanup, true);
};
};
const bindDragTargets = (targets, handlers) => {
for (const target of targets) {
target.addEventListener("dragenter", handlers.dragenter);
target.addEventListener("dragover", handlers.dragover);
target.addEventListener("dragleave", handlers.dragleave);
target.addEventListener("drop", handlers.drop);
}
return () => {
for (const target of targets) {
target.removeEventListener("dragenter", handlers.dragenter);
target.removeEventListener("dragover", handlers.dragover);
target.removeEventListener("dragleave", handlers.dragleave);
target.removeEventListener("drop", handlers.drop);
}
};
};
return {
get dragDepth() {
return dragDepth;
},
set dragDepth(value) {
dragDepth = Math.max(0, Number(value) || 0);
},
setDragPassthrough,
resetDragPassthrough,
bindGlobalDragCleanup,
bindDragTargets,
};
}