@thibault.sh/hooks
Version:
A comprehensive collection of React hooks for browser storage, UI interactions, and more
1 lines • 1.83 kB
Source Map (JSON)
{"version":3,"sources":["../src/hooks/useResizeObserver.ts"],"names":["useResizeObserver","elementRef","entry","setEntry","useState","useEffect","element","resizeObserver","entries"],"mappings":"uCAeO,SAASA,CACdC,CAAAA,CAAAA,CAC4B,CAC5B,GAAM,CAACC,CAAAA,CAAOC,CAAQ,CAAA,CAAIC,QAAqC,CAAA,IAAI,CAEnE,CAAA,OAAAC,SAAU,CAAA,IAAM,CACd,GAAI,CAACJ,CAAAA,CAAW,OAAS,CAAA,OAEzB,IAAMK,CAAAA,CAAUL,CAAW,CAAA,OAAA,CACrBM,CAAiB,CAAA,IAAI,cAAgBC,CAAAA,CAAAA,EAAY,CAChDA,CAAAA,CAAQ,CAAC,CAAA,EACdL,CAASK,CAAAA,CAAAA,CAAQ,CAAC,CAAC,EACrB,CAAC,CAED,CAAA,OAAAD,CAAe,CAAA,OAAA,CAAQD,CAAO,CAAA,CAEvB,IAAM,CACXC,CAAe,CAAA,UAAA,GACjB,CACF,CAAG,CAAA,CAACN,CAAU,CAAC,EAERC,CACT","file":"useResizeObserver.mjs","sourcesContent":["import { useState, useEffect, RefObject } from \"react\";\n\ninterface ResizeObserverEntry {\n contentRect: DOMRectReadOnly;\n contentBoxSize: ReadonlyArray<ResizeObserverSize>;\n borderBoxSize: ReadonlyArray<ResizeObserverSize>;\n devicePixelContentBoxSize: ReadonlyArray<ResizeObserverSize>;\n target: Element;\n}\n\n/**\n * Hook that tracks element's size changes using ResizeObserver with full entry details\n * @param elementRef - React ref object pointing to the target element\n * @returns Latest ResizeObserverEntry if available, null otherwise\n */\nexport function useResizeObserver(\n elementRef: RefObject<HTMLElement>\n): ResizeObserverEntry | null {\n const [entry, setEntry] = useState<ResizeObserverEntry | null>(null);\n\n useEffect(() => {\n if (!elementRef.current) return;\n\n const element = elementRef.current;\n const resizeObserver = new ResizeObserver((entries) => {\n if (!entries[0]) return;\n setEntry(entries[0]);\n });\n\n resizeObserver.observe(element);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [elementRef]);\n\n return entry;\n} "]}