@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
26 lines (25 loc) • 1.03 kB
JavaScript
"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