{"version":3,"file":"index.dev.mjs","sources":["../../src/index.tsx"],"sourcesContent":["import 'intersection-observer'\nimport * as React from 'react'\nimport useLayoutEffect from '@react-hook/passive-layout-effect'\n\nfunction useIntersectionObserver(\n target: React.RefObject | T | null,\n options: IntersectionObserverOptions = {}\n): MockIntersectionObserverEntry | IntersectionObserverEntry {\n const {\n root = null,\n pollInterval = null,\n useMutationObserver = false,\n rootMargin = '0px 0px 0px 0px',\n threshold = 0,\n initialIsIntersecting = false,\n } = options\n const [entry, setEntry] = React.useState<\n IntersectionObserverEntry | MockIntersectionObserverEntry\n >(() => ({\n boundingClientRect: null,\n intersectionRatio: 0,\n intersectionRect: null,\n isIntersecting: initialIsIntersecting,\n rootBounds: null,\n target: null,\n time: 0,\n }))\n const [observer, setObserver] = React.useState(() =>\n getIntersectionObserver({\n root,\n pollInterval,\n useMutationObserver,\n rootMargin,\n threshold,\n })\n )\n\n React.useEffect(() => {\n const observer = getIntersectionObserver({\n root,\n pollInterval,\n useMutationObserver,\n rootMargin,\n threshold,\n })\n setObserver(observer)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n root,\n rootMargin,\n pollInterval,\n useMutationObserver,\n JSON.stringify(threshold),\n ])\n\n useLayoutEffect(() => {\n const targetEl = target && 'current' in target ? target.current : target\n if (!observer || !targetEl) return\n let didUnsubscribe = false\n observer.observer.observe(targetEl)\n\n const callback = (entries: IntersectionObserverEntry[]) => {\n if (didUnsubscribe) return\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n if (entry.target === targetEl) {\n setEntry(entry)\n }\n }\n }\n\n observer.subscribe(callback)\n\n return () => {\n didUnsubscribe = true\n observer.observer.unobserve(targetEl)\n observer.unsubscribe(callback)\n }\n }, [target, observer])\n\n return entry\n}\n\nfunction createIntersectionObserver({\n root = null,\n pollInterval = null,\n useMutationObserver = false,\n rootMargin = '0px 0px 0px 0px',\n threshold = 0,\n}: IntersectionObserverOptions) {\n const callbacks: Set = new Set()\n if (typeof IntersectionObserver === 'undefined') return null\n const observer = new IntersectionObserver(\n (entries) => {\n for (const callback of callbacks) callback(entries, observer)\n },\n {root, rootMargin, threshold}\n )\n // @ts-ignore\n observer.POLL_INTERVAL = pollInterval\n // @ts-ignore\n observer.USE_MUTATION_OBSERVER = useMutationObserver\n\n return {\n observer,\n getListeners() {\n return callbacks\n },\n subscribe: (callback: IntersectionObserverCallback) =>\n callbacks.add(callback),\n unsubscribe: (callback: IntersectionObserverCallback) =>\n callbacks.delete(callback),\n }\n}\n\nconst _intersectionObserver: Map<\n HTMLElement | null | undefined,\n Record>\n> = new Map()\n\nfunction getIntersectionObserver(options: IntersectionObserverOptions) {\n const {root, ...keys} = options\n const key = JSON.stringify(keys)\n let base = _intersectionObserver.get(root)\n if (!base) {\n base = {}\n _intersectionObserver.set(root, base)\n }\n return !base[key]\n ? (base[key] = createIntersectionObserver(options))\n : base[key]\n}\n\nexport type UseIntersectionObserverCallback = (\n entry: IntersectionObserverEntry,\n observer: IntersectionObserver\n) => any\n\nexport interface IntersectionObserverOptions {\n root?: HTMLElement | null\n pollInterval?: number | null\n useMutationObserver?: boolean\n rootMargin?: string\n threshold?: number | number[]\n initialIsIntersecting?: boolean\n}\n\nexport interface IntersectionObserverBounds {\n readonly height: number\n readonly width: number\n readonly top: number\n readonly left: number\n readonly right: number\n readonly bottom: number\n}\n\nexport interface MockIntersectionObserverEntry {\n readonly time: number | null\n readonly rootBounds: IntersectionObserverBounds | null\n readonly boundingClientRect: IntersectionObserverBounds | null\n readonly intersectionRect: IntersectionObserverBounds | null\n readonly intersectionRatio: number | null\n readonly target: HTMLElement | null\n readonly isIntersecting: boolean\n}\n\nexport default useIntersectionObserver\n"],"names":["useIntersectionObserver","target","options","root","pollInterval","useMutationObserver","rootMargin","threshold","initialIsIntersecting","entry","setEntry","React","boundingClientRect","intersectionRatio","intersectionRect","isIntersecting","rootBounds","time","observer","setObserver","getIntersectionObserver","JSON","stringify","useLayoutEffect","targetEl","current","didUnsubscribe","observe","callback","entries","i","length","subscribe","unobserve","unsubscribe","createIntersectionObserver","callbacks","Set","IntersectionObserver","POLL_INTERVAL","USE_MUTATION_OBSERVER","getListeners","add","delete","_intersectionObserver","Map","keys","key","base","get","set"],"mappings":"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"}