{"version":3,"sources":["../../src/use-element-size/index.ts"],"sourcesContent":["import { useResizeObserver } from '../use-resize-observer'\nimport { useSafeState } from '../use-safe-state'\nimport { normalizeElement, useTargetElement } from '../use-target-element'\n\nimport type { UseResizeObserverOptions, UseResizeObserverReturns } from '../use-resize-observer'\nimport type { ElementTarget } from '../use-target-element'\n\nexport interface ElementSize {\n  /**\n   * The width of the element.\n   */\n  width: number\n  /**\n   * The height of the element.\n   */\n  height: number\n}\n\nexport interface UseElementSizeReturns extends ElementSize, UseResizeObserverReturns {}\n\n/**\n * A React Hook that returns the size of an element.\n */\nexport function useElementSize<T extends HTMLElement = HTMLElement>(\n  target: ElementTarget<T>,\n  defaultValue: ElementSize = { width: 0, height: 0 },\n  options: UseResizeObserverOptions = {},\n): UseElementSizeReturns {\n  const el = useTargetElement<T>(target)\n  const [size, setSize] = useSafeState(defaultValue, { deep: true })\n  const { box = 'content-box' } = options\n\n  const { observerRef, isSupported, ...controls } = useResizeObserver(\n    target,\n    ([entry]) => {\n      const boxSize =\n        box === 'border-box'\n          ? entry.borderBoxSize\n          : box === 'content-box'\n            ? entry.contentBoxSize\n            : entry.devicePixelContentBoxSize\n\n      const isSvg = el.current?.namespaceURI?.includes('svg')\n\n      if (isSvg && el.current) {\n        setSize(getElSize(el))\n      } else {\n        if (boxSize && box.length) {\n          setSize({\n            width: boxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0),\n            height: boxSize.reduce((acc, { blockSize }) => acc + blockSize, 0),\n          })\n        } else {\n          setSize({\n            width: entry.contentRect.width,\n            height: entry.contentRect.height,\n          })\n        }\n      }\n    },\n    options,\n  )\n\n  return {\n    observerRef,\n    isSupported,\n    ...controls,\n    ...size,\n  }\n}\n\nfunction getElSize<T extends HTMLElement>(\n  target: ElementTarget<T>,\n  defaultValue: ElementSize = { width: 0, height: 0 },\n) {\n  const el = normalizeElement(target)\n\n  if (!el) return defaultValue\n\n  const { width, height } = window.getComputedStyle(el)\n\n  return {\n    width: Number.parseFloat(width),\n    height: Number.parseFloat(height),\n  }\n}\n"],"names":["useElementSize","target","defaultValue","width","height","options","el","useTargetElement","useSafeState","deep","size","setSize","box","useResizeObserver","entry","boxSize","borderBoxSize","contentBoxSize","devicePixelContentBoxSize","isSvg","current","namespaceURI","includes","getElSize","length","reduce","acc","inlineSize","blockSize","contentRect","observerRef","isSupported","controls","normalizeElement","window","getComputedStyle","Number","parseFloat"],"mappings":";;;;+BAuBgBA;;;eAAAA;;;iCAvBkB;4BACL;gCACsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqB5C,SAASA,eACdC,MAAwB;QACxBC,eAAAA,iEAA4B;QAAEC,OAAO;QAAGC,QAAQ;IAAE,GAClDC,UAAAA,iEAAoC,CAAC;IAErC,IAAMC,KAAKC,IAAAA,kCAAgB,EAAIN;IAC/B,IAAwBO,iCAAAA,IAAAA,0BAAY,EAACN,cAAc;QAAEO,MAAM;IAAK,QAAzDC,OAAiBF,kBAAXG,UAAWH;IACxB,mBAAgCH,QAAxBO,KAAAA,gCAAM;IAEd,IAAkDC,qBAAAA,IAAAA,oCAAiB,EACjEZ,QACA;iDAAEa;YAQcR,0BAAAA;QAPd,IAAMS,UACJH,QAAQ,eACJE,MAAME,aAAa,GACnBJ,QAAQ,gBACNE,MAAMG,cAAc,GACpBH,MAAMI,yBAAyB;QAEvC,IAAMC,SAAQb,cAAAA,GAAGc,OAAO,cAAVd,mCAAAA,2BAAAA,YAAYe,YAAY,cAAxBf,+CAAAA,yBAA0BgB,QAAQ,CAAC;QAEjD,IAAIH,SAASb,GAAGc,OAAO,EAAE;YACvBT,QAAQY,UAAUjB;QACpB,OAAO;YACL,IAAIS,WAAWH,IAAIY,MAAM,EAAE;gBACzBb,QAAQ;oBACNR,OAAOY,QAAQU,MAAM,CAAC,SAACC;4BAAOC,mBAAAA;+BAAiBD,MAAMC;uBAAY;oBACjEvB,QAAQW,QAAQU,MAAM,CAAC,SAACC;4BAAOE,kBAAAA;+BAAgBF,MAAME;uBAAW;gBAClE;YACF,OAAO;gBACLjB,QAAQ;oBACNR,OAAOW,MAAMe,WAAW,CAAC1B,KAAK;oBAC9BC,QAAQU,MAAMe,WAAW,CAACzB,MAAM;gBAClC;YACF;QACF;IACF,GACAC,UA5BMyB,cAA0CjB,mBAA1CiB,aAAaC,cAA6BlB,mBAA7BkB,aAAgBC,sCAAanB;;;;IA+BlD,OAAO;QACLiB,aAAAA;QACAC,aAAAA;OACGC,UACAtB;AAEP;AAEA,SAASa,UACPtB,MAAwB;QACxBC,eAAAA,iEAA4B;QAAEC,OAAO;QAAGC,QAAQ;IAAE;IAElD,IAAME,KAAK2B,IAAAA,kCAAgB,EAAChC;IAE5B,IAAI,CAACK,IAAI,OAAOJ;IAEhB,IAA0BgC,2BAAAA,OAAOC,gBAAgB,CAAC7B,KAA1CH,QAAkB+B,yBAAlB/B,OAAOC,SAAW8B,yBAAX9B;IAEf,OAAO;QACLD,OAAOiC,OAAOC,UAAU,CAAClC;QACzBC,QAAQgC,OAAOC,UAAU,CAACjC;IAC5B;AACF"}