{"version":3,"file":"web.mjs","sources":["../../../../node_modules/react-use-measure/dist/web.js"],"sourcesContent":["import { useState, useRef, useEffect, useMemo } from 'react';\nimport createDebounce from 'debounce';\n\nfunction useMeasure(_temp) {\n  let {\n    debounce,\n    scroll,\n    polyfill,\n    offsetSize\n  } = _temp === void 0 ? {\n    debounce: 0,\n    scroll: false,\n    offsetSize: false\n  } : _temp;\n  const ResizeObserver = polyfill || (typeof window === 'undefined' ? class ResizeObserver {} : window.ResizeObserver);\n\n  if (!ResizeObserver) {\n    throw new Error('This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills');\n  }\n\n  const [bounds, set] = useState({\n    left: 0,\n    top: 0,\n    width: 0,\n    height: 0,\n    bottom: 0,\n    right: 0,\n    x: 0,\n    y: 0\n  }); // keep all state in a ref\n\n  const state = useRef({\n    element: null,\n    scrollContainers: null,\n    resizeObserver: null,\n    lastBounds: bounds\n  }); // set actual debounce values early, so effects know if they should react accordingly\n\n  const scrollDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.scroll : null;\n  const resizeDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.resize : null; // make sure to update state only as long as the component is truly mounted\n\n  const mounted = useRef(false);\n  useEffect(() => {\n    mounted.current = true;\n    return () => void (mounted.current = false);\n  }); // memoize handlers, so event-listeners know when they should update\n\n  const [forceRefresh, resizeChange, scrollChange] = useMemo(() => {\n    const callback = () => {\n      if (!state.current.element) return;\n      const {\n        left,\n        top,\n        width,\n        height,\n        bottom,\n        right,\n        x,\n        y\n      } = state.current.element.getBoundingClientRect();\n      const size = {\n        left,\n        top,\n        width,\n        height,\n        bottom,\n        right,\n        x,\n        y\n      };\n\n      if (state.current.element instanceof HTMLElement && offsetSize) {\n        size.height = state.current.element.offsetHeight;\n        size.width = state.current.element.offsetWidth;\n      }\n\n      Object.freeze(size);\n      if (mounted.current && !areBoundsEqual(state.current.lastBounds, size)) set(state.current.lastBounds = size);\n    };\n\n    return [callback, resizeDebounce ? createDebounce(callback, resizeDebounce) : callback, scrollDebounce ? createDebounce(callback, scrollDebounce) : callback];\n  }, [set, offsetSize, scrollDebounce, resizeDebounce]); // cleanup current scroll-listeners / observers\n\n  function removeListeners() {\n    if (state.current.scrollContainers) {\n      state.current.scrollContainers.forEach(element => element.removeEventListener('scroll', scrollChange, true));\n      state.current.scrollContainers = null;\n    }\n\n    if (state.current.resizeObserver) {\n      state.current.resizeObserver.disconnect();\n      state.current.resizeObserver = null;\n    }\n  } // add scroll-listeners / observers\n\n\n  function addListeners() {\n    if (!state.current.element) return;\n    state.current.resizeObserver = new ResizeObserver(scrollChange);\n    state.current.resizeObserver.observe(state.current.element);\n\n    if (scroll && state.current.scrollContainers) {\n      state.current.scrollContainers.forEach(scrollContainer => scrollContainer.addEventListener('scroll', scrollChange, {\n        capture: true,\n        passive: true\n      }));\n    }\n  } // the ref we expose to the user\n\n\n  const ref = node => {\n    if (!node || node === state.current.element) return;\n    removeListeners();\n    state.current.element = node;\n    state.current.scrollContainers = findScrollContainers(node);\n    addListeners();\n  }; // add general event listeners\n\n\n  useOnWindowScroll(scrollChange, Boolean(scroll));\n  useOnWindowResize(resizeChange); // respond to changes that are relevant for the listeners\n\n  useEffect(() => {\n    removeListeners();\n    addListeners();\n  }, [scroll, scrollChange, resizeChange]); // remove all listeners when the components unmounts\n\n  useEffect(() => removeListeners, []);\n  return [ref, bounds, forceRefresh];\n} // Adds native resize listener to window\n\n\nfunction useOnWindowResize(onWindowResize) {\n  useEffect(() => {\n    const cb = onWindowResize;\n    window.addEventListener('resize', cb);\n    return () => void window.removeEventListener('resize', cb);\n  }, [onWindowResize]);\n}\n\nfunction useOnWindowScroll(onScroll, enabled) {\n  useEffect(() => {\n    if (enabled) {\n      const cb = onScroll;\n      window.addEventListener('scroll', cb, {\n        capture: true,\n        passive: true\n      });\n      return () => void window.removeEventListener('scroll', cb, true);\n    }\n  }, [onScroll, enabled]);\n} // Returns a list of scroll offsets\n\n\nfunction findScrollContainers(element) {\n  const result = [];\n  if (!element || element === document.body) return result;\n  const {\n    overflow,\n    overflowX,\n    overflowY\n  } = window.getComputedStyle(element);\n  if ([overflow, overflowX, overflowY].some(prop => prop === 'auto' || prop === 'scroll')) result.push(element);\n  return [...result, ...findScrollContainers(element.parentElement)];\n} // Checks if element boundaries are equal\n\n\nconst keys = ['x', 'y', 'top', 'bottom', 'left', 'right', 'width', 'height'];\n\nconst areBoundsEqual = (a, b) => keys.every(key => a[key] === b[key]);\n\nexport { useMeasure as default };\n"],"names":["useMeasure","_temp","debounce","scroll","polyfill","offsetSize","ResizeObserver","window","Error","bounds","set","useState","left","top","width","height","bottom","right","x","y","state","useRef","element","scrollContainers","resizeObserver","lastBounds","scrollDebounce","resizeDebounce","resize","mounted","useEffect","current","forceRefresh","resizeChange","scrollChange","useMemo","callback","getBoundingClientRect","size","HTMLElement","offsetHeight","offsetWidth","Object","freeze","areBoundsEqual","createDebounce","removeListeners","forEach","removeEventListener","disconnect","addListeners","observe","scrollContainer","addEventListener","capture","passive","useOnWindowScroll","onScroll","enabled","cb","Boolean","useOnWindowResize","onWindowResize","node","findScrollContainers","result","document","body","overflow","overflowX","overflowY","getComputedStyle","some","prop","push","parentElement","keys","a","b","every","key"],"mappings":"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","x_google_ignoreList":[0]}