UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

26 lines (25 loc) 1.03 kB
"use client"; let react = require("react"); //#region packages/@mantine/hooks/src/use-click-outside/use-click-outside.ts const DEFAULT_EVENTS = ["mousedown", "touchstart"]; function useClickOutside(callback, events, nodes) { const ref = (0, react.useRef)(null); const eventsList = events || DEFAULT_EVENTS; const listener = (0, react.useEffectEvent)((event) => { const { target } = event ?? {}; if (Array.isArray(nodes)) { const shouldIgnore = !document.body.contains(target) && target?.tagName !== "HTML"; nodes.every((node) => !!node && !event.composedPath().includes(node)) && !shouldIgnore && callback(event); } else if (ref.current && !ref.current.contains(target)) callback(event); }); (0, react.useEffect)(() => { eventsList.forEach((fn) => document.addEventListener(fn, listener)); return () => { eventsList.forEach((fn) => document.removeEventListener(fn, listener)); }; }, []); return ref; } //#endregion exports.useClickOutside = useClickOutside; //# sourceMappingURL=use-click-outside.cjs.map