/** Dispatch event on click outside of node */ | |
namespace svelte.JSX { | |
interface HTMLProps<T> { | |
onclick_outside?: (e: CustomEvent) => void; | |
} | |
} | |
export function clickOutside(node: Node) { | |
const handleClick = (event: MouseEvent) => { | |
if ( | |
node && | |
!node.contains(event.target as Node) && | |
!event.defaultPrevented | |
) { | |
node.dispatchEvent(new CustomEvent("click_outside", node as any)); | |
} | |
}; | |
document.addEventListener("click", handleClick, true); | |
return { | |
destroy() { | |
document.removeEventListener("click", handleClick, true); | |
} | |
}; | |
} | |