export function clickOutside(node: HTMLElement): { destroy: () => void } { function handleClick(event: MouseEvent) { if (node && !node.contains(event.target as Node) && !event.defaultPrevented) { node.dispatchEvent(new CustomEvent('clickoutside')); } } // Capture phase (true) ensures this fires before any child stopPropagation() calls. document.addEventListener('click', handleClick, true); return { destroy() { document.removeEventListener('click', handleClick, true); } }; }