let draggingElement: HTMLElement | undefined; export function createDragManager(): () => void { const clearDraggingElement = () => { draggingElement = undefined; }; // Add the event listener document.addEventListener("drop", clearDraggingElement); // Return the destructor return () => { // We use setTimeout to sequence this drop after any potential users in the current call stack progression, since this will begin in an entirely new call stack later setTimeout(() => document.removeEventListener("drop", clearDraggingElement), 0); }; } export function beginDraggingElement(element: HTMLElement) { draggingElement = element; } export function currentDraggingElement(): HTMLElement | undefined { return draggingElement; }