@react-hook/size
Version:
A React hook for measuring the size of HTML elements including when they change
1 lines • 2.73 kB
Source Map (JSON)
{"version":3,"file":"index.dev.mjs","sources":["../../src/index.tsx"],"sourcesContent":["import * as React from 'react'\nimport useResizeObserver from '@react-hook/resize-observer'\nimport useLayoutEffect from '@react-hook/passive-layout-effect'\n\n/**\n * A React hook for measuring the size of HTML elements including when they change\n *\n * @param target A React ref created by `useRef()` or an HTML element\n * @param options Configures the initial width and initial height of the hook's state\n */\nconst useSize = <T extends HTMLElement>(\n target: React.RefObject<T> | T | null,\n options?: UseSizeOptions\n): [number, number] => {\n const [size, setSize] = React.useState<[number, number]>(() => {\n const targetEl = target && 'current' in target ? target.current : target\n return targetEl\n ? [targetEl.offsetWidth, targetEl.offsetHeight]\n : [options?.initialWidth ?? 0, options?.initialHeight ?? 0]\n })\n\n useLayoutEffect(() => {\n const targetEl = target && 'current' in target ? target.current : target\n if (!targetEl) return\n setSize([targetEl.offsetWidth, targetEl.offsetHeight])\n }, [target])\n\n // Where the magic happens\n useResizeObserver(target, (entry) => {\n const target = entry.target as HTMLElement\n setSize([target.offsetWidth, target.offsetHeight])\n })\n\n return size\n}\n\nexport interface UseSizeOptions {\n // The initial width to set into state.\n // This is useful for SSR environments.\n initialWidth: number\n // The initial height to set into state.\n // This is useful for SSR environments.\n initialHeight: number\n}\n\nexport default useSize\n"],"names":["useSize","target","options","size","setSize","React","targetEl","current","offsetWidth","offsetHeight","initialWidth","initialHeight","useLayoutEffect","useResizeObserver","entry"],"mappings":";;;;AAIA;;;;;;;IAMMA,OAAO,GAAG,CACdC,MADc,EAEdC,OAFc,KAGO;AACrB,MAAM,CAACC,IAAD,EAAOC,OAAP,IAAkBC,QAAA,CAAiC,MAAM;AAAA;;AAC7D,QAAMC,QAAQ,GAAGL,MAAM,IAAI,aAAaA,MAAvB,GAAgCA,MAAM,CAACM,OAAvC,GAAiDN,MAAlE;AACA,WAAOK,QAAQ,GACX,CAACA,QAAQ,CAACE,WAAV,EAAuBF,QAAQ,CAACG,YAAhC,CADW,GAEX,0BAACP,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEQ,YAAV,yEAA0B,CAA1B,2BAA6BR,OAA7B,aAA6BA,OAA7B,uBAA6BA,OAAO,CAAES,aAAtC,yEAAuD,CAAvD,CAFJ;AAGD,GALuB,CAAxB;AAOAC,EAAAA,eAAe,CAAC,MAAM;AACpB,QAAMN,QAAQ,GAAGL,MAAM,IAAI,aAAaA,MAAvB,GAAgCA,MAAM,CAACM,OAAvC,GAAiDN,MAAlE;AACA,QAAI,CAACK,QAAL,EAAe;AACfF,IAAAA,OAAO,CAAC,CAACE,QAAQ,CAACE,WAAV,EAAuBF,QAAQ,CAACG,YAAhC,CAAD,CAAP;AACD,GAJc,EAIZ,CAACR,MAAD,CAJY,CAAf,CARqB;;AAerBY,EAAAA,iBAAiB,CAACZ,MAAD,EAAUa,KAAD,IAAW;AACnC,QAAMb,MAAM,GAAGa,KAAK,CAACb,MAArB;AACAG,IAAAA,OAAO,CAAC,CAACH,MAAM,CAACO,WAAR,EAAqBP,MAAM,CAACQ,YAA5B,CAAD,CAAP;AACD,GAHgB,CAAjB;AAKA,SAAON,IAAP;AACD;;;;"}