Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
1 line
No EOL
6.5 KiB
Text
1 line
No EOL
6.5 KiB
Text
{"version":3,"sources":["../../src/client/use-intersection.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n requestIdleCallback,\n cancelIdleCallback,\n} from './request-idle-callback'\n\ntype UseIntersectionObserverInit = Pick<\n IntersectionObserverInit,\n 'rootMargin' | 'root'\n>\n\ntype UseIntersection = { disabled?: boolean } & UseIntersectionObserverInit & {\n rootRef?: React.RefObject<HTMLElement | null> | null\n }\ntype ObserveCallback = (isVisible: boolean) => void\ntype Identifier = {\n root: Element | Document | null\n margin: string\n}\ntype Observer = {\n id: Identifier\n observer: IntersectionObserver\n elements: Map<Element, ObserveCallback>\n}\n\nconst hasIntersectionObserver = typeof IntersectionObserver === 'function'\n\nconst observers = new Map<Identifier, Observer>()\nconst idList: Identifier[] = []\n\nfunction createObserver(options: UseIntersectionObserverInit): Observer {\n const id = {\n root: options.root || null,\n margin: options.rootMargin || '',\n }\n const existing = idList.find(\n (obj) => obj.root === id.root && obj.margin === id.margin\n )\n let instance: Observer | undefined\n\n if (existing) {\n instance = observers.get(existing)\n if (instance) {\n return instance\n }\n }\n\n const elements = new Map<Element, ObserveCallback>()\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n const callback = elements.get(entry.target)\n const isVisible = entry.isIntersecting || entry.intersectionRatio > 0\n if (callback && isVisible) {\n callback(isVisible)\n }\n })\n }, options)\n instance = {\n id,\n observer,\n elements,\n }\n\n idList.push(id)\n observers.set(id, instance)\n return instance\n}\n\nfunction observe(\n element: Element,\n callback: ObserveCallback,\n options: UseIntersectionObserverInit\n): () => void {\n const { id, observer, elements } = createObserver(options)\n elements.set(element, callback)\n\n observer.observe(element)\n return function unobserve(): void {\n elements.delete(element)\n observer.unobserve(element)\n\n // Destroy observer when there's nothing left to watch:\n if (elements.size === 0) {\n observer.disconnect()\n observers.delete(id)\n const index = idList.findIndex(\n (obj) => obj.root === id.root && obj.margin === id.margin\n )\n if (index > -1) {\n idList.splice(index, 1)\n }\n }\n }\n}\n\nexport function useIntersection<T extends Element>({\n rootRef,\n rootMargin,\n disabled,\n}: UseIntersection): [(element: T | null) => void, boolean, () => void] {\n const isDisabled: boolean = disabled || !hasIntersectionObserver\n\n const [visible, setVisible] = useState(false)\n const elementRef = useRef<T | null>(null)\n const setElement = useCallback((element: T | null) => {\n elementRef.current = element\n }, [])\n\n useEffect(() => {\n if (hasIntersectionObserver) {\n if (isDisabled || visible) return\n\n const element = elementRef.current\n if (element && element.tagName) {\n const unobserve = observe(\n element,\n (isVisible) => isVisible && setVisible(isVisible),\n { root: rootRef?.current, rootMargin }\n )\n\n return unobserve\n }\n } else {\n if (!visible) {\n const idleCallback = requestIdleCallback(() => setVisible(true))\n return () => cancelIdleCallback(idleCallback)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDisabled, rootMargin, rootRef, visible, elementRef.current])\n\n const resetVisible = useCallback(() => {\n setVisible(false)\n }, [])\n\n return [setElement, visible, resetVisible]\n}\n"],"names":["useIntersection","hasIntersectionObserver","IntersectionObserver","observers","Map","idList","createObserver","options","id","root","margin","rootMargin","existing","find","obj","instance","get","elements","observer","entries","forEach","entry","callback","target","isVisible","isIntersecting","intersectionRatio","push","set","observe","element","unobserve","delete","size","disconnect","index","findIndex","splice","rootRef","disabled","isDisabled","visible","setVisible","useState","elementRef","useRef","setElement","useCallback","current","useEffect","tagName","idleCallback","requestIdleCallback","cancelIdleCallback","resetVisible"],"mappings":"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","ignoreList":[0]} |