{"version":3,"file":"react-virtualized-auto-sizer.cjs","sources":["../lib/vendor/detectElementResize.js","../lib/hooks/useSize.ts","../lib/components/AutoSizer.tsx"],"sourcesContent":["/**\n * Detect Element Resize.\n * https://github.com/sdecima/javascript-detect-element-resize\n * Sebastian Decima\n *\n * Forked from version 0.5.3; includes the following modifications:\n * 1) Guard against unsafe 'window' and 'document' references (to support SSR).\n * 2) Defer initialization code via a top-level function wrapper (to support SSR).\n * 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children.\n * 4) Add nonce for style element.\n * 5) Use 'export' statement over 'module.exports' assignment\n **/\n\n// Check `document` and `window` in case of server-side rendering\nlet windowObject;\nif (typeof window !== \"undefined\") {\n  windowObject = window;\n} else if (typeof self !== \"undefined\") {\n  windowObject = self;\n} else {\n  windowObject = global;\n}\n\nlet cancelFrame = null;\nlet requestFrame = null;\n\nconst TIMEOUT_DURATION = 20;\n\nconst clearTimeoutFn = windowObject.clearTimeout;\nconst setTimeoutFn = windowObject.setTimeout;\n\nconst cancelAnimationFrameFn =\n  windowObject.cancelAnimationFrame ||\n  windowObject.mozCancelAnimationFrame ||\n  windowObject.webkitCancelAnimationFrame;\n\nconst requestAnimationFrameFn =\n  windowObject.requestAnimationFrame ||\n  windowObject.mozRequestAnimationFrame ||\n  windowObject.webkitRequestAnimationFrame;\n\nif (cancelAnimationFrameFn == null || requestAnimationFrameFn == null) {\n  // For environments that don't support animation frame,\n  // fallback to a setTimeout based approach.\n  cancelFrame = clearTimeoutFn;\n  requestFrame = function requestAnimationFrameViaSetTimeout(callback) {\n    return setTimeoutFn(callback, TIMEOUT_DURATION);\n  };\n} else {\n  // Counter intuitively, environments that support animation frames can be trickier.\n  // Chrome's \"Throttle non-visible cross-origin iframes\" flag can prevent rAFs from being called.\n  // In this case, we should fallback to a setTimeout() implementation.\n  cancelFrame = function cancelFrame([animationFrameID, timeoutID]) {\n    cancelAnimationFrameFn(animationFrameID);\n    clearTimeoutFn(timeoutID);\n  };\n  requestFrame = function requestAnimationFrameWithSetTimeoutFallback(\n    callback\n  ) {\n    const animationFrameID = requestAnimationFrameFn(\n      function animationFrameCallback() {\n        clearTimeoutFn(timeoutID);\n        callback();\n      }\n    );\n\n    const timeoutID = setTimeoutFn(function timeoutCallback() {\n      cancelAnimationFrameFn(animationFrameID);\n      callback();\n    }, TIMEOUT_DURATION);\n\n    return [animationFrameID, timeoutID];\n  };\n}\n\nfunction createDetectElementResize(nonce) {\n  let animationKeyframes;\n  let animationName;\n  let animationStartEvent;\n  let animationStyle;\n  let checkTriggers;\n  let resetTriggers;\n  let scrollListener;\n\n  const attachEvent = typeof document !== \"undefined\" && document.attachEvent;\n  if (!attachEvent) {\n    resetTriggers = function (element) {\n      const triggers = element.__resizeTriggers__,\n        expand = triggers.firstElementChild,\n        contract = triggers.lastElementChild,\n        expandChild = expand.firstElementChild;\n      contract.scrollLeft = contract.scrollWidth;\n      contract.scrollTop = contract.scrollHeight;\n      expandChild.style.width = expand.offsetWidth + 1 + \"px\";\n      expandChild.style.height = expand.offsetHeight + 1 + \"px\";\n      expand.scrollLeft = expand.scrollWidth;\n      expand.scrollTop = expand.scrollHeight;\n    };\n\n    checkTriggers = function (element) {\n      return (\n        element.offsetWidth !== element.__resizeLast__.width ||\n        element.offsetHeight !== element.__resizeLast__.height\n      );\n    };\n\n    scrollListener = function (e) {\n      // Don't measure (which forces) reflow for scrolls that happen inside of children!\n      if (\n        e.target.className &&\n        typeof e.target.className.indexOf === \"function\" &&\n        e.target.className.indexOf(\"contract-trigger\") < 0 &&\n        e.target.className.indexOf(\"expand-trigger\") < 0\n      ) {\n        return;\n      }\n\n      const element = this;\n      resetTriggers(this);\n      if (this.__resizeRAF__) {\n        cancelFrame(this.__resizeRAF__);\n      }\n      this.__resizeRAF__ = requestFrame(function animationFrame() {\n        if (checkTriggers(element)) {\n          element.__resizeLast__.width = element.offsetWidth;\n          element.__resizeLast__.height = element.offsetHeight;\n          element.__resizeListeners__.forEach(\n            function forEachResizeListener(fn) {\n              fn.call(element, e);\n            }\n          );\n        }\n      });\n    };\n\n    /* Detect CSS Animations support to detect element display/re-attach */\n    let animation = false;\n    let keyframeprefix = \"\";\n    animationStartEvent = \"animationstart\";\n    const domPrefixes = \"Webkit Moz O ms\".split(\" \");\n    let startEvents =\n      \"webkitAnimationStart animationstart oAnimationStart MSAnimationStart\".split(\n        \" \"\n      );\n    let pfx = \"\";\n    {\n      const elm = document.createElement(\"fakeelement\");\n      if (elm.style.animationName !== undefined) {\n        animation = true;\n      }\n\n      if (animation === false) {\n        for (let i = 0; i < domPrefixes.length; i++) {\n          if (elm.style[domPrefixes[i] + \"AnimationName\"] !== undefined) {\n            pfx = domPrefixes[i];\n            keyframeprefix = \"-\" + pfx.toLowerCase() + \"-\";\n            animationStartEvent = startEvents[i];\n            animation = true;\n            break;\n          }\n        }\n      }\n    }\n\n    animationName = \"resizeanim\";\n    animationKeyframes =\n      \"@\" +\n      keyframeprefix +\n      \"keyframes \" +\n      animationName +\n      \" { from { opacity: 0; } to { opacity: 0; } } \";\n    animationStyle = keyframeprefix + \"animation: 1ms \" + animationName + \"; \";\n  }\n\n  const createStyles = function (doc) {\n    if (!doc.getElementById(\"detectElementResize\")) {\n      //opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n      const css =\n          (animationKeyframes ? animationKeyframes : \"\") +\n          \".resize-triggers { \" +\n          (animationStyle ? animationStyle : \"\") +\n          \"visibility: hidden; opacity: 0; } \" +\n          '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\n        head = doc.head || doc.getElementsByTagName(\"head\")[0],\n        style = doc.createElement(\"style\");\n\n      style.id = \"detectElementResize\";\n      style.type = \"text/css\";\n\n      if (nonce != null) {\n        style.setAttribute(\"nonce\", nonce);\n      }\n\n      if (style.styleSheet) {\n        style.styleSheet.cssText = css;\n      } else {\n        style.appendChild(doc.createTextNode(css));\n      }\n\n      head.appendChild(style);\n    }\n  };\n\n  const addResizeListener = function (element, fn) {\n    if (attachEvent) {\n      element.attachEvent(\"onresize\", fn);\n    } else {\n      if (!element.__resizeTriggers__) {\n        const doc = element.ownerDocument;\n        const elementStyle = windowObject.getComputedStyle(element);\n        if (elementStyle && elementStyle.position === \"static\") {\n          element.style.position = \"relative\";\n        }\n        createStyles(doc);\n        element.__resizeLast__ = {};\n        element.__resizeListeners__ = [];\n        (element.__resizeTriggers__ = doc.createElement(\"div\")).className =\n          \"resize-triggers\";\n        const expandTrigger = doc.createElement(\"div\");\n        expandTrigger.className = \"expand-trigger\";\n        expandTrigger.appendChild(doc.createElement(\"div\"));\n        const contractTrigger = doc.createElement(\"div\");\n        contractTrigger.className = \"contract-trigger\";\n        element.__resizeTriggers__.appendChild(expandTrigger);\n        element.__resizeTriggers__.appendChild(contractTrigger);\n        element.appendChild(element.__resizeTriggers__);\n        resetTriggers(element);\n        element.addEventListener(\"scroll\", scrollListener, true);\n\n        /* Listen for a css animation to detect element display/re-attach */\n        if (animationStartEvent) {\n          element.__resizeTriggers__.__animationListener__ =\n            function animationListener(e) {\n              if (e.animationName === animationName) {\n                resetTriggers(element);\n              }\n            };\n          element.__resizeTriggers__.addEventListener(\n            animationStartEvent,\n            element.__resizeTriggers__.__animationListener__\n          );\n        }\n      }\n      element.__resizeListeners__.push(fn);\n    }\n  };\n\n  const removeResizeListener = function (element, fn) {\n    if (attachEvent) {\n      element.detachEvent(\"onresize\", fn);\n    } else {\n      element.__resizeListeners__.splice(\n        element.__resizeListeners__.indexOf(fn),\n        1\n      );\n      if (!element.__resizeListeners__.length) {\n        element.removeEventListener(\"scroll\", scrollListener, true);\n        if (element.__resizeTriggers__.__animationListener__) {\n          element.__resizeTriggers__.removeEventListener(\n            animationStartEvent,\n            element.__resizeTriggers__.__animationListener__\n          );\n          element.__resizeTriggers__.__animationListener__ = null;\n        }\n        try {\n          element.__resizeTriggers__ = !element.removeChild(\n            element.__resizeTriggers__\n          );\n        } catch (e) {\n          // Preact compat; see developit/preact-compat/issues/228\n        }\n      }\n    }\n  };\n\n  return {\n    addResizeListener,\n    removeResizeListener\n  };\n}\n\nexport { createDetectElementResize };\n","import { useLayoutEffect, useRef } from \"react\";\nimport type { Size } from \"../types\";\nimport { createDetectElementResize } from \"../vendor/detectElementResize\";\n\nexport function useSize({\n  box,\n  nonce,\n  onResize,\n  rootElement\n}: {\n  box: \"border-box\" | \"content-box\" | \"device-pixel-content-box\";\n  nonce: string | undefined;\n  onResize: (size: Size) => void;\n  rootElement: HTMLElement | null;\n}) {\n  const stableValuesRef = useRef<{\n    onResize: (size: Size) => void;\n    parentNode: HTMLElement | null;\n    prevSize:\n      | Size\n      | {\n          height: undefined;\n          width: undefined;\n        };\n  }>({\n    onResize,\n    parentNode: null,\n    prevSize: {\n      height: undefined,\n      width: undefined\n    }\n  });\n\n  useLayoutEffect(() => {\n    stableValuesRef.current.onResize = onResize;\n  });\n\n  const onResizeStableRef = useRef(() => {\n    const { onResize, parentNode, prevSize } = stableValuesRef.current;\n    if (parentNode === null) {\n      return;\n    }\n\n    let height: number;\n    let width: number;\n\n    switch (box) {\n      case \"border-box\": {\n        const rect = parentNode.getBoundingClientRect();\n\n        height = rect.height;\n        width = rect.width;\n        break;\n      }\n      case \"content-box\": {\n        const rect = parentNode.getBoundingClientRect();\n\n        // Guard against AutoSizer component being removed from the DOM immediately after being added.\n        // This can result in invalid style values which can result in NaN values if we don't handle them.\n        const style = window.getComputedStyle(parentNode) || {};\n        const borderBottomWidth = parseFloat(style.borderBottomWidth || \"0\");\n        const borderLeftWidth = parseFloat(style.borderLeftWidth || \"0\");\n        const borderRightWidth = parseFloat(style.borderRightWidth || \"0\");\n        const borderTopWidth = parseFloat(style.borderTopWidth || \"0\");\n        const paddingLeft = parseFloat(style.paddingLeft || \"0\");\n        const paddingRight = parseFloat(style.paddingRight || \"0\");\n        const paddingTop = parseFloat(style.paddingTop || \"0\");\n        const paddingBottom = parseFloat(style.paddingBottom || \"0\");\n\n        height =\n          rect.height -\n          paddingTop -\n          paddingBottom -\n          borderTopWidth -\n          borderBottomWidth;\n        width =\n          rect.width -\n          paddingLeft -\n          paddingRight -\n          borderLeftWidth -\n          borderRightWidth;\n        break;\n      }\n      case \"device-pixel-content-box\": {\n        height = parentNode.offsetHeight;\n        width = parentNode.offsetWidth;\n        break;\n      }\n    }\n\n    if (prevSize.height !== height || prevSize.width !== width) {\n      stableValuesRef.current.prevSize = { height, width };\n\n      onResize({\n        height,\n        width\n      });\n    }\n  });\n\n  useLayoutEffect(() => {\n    if (rootElement === null) {\n      return;\n    }\n\n    const parentNode = rootElement.parentNode;\n    if (\n      parentNode === null ||\n      parentNode.ownerDocument === null ||\n      parentNode.ownerDocument.defaultView === null ||\n      !(parentNode instanceof parentNode.ownerDocument.defaultView.HTMLElement)\n    ) {\n      return;\n    }\n\n    stableValuesRef.current.parentNode = parentNode;\n\n    const onResizeStable = onResizeStableRef.current;\n\n    // Use ResizeObserver from the same context where parentNode (which we will observe) was defined\n    // Using just global can result into onResize events not being emitted in cases with multiple realms\n    const ResizeObserver = parentNode.ownerDocument.defaultView.ResizeObserver;\n    if (ResizeObserver != null) {\n      let timeoutId: NodeJS.Timeout;\n\n      const resizeObserver = new ResizeObserver(() => {\n        // Guard against \"ResizeObserver loop limit exceeded\" error;\n        // could be triggered if the state update causes the ResizeObserver handler to run long.\n        // See github.com/bvaughn/react-virtualized-auto-sizer/issues/55\n        timeoutId = setTimeout(onResizeStable, 0);\n      });\n\n      resizeObserver.observe(parentNode);\n\n      return () => {\n        if (timeoutId) {\n          clearTimeout(timeoutId);\n        }\n\n        resizeObserver.disconnect();\n      };\n    } else {\n      // Defer requiring resize handler in order to support server-side rendering.\n      // See github.com/bvaughn/react-virtualized-auto-sizer/issues/41\n      const detectElementResize = createDetectElementResize(nonce);\n      detectElementResize.addResizeListener(parentNode, onResizeStable);\n\n      return () => {\n        detectElementResize.removeResizeListener(parentNode, onResizeStable);\n      };\n    }\n  }, [nonce, rootElement]);\n}\n","import { createElement, memo, useMemo, useState } from \"react\";\nimport { useSize } from \"../hooks/useSize\";\nimport type { Size } from \"../types\";\nimport type { AutoSizerProps, ChildComponent, RenderProp } from \"./types\";\n\n/**\n * Measures the available width and height of its parent `HTMLElement` and passes those values as `width` and `height` props to its `children`.\n *\n * ℹ️ This component began as a fork of the [javascript-detect-element-resize](https://www.npmjs.com/package/javascript-detect-element-resize) package.\n */\nexport function AutoSizer({\n  box = \"content-box\",\n  className,\n  \"data-testid\": dataTestId,\n  id,\n  nonce,\n  onResize,\n  style,\n  tagName: TagName = \"div\",\n  ...props\n}: AutoSizerProps) {\n  let ChildComponent: ChildComponent | undefined = undefined;\n  let renderProp: RenderProp | undefined = undefined;\n  if (\"Child\" in props) {\n    ChildComponent = props.Child;\n  } else if (\"ChildComponent\" in props) {\n    ChildComponent = props.ChildComponent;\n  } else if (\"renderProp\" in props) {\n    renderProp = props.renderProp;\n  }\n\n  const [element, setElement] = useState<HTMLElement | null>(null);\n\n  const [height, setHeight] = useState<number | undefined>();\n  const [width, setWidth] = useState<number | undefined>();\n\n  useSize({\n    box,\n    nonce,\n    onResize: (nextSize: Size) => {\n      setHeight(nextSize.height);\n      setWidth(nextSize.width);\n\n      if (typeof onResize !== \"undefined\") {\n        onResize(nextSize);\n      }\n    },\n    rootElement: element\n  });\n\n  const MemoizedChildComponent = useMemo(\n    () => (ChildComponent ? memo(ChildComponent) : undefined),\n    [ChildComponent]\n  );\n\n  return createElement(\n    TagName,\n    {\n      className,\n      \"data-auto-sizer\": \"\",\n      \"data-testid\": dataTestId,\n      id,\n      ref: setElement,\n      style\n    },\n    MemoizedChildComponent\n      ? createElement(MemoizedChildComponent, { height, width })\n      : undefined,\n    renderProp ? renderProp({ height, width }) : undefined\n  );\n}\n"],"names":["windowObject","cancelFrame","requestFrame","TIMEOUT_DURATION","clearTimeoutFn","setTimeoutFn","cancelAnimationFrameFn","requestAnimationFrameFn","callback","animationFrameID","timeoutID","createDetectElementResize","nonce","animationKeyframes","animationName","animationStartEvent","animationStyle","checkTriggers","resetTriggers","scrollListener","attachEvent","element","triggers","expand","contract","expandChild","e","fn","animation","keyframeprefix","domPrefixes","startEvents","pfx","elm","createStyles","doc","css","head","style","elementStyle","expandTrigger","contractTrigger","useSize","box","onResize","rootElement","stableValuesRef","useRef","useLayoutEffect","onResizeStableRef","parentNode","prevSize","height","width","rect","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","paddingLeft","paddingRight","paddingTop","paddingBottom","onResizeStable","ResizeObserver","timeoutId","resizeObserver","detectElementResize","AutoSizer","className","dataTestId","id","TagName","props","ChildComponent","renderProp","setElement","useState","setHeight","setWidth","nextSize","MemoizedChildComponent","useMemo","memo","createElement"],"mappings":"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"}