@sikka/hawa
Version:
Modern UI Kit made with Tailwind
63 lines (59 loc) • 2 kB
JavaScript
"use client";
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
}) : x)(function(x) {
if (typeof require !== "undefined") return require.apply(this, arguments);
throw Error('Dynamic require of "' + x + '" is not supported');
});
// hooks/useBreakpoint.ts
import { useState, useEffect } from "react";
var useBreakpoint = () => {
const [breakpoint, setBreakpoint] = useState(null);
useEffect(() => {
if (typeof window !== "undefined") {
const resize = () => {
setBreakpoint(window.innerWidth);
};
resize();
window.addEventListener("resize", resize);
return () => {
window.removeEventListener("resize", resize);
};
}
}, []);
return breakpoint;
};
// hooks/useClickOutside.ts
import { useEffect as useEffect2, useRef } from "react";
var DEFAULT_EVENTS = ["mousedown", "touchstart"];
function useClickOutside(handler, events, nodes) {
const ref = useRef();
useEffect2(() => {
const listener = (event) => {
const { target } = event != null ? event : {};
if (Array.isArray(nodes)) {
const shouldIgnore = (target == null ? void 0 : target.hasAttribute("data-ignore-outside-clicks")) || !document.body.contains(target) && target.tagName !== "HTML";
const shouldTrigger = nodes.every(
(node) => !!node && !event.composedPath().includes(node)
);
shouldTrigger && !shouldIgnore && handler();
} else if (ref.current && !ref.current.contains(target)) {
handler();
}
};
(events || DEFAULT_EVENTS).forEach(
(fn) => document.addEventListener(fn, listener)
);
return () => {
(events || DEFAULT_EVENTS).forEach(
(fn) => document.removeEventListener(fn, listener)
);
};
}, [ref, handler, nodes]);
return ref;
}
export {
__require,
useBreakpoint,
useClickOutside
};