{"version":3,"file":"layout-hooks.cjs","sources":["../../src/util/layout-hooks.ts"],"sourcesContent":["import {\n  useLayoutEffect,\n  useEffect,\n  useState,\n  useCallback,\n  RefObject,\n} from \"react\";\n\ntype ElementSize = {\n  height: number;\n  width: number;\n};\n\ntype ElementSizeOpts = {\n  trackWindowResize?: boolean;\n};\n\nfunction useElementSize(\n  ref: RefObject<HTMLElement>,\n  opts: ElementSizeOpts = {},\n): ElementSize | null {\n  /** Also see https://github.com/Swizec/useDimensions */\n  const { trackWindowResize = true } = opts;\n  const [size, setSize] = useState<ElementSize>(null);\n\n  const sizeCallback = useCallback(() => {\n    if (ref.current == null) return;\n    const { height, width } = ref.current.getBoundingClientRect();\n    setSize({ height, width });\n  }, [ref]);\n\n  useLayoutEffect(sizeCallback, [ref]);\n\n  // Also respond on window resize (if \"trackWindowResize\" is set)\n  useEffect(() => {\n    if (!trackWindowResize) return;\n    window.addEventListener(\"resize\", sizeCallback);\n    return function () {\n      window.removeEventListener(\"resize\", sizeCallback);\n    };\n  }, [sizeCallback, trackWindowResize]);\n\n  return size;\n}\n\nfunction useScrollOffset(ref: RefObject<HTMLElement>): number {\n  const [offset, setOffset] = useState(0);\n  useEffect(() => {\n    ref.current?.addEventListener(\"scroll\", (evt) => {\n      const el = evt.target as HTMLElement;\n      setOffset(el.scrollTop);\n    });\n  }, [ref.current]);\n  return offset;\n}\n\nexport { useElementSize, useScrollOffset };\n"],"names":["useState","useCallback","useLayoutEffect","useEffect"],"mappings":";;;AAiBA,SAAS,eACP,KACA,OAAwB,IACJ;AAEpB,QAAM,EAAE,oBAAoB,KAAA,IAAS;AACrC,QAAM,CAAC,MAAM,OAAO,IAAIA,MAAAA,SAAsB,IAAI;AAElD,QAAM,eAAeC,MAAAA,YAAY,MAAM;AACrC,QAAI,IAAI,WAAW,KAAM;AACzB,UAAM,EAAE,QAAQ,MAAA,IAAU,IAAI,QAAQ,sBAAA;AACtC,YAAQ,EAAE,QAAQ,OAAO;AAAA,EAC3B,GAAG,CAAC,GAAG,CAAC;AAERC,wBAAgB,cAAc,CAAC,GAAG,CAAC;AAGnCC,QAAAA,UAAU,MAAM;AACd,QAAI,CAAC,kBAAmB;AACxB,WAAO,iBAAiB,UAAU,YAAY;AAC9C,WAAO,WAAY;AACjB,aAAO,oBAAoB,UAAU,YAAY;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,cAAc,iBAAiB,CAAC;AAEpC,SAAO;AACT;AAEA,SAAS,gBAAgB,KAAqC;AAC5D,QAAM,CAAC,QAAQ,SAAS,IAAIH,MAAAA,SAAS,CAAC;AACtCG,QAAAA,UAAU,MAAM;AACd,QAAI,SAAS,iBAAiB,UAAU,CAAC,QAAQ;AAC/C,YAAM,KAAK,IAAI;AACf,gBAAU,GAAG,SAAS;AAAA,IACxB,CAAC;AAAA,EACH,GAAG,CAAC,IAAI,OAAO,CAAC;AAChB,SAAO;AACT;;;"}