UNPKG

@techmely/utils

Version:

Collection of helpful JavaScript / TypeScript utils

63 lines (56 loc) 1.54 kB
'use strict'; /*! * @techmely/utils * Copyright(c) 2021-2024 Techmely <techmely.creation@gmail.com> * MIT Licensed */ // src/invariant.ts var prefix = "Invariant failed"; function invariant(condition, message) { if (condition) { return; } if (typeof message === "string" || typeof message === "function") { const provided = typeof message === "function" ? message() : message; const value = provided ? `${prefix}: ${provided}` : prefix; throw new Error(value); } if (message) throw message; throw new Error(prefix); } // src/isBrowser.ts function isBrowser() { return typeof window !== "undefined"; } // src/useObserverElement.ts function useObserverElement() { invariant(isBrowser()); let observer = null; const callbacks = /* @__PURE__ */ new Map(); const observe = (element, callback) => { if (!observer) { observer = new IntersectionObserver((entries) => { for (const entry of entries) { const callback2 = callbacks.get(entry.target); const isVisible = entry.isIntersecting || entry.intersectionRatio > 0; if (isVisible && callback2) { callback2(); } } }); } callbacks.set(element, callback); observer.observe(element); return () => { callbacks.delete(element); observer?.unobserve(element); if (callbacks.size === 0) { observer?.disconnect(); observer = null; } }; }; return observe; } exports.useObserverElement = useObserverElement;