UNPKG

@payfit/unity-components

Version:

37 lines (36 loc) • 1.14 kB
import { areScrollEdgesEqual as e, emptyScrollEdges as t, getScrollEdges as n } from "../utils/scroll-edges.js"; import { useCallback as r, useLayoutEffect as i, useRef as a, useState as o } from "react"; //#region src/core/hooks/use-scroll-edges.ts function s({ axis: s = "both" } = {}) { let c = a(null), [l, u] = o(t), d = r(() => { let r = c.current, i = r ? n(r, s) : t; u((t) => e(t, i) ? t : i); }, [s]), f = r(() => { d(); }, [d]); return i(() => { let e = c.current; if (!e) return; d(); let t = requestAnimationFrame(d), n = typeof ResizeObserver > "u" ? void 0 : new ResizeObserver(d), r = typeof MutationObserver > "u" ? void 0 : new MutationObserver(() => { i(), d(); }), i = () => { n?.disconnect(), n?.observe(e), e.querySelectorAll("*").forEach((e) => n?.observe(e)); }; return i(), r?.observe(e, { attributes: !0, childList: !0, subtree: !0, characterData: !0 }), () => { cancelAnimationFrame(t), n?.disconnect(), r?.disconnect(); }; }, [d]), { scrollEdges: l, scrollRef: c, refreshScrollEdges: d, onScroll: f }; } //#endregion export { s as useScrollEdges };