{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { trackElementSize, ElementSize } from \"@zag-js/element-size\"\nimport { useEffect, useLayoutEffect, useState } from \"react\"\n\nconst useSafeLayoutEffect = Boolean(globalThis?.document)\n ? useLayoutEffect\n : useEffect\n\nfunction trackMutation(el: HTMLElement | null, cb: () => void) {\n if (!el || !el.parentElement) return\n const win = el.ownerDocument?.defaultView ?? window\n const observer = new win.MutationObserver(() => {\n cb()\n })\n observer.observe(el.parentElement, { childList: true })\n return () => {\n observer.disconnect()\n }\n}\n\nexport function useSizes({\n getNodes,\n observeMutation = true,\n}: {\n getNodes: () => T[]\n observeMutation?: boolean\n}) {\n const [sizes, setSizes] = useState([])\n const [count, setCount] = useState(0)\n\n useSafeLayoutEffect(() => {\n const elements = getNodes()\n\n const cleanups = elements.map((element, index) =>\n trackElementSize(element, (size) => {\n setSizes((sizes) => {\n return [\n ...sizes.slice(0, index),\n size,\n ...sizes.slice(index + 1),\n ] as ElementSize[]\n })\n }),\n )\n\n if (observeMutation) {\n const firstNode = elements[0]\n cleanups.push(\n trackMutation(firstNode, () => {\n setCount((count) => count + 1)\n }),\n )\n }\n\n return () => {\n cleanups.forEach((cleanup) => {\n cleanup?.()\n })\n }\n }, [count])\n\n return sizes as Array\n}\n\nfunction isRef(ref: any): ref is React.RefObject {\n return typeof ref === \"object\" && ref !== null && \"current\" in ref\n}\n\nexport function useSize(\n subject: T | React.RefObject,\n) {\n const [size] = useSizes({\n observeMutation: false,\n getNodes() {\n const node = isRef(subject) ? subject.current : subject\n return [node]\n },\n })\n return size as ElementSize | undefined\n}\n"],"mappings":";;;AAAA,SAAS,wBAAqC;AAC9C,SAAS,WAAW,iBAAiB,gBAAgB;AAErD,IAAM,sBAAsB,QAAQ,yCAAY,QAAQ,IACpD,kBACA;AAEJ,SAAS,cAAc,IAAwB,IAAgB;AAP/D;AAQE,MAAI,CAAC,MAAM,CAAC,GAAG;AAAe;AAC9B,QAAM,OAAM,cAAG,kBAAH,mBAAkB,gBAAlB,YAAiC;AAC7C,QAAM,WAAW,IAAI,IAAI,iBAAiB,MAAM;AAC9C,OAAG;AAAA,EACL,CAAC;AACD,WAAS,QAAQ,GAAG,eAAe,EAAE,WAAW,KAAK,CAAC;AACtD,SAAO,MAAM;AACX,aAAS,WAAW;AAAA,EACtB;AACF;AAEO,SAAS,SAAuC;AAAA,EACrD;AAAA,EACA,kBAAkB;AACpB,GAGG;AACD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,CAAC,CAAC;AACpD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,CAAC;AAEpC,sBAAoB,MAAM;AACxB,UAAM,WAAW,SAAS;AAE1B,UAAM,WAAW,SAAS;AAAA,MAAI,CAAC,SAAS,UACtC,iBAAiB,SAAS,CAAC,SAAS;AAClC,iBAAS,CAACA,WAAU;AAClB,iBAAO;AAAA,YACL,GAAGA,OAAM,MAAM,GAAG,KAAK;AAAA,YACvB;AAAA,YACA,GAAGA,OAAM,MAAM,QAAQ,CAAC;AAAA,UAC1B;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,QAAI,iBAAiB;AACnB,YAAM,YAAY,SAAS,CAAC;AAC5B,eAAS;AAAA,QACP,cAAc,WAAW,MAAM;AAC7B,mBAAS,CAACC,WAAUA,SAAQ,CAAC;AAAA,QAC/B,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,MAAM;AACX,eAAS,QAAQ,CAAC,YAAY;AAC5B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO;AACT;AAEA,SAAS,MAAM,KAAuC;AACpD,SAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,aAAa;AACjE;AAEO,SAAS,QACd,SACA;AACA,QAAM,CAAC,IAAI,IAAI,SAAS;AAAA,IACtB,iBAAiB;AAAA,IACjB,WAAW;AACT,YAAM,OAAO,MAAM,OAAO,IAAI,QAAQ,UAAU;AAChD,aAAO,CAAC,IAAI;AAAA,IACd;AAAA,EACF,CAAC;AACD,SAAO;AACT;","names":["sizes","count"]}